pidgin/gtkutils.c

changeset 20036
3bdbea94ad0c
parent 19859
71d37b57eff2
child 20147
66f05a854eee
equal deleted inserted replaced
20022:534563e21bd4 20036:3bdbea94ad0c
3213 3213
3214 return path; 3214 return path;
3215 } 3215 }
3216 #endif 3216 #endif
3217 3217
3218 static void
3219 combo_box_changed_cb(GtkComboBox *combo_box, GtkEntry *entry)
3220 {
3221 char *text = gtk_combo_box_get_active_text(combo_box);
3222 gtk_entry_set_text(entry, text ? text : "");
3223 g_free(text);
3224 }
3225
3226 static gboolean
3227 entry_key_pressed_cb(GtkWidget *entry, GdkEventKey *key, GtkComboBox *combo)
3228 {
3229 if (key->keyval == GDK_Down || key->keyval == GDK_Up) {
3230 gtk_combo_box_popup(combo);
3231 return TRUE;
3232 }
3233 return FALSE;
3234 }
3235
3236 GtkWidget *
3237 pidgin_text_combo_box_entry_new(const char *default_item, GList *items)
3238 {
3239 GtkComboBox *ret = NULL;
3240 GtkWidget *the_entry = NULL;
3241
3242 ret = GTK_COMBO_BOX(gtk_combo_box_new_text());
3243 the_entry = gtk_entry_new();
3244 gtk_container_add(GTK_CONTAINER(ret), the_entry);
3245
3246 if (default_item)
3247 gtk_entry_set_text(GTK_ENTRY(the_entry), default_item);
3248
3249 for (; items != NULL ; items = items->next) {
3250 char *text = items->data;
3251 if (text && *text)
3252 gtk_combo_box_append_text(ret, text);
3253 }
3254
3255 g_signal_connect(G_OBJECT(ret), "changed", (GCallback)combo_box_changed_cb, the_entry);
3256 g_signal_connect_after(G_OBJECT(the_entry), "key-press-event", G_CALLBACK(entry_key_pressed_cb), ret);
3257
3258 return GTK_WIDGET(ret);
3259 }
3260
3261 const char *pidgin_text_combo_box_entry_get_text(GtkWidget *widget)
3262 {
3263 return gtk_entry_get_text(GTK_ENTRY(GTK_BIN((widget))->child));
3264 }
3265
3266 void pidgin_text_combo_box_entry_set_text(GtkWidget *widget, const char *text)
3267 {
3268 gtk_entry_set_text(GTK_ENTRY(GTK_BIN((widget))->child), (text));
3269 }
3270

mercurial