[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gtk-devel
Subject:    Re: GTK3 - GtkExpander problem, bug ?
From:       Eric Cashon via gtk-devel-list <gtk-devel-list () gnome ! org>
Date:       2017-12-14 19:28:38
Message-ID: 160568003ca-1727-4b725 () webjas-vab019 ! srv ! aolmail ! net
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


 
Hi Sébastien,

If I try some test code... it should work. The code uses a grid instead of a fixed \
container. Is this similar to what you have tried?

Eric

/*
   gcc -Wall buttons1.c -o buttons1 `pkg-config --cflags --libs gtk+-3.0`
   Tested with GTK3.18 on Ubuntu16.04
*/
#include<gtk/gtk.h>

static void button_clicked1(GtkWidget *button, gpointer user_data)
  {
    g_print("1 %s\n", gtk_button_get_label(GTK_BUTTON(button)));
  }
static void button_clicked2(GtkWidget *button, gpointer user_data)
  {
    g_print("2 %s\n", gtk_button_get_label(GTK_BUTTON(button)));
  }
int main(int argc, char *argv[])
  {
    gtk_init (&argc, &argv);

    GtkWidget *window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Buttons");
    gtk_window_set_default_size(GTK_WINDOW(window), 400, 400);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    gint i=0;
    gint j=0;
    GtkWidget *buttons1[100];
    GtkWidget *buttons2[100];

    //First set of buttons.
    for(i=0;i<100;i++)
      {
        gchar *string=g_strdup_printf("button%i", i);
        buttons1[i]=gtk_button_new_with_label(string);
        g_free(string);
      }

    GtkWidget *grid1=gtk_grid_new();
    for(i=0;i<10;i++)
      {
        for(j=0;j<10;j++)
          {
            gtk_grid_attach(GTK_GRID(grid1), buttons1[i*10+j], j, i, 1, 1);
            g_signal_connect(buttons1[i*10+j], "clicked", \
G_CALLBACK(button_clicked1), NULL);  }
      } 

    //Second set of buttons.
    for(i=0;i<100;i++)
      {
        gchar *string=g_strdup_printf("button%i", i);
        buttons2[i]=gtk_button_new_with_label(string);
        g_free(string);
      }

    GtkWidget *grid2=gtk_grid_new();
    for(i=0;i<10;i++)
      {
        for(j=0;j<10;j++)
          {
            gtk_grid_attach(GTK_GRID(grid2), buttons2[i*10+j], j, i, 1, 1);
            g_signal_connect(buttons2[i*10+j], "clicked", \
G_CALLBACK(button_clicked2), NULL);  }
      }   

    GtkWidget *scroll1=gtk_scrolled_window_new(NULL, NULL);
    gtk_widget_set_vexpand(scroll1, TRUE);
    gtk_widget_set_hexpand(scroll1, TRUE);
    gtk_container_add(GTK_CONTAINER(scroll1), grid1);

    GtkWidget *scroll2=gtk_scrolled_window_new(NULL, NULL);
    gtk_widget_set_vexpand(scroll2, TRUE);
    gtk_widget_set_hexpand(scroll2, TRUE);
    gtk_container_add(GTK_CONTAINER(scroll2), grid2);

    GtkWidget *expander1=gtk_expander_new("buttons1");
    gtk_container_add(GTK_CONTAINER(expander1), scroll1);

    GtkWidget *expander2=gtk_expander_new("buttons2");
    gtk_container_add(GTK_CONTAINER(expander2), scroll2);

    GtkWidget *grid3=gtk_grid_new();
    gtk_grid_attach(GTK_GRID(grid3), expander1, 0, 0, 1, 1);
    gtk_grid_attach(GTK_GRID(grid3), expander2, 0, 1, 1, 1);

    gtk_container_add(GTK_CONTAINER(window), grid3);

    gtk_widget_show_all(window);

    gtk_main();

    return 0;
  }   

 


[Attachment #5 (text/html)]

<font color='black' size='2' face='arial'>
<div> <font size="2"><br>
Hi Sébastien,<br>
<br>
If I try some test code... it should work. The code uses a grid instead of a fixed \
container. Is this similar to what you have tried?<br> <br>
Eric<br>
<br>
/*<br>
&nbsp;&nbsp; gcc -Wall buttons1.c -o buttons1 `pkg-config --cflags --libs \
gtk+-3.0`<br> &nbsp;&nbsp; Tested with GTK3.18 on Ubuntu16.04<br>
*/<br>
#include&lt;gtk/gtk.h&gt;<br>
<br>
static void button_clicked1(GtkWidget *button, gpointer user_data)<br>
&nbsp; {<br>
&nbsp;&nbsp;&nbsp; g_print("1 %s\n", gtk_button_get_label(GTK_BUTTON(button)));<br>
&nbsp; }<br>
static void button_clicked2(GtkWidget *button, gpointer user_data)<br>
&nbsp; {<br>
&nbsp;&nbsp;&nbsp; g_print("2 %s\n", gtk_button_get_label(GTK_BUTTON(button)));<br>
&nbsp; }<br>
int main(int argc, char *argv[])<br>
&nbsp; {<br>
&nbsp;&nbsp;&nbsp; gtk_init (&amp;argc, &amp;argv);<br>
<br>
&nbsp;&nbsp;&nbsp; GtkWidget *window=gtk_window_new (GTK_WINDOW_TOPLEVEL);<br>
&nbsp;&nbsp;&nbsp; gtk_window_set_title(GTK_WINDOW(window), "Buttons");<br>
&nbsp;&nbsp;&nbsp; gtk_window_set_default_size(GTK_WINDOW(window), 400, 400);<br>
&nbsp;&nbsp;&nbsp; gtk_window_set_position(GTK_WINDOW(window), \
GTK_WIN_POS_CENTER);<br> &nbsp;&nbsp;&nbsp; g_signal_connect(window, "destroy", \
G_CALLBACK(gtk_main_quit), NULL);<br> <br>
&nbsp;&nbsp;&nbsp; gint i=0;<br>
&nbsp;&nbsp;&nbsp; gint j=0;<br>
&nbsp;&nbsp;&nbsp; GtkWidget *buttons1[100];<br>
&nbsp;&nbsp;&nbsp; GtkWidget *buttons2[100];<br>
<br>
&nbsp;&nbsp;&nbsp; //First set of buttons.<br>
&nbsp;&nbsp;&nbsp; for(i=0;i&lt;100;i++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gchar *string=g_strdup_printf("button%i", \
i);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
buttons1[i]=gtk_button_new_with_label(string);<br> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_free(string);<br> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> <br>
&nbsp;&nbsp;&nbsp; GtkWidget *grid1=gtk_grid_new();<br>
&nbsp;&nbsp;&nbsp; for(i=0;i&lt;10;i++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(j=0;j&lt;10;j++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
gtk_grid_attach(GTK_GRID(grid1), buttons1[i*10+j], j, i, 1, 1);<br> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
g_signal_connect(buttons1[i*10+j], "clicked", G_CALLBACK(button_clicked1), NULL);<br> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br> <br>
&nbsp;&nbsp;&nbsp; //Second set of buttons.<br>
&nbsp;&nbsp;&nbsp; for(i=0;i&lt;100;i++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gchar *string=g_strdup_printf("button%i", \
i);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
buttons2[i]=gtk_button_new_with_label(string);<br> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_free(string);<br> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> <br>
&nbsp;&nbsp;&nbsp; GtkWidget *grid2=gtk_grid_new();<br>
&nbsp;&nbsp;&nbsp; for(i=0;i&lt;10;i++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(j=0;j&lt;10;j++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
gtk_grid_attach(GTK_GRID(grid2), buttons2[i*10+j], j, i, 1, 1);<br> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
g_signal_connect(buttons2[i*10+j], "clicked", G_CALLBACK(button_clicked2), NULL);<br> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br> <br>
&nbsp;&nbsp;&nbsp; GtkWidget *scroll1=gtk_scrolled_window_new(NULL, NULL);<br>
&nbsp;&nbsp;&nbsp; gtk_widget_set_vexpand(scroll1, TRUE);<br>
&nbsp;&nbsp;&nbsp; gtk_widget_set_hexpand(scroll1, TRUE);<br>
&nbsp;&nbsp;&nbsp; gtk_container_add(GTK_CONTAINER(scroll1), grid1);<br>
<br>
&nbsp;&nbsp;&nbsp; GtkWidget *scroll2=gtk_scrolled_window_new(NULL, NULL);<br>
&nbsp;&nbsp;&nbsp; gtk_widget_set_vexpand(scroll2, TRUE);<br>
&nbsp;&nbsp;&nbsp; gtk_widget_set_hexpand(scroll2, TRUE);<br>
&nbsp;&nbsp;&nbsp; gtk_container_add(GTK_CONTAINER(scroll2), grid2);<br>
<br>
&nbsp;&nbsp;&nbsp; GtkWidget *expander1=gtk_expander_new("buttons1");<br>
&nbsp;&nbsp;&nbsp; gtk_container_add(GTK_CONTAINER(expander1), scroll1);<br>
<br>
&nbsp;&nbsp;&nbsp; GtkWidget *expander2=gtk_expander_new("buttons2");<br>
&nbsp;&nbsp;&nbsp; gtk_container_add(GTK_CONTAINER(expander2), scroll2);<br>
<br>
&nbsp;&nbsp;&nbsp; GtkWidget *grid3=gtk_grid_new();<br>
&nbsp;&nbsp;&nbsp; gtk_grid_attach(GTK_GRID(grid3), expander1, 0, 0, 1, 1);<br>
&nbsp;&nbsp;&nbsp; gtk_grid_attach(GTK_GRID(grid3), expander2, 0, 1, 1, 1);<br>
<br>
&nbsp;&nbsp;&nbsp; gtk_container_add(GTK_CONTAINER(window), grid3);<br>
<br>
&nbsp;&nbsp;&nbsp; gtk_widget_show_all(window);<br>
<br>
&nbsp;&nbsp;&nbsp; gtk_main();<br>
<br>
&nbsp;&nbsp;&nbsp; return 0;<br>
&nbsp; }&nbsp;&nbsp; </font><br>
</div>

<div> <br>
</div>
<br>
</font>



_______________________________________________
gtk-devel-list mailing list
gtk-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-devel-list


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic