Philipp Hörist pushed to branch newcontrol at gajim / gajim
Commits: f6b4791f by lovetox at 2022-08-03T21:58:45+02:00 fix: Make Roster menu actions work again
- - - - - 3a57d37b by lovetox at 2022-08-03T22:01:27+02:00 cs: fix pyright error
- - - - -
4 changed files:
- gajim/gtk/chat_stack.py - gajim/gtk/const.py - gajim/gtk/main.py - gajim/gtk/roster.py
Changes:
===================================== gajim/gtk/chat_stack.py ===================================== @@ -208,7 +208,9 @@ def show_chat(self, account: str, jid: JID) -> None: self.set_visible_child_name('controls')
if old_primary_clipboard is not None: - GLib.idle_add(clipboard.set_text, old_primary_clipboard, -1) + GLib.idle_add(clipboard.set_text, # pyright: ignore + old_primary_clipboard, + -1)
GLib.idle_add(self._message_action_box.msg_textview.grab_focus)
===================================== gajim/gtk/const.py ===================================== @@ -224,8 +224,6 @@ def __str__(self): ('set-encryption', 's', 'disabled', False), ('send-chatstate', 's', 'disabled', False), ('send-marker', 'b', False, False), - ('sort-by-show', 'b', 'app-setting:showoffline', True), - ('show-offline', 'b', 'app-setting:sort_by_show_in_roster', True), ]
===================================== gajim/gtk/main.py ===================================== @@ -80,6 +80,7 @@ def __init__(self) -> None:
self._add_actions() self._add_actions2() + self._add_stateful_actions()
self._startup_finished: bool = False
@@ -327,6 +328,25 @@ def _add_actions(self) -> None: act.connect('activate', func) self.add_action(act)
+ def _add_stateful_actions(self) -> None: + action = Gio.SimpleAction.new_stateful( + 'show-offline', + None, + GLib.Variant('b', app.settings.get('showoffline'))) + + action.connect('change-state', self._on_show_offline) + + self.add_action(action) + + action = Gio.SimpleAction.new_stateful( + 'sort-by-show', + None, + GLib.Variant('b', app.settings.get('sort_by_show_in_roster'))) + + action.connect('change-state', self._on_sort_by_show) + + self.add_action(action) + def _add_actions2(self) -> None: for action, variant_type, enabled in MAIN_WIN_ACTIONS: if variant_type is not None: @@ -336,14 +356,9 @@ def _add_actions2(self) -> None: self.add_action(act)
for action, variant_type, default, enabled in MAIN_WIN_STATEFUL_ACTIONS: - - if isinstance(default, str) and default.startswith('app-setting:'): - setting = default.removeprefix('app-setting:') - default = app.settings.get(setting) - action = Gio.SimpleAction.new_stateful( action, - GLib.VariantType(variant_type), + None, GLib.Variant(variant_type, default)) action.set_enabled(enabled) self.add_action(action) @@ -440,6 +455,20 @@ def _on_action(self,
return None
+ def _on_show_offline(self, + action: Gio.SimpleAction, + value: GLib.Variant) -> None: + + action.set_state(value) + app.settings.set('showoffline', value.get_boolean()) + + def _on_sort_by_show(self, + action: Gio.SimpleAction, + value: GLib.Variant) -> None: + + action.set_state(value) + app.settings.set('sort_by_show_in_roster', value.get_boolean()) + def _toggle_chat_list(self) -> None: chat_list_stack = self._chat_page.get_chat_list_stack() chat_list = chat_list_stack.get_current_chat_list()
===================================== gajim/gtk/roster.py ===================================== @@ -133,6 +133,10 @@ def __init__(self, account: str) -> None: self._filter_enabled = False self._filter_string = ''
+ app.settings.connect_signal('showoffline', self._on_setting_changed) + app.settings.connect_signal('sort_by_show_in_roster', + self._on_setting_changed) + self._connect_actions() self._initial_draw()
@@ -144,22 +148,12 @@ def _connect_actions(self): (f'{self._account}-remove-contact', self._on_remove_contact), ]
- win_actions = [ - ('show-offline', self._on_show_offline), - ('sort-by-show', self._on_sort_by_show), - ] - for action in app_actions: action_name, func = action action = app.app.lookup_action(action_name) assert action is not None action.connect('activate', func)
- for action in win_actions: - action_name, func = action - action = app.window.get_action(action_name) - action.connect('change-state', func) - def _get_contact(self, jid: str) -> types.BareContact: return self._client.get_module('Contacts').get_contact(jid)
@@ -268,20 +262,7 @@ def _on_query_tooltip(self, tooltip.set_custom(widget) return value
- def _on_show_offline(self, - action: Gio.SimpleAction, - value: Optional[GLib.Variant]) -> None: - - assert value is not None - action.set_state(value) - app.settings.set('showoffline', value.get_boolean()) - self._refilter() - - def _on_sort_by_show(self, - action: Gio.SimpleAction, - value: GLib.Variant) -> None: - action.set_state(value) - app.settings.set('sort_by_show_in_roster', value.get_boolean()) + def _on_setting_changed(self, *args: Any) -> None: self._refilter()
def _on_contact_info(self, @@ -751,6 +732,7 @@ def process_event(self, event: ApplicationEvent) -> None: return
def _on_destroy(self, _roster: Roster) -> None: + app.settings.disconnect_signals(self) self._contact_refs.clear() self._group_refs.clear() self._unset_model()
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/c608b9f064ada7b645a7ab93f41824fa...