public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/ibus] autotool: Added ibus-HEAD.patch to get upstream patches
@ 2026-05-31 2:06 Takao Fujiwara
0 siblings, 0 replies; only message in thread
From: Takao Fujiwara @ 2026-05-31 2:06 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/ibus
Branch : autotool
Commit : 4f9f822080bbcae3544ea769b282d58a67520afc
Author : Takao Fujiwara <tfujiwar@redhat.com>
Date : 2017-03-09T19:20:27+09:00
Stats : +686/-7 in 3 file(s)
URL : https://src.fedoraproject.org/rpms/ibus/c/4f9f822080bbcae3544ea769b282d58a67520afc?branch=autotool
Log:
Added ibus-HEAD.patch to get upstream patches
Fixed ibus_emojier_run() SIGABRT with `ibus emoji`
Enhanced theme color on emoji candidates
---
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index 8b13789..1eb47eb 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -1 +1,675 @@
+From 7e477d5e0ffe19b6c52558c5b37fdd9cb82c097a Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Thu, 9 Mar 2017 11:31:21 +0900
+Subject: [PATCH] tools: Fix `ibus emoji` SEGV when language is changed.
+
+BUG=rhbz#1430290
+
+Review URL: https://codereview.appspot.com/317410043
+---
+ tools/main.vala | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/tools/main.vala b/tools/main.vala
+index 73c6f57..fd9fd0e 100644
+--- a/tools/main.vala
++++ b/tools/main.vala
+@@ -353,6 +353,9 @@ int emoji_dialog(string[] argv) {
+ } else {
+ GLib.MainLoop loop = new GLib.MainLoop();
+ emojier.loaded_emoji_dict.connect(() => {
++ // The signal is called when the language is changed.
++ if (emojier.is_running())
++ return;
+ run_dialog(emojier);
+ loop.quit();
+ });
+--
+2.7.4
+
+From 9dbea347050ae2ad79d1b53f2ad62a7a2cafadc6 Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Thu, 9 Mar 2017 12:45:20 +0900
+Subject: [PATCH] ui/gtk3: Get emoji colors from the theme
+
+Get selected and normal text color from the theme.
+Implement to activate an emoji with mouse motion.
+Create back button on emoji language chooser dialog.
+Set row_homogeneous on emoji table.
+
+R=Shawn.P.Huang@gmail.com
+
+Review URL: https://codereview.appspot.com/319470043
+---
+ ui/gtk3/Makefile.am | 3 +
+ ui/gtk3/candidatearea.vala | 186 +++++++++++++++++++++++++------------------
+ ui/gtk3/emojier.vala | 192 ++++++++++++++++++++++++++++++++-------------
+ 3 files changed, 251 insertions(+), 130 deletions(-)
+
+diff --git a/ui/gtk3/Makefile.am b/ui/gtk3/Makefile.am
+index d5ddc42..4e7fd1b 100644
+--- a/ui/gtk3/Makefile.am
++++ b/ui/gtk3/Makefile.am
+@@ -172,8 +172,11 @@ libibus_emoji_dialog_1_0_la_LDFLAGS = \
+ -version-info @LT_VERSION_INFO@ \
+ $(NULL)
+ libibus_emoji_dialog_1_0_la_SOURCES = \
++ candidatearea.c \
+ emojier.c \
+ iconwidget.c \
++ pango.c \
++ separator.c \
+ $(NULL)
+
+ -include $(INTROSPECTION_MAKEFILE)
+diff --git a/ui/gtk3/candidatearea.vala b/ui/gtk3/candidatearea.vala
+index a095e76..e162a96 100644
+--- a/ui/gtk3/candidatearea.vala
++++ b/ui/gtk3/candidatearea.vala
+@@ -21,6 +21,108 @@
+ * USA
+ */
+
++class ThemedRGBA {
++ public Gdk.RGBA *normal_fg { get; set; }
++ public Gdk.RGBA *normal_bg { get; set; }
++ public Gdk.RGBA *selected_fg { get; set; }
++ public Gdk.RGBA *selected_bg { get; set; }
++
++ private Gtk.StyleContext m_style_context;
++
++ public ThemedRGBA(Gtk.Widget widget) {
++ this.normal_fg = null;
++ this.normal_bg = null;
++ this.selected_fg = null;
++ this.selected_bg = null;
++
++ /* Use the color of Gtk.TextView instead of Gtk.Label
++ * because the selected label "color" is not configured
++ * in "Adwaita" theme and the selected label "background-color"
++ * is not configured in "Maia" theme.
++ * https://github.com/ibus/ibus/issues/1871
++ */
++ Gtk.WidgetPath widget_path = new Gtk.WidgetPath();
++ widget_path.append_type(typeof(Gtk.TextView));
++ m_style_context = new Gtk.StyleContext();
++ m_style_context.set_path(widget_path);
++ m_style_context.add_class(Gtk.STYLE_CLASS_VIEW);
++
++ /* "-gtk-secondary-caret-color" value is different
++ * if the parent widget is set in "Menta" theme.
++ */
++ m_style_context.set_parent(widget.get_style_context());
++
++ get_rgba();
++
++ m_style_context.changed.connect(() => { get_rgba(); });
++ }
++
++ ~ThemedRGBA() {
++ reset_rgba();
++ }
++
++ private void reset_rgba() {
++ if (this.normal_fg != null) {
++ this.normal_fg.free();
++ this.normal_fg = null;
++ }
++ if (this.normal_bg != null) {
++ this.normal_bg.free();
++ this.normal_bg = null;
++ }
++ if (this.selected_fg != null) {
++ this.selected_fg.free();
++ this.selected_fg = null;
++ }
++ if (this.selected_bg != null) {
++ this.selected_bg.free();
++ this.selected_bg = null;
++ }
++ }
++
++ private void get_rgba() {
++ reset_rgba();
++ Gdk.RGBA *normal_fg = null;
++ Gdk.RGBA *normal_bg = null;
++ Gdk.RGBA *selected_fg = null;
++ Gdk.RGBA *selected_bg = null;
++ m_style_context.get(Gtk.StateFlags.NORMAL,
++ "color",
++ out normal_fg);
++ m_style_context.get(Gtk.StateFlags.SELECTED,
++ "color",
++ out selected_fg);
++
++ string bg_prop = "background-color";
++ m_style_context.get(Gtk.StateFlags.NORMAL,
++ bg_prop,
++ out normal_bg);
++ m_style_context.get(Gtk.StateFlags.SELECTED,
++ bg_prop,
++ out selected_bg);
++ if (normal_bg.red == selected_bg.red &&
++ normal_bg.green == selected_bg.green &&
++ normal_bg.blue == selected_bg.blue &&
++ normal_bg.alpha == selected_bg.alpha) {
++ normal_bg.free();
++ normal_bg = null;
++ normal_bg.free();
++ normal_bg = null;
++ bg_prop = "-gtk-secondary-caret-color";
++ m_style_context.get(Gtk.StateFlags.NORMAL,
++ bg_prop,
++ out normal_bg);
++ m_style_context.get(Gtk.StateFlags.SELECTED,
++ bg_prop,
++ out selected_bg);
++ }
++ this.normal_fg = normal_fg;
++ this.normal_bg = normal_bg;
++ this.selected_fg = selected_fg;
++ this.selected_bg = selected_bg;
++ }
++}
++
+ class CandidateArea : Gtk.Box {
+ private bool m_vertical;
+ private Gtk.Label[] m_labels;
+@@ -30,9 +132,7 @@ class CandidateArea : Gtk.Box {
+ private IBus.Text[] m_ibus_candidates;
+ private uint m_focus_candidate;
+ private bool m_show_cursor;
+- Gtk.StyleContext m_style_context;
+- private Gdk.RGBA *m_selected_fg_color = null;
+- private Gdk.RGBA *m_selected_bg_color = null;
++ private ThemedRGBA m_rgba;
+
+ private const string LABELS[] = {
+ "1.", "2.", "3.", "4.", "5.", "6.", "7.", "8.",
+@@ -58,38 +158,7 @@ class CandidateArea : Gtk.Box {
+ public CandidateArea(bool vertical) {
+ GLib.Object();
+ set_vertical(vertical, true);
+-
+- /* Use the color of Gtk.TextView instead of Gtk.Label
+- * because the selected label "color" is not configured
+- * in "Adwaita" theme and the selected label "background-color"
+- * is not configured in "Maia" theme.
+- * https://github.com/ibus/ibus/issues/1871
+- */
+- Gtk.WidgetPath widget_path = new Gtk.WidgetPath();
+- widget_path.append_type(typeof(Gtk.TextView));
+- m_style_context = new Gtk.StyleContext();
+- m_style_context.set_path(widget_path);
+- m_style_context.add_class(Gtk.STYLE_CLASS_VIEW);
+-
+- /* "-gtk-secondary-caret-color" value is different
+- * if the parent widget is set in "Menta" theme.
+- */
+- m_style_context.set_parent(get_style_context());
+-
+- get_selected_color();
+-
+- m_style_context.changed.connect(() => { get_selected_color(); });
+- }
+-
+- ~CandidateArea() {
+- if (m_selected_bg_color != null) {
+- m_selected_bg_color.free();
+- m_selected_bg_color = null;
+- }
+- if (m_selected_bg_color != null) {
+- m_selected_bg_color.free();
+- m_selected_bg_color = null;
+- }
++ m_rgba = new ThemedRGBA(this);
+ }
+
+ public bool candidate_scrolled(Gdk.EventScroll event) {
+@@ -150,17 +219,17 @@ class CandidateArea : Gtk.Box {
+ Pango.AttrList attrs = get_pango_attr_list_from_ibus_text(candidates[i]);
+ if (i == focus_candidate && show_cursor) {
+ Pango.Attribute pango_attr = Pango.attr_foreground_new(
+- (uint16)(m_selected_fg_color.red * uint16.MAX),
+- (uint16)(m_selected_fg_color.green * uint16.MAX),
+- (uint16)(m_selected_fg_color.blue * uint16.MAX));
++ (uint16)(m_rgba.selected_fg.red * uint16.MAX),
++ (uint16)(m_rgba.selected_fg.green * uint16.MAX),
++ (uint16)(m_rgba.selected_fg.blue * uint16.MAX));
+ pango_attr.start_index = 0;
+ pango_attr.end_index = candidates[i].get_text().length;
+ attrs.insert((owned)pango_attr);
+
+ pango_attr = Pango.attr_background_new(
+- (uint16)(m_selected_bg_color.red * uint16.MAX),
+- (uint16)(m_selected_bg_color.green * uint16.MAX),
+- (uint16)(m_selected_bg_color.blue * uint16.MAX));
++ (uint16)(m_rgba.selected_bg.red * uint16.MAX),
++ (uint16)(m_rgba.selected_bg.green * uint16.MAX),
++ (uint16)(m_rgba.selected_bg.blue * uint16.MAX));
+ pango_attr.start_index = 0;
+ pango_attr.end_index = candidates[i].get_text().length;
+ attrs.insert((owned)pango_attr);
+@@ -181,41 +250,6 @@ class CandidateArea : Gtk.Box {
+ }
+ }
+
+- private void get_selected_color() {
+- if (m_selected_fg_color != null) {
+- m_selected_fg_color.free();
+- m_selected_fg_color = null;
+- }
+- m_style_context.get(Gtk.StateFlags.SELECTED,
+- "color",
+- out m_selected_fg_color);
+-
+- string bg_prop = "background-color";
+- Gdk.RGBA *normal_color = null;
+- if (m_selected_bg_color != null) {
+- m_selected_bg_color.free();
+- m_selected_bg_color = null;
+- }
+- m_style_context.get(Gtk.StateFlags.NORMAL,
+- bg_prop,
+- out normal_color);
+- m_style_context.get(Gtk.StateFlags.SELECTED,
+- bg_prop,
+- out m_selected_bg_color);
+- if (normal_color.red == m_selected_bg_color.red &&
+- normal_color.green == m_selected_bg_color.green &&
+- normal_color.blue == m_selected_bg_color.blue &&
+- normal_color.alpha == m_selected_bg_color.alpha) {
+- m_selected_bg_color.free();
+- m_selected_bg_color = null;
+- bg_prop = "-gtk-secondary-caret-color";
+- m_style_context.get(Gtk.StateFlags.SELECTED,
+- bg_prop,
+- out m_selected_bg_color);
+- }
+- normal_color.free();
+- }
+-
+ private void recreate_ui() {
+ foreach (Gtk.Widget w in get_children()) {
+ w.destroy();
+diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
+index 5496c4e..bc1eff4 100644
+--- a/ui/gtk3/emojier.vala
++++ b/ui/gtk3/emojier.vala
+@@ -72,12 +72,31 @@ class IBusEmojier : Gtk.Window {
+ private class EGrid : Gtk.Grid {
+ public EGrid() {
+ GLib.Object(
++ row_homogeneous : false,
+ vexpand : true,
+ halign : Gtk.Align.FILL,
+ valign : Gtk.Align.FILL
+ );
+ }
+ }
++ private class EWhiteLabel : Gtk.Label {
++ public EWhiteLabel(string text) {
++ GLib.Object(
++ name : "IBusEmojierWhiteLabel"
++ );
++ if (text != "")
++ set_label(text);
++ }
++ }
++ private class ESelectedLabel : Gtk.Label {
++ public ESelectedLabel(string text) {
++ GLib.Object(
++ name : "IBusEmojierSelectedLabel"
++ );
++ if (text != "")
++ set_label(text);
++ }
++ }
+ private class EPaddedLabel : Gtk.Box {
+ public EPaddedLabel(string text,
+ Gtk.Align align,
+@@ -161,6 +180,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 EEntry m_entry;
+@@ -174,7 +194,8 @@ class IBusEmojier : Gtk.Window {
+ private GLib.MainLoop? m_loop;
+ private string? m_result;
+ private GLib.SList<string> m_lang_list;
+- private string m_current_lang = "en";
++ private string m_current_lang_id = "en";
++ private string m_current_language = "English";
+ private string? m_unicode_point = null;
+ private bool m_candidate_panel_is_visible;
+ private GLib.HashTable<string, GLib.SList>?
+@@ -189,11 +210,8 @@ class IBusEmojier : Gtk.Window {
+ private Gtk.Label[] m_candidates;
+ private string m_emoji_font = "Monospace 16";
+ private string[] m_favorites = {};
+- // TODO: Get the selected color from CandidateArea
+- private Gdk.RGBA m_selected_fg_color = Gdk.RGBA(){
+- red = 1.0, green = 1.0, blue = 1.0, alpha = 1.0 };
+- private Gdk.RGBA m_selected_bg_color = Gdk.RGBA(){
+- red = 0.300, green = 0.565, blue = 0.851, alpha = 1.0 };
++ private bool m_enter_notify_enable = true;
++ private uint m_entry_notify_show_id;
+
+ public signal void candidate_clicked(uint index, uint button, uint state);
+ public signal void loaded_emoji_dict();
+@@ -220,7 +238,33 @@ class IBusEmojier : Gtk.Window {
+ warning("Could not open display.");
+ return;
+ }
+- string data = "grid { background-color: #ffffff; }";
++ m_rgba = new ThemedRGBA(this);
++ uint bg_red = (uint)(m_rgba.normal_bg.red * 255);
++ uint bg_green = (uint)(m_rgba.normal_bg.green * 255);
++ uint bg_blue = (uint)(m_rgba.normal_bg.blue * 255);
++ double bg_alpha = m_rgba.normal_bg.alpha;
++ string data =
++ "#IBusEmojierWhiteLabel { background-color: " +
++ "rgba(%u, %u, %u, %lf); ".printf(
++ bg_red, bg_green, bg_blue, bg_alpha) +
++ "border-width: 4px; border-radius: 3px; } ";
++
++ uint fg_red = (uint)(m_rgba.selected_fg.red * 255);
++ uint fg_green = (uint)(m_rgba.selected_fg.green * 255);
++ uint fg_blue = (uint)(m_rgba.selected_fg.blue * 255);
++ double fg_alpha = m_rgba.selected_fg.alpha;
++ bg_red = (uint)(m_rgba.selected_bg.red * 255);
++ bg_green = (uint)(m_rgba.selected_bg.green * 255);
++ bg_blue = (uint)(m_rgba.selected_bg.blue * 255);
++ bg_alpha = m_rgba.selected_bg.alpha;
++ data += "#IBusEmojierSelectedLabel { color: " +
++ "rgba(%u, %u, %u, %lf); ".printf(
++ fg_red, fg_green, fg_blue, fg_alpha) +
++ "background-color: " +
++ "rgba(%u, %u, %u, %lf); ".printf(
++ bg_red, bg_green, bg_blue, bg_alpha) +
++ "border-width: 4px; border-radius: 3px; }";
++
+ Gtk.CssProvider css_provider = new Gtk.CssProvider();
+ try {
+ css_provider.load_from_data(data, -1);
+@@ -317,6 +361,8 @@ class IBusEmojier : Gtk.Window {
+ lang_list.sort((a, b) => {
+ string a_lang = IBus.get_language_name(a);
+ string b_lang = IBus.get_language_name(b);
++ a_lang = "%s (%s)".printf(a_lang, a);
++ b_lang = "%s (%s)".printf(b_lang, b);
+ return GLib.strcmp(a_lang, b_lang);
+ });
+ return lang_list;
+@@ -325,8 +371,8 @@ class IBusEmojier : Gtk.Window {
+ private void reload_emoji_dict() {
+ init_emoji_dict();
+ make_emoji_dict("en");
+- if (m_current_lang != "en")
+- make_emoji_dict(m_current_lang);
++ if (m_current_lang_id != "en")
++ make_emoji_dict(m_current_lang_id);
+ loaded_emoji_dict();
+ }
+
+@@ -458,22 +504,50 @@ class IBusEmojier : Gtk.Window {
+ }
+ }
+
++ private void activated_language(EBoxRow row) {
++ m_category_active_index = 0;
++ if (m_current_lang_id != row.id) {
++ m_current_lang_id = row.id;
++ m_current_language = row.text;
++ reload_emoji_dict();
++ }
++ m_current_category_type = CategoryType.EMOJI;
++ show_category_list();
++ }
++
+ private void show_category_list() {
+ remove_all_children();
+ m_scrolled_window = new EScrolledWindow();
+ set_fixed_size();
+- string language = IBus.get_language_name(m_current_lang);
+- EPaddedLabel label = new EPaddedLabel(language, Gtk.Align.CENTER);
++ EPaddedLabel label;
++ if (m_current_category_type == CategoryType.EMOJI) {
++ label = new EPaddedLabel(m_current_language, Gtk.Align.CENTER);
++ } else if (m_current_category_type == CategoryType.LANG) {
++ label = new EPaddedLabel(m_current_language,
++ Gtk.Align.CENTER,
++ TravelDirection.BACKWARD);
++ } else {
++ label = new EPaddedLabel("", Gtk.Align.CENTER);
++ }
+ Gtk.Button button = new Gtk.Button();
+ button.add(label);
+ m_vbox.add(button);
+ button.show_all();
+- button.button_press_event.connect((e) => {
+- m_category_active_index = 0;
+- m_current_category_type = CategoryType.LANG;
+- show_category_list();
+- return true;
+- });
++ if (m_current_category_type == CategoryType.EMOJI) {
++ button.button_press_event.connect((e) => {
++ m_category_active_index = 0;
++ m_current_category_type = CategoryType.LANG;
++ show_category_list();
++ return true;
++ });
++ } else if (m_current_category_type == CategoryType.LANG) {
++ button.button_press_event.connect((e) => {
++ m_category_active_index = 0;
++ m_current_category_type = CategoryType.EMOJI;
++ show_category_list();
++ return true;
++ });
++ }
+
+ m_vbox.add(m_scrolled_window);
+ Gtk.Viewport viewport = new Gtk.Viewport(null, null);
+@@ -523,21 +597,19 @@ class IBusEmojier : Gtk.Window {
+ }
+ } else if (m_current_category_type == CategoryType.LANG) {
+ m_list_box.row_activated.connect((box, gtkrow) => {
+- m_category_active_index = 0;
+- EBoxRow row = gtkrow as EBoxRow;
+- if (m_current_lang != row.id) {
+- m_current_lang = row.id;
+- reload_emoji_dict();
+- }
+- m_current_category_type = CategoryType.EMOJI;
+- show_category_list();
++ activated_language(gtkrow as EBoxRow);
+ });
+ uint n = 1;
++ string prev_language = null;
+ foreach (unowned string id in m_lang_list) {
+- string selected_language = IBus.get_language_name(id);
+- EBoxRow row = new EBoxRow("", id);
++ string language = IBus.get_language_name(id);
++ if (prev_language == language)
++ language = "%s (%s)".printf(language, id);
++ else
++ prev_language = language;
++ EBoxRow row = new EBoxRow(language, id);
+ EPaddedLabel widget =
+- new EPaddedLabel(selected_language, Gtk.Align.CENTER);
++ new EPaddedLabel(language, Gtk.Align.CENTER);
+ row.add(widget);
+ m_list_box.add(row);
+ if (n++ == m_category_active_index)
+@@ -573,27 +645,6 @@ class IBusEmojier : Gtk.Window {
+ show_candidate_panel();
+ }
+
+- private void label_set_active_color(Gtk.Label label) {
+- unowned string text = label.get_text();
+- Pango.AttrList attrs = new Pango.AttrList();
+- Pango.Attribute pango_attr = Pango.attr_foreground_new(
+- (uint16)(m_selected_fg_color.red * uint16.MAX),
+- (uint16)(m_selected_fg_color.green * uint16.MAX),
+- (uint16)(m_selected_fg_color.blue * uint16.MAX));
+- pango_attr.start_index = 0;
+- pango_attr.end_index = text.char_count();
+- attrs.insert((owned)pango_attr);
+-
+- pango_attr = Pango.attr_background_new(
+- (uint16)(m_selected_bg_color.red * uint16.MAX),
+- (uint16)(m_selected_bg_color.green * uint16.MAX),
+- (uint16)(m_selected_bg_color.blue * uint16.MAX));
+- pango_attr.start_index = 0;
+- pango_attr.end_index = text.char_count();
+- attrs.insert((owned)pango_attr);
+- label.set_attributes(attrs);
+- }
+-
+ private void show_arrow_buttons() {
+ Gtk.Button next_button = new Gtk.Button();
+ next_button.clicked.connect(() => {
+@@ -709,10 +760,17 @@ class IBusEmojier : Gtk.Window {
+ });
+ }
+ EGrid grid = new EGrid();
++ grid.set_row_spacing(5);
++ grid.set_column_spacing(5);
++ grid.set_border_width(2);
+ int n = 0;
+ for (uint i = page_start_pos; i < page_end_pos; i++) {
+ IBus.Text candidate = m_lookup_table.get_candidate(i);
+- Gtk.Label label = new Gtk.Label(candidate.text);
++ Gtk.Label label;
++ if (i == cursor)
++ label = new ESelectedLabel(candidate.text) as Gtk.Label;
++ else
++ label = new EWhiteLabel(candidate.text) as Gtk.Label;
+ string emoji_font = m_emoji_font;
+ if (candidate.text.char_count() > 2) {
+ Pango.FontDescription font_desc =
+@@ -726,9 +784,6 @@ class IBusEmojier : Gtk.Window {
+ label.set_markup(markup);
+ label.set_halign(Gtk.Align.FILL);
+ label.set_valign(Gtk.Align.FILL);
+- if (i == cursor) {
+- label_set_active_color(label);
+- }
+ Gtk.EventBox candidate_ebox = new Gtk.EventBox();
+ candidate_ebox.add(label);
+ // Make a copy of i to workaround a bug in vala.
+@@ -738,6 +793,23 @@ class IBusEmojier : Gtk.Window {
+ candidate_clicked(index, e.button, e.state);
+ return true;
+ });
++ // m_enter_notify_enable is added because
++ // enter_notify_event conflicts with keyboard operations.
++ if (m_enter_notify_enable) {
++ candidate_ebox.enter_notify_event.connect((e) => {
++ m_lookup_table.set_cursor_pos(index);
++ if (m_entry_notify_show_id > 0) {
++ GLib.Source.remove(m_entry_notify_show_id);
++ }
++ // If timeout is not added, memory leak happens and
++ // button_press_event signal does not work above.
++ m_entry_notify_show_id = GLib.Timeout.add(100, () => {
++ show_candidate_panel();
++ return false;
++ });
++ return true;
++ });
++ }
+ grid.attach(candidate_ebox,
+ n % (int)EMOJI_GRID_PAGE, n / (int)EMOJI_GRID_PAGE,
+ 1, 1);
+@@ -797,6 +869,7 @@ class IBusEmojier : Gtk.Window {
+ }
+
+ private void hide_candidate_panel() {
++ m_enter_notify_enable = true;
+ m_candidate_panel_is_visible = false;
+ if (m_loop.is_running())
+ show_category_list();
+@@ -841,6 +914,7 @@ class IBusEmojier : Gtk.Window {
+ }
+
+ private void candidate_panel_cursor_down() {
++ m_enter_notify_enable = false;
+ uint ncandidates = m_lookup_table.get_number_of_candidates();
+ uint cursor = m_lookup_table.get_cursor_pos();
+ if ((cursor + EMOJI_GRID_PAGE) < ncandidates) {
+@@ -854,6 +928,7 @@ class IBusEmojier : Gtk.Window {
+ }
+
+ private void candidate_panel_cursor_up() {
++ m_enter_notify_enable = false;
+ int ncandidates = (int)m_lookup_table.get_number_of_candidates();
+ int cursor = (int)m_lookup_table.get_cursor_pos();
+ int highest_pos =
+@@ -891,6 +966,7 @@ class IBusEmojier : Gtk.Window {
+ m_input_context_path = input_context_path;
+ m_candidate_panel_is_visible = false;
+ m_result = null;
++ m_enter_notify_enable = true;
+
+ /* Let gtk recalculate the window size. */
+ resize(1, 1);
+@@ -1011,7 +1087,10 @@ class IBusEmojier : Gtk.Window {
+ } else if (m_category_active_index > 0) {
+ Gtk.ListBoxRow gtkrow = m_list_box.get_selected_row();
+ EBoxRow row = gtkrow as EBoxRow;
+- show_emoji_for_category(row);
++ if (m_current_category_type == CategoryType.EMOJI)
++ show_emoji_for_category(row);
++ else if (m_current_category_type == CategoryType.LANG)
++ activated_language(row);
+ }
+ return true;
+ case Gdk.Key.BackSpace:
+@@ -1026,6 +1105,7 @@ class IBusEmojier : Gtk.Window {
+ break;
+ }
+ if (m_candidate_panel_is_visible) {
++ m_enter_notify_enable = false;
+ m_lookup_table.cursor_down();
+ show_candidate_panel();
+ }
+@@ -1035,6 +1115,7 @@ class IBusEmojier : Gtk.Window {
+ return true;
+ case Gdk.Key.Right:
+ if (m_candidate_panel_is_visible) {
++ m_enter_notify_enable = false;
+ m_lookup_table.cursor_down();
+ show_candidate_panel();
+ return true;
+@@ -1042,6 +1123,7 @@ class IBusEmojier : Gtk.Window {
+ break;
+ case Gdk.Key.Left:
+ if (m_candidate_panel_is_visible) {
++ m_enter_notify_enable = false;
+ m_lookup_table.cursor_up();
+ show_candidate_panel();
+ return true;
+@@ -1061,6 +1143,7 @@ class IBusEmojier : Gtk.Window {
+ return true;
+ case Gdk.Key.Page_Down:
+ if (m_candidate_panel_is_visible) {
++ m_enter_notify_enable = false;
+ m_lookup_table.page_down();
+ show_candidate_panel();
+ return true;
+@@ -1068,6 +1151,7 @@ class IBusEmojier : Gtk.Window {
+ break;
+ case Gdk.Key.Page_Up:
+ if (m_candidate_panel_is_visible) {
++ m_enter_notify_enable = false;
+ m_lookup_table.page_up();
+ show_candidate_panel();
+ return true;
+--
+2.7.4
diff --git a/ibus.spec b/ibus.spec
index b14d653..f02d1c6 100644
--- a/ibus.spec
+++ b/ibus.spec
@@ -25,12 +25,10 @@
%endif
%global dbus_python_version 0.83.0
-%global annotation_name cldr-emoji-annotation
-%global annotation_version 30.0.3_2
Name: ibus
Version: 1.5.15
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Intelligent Input Bus for Linux OS
License: LGPLv2+
Group: System Environment/Libraries
@@ -39,9 +37,9 @@ Source0: https://github.com/ibus/%name/releases/download/%{version}/%{nam
Source1: %{name}-xinput
Source2: %{name}.conf.5
# Will remove the annotation tarball once the rpm is available on Fedora
-Source3: https://github.com/fujiwarat/%annotation_name/releases/download/%{annotation_version}/%{annotation_name}-%{annotation_version}.tar.gz
# Upstreamed patches.
# Patch0: %%{name}-HEAD.patch
+Patch0: %{name}-HEAD.patch
BuildRequires: gettext-devel
BuildRequires: libtool
@@ -74,6 +72,7 @@ BuildRequires: qt5-qtbase-devel
BuildRequires: nodejs-emojione-json
BuildRequires: json-glib-devel
%endif
+BuildRequires: cldr-emoji-annotation
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Requires: %{name}-gtk2%{?_isa} = %{version}-%{release}
@@ -232,11 +231,12 @@ The ibus-devel-docs package contains developer documentation for IBus
%setup -q
# %%patch0 -p1
# cp client/gtk2/ibusimcontext.c client/gtk3/ibusimcontext.c ||
-zcat %SOURCE3 | tar xfvp -
+%patch0 -p1
%build
#autoreconf -f -i -v
#make -C ui/gtk3 maintainer-clean-generic
+#make -C tools maintainer-clean-generic
%configure \
--disable-static \
--enable-gtk2 \
@@ -256,9 +256,10 @@ zcat %SOURCE3 | tar xfvp -
%ifnarch %{nodejs_arches}
--disable-emoji-dict \
%endif
- --with-emoji-annotation-dir=$PWD/%annotation_name-%annotation_version/annotations \
%{nil}
+make -C ui/gtk3 maintainer-clean-generic
+make -C tools maintainer-clean-generic
make %{?_smp_mflags}
%install
@@ -425,6 +426,11 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache &> /dev/null || :
%{_datadir}/gtk-doc/html/*
%changelog
+* Thu Mar 09 2017 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.15-2
+- Added ibus-HEAD.patch to get upstream patches
+ Fixed ibus_emojier_run() SIGABRT with `ibus emoji`
+ Enhanced theme color on emoji candidates
+
* Mon Mar 06 2017 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.15-1
- Bumped to 1.5.15
diff --git a/sources b/sources
index 9e0605c..cf78d5a 100644
--- a/sources
+++ b/sources
@@ -1,2 +1 @@
SHA512 (ibus-1.5.15.tar.gz) = 4e588acf2ca0172b365630dcfe2d9062e7583e50a44d435ec05c8e3976c6caf54c4708733f1f7dce5ef7724254469ee5c7ab3b086f0cbea18775c894863b0c3e
-SHA512 (cldr-emoji-annotation-30.0.3_2.tar.gz) = 1694fcef63be75f80a2d760696422b591fdfeca28186f2c10414cb7549911378fab2ee992eb578c43c5ac2da62bfa0e846810fdf1d756f15184a44f040f111c1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-05-31 2:06 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-05-31 2:06 [rpms/ibus] autotool: Added ibus-HEAD.patch to get upstream patches Takao Fujiwara
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox