Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions devdocs_desktop.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@


class DevdocsDesktop:
iconified = False

def __init__(self):
GLib.set_prgname('devdocs-desktop')
Expand Down Expand Up @@ -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()
Expand All @@ -128,6 +136,36 @@ 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 search_term(self, term):
self.search = term
self.header_search.set_text(self.search)
Expand Down Expand Up @@ -244,6 +282,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('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)

def sync_header_search(self):
Expand Down Expand Up @@ -293,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()

Expand Down