tdawson / rpms / ibus

Forked from rpms/ibus 3 years ago
Clone
9e73724
From 997e5cb1b100c6af267b8121445db1db7e580d5f Mon Sep 17 00:00:00 2001
9e73724
From: "Eric R. Schulz" <eric@ers35.com>
9e73724
Date: Thu, 18 Aug 2016 11:17:11 +0900
9e73724
Subject: [PATCH 1/3] Fix GVariant leaks
9e73724
9e73724
The expectation is that g_dbus_message_set_body() takes ownership of the
9e73724
GVariant, but this does not happen if the BusInputContext connection is NULL.
9e73724
Call g_variant_unref() in that case to free the memory. Alternatively, a
9e73724
GVariantBuilder could be used.
9e73724
9e73724
BUG=https://github.com/ibus/ibus/pull/1872
9e73724
R=Shawn.P.Huang@gmail.com
9e73724
9e73724
Review URL: https://codereview.appspot.com/307050043
9e73724
9e73724
Patch from Eric R. Schulz <eric@ers35.com>.
9e73724
---
9e73724
 bus/inputcontext.c | 8 ++++++--
9e73724
 1 file changed, 6 insertions(+), 2 deletions(-)
9e73724
9e73724
diff --git a/bus/inputcontext.c b/bus/inputcontext.c
9e73724
index 6c82e20..0612fac 100644
9e73724
--- a/bus/inputcontext.c
9e73724
+++ b/bus/inputcontext.c
9e73724
@@ -673,8 +673,10 @@ bus_input_context_send_signal (BusInputContext *context,
9e73724
                                GVariant        *parameters,
9e73724
                                GError         **error)
9e73724
 {
9e73724
-    if (context->connection == NULL)
9e73724
+    if (context->connection == NULL) {
9e73724
+        g_variant_unref (parameters);
9e73724
         return TRUE;
9e73724
+    }
9e73724
 
9e73724
     GDBusMessage *message = g_dbus_message_new_signal (ibus_service_get_object_path ((IBusService *)context),
9e73724
                                                        interface_name,
9e73724
@@ -704,8 +706,10 @@ bus_input_context_emit_signal (BusInputContext *context,
9e73724
                                GVariant        *parameters,
9e73724
                                GError         **error)
9e73724
 {
9e73724
-    if (context->connection == NULL)
9e73724
+    if (context->connection == NULL) {
9e73724
+        g_variant_unref (parameters);
9e73724
         return TRUE;
9e73724
+    }
9e73724
 
9e73724
     return bus_input_context_send_signal (context,
9e73724
                                           "org.freedesktop.IBus.InputContext",
9e73724
-- 
9e73724
2.7.4
9e73724
9e73724
From ceb6a9b47deaa898d8151606831669a7446ad382 Mon Sep 17 00:00:00 2001
9e73724
From: fujiwarat <takao.fujiwara1@gmail.com>
9e73724
Date: Tue, 6 Sep 2016 13:05:35 +0900
9e73724
Subject: [PATCH 2/3] ui/gtk3: Fix radio buttons on Property Panel
9e73724
9e73724
Use gtk_container_remove() instead g_object_unref() because
9e73724
if an widget has a parent, it's not destroyed and the signal is not
9e73724
sent to the parent since the parent was destroyed.
9e73724
9e73724
R=shawn.p.huang@gmail.com
9e73724
9e73724
Review URL: https://codereview.appspot.com/302650043
9e73724
---
9e73724
 ui/gtk3/propertypanel.vala | 10 ++++++----
9e73724
 1 file changed, 6 insertions(+), 4 deletions(-)
9e73724
9e73724
diff --git a/ui/gtk3/propertypanel.vala b/ui/gtk3/propertypanel.vala
9e73724
index 6d5fd81..ea960b8 100644
9e73724
--- a/ui/gtk3/propertypanel.vala
9e73724
+++ b/ui/gtk3/propertypanel.vala
9e73724
@@ -2,9 +2,9 @@
9e73724
  *
9e73724
  * ibus - The Input Bus
9e73724
  *
9e73724
- * Copyright(c) 2013-2015 Red Hat, Inc.
9e73724
+ * Copyright(c) 2013-2016 Red Hat, Inc.
9e73724
  * Copyright(c) 2013-2015 Peng Huang <shawn.p.huang@gmail.com>
9e73724
- * Copyright(c) 2013-2015 Takao Fujiwara <takao.fujiwara1@gmail.com>
9e73724
+ * Copyright(c) 2013-2016 Takao Fujiwara <takao.fujiwara1@gmail.com>
9e73724
  *
9e73724
  * This library is free software; you can redistribute it and/or
9e73724
  * modify it under the terms of the GNU Lesser General Public
9e73724
@@ -85,7 +85,7 @@ public class PropertyPanel : Gtk.Box {
9e73724
         debug("set_properties()\n");
9e73724
 
9e73724
         foreach (var item in m_items)
9e73724
-            (item as Gtk.Widget).destroy();
9e73724
+            remove((item as Gtk.Widget));
9e73724
         m_items = {};
9e73724
 
9e73724
         m_props = props;
9e73724
@@ -481,6 +481,8 @@ public class PropMenu : Gtk.Menu, IPropToolItem {
9e73724
 
9e73724
     public override void destroy() {
9e73724
         m_parent_button = null;
9e73724
+        foreach (var item in m_items)
9e73724
+            remove((item as Gtk.Widget));
9e73724
         m_items = {};
9e73724
         base.destroy();
9e73724
     }
9e73724
@@ -739,7 +741,7 @@ public class PropMenuToolButton : PropToggleToolButton, IPropToolItem {
9e73724
         m_menu = new PropMenu(prop);
9e73724
         m_menu.deactivate.connect((m) =>
9e73724
                                   set_active(false));
9e73724
-        m_menu.property_activate.connect((w, k, s) =>
9e73724
+        m_menu.property_activate.connect((k, s) =>
9e73724
                                          property_activate(k, s));
9e73724
 
9e73724
         base.set_property(prop);
9e73724
-- 
9e73724
2.7.4
9e73724
bea250b
From e795eda1a3b054e6fdc921bfe04c83733761905f Mon Sep 17 00:00:00 2001
bea250b
From: fujiwarat <takao.fujiwara1@gmail.com>
bea250b
Date: Thu, 6 Oct 2016 15:28:24 +0900
bea250b
Subject: [PATCH 1/3] src: Hide lookup table if emoji annotation does not hit
bea250b
bea250b
If emoji annotation hits "aaa" but not "aaab", hide the lookup
bea250b
window with "aaab".
bea250b
Also hide the lookup window with Escape key.
bea250b
bea250b
BUG=rhbz#1380675
bea250b
bea250b
Review URL: https://codereview.appspot.com/307400043
bea250b
---
bea250b
 src/ibusenginesimple.c | 14 ++++++++++++--
bea250b
 1 file changed, 12 insertions(+), 2 deletions(-)
bea250b
bea250b
diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c
bea250b
index 8efe5a9..b22b06f 100644
bea250b
--- a/src/ibusenginesimple.c
bea250b
+++ b/src/ibusenginesimple.c
bea250b
@@ -1018,6 +1018,10 @@ ibus_engine_simple_process_key_event (IBusEngine *engine,
bea250b
         }
bea250b
         else if (is_escape) {
bea250b
             ibus_engine_simple_reset (engine);
bea250b
+            if (priv->lookup_table != NULL && priv->lookup_table_visible) {
bea250b
+                priv->lookup_table_visible = FALSE;
bea250b
+                ibus_engine_simple_update_lookup_and_aux_table (simple);
bea250b
+            }
bea250b
             return TRUE;
bea250b
         }
bea250b
 
bea250b
@@ -1165,6 +1169,10 @@ ibus_engine_simple_process_key_event (IBusEngine *engine,
bea250b
         }
bea250b
         else if (is_escape) {
bea250b
             ibus_engine_simple_reset (engine);
bea250b
+            if (priv->lookup_table != NULL && priv->lookup_table_visible) {
bea250b
+                priv->lookup_table_visible = FALSE;
bea250b
+                ibus_engine_simple_update_lookup_and_aux_table (simple);
bea250b
+            }
bea250b
             return TRUE;
bea250b
         }
bea250b
     } else {
bea250b
@@ -1243,8 +1251,10 @@ ibus_engine_simple_process_key_event (IBusEngine *engine,
bea250b
                         priv->lookup_table_visible = FALSE;
bea250b
                         update_lookup_table = TRUE;
bea250b
                     }
bea250b
-                }
bea250b
-                else if (check_emoji_table (simple, n_compose, -1)) {
bea250b
+                } else if (check_emoji_table (simple, n_compose, -1)) {
bea250b
+                    update_lookup_table = TRUE;
bea250b
+                } else {
bea250b
+                    priv->lookup_table_visible = FALSE;
bea250b
                     update_lookup_table = TRUE;
bea250b
                 }
bea250b
             }
bea250b
-- 
bea250b
2.7.4
bea250b
bea250b
From 4d86e59d0245df6d3a6aa1a32cdf7702b6dc7f0d Mon Sep 17 00:00:00 2001
bea250b
From: fujiwarat <takao.fujiwara1@gmail.com>
bea250b
Date: Thu, 6 Oct 2016 15:35:03 +0900
bea250b
Subject: [PATCH 2/3] src: Enable to type digit to commit emoji on lookup
bea250b
 window
bea250b
bea250b
Enables to commit an emoji on the lookup window by a digit key.
bea250b
Before this patch, Ctrl-Shift-U, "11" shows emojis of 11 clock.
bea250b
After this patch, Ctrl-Shift-U, "11" commits an emoji of 1 clock.
bea250b
Probably Ctrl-Shift-U, "clock" can be a workaround.
bea250b
bea250b
BUG=rhbz#1380690
bea250b
R=Shawn.P.Huang@gmail.com
bea250b
bea250b
Review URL: https://codereview.appspot.com/309640043
bea250b
---
bea250b
 src/ibusenginesimple.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++--
bea250b
 1 file changed, 78 insertions(+), 2 deletions(-)
bea250b
bea250b
diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c
bea250b
index b22b06f..23e1c9d 100644
bea250b
--- a/src/ibusenginesimple.c
bea250b
+++ b/src/ibusenginesimple.c
bea250b
@@ -901,6 +901,66 @@ ibus_engine_simple_update_lookup_and_aux_table (IBusEngineSimple *simple)
bea250b
 }
bea250b
 
bea250b
 static gboolean
bea250b
+ibus_engine_simple_if_in_range_of_lookup_table (IBusEngineSimple *simple,
bea250b
+                                                guint             keyval)
bea250b
+{
bea250b
+    IBusEngineSimplePrivate *priv;
bea250b
+    int index, candidates, cursor_pos, cursor_in_page, page_size;
bea250b
+
bea250b
+    priv = simple->priv;
bea250b
+
bea250b
+    if (priv->lookup_table == NULL || !priv->lookup_table_visible)
bea250b
+        return FALSE;
bea250b
+    if (keyval < IBUS_KEY_0 || keyval > IBUS_KEY_9)
bea250b
+        return FALSE;
bea250b
+    if (keyval == IBUS_KEY_0)
bea250b
+        keyval = IBUS_KEY_9 + 1;
bea250b
+    index = keyval - IBUS_KEY_1;
bea250b
+    candidates =
bea250b
+            ibus_lookup_table_get_number_of_candidates (priv->lookup_table);
bea250b
+    cursor_pos = ibus_lookup_table_get_cursor_pos (priv->lookup_table);
bea250b
+    cursor_in_page = ibus_lookup_table_get_cursor_in_page (priv->lookup_table);
bea250b
+    page_size = ibus_lookup_table_get_page_size (priv->lookup_table);
bea250b
+    if (index > ((candidates - (cursor_pos - cursor_in_page)) % page_size))
bea250b
+        return FALSE;
bea250b
+    return TRUE;
bea250b
+}
bea250b
+
bea250b
+static void
bea250b
+ibus_engine_simple_set_number_on_lookup_table (IBusEngineSimple *simple,
bea250b
+                                               guint             keyval,
bea250b
+                                               int               n_compose)
bea250b
+{
bea250b
+    IBusEngineSimplePrivate *priv;
bea250b
+    int index, cursor_pos, cursor_in_page, real_index;
bea250b
+
bea250b
+    priv = simple->priv;
bea250b
+
bea250b
+    if (keyval == IBUS_KEY_0)
bea250b
+        keyval = IBUS_KEY_9 + 1;
bea250b
+    index = keyval - IBUS_KEY_1;
bea250b
+    cursor_pos = ibus_lookup_table_get_cursor_pos (priv->lookup_table);
bea250b
+    cursor_in_page = ibus_lookup_table_get_cursor_in_page (priv->lookup_table);
bea250b
+    real_index = cursor_pos - cursor_in_page + index;
bea250b
+
bea250b
+    ibus_lookup_table_set_cursor_pos (priv->lookup_table, real_index);
bea250b
+    check_emoji_table (simple, n_compose, real_index);
bea250b
+    priv->lookup_table_visible = FALSE;
bea250b
+    ibus_engine_simple_update_lookup_and_aux_table (simple);
bea250b
+
bea250b
+    if (priv->tentative_emoji && *priv->tentative_emoji) {
bea250b
+        ibus_engine_simple_commit_str (simple, priv->tentative_emoji);
bea250b
+        priv->compose_buffer[0] = 0;
bea250b
+    } else {
bea250b
+        g_clear_pointer (&priv->tentative_emoji, g_free);
bea250b
+        priv->in_emoji_sequence = FALSE;
bea250b
+        priv->compose_buffer[0] = 0;
bea250b
+    }
bea250b
+
bea250b
+    ibus_engine_simple_update_preedit_text (simple);
bea250b
+}
bea250b
+
bea250b
+static gboolean
bea250b
 ibus_engine_simple_process_key_event (IBusEngine *engine,
bea250b
                                       guint       keyval,
bea250b
                                       guint       keycode,
bea250b
@@ -1162,7 +1222,15 @@ ibus_engine_simple_process_key_event (IBusEngine *engine,
bea250b
         }
bea250b
     } else if (priv->in_emoji_sequence) {
bea250b
         if (printable_keyval) {
bea250b
-            priv->compose_buffer[n_compose++] = printable_keyval;
bea250b
+            if (!ibus_engine_simple_if_in_range_of_lookup_table (simple,
bea250b
+                        printable_keyval)) {
bea250b
+                /* digit keyval can be an index on the current lookup table
bea250b
+                 * but it also can be a part of an emoji annotation.
bea250b
+                 * E.g. "1" and "2" are  indexes of emoji "1".
bea250b
+                 * "100" is an annotation of the emoji "100".
bea250b
+                 */
bea250b
+                priv->compose_buffer[n_compose++] = printable_keyval;
bea250b
+            }
bea250b
         }
bea250b
         else if (is_space && (modifiers & IBUS_SHIFT_MASK)) {
bea250b
             priv->compose_buffer[n_compose++] = IBUS_KEY_space;
bea250b
@@ -1243,7 +1311,15 @@ ibus_engine_simple_process_key_event (IBusEngine *engine,
bea250b
             }
bea250b
 
bea250b
             if (!update_lookup_table) {
bea250b
-                if (is_hex_end && !is_space) {
bea250b
+                if (ibus_engine_simple_if_in_range_of_lookup_table (simple,
bea250b
+                            keyval)) {
bea250b
+                        ibus_engine_simple_set_number_on_lookup_table (
bea250b
+                                simple,
bea250b
+                                keyval,
bea250b
+                                n_compose);
bea250b
+                        return TRUE;
bea250b
+                }
bea250b
+                else if (is_hex_end && !is_space) {
bea250b
                     if (priv->lookup_table) {
bea250b
                         int index = (int) ibus_lookup_table_get_cursor_pos (
bea250b
                                 priv->lookup_table);
bea250b
-- 
bea250b
2.7.4
bea250b
bea250b
From faf5e3c56d746d2f171618d552cff9149bb1d952 Mon Sep 17 00:00:00 2001
bea250b
From: fujiwarat <takao.fujiwara1@gmail.com>
bea250b
Date: Thu, 6 Oct 2016 15:37:25 +0900
bea250b
Subject: [PATCH 3/3] src: Enable PageUp, PageDown, CandidateClick buttons with
bea250b
 emoji lookup
bea250b
bea250b
BUG=rhbz#1380691
bea250b
bea250b
Review URL: https://codereview.appspot.com/312760043
bea250b
---
bea250b
 src/ibusenginesimple.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
bea250b
 1 file changed, 55 insertions(+)
bea250b
bea250b
diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c
bea250b
index 23e1c9d..65c33a0 100644
bea250b
--- a/src/ibusenginesimple.c
bea250b
+++ b/src/ibusenginesimple.c
bea250b
@@ -107,6 +107,13 @@ static gboolean ibus_engine_simple_process_key_event
bea250b
                                                  guint               keyval,
bea250b
                                                  guint               keycode,
bea250b
                                                  guint               modifiers);
bea250b
+static void     ibus_engine_simple_page_down   (IBusEngine          *engine);
bea250b
+static void     ibus_engine_simple_page_up     (IBusEngine          *engine);
bea250b
+static void     ibus_engine_simple_candidate_clicked
bea250b
+                                               (IBusEngine          *engine,
bea250b
+                                                guint                index,
bea250b
+                                                guint                button,
bea250b
+                                                guint                state);
bea250b
 static void     ibus_engine_simple_commit_char (IBusEngineSimple    *simple,
bea250b
                                                 gunichar             ch);
bea250b
 static void     ibus_engine_simple_commit_str  (IBusEngineSimple    *simple,
bea250b
@@ -128,6 +135,10 @@ ibus_engine_simple_class_init (IBusEngineSimpleClass *class)
bea250b
     engine_class->reset     = ibus_engine_simple_reset;
bea250b
     engine_class->process_key_event
bea250b
                             = ibus_engine_simple_process_key_event;
bea250b
+    engine_class->page_down = ibus_engine_simple_page_down;
bea250b
+    engine_class->page_up   = ibus_engine_simple_page_up;
bea250b
+    engine_class->candidate_clicked
bea250b
+                            = ibus_engine_simple_candidate_clicked;
bea250b
 
bea250b
     g_type_class_add_private (class, sizeof (IBusEngineSimplePrivate));
bea250b
 }
bea250b
@@ -1395,6 +1406,50 @@ ibus_engine_simple_process_key_event (IBusEngine *engine,
bea250b
     return no_sequence_matches (simple, n_compose, keyval, keycode, modifiers);
bea250b
 }
bea250b
 
bea250b
+static void
bea250b
+ibus_engine_simple_page_down (IBusEngine *engine)
bea250b
+{
bea250b
+    IBusEngineSimple *simple = (IBusEngineSimple *)engine;
bea250b
+    IBusEngineSimplePrivate *priv = simple->priv;
bea250b
+    if (priv->lookup_table == NULL)
bea250b
+        return;
bea250b
+    ibus_lookup_table_page_down (priv->lookup_table);
bea250b
+    ibus_engine_simple_update_lookup_and_aux_table (simple);
bea250b
+}
bea250b
+
bea250b
+static void
bea250b
+ibus_engine_simple_page_up (IBusEngine *engine)
bea250b
+{
bea250b
+    IBusEngineSimple *simple = (IBusEngineSimple *)engine;
bea250b
+    IBusEngineSimplePrivate *priv = simple->priv;
bea250b
+    if (priv->lookup_table == NULL)
bea250b
+        return;
bea250b
+    ibus_lookup_table_page_up (priv->lookup_table);
bea250b
+    ibus_engine_simple_update_lookup_and_aux_table (simple);
bea250b
+}
bea250b
+
bea250b
+static void
bea250b
+ibus_engine_simple_candidate_clicked (IBusEngine *engine,
bea250b
+                                      guint       index,
bea250b
+                                      guint       button,
bea250b
+                                      guint       state)
bea250b
+{
bea250b
+    IBusEngineSimple *simple = (IBusEngineSimple *)engine;
bea250b
+    IBusEngineSimplePrivate *priv = simple->priv;
bea250b
+    guint keyval;
bea250b
+    gint n_compose = 0;
bea250b
+
bea250b
+    if (priv->lookup_table == NULL || !priv->lookup_table_visible)
bea250b
+        return;
bea250b
+    if (index == 9)
bea250b
+        keyval = IBUS_KEY_0;
bea250b
+    else
bea250b
+        keyval = IBUS_KEY_1 + index;
bea250b
+    while (priv->compose_buffer[n_compose] != 0)
bea250b
+        n_compose++;
bea250b
+    ibus_engine_simple_set_number_on_lookup_table (simple, keyval, n_compose);
bea250b
+}
bea250b
+
bea250b
 void
bea250b
 ibus_engine_simple_add_table (IBusEngineSimple *simple,
bea250b
                               const guint16    *data,
bea250b
-- 
bea250b
2.7.4
bea250b