Bill
Bill

Reputation: 11

How do I switch between windows in c on linux with gtk3

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

Answers (1)

pan-mroku
pan-mroku

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

Related Questions