pidgin/gtkutils.c

changeset 41180
fb686c1483bf
parent 41144
910bdda75c74
child 41209
909561f42b1f
equal deleted inserted replaced
41179:fc1527aee652 41180:fb686c1483bf
1739 gtk_entry_set_text(entry, text ? text : ""); 1739 gtk_entry_set_text(entry, text ? text : "");
1740 g_free(text); 1740 g_free(text);
1741 } 1741 }
1742 1742
1743 static gboolean 1743 static gboolean
1744 entry_key_pressed_cb(GtkWidget *entry, GdkEventKey *key, GtkComboBoxText *combo) 1744 entry_key_pressed_cb(G_GNUC_UNUSED GtkEventControllerKey *controller,
1745 { 1745 guint keyval, G_GNUC_UNUSED guint keycode,
1746 if (key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_Up) { 1746 G_GNUC_UNUSED GdkModifierType state,
1747 gpointer data)
1748 {
1749 GtkComboBoxText *combo = data;
1750
1751 if (keyval == GDK_KEY_Down || keyval == GDK_KEY_Up) {
1747 gtk_combo_box_popup(GTK_COMBO_BOX(combo)); 1752 gtk_combo_box_popup(GTK_COMBO_BOX(combo));
1748 return TRUE; 1753 return TRUE;
1749 } 1754 }
1750 return FALSE; 1755 return FALSE;
1751 } 1756 }
1753 GtkWidget * 1758 GtkWidget *
1754 pidgin_text_combo_box_entry_new(const char *default_item, GList *items) 1759 pidgin_text_combo_box_entry_new(const char *default_item, GList *items)
1755 { 1760 {
1756 GtkComboBoxText *ret = NULL; 1761 GtkComboBoxText *ret = NULL;
1757 GtkWidget *the_entry = NULL; 1762 GtkWidget *the_entry = NULL;
1763 GtkEventController *controller = NULL;
1758 1764
1759 ret = GTK_COMBO_BOX_TEXT(gtk_combo_box_text_new_with_entry()); 1765 ret = GTK_COMBO_BOX_TEXT(gtk_combo_box_text_new_with_entry());
1760 the_entry = gtk_bin_get_child(GTK_BIN(ret)); 1766 the_entry = gtk_bin_get_child(GTK_BIN(ret));
1761 1767
1762 if (default_item) 1768 if (default_item)
1767 if (text && *text) 1773 if (text && *text)
1768 gtk_combo_box_text_append_text(ret, text); 1774 gtk_combo_box_text_append_text(ret, text);
1769 } 1775 }
1770 1776
1771 g_signal_connect(G_OBJECT(ret), "changed", (GCallback)combo_box_changed_cb, the_entry); 1777 g_signal_connect(G_OBJECT(ret), "changed", (GCallback)combo_box_changed_cb, the_entry);
1772 g_signal_connect_after(G_OBJECT(the_entry), "key-press-event", G_CALLBACK(entry_key_pressed_cb), ret); 1778
1779 controller = gtk_event_controller_key_new(the_entry);
1780 g_object_set_data_full(G_OBJECT(the_entry), "pidgin-event-controller",
1781 controller, g_object_unref);
1782 g_signal_connect_after(G_OBJECT(controller), "key-pressed",
1783 G_CALLBACK(entry_key_pressed_cb), ret);
1773 1784
1774 return GTK_WIDGET(ret); 1785 return GTK_WIDGET(ret);
1775 } 1786 }
1776 1787
1777 const char *pidgin_text_combo_box_entry_get_text(GtkWidget *widget) 1788 const char *pidgin_text_combo_box_entry_get_text(GtkWidget *widget)

mercurial