public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Takao Fujiwara <tfujiwar@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/ibus] autotool: Enabled unicode_alt in EmojiOne json file
Date: Sun, 31 May 2026 02:06:31 GMT	[thread overview]
Message-ID: <178019319156.1.14451570342241206854.rpms-ibus-c46a1978822c@fedoraproject.org> (raw)

            A new commit has been pushed.

            Repo   : rpms/ibus
            Branch : autotool
            Commit : c46a1978822c1ac2a142d9d6eb25f42d7e70eb9c
            Author : Takao Fujiwara <tfujiwar@redhat.com>
            Date   : 2017-04-05T18:28:56+09:00
            Stats  : +735/-1 in 2 file(s)
            URL    : https://src.fedoraproject.org/rpms/ibus/c/c46a1978822c1ac2a142d9d6eb25f42d7e70eb9c?branch=autotool

            Log:
            Enabled unicode_alt in EmojiOne json file

- Enabled to type multiple code points on Emojier
- Fixed IBusEmojiDialog_1_0_gir_LIBS for --as-needed LDFLAGS

---
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index 95db7c3..b31f540 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -3668,3 +3668,732 @@ index 0982134..7350dcc 100644
 -- 
 2.9.3
 
+From 164300758c70fd3a590788e038de31b6c53d458a Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Tue, 28 Mar 2017 12:15:26 +0900
+Subject: [PATCH] data: Fix a typo
+
+R=Shawn.P.Huang@gmail.com
+
+Review URL: https://codereview.appspot.com/321800043
+---
+ data/ibus.schemas.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/ibus.schemas.in b/data/ibus.schemas.in
+index c0bbd6f..096dd71 100644
+--- a/data/ibus.schemas.in
++++ b/data/ibus.schemas.in
+@@ -386,7 +386,7 @@
+         <short>Default language for emoji dictionary</short>
+ 	    <long>Choose a default language of emoji dictionaries on
+ 	          the emoji dialog. The value $lang is applied to
+-                  /usr/share/unicode/cldr/common/annotations/$lang.xml
++                  /usr/share/ibus/dicts/emoji-$lang.dict
+             </long>
+       </locale>
+     </schema>
+-- 
+2.9.3
+
+From c3168d4701eb4e89094249abaa4f0f83ab24149b Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Wed, 29 Mar 2017 13:01:28 +0900
+Subject: [PATCH] Fix IBusEmojiDialog_1_0_gir_LIBS for --as-needed LDFLAGS
+
+The order gets omitted libibus-1.0.la
+
+BUG=https://github.com/ibus/ibus/issues/1917
+
+Review URL: https://codereview.appspot.com/324720043
+---
+ ui/gtk3/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ui/gtk3/Makefile.am b/ui/gtk3/Makefile.am
+index b055f67..7122ff3 100644
+--- a/ui/gtk3/Makefile.am
++++ b/ui/gtk3/Makefile.am
+@@ -205,7 +205,7 @@ IBusEmojiDialog_1_0_gir_SCANNERFLAGS = \
+     $(NULL)
+ IBusEmojiDialog-1.0.gir: $(libibus_emoji_dialog) Makefile
+ IBusEmojiDialog_1_0_gir_INCLUDES = Gtk-3.0 GLib-2.0 GObject-2.0 Gio-2.0
+-IBusEmojiDialog_1_0_gir_LIBS = $(libibus) $(libibus_emoji_dialog)
++IBusEmojiDialog_1_0_gir_LIBS = $(libibus_emoji_dialog) $(libibus)
+ IBusEmojiDialog_1_0_gir_FILES =                      \
+     $(addprefix $(srcdir)/,$(introspection_sources)) \
+     $(NULL)
+-- 
+2.9.3
+
+From 8b6f9fa531aa9d9b5d6c0184b2294d071f920d7f Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Thu, 30 Mar 2017 12:08:39 +0900
+Subject: [PATCH] ui/gtk3: Enable to type multiple code points on Emojier
+
+- Can type multiple Unicode characters with digits and Shift-space
+  keys.  E.g. "1f468 1f468 1f466"
+- Always show Unicode points of the selected emoji
+- Removed a function to commit an emoji by typing a digit char since
+  it conflicts with digit annotations, code points but it had enabled
+  with single digits only so not so useful.
+
+R=Shawn.P.Huang@gmail.com
+
+Review URL: https://codereview.appspot.com/321820043
+---
+ ui/gtk3/emojier.vala | 207 ++++++++++++++++++++++++---------------------------
+ 1 file changed, 98 insertions(+), 109 deletions(-)
+
+diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
+index 20c1378..8a2726c 100644
+--- a/ui/gtk3/emojier.vala
++++ b/ui/gtk3/emojier.vala
+@@ -97,12 +97,27 @@ class IBusEmojier : Gtk.Window {
+                 set_label(text);
+         }
+     }
+-    private class EPaddedLabel : Gtk.Box {
++    private class EPaddedLabel : Gtk.Label {
+         public EPaddedLabel(string          text,
+-                            Gtk.Align       align,
+-                            TravelDirection direction=TravelDirection.NONE) {
++                            Gtk.Align       align) {
+             GLib.Object(
+                 name : "IBusEmojierPaddedLabel",
++                halign : align,
++                valign : Gtk.Align.CENTER,
++                margin_start : 20,
++                margin_end : 20,
++                margin_top : 6,
++                margin_bottom : 6
++            );
++            set_text(text);
++        }
++    }
++    private class EPaddedLabelBox : Gtk.Box {
++        public EPaddedLabelBox(string          text,
++                               Gtk.Align       align,
++                               TravelDirection direction=TravelDirection.NONE) {
++            GLib.Object(
++                name : "IBusEmojierPaddedLabelBox",
+                 orientation : Gtk.Orientation.HORIZONTAL,
+                 spacing : 0
+             );
+@@ -118,36 +133,29 @@ class IBusEmojier : Gtk.Window {
+                 }
+                 pack_start(icon, false, true, 0);
+             }
+-            Gtk.Label label = new Gtk.Label(text);
+-            label.set_halign(align);
+-            label.set_valign(Gtk.Align.CENTER);
+-            label.set_margin_start(20);
+-            label.set_margin_end(20);
+-            label.set_margin_top(6);
+-            label.set_margin_bottom(6);
++            EPaddedLabel label = new EPaddedLabel(text, align);
+             pack_start(label, true, true, 0);
+         }
+     }
+-    private class ETitleLabel : Gtk.Box {
+-        private Gtk.Label m_label;
++    private class ETitleLabelBox : Gtk.Box {
++        EPaddedLabel m_lang_label;
+         private Gtk.Button m_close_button;
+         private ulong m_close_handler;
+ 
+-        public ETitleLabel(string    text,
+-                           Gtk.Align align) {
++        public ETitleLabelBox(string    text,
++                              Gtk.Align align) {
+             GLib.Object(
+-                name : "IBusEmojierTitleLabel",
++                name : "IBusEmojierTitleLabelBox",
+                 orientation : Gtk.Orientation.HORIZONTAL,
+                 spacing : 0
+             );
+-            m_label = new Gtk.Label(text);
+-            m_label.set_halign(align);
+-            m_label.set_valign(align);
+-            m_label.set_margin_start(20);
+-            m_label.set_margin_end(20);
+-            m_label.set_margin_top(6);
+-            m_label.set_margin_bottom(6);
+-            pack_start(m_label, true, true, 0);
++            EPaddedLabel label = new EPaddedLabel(text, align);
++            pack_start(label, true, true, 0);
++            Gtk.Separator separator =
++                    new Gtk.Separator (Gtk.Orientation.VERTICAL);
++            pack_start(separator, false, true, 0);
++            m_lang_label = new EPaddedLabel("", align);
++            pack_start(m_lang_label, false, true, 0);
+             IconWidget icon = new IconWidget("window-close", Gtk.IconSize.MENU);
+             m_close_button = new Gtk.Button();
+             m_close_button.add(icon);
+@@ -168,8 +176,8 @@ class IBusEmojier : Gtk.Window {
+                 m_close_handler = 0;
+             }
+         }
+-        public void set_label(string str) {
+-            m_label.set_label(str);
++        public void set_lang_label(string str) {
++            m_lang_label.set_label(str);
+         }
+     }
+ 
+@@ -181,7 +189,7 @@ class IBusEmojier : Gtk.Window {
+     private const uint EMOJI_GRID_PAGE = 10;
+     private ThemedRGBA m_rgba;
+     private Gtk.Box m_vbox;
+-    private ETitleLabel m_title;
++    private ETitleLabelBox m_title;
+     private EEntry m_entry;
+     private string? m_backward;
+     private EScrolledWindow? m_scrolled_window = null;
+@@ -278,8 +286,8 @@ class IBusEmojier : Gtk.Window {
+         m_vbox = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
+         add(m_vbox);
+ 
+-        m_title = new ETitleLabel(_("Emoji Dialog"),
+-                                  Gtk.Align.CENTER);
++        m_title = new ETitleLabelBox(_("Emoji Dialog"),
++                                     Gtk.Align.CENTER);
+         m_vbox.add(m_title);
+         m_entry = new EEntry();
+         m_entry.set_placeholder_text(_("Type annotation or choose emoji"));
+@@ -419,6 +427,21 @@ class IBusEmojier : Gtk.Window {
+     }
+ 
+ 
++    private string utf8_code_point(string str) {
++        StringBuilder buff = new StringBuilder();
++        int length = str.char_count();
++        for (int i = 0; i < length; i++) {
++            unichar ch = str.get_char(0);
++            if (i == 0)
++                buff.append("U+%04X".printf(ch));
++            else
++                buff.append(" %04X".printf(ch));
++            str = str.next_char();
++        }
++        return buff.str;
++    }
++
++
+     private void update_emoji_to_data_dict(IBus.EmojiData data,
+                                            string         lang) {
+         string emoji = data.get_emoji();
+@@ -501,7 +524,7 @@ class IBusEmojier : Gtk.Window {
+     private void remove_all_children() {
+         foreach (Gtk.Widget w in m_vbox.get_children()) {
+             if (w.name == "IBusEmojierEntry" ||
+-                w.name == "IBusEmojierTitleLabel") {
++                w.name == "IBusEmojierTitleLabelBox") {
+                 continue;
+             }
+             w.destroy();
+@@ -514,10 +537,9 @@ class IBusEmojier : Gtk.Window {
+         m_scrolled_window = new EScrolledWindow();
+         set_fixed_size();
+ 
+-        string language = "%s (%s)".printf(
+-            _("Emoji Dialog"),
+-            IBus.get_language_name(m_current_lang_id));
+-        m_title.set_label(language);
++        string language =
++            IBus.get_language_name(m_current_lang_id);
++        m_title.set_lang_label(language);
+         m_vbox.add(m_scrolled_window);
+         Gtk.Viewport viewport = new Gtk.Viewport(null, null);
+         m_scrolled_window.add(viewport);
+@@ -535,8 +557,8 @@ class IBusEmojier : Gtk.Window {
+         uint n = 1;
+         if (m_favorites.length > 0) {
+             EBoxRow row = new EBoxRow("@favorites");
+-            EPaddedLabel widget =
+-                    new EPaddedLabel(_("Favorites"), Gtk.Align.CENTER);
++            EPaddedLabelBox widget =
++                    new EPaddedLabelBox(_("Favorites"), Gtk.Align.CENTER);
+             row.add(widget);
+             m_list_box.add(row);
+             if (n++ == m_category_active_index)
+@@ -551,9 +573,9 @@ class IBusEmojier : Gtk.Window {
+         foreach (unowned string category in categories) {
+             EBoxRow row = new EBoxRow(category);
+             string locale_category = _(category);
+-            EPaddedLabel widget =
+-                    new EPaddedLabel(utf8_title(locale_category),
+-                                     Gtk.Align.CENTER);
++            EPaddedLabelBox widget =
++                    new EPaddedLabelBox(utf8_title(locale_category),
++                                        Gtk.Align.CENTER);
+             row.add(widget);
+             m_list_box.add(row);
+             if (n++ == m_category_active_index)
+@@ -626,18 +648,23 @@ class IBusEmojier : Gtk.Window {
+     }
+ 
+ 
+-    private bool check_unicode_point(string? annotation=null) {
+-        bool check_xdigit_only = true;
+-        if (annotation == null) {
+-            annotation = m_entry.get_text();
+-            m_unicode_point = null;
+-            check_xdigit_only = false;
+-        }
++    private bool check_unicode_point() {
++        string annotation = m_entry.get_text();
++        m_unicode_point = null;
+         GLib.StringBuilder buff = new GLib.StringBuilder();
++        GLib.StringBuilder retval = new GLib.StringBuilder();
+         for (int i = 0; i < annotation.char_count(); i++) {
+             unichar ch = annotation.get_char(i);
+             if (ch == 0)
+                 return false;
++            if (ch.isspace()) {
++                unichar code = (unichar)buff.str.to_ulong(null, 16);
++                buff.erase();
++                if (!code.validate())
++                    return false;
++                retval.append(code.to_string());
++                continue;
++            }
+             if (!ch.isxdigit())
+                 return false;
+             buff.append_unichar(ch);
+@@ -645,9 +672,8 @@ class IBusEmojier : Gtk.Window {
+         unichar code = (unichar)buff.str.to_ulong(null, 16);
+         if (!code.validate())
+             return false;
+-        if (check_xdigit_only)
+-            return true;
+-        m_unicode_point = code.to_string();
++        retval.append(code.to_string());
++        m_unicode_point = retval.str;
+         if (m_unicode_point == null)
+             return true;
+         IBus.Text text = new IBus.Text.from_string(m_unicode_point);
+@@ -699,9 +725,10 @@ class IBusEmojier : Gtk.Window {
+         if (m_backward != null) {
+             string backward_desc =
+                     "%s (%u / %u)".printf(m_backward, cursor, ncandidates - 1);
+-            EPaddedLabel label = new EPaddedLabel(backward_desc,
+-                                                  Gtk.Align.CENTER,
+-                                                  TravelDirection.BACKWARD);
++            EPaddedLabelBox label =
++                    new EPaddedLabelBox(backward_desc,
++                                        Gtk.Align.CENTER,
++                                        TravelDirection.BACKWARD);
+             Gtk.Button button = new Gtk.Button();
+             button.add(label);
+             m_vbox.add(button);
+@@ -776,27 +803,24 @@ class IBusEmojier : Gtk.Window {
+             IBus.Text candidate = m_lookup_table.get_candidate(cursor);
+             unowned IBus.EmojiData? data =
+                     m_emoji_to_data_dict.lookup(candidate.text);
+-            if (cursor == 0 && candidate.text == m_unicode_point) {
+-                EPaddedLabel widget = new EPaddedLabel(
+-                        _("Description: Unicode point U+%04X").printf(
+-                                m_unicode_point.get_char(0)),
+-                        Gtk.Align.START);
+-                m_vbox.add(widget);
+-                widget.show_all();
+-                if (data == null)
+-                    return;
+-            } else if (data == null) {
++            if (data == null) {
+                 // TODO: Provide a custom description and annotation for
+                 // the favorite emojis.
+-                EPaddedLabel widget = new EPaddedLabel(
++                EPaddedLabelBox widget = new EPaddedLabelBox(
+                         _("Description: %s").printf(_("None")),
+                         Gtk.Align.START);
+                 m_vbox.add(widget);
+                 widget.show_all();
++                EPaddedLabelBox widget_code = new EPaddedLabelBox(
++                        _("Code point: %s").printf(
++                                utf8_code_point(candidate.text)),
++                        Gtk.Align.START);
++                m_vbox.add(widget_code);
++                widget_code.show_all();
+                 return;
+             } else {
+                 unowned string description = data.get_description();
+-                EPaddedLabel widget = new EPaddedLabel(
++                EPaddedLabelBox widget = new EPaddedLabelBox(
+                         _("Description: %s").printf(description),
+                         Gtk.Align.START);
+                 m_vbox.add(widget);
+@@ -812,19 +836,26 @@ class IBusEmojier : Gtk.Window {
+                 else
+                     buff.append_printf(" | %s", annotation);
+                 if (buff.str.char_count() > 30) {
+-                    EPaddedLabel widget = new EPaddedLabel(buff.str,
+-                                                           Gtk.Align.START);
++                    EPaddedLabelBox widget =
++                            new EPaddedLabelBox(buff.str,
++                                                Gtk.Align.START);
+                     m_vbox.add(widget);
+                     widget.show_all();
+                     buff.erase();
+                 }
+             }
+             if (buff.str != "") {
+-                EPaddedLabel widget = new EPaddedLabel(buff.str,
+-                                                       Gtk.Align.START);
++                EPaddedLabelBox widget = new EPaddedLabelBox(buff.str,
++                                                             Gtk.Align.START);
+                 m_vbox.add(widget);
+                 widget.show_all();
+             }
++            EPaddedLabelBox widget_code = new EPaddedLabelBox(
++                    _("Code point: %s").printf(
++                            utf8_code_point(candidate.text)),
++                    Gtk.Align.START);
++            m_vbox.add(widget_code);
++            widget_code.show_all();
+         }
+     }
+ 
+@@ -837,43 +868,6 @@ class IBusEmojier : Gtk.Window {
+     }
+ 
+ 
+-    private bool if_in_range_of_lookup(uint keyval) {
+-        if (!m_candidate_panel_is_visible)
+-            return false;
+-        StringBuilder buffer_string = new StringBuilder(m_entry.get_text());
+-        unichar ch = IBus.keyval_to_unicode (keyval);
+-        buffer_string.append_unichar(ch);
+-        if (check_unicode_point(buffer_string.str))
+-            return false;
+-        if (keyval < Gdk.Key.@0 || keyval > Gdk.Key.@9)
+-            return false;
+-        if (keyval == Gdk.Key.@0)
+-            keyval = Gdk.Key.@9 + 1;
+-        uint index = keyval - Gdk.Key.@1 + 1;
+-        uint candidates = m_lookup_table.get_number_of_candidates();
+-        uint cursor_pos = m_lookup_table.get_cursor_pos();
+-        uint page_size = m_lookup_table.get_page_size();
+-        if (index > uint.min(candidates - (cursor_pos / page_size) * page_size,
+-                             page_size)) {
+-            return false;
+-        }
+-        return true;
+-    }
+-
+-
+-    private void set_number_on_lookup(uint keyval) {
+-        if (keyval == Gdk.Key.@0)
+-            keyval = Gdk.Key.@9 + 1;
+-        uint index = keyval - Gdk.Key.@1;
+-        uint cursor_pos = m_lookup_table.get_cursor_pos();
+-        uint cursor_in_page= m_lookup_table.get_cursor_in_page();
+-        uint real_index = cursor_pos - cursor_in_page + index;
+-        m_lookup_table.set_cursor_pos(real_index);
+-        IBus.Text text = m_lookup_table.get_candidate(real_index);
+-        m_result = text.text;
+-    }
+-
+-
+     private void enter_notify_disable_with_timer() {
+         // Enable keyboard operation and disable mouse operation.
+         m_enter_notify_enable = false;
+@@ -1154,11 +1148,6 @@ class IBusEmojier : Gtk.Window {
+          * key_release_event() so that this can know if the event
+          * was handled by IME.
+          */
+-        if (if_in_range_of_lookup(keyval)) {
+-            set_number_on_lookup(keyval);
+-            m_loop.quit();
+-            return true;
+-        }
+         switch (keyval) {
+         case Gdk.Key.Escape:
+             if (key_press_cursor_escape())
+-- 
+2.9.3
+
+From cb0a36c254dc7a96b2a984e715f96cc2ec32e2d5 Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Mon, 3 Apr 2017 12:24:27 +0900
+Subject: [PATCH] src: Enable unicode_alt in EmojiOne json file
+
+EmojiOne json file has unicode_alt property which includes
+emoji modifer characters.
+
+Review URL: https://codereview.appspot.com/316420043
+---
+ src/emoji-parser.c   | 20 +++++++++++++++++---
+ src/ibusemoji.c      | 48 ++++++++++++++++++++++++++++++++++++++++++++----
+ src/ibusemoji.h      | 14 ++++++++++++++
+ ui/gtk3/emojier.vala |  9 ++++++---
+ 4 files changed, 81 insertions(+), 10 deletions(-)
+
+diff --git a/src/emoji-parser.c b/src/emoji-parser.c
+index f9e3470..e5dce3f 100644
+--- a/src/emoji-parser.c
++++ b/src/emoji-parser.c
+@@ -40,6 +40,7 @@
+ typedef struct _EmojiData EmojiData;
+ struct _EmojiData {
+     gchar      *emoji;
++    gchar      *emoji_alternates;
+     GSList     *annotations;
+     gboolean    is_annotation;
+     gchar      *description;
+@@ -54,6 +55,7 @@ reset_emoji_element (EmojiData *data)
+     g_assert (data != NULL);
+ 
+     g_clear_pointer (&data->emoji, g_free);
++    g_clear_pointer (&data->emoji_alternates, g_free);
+     g_slist_free_full (data->annotations, g_free);
+     data->annotations = NULL;
+     g_clear_pointer (&data->description, g_free);
+@@ -112,6 +114,10 @@ update_emoji_list (EmojiData *data)
+                                      "category",
+                                      data->category ? data->category
+                                              : g_strdup (""),
++                                     "emoji-alternates",
++                                     data->emoji_alternates
++                                             ? data->emoji_alternates
++                                             : g_strdup (""),
+                                      NULL);
+         data->list = g_slist_append (data->list, emoji);
+     }
+@@ -271,7 +277,8 @@ failed_to_parse_unicode_annotations:
+ 
+ static gboolean
+ parse_emojione_unicode (JsonNode  *node,
+-                        EmojiData *data)
++                        EmojiData *data,
++                        gboolean   is_alternates)
+ {
+     const gchar *str, *unicode;
+     gchar *endptr = NULL;
+@@ -305,7 +312,10 @@ parse_emojione_unicode (JsonNode  *node,
+         endptr = NULL;
+     }
+ 
+-    data->emoji = g_string_free (emoji, FALSE);
++    if (is_alternates)
++        data->emoji_alternates = g_string_free (emoji, FALSE);
++    else
++        data->emoji = g_string_free (emoji, FALSE);
+ 
+     return TRUE;
+ }
+@@ -480,7 +490,11 @@ parse_emojione_emoji_data (JsonNode    *node,
+                            EmojiData   *data)
+ {
+     if (g_strcmp0 (member, "unicode") == 0)
+-        return parse_emojione_unicode (node, data);
++        return parse_emojione_unicode (node, data, FALSE);
++    else if (g_strcmp0 (member, "unicode_alt") == 0)
++        return parse_emojione_unicode (node, data, TRUE);
++    else if (g_strcmp0 (member, "unicode_alternates") == 0)
++        return parse_emojione_unicode (node, data, TRUE);
+     else if (g_strcmp0 (member, "shortname") == 0)
+         return parse_emojione_shortname (node, data);
+     else if (g_strcmp0 (member, "name") == 0)
+diff --git a/src/ibusemoji.c b/src/ibusemoji.c
+index c61cd70..4be092a 100644
+--- a/src/ibusemoji.c
++++ b/src/ibusemoji.c
+@@ -29,14 +29,15 @@
+ #include "ibusinternal.h"
+ 
+ #define IBUS_EMOJI_DATA_MAGIC "IBusEmojiData"
+-#define IBUS_EMOJI_DATA_VERSION (2)
++#define IBUS_EMOJI_DATA_VERSION (3)
+ 
+ enum {
+     PROP_0 = 0,
+     PROP_EMOJI,
+     PROP_ANNOTATIONS,
+     PROP_DESCRIPTION,
+-    PROP_CATEGORY
++    PROP_CATEGORY,
++    PROP_EMOJI_ALTERNATES
+ };
+ 
+ struct _IBusEmojiDataPrivate {
+@@ -44,6 +45,7 @@ struct _IBusEmojiDataPrivate {
+     GSList     *annotations;
+     gchar      *description;
+     gchar      *category;
++    gchar      *emoji_alternates;
+ };
+ 
+ #define IBUS_EMOJI_DATA_GET_PRIVATE(o)  \
+@@ -142,6 +144,19 @@ ibus_emoji_data_class_init (IBusEmojiDataClass *class)
+                         "The emoji category",
+                         "",
+                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
++
++    /**
++     * IBusEmojiData:emoji_alternates:
++     *
++     * The emoji alternate characters
++     */
++    g_object_class_install_property (gobject_class,
++                    PROP_EMOJI_ALTERNATES,
++                    g_param_spec_string ("emoji-alternates",
++                        "emoji alternate charasters",
++                        "The emoji alternate characters UTF-8",
++                        "",
++                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ }
+ 
+ static void
+@@ -180,19 +195,24 @@ ibus_emoji_data_set_property (IBusEmojiData *emoji,
+         emoji->priv->emoji = g_value_dup_string (value);
+         break;
+     case PROP_ANNOTATIONS:
+-        g_assert (emoji->priv->annotations == NULL);
++        if (emoji->priv->annotations)
++            g_slist_free_full (emoji->priv->annotations, g_free);
+         emoji->priv->annotations =
+                 g_slist_copy_deep (g_value_get_pointer (value),
+                                    (GCopyFunc) g_strdup, NULL);
+         break;
+     case PROP_DESCRIPTION:
+-        g_assert (emoji->priv->description == NULL);
++        g_free (emoji->priv->description);
+         emoji->priv->description = g_value_dup_string (value);
+         break;
+     case PROP_CATEGORY:
+         g_assert (emoji->priv->category == NULL);
+         emoji->priv->category = g_value_dup_string (value);
+         break;
++    case PROP_EMOJI_ALTERNATES:
++        g_assert (emoji->priv->emoji_alternates == NULL);
++        emoji->priv->emoji_alternates = g_value_dup_string (value);
++        break;
+     default:
+         G_OBJECT_WARN_INVALID_PROPERTY_ID (emoji, prop_id, pspec);
+     }
+@@ -220,6 +240,9 @@ ibus_emoji_data_get_property (IBusEmojiData *emoji,
+     case PROP_CATEGORY:
+         g_value_set_string (value, ibus_emoji_data_get_category (emoji));
+         break;
++    case PROP_EMOJI_ALTERNATES:
++        g_value_set_string (value, ibus_emoji_data_get_emoji_alternates(emoji));
++        break;
+     default:
+         G_OBJECT_WARN_INVALID_PROPERTY_ID (emoji, prop_id, pspec);
+     }
+@@ -247,6 +270,9 @@ ibus_emoji_data_serialize (IBusEmojiData   *emoji,
+     }
+     g_variant_builder_add (builder, "s", NOTNULL (emoji->priv->description));
+     g_variant_builder_add (builder, "s", NOTNULL (emoji->priv->category));
++    g_variant_builder_add (builder, "s",
++                           NOTNULL (emoji->priv->emoji_alternates));
++#undef NOTNULL
+     return TRUE;
+ }
+ 
+@@ -277,6 +303,10 @@ ibus_emoji_data_deserialize (IBusEmojiData *emoji,
+                                      &emoji->priv->description);
+     ibus_g_variant_get_child_string (variant, retval++,
+                                      &emoji->priv->category);
++    if (g_variant_n_children (variant) < retval + 1)
++        return retval;
++    ibus_g_variant_get_child_string (variant, retval++,
++                                     &emoji->priv->emoji_alternates);
+     return retval;
+ }
+ 
+@@ -295,6 +325,7 @@ ibus_emoji_data_copy (IBusEmojiData       *dest,
+                                                       NULL);
+     dest->priv->description      = g_strdup (src->priv->description);
+     dest->priv->category         = g_strdup (src->priv->category);
++    dest->priv->emoji_alternates = g_strdup (src->priv->emoji_alternates);
+     return TRUE;
+ }
+ 
+@@ -314,6 +345,7 @@ ibus_emoji_data_new (const gchar *first_property_name, ...)
+     g_assert (emoji->priv->emoji != NULL);
+     g_assert (emoji->priv->description != NULL);
+     g_assert (emoji->priv->category != NULL);
++    g_assert (emoji->priv->emoji_alternates != NULL);
+     return emoji;
+ }
+ 
+@@ -370,6 +402,14 @@ ibus_emoji_data_get_category (IBusEmojiData *emoji)
+     return emoji->priv->category;
+ }
+ 
++const gchar *
++ibus_emoji_data_get_emoji_alternates (IBusEmojiData *emoji)
++{
++    g_return_val_if_fail (IBUS_IS_EMOJI_DATA (emoji), NULL);
++
++    return emoji->priv->emoji_alternates;
++}
++
+ 
+ static void
+ variant_foreach_add_emoji (IBusEmojiData   *emoji,
+diff --git a/src/ibusemoji.h b/src/ibusemoji.h
+index eb24fdd..233cadd 100644
+--- a/src/ibusemoji.h
++++ b/src/ibusemoji.h
+@@ -156,6 +156,20 @@ const gchar *   ibus_emoji_data_get_category    (IBusEmojiData *emoji);
+ 
+ 
+ /**
++ * ibus_emoji_data_get_emoji_alternates:
++ * @emoji : An #IBusEmojiData
++ *
++ * Gets the emoji alternate characters in #IBusEmojiData. It should not be
++ * freed. The alternates are defined in "unicode_alt" in EmojiOne json.
++ *
++ * Returns: emoji alternates property in #IBusEmojiData
++ *
++ */
++const gchar *   ibus_emoji_data_get_emoji_alternates
++                                                (IBusEmojiData *emoji);
++
++
++/**
+  * ibus_emoji_dict_save:
+  * @path: A path of the saved dictionary file.
+  * @dict: (element-type utf8 gpointer) (transfer none): An Emoji dictionary
+diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
+index 8a2726c..7b6107f 100644
+--- a/ui/gtk3/emojier.vala
++++ b/ui/gtk3/emojier.vala
+@@ -381,7 +381,8 @@ class IBusEmojier : Gtk.Window {
+ 
+ 
+     private void update_annotation_to_emojis_dict(IBus.EmojiData data) {
+-        string emoji = data.get_emoji();
++        string emoji = (data.get_emoji_alternates() != "") ?
++                data.get_emoji_alternates() : data.get_emoji();
+         unowned GLib.SList<string> annotations = data.get_annotations();
+         foreach (string annotation in annotations) {
+             bool has_emoji = false;
+@@ -444,7 +445,8 @@ class IBusEmojier : Gtk.Window {
+ 
+     private void update_emoji_to_data_dict(IBus.EmojiData data,
+                                            string         lang) {
+-        string emoji = data.get_emoji();
++        string emoji = (data.get_emoji_alternates() != "") ?
++                data.get_emoji_alternates() : data.get_emoji();
+         if (lang == "en") {
+             string description = utf8_down(data.get_description());
+             unowned GLib.SList<string> annotations = data.get_annotations();
+@@ -496,7 +498,8 @@ class IBusEmojier : Gtk.Window {
+ 
+     private void update_category_to_emojis_dict(IBus.EmojiData data,
+                                                 string         lang) {
+-        string emoji = data.get_emoji();
++        string emoji = (data.get_emoji_alternates() != "") ?
++                data.get_emoji_alternates() : data.get_emoji();
+         string category = data.get_category();
+         if (lang == "en" && category != "") {
+             bool has_emoji = false;
+-- 
+2.9.3
+

diff --git a/ibus.spec b/ibus.spec
index 013f96a..f8ff6b0 100644
--- a/ibus.spec
+++ b/ibus.spec
@@ -28,7 +28,7 @@
 
 Name:           ibus
 Version:        1.5.15
-Release:        5%{?dist}
+Release:        6%{?dist}
 Summary:        Intelligent Input Bus for Linux OS
 License:        LGPLv2+
 Group:          System Environment/Libraries
@@ -427,6 +427,11 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache &> /dev/null || :
 %{_datadir}/gtk-doc/html/*
 
 %changelog
+* Wed Apr 05 2017 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.15-6
+- Enabled unicode_alt in EmojiOne json file
+- Enabled to type multiple code points on Emojier
+- Fixed IBusEmojiDialog_1_0_gir_LIBS for --as-needed LDFLAGS
+
 * Mon Mar 27 2017 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.15-5
 - Moved language setting on IBusEmojier to ibus-setup.
 - Enabled strcasecmp to match emoji annotations.

                 reply	other threads:[~2026-05-31  2:06 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178019319156.1.14451570342241206854.rpms-ibus-c46a1978822c@fedoraproject.org \
    --to=tfujiwar@redhat.com \
    --cc=git-commits@fedoraproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox