gtk-demo



If I run gtk-demo and double click on Application main window and then close 
that window I get messages such as those below.

gtk-demo (pid:16775): GRuntime-WARNING **: invalid cast from `PangoLayout' to 
`GtkStatusbar'

gtk-demo (pid:16775): Gtk-CRITICAL **: file gtkstatusbar.c: line 278 
(gtk_statusbar_pop): assertion `GTK_IS_STATUSBAR (statusbar)' failed

gtk-demo (pid:16775): Gtk-CRITICAL **: file gtkstatusbar.c: line 253 
(gtk_statusbar_push): assertion `GTK_IS_STATUSBAR (statusbar)' failed

May I commit the following change to fix the problem?

Padraig


Index: appwindow.c
===================================================================
RCS file: /cvs/gnome/gtk+/demos/gtk-demo/appwindow.c,v
retrieving revision 1.4
diff -u -p -r1.4 appwindow.c
--- appwindow.c 2001/07/31 09:42:34     1.4
+++ appwindow.c 2001/08/20 10:22:45
@@ -6,8 +6,10 @@
 #include <gtk/gtk.h>
 
 static GtkWidget *window = NULL;
+static guint changed_id;
+static guint mark_set_id;
+static GObject *text_buffer;
 
-
 static void
 menuitem_cb (gpointer             callback_data,
              guint                callback_action,
@@ -147,7 +149,7 @@ update_statusbar (GtkTextBuffer *buffer,
   gint row, col;
   gint count;
   GtkTextIter iter;
-  
+
   gtk_statusbar_pop (statusbar, 0); /* clear any previous message, underflow is 
allowed */
 
   count = gtk_text_buffer_get_char_count (buffer);
@@ -176,6 +178,16 @@ mark_set_callback (GtkTextBuffer     *bu
   update_statusbar (buffer, GTK_STATUSBAR (data));
 }
 
+static void
+destroy_statusbar (GtkStatusbar     *statusbar)
+{
+  /*
+   * Remove signals which use statusbar when statusbar is destroyed.
+   */
+  g_signal_handler_disconnect (text_buffer, changed_id);
+  g_signal_handler_disconnect (text_buffer, mark_set_id);
+}
+
 GtkWidget *
 do_appwindow (void)
 {  
@@ -302,6 +314,10 @@ do_appwindow (void)
       /* Create statusbar */
 
       statusbar = gtk_statusbar_new ();
+      g_signal_connect (G_OBJECT (statusbar),
+                        "destroy",
+                        G_CALLBACK (destroy_statusbar),
+                        NULL);
       gtk_table_attach (GTK_TABLE (table),
                         statusbar,
                         /* X direction */       /* Y direction */
@@ -311,16 +327,17 @@ do_appwindow (void)
 
       /* Show text widget info in the statusbar */
       buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (contents));
-      
-      g_signal_connect (G_OBJECT (buffer),
-                        "changed",
-                        G_CALLBACK (update_statusbar),
-                        statusbar);
-
-      g_signal_connect (G_OBJECT (buffer),
-                        "mark_set", /* cursor moved */
-                        G_CALLBACK (mark_set_callback),
-                        statusbar);
+      text_buffer = G_OBJECT (buffer);
+
+      changed_id = g_signal_connect (G_OBJECT (buffer),
+                                     "changed",
+                                     G_CALLBACK (update_statusbar),
+                                     statusbar);
+
+      mark_set_id = g_signal_connect (G_OBJECT (buffer),
+                                      "mark_set", /* cursor moved */
+                                      G_CALLBACK (mark_set_callback),
+                                      statusbar);
       
       update_statusbar (buffer, GTK_STATUSBAR (statusbar));
     }





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]