From 2f5d00d1f3e32ec28fa0ab71d0074df8c2571973 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philipp=20H=C3=B6rist?= <philipp@hoerist.com>
Date: Mon, 25 Mar 2019 22:01:11 +0100
Subject: [PATCH] Refactor saving roster position

- Dont save roster position on Wayland
---
 gajim/common/helpers.py | 13 +++++++++++++
 gajim/roster_window.py  | 13 +++----------
 gajim/statusicon.py     | 18 ++++++++----------
 3 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/gajim/common/helpers.py b/gajim/common/helpers.py
index ba3baf72c0..2596121e7c 100644
--- a/gajim/common/helpers.py
+++ b/gajim/common/helpers.py
@@ -51,11 +51,13 @@ import nbxmpp
 from nbxmpp.stringprepare import nameprep
 import precis_i18n.codec  # pylint: disable=unused-import
 
+from gajim.common import app
 from gajim.common import caps_cache
 from gajim.common import configpaths
 from gajim.common.i18n import Q_
 from gajim.common.i18n import _
 from gajim.common.i18n import ngettext
+from gajim.common.const import Display
 
 log = logging.getLogger('gajim.c.helpers')
 
@@ -1534,3 +1536,14 @@ class AdditionalDataDict(collections.UserDict):
             del _dict[key]
         except KeyError:
             return
+
+
+def save_roster_position(window):
+    if not app.config.get('save-roster-position'):
+        return
+    if app.is_display(Display.WAYLAND):
+        return
+    x_pos, y_pos = window.get_position()
+    log.debug('Save roster position: %s %s', x_pos, y_pos)
+    app.config.set('roster_x-position', x_pos)
+    app.config.set('roster_y-position', y_pos)
diff --git a/gajim/roster_window.py b/gajim/roster_window.py
index d94c360d18..a150cac33a 100644
--- a/gajim/roster_window.py
+++ b/gajim/roster_window.py
@@ -59,6 +59,7 @@ from gajim.common import helpers
 from gajim.common import idle
 from gajim.common.exceptions import GajimGeneralException
 from gajim.common import i18n
+from gajim.common.helpers import save_roster_position
 from gajim.common.i18n import _
 from gajim.common.const import PEPEventType, AvatarSize, StyleAttr
 from gajim.common.dbus import location
@@ -2407,11 +2408,7 @@ class RosterWindow:
         if not app.config.get('quit_on_roster_x_button') and (
         (app.interface.systray_enabled and app.config.get('trayicon') != \
         'on_event') or app.config.get('allow_hide_roster')):
-            if app.config.get('save-roster-position'):
-                x, y = self.window.get_position()
-                log.debug('Save roster position (get_position): %s %s', x, y)
-                app.config.set('roster_x-position', x)
-                app.config.set('roster_y-position', y)
+            save_roster_position(self.window)
             if os.name == 'nt' or app.config.get('hide_on_roster_x_button'):
                 self.window.hide()
             else:
@@ -2436,11 +2433,7 @@ class RosterWindow:
         # in case show_roster_on_start is False and roster is never shown
         # window.window is None
         if self.window.get_window() is not None:
-            if app.config.get('save-roster-position'):
-                x, y = self.window.get_window().get_root_origin()
-                log.debug('Save roster position (get_root_origin): %s %s', x, y)
-                app.config.set('roster_x-position', x)
-                app.config.set('roster_y-position', y)
+            save_roster_position(self.window)
             width, height = self.window.get_size()
             app.config.set('roster_width', width)
             app.config.set('roster_height', height)
diff --git a/gajim/statusicon.py b/gajim/statusicon.py
index 343a5c66a6..36be23063d 100644
--- a/gajim/statusicon.py
+++ b/gajim/statusicon.py
@@ -30,6 +30,8 @@ from gajim import gtkgui_helpers
 from gajim.common import app
 from gajim.common import helpers
 from gajim.common.i18n import _
+from gajim.common.helpers import save_roster_position
+
 from gajim.gtk.single_message import SingleMessageWindow
 
 
@@ -371,18 +373,14 @@ class StatusIcon:
             # No pending events, so toggle visible/hidden for roster window
             if win.get_property('visible'):
                 if win.get_property('has-toplevel-focus') or os.name == 'nt':
-                    if app.config.get('save-roster-position'):
-                        x, y = win.get_position()
-                        app.config.set('roster_x-position', x)
-                        app.config.set('roster_y-position', y)
+                    save_roster_position(win)
                 win.hide() # else we hide it from VD that was visible in
             else:
-                if not win.get_property('visible'):
-                    win.show_all()
-                    if app.config.get('save-roster-position'):
-                        gtkgui_helpers.move_window(win,
-                            app.config.get('roster_x-position'),
-                            app.config.get('roster_y-position'))
+                win.show_all()
+                if app.config.get('save-roster-position'):
+                    gtkgui_helpers.move_window(win,
+                        app.config.get('roster_x-position'),
+                        app.config.get('roster_y-position'))
                 if not app.config.get('roster_window_skip_taskbar'):
                     win.set_property('skip-taskbar-hint', False)
                 win.present_with_time(Gtk.get_current_event_time())
-- 
GitLab