2018-08-22 10:54:53 +00:00
|
|
|
From 7edaefdc1d80aefdbbc2dc52526c20715759da83 Mon Sep 17 00:00:00 2001
|
|
|
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
|
|
|
Date: Wed, 22 Aug 2018 17:20:53 +0900
|
|
|
|
Subject: [PATCH] ui/gtk3: Do not clear unicode data when emoji annotation lang
|
|
|
|
is changed
|
|
|
|
|
|
|
|
---
|
|
|
|
ui/gtk3/emojier.vala | 8 ++++++--
|
|
|
|
1 file changed, 6 insertions(+), 2 deletions(-)
|
|
|
|
|
|
|
|
diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
|
|
|
|
index 85dcdceb..637ae049 100644
|
|
|
|
--- a/ui/gtk3/emojier.vala
|
|
|
|
+++ b/ui/gtk3/emojier.vala
|
|
|
|
@@ -440,13 +440,17 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
m_emoji_to_emoji_variants_dict =
|
|
|
|
new GLib.HashTable<string, GLib.SList<string>>(GLib.str_hash,
|
|
|
|
GLib.str_equal);
|
|
|
|
- m_unicode_to_data_dict =
|
|
|
|
+ if (m_unicode_to_data_dict == null) {
|
|
|
|
+ m_unicode_to_data_dict =
|
|
|
|
new GLib.HashTable<unichar, IBus.UnicodeData>(
|
|
|
|
GLib.direct_hash,
|
|
|
|
GLib.direct_equal);
|
|
|
|
- m_name_to_unicodes_dict =
|
|
|
|
+ }
|
|
|
|
+ if (m_name_to_unicodes_dict == null) {
|
|
|
|
+ m_name_to_unicodes_dict =
|
|
|
|
new GLib.HashTable<string, GLib.SList<unichar>>(GLib.str_hash,
|
|
|
|
GLib.str_equal);
|
|
|
|
+ }
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
--
|
|
|
|
2.17.1
|
|
|
|
|
2018-08-30 04:44:22 +00:00
|
|
|
From 28d22176aee6be97d88dd6c60fa5395c79563ec0 Mon Sep 17 00:00:00 2001
|
|
|
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
|
|
|
Date: Thu, 30 Aug 2018 12:57:33 +0900
|
|
|
|
Subject: [PATCH] ui/gtk3: Fix SEGV when type ASCII on emojier
|
|
|
|
|
|
|
|
Emojier still included Gtk.Entry, accepted key events in Wayland,
|
|
|
|
reset the lookup table and it caused SEGV because IBus.Text
|
|
|
|
is NULL in the lookup table in Emojier.get_current_candidate().
|
|
|
|
Now Gtk.Entry is deleted completely.
|
|
|
|
|
|
|
|
BUG=rhbz#1618682
|
|
|
|
---
|
|
|
|
ui/gtk3/emojier.vala | 139 +------------------------------------------
|
|
|
|
1 file changed, 1 insertion(+), 138 deletions(-)
|
|
|
|
|
|
|
|
diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
|
|
|
|
index 637ae049..0f455800 100644
|
|
|
|
--- a/ui/gtk3/emojier.vala
|
|
|
|
+++ b/ui/gtk3/emojier.vala
|
|
|
|
@@ -283,7 +283,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
|
|
|
|
private ThemedRGBA m_rgba;
|
|
|
|
private Gtk.Box m_vbox;
|
|
|
|
- private EEntry m_entry;
|
|
|
|
/* If emojier is emoji category list or Unicode category list,
|
|
|
|
* m_annotation is "" and preedit is also "".
|
|
|
|
* If emojier is candidate mode, m_annotation is an annotation and
|
|
|
|
@@ -367,23 +366,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
m_vbox = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
|
|
|
|
add(m_vbox);
|
|
|
|
|
|
|
|
- m_entry = new EEntry();
|
|
|
|
- m_entry.set_placeholder_text(_("Type annotation or choose emoji"));
|
|
|
|
- //m_vbox.add(m_entry);
|
|
|
|
- m_entry.changed.connect(() => {
|
|
|
|
- update_candidate_window();
|
|
|
|
- });
|
|
|
|
- m_entry.icon_release.connect((icon_pos, event) => {
|
|
|
|
- hide_candidate_panel();
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- /* Set the accessible role of the label to a status bar so it
|
|
|
|
- * will emit name changed events that can be used by screen
|
|
|
|
- * readers.
|
|
|
|
- */
|
|
|
|
- Atk.Object obj = m_entry.get_accessible();
|
|
|
|
- obj.set_role (Atk.Role.STATUSBAR);
|
|
|
|
-
|
|
|
|
// The constructor of IBus.LookupTable does not support more than
|
|
|
|
// 16 pages.
|
|
|
|
m_lookup_table = new IBus.LookupTable(1, 0, true, true);
|
|
|
|
@@ -1806,18 +1788,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
m_lookup_table.cursor_up();
|
|
|
|
else if (keyval == Gdk.Key.Right)
|
|
|
|
m_lookup_table.cursor_down();
|
|
|
|
- } else if (m_entry.get_text().length > 0) {
|
|
|
|
- int step = 0;
|
|
|
|
- if (keyval == Gdk.Key.Left)
|
|
|
|
- step = -1;
|
|
|
|
- else if (keyval == Gdk.Key.Right)
|
|
|
|
- step = 1;
|
|
|
|
- GLib.Signal.emit_by_name(
|
|
|
|
- m_entry, "move-cursor",
|
|
|
|
- Gtk.MovementStep.VISUAL_POSITIONS,
|
|
|
|
- step,
|
|
|
|
- (modifiers & Gdk.ModifierType.SHIFT_MASK) != 0
|
|
|
|
- ? true : false);
|
|
|
|
} else {
|
|
|
|
// For Gdk.Key.f and Gdk.Key.b
|
|
|
|
if (keyval == Gdk.Key.Left)
|
|
|
|
@@ -1880,20 +1850,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
- if (m_entry.get_text().length > 0) {
|
|
|
|
- int step = 0;
|
|
|
|
- if (keyval == Gdk.Key.Home)
|
|
|
|
- step = -1;
|
|
|
|
- else if (keyval == Gdk.Key.End)
|
|
|
|
- step = 1;
|
|
|
|
- GLib.Signal.emit_by_name(
|
|
|
|
- m_entry, "move-cursor",
|
|
|
|
- Gtk.MovementStep.DISPLAY_LINE_ENDS,
|
|
|
|
- step,
|
|
|
|
- (modifiers & Gdk.ModifierType.SHIFT_MASK) != 0
|
|
|
|
- ? true : false);
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
return category_list_cursor_move(keyval);
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -1941,28 +1897,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- private void entry_enter_keyval(uint keyval) {
|
|
|
|
- unichar ch = IBus.keyval_to_unicode(keyval);
|
|
|
|
- if (ch.iscntrl())
|
|
|
|
- return;
|
|
|
|
- string str = ch.to_string();
|
|
|
|
-
|
|
|
|
- // what gtk_entry_commit_cb() do
|
|
|
|
- if (m_entry.get_selection_bounds(null, null)) {
|
|
|
|
- m_entry.delete_selection();
|
|
|
|
- } else {
|
|
|
|
- if (m_entry.get_overwrite_mode()) {
|
|
|
|
- uint text_length = m_entry.get_buffer().get_length();
|
|
|
|
- if (m_entry.cursor_position < text_length)
|
|
|
|
- m_entry.delete_from_cursor(Gtk.DeleteType.CHARS, 1);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- int pos = m_entry.get_position();
|
|
|
|
- m_entry.insert_text(str, -1, ref pos);
|
|
|
|
- m_entry.set_position(pos);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
private Gdk.Rectangle get_monitor_geometry() {
|
|
|
|
Gdk.Rectangle monitor_area = { 0, };
|
|
|
|
|
|
|
|
@@ -2245,10 +2179,7 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
/* Let gtk recalculate the window size. */
|
|
|
|
resize(1, 1);
|
|
|
|
|
|
|
|
- m_entry.set_text("");
|
|
|
|
-
|
|
|
|
show_category_list();
|
|
|
|
- m_entry.set_activates_default(true);
|
|
|
|
show_all();
|
|
|
|
|
|
|
|
/* Some window managers, e.g. MATE, GNOME, Plasma desktops,
|
|
|
|
@@ -2289,13 +2220,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
m_loop.run();
|
|
|
|
m_loop = null;
|
|
|
|
|
|
|
|
- // Need focus-out on Gtk.Entry to send the emoji to applications.
|
|
|
|
- Gdk.Event fevent = new Gdk.Event(Gdk.EventType.FOCUS_CHANGE);
|
|
|
|
- fevent.focus_change.in = 0;
|
|
|
|
- fevent.focus_change.window = get_window();
|
|
|
|
- m_entry.send_focus_change(fevent);
|
|
|
|
- fevent.focus_change.window = null;
|
|
|
|
-
|
|
|
|
hide();
|
|
|
|
// Make sure the switcher is hidden before returning from this function.
|
|
|
|
while (Gtk.events_pending())
|
|
|
|
@@ -2357,36 +2281,9 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
hide();
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
- case Gdk.Key.BackSpace:
|
|
|
|
- if (m_entry.get_text().length > 0) {
|
|
|
|
- if ((modifiers & Gdk.ModifierType.CONTROL_MASK) != 0) {
|
|
|
|
- GLib.Signal.emit_by_name(m_entry, "delete-from-cursor",
|
|
|
|
- Gtk.DeleteType.WORD_ENDS, -1);
|
|
|
|
- } else {
|
|
|
|
- GLib.Signal.emit_by_name(m_entry, "backspace");
|
|
|
|
- }
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case Gdk.Key.Delete:
|
|
|
|
- case Gdk.Key.KP_Delete:
|
|
|
|
- if (m_entry.get_text().length > 0) {
|
|
|
|
- if ((modifiers & Gdk.ModifierType.CONTROL_MASK) != 0) {
|
|
|
|
- GLib.Signal.emit_by_name(m_entry, "delete-from-cursor",
|
|
|
|
- Gtk.DeleteType.WORD_ENDS, 1);
|
|
|
|
- } else {
|
|
|
|
- GLib.Signal.emit_by_name(m_entry, "delete-from-cursor",
|
|
|
|
- Gtk.DeleteType.CHARS, 1);
|
|
|
|
- }
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
case Gdk.Key.space:
|
|
|
|
case Gdk.Key.KP_Space:
|
|
|
|
- if ((modifiers & Gdk.ModifierType.SHIFT_MASK) != 0) {
|
|
|
|
- if (m_entry.get_text().length > 0)
|
|
|
|
- entry_enter_keyval(keyval);
|
|
|
|
- } else if (m_candidate_panel_is_visible) {
|
|
|
|
+ if (m_candidate_panel_is_visible) {
|
|
|
|
enter_notify_disable_with_timer();
|
|
|
|
m_lookup_table.cursor_down();
|
|
|
|
show_candidate_panel();
|
|
|
|
@@ -2436,10 +2333,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
key_press_cursor_home_end(Gdk.Key.End, modifiers);
|
|
|
|
show_all();
|
|
|
|
return true;
|
|
|
|
- case Gdk.Key.Insert:
|
|
|
|
- case Gdk.Key.KP_Insert:
|
|
|
|
- GLib.Signal.emit_by_name(m_entry, "toggle-overwrite");
|
|
|
|
- return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((modifiers & Gdk.ModifierType.CONTROL_MASK) != 0) {
|
|
|
|
@@ -2470,27 +2363,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
key_press_cursor_home_end(Gdk.Key.End, modifiers);
|
|
|
|
show_all();
|
|
|
|
return true;
|
|
|
|
- case Gdk.Key.u:
|
|
|
|
- if (m_entry.get_text().length > 0) {
|
|
|
|
- GLib.Signal.emit_by_name(m_entry,
|
|
|
|
- "delete-from-cursor",
|
|
|
|
- Gtk.DeleteType.PARAGRAPH_ENDS,
|
|
|
|
- -1);
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case Gdk.Key.a:
|
|
|
|
- if (m_entry.get_text().length > 0) {
|
|
|
|
- m_entry.select_region(0, -1);
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case Gdk.Key.x:
|
|
|
|
- if (m_entry.get_text().length > 0) {
|
|
|
|
- GLib.Signal.emit_by_name(m_entry, "cut-clipboard");
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
case Gdk.Key.C:
|
|
|
|
case Gdk.Key.c:
|
|
|
|
if ((modifiers & Gdk.ModifierType.SHIFT_MASK) != 0) {
|
|
|
|
@@ -2503,19 +2375,11 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
clipboard.store();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
- } else if (m_entry.get_text().length > 0) {
|
|
|
|
- GLib.Signal.emit_by_name(m_entry, "copy-clipboard");
|
|
|
|
- return true;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
- case Gdk.Key.v:
|
|
|
|
- GLib.Signal.emit_by_name(m_entry, "paste-clipboard");
|
|
|
|
- return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
-
|
|
|
|
- entry_enter_keyval(keyval);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -2595,7 +2459,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
|
|
|
|
uint32 timestamp = event.get_time();
|
|
|
|
present_with_time(timestamp);
|
|
|
|
- m_entry.set_activates_default(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
--
|
|
|
|
2.17.1
|
|
|
|
|
|
|
|
From e6badb494e0a31b7aca3a5078a5dc5b27b83390d Mon Sep 17 00:00:00 2001
|
|
|
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
|
|
|
Date: Thu, 30 Aug 2018 12:57:46 +0900
|
|
|
|
Subject: [PATCH] ui/gtk3: Support Shift-Space to insert a Space on Emojier
|
|
|
|
preedit
|
|
|
|
|
|
|
|
Implemented Shift-Space on preedit since Shift-Space had worked on
|
|
|
|
Emojier's GtkEntry in the previous release.
|
|
|
|
---
|
|
|
|
ui/gtk3/panelbinding.vala | 27 ++++++++++++++++++++-------
|
|
|
|
1 file changed, 20 insertions(+), 7 deletions(-)
|
|
|
|
|
|
|
|
diff --git a/ui/gtk3/panelbinding.vala b/ui/gtk3/panelbinding.vala
|
|
|
|
index 981b5509..4ebff8da 100644
|
|
|
|
--- a/ui/gtk3/panelbinding.vala
|
|
|
|
+++ b/ui/gtk3/panelbinding.vala
|
|
|
|
@@ -548,6 +548,19 @@ class PanelBinding : IBus.PanelService {
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
+ private bool key_press_keyval(uint keyval) {
|
|
|
|
+ unichar ch = IBus.keyval_to_unicode(keyval);
|
|
|
|
+ if (ch.iscntrl())
|
|
|
|
+ return false;
|
|
|
|
+ string str = ch.to_string();
|
|
|
|
+ m_preedit.append_text(str);
|
|
|
|
+ string annotation = m_preedit.get_text();
|
|
|
|
+ m_emojier.set_annotation(annotation);
|
|
|
|
+ m_preedit.set_emoji("");
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
private bool key_press_enter() {
|
|
|
|
if (m_extension_name != "unicode" && is_emoji_lookup_table()) {
|
|
|
|
// Check if variats exist
|
|
|
|
@@ -899,6 +912,12 @@ class PanelBinding : IBus.PanelService {
|
|
|
|
break;
|
|
|
|
case Gdk.Key.space:
|
|
|
|
case Gdk.Key.KP_Space:
|
|
|
|
+ if ((modifiers & Gdk.ModifierType.SHIFT_MASK) != 0) {
|
|
|
|
+ if (!key_press_keyval(keyval))
|
|
|
|
+ return true;
|
|
|
|
+ show_candidate = is_emoji_lookup_table();
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
show_candidate = key_press_space();
|
|
|
|
if (m_extension_name == "unicode") {
|
|
|
|
key_press_enter();
|
|
|
|
@@ -979,14 +998,8 @@ class PanelBinding : IBus.PanelService {
|
|
|
|
show_candidate = key_press_control_keyval(keyval, modifiers);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
- unichar ch = IBus.keyval_to_unicode(keyval);
|
|
|
|
- if (ch.iscntrl())
|
|
|
|
+ if (!key_press_keyval(keyval))
|
|
|
|
return true;
|
|
|
|
- string str = ch.to_string();
|
|
|
|
- m_preedit.append_text(str);
|
|
|
|
- string annotation = m_preedit.get_text();
|
|
|
|
- m_emojier.set_annotation(annotation);
|
|
|
|
- m_preedit.set_emoji("");
|
|
|
|
show_candidate = is_emoji_lookup_table();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
--
|
|
|
|
2.17.1
|
|
|
|
|
|
|
|
From 809d880337e75b7cee429292a238bf53899bef6a Mon Sep 17 00:00:00 2001
|
|
|
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
|
|
|
Date: Thu, 30 Aug 2018 12:58:57 +0900
|
|
|
|
Subject: [PATCH] ui/gtk3: Do not move Emojier popup with the active
|
|
|
|
candidate in Xorg
|
|
|
|
|
|
|
|
Probably I think it's not useful to change the popup position frequently.
|
|
|
|
The popup size is always slightly changed with the emoji annotation length.
|
|
|
|
---
|
|
|
|
ui/gtk3/emojier.vala | 10 +++++++++-
|
|
|
|
1 file changed, 9 insertions(+), 1 deletion(-)
|
|
|
|
|
|
|
|
diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
|
|
|
|
index 0f455800..9811fde5 100644
|
|
|
|
--- a/ui/gtk3/emojier.vala
|
|
|
|
+++ b/ui/gtk3/emojier.vala
|
|
|
|
@@ -1944,7 +1944,15 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
|
|
|
x = 0;
|
|
|
|
|
|
|
|
bool changed = false;
|
|
|
|
- if (window_right_bottom.y > monitor_bottom) {
|
|
|
|
+ // Do not up side down frequently.
|
|
|
|
+ // The first pos does not show the lookup table yet but the
|
|
|
|
+ // preedit only and the second pos shows the lookup table.
|
|
|
|
+ if (m_lookup_table.get_cursor_pos() != 1) {
|
|
|
|
+ if (m_is_up_side_down)
|
|
|
|
+ y = m_cursor_location.y - allocation.height;
|
|
|
|
+ else
|
|
|
|
+ y = cursor_right_bottom.y;
|
|
|
|
+ } else if (window_right_bottom.y > monitor_bottom) {
|
|
|
|
y = m_cursor_location.y - allocation.height;
|
|
|
|
// Do not up side down in Wayland
|
|
|
|
if (m_input_context_path == "") {
|
|
|
|
--
|
|
|
|
2.17.1
|
|
|
|
|