Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYann Leboulanger <yann@leboulanger.org>2017-06-14 16:10:26 +0300
committerYann Leboulanger <yann@leboulanger.org>2017-06-14 16:10:26 +0300
commit4f7b72883d3469712bd3171e5edcafcb43ada8e8 (patch)
tree57e6c643184a2cb0ab89fe850f83b43369c058bc /src
parent2c24c5a1e88b405c0dff28a9945fdf89ad43f313 (diff)
parent9dc389cc32f8bc8f51c694f54b5a4785c04c5296 (diff)
Merge branch 'master' of dev.gajim.org:gajim/gajim
Diffstat (limited to 'src')
-rw-r--r--src/chat_control.py12
-rw-r--r--src/chat_control_base.py21
-rw-r--r--src/common/connection_handlers_events.py1
-rw-r--r--src/config.py1
-rw-r--r--src/conversation_textview.py8
-rw-r--r--src/groupchat_control.py16
-rw-r--r--src/gtkgui_helpers.py11
-rw-r--r--src/tooltips.py2
-rw-r--r--src/vcard.py16
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(