Re: gtk-demo



Based on the suggestion from Sven Neumann I propose the following patch:

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 12:24:44
@@ -312,15 +312,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_object (buffer,
+                               "changed",
+                               G_CALLBACK (update_statusbar),
+                               statusbar,
+                               0);
 
-      g_signal_connect (G_OBJECT (buffer),
-                        "mark_set", /* cursor moved */
-                        G_CALLBACK (mark_set_callback),
-                        statusbar);
+      g_signal_connect_object (buffer,
+                               "mark_set", /* cursor moved */
+                               G_CALLBACK (mark_set_callback),
+                               statusbar,
+                               0);
       
       update_statusbar (buffer, GTK_STATUSBAR (statusbar));
     }

Padraig
> Subject: gtk-demo
> To: gtk-devel-list gnome org
> Mime-Version: 1.0
> Content-MD5: 7KMfy2PfTHFAAoC6hBSsgQ==
> 
> 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]