Reputation: 11
I have a c application running under linux it has one window which loads on startup ( window 0 ) it is supposed to call any one of 4 windows ( window 1 - 4 )
my problem is I cannot figure out how to call the secondary window and switch to it.
Any help would be appreciated.
in S0.glade I have 4 buttons each calls a diff routine that is supposed to load one of the 4 windows.
I am just not sure how to do it. I have been googling for 3 days and have not come up with what I need. Tried alot but no luck. this is my first attempt at anything with gtk. Just moving overfrom VB.net under windows and am lost...
my code looks like this in my main loop
int main(int argc, char * argv[])
{
GtkBuilder *builder;
/* init threads */
gtk_init(&argc, &argv);
builder = gtk_builder_new();
gtk_builder_add_from_file (builder, "S0.glade", NULL);
gtk_builder_add_from_file (builder, "S1.glade", NULL);
gtk_builder_add_from_file (builder, "S2.glade", NULL);
gtk_builder_add_from_file (builder, "S3.glade", NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder, "Mini"));
g_lblStatus1 = GTK_WIDGET(gtk_builder_get_object(builder, "lblStatus1"));
g_lblStatus2 = GTK_WIDGET(gtk_builder_get_object(builder, "lblStatus2"));
g_lblStatus3 = GTK_WIDGET(gtk_builder_get_object(builder, "lblStatus3"));
g_lblStatus4 = GTK_WIDGET(gtk_builder_get_object(builder, "lblStatus4"));
g_T1_Size = GTK_WIDGET(gtk_builder_get_object(builder, "T1_Size"));
g_T2_Size = GTK_WIDGET(gtk_builder_get_object(builder, "T2_Size"));
g_T3_Size = GTK_WIDGET(gtk_builder_get_object(builder, "T3_Size"));
g_T4_Size = GTK_WIDGET(gtk_builder_get_object(builder, "T4_Size"));
g_T5_Size = GTK_WIDGET(gtk_builder_get_object(builder, "T5_Size"));
g_T6_Size = GTK_WIDGET(gtk_builder_get_object(builder, "T6_Size"));
g_S_1_Status = GTK_WIDGET(gtk_builder_get_object(builder, "S_1_Status"));
g_S_2_Status = GTK_WIDGET(gtk_builder_get_object(builder, "S_2_Status"));
g_S_3_Status = GTK_WIDGET(gtk_builder_get_object(builder, "S_3_Status"));
g_S_4_Status = GTK_WIDGET(gtk_builder_get_object(builder, "S_4_Status"));
g_S_5_Status = GTK_WIDGET(gtk_builder_get_object(builder, "S_5_Status"));
g_S_6_Status = GTK_WIDGET(gtk_builder_get_object(builder, "S_6_Status"));
g_P_1 = GTK_WIDGET(gtk_builder_get_object(builder, "P_1"));
g_P_2 = GTK_WIDGET(gtk_builder_get_object(builder, "P_2"));
g_P_3 = GTK_WIDGET(gtk_builder_get_object(builder, "P_3"));
g_P_4 = GTK_WIDGET(gtk_builder_get_object(builder, "P_4"));
g_P_5 = GTK_WIDGET(gtk_builder_get_object(builder, "P_5"));
g_P_6 = GTK_WIDGET(gtk_builder_get_object(builder, "P_6"));
g_V_1 = GTK_WIDGET(gtk_builder_get_object(builder, "V_1"));
g_V_2 = GTK_WIDGET(gtk_builder_get_object(builder, "V_2"));
g_V_3 = GTK_WIDGET(gtk_builder_get_object(builder, "V_3"));
g_V_4 = GTK_WIDGET(gtk_builder_get_object(builder, "V_4"));
g_V_5 = GTK_WIDGET(gtk_builder_get_object(builder, "V_5"));
g_V_6 = GTK_WIDGET(gtk_builder_get_object(builder, "V_6"));
g_CSLN = GTK_WIDGET(gtk_builder_get_object(builder, "CSLN"));
g_CBLN = GTK_WIDGET(gtk_builder_get_object(builder, "CBLN"));
g_CS_Volume = GTK_WIDGET(gtk_builder_get_object(builder, "CS_Volume"));
g_CB_Volume = GTK_WIDGET(gtk_builder_get_object(builder, "CB_Volume"));
g_Q_1 = GTK_WIDGET(gtk_builder_get_object(builder, "Q_1"));
g_Q_2 = GTK_WIDGET(gtk_builder_get_object(builder, "Q_2"));
g_Q_3 = GTK_WIDGET(gtk_builder_get_object(builder, "Q_3"));
g_Q_4 = GTK_WIDGET(gtk_builder_get_object(builder, "Q_4"));
g_Q_5 = GTK_WIDGET(gtk_builder_get_object(builder, "Q_5"));
g_Q_6 = GTK_WIDGET(gtk_builder_get_object(builder, "Q_6"));
// Images
g_img1 = (GtkImage *)gtk_builder_get_object(builder, "img1");
g_img2 = (GtkImage *)gtk_builder_get_object(builder, "img2");
g_img3 = (GtkImage *)gtk_builder_get_object(builder, "img3");
g_img4 = (GtkImage *)gtk_builder_get_object(builder, "img4");
g_img5 = (GtkImage *)gtk_builder_get_object(builder, "img5");
g_img6 = (GtkImage *)gtk_builder_get_object(builder, "img6");
g_img7 = (GtkImage *)gtk_builder_get_object(builder, "img7");
gtk_builder_connect_signals(builder, NULL);
g_object_unref(builder);
gtk_widget_show(window);
Set_Filler_Images();
gtk_main();
return 0;
}
I want it to call say window 1 from the button on S0.glade and have it active.
the coding I showed is common to S1, s2, and S3 glade files.
Upvotes: 1
Views: 212
Reputation: 891
Use gtk_widget_show_all in signal handler:
#include <gtk/gtk.h>
void clicked(GtkWidget* sender, GtkWindow* window)
{
gtk_widget_hide(gtk_widget_get_toplevel(sender));
gtk_widget_show_all(GTK_WIDGET(window));
}
int main (int argc, char *argv[])
{
gtk_init (&argc, &argv);
GtkButton* button1, *button2, *button3, *button4;
GtkWindow* window1, *window2, *window3;
GtkLabel* label1, *label2, *label3;
GtkBox *box1, *box2, *box3;
window1 = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
window2 = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
window3 = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
//----------------------------------------------------
button1 = GTK_BUTTON(gtk_button_new());
g_signal_connect(button1, "clicked", G_CALLBACK(clicked), window2);
button2 = GTK_BUTTON(gtk_button_new());
g_signal_connect(button2, "clicked", G_CALLBACK(clicked), window3);
box1 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0));
label1 = GTK_LABEL(gtk_label_new("splash"));
gtk_container_add(GTK_CONTAINER(box1), GTK_WIDGET(label1));
gtk_container_add(GTK_CONTAINER(box1), GTK_WIDGET(button1));
gtk_container_add(GTK_CONTAINER(box1), GTK_WIDGET(button2));
gtk_container_add(GTK_CONTAINER(window1), GTK_WIDGET(box1));
gtk_widget_show_all(GTK_WIDGET(window1));
//----------------------------------------------------
button3 = GTK_BUTTON(gtk_button_new());
g_signal_connect(button3, "clicked", G_CALLBACK(clicked), window1);
box2 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0));
label2 = GTK_LABEL(gtk_label_new("window1"));
gtk_container_add(GTK_CONTAINER(box2), GTK_WIDGET(label2));
gtk_container_add(GTK_CONTAINER(box2), GTK_WIDGET(button3));
gtk_container_add(GTK_CONTAINER(window2), GTK_WIDGET(box2));
//----------------------------------------------------
button4 = GTK_BUTTON(gtk_button_new());
g_signal_connect(button4, "clicked", G_CALLBACK(clicked), window1);
box3 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0));
label3 = GTK_LABEL(gtk_label_new("window2"));
gtk_container_add(GTK_CONTAINER(box3), GTK_WIDGET(label3));
gtk_container_add(GTK_CONTAINER(box3), GTK_WIDGET(button4));
gtk_container_add(GTK_CONTAINER(window3), GTK_WIDGET(box3));
//----------------------------------------------------
gtk_main();
return 0;
}
Upvotes: 2