From ee107621c4d5f42c650b7992b9c1215c23cfd221 Mon Sep 17 00:00:00 2001 From: deepend Date: Tue, 17 Feb 2026 15:23:03 -0700 Subject: [PATCH] =?UTF-8?q?Removed=20the=20custom=20emoji=20picker/menu=20?= =?UTF-8?q?implementation=20from=20maingui.c=20(including=20its=20callback?= =?UTF-8?q?s=20and=20helper=20declarations),=20so=20the=20old=20in-app=20e?= =?UTF-8?q?moji=20menu=20is=20no=20longer=20present.=20The=20code=20now=20?= =?UTF-8?q?transitions=20directly=20from=20emoji=20font=20fallback=20logic?= =?UTF-8?q?=20to=20the=20search-bar=20section.=20updated=20the=20input=20e?= =?UTF-8?q?ntry=20creation=20to=20stop=20creating=20a=20separate=20emoji?= =?UTF-8?q?=20button,=20and=20instead=20enable=20GTK=E2=80=99s=20built-in?= =?UTF-8?q?=20emoji=20menu=20icon=20with=20show-emoji-icon=20on=20GTK3+=20?= =?UTF-8?q?builds=20only=20(no=20GTK2=20fallback=20path).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/fe-gtk/maingui.c | 159 ++----------------------------------------- 1 file changed, 4 insertions(+), 155 deletions(-) diff --git a/src/fe-gtk/maingui.c b/src/fe-gtk/maingui.c index ec5e6b6c..9743264d 100644 --- a/src/fe-gtk/maingui.c +++ b/src/fe-gtk/maingui.c @@ -95,10 +95,6 @@ enum #define TAG_UTIL 1 /* dcc, notify, chanlist */ static void mg_apply_emoji_fallback_widget (GtkWidget *widget); -static void mg_apply_emoji_primary_widget (GtkWidget *widget); -static void mg_emoji_button_cb (GtkWidget *widget, session_gui *gui); -static GtkWidget *mg_create_emoji_menu (session_gui *gui); -static void mg_emoji_insert_cb (GtkMenuItem *item, session_gui *gui); static inline void mg_set_source_color (cairo_t *cr, const XTextColor *color) @@ -3294,148 +3290,6 @@ mg_apply_emoji_fallback_widget (GtkWidget *widget) pango_font_description_free (desc); } -static void -mg_apply_emoji_primary_widget (GtkWidget *widget) -{ - PangoFontDescription *desc; -#if HAVE_GTK3 - GtkStyleContext *context; - const PangoFontDescription *base_desc; -#else - GtkStyle *style; -#endif - - if (!widget) - return; - -#if HAVE_GTK3 - context = gtk_widget_get_style_context (widget); - if (!context) - return; - - base_desc = gtk_style_context_get_font (context, GTK_STATE_FLAG_NORMAL); - if (!base_desc) - return; - - desc = mg_fontdesc_with_fallback (base_desc, TRUE); -#else - style = gtk_widget_get_style (widget); - if (!style || !style->font_desc) - return; - - desc = mg_fontdesc_with_fallback (style->font_desc, TRUE); -#endif - if (!desc) - return; - -#if HAVE_GTK3 - mg_apply_font_css (widget, desc, "zoitechat-emoji-font", - "zoitechat-emoji-font-provider"); -#else - gtk_widget_modify_font (widget, desc); -#endif - pango_font_description_free (desc); -} - -static void -mg_apply_emoji_primary_widget_with_child (GtkWidget *widget) -{ - GtkWidget *child; - - if (!widget) - return; - - mg_apply_emoji_primary_widget (widget); - if (!GTK_IS_BIN (widget)) - return; - - child = gtk_bin_get_child (GTK_BIN (widget)); - if (child) - mg_apply_emoji_primary_widget (child); -} - -/* ------------------------------------------------------------------------- * - * Emoji picker (optional UI sugar) - * ------------------------------------------------------------------------- */ - -static void -mg_emoji_insert_cb (GtkMenuItem *item, session_gui *gui) -{ - const char *emoji = g_object_get_data (G_OBJECT (item), "emoji"); - gint pos; - - if (!emoji || !gui || !gui->input_box) - return; - - pos = SPELL_ENTRY_GET_POS (gui->input_box); - gtk_editable_insert_text (GTK_EDITABLE (gui->input_box), emoji, -1, &pos); - gtk_editable_set_position (GTK_EDITABLE (gui->input_box), pos); - gtk_widget_grab_focus (gui->input_box); -} - -static GtkWidget * -mg_create_emoji_menu (session_gui *gui) -{ - /* VS16 (emoji presentation). No, it does not need a space. */ -#define VS16 "\xEF\xB8\x8F" - static const char *emoji_list[] = { - "๐Ÿ˜€","๐Ÿ˜ƒ","๐Ÿ˜„","๐Ÿ˜","๐Ÿ˜†","๐Ÿ˜‚","๐Ÿคฃ","๐Ÿ˜Š","๐Ÿ˜‡","๐Ÿ˜‰","๐Ÿ˜", - "๐Ÿฅฐ","๐Ÿ˜˜","๐Ÿ˜œ","๐Ÿคช","๐Ÿ˜Ž","๐Ÿคฉ","๐Ÿค”","๐Ÿคจ","๐Ÿ˜","๐Ÿ˜ถ","๐Ÿ™„", - "๐Ÿ˜","๐Ÿ˜ฃ","๐Ÿ˜ฅ","๐Ÿ˜ฎ","๐Ÿ˜ฏ","๐Ÿ˜ช","๐Ÿ˜ด","๐Ÿ˜Œ","๐Ÿ˜”","๐Ÿ˜ข", - "๐Ÿ˜ญ","๐Ÿ˜ค","๐Ÿ˜ ","๐Ÿ˜ก","๐Ÿคฌ","๐Ÿฅบ","๐Ÿ˜ณ","๐Ÿค—","๐Ÿคญ","๐Ÿคซ", - "๐Ÿค","๐Ÿ˜ท","๐Ÿค’","๐Ÿค•","๐Ÿคข","๐Ÿคฎ","๐Ÿฅต","๐Ÿฅถ","๐Ÿฅด","๐Ÿคฏ", - "๐Ÿ‘"VS16,"๐Ÿ‘Ž"VS16,"๐Ÿ‘"VS16,"๐Ÿ™Œ"VS16,"๐Ÿ™"VS16,"๐Ÿ’ช"VS16, - "๐Ÿ‘€"VS16,"๐Ÿ’ฏ"VS16,"โœ…"VS16,"โŒ"VS16,"๐ŸŽ‰"VS16,"๐Ÿ”ฅ"VS16, - "โค","๐Ÿ’”","๐Ÿ’–","๐Ÿ’™","๐Ÿ’š","๐Ÿ’›","๐Ÿ’œ","๐Ÿงก","๐Ÿค","๐Ÿ–ค", - "โญ"VS16,"๐ŸŒŸ","โœจ","โšก"VS16,"โ˜€","๐ŸŒˆ","โ˜•"VS16,"๐Ÿ•", - "๐Ÿ”","๐ŸŸ","๐Ÿฃ","๐Ÿฉ","๐ŸŽ‚","๐Ÿบ","๐Ÿท","๐ŸŽ","๐ŸŽˆ","๐ŸŽฏ", - "๐ŸŽต","๐ŸŽถ","๐ŸŽฎ","๐Ÿš€","โœˆ","๐Ÿš—","๐Ÿš•","๐Ÿšฒ","๐Ÿก","๐ŸŒ", - NULL - }; -#undef VS16 - - GtkWidget *menu; - const int columns = 8; - int i; - - menu = gtk_menu_new (); - - for (i = 0; emoji_list[i]; i++) - { - GtkWidget *item = gtk_menu_item_new_with_label (emoji_list[i]); - int row = i / columns; - int col = i % columns; - - g_object_set_data_full (G_OBJECT (item), "emoji", g_strdup (emoji_list[i]), g_free); - g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (mg_emoji_insert_cb), gui); - - /* Prefer emoji fonts for the label itself */ - mg_apply_emoji_primary_widget_with_child (item); - - gtk_menu_attach (GTK_MENU (menu), item, col, col + 1, row, row + 1); - gtk_widget_show (item); - } - - g_signal_connect (G_OBJECT (menu), "selection-done", G_CALLBACK (gtk_widget_destroy), NULL); - return menu; -} - -static void -mg_emoji_button_cb (GtkWidget *widget, session_gui *gui) -{ - GtkWidget *menu; - - menu = mg_create_emoji_menu (gui); -#if HAVE_GTK3 - gtk_menu_popup_at_widget (GTK_MENU (menu), widget, - GDK_GRAVITY_SOUTH_WEST, - GDK_GRAVITY_NORTH_WEST, - NULL); -#else - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time ()); -#endif -} - /* Search bar adapted from Conspire's by William Pitcock */ #define SEARCH_CHANGE 1 @@ -3664,7 +3518,7 @@ mg_create_search(session *sess, GtkWidget *box) static void mg_create_entry (session *sess, GtkWidget *box) { - GtkWidget *hbox, *but, *entry, *emoji_button; + GtkWidget *hbox, *but, *entry; session_gui *gui = sess->gui; hbox = mg_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 0); @@ -3705,14 +3559,9 @@ mg_create_entry (session *sess, GtkWidget *box) if (prefs.hex_gui_input_style) mg_apply_entry_style (entry); - /* Optional emoji button (kept since you already added it) */ - emoji_button = gtk_button_new_with_label ("๐Ÿ˜Š"); - gtk_button_set_relief (GTK_BUTTON (emoji_button), GTK_RELIEF_NONE); - gtk_widget_set_can_focus (emoji_button, FALSE); - gtk_widget_set_tooltip_text (emoji_button, _("Insert emoji")); - mg_apply_emoji_primary_widget_with_child (emoji_button); - g_signal_connect (G_OBJECT (emoji_button), "clicked", G_CALLBACK (mg_emoji_button_cb), gui); - gtk_box_pack_start (GTK_BOX (hbox), emoji_button, FALSE, FALSE, 4); +#if HAVE_GTK3 + g_object_set (G_OBJECT (entry), "show-emoji-icon", TRUE, NULL); +#endif } static void