簡體   English   中英

Gtk:將焦點發送到頂級窗口,而不會丟失第一個頂級窗口

[英]Gtk: send focus to a toplevel window without losing the first toplevel window

情況如下:

1)我有兩個頂級窗口,A和B

2)A在B前面

如何在將窗口A保持在B前面的同時,將焦點發送到窗口B?

如果您不介意它不是直接的,則可以將鍵盤事件從頂層窗口發送到它后面的窗口。 當然,假定這兩個窗口都是您創建的,而不是編寫程序在后台懸停並讀取在單獨程序上使用的鍵盤輸入。

我假設您同時控制兩個窗口,並且這是在X11系統(如Linux)上。 如果沒有,那就更具挑戰性。 我已經在單個應用程序中完成了類似的操作,下面是一些回憶。

您可能已經發現不能只使用gtk_widget_grab_focus()來做到這一點。 這僅適用於在窗口本身具有焦點時確定窗口中的哪個窗口小部件具有焦點。

是X11,它根據窗口層次結構,來自窗口管理器的信息等來確定哪個窗口獲取鍵盤事件。但是,您可以通過GDK隨意查找以獲得所需的結果。

您將必須了解GDK事件傳播 ,並可能閱讀了一些GDK源。 但我相信,通常來說,您需要做的是:

  1. 使用gdk_event_handler_set()安裝您自己的事件處理程序。 初始化GTK +之后,需要執行此操作,並將其鏈接到gtk_main_do_event()。
  2. 當您收到鍵盤事件(GdkEventKey)時,請查看X事件結構。 如果它具有窗口A的XID,則將其替換為窗口B的XID,並將其傳遞給GTK +。 您可能需要復制事件,而不修改原始事件。

如果Windows屬於不同的應用程序,則可以查看gdk_event_send_client_message(),但我從未使用過它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM