Philipp Hörist pushed to branch master at gajim / gajim
Commits: 8a173c4f by lovetox at 2022-06-08T22:01:19+02:00 imprv: Main: Add methods to get current window state
- - - - - 3d99f93b by lovetox at 2022-06-08T22:01:19+02:00 fix: Hide instead of minimize when `Show on Startup` is used
- - - - - b7516ac8 by lovetox at 2022-06-08T22:01:19+02:00 imprv: Main: Separate minimize/hide
- Rename setting - Add hide()/show() - Move Minimize to Tray code to window-delete event
- - - - -
4 changed files:
- gajim/common/setting_values.py - gajim/gtk/main.py - gajim/gtk/status_icon.py - gajim/gtk/util.py
Changes:
===================================== gajim/common/setting_values.py ===================================== @@ -66,7 +66,7 @@ class _ACCOUNT_DEFAULT: 'hide_groupchat_banner', 'hide_groupchat_occupants_list', 'ignore_incoming_attention', - 'last_main_window_visible', + 'is_window_visible', 'log_contact_status_changes', 'minimize_on_window_delete', 'minimize_to_tray', @@ -227,7 +227,7 @@ class _ACCOUNT_DEFAULT: 'hide_groupchat_occupants_list': False, 'ignore_incoming_attention': False, 'key_up_lines': 25, - 'last_main_window_visible': True, + 'is_window_visible': True, 'last_save_dir': '', 'last_send_dir': '', 'last_sounds_dir': '',
===================================== gajim/gtk/main.py ===================================== @@ -33,6 +33,7 @@ from gajim.common import ged from gajim.common.client import Client from gajim.common.const import Direction +from gajim.common.const import Display from gajim.common.const import SimpleClientState from gajim.common.ged import EventHelper from gajim.common.helpers import ask_for_status_message @@ -53,8 +54,6 @@ from .types import ControlT from .builder import get_builder from .util import get_app_window -from .util import is_minimized -from .util import is_minimize_event from .util import get_key_theme from .util import resize_window from .util import restore_main_window_position @@ -156,11 +155,32 @@ def __init__(self) -> None: client.connect_signal('state-changed', self._on_client_state_changed)
+ def is_minimized(self) -> bool: + if app.is_display(Display.WAYLAND): + # There is no way to discover if a window is minimized on wayland + return False + + window = self.get_window() + assert window is not None + return bool(Gdk.WindowState.ICONIFIED & window.get_state()) + + def is_withdrawn(self) -> bool: + window = self.get_window() + assert window is not None + return bool(Gdk.WindowState.WITHDRAWN & window.get_state()) + + def hide(self) -> None: + save_main_window_position() + Gtk.ApplicationWindow.hide(self) + + def show(self) -> None: + restore_main_window_position() + self.present_with_time(Gtk.get_current_event_time()) + def minimize(self) -> None: self.iconify()
def unminimize(self) -> None: - restore_main_window_position() self.deiconify() self.present_with_time(Gtk.get_current_event_time())
@@ -171,15 +191,15 @@ def _prepare_window(self) -> None:
self.set_skip_taskbar_hint(not app.settings.get('show_in_taskbar'))
+ self.show_all() + show_main_window = app.settings.get('show_main_window_on_startup') if show_main_window == 'never': - self.minimize() + self.hide()
elif (show_main_window == 'last_state' and - not app.settings.get('last_main_window_visible')): - self.minimize() - - self.show_all() + not app.settings.get('is_window_visible')): + self.hide()
def _on_account_enabled(self, event: events.AccountEnabled) -> None: self._account_side_bar.add_account(event.account) @@ -404,7 +424,10 @@ def _on_window_delete(self, ) -> int:
if app.settings.get('minimize_on_window_delete'): - self.minimize() + if app.settings.get('minimize_to_tray'): + self.hide() + else: + self.minimize() return Gdk.EVENT_STOP
if not app.settings.get('confirm_on_window_delete'): @@ -441,13 +464,7 @@ def _on_window_state_changed(self, log.debug('Window state changed: ICONIFIED: %s, WITHDRAWN: %s', is_iconified, is_withdrawn)
- app.settings.set('last_main_window_visible', - not is_minimized(event)) - - if is_minimize_event(event) and app.settings.get('minimize_to_tray'): - save_main_window_position() - log.debug('Minimize to tray') - self.hide() + app.settings.set('is_window_visible', not is_withdrawn)
def _set_startup_finished(self) -> None: self._startup_finished = True
===================================== gajim/gtk/status_icon.py ===================================== @@ -189,10 +189,12 @@ def _on_toggle_window(self, _widget: Gtk.MenuItem) -> None: self._on_activate()
def _on_activate(self, *args: Any) -> None: - if app.settings.get('last_main_window_visible'): - app.window.hide() - else: + if app.window.is_minimized(): app.window.unminimize() + if app.window.is_withdrawn(): + app.window.show() + else: + app.window.hide()
@staticmethod def _on_preferences(_widget: Gtk.MenuItem) -> None:
===================================== gajim/gtk/util.py ===================================== @@ -773,17 +773,6 @@ def get_gtk_version() -> str: return gtk_ver
-def is_minimize_event(event: Gdk.EventWindowState) -> bool: - if Gdk.WindowState.ICONIFIED & event.changed_mask: - return bool(Gdk.WindowState.ICONIFIED & event.new_window_state) - return False - - -def is_minimized(event: Gdk.EventWindowState) -> bool: - minimized_states = Gdk.WindowState.ICONIFIED | Gdk.WindowState.WITHDRAWN - return bool(minimized_states & event.new_window_state) - - class EventHelper(CommonEventHelper): def __init__(self): CommonEventHelper.__init__(self)
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/f4e7a75b3749ed49994b922f0ede0732...