From ef3d59d87bfa9ad5f8c4253d51d4316f3cccd9e2 Mon Sep 17 00:00:00 2001 From: Romain Failliot Date: Sun, 16 Apr 2023 11:35:36 -0400 Subject: [PATCH] fix: don't save window_x/y anymore As per GNOME HIG, let the DE position the window, but continue to store the window width and height --- src/diffuse/window.py | 48 +++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/diffuse/window.py b/src/diffuse/window.py index 58b1073..78c45f6 100644 --- a/src/diffuse/window.py +++ b/src/diffuse/window.py @@ -682,24 +682,18 @@ class DiffuseWindow(Gtk.ApplicationWindow): # number of created viewers (used to label some tabs) self.viewer_count = 0 - # get monitor resolution - monitor_geometry = Gdk.Display.get_default().get_monitor(0).get_geometry() - # state information that should persist across sessions self.bool_state = { 'window_maximized': False, 'search_matchcase': False, 'search_backwards': False } - self.int_state = {'window_width': 1024, 'window_height': 768} - self.int_state['window_x'] = max( - 0, - (monitor_geometry.width - self.int_state['window_width']) / 2 - ) - self.int_state['window_y'] = max( - 0, - (monitor_geometry.height - self.int_state['window_height']) / 2 - ) + self.int_state = { + 'window_width': 1024, + 'window_height': 768, + } + + # window state signals self.connect('configure-event', self.configure_cb) self.connect('window-state-event', self.window_state_cb) @@ -989,15 +983,13 @@ class DiffuseWindow(Gtk.ApplicationWindow): # read the state directly instead of using window_maximized as the order # of configure/window_state events is undefined if (widget.get_window().get_state() & Gdk.WindowState.MAXIMIZED) == 0: - self.int_state['window_x'], self.int_state['window_y'] = widget.get_window().get_root_origin() # noqa: E501 self.int_state['window_width'] = event.width self.int_state['window_height'] = event.height # record the window's maximized state - def window_state_cb(self, window, event): - self.bool_state['window_maximized'] = ( - (event.new_window_state & Gdk.WindowState.MAXIMIZED) != 0 - ) + def window_state_cb(self, widget: Gtk.Widget, event: Gdk.EventWindowState) -> None: + is_maximized = (event.new_window_state & Gdk.WindowState.MAXIMIZED) != 0 + self.bool_state['window_maximized'] = is_maximized # load state information that should persist across sessions def load_state(self, statepath: str) -> None: @@ -1006,16 +998,22 @@ class DiffuseWindow(Gtk.ApplicationWindow): f = open(statepath, 'r') ss = utils.readlines(f) f.close() + for j, s in enumerate(ss): try: a = shlex.split(s, True) - if len(a) > 0: - if len(a) == 2 and a[0] in self.bool_state: - self.bool_state[a[0]] = (a[1] == 'True') - elif len(a) == 2 and a[0] in self.int_state: - self.int_state[a[0]] = int(a[1]) - else: - raise ValueError() + if len(a) == 0: + continue + if len(a) != 2: + raise ValueError() + + (key, value) = a + if key in self.bool_state: + self.bool_state[key] = (value == 'True') + elif key in self.int_state: + self.int_state[key] = int(value) + else: + raise ValueError() except ValueError: # this may happen if the state was written by a # different version -- don't bother the user @@ -1024,7 +1022,6 @@ class DiffuseWindow(Gtk.ApplicationWindow): # bad $HOME value? -- don't bother the user utils.logDebug(f'Error reading {statepath}.') - self.move(self.int_state['window_x'], self.int_state['window_y']) self.resize(self.int_state['window_width'], self.int_state['window_height']) if self.bool_state['window_maximized']: self.maximize() @@ -1038,6 +1035,7 @@ class DiffuseWindow(Gtk.ApplicationWindow): for k, v in self.int_state.items(): ss.append(f'{k} {v}\n') ss.sort() + f = open(statepath, 'w') f.write(f'# This state file was generated by {constants.APP_NAME} {constants.VERSION}.\n\n') # noqa: E501 for s in ss: