[Urcher] ability to copy emoticons when they are selected. Fixes #2570
This commit is contained in:
parent
c9c5f72ff9
commit
750fbc844d
|
@ -67,13 +67,15 @@ def has_focus(widget):
|
||||||
|
|
||||||
class TextViewImage(gtk.Image):
|
class TextViewImage(gtk.Image):
|
||||||
|
|
||||||
def __init__(self, anchor):
|
def __init__(self, anchor, text):
|
||||||
super(TextViewImage, self).__init__()
|
super(TextViewImage, self).__init__()
|
||||||
self.anchor = anchor
|
self.anchor = anchor
|
||||||
self._selected = False
|
self._selected = False
|
||||||
self._disconnect_funcs = []
|
self._disconnect_funcs = []
|
||||||
self.connect('parent-set', self.on_parent_set)
|
self.connect('parent-set', self.on_parent_set)
|
||||||
self.connect('expose-event', self.on_expose)
|
self.connect('expose-event', self.on_expose)
|
||||||
|
self.set_tooltip_text(text)
|
||||||
|
self.anchor.set_data('plaintext', text)
|
||||||
|
|
||||||
def _get_selected(self):
|
def _get_selected(self):
|
||||||
parent = self.get_parent()
|
parent = self.get_parent()
|
||||||
|
@ -1043,7 +1045,7 @@ class ConversationTextview(gobject.GObject):
|
||||||
emot_ascii = possible_emot_ascii_caps
|
emot_ascii = possible_emot_ascii_caps
|
||||||
end_iter = buffer_.get_end_iter()
|
end_iter = buffer_.get_end_iter()
|
||||||
anchor = buffer_.create_child_anchor(end_iter)
|
anchor = buffer_.create_child_anchor(end_iter)
|
||||||
img = TextViewImage(anchor)
|
img = TextViewImage(anchor, special_text)
|
||||||
animations = gajim.interface.emoticons_animations
|
animations = gajim.interface.emoticons_animations
|
||||||
if not emot_ascii in animations:
|
if not emot_ascii in animations:
|
||||||
animations[emot_ascii] = gtk.gdk.PixbufAnimation(
|
animations[emot_ascii] = gtk.gdk.PixbufAnimation(
|
||||||
|
|
|
@ -804,6 +804,10 @@ class HtmlTextView(gtk.TextView):
|
||||||
self.connect('motion-notify-event', self.__motion_notify_event)
|
self.connect('motion-notify-event', self.__motion_notify_event)
|
||||||
self.connect('leave-notify-event', self.__leave_event)
|
self.connect('leave-notify-event', self.__leave_event)
|
||||||
self.connect('enter-notify-event', self.__motion_notify_event)
|
self.connect('enter-notify-event', self.__motion_notify_event)
|
||||||
|
self.connect('realize', self.on_html_text_view_realized)
|
||||||
|
self.connect('unrealize', self.on_html_text_view_unrealized)
|
||||||
|
self.connect('copy-clipboard', self.on_html_text_view_copy_clipboard)
|
||||||
|
self.get_buffer().connect_after('mark-set', self.on_text_buffer_mark_set)
|
||||||
self.get_buffer().create_tag('eol', scale = pango.SCALE_XX_SMALL)
|
self.get_buffer().create_tag('eol', scale = pango.SCALE_XX_SMALL)
|
||||||
self.tooltip = tooltips.BaseTooltip()
|
self.tooltip = tooltips.BaseTooltip()
|
||||||
self.config = gajim.config
|
self.config = gajim.config
|
||||||
|
@ -873,7 +877,43 @@ class HtmlTextView(gtk.TextView):
|
||||||
#if not eob.starts_line():
|
#if not eob.starts_line():
|
||||||
# buffer_.insert(eob, '\n')
|
# buffer_.insert(eob, '\n')
|
||||||
|
|
||||||
|
def on_html_text_view_copy_clipboard(self, unused_data):
|
||||||
|
clipboard = self.get_clipboard(gtk.gdk.SELECTION_CLIPBOARD)
|
||||||
|
clipboard.set_text(self.get_selected_text())
|
||||||
|
self.emit_stop_by_name('copy-clipboard')
|
||||||
|
|
||||||
|
def on_html_text_view_realized(self, unused_data):
|
||||||
|
self.get_buffer().remove_selection_clipboard(self.get_clipboard(gtk.gdk.SELECTION_PRIMARY))
|
||||||
|
|
||||||
|
def on_html_text_view_unrealized(self, unused_data):
|
||||||
|
self.get_buffer().add_selection_clipboard(self.get_clipboard(gtk.gdk.SELECTION_PRIMARY))
|
||||||
|
|
||||||
|
def on_text_buffer_mark_set(self, location, mark, unused_data):
|
||||||
|
bounds = self.get_buffer().get_selection_bounds()
|
||||||
|
if bounds:
|
||||||
|
clipboard = self.get_clipboard(gtk.gdk.SELECTION_PRIMARY)
|
||||||
|
clipboard.set_text(self.get_selected_text())
|
||||||
|
|
||||||
|
def get_selected_text(self):
|
||||||
|
bounds = self.get_buffer().get_selection_bounds()
|
||||||
|
selection = ''
|
||||||
|
if bounds:
|
||||||
|
(search_iter, end) = bounds
|
||||||
|
|
||||||
|
while (search_iter.compare(end)):
|
||||||
|
character = search_iter.get_char()
|
||||||
|
if character == u'\ufffc':
|
||||||
|
anchor = search_iter.get_child_anchor()
|
||||||
|
if anchor:
|
||||||
|
text = anchor.get_data('plaintext')
|
||||||
|
if text:
|
||||||
|
selection+=text
|
||||||
|
else:
|
||||||
|
selection+=character
|
||||||
|
else:
|
||||||
|
selection+=character
|
||||||
|
search_iter.forward_char()
|
||||||
|
return selection
|
||||||
|
|
||||||
change_cursor = None
|
change_cursor = None
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue