2009-10-21 59 views
3

我創建了一個複合小部件,其中webkit_webview小部件存儲在帶有gtkvbox基本小部件的scrollwed窗口中。如果任何包含的小部件具有焦點,那麼如何使基本gtkvbox小部件處於焦點狀態?具體來說,我正在嘗試添加只有在複合控件處於焦點時才處於活動狀態的加速器。要確定複合控件是否處於焦點狀態,我調用gtk_widget_get_focused(),然後遍歷控件父項來查找基礎控件。似乎應該有更好的方法。gtk複合小部件焦點

回答

1

一次只有一個小部件可以具有全局輸入焦點,這是用戶在屏幕上看到的焦點以及擊鍵的出現位置。如果gtk_widget_has_focus(widget)返回TRUE那麼widget具有全局輸入焦點。您不能讓webview和vbox同時擁有全局輸入焦點。

你可以做的是在複合控件的父級上調用gtk_container_get_focus_child(),如果返回值是你的複合控件,那麼焦點位於複合控件的某個位置。

或者您可以連接到複合小部件上的"focus-in-event""focus-out-event"信號。我相當肯定,當其中一個包含的小部件獲得或失去焦點時,它們會通知您。 (請記得先在你的小部件上打電話gdk_window_set_events(widget->window, gdk_window_get_events(widget->window) | GDK_FOCUS_CHANGE_MASK),正如GTK文檔中所解釋的那樣)。