2009-10-21 10 views
3

J'ai créé un widget composite avec widget webkit_webview stocké dans une fenêtre scrollwed avec un widget de base gtkvbox. Comment faire pour que le widget gtkvbox de base soit actif chaque fois que l'un des widgets contenus est activé? Spécifiquement, j'essaye d'ajouter l'accélérateur qui devrait seulement être actif quand le widget composé est dans le foyer. Pour déterminer si le widget composite est en focus, j'appelle gtk_widget_get_focused(), et ensuite je parcours le widget des parents pour trouver le widget de base. Il semble qu'il devrait y avoir un meilleur moyen.gtk widget composite focus

Répondre

1

Un seul widget à la fois peut avoir le focus d'entrée global, qui est le focus que l'utilisateur voit sur l'écran et où les frappes apparaissent. Si gtk_widget_has_focus(widget) renvoie TRUE, widget a le focus d'entrée globale. Vous ne pouvez pas avoir le webview et la vbox ont le focus d'entrée global en même temps. Ce que vous pouvez faire est d'appeler gtk_container_get_focus_child() sur le parent du widget composite, et si la valeur de retour est votre widget composite, alors le focus est quelque part dans le widget composite. Vous pouvez également vous connecter aux signaux "focus-in-event" et "focus-out-event" sur le widget composite. Je suis assez sûr que ceux-ci vous informeront lorsque l'un des widgets contenus gagne ou perd le focus. (N'oubliez pas d'appeler d'abord le gdk_window_set_events(widget->window, gdk_window_get_events(widget->window) | GDK_FOCUS_CHANGE_MASK) sur votre widget, comme expliqué dans les documents GTK.)