diff --git a/g13gui/g13gui/main.py b/g13gui/g13gui/main.py index 7a85a59..de0ac7b 100644 --- a/g13gui/g13gui/main.py +++ b/g13gui/g13gui/main.py @@ -1,7 +1,6 @@ #!/usr/bin/python import gi -import queue import g13gui.ui as ui from g13gui.model.prefsstore import PreferencesStore @@ -18,11 +17,6 @@ if __name__ == '__main__': manager = Manager(prefs) manager.start() - queue = queue.Queue() - - win = ui.MainWindow(queue, prefs) - win.show_all() - - indicator = ui.AppIndicator(prefs, win) + indicator = ui.AppIndicator(prefs) Gtk.main() diff --git a/g13gui/g13gui/model/prefs.py b/g13gui/g13gui/model/prefs.py index d31b3c7..07ea2d3 100644 --- a/g13gui/g13gui/model/prefs.py +++ b/g13gui/g13gui/model/prefs.py @@ -2,6 +2,8 @@ import traceback +from builtins import property + from g13gui.common import VERSION from g13gui.model.bindingprofile import BindingProfile from g13gui.observer.subject import Subject @@ -15,12 +17,21 @@ class Preferences(Subject): def __init__(self, dict=None): self._profiles = {} self._selectedProfile = None + self._showWindowOnStart = True if dict: self.loadFromDict(dict) else: self.initDefaultProfile() + @property + def showWindowOnStart(self): + return self._showWindowOnStart + + @showWindowOnStart.setter + def showWindowOnStart(self, value): + self.setProperty('showWindowOnStart', value) + def profiles(self, profileName=None): if profileName: return self._profiles[profileName] @@ -85,6 +96,7 @@ class Preferences(Subject): def saveToDict(self): return { 'version': VERSION, + 'showWindowOnStart': self._showWindowOnStart, 'profiles': dict([(name, profile.saveToDict()) for name, profile in self._profiles.items()]), 'selectedProfile': self._selectedProfile } @@ -100,6 +112,7 @@ class Preferences(Subject): self._addProfile(name, BindingProfile(profile)) self._setSelectedProfile(dict['selectedProfile']) + self._showWindowOnStart = dict['showWindowOnStart'] except (Exception) as err: print('Unable to initialize from dict: %s' % err) diff --git a/g13gui/g13gui/ui/appindicator.py b/g13gui/g13gui/ui/appindicator.py index 13a999d..e0dd10e 100644 --- a/g13gui/g13gui/ui/appindicator.py +++ b/g13gui/g13gui/ui/appindicator.py @@ -3,6 +3,7 @@ import gi from g13gui.common import PROGNAME from g13gui.observer.gtkobserver import GtkObserver from g13gui.observer.subject import ChangeType +from g13gui.ui.mainwindow import MainWindow gi.require_version('Gtk', '3.0') gi.require_version('AppIndicator3', '0.1') @@ -11,13 +12,13 @@ from gi.repository import AppIndicator3 as indicator class AppIndicator(GtkObserver): - def __init__(self, prefs, mainWindow): + def __init__(self, prefs): GtkObserver.__init__(self) self._initIndicator() self._prefs = prefs - self._mainWindow = mainWindow + self._mainWindow = None self._menu = Gtk.Menu() self._menuItems = [] self._indicator.set_menu(self._menu) @@ -27,6 +28,9 @@ class AppIndicator(GtkObserver): self.changeTrigger(self.onSelectedProfileChanged, keys={'selectedProfile'}) + if self._prefs.showWindowOnStart: + self.showMainWindow(None) + self._rebuildMenu() def _initIndicator(self): @@ -77,7 +81,13 @@ class AppIndicator(GtkObserver): self._menu.show_all() self._rebuilding = False + def onMainWindowHidden(self, win): + del self._mainWindow + self._mainWindow = None + def showMainWindow(self, menuItem): + self._mainWindow = MainWindow(self._prefs) + self._mainWindow.connect('hide', self.onMainWindowHidden) self._mainWindow.show_all() def changeProfile(self, menuItem): diff --git a/g13gui/g13gui/ui/g13button.py b/g13gui/g13gui/ui/g13button.py index 43c1703..cb6ee67 100644 --- a/g13gui/g13gui/ui/g13button.py +++ b/g13gui/g13gui/ui/g13button.py @@ -29,6 +29,11 @@ class G13Button(Gtk.MenuButton, GtkObserver): self.set_can_default(False) self.updateProfileRegistration() + self.connect('show', self.onShown) + + def onShown(self, widget): + self.updateBindingDisplay() + def onSelectedProfileChanged(self, subject, changeType, key, data): self.updateProfileRegistration() self.updateBindingDisplay() diff --git a/g13gui/g13gui/ui/mainwindow.py b/g13gui/g13gui/ui/mainwindow.py index 9128dd1..ccf65ef 100644 --- a/g13gui/g13gui/ui/mainwindow.py +++ b/g13gui/g13gui/ui/mainwindow.py @@ -12,7 +12,7 @@ from gi.repository import Gtk, Gdk, GObject class MainWindow(Gtk.Window, GtkObserver): - def __init__(self, workerQueue, prefs): + def __init__(self, prefs): Gtk.Window.__init__(self) GtkObserver.__init__(self) @@ -22,7 +22,6 @@ class MainWindow(Gtk.Window, GtkObserver): geometry.max_height = 480 self.set_geometry_hints(None, geometry, Gdk.WindowHints.MAX_SIZE) - self._workerQueue = workerQueue self._prefs = prefs self._prefs.registerObserver(self, 'selectedProfile') self._prefs.selectedProfile().registerObserver(self)