| 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) |