diff options
author | Yann Leboulanger <yann@leboulanger.org> | 2017-06-14 16:10:26 +0300 |
---|---|---|
committer | Yann Leboulanger <yann@leboulanger.org> | 2017-06-14 16:10:26 +0300 |
commit | 4f7b72883d3469712bd3171e5edcafcb43ada8e8 (patch) | |
tree | 57e6c643184a2cb0ab89fe850f83b43369c058bc /src | |
parent | 2c24c5a1e88b405c0dff28a9945fdf89ad43f313 (diff) | |
parent | 9dc389cc32f8bc8f51c694f54b5a4785c04c5296 (diff) |
Merge branch 'master' of dev.gajim.org:gajim/gajim
Diffstat (limited to 'src')
-rw-r--r-- | src/chat_control.py | 12 | ||||
-rw-r--r-- | src/chat_control_base.py | 21 | ||||
-rw-r--r-- | src/common/connection_handlers_events.py | 1 | ||||
-rw-r--r-- | src/config.py | 1 | ||||
-rw-r--r-- | src/conversation_textview.py | 8 | ||||
-rw-r--r-- | src/groupchat_control.py | 16 | ||||
-rw-r--r-- | src/gtkgui_helpers.py | 11 | ||||
-rw-r--r-- | src/tooltips.py | 2 | ||||
-rw-r--r-- | src/vcard.py | 16 |
9 files changed, 56 insertions, 32 deletions
diff --git a/src/chat_control.py b/src/chat_control.py index db7cca9a4..1009a8699 100644 --- a/src/chat_control.py +++ b/src/chat_control.py @@ -287,6 +287,7 @@ class ChatControl(ChatControlBase): self.encryption_menu = self.xml.get_object('encryption_menu') self.encryption_menu.set_menu_model( gui_menu_builder.get_encryption_menu(self.contact, self.type_id)) + self.set_encryption_menu_icon() # restore previous conversation self.restore_conversation() self.msg_textview.grab_focus() @@ -990,7 +991,7 @@ class ChatControl(ChatControlBase): def get_our_nick(self): return gajim.nicks[self.account] - def print_conversation(self, text, frm='', tim=None, encrypted=False, + def print_conversation(self, text, frm='', tim=None, encrypted=None, subject=None, xhtml=None, simple=False, xep0184_id=None, displaymarking=None, msg_log_id=None, correct_id=None, msg_stanza_id=None, additional_data=None): @@ -1023,12 +1024,6 @@ class ChatControl(ChatControlBase): kind = 'info' name = '' else: - if self.session and self.session.enable_encryption: - # ESessions - if not encrypted: - msg = _('The following message was NOT encrypted') - ChatControlBase.print_conversation_line(self, msg, 'status', - '', tim) if not frm: kind = 'incoming' name = contact.get_shown_name() @@ -1048,7 +1043,8 @@ class ChatControl(ChatControlBase): subject=subject, old_kind=self.old_msg_kind, xhtml=xhtml, simple=simple, xep0184_id=xep0184_id, displaymarking=displaymarking, msg_log_id=msg_log_id, msg_stanza_id=msg_stanza_id, - correct_id=correct_id, additional_data=additional_data) + correct_id=correct_id, additional_data=additional_data, + encrypted=encrypted) if text.startswith('/me ') or text.startswith('/me\n'): self.old_msg_kind = None else: diff --git a/src/chat_control_base.py b/src/chat_control_base.py index ea3324c7c..da7aff3a2 100644 --- a/src/chat_control_base.py +++ b/src/chat_control_base.py @@ -36,6 +36,7 @@ from gi.repository import GObject from gi.repository import GLib from gi.repository import Gio import gtkgui_helpers +from gtkgui_helpers import Color import message_control import dialogs import history_window @@ -442,6 +443,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): self.terminate_esessions() action.set_state(param) self.set_encryption_state(encryption) + self.set_encryption_menu_icon() self.set_lock_image() def set_encryption_state(self, encryption): @@ -455,6 +457,19 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): state = gajim.config.get_per('encryption', config_key, 'encryption') return state or None + def set_encryption_menu_icon(self): + for child in self.encryption_menu.get_children(): + if isinstance(child, Gtk.Image): + image = child + break + + if not self.encryption: + icon = gtkgui_helpers.get_icon_pixmap( + 'channel-insecure-symbolic', color=[Color.BLACK]) + else: + icon = gtkgui_helpers.get_icon_pixmap('channel-secure-symbolic') + image.set_from_pixbuf(icon) + def set_speller(self): # now set the one the user selected per_type = 'contacts' @@ -894,7 +909,8 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): other_tags_for_name=[], other_tags_for_time=[], other_tags_for_text=[], count_as_new=True, subject=None, old_kind=None, xhtml=None, simple=False, xep0184_id=None, graphics=True, displaymarking=None, msg_log_id=None, - msg_stanza_id=None, correct_id=None, additional_data=None): + msg_stanza_id=None, correct_id=None, additional_data=None, + encrypted=None): """ Print 'chat' type messages correct_id = (message_id, correct_id) @@ -919,7 +935,8 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): other_tags_for_name, other_tags_for_time, other_tags_for_text, subject, old_kind, xhtml, simple=simple, graphics=graphics, displaymarking=displaymarking, msg_stanza_id=msg_stanza_id, - correct_id=correct_id, additional_data=additional_data) + correct_id=correct_id, additional_data=additional_data, + encrypted=encrypted) if xep0184_id is not None: textview.add_xep0184_mark(xep0184_id) diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py index 312d810ba..d88508203 100644 --- a/src/common/connection_handlers_events.py +++ b/src/common/connection_handlers_events.py @@ -1497,6 +1497,7 @@ class GcMessageReceivedEvent(nec.NetworkIncomingEvent): self.nickname = self.msg_obj.resource self.timestamp = self.msg_obj.timestamp self.xhtml_msgtxt = self.stanza.getXHTML() + self.encrypted = self.msg_obj.encrypted self.correct_id = None # XEP-0308 if gajim.config.get('ignore_incoming_xhtml'): diff --git a/src/config.py b/src/config.py index 63b3d31d5..ceb138c06 100644 --- a/src/config.py +++ b/src/config.py @@ -2935,7 +2935,6 @@ class GroupchatConfigWindow: self.affiliation_treeview[affiliation].append_column(col) sw = Gtk.ScrolledWindow() - sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER) sw.add(self.affiliation_treeview[affiliation]) add_on_vbox.pack_start(sw, True, True, 0) gajim.connections[self.account].get_affiliation_list(self.room_jid, diff --git a/src/conversation_textview.py b/src/conversation_textview.py index b0146b6bf..db481044d 100644 --- a/src/conversation_textview.py +++ b/src/conversation_textview.py @@ -170,6 +170,8 @@ class ConversationTextview(GObject.GObject): MESSAGE_CORRECTED_PIXBUF = gtkgui_helpers.get_icon_pixmap( 'document-edit-symbolic') + MESSAGE_ENCRYPTED_PIXBUF = gtkgui_helpers.get_icon_pixmap( + 'channel-secure-croped-symbolic') # smooth scroll constants MAX_SCROLL_TIME = 0.4 # seconds @@ -1100,7 +1102,8 @@ class ConversationTextview(GObject.GObject): def print_conversation_line(self, text, jid, kind, name, tim, other_tags_for_name=None, other_tags_for_time=None, other_tags_for_text=None, subject=None, old_kind=None, xhtml=None, simple=False, graphics=True, - displaymarking=None, msg_stanza_id=None, correct_id=None, additional_data=None): + displaymarking=None, msg_stanza_id=None, correct_id=None, additional_data=None, + encrypted=None): """ Print 'chat' type messages """ @@ -1168,6 +1171,9 @@ class ConversationTextview(GObject.GObject): self.print_time(text, kind, tim, simple, direction_mark, other_tags_for_time, iter_) + if encrypted: + buffer_.insert_pixbuf(iter_, self.MESSAGE_ENCRYPTED_PIXBUF) + # If there's a displaymarking, print it here. if displaymarking: self.print_displaymarking(displaymarking, iter_=iter_) diff --git a/src/groupchat_control.py b/src/groupchat_control.py index 71cd8aa79..ea0eff4f7 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -493,6 +493,7 @@ class GroupchatControl(ChatControlBase): self.encryption_menu = self.xml.get_object('encryption_menu') self.encryption_menu.set_menu_model( gui_menu_builder.get_encryption_menu(self.contact, self.type_id)) + self.set_encryption_menu_icon() gajim.ged.register_event_handler('gc-presence-received', ged.GUI1, self._nec_gc_presence_received) @@ -1090,14 +1091,14 @@ class GroupchatControl(ChatControlBase): # don't print xhtml if it's an old message. # Like that xhtml messages are grayed too. self.print_old_conversation(obj.msgtxt, contact=obj.nick, - tim=obj.timestamp, xhtml=None, + tim=obj.timestamp, xhtml=None, encrypted=obj.encrypted, displaymarking=obj.displaymarking, msg_stanza_id=obj.id_) else: if obj.nick == self.nick: self.last_sent_txt = obj.msgtxt self.print_conversation(obj.msgtxt, contact=obj.nick, tim=obj.timestamp, xhtml=obj.xhtml_msgtxt, - displaymarking=obj.displaymarking, + displaymarking=obj.displaymarking, encrypted=obj.encrypted, correct_id=obj.correct_id, msg_stanza_id=obj.id_) obj.needs_highlight = self.needs_visual_notification(obj.msgtxt) @@ -1153,7 +1154,7 @@ class GroupchatControl(ChatControlBase): return None def print_old_conversation(self, text, contact='', tim=None, xhtml = None, - displaymarking=None, msg_stanza_id=None): + displaymarking=None, msg_stanza_id=None, encrypted=None): if contact: if contact == self.nick: # it's us kind = 'outgoing' @@ -1165,13 +1166,16 @@ class GroupchatControl(ChatControlBase): small_attr = ['small'] else: small_attr = [] + ChatControlBase.print_conversation_line(self, text, kind, contact, tim, small_attr, small_attr + ['restored_message'], small_attr + ['restored_message'], count_as_new=False, xhtml=xhtml, - displaymarking=displaymarking, msg_stanza_id=msg_stanza_id) + displaymarking=displaymarking, msg_stanza_id=msg_stanza_id, + encrypted=encrypted) def print_conversation(self, text, contact='', tim=None, xhtml=None, - graphics=True, displaymarking=None, correct_id=None, msg_stanza_id=None): + graphics=True, displaymarking=None, correct_id=None, msg_stanza_id=None, + encrypted=None): """ Print a line in the conversation @@ -1233,7 +1237,7 @@ class GroupchatControl(ChatControlBase): ChatControlBase.print_conversation_line(self, text, kind, contact, tim, other_tags_for_name, [], other_tags_for_text, xhtml=xhtml, graphics=graphics, displaymarking=displaymarking, - correct_id=correct_id, msg_stanza_id=msg_stanza_id) + correct_id=correct_id, msg_stanza_id=msg_stanza_id, encrypted=encrypted) def get_nb_unread(self): type_events = ['printed_marked_gc_msg'] diff --git a/src/gtkgui_helpers.py b/src/gtkgui_helpers.py index 687daa99e..18db3efb5 100644 --- a/src/gtkgui_helpers.py +++ b/src/gtkgui_helpers.py @@ -53,9 +53,16 @@ from common import configpaths gtk_icon_theme = Gtk.IconTheme.get_default() gtk_icon_theme.append_search_path(gajim.ICONS_DIR) -def get_icon_pixmap(icon_name, size=16, quiet=False): +class Color: + BLACK = Gdk.RGBA(red=0, green=0, blue=0, alpha=1) + +def get_icon_pixmap(icon_name, size=16, color=None, quiet=False): try: - return gtk_icon_theme.load_icon(icon_name, size, 0) + iconinfo = gtk_icon_theme.lookup_icon(icon_name, size, 0) + if color: + pixbuf, was_symbolic = iconinfo.load_symbolic(*color) + return pixbuf + return iconinfo.load_icon() except GLib.GError as e: if not quiet: log.error('Unable to load icon %s: %s' % (icon_name, str(e))) diff --git a/src/tooltips.py b/src/tooltips.py index 3c9d30388..468bc336f 100644 --- a/src/tooltips.py +++ b/src/tooltips.py @@ -31,6 +31,7 @@ from gi.repository import Gtk from gi.repository import Gdk from gi.repository import GLib +from gi.repository import Pango import os import time from datetime import datetime @@ -207,6 +208,7 @@ class StatusTable: self.table.insert_row(self.current_row) self.text_label = Gtk.Label() self.text_label.set_line_wrap(True) + self.text_label.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) self.text_label.set_max_width_chars(35) self.text_label.set_halign(Gtk.Align.START) self.text_label.set_valign(Gtk.Align.START) diff --git a/src/vcard.py b/src/vcard.py index 6054ee817..be3daf0f3 100644 --- a/src/vcard.py +++ b/src/vcard.py @@ -404,11 +404,8 @@ class VcardWindow: if self.contact.status: stats += ': ' + self.contact.status status_label = self.xml.get_object('status_label') - status_label.set_max_width_chars(15) status_label.set_text(stats) - - status_label_eventbox = self.xml.get_object('status_label_eventbox') - status_label_eventbox.set_tooltip_text(stats) + status_label.set_tooltip_text(stats) def fill_jabber_page(self): self.xml.get_object('nickname_label').set_markup( @@ -430,7 +427,6 @@ class VcardWindow: else: uf_sub = helpers.get_uf_sub(self.contact.sub) subscription_label.set_text(uf_sub) - eb = self.xml.get_object('subscription_label_eventbox') if self.contact.sub == 'from': tt_text = _("This contact is interested in your presence information, but you are not interested in their presence") elif self.contact.sub == 'to': @@ -439,16 +435,15 @@ class VcardWindow: tt_text = _("The contact and you want to exchange presence information") else: # None tt_text = _("You and the contact have a mutual disinterest in each-others presence information") - eb.set_tooltip_text(tt_text) + subscription_label.set_tooltip_text(tt_text) uf_ask = helpers.get_uf_ask(self.contact.ask) ask_label.set_text(uf_ask) - eb = self.xml.get_object('ask_label_eventbox') if self.contact.ask == 'subscribe': tt_text = _("You are waiting contact's answer about your subscription request") else: tt_text = _("There is no pending subscription request.") - eb.set_tooltip_text(tt_text) + ask_label.set_tooltip_text(tt_text) resources = '%s (%s)' % (self.contact.resource, str( self.contact.priority)) @@ -613,11 +608,8 @@ class ZeroconfVcardWindow: if self.contact.status: stats += ': ' + self.contact.status status_label = self.xml.get_object('status_label') - status_label.set_max_width_chars(15) status_label.set_text(stats) - - status_label_eventbox = self.xml.get_object('status_label_eventbox') - status_label_eventbox.set_tooltip_text(stats) + status_label.set_tooltip_text(stats) def fill_contact_page(self): self.xml.get_object('nickname_label').set_markup( |