summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2011-08-05 12:28:34 -0400
committerEitan Isaacson <eitan@monotonous.org>2011-08-12 09:19:40 +0200
commitde6517b8d1bf16ec9ee87aacc96adf2d8c836870 (patch)
tree68a36bcd008190ca4d697aa1a477746bdfe79fa8 /modules
parentcc324bf941b3856c90c0c42753433ab0ceb4bfa7 (diff)
downloadcaribou-de6517b8d1bf16ec9ee87aacc96adf2d8c836870.tar.gz
connect to both notify["has-toplevel-focus"] and set_focus
the former tells us when a new window has been focused, the latter tells us when the focus changes from one widget to another within a window.
Diffstat (limited to 'modules')
-rw-r--r--modules/gtk3/caribou-gtk-module.vala17
1 files changed, 12 insertions, 5 deletions
diff --git a/modules/gtk3/caribou-gtk-module.vala b/modules/gtk3/caribou-gtk-module.vala
index 46a76ce..4441f97 100644
--- a/modules/gtk3/caribou-gtk-module.vala
+++ b/modules/gtk3/caribou-gtk-module.vala
@@ -38,19 +38,26 @@ namespace Caribou {
toplevels = Gtk.Window.list_toplevels ();
foreach (Gtk.Window window in toplevels) {
if (!windows.lookup (window)) {
- window.notify["has-toplevel-focus"].connect (has_top_level_focus_changed);
+ window.notify["has-toplevel-focus"].connect (toplevel_focus_changed);
+ window.set_focus.connect (window_focus_changed);
window.destroy.connect (() => { windows.remove (window); });
windows.insert (window, true);
}
}
}
- private void has_top_level_focus_changed (Object obj, ParamSpec prop) {
+ private void toplevel_focus_changed (Object obj, ParamSpec prop) {
Gtk.Window window = (Gtk.Window) obj;
- if (!window.has_toplevel_focus)
- return;
+ if (window.has_toplevel_focus)
+ do_focus_change (window.get_focus ());
+ }
+
+ private void window_focus_changed (Gtk.Window window,
+ Gtk.Widget? widget) {
+ do_focus_change (widget);
+ }
- Gtk.Widget? widget = window.get_focus ();
+ private void do_focus_change (Gtk.Widget? widget) {
uint32 timestamp = Gtk.get_current_event_time ();
if (widget != null && (widget is Gtk.Entry || widget is Gtk.TextView) && widget is Gtk.Editable) {
Gdk.Window current_window = widget.get_window ();