Hello,
I've encountered a problem with hiding a GtkToolButton inserted into 
GtkToolbar. Consider the small program bellow.
When pressing button2, this program freezes. I don't know why this happens - I 
think the reasons may be two:

1. Using threads on Win32
2. Some bug.

The problem appears when using GTK 2.12.X under Windows and does not appear 
under Linux (GTK 2.10.X 2.12.X) and also does
not appear when using GTK 2.10.X under Windows. If I remove the threads related 
code, everything works perfectly on all platforms
with all versions of GTK.

I've also investigated, that the button being hidden must be first in the 
toolbar and must have the signal connected, in other
case the problem does not appear.

What reason is correct ?

Thanks for ideas



#include <gtk/gtk.h>

GtkWindow *window;
GtkToolButton *button1;
GtkToolButton *button2;
GtkToolbar *toolbar;

void handler1() {
        gtk_widget_hide(GTK_WIDGET(button2));
        
        
}

void handler2() {
        /*CRASH*/
        gtk_widget_hide(GTK_WIDGET(button1));
}

void quitHandler() {
        
        gtk_main_quit();
        
}


int main(int argc,char* argv[]) {
        g_thread_init(NULL);
        gdk_threads_init();
        gdk_threads_enter();
        
        gtk_init(&argc,&argv);
        
        /*Window*/
        window=GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
        
        /*Toolbar*/
        toolbar=GTK_TOOLBAR(gtk_toolbar_new());
        
        /*Buttons*/
        button1=GTK_TOOL_BUTTON(gtk_tool_button_new_from_stock("gtk-add"));
        button2=GTK_TOOL_BUTTON(gtk_tool_button_new_from_stock("gtk-edit"));
        
        gtk_toolbar_insert(toolbar,GTK_TOOL_ITEM(button1),0);
        gtk_toolbar_insert(toolbar,GTK_TOOL_ITEM(button2),1);
        
        gtk_container_add(GTK_CONTAINER(window),GTK_WIDGET(toolbar));
        
        /*Show all*/
        gtk_widget_show_all(GTK_WIDGET(window));
        gtk_widget_show(GTK_WIDGET(window));
        
        g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(handler1),NULL);
        g_signal_connect(G_OBJECT(button2),"clicked",G_CALLBACK(handler2),NULL);
        
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(quitHandler),NULL);
        
        gtk_main();
        
        gdk_threads_leave();
}




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

Reply via email to