#include <gtk/gtk.h>
typedef struct
{
GtkWidget *w_car_choose;
GtkWidget *w_model_choose;
GtkWidget *w_submit_button;
GtkWidget *w_treeview;
} app_widgets;
GtkBuilder *builder;
GtkWidget *main_window;
GtkWidget *listtree_window;
void on_btn_submit_clicked(GtkButton *button, gpointer *user_data);
int main(int argc, char *argv[])
{
app_widgets *widgets = g_slice_new(app_widgets);
gtk_init(&argc, &argv);
builder = gtk_builder_new();
gtk_builder_add_from_file(builder, "test.glade", NULL);
main_window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));
listtree_window = GTK_WIDGET(gtk_builder_get_object(builder, "listtree_window"));
// get pointers to widgets
widgets->w_treeview = GTK_WIDGET(gtk_builder_get_object(builder, "treeview"));
widgets->w_car_choose = GTK_WIDGET(gtk_builder_get_object(builder, "car_choose"));
widgets->w_model_choose = GTK_WIDGET(gtk_builder_get_object(builder, "model_choose"));
widgets->w_submit_button = GTK_WIDGET(gtk_builder_get_object(builder, "btn_submit"));
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->w_car_choose), 1);
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->w_model_choose), 1);
gtk_builder_connect_signals(builder, widgets);
g_object_unref(builder);
gtk_widget_show(main_window);
g_signal_connect(GTK_WIDGET(widgets->w_submit_button), "clicked", G_CALLBACK(on_btn_submit_clicked), widgets);
gtk_main();
g_slice_free(app_widgets, widgets);
return 0;
}
void on_btn_submit_clicked(GtkButton *button, gpointer *user_data)
{
app_widgets *widgets = user_data;
GtkTreeIter iter;
GtkListStore *liststore = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->w_treeview)));
gtk_list_store_append(liststore, &iter);
gtk_list_store_set(liststore, &iter, 0, gtk_combo_box_text_get_active_text(GTK_COMBO_BOX(widgets->w_model_choose)), 1, gtk_combo_box_text_get_active_text(GTK_COMBO_BOX(widgets->w_car_choose)), -1);
gtk_widget_hide(GTK_WIDGET(main_window));
gtk_widget_show(listtree_window);
}
// called when window is closed
void on_window_main_destroy()
{
gtk_main_quit();
}
if you want to pass customized data during onClick signal then connect using
g_signal_connect
https://developer.gnome.org/gobject/stable/gobject-Signals.html.
and generally, for connecting signals, you can manually connect it using g_connect as mostly during your program you might want to modify data's which will be stored in your struct so instead of using glade for it, you can manually connect.
#suggestions(if your actual program is gonna look like this). you could finish the above program in a single main window by adding an Add button to "listtree_window" window and making "main_window" a dialog box.