[kupfer] Added option for "Hide Kupfer when focus is lost"
- From: Ulrik Sverdrup <usverdrup src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [kupfer] Added option for "Hide Kupfer when focus is lost"
- Date: Mon, 23 Aug 2010 19:29:34 +0000 (UTC)
commit c01a9c7ede246d786da474f7a7869b1e8f0d2e46
Author: Grigory Javadyan <grigoryj ovi com>
Date: Mon Aug 23 21:16:24 2010 +0200
Added option for "Hide Kupfer when focus is lost"
Listen to focus-out events on the main window, and if the mouse
pointer is outside Kupfer's window, we hide Kupfer.
Co-authored-by: Ulrik
data/defaults.cfg | 1 +
data/preferences.ui | 40 ++++++++++++++++++++++++++++++----------
kupfer/core/settings.py | 7 +++++++
kupfer/ui/browser.py | 20 ++++++++++++++++++++
kupfer/ui/preferences.py | 6 ++++++
5 files changed, 64 insertions(+), 10 deletions(-)
---
diff --git a/data/defaults.cfg b/data/defaults.cfg
index 2c7d9a7..c3da557 100644
--- a/data/defaults.cfg
+++ b/data/defaults.cfg
@@ -12,6 +12,7 @@ Keybinding = <Ctrl>space
MagicKeybinding =
ShowStatusIcon = True
UseCommandKeys = True
+CloseOnUnfocus = True
[Keybindings]
activate = <Alt>a
diff --git a/data/preferences.ui b/data/preferences.ui
index 98d4e66..459d61f 100644
--- a/data/preferences.ui
+++ b/data/preferences.ui
@@ -77,14 +77,37 @@
<property name="top_padding">6</property>
<property name="left_padding">12</property>
<child>
- <object class="GtkCheckButton" id="checkstatusicon">
- <property name="label" translatable="yes">Show icon in notification area</property>
+ <object class="GtkVBox" id="vbox9">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="on_checkstatusicon_toggled"/>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkCheckButton" id="checkstatusicon">
+ <property name="label" translatable="yes">Show icon in notification area</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_checkstatusicon_toggled"/>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="checkcloseonunfocus">
+ <property name="label" translatable="yes">Hide Kupfer when focus is lost</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_checkcloseonunfocus_toggled"/>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
</child>
</object>
@@ -102,9 +125,6 @@
<property name="position">1</property>
</packing>
</child>
- <child>
- <placeholder/>
- </child>
</object>
<packing>
<property name="position">0</property>
diff --git a/kupfer/core/settings.py b/kupfer/core/settings.py
index e09195d..090e077 100644
--- a/kupfer/core/settings.py
+++ b/kupfer/core/settings.py
@@ -36,6 +36,7 @@ class SettingsController (gobject.GObject, pretty.OutputMixin):
"magickeybinding": "",
"showstatusicon" : True,
"usecommandkeys" : True,
+ "closeonunfocus" : True,
},
"Directories" : { "direct" : default_directories, "catalog" : (), },
"DeepDirectories" : { "direct" : (), "catalog" : (), "depth" : 1, },
@@ -249,6 +250,12 @@ class SettingsController (gobject.GObject, pretty.OutputMixin):
return self.set_plugin_config(plugin_id, key,
value, value_type=strbool)
+ def get_close_on_unfocus(self):
+ return self.get_config("Kupfer", "closeonunfocus")
+
+ def set_close_on_unfocus(self, val):
+ return self._set_config("Kupfer", "closeonunfocus", val)
+
def get_keybinding(self):
"""Convenience: Kupfer keybinding as string"""
return self.get_config("Kupfer", "keybinding")
diff --git a/kupfer/ui/browser.py b/kupfer/ui/browser.py
index dcfe9dd..b9b1a6e 100644
--- a/kupfer/ui/browser.py
+++ b/kupfer/ui/browser.py
@@ -1406,6 +1406,7 @@ class WindowController (pretty.OutputMixin):
"""
"""
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
+ self.window.add_events(gtk.gdk.BUTTON_PRESS_MASK)
self.window_position = -1, -1
self._latest_window_position = None
@@ -1498,6 +1499,7 @@ class WindowController (pretty.OutputMixin):
self.window.connect("delete-event", self._close_window)
self.window.connect("configure-event", self._window_frame_event)
+ self.window.connect("focus-out-event", self._lost_focus)
widget = self.interface.get_widget()
widget.show()
@@ -1547,6 +1549,24 @@ class WindowController (pretty.OutputMixin):
setctl.set_session_position("main", self.window_position)
self._latest_window_position = window_pos
+ def _lost_focus(self, window, event):
+ setctl = settings.GetSettingsController()
+ if setctl.get_close_on_unfocus():
+ # Since focus-out-event is triggered even
+ # when we click inside the window, we'll
+ # do some additional math to make sure that
+ # that window won't close if teh mouse pointer
+ # is over it. Looks like a dirty hack, but a
+ # similar solution is used in gnome-do, so probably
+ # there's no better way of handling this.
+ # Any impovements are welcome.
+ x, y, mods = window.get_screen().get_root_window().get_pointer()
+ w_x, w_y = window.get_position()
+ w_w, w_h = window.get_size()
+ if (x not in xrange(w_x, w_x + w_w) or
+ y not in xrange(w_y, w_y + w_h)):
+ self._window_hide_timer.set_ms(50, self.put_away)
+
def _move_window_to_position(self):
self._latest_window_position = None
pos = self.window.get_position()
diff --git a/kupfer/ui/preferences.py b/kupfer/ui/preferences.py
index 167fa0a..ce57104 100644
--- a/kupfer/ui/preferences.py
+++ b/kupfer/ui/preferences.py
@@ -104,6 +104,7 @@ class PreferencesWindowController (pretty.OutputMixin):
self.buttonremovedirectory = builder.get_object("buttonremovedirectory")
checkautostart = builder.get_object("checkautostart")
checkstatusicon = builder.get_object("checkstatusicon")
+ checkcloseonunfocus = builder.get_object("checkcloseonunfocus")
checkusecommandkeys = builder.get_object("checkusecommandkeys")
self.entry_plugins_filter = builder.get_object('entry_plugins_filter')
self.keybindings_list_parent = builder.get_object('keybindings_list_parent')
@@ -115,6 +116,7 @@ class PreferencesWindowController (pretty.OutputMixin):
checkautostart.set_active(self._get_should_autostart())
checkstatusicon.set_active(setctl.get_show_status_icon())
checkusecommandkeys.set_active(setctl.get_use_command_keys())
+ checkcloseonunfocus.set_active(setctl.get_close_on_unfocus())
# Plugin List
columns = [
@@ -732,6 +734,10 @@ class PreferencesWindowController (pretty.OutputMixin):
setctl = settings.GetSettingsController()
setctl.set_use_command_keys(widget.get_active())
+ def on_checkcloseonunfocus_toggled(self, widget):
+ setctl = settings.GetSettingsController()
+ setctl.set_close_on_unfocus(widget.get_active())
+
def dir_table_cursor_changed(self, table):
curpath, curcol = table.get_cursor()
if not curpath or not self.dir_store:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]