Use unique id as action name instead of jid
A jid can contain characters that are not allowed in an action name. This creates a unique UUID4 for each MessageControl and uses it as action name instead. We can reuse the UUID for other actions that belong to the MessageControl Fixes #8636
This commit is contained in:
parent
d20f2201f2
commit
10f8fe2bb5
5 changed files with 11 additions and 9 deletions
|
@ -288,7 +288,7 @@ class ChatControl(ChatControlBase):
|
||||||
|
|
||||||
self.encryption_menu = self.xml.get_object('encryption_menu')
|
self.encryption_menu = self.xml.get_object('encryption_menu')
|
||||||
self.encryption_menu.set_menu_model(
|
self.encryption_menu.set_menu_model(
|
||||||
gui_menu_builder.get_encryption_menu(self.contact, self.type_id))
|
gui_menu_builder.get_encryption_menu(self.control_id, self.type_id))
|
||||||
self.set_encryption_menu_icon()
|
self.set_encryption_menu_icon()
|
||||||
# restore previous conversation
|
# restore previous conversation
|
||||||
self.restore_conversation()
|
self.restore_conversation()
|
||||||
|
|
|
@ -416,7 +416,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
|
||||||
|
|
||||||
def add_window_actions(self):
|
def add_window_actions(self):
|
||||||
action = Gio.SimpleAction.new_stateful(
|
action = Gio.SimpleAction.new_stateful(
|
||||||
"%s-encryptiongroup" % self.contact.jid,
|
"set-encryption-%s" % self.control_id,
|
||||||
GLib.VariantType.new("s"),
|
GLib.VariantType.new("s"),
|
||||||
GLib.Variant("s", self.encryption or 'disabled'))
|
GLib.Variant("s", self.encryption or 'disabled'))
|
||||||
action.connect("change-state", self.change_encryption)
|
action.connect("change-state", self.change_encryption)
|
||||||
|
|
|
@ -495,7 +495,7 @@ class GroupchatControl(ChatControlBase):
|
||||||
|
|
||||||
self.encryption_menu = self.xml.get_object('encryption_menu')
|
self.encryption_menu = self.xml.get_object('encryption_menu')
|
||||||
self.encryption_menu.set_menu_model(
|
self.encryption_menu.set_menu_model(
|
||||||
gui_menu_builder.get_encryption_menu(self.contact, self.type_id))
|
gui_menu_builder.get_encryption_menu(self.control_id, self.type_id))
|
||||||
self.set_encryption_menu_icon()
|
self.set_encryption_menu_icon()
|
||||||
|
|
||||||
gajim.ged.register_event_handler('gc-presence-received', ged.GUI1,
|
gajim.ged.register_event_handler('gc-presence-received', ged.GUI1,
|
||||||
|
|
|
@ -752,11 +752,10 @@ def build_bookmark_menu(account):
|
||||||
menu.insert_submenu(1, label, bookmark_menu)
|
menu.insert_submenu(1, label, bookmark_menu)
|
||||||
|
|
||||||
|
|
||||||
def get_encryption_menu(contact, type_id):
|
def get_encryption_menu(control_id, type_id):
|
||||||
menu = Gio.Menu()
|
menu = Gio.Menu()
|
||||||
menu.append(
|
menu.append(
|
||||||
'Disabled', 'win.{}-encryptiongroup::{}'.format(contact.jid,
|
'Disabled', 'win.set-encryption-{}::{}'.format(control_id, 'disabled'))
|
||||||
'disabled'))
|
|
||||||
for name, plugin in gajim.plugin_manager.encryption_plugins.items():
|
for name, plugin in gajim.plugin_manager.encryption_plugins.items():
|
||||||
if type_id == 'gc':
|
if type_id == 'gc':
|
||||||
if not hasattr(plugin, 'allow_groupchat'):
|
if not hasattr(plugin, 'allow_groupchat'):
|
||||||
|
@ -764,8 +763,8 @@ def get_encryption_menu(contact, type_id):
|
||||||
if type_id == 'pm':
|
if type_id == 'pm':
|
||||||
if not hasattr(plugin, 'allow_privatchat'):
|
if not hasattr(plugin, 'allow_privatchat'):
|
||||||
continue
|
continue
|
||||||
menu_action = 'win.{}-encryptiongroup::{}'.format(
|
menu_action = 'win.set-encryption-{}::{}'.format(
|
||||||
contact.jid, name)
|
control_id, name)
|
||||||
menu.append(name, menu_action)
|
menu.append(name, menu_action)
|
||||||
if menu.get_n_items() == 1:
|
if menu.get_n_items() == 1:
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
##
|
##
|
||||||
|
|
||||||
import gtkgui_helpers
|
import gtkgui_helpers
|
||||||
|
import uuid
|
||||||
|
|
||||||
from common import gajim
|
from common import gajim
|
||||||
from common import helpers
|
from common import helpers
|
||||||
|
@ -58,7 +59,9 @@ class MessageControl(object):
|
||||||
self.account = account
|
self.account = account
|
||||||
self.hide_chat_buttons = False
|
self.hide_chat_buttons = False
|
||||||
self.resource = resource
|
self.resource = resource
|
||||||
|
# control_id is a unique id for the control,
|
||||||
|
# its used as action name for actions that belong to a control
|
||||||
|
self.control_id = str(uuid.uuid4())
|
||||||
self.session = None
|
self.session = None
|
||||||
|
|
||||||
gajim.last_message_time[self.account][self.get_full_jid()] = 0
|
gajim.last_message_time[self.account][self.get_full_jid()] = 0
|
||||||
|
|
Loading…
Add table
Reference in a new issue