Daniel Brötzmann pushed to branch newcontrol at gajim / gajim
Commits: bd4ce98e by wurstsalat at 2022-07-09T17:59:14+02:00 Remove 'update_toolbar' and its GUI extension point
- - - - - 40f863f1 by wurstsalat at 2022-07-10T19:07:03+02:00 Fix updating message input state
- - - - -
7 changed files:
- gajim/gtk/chat_banner.py - gajim/gtk/chat_stack.py - gajim/gtk/controls/base.py - gajim/gtk/controls/chat.py - gajim/gtk/controls/groupchat.py - gajim/gtk/controls/private.py - gajim/gtk/message_actions_box.py
Changes:
===================================== gajim/gtk/chat_banner.py ===================================== @@ -117,6 +117,8 @@ def switch_contact(self,
if isinstance(self._contact, GroupchatParticipant): self._contact.multi_connect({ + 'user-joined': self._on_user_state_changed, + 'user-left': self._on_user_state_changed, 'user-avatar-update': self._on_user_avatar_update, 'user-nickname-changed': self._on_user_nickname_changed }) @@ -193,6 +195,9 @@ def _on_user_nickname_changed(self,
self._update_content()
+ def _on_user_state_changed(self, *args: Any) -> None: + self._update_avatar() + def _on_user_avatar_update(self, *args: Any) -> None: self._update_avatar()
===================================== gajim/gtk/chat_stack.py ===================================== @@ -96,6 +96,8 @@ def show_chat(self, account: str, jid: JID) -> None: 'state-changed': self._on_muc_state_changed }) self._update_group_chat_actions(self._current_contact) + elif isinstance(self._current_contact, GroupchatParticipant): + self._update_participant_actions(self._current_contact) else: self._update_chat_actions(self._current_contact)
===================================== gajim/gtk/controls/base.py ===================================== @@ -327,24 +327,11 @@ def update_actions(self) -> None: Derived types MAY implement this """
- def update_toolbar(self) -> None: - """ - update state of buttons in toolbar - """ - self._update_toolbar() - app.plugin_manager.gui_extension_point( - 'chat_control_base_update_toolbar', self) - def update_ui(self) -> None: """ Derived types SHOULD implement this """
- def _update_toolbar(self) -> None: - """ - Derived types MAY implement this - """ - def _nec_ping(self, obj): raise NotImplementedError
@@ -382,8 +369,6 @@ def shutdown(self) -> None: # Plugins might want to remove their widgets on # remove_gui_extension_point(), so delete the objects only afterwards. app.plugin_manager.remove_gui_extension_point('chat_control_base', self) - app.plugin_manager.remove_gui_extension_point( - 'chat_control_base_update_toolbar', self)
self._client.disconnect_all_from_obj(self) self.contact.disconnect_all_from_obj(self) @@ -688,12 +673,6 @@ def set_control_active(self, state: bool) -> None: if not self._chat_loaded: self.fetch_n_lines_history(self._scrolled_view, True, 20)
- def set_message_input_state(self, state: bool) -> None: - return - # self.xml.formattings_button.set_sensitive(state) - # self.msg_textview.set_sensitive(state) - # self.msg_textview.set_editable(state) - @property def is_chat_loaded(self) -> bool: return self._chat_loaded
===================================== gajim/gtk/controls/chat.py ===================================== @@ -85,7 +85,6 @@ def __init__(self, account: str, jid: JID) -> None: self._client.connect_signal('state-changed', self._on_client_state_changed)
- self.update_toolbar() self.update_ui()
# PluginSystem: adding GUI extension point for this ChatControl @@ -94,9 +93,7 @@ def __init__(self, account: str, jid: JID) -> None: self.update_actions()
def _connect_contact_signals(self) -> None: - self.contact.multi_connect({ - 'caps-update': self._on_caps_update, - }) + pass
@property def jid(self) -> JID: @@ -114,12 +111,6 @@ def focus(self) -> None: def delegate_action(self, action: str) -> int: return Gdk.EVENT_PROPAGATE
- def _on_caps_update(self, - _contact: types.BareContact, - _signal_name: str - ) -> None: - self.update_ui() - def _on_mam_message_received(self, event: events.MamMessageReceived) -> None: if event.properties.is_muc_pm: @@ -214,7 +205,6 @@ def _nec_ping(self, event: events.ApplicationEvent):
def update_ui(self) -> None: BaseControl.update_ui(self) - self.update_toolbar() self.update_actions()
def add_message(self, @@ -281,9 +271,6 @@ def _on_client_state_changed(self, _client: Client, _signal_name: str, state: SimpleClientState): - self.set_message_input_state(state.is_connected) - - self.update_toolbar() self.update_actions()
def _on_presence_received(self, event: events.PresenceReceived) -> None:
===================================== gajim/gtk/controls/groupchat.py ===================================== @@ -610,17 +610,12 @@ def _nec_ping(self, event: events.ApplicationEvent) -> None: self.add_info_message(event.error)
def _set_control_active(self) -> None: - self_contact = self.contact.get_self() - self.set_message_input_state(not self_contact.role.is_visitor) - self.roster.initial_draw() self.conversation_view.update_avatars()
self.update_actions()
def _set_control_inactive(self) -> None: - self.set_message_input_state(False) - self.roster.enable_sort(False) self.roster.clear()
@@ -758,7 +753,6 @@ def _on_user_role_changed(self, actor = '' if actor is None else _(' by {actor}').format(actor=actor)
if properties.is_muc_self_presence: - self.set_message_input_state(not user_contact.role.is_visitor) message = _('** Your Role has been set to ' '{role}{actor}{reason}').format(role=role, actor=actor,
===================================== gajim/gtk/controls/private.py ===================================== @@ -58,14 +58,10 @@ def __init__(self, account: str, jid: JID) -> None:
def _connect_contact_signals(self) -> None: self.contact.multi_connect({ - 'user-joined': self._on_user_joined, - 'user-left': self._on_user_left, 'user-status-show-changed': self._on_user_status_show_changed, 'user-nickname-changed': self._on_user_nickname_changed, # 'room-kicked': self._on_room_kicked, # 'room-destroyed': self._on_room_destroyed, - 'room-joined': self._on_room_joined, - # 'room-left': self._on_room_left })
@property @@ -121,33 +117,6 @@ def _on_user_status_show_changed(self, self.add_info_message(message) self.update_ui()
- # def _on_disconnected(self, event): - # if event.properties.jid != self.contact.jid: - # return - # self.set_message_input_state(False) - - def _on_user_left(self, - _user_contact: GroupchatParticipant, - _signal_name: str, - _properties: MessageProperties - ) -> None: - self.set_message_input_state(False) - - def _on_user_joined(self, - _user_contact: GroupchatParticipant, - _signal_name: str, - _properties: MessageProperties - ) -> None: - self.set_message_input_state(True) - - def _on_room_joined(self, - _contact: GroupchatContact, - _signal_name: str - ) -> None: - if not self.contact.is_available: - return - self.set_message_input_state(True) - def send_message(self, message: str, process_commands: bool = True,
===================================== gajim/gtk/message_actions_box.py ===================================== @@ -36,6 +36,8 @@ from gajim.common import app from gajim.common import i18n from gajim.common.i18n import _ +from gajim.common.client import Client +from gajim.common.const import SimpleClientState from gajim.common.const import Direction from gajim.common.modules.contacts import GroupchatContact from gajim.common.modules.contacts import GroupchatParticipant @@ -65,6 +67,7 @@ class MessageActionsBox(Gtk.Grid): def __init__(self) -> None: super().__init__()
+ self._client: Optional[Client] = None self._contact: Optional[ChatContactT] = None
self._ui = get_builder('message_actions_box.ui') @@ -175,7 +178,30 @@ def _on_action(self, self.msg_textview.mention_participant(param.get_string())
def switch_contact(self, contact: ChatContactT) -> None: + if self._client is not None: + self._client.disconnect_all_from_obj(self) + + if self._contact is not None: + self._contact.disconnect_all_from_obj(self) + + self._client = app.get_client(contact.account) + self._client.connect_signal( + 'state-changed', self._on_client_state_changed) + self._contact = contact + if isinstance(self._contact, GroupchatContact): + self._contact.multi_connect({ + 'state-changed': self._on_muc_state_changed, + 'user-role-changed': self._on_muc_state_changed, + }) + if isinstance(self._contact, GroupchatParticipant): + self._contact.multi_connect({ + 'user-joined': self._on_user_state_changed, + 'user-left': self._on_user_state_changed, + 'room-joined': self._on_user_state_changed, + 'room-left': self._on_user_state_changed, + }) + self._set_settings_menu(contact)
encryption = self._contact.settings.get('encryption') @@ -188,6 +214,40 @@ def switch_contact(self, contact: ChatContactT) -> None: self.msg_textview.switch_contact(contact) self._security_label_selector.switch_contact(contact)
+ self._update_message_input_state() + + def _on_client_state_changed(self, + _client: Client, + _signal_name: str, + state: SimpleClientState + ) -> None: + self._update_message_input_state() + + def _on_muc_state_changed(self, *args: Any) -> None: + self._update_message_input_state() + + def _on_user_state_changed(self, *args: Any) -> None: + self._update_message_input_state() + + def _update_message_input_state(self) -> None: + assert self._client + state = self._client.state.is_connected + + if isinstance(self._contact, GroupchatContact): + state = self._contact.is_joined + if self._contact.is_joined: + self_contact = self._contact.get_self() + assert self_contact + state = not self_contact.role.is_visitor + + if isinstance(self._contact, GroupchatParticipant): + state = self._contact.is_available + + self._ui.emoticons_button.set_sensitive(state) + self._ui.formattings_button.set_sensitive(state) + self.msg_textview.set_sensitive(state) + self.msg_textview.set_editable(state) + def _set_chatstate(self) -> None: return #TODO if state:
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/6365d0a09c9d6ecbf465885ed126e3ff...