def on_skin_tone_selected(self, dummy_flowbox, flowbox_child):
'''
Signal handler for selecting a skin tone emoji
:param dummy_flowbox: The flowbox displaying the skin tone emoji
:type dummy_flowbox: Gtk.FlowBox object
:param flowbox_child: The child object containing the selected emoji
:type flowbox_child: Gtk.FlowBoxChild object
'''
# Use .get_label() instead of .get_text() to fetch the text
# from the label widget including any embedded underlines
# indicating mnemonics and Pango markup. The emoji is in
# first <span>...</span>, and we want fetch only the emoji
# here:
text = flowbox_child.get_child().get_label()
if _ARGS.debug:
sys.stdout.write('on_skin_tone_selected() text = %s\n' %text)
(emoji, dummy_name) = self._parse_emoji_and_name_from_text(text)
if not emoji:
return
self._set_clipboards(emoji)
self._add_to_recently_used(emoji)
self._skin_tone_selected_popover = Gtk.Popover()
self._skin_tone_selected_popover.set_relative_to(
flowbox_child.get_child())
self._skin_tone_selected_popover.set_position(Gtk.PositionType.TOP)
label = Gtk.Label(_('Copied to clipboard!'))
self._skin_tone_selected_popover.add(label)
if GTK_VERSION >= (3, 22, 0):
self._skin_tone_selected_popover.popup()
self._skin_tone_selected_popover.show_all()
# When an emoji with a different skin tone is selected in a
# skin tone popover opened in a browse flowbox (not a search
# results flowbox), replace the original emoji which was used
# to open the popover immediately.
label = self._skin_tone_popover.get_relative_to().get_child()
text = label.get_label()
(old_emoji, old_name) = self._parse_emoji_and_name_from_text(text)
if old_emoji and not old_name:
# If the old emoji has a name, this is a line
# in a search results flowbox and we do *not* want
# to replace the emoji.
new_text = (
'<span font="%s %s" fallback="%s">'
%(self._font, self._fontsize, str(self._fallback).lower())
+ html.escape(emoji)
+ '</span>')
label.set_text(new_text)
label.set_use_markup(True)
GLib.timeout_add(500, self._skin_tone_selected_popover_popdown)
评论列表
文章目录