diff options
author | Dan Winship <danw@gnome.org> | 2011-08-05 12:28:34 -0400 |
---|---|---|
committer | Eitan Isaacson <eitan@monotonous.org> | 2011-08-12 09:19:40 +0200 |
commit | de6517b8d1bf16ec9ee87aacc96adf2d8c836870 (patch) | |
tree | 68a36bcd008190ca4d697aa1a477746bdfe79fa8 | |
parent | cc324bf941b3856c90c0c42753433ab0ceb4bfa7 (diff) | |
download | caribou-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.
-rw-r--r-- | modules/gtk3/caribou-gtk-module.vala | 17 |
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 (); |