From ad7a948b6a475cc07d81543825831a1fae0a0a2e Mon Sep 17 00:00:00 2001 From: andrecbarros Date: Wed, 25 Nov 2020 19:22:26 -0300 Subject: [PATCH 1/2] Add files via upload --- devdocs_desktop.py | 54 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/devdocs_desktop.py b/devdocs_desktop.py index 6051326..7fe6939 100755 --- a/devdocs_desktop.py +++ b/devdocs_desktop.py @@ -1,4 +1,4 @@ -#! /usr/bin/python +#! /usr/bin/python3 import os import gi @@ -41,6 +41,7 @@ class DevdocsDesktop: + iconified = False def __init__(self): GLib.set_prgname('devdocs-desktop') @@ -112,6 +113,13 @@ def __init__(self): self.finder.connect('failed-to-find-text', self.on_finder_failed_to_find_text) self.window = self.main.get_object('window_main') + self.window.connect("window-state-event", self.on_windowStateEvent) + + self.statusIcon = Gtk.StatusIcon() + self.statusIcon.set_from_icon_name("devdocs-desktop") + self.statusIcon.connect("activate", self.statusIcon_activate) + self.statusIcon.connect("button-press-event", self.on_statusIcon_click) + self.window.show_all() self.create_settings_path() @@ -128,6 +136,47 @@ def run(self): def quit(self): Gtk.main_quit() + def on_windowStateEvent(self, widget, event): + if (event.changed_mask & Gdk.WindowState.ICONIFIED): + if (event.new_window_state & Gdk.WindowState.ICONIFIED): + # minimize visible widow. We hide the window to remove it + # from the active tasks windows, a click the tray icon will + # bring it back + self.window.hide() + self.iconified = True + else: + # don't do anything here. The call from hide() above causes a + # new event that ends here. And calling show() now will result + # in a loop + pass + + def statusIcon_activate(self, data): + self.window.deiconify() + self.window.present() # present the window on the active desktop + self.iconified = False + + def on_statusIcon_click(self, data, event): + # restore the hidden window on a click on the tray icon + if (self.iconified == True): + self.window.deiconify() + self.window.present() + self.iconified = False + else: + self.window.hide() + self.iconified = True + return True # dont propagate the event + + def trayAccelerator(self, *data): + # when Cntrl+Down or Cntrl+Up is pressed, iconify + if (self.iconified == True): # actually, only False get catched here + self.window.deiconify() + self.window.present() + self.iconified = False + else: + self.window.hide() + self.iconified = True + return True + def search_term(self, term): self.search = term self.header_search.set_text(self.search) @@ -244,6 +293,9 @@ def set_window_accel_groups(self): group.connect(Gdk.keyval_from_name('KP_0'), ctrl, 0, self.on_zoom_reset_accel_pressed) group.connect(Gdk.keyval_from_name('0'), ctrl, 0, self.on_zoom_reset_accel_pressed) + group.connect(Gdk.keyval_from_name('Down'), ctrl, 0, self.trayAccelerator) # Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.META_MASK + group.connect(Gdk.keyval_from_name('Up'), ctrl, 0, self.trayAccelerator) # Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.META_MASK + self.window.add_accel_group(group) def sync_header_search(self): From de13ab43c5b71a639aced20004f625dc03d76279 Mon Sep 17 00:00:00 2001 From: andrecbarros Date: Fri, 27 Nov 2020 13:10:25 -0300 Subject: [PATCH 2/2] Update devdocs_desktop.py Modify iconify shortcut to be Ctrl+Alt+PgUp or Ctrl+Alt+PgDn --- devdocs_desktop.py | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/devdocs_desktop.py b/devdocs_desktop.py index 7fe6939..c35a12e 100755 --- a/devdocs_desktop.py +++ b/devdocs_desktop.py @@ -1,4 +1,4 @@ -#! /usr/bin/python3 +#! /usr/bin/python import os import gi @@ -166,17 +166,6 @@ def on_statusIcon_click(self, data, event): self.iconified = True return True # dont propagate the event - def trayAccelerator(self, *data): - # when Cntrl+Down or Cntrl+Up is pressed, iconify - if (self.iconified == True): # actually, only False get catched here - self.window.deiconify() - self.window.present() - self.iconified = False - else: - self.window.hide() - self.iconified = True - return True - def search_term(self, term): self.search = term self.header_search.set_text(self.search) @@ -293,8 +282,8 @@ def set_window_accel_groups(self): group.connect(Gdk.keyval_from_name('KP_0'), ctrl, 0, self.on_zoom_reset_accel_pressed) group.connect(Gdk.keyval_from_name('0'), ctrl, 0, self.on_zoom_reset_accel_pressed) - group.connect(Gdk.keyval_from_name('Down'), ctrl, 0, self.trayAccelerator) # Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.META_MASK - group.connect(Gdk.keyval_from_name('Up'), ctrl, 0, self.trayAccelerator) # Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.META_MASK + group.connect(Gdk.keyval_from_name('Prior'), ctrl | Gdk.ModifierType.MOD1_MASK, 0, self.on_PN_accel_pressed) + group.connect(Gdk.keyval_from_name('Next'), ctrl | Gdk.ModifierType.MOD1_MASK, 0, self.on_PN_accel_pressed) self.window.add_accel_group(group) @@ -345,6 +334,21 @@ def on_zoom_reset_accel_pressed(self, _group, _widget, _code, _modifier): self.set_zoom_level() self.write_settings_json('prefs', self.prefs) + def on_PN_accel_pressed(self, _group, _widget, _code, _modifier): + # when Cntrl+Meta+PgDown or Cntrl+Meta+PgUp is pressed, iconify + is_CM = (_modifier & Gdk.ModifierType.MODIFIER_MASK) == \ + (Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD1_MASK) + if is_CM: + if (self.iconified == True): # doesn't happen + self.window.deiconify() + self.window.present() + self.iconified = False + else: + self.window.hide() + self.iconified = True + return True + return False + def on_window_main_destroy(self, _event): self.quit()