I've attached the change event function to the individual entry box within the combo box to get more accurate change events though that gives you double change events on some instances. Changing the list may suppose to create change event but its been a long time since i've looked at the combo box code so I dont know. Munira Ahmed wrote: > Combo boxes do not behave properly when items are added to it dynamically. > > I have following code. where before any new addition to the combo box > behaves properly that is changed event is generated only when an item > is selected. however as soon as a new item is added to the list > dynamically change event is generated merely by the movement of the > mouse over the added items. > > any ideas please!!! > > attached is my code > > it can be compiled by following commad g++ `pkg-config --cflags > --libs gtk+-2.0` combobox_test.cpp > > Munira Ahmed > >------------------------------------------------------------------------ > >#include <gtk/gtk.h> >#include <sstream> >#include <fstream> >#include <stdlib.h> >#include <stdio.h> >#include <unistd.h> >#include <iostream> > >using namespace std; > >gboolean ComboboxTimeout(GtkComboBox *widget); >int DialogComboAcc(GtkComboBox *widget,gpointer user_data); >void CreateCombobox(); > >GtkTreeStore * m_TreeAcc; >GtkTreeModel * m_ModelAcc; >GtkCellRenderer * m_ModelRendererAcc; >GtkWidget * m_wComboboxAcc; >GtkWidget * m_Vbox; >GtkWidget * m_Hbox; >GtkTreeStore *treestore; > >const int WINDOW_WIDTH = 200; >const int WINDOW_LENGTH = 400; > >enum >{ > COL_FIRST_NAME = 0, > COL_LAST_NAME, > COL_YEAR_BORN, > NUM_COLS >} ; > >int main (int argc, char **argv) >{ > > GtkWidget *window; > GtkWidget *view; > > gtk_init(&argc, &argv); > > window = gtk_window_new(GTK_WINDOW_TOPLEVEL); > gtk_window_set_title(GTK_WINDOW(window), "Combo Box Testing"); > gtk_widget_set_size_request (GTK_WIDGET (window), WINDOW_WIDTH, WINDOW_LENGTH); > > g_signal_connect(window, "delete_event", gtk_main_quit, NULL); /* dirty */ > > m_Vbox = gtk_vbox_new (false, 0); > gtk_container_add (GTK_CONTAINER (window), m_Vbox); > gtk_widget_show (m_Vbox); > m_Hbox = gtk_hbox_new (false, 0); > gtk_widget_show (m_Hbox); > gtk_box_pack_start (GTK_BOX (m_Vbox), m_Hbox, false, false, 0); > CreateCombobox(); > gtk_box_pack_start (GTK_BOX (m_Hbox), m_wComboboxAcc, false, false, 0); > > gtk_widget_show_all(window); > g_timeout_add(10,(GSourceFunc) ComboboxTimeout, NULL); > > gtk_main(); > > return 0; >} > >void CreateCombobox() >{ > GtkTreeIter toplevel; > GtkTreeIter child; > > m_TreeAcc = gtk_tree_store_new(1, G_TYPE_STRING); > > m_ModelAcc = GTK_TREE_MODEL (m_TreeAcc); > > m_ModelRendererAcc = gtk_cell_renderer_combo_new(); > m_wComboboxAcc = gtk_combo_box_new_with_model(m_ModelAcc); > > gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(m_wComboboxAcc), m_ModelRendererAcc, true); > gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(m_wComboboxAcc), > m_ModelRendererAcc,"text", 0, (gchar *)0); > g_signal_connect (G_OBJECT (GTK_COMBO_BOX (m_wComboboxAcc)), > "changed",G_CALLBACK (DialogComboAcc), NULL); > > >// g_signal_handler_block(GTK_COMBO_BOX (m_wComboboxAcc),m_iSignalIdAcc); > for (int i=0; i < 5 ; i++) > { > > gtk_tree_store_append(GTK_TREE_STORE (m_TreeAcc), &toplevel, NULL); > gtk_tree_store_set(GTK_TREE_STORE (m_TreeAcc), &toplevel, 0, "Tulip", -1); > > /* Create Child */ > gtk_tree_store_append(GTK_TREE_STORE (m_TreeAcc), &child, &toplevel); > gtk_tree_store_set(GTK_TREE_STORE (m_TreeAcc), &child, 0, "Edit-Tulip",-1); > > gtk_tree_store_append(GTK_TREE_STORE (m_TreeAcc), &child, &toplevel); > gtk_tree_store_set(GTK_TREE_STORE (m_TreeAcc), &child, 0, "Delete-Tulip",-1); > > } > // g_signal_handler_unblock(GTK_COMBO_BOX (m_wComboboxAcc),m_iSignalIdAcc); > > gtk_widget_show_all (m_wComboboxAcc); >} > > >int DialogComboAcc(GtkComboBox *widget,gpointer user_data) >{ > > GtkTreeIter toplevel; > GtkTreeIter child; > cout << "Under DialogComboAcc " << endl; > >#if 0 >// g_signal_handler_block(GTK_COMBO_BOX (m_wComboboxAcc),m_iSignalIdAcc); > for (int i=0; i < 1 ; i++) > { > > gtk_tree_store_append(GTK_TREE_STORE (m_TreeAcc), &toplevel, NULL); > gtk_tree_store_set(GTK_TREE_STORE (m_TreeAcc), &toplevel, 0, "Green", -1); > > /* Create - Child */ > gtk_tree_store_append(GTK_TREE_STORE (m_TreeAcc), &child, &toplevel); > gtk_tree_store_set(GTK_TREE_STORE (m_TreeAcc), &child, 0, "Edit-Green",-1); > > gtk_tree_store_append(GTK_TREE_STORE (m_TreeAcc), &child, &toplevel); > gtk_tree_store_set(GTK_TREE_STORE (m_TreeAcc), &child, 0, "Delete-Green",-1); > > } > // g_signal_handler_unblock(GTK_COMBO_BOX (m_wComboboxAcc),m_iSignalIdAcc); >#endif > return false; >} > >int ComboboxTimeout(GtkComboBox *widget) >{ > > GtkTreeIter toplevel; > GtkTreeIter child; > cout << "Under ComboboxTimeout " << endl; > > //g_signal_handler_block(GTK_COMBO_BOX (m_wComboboxAcc),m_iSignalIdAcc); > for (int i=0; i < 3 ; i++) > { > gtk_tree_store_append(GTK_TREE_STORE (m_TreeAcc), &toplevel, NULL); > gtk_tree_store_set(GTK_TREE_STORE (m_TreeAcc), &toplevel, 0, "Auto", -1); > > /* Create - Child */ > gtk_tree_store_append(GTK_TREE_STORE (m_TreeAcc), &child, &toplevel); > gtk_tree_store_set(GTK_TREE_STORE (m_TreeAcc), &child, 0, "Edit-Auto",-1); > > gtk_tree_store_append(GTK_TREE_STORE (m_TreeAcc), &child, &toplevel); > gtk_tree_store_set(GTK_TREE_STORE (m_TreeAcc), &child, 0, "Delete-Auto",-1); > > } > //g_signal_handler_unblock(GTK_COMBO_BOX (m_wComboboxAcc),m_iSignalIdAcc); > return false; >} > > >------------------------------------------------------------------------ > >_______________________________________________ >gtk-list mailing list >gtk-list@xxxxxxxxx >http://mail.gnome.org/mailman/listinfo/gtk-list > > _______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx http://mail.gnome.org/mailman/listinfo/gtk-list