diff --git a/plugin.py b/plugin.py index b4c1f73..ef516ac 100644 --- a/plugin.py +++ b/plugin.py @@ -54,10 +54,25 @@ class OTRPlugin(GajimPlugin): self.modules = [module] self.gui_extension_points = { 'encrypt' + self.encryption_name: (self._encrypt_message, None), - 'message_actions_box': (self._actions_hack_activate, self._actions_hack_deactivate), + 'message_actions_box': (self._message_actions_box_activate, self._message_actions_box_deactivate), 'switch_contact': (self._switch_contact, None), } + self.switch = None + self.switch_box = None + @staticmethod + def _get_box(): + return app.window.get_chat_stack().get_message_action_box()._ui.box + + def activate(self): + if app.window is not None: + box = self._get_box() + self._actions_hack_activate(box) + + def deactivate(self): + box = self._get_box() + self._actions_hack_deactivate(box) + @staticmethod def get_otr(account): return app.connections[account].get_module('OTR') @@ -73,7 +88,7 @@ class OTRPlugin(GajimPlugin): callback(file) def toggle_otr(self): - pass + print('toggle') # encrypt message # def _encrypt_message(self,con,event,callback): @@ -81,21 +96,35 @@ class OTRPlugin(GajimPlugin): otr = self.get_otr(event.account) otr.otr.encrypt(event,callback) - def _actions_hack_activate(self, grid, box): + def _message_actions_box_activate(self, grid, box): + if self.switch_box is None: + self._actions_hack_activate(box) + + def _message_actions_box_deactivate(self, grid, box): + if self.switch_box is not None: + self._actions_hack_deactivate(box) + + def _actions_hack_activate(self, box): self.switch_box = Gtk.VBox() label = Gtk.Label(label='OTR') self.switch = Gtk.Switch() self.switch_box.pack_start(label, False, True, 0) - self.switch_box.pack_start(self.switch, True, True, 0) + self.switch_box.pack_start(self.switch, False, True, 0) + self.switch_box.set_center_widget(self.switch) box.pack_start(self.switch_box, False, True, 0) self.switch.connect('activate', self.toggle_otr) - self._update_switch_visibility(app.window.get_chat_stack()._get_current_contact()) + if app.window is not None and hasattr(app.window, '_chat_page'): + self._update_switch_visibility(app.window.get_chat_stack()._get_current_contact()) - def _actions_hack_deactivate(self, grid, box): + def _actions_hack_deactivate(self, box): box.remove(self.switch_box) + self.switch_box = None + self.switch = None def _update_switch_visibility(self, contact): if isinstance(contact, BareContact): + otr = self.get_otr(contact._account) + self.switch.set_active(contact.jid.new_as_bare() in otr.otr.ctxs) self.switch_box.show_all() else: self.switch_box.hide()