]> Pileus Git - ~andy/gtk/commitdiff
Changed to have the list become non-italic when the demo window is
authorJonathan Blandford <jrb@redhat.com>
Sat, 18 Nov 2000 23:59:30 +0000 (23:59 +0000)
committerJonathan Blandford <jrb@src.gnome.org>
Sat, 18 Nov 2000 23:59:30 +0000 (23:59 +0000)
Sat Nov 18 18:00:17 2000  Jonathan Blandford  <jrb@redhat.com>

* demos/gtk-demo/main.c: Changed to have the list become
non-italic when the demo window is destroyed through an external
event (like a close button).  Doing so found three bugs in the
widget.

* demos/gtk-demo/*.c (do_*): Changed to return the toplevel window.

* gtk/gtkliststore.c (gtk_list_store_set_cell): emit "change" when
we actually set the cell.

* gtk/gtktreestore.c (gtk_tree_store_set_cell): ditto

* gtk/gtktreeselection.c (gtk_tree_selection_real_select_node):
free a leaked path.  Thanks memprof.

19 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
demos/gtk-demo/button_box.c
demos/gtk-demo/geninclude.pl
demos/gtk-demo/geninclude.pl.in
demos/gtk-demo/item_factory.c
demos/gtk-demo/main.c
demos/gtk-demo/menus.c
demos/gtk-demo/panes.c
demos/gtk-demo/textview.c
gtk/gtkliststore.c
gtk/gtktreeselection.c
gtk/gtktreestore.c
gtk/gtktreeview.c

index ebd0968719ae19724da429c8287c767c8e56b527..b529e70e1d775d428e0e560141f3f6790e5beec6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+Sat Nov 18 18:00:17 2000  Jonathan Blandford  <jrb@redhat.com>
+
+       * demos/gtk-demo/main.c: Changed to have the list become
+       non-italic when the demo window is destroyed through an external
+       event (like a close button).  Doing so found three bugs in the
+       widget.
+
+       * demos/gtk-demo/*.c (do_*): Changed to return the toplevel window.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_cell): emit "change" when
+       we actually set the cell.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_cell): ditto
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_real_select_node):
+       free a leaked path.  Thanks memprof.
+
 Sat Nov 18 11:58:17 2000  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/gdkrgb.c (gdk_rgb_allocate_images): Fix 
index ebd0968719ae19724da429c8287c767c8e56b527..b529e70e1d775d428e0e560141f3f6790e5beec6 100644 (file)
@@ -1,3 +1,20 @@
+Sat Nov 18 18:00:17 2000  Jonathan Blandford  <jrb@redhat.com>
+
+       * demos/gtk-demo/main.c: Changed to have the list become
+       non-italic when the demo window is destroyed through an external
+       event (like a close button).  Doing so found three bugs in the
+       widget.
+
+       * demos/gtk-demo/*.c (do_*): Changed to return the toplevel window.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_cell): emit "change" when
+       we actually set the cell.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_cell): ditto
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_real_select_node):
+       free a leaked path.  Thanks memprof.
+
 Sat Nov 18 11:58:17 2000  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/gdkrgb.c (gdk_rgb_allocate_images): Fix 
index ebd0968719ae19724da429c8287c767c8e56b527..b529e70e1d775d428e0e560141f3f6790e5beec6 100644 (file)
@@ -1,3 +1,20 @@
+Sat Nov 18 18:00:17 2000  Jonathan Blandford  <jrb@redhat.com>
+
+       * demos/gtk-demo/main.c: Changed to have the list become
+       non-italic when the demo window is destroyed through an external
+       event (like a close button).  Doing so found three bugs in the
+       widget.
+
+       * demos/gtk-demo/*.c (do_*): Changed to return the toplevel window.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_cell): emit "change" when
+       we actually set the cell.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_cell): ditto
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_real_select_node):
+       free a leaked path.  Thanks memprof.
+
 Sat Nov 18 11:58:17 2000  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/gdkrgb.c (gdk_rgb_allocate_images): Fix 
index ebd0968719ae19724da429c8287c767c8e56b527..b529e70e1d775d428e0e560141f3f6790e5beec6 100644 (file)
@@ -1,3 +1,20 @@
+Sat Nov 18 18:00:17 2000  Jonathan Blandford  <jrb@redhat.com>
+
+       * demos/gtk-demo/main.c: Changed to have the list become
+       non-italic when the demo window is destroyed through an external
+       event (like a close button).  Doing so found three bugs in the
+       widget.
+
+       * demos/gtk-demo/*.c (do_*): Changed to return the toplevel window.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_cell): emit "change" when
+       we actually set the cell.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_cell): ditto
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_real_select_node):
+       free a leaked path.  Thanks memprof.
+
 Sat Nov 18 11:58:17 2000  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/gdkrgb.c (gdk_rgb_allocate_images): Fix 
index ebd0968719ae19724da429c8287c767c8e56b527..b529e70e1d775d428e0e560141f3f6790e5beec6 100644 (file)
@@ -1,3 +1,20 @@
+Sat Nov 18 18:00:17 2000  Jonathan Blandford  <jrb@redhat.com>
+
+       * demos/gtk-demo/main.c: Changed to have the list become
+       non-italic when the demo window is destroyed through an external
+       event (like a close button).  Doing so found three bugs in the
+       widget.
+
+       * demos/gtk-demo/*.c (do_*): Changed to return the toplevel window.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_cell): emit "change" when
+       we actually set the cell.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_cell): ditto
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_real_select_node):
+       free a leaked path.  Thanks memprof.
+
 Sat Nov 18 11:58:17 2000  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/gdkrgb.c (gdk_rgb_allocate_images): Fix 
index ebd0968719ae19724da429c8287c767c8e56b527..b529e70e1d775d428e0e560141f3f6790e5beec6 100644 (file)
@@ -1,3 +1,20 @@
+Sat Nov 18 18:00:17 2000  Jonathan Blandford  <jrb@redhat.com>
+
+       * demos/gtk-demo/main.c: Changed to have the list become
+       non-italic when the demo window is destroyed through an external
+       event (like a close button).  Doing so found three bugs in the
+       widget.
+
+       * demos/gtk-demo/*.c (do_*): Changed to return the toplevel window.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_cell): emit "change" when
+       we actually set the cell.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_cell): ditto
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_real_select_node):
+       free a leaked path.  Thanks memprof.
+
 Sat Nov 18 11:58:17 2000  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/gdkrgb.c (gdk_rgb_allocate_images): Fix 
index ebd0968719ae19724da429c8287c767c8e56b527..b529e70e1d775d428e0e560141f3f6790e5beec6 100644 (file)
@@ -1,3 +1,20 @@
+Sat Nov 18 18:00:17 2000  Jonathan Blandford  <jrb@redhat.com>
+
+       * demos/gtk-demo/main.c: Changed to have the list become
+       non-italic when the demo window is destroyed through an external
+       event (like a close button).  Doing so found three bugs in the
+       widget.
+
+       * demos/gtk-demo/*.c (do_*): Changed to return the toplevel window.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_cell): emit "change" when
+       we actually set the cell.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_cell): ditto
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_real_select_node):
+       free a leaked path.  Thanks memprof.
+
 Sat Nov 18 11:58:17 2000  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/gdkrgb.c (gdk_rgb_allocate_images): Fix 
index 432bfbbfc68b19869640c240985de8d08116b009..6291375d2e392a510fb88948d757f80f6cd6bf4b 100644 (file)
@@ -43,7 +43,7 @@ create_bbox (gint  horizontal,
   return frame;
 }
 
-void
+GtkWidget *
 do_button_box (void)
 {
   static GtkWidget* window = NULL;
@@ -115,8 +115,15 @@ do_button_box (void)
   }
 
   if (!GTK_WIDGET_VISIBLE (window))
-    gtk_widget_show_all (window);
+    {
+      gtk_widget_show_all (window);
+    }
   else
-    gtk_widget_destroy (window);
+    {    
+      gtk_widget_destroy (window);
+      window = NULL;
+    }
+
+  return window;
 }
 
index 31036cc399fbf593e49a055a8ee18be97230d615..df534bc46d5a9a6534b34a15187580c7de0502df 100755 (executable)
@@ -1,13 +1,15 @@
 #!/usr/bin/perl -w
 
 print <<EOT;
+typedef        GtkWidget *(*GDoDemoFunc) (void);
+
 typedef struct _Demo Demo;
 
 struct _Demo 
 {
   gchar *title;
   gchar *filename;
-  void (*func) (void);
+  GDoDemoFunc func;
 };
 
 EOT
@@ -31,7 +33,7 @@ for $file (@ARGV) {
 
     close INFO_FILE;
 
-    print "void do_$basename (void);\n";
+    print "GtkWidget *do_$basename (void);\n";
     $array .= qq(  { "$title", "$file", do_$basename });
 }
 
index 31036cc399fbf593e49a055a8ee18be97230d615..df534bc46d5a9a6534b34a15187580c7de0502df 100755 (executable)
@@ -1,13 +1,15 @@
 #!/usr/bin/perl -w
 
 print <<EOT;
+typedef        GtkWidget *(*GDoDemoFunc) (void);
+
 typedef struct _Demo Demo;
 
 struct _Demo 
 {
   gchar *title;
   gchar *filename;
-  void (*func) (void);
+  GDoDemoFunc func;
 };
 
 EOT
@@ -31,7 +33,7 @@ for $file (@ARGV) {
 
     close INFO_FILE;
 
-    print "void do_$basename (void);\n";
+    print "GtkWidget *do_$basename (void);\n";
     $array .= qq(  { "$title", "$file", do_$basename });
 }
 
index 4e808f9da9d3cd87051f1e8a8634c9cf4c868d15..32f13ea067ee01d4bf2b9ec51c209e837f0b0dfe 100644 (file)
@@ -41,7 +41,7 @@ static GtkItemFactoryEntry menu_items[] =
 
 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
 
-void
+GtkWidget *
 do_item_factory (void)
 {
   static GtkWidget *window = NULL;
@@ -114,5 +114,10 @@ do_item_factory (void)
       gtk_widget_show_all (window);
     }
   else
-    gtk_widget_destroy (window);
+    {
+      gtk_widget_destroy (window);
+      window = NULL;
+    }
+
+  return window;
 }
index 227b2bfa7f65f81a8f95ea0bed69e371e6c336d1..f86cd122e9c2cfa6540763e204095b9975a763a6 100644 (file)
@@ -20,6 +20,33 @@ enum {
   NUM_COLUMNS
 };
 
+typedef struct _CallbackData CallbackData;
+struct _CallbackData
+{
+  GtkTreeModel *model;
+  GtkTreePath *path;
+};
+
+static void
+window_closed_cb (GtkWidget *window, gpointer data)
+{
+  CallbackData *cbdata = data;
+  GtkTreeIter iter;
+  gboolean italic;
+
+  gtk_tree_model_get_iter (cbdata->model, &iter, cbdata->path);
+  gtk_tree_store_get (GTK_TREE_STORE (cbdata->model), &iter,
+                     ITALIC_COLUMN, &italic,
+                     -1);
+  if (italic)
+    gtk_tree_store_set (GTK_TREE_STORE (cbdata->model), &iter,
+                       ITALIC_COLUMN, !italic,
+                       -1);
+
+  gtk_tree_path_free (cbdata->path);
+  g_free (cbdata);
+}
+
 gboolean
 read_line (FILE *stream, GString *str)
 {
@@ -224,7 +251,8 @@ button_press_event_cb (GtkTreeView    *tree_view,
        {
          GtkTreeIter iter;
          gboolean italic;
-         GVoidFunc func;
+         GDoDemoFunc func;
+         GtkWidget *window;
 
          gtk_tree_model_get_iter (model, &iter, path);
          gtk_tree_store_get (GTK_TREE_STORE (model),
@@ -232,12 +260,28 @@ button_press_event_cb (GtkTreeView    *tree_view,
                              FUNC_COLUMN, &func,
                              ITALIC_COLUMN, &italic,
                              -1);
-         (func) ();
          gtk_tree_store_set (GTK_TREE_STORE (model),
                              &iter,
                              ITALIC_COLUMN, !italic,
                              -1);
-         gtk_tree_path_free (path);
+         window = (func) ();
+         if (window != NULL)
+           {
+             CallbackData *cbdata;
+
+             cbdata = g_new (CallbackData, 1);
+             cbdata->model = model;
+             cbdata->path = path;
+
+             gtk_signal_connect (GTK_OBJECT (window),
+                               "destroy",
+                               window_closed_cb,
+                               cbdata);
+           }
+         else
+           {
+             gtk_tree_path_free (path);
+           }
        }
 
       gtk_signal_emit_stop_by_name (GTK_OBJECT (tree_view),
index 03ce18d1bdf139e6f82d0f6b57391e7c7620df05..95ddb10e1a92284c6f2b325959a89e806e988154 100644 (file)
@@ -52,7 +52,7 @@ create_menu (gint depth, gboolean tearoff)
   return menu;
 }
 
-void
+GtkWidget *
 do_menus (void)
 {
   static GtkWidget *window = NULL;
@@ -180,8 +180,15 @@ do_menus (void)
     }
 
   if (!GTK_WIDGET_VISIBLE (window))
-    gtk_widget_show (window);
+    {
+      gtk_widget_show (window);
+    }
   else
-    gtk_widget_destroy (window);
+    {
+      gtk_widget_destroy (window);
+      window = NULL;
+    }
+
+  return window;
 }
 
index 718f8969bc7114007cedc9b4405098d1b9cfed10..0bb1bd5e5f35c396231f54b6fed24cc40a35f596 100644 (file)
@@ -113,7 +113,7 @@ create_pane_options (GtkPaned *paned,
   return frame;
 }
 
-void
+GtkWidget *
 do_panes (void)
 {
   static GtkWidget *window = NULL;
@@ -182,7 +182,14 @@ do_panes (void)
     }
 
   if (!GTK_WIDGET_VISIBLE (window))
-    gtk_widget_show (window);
+    {
+      gtk_widget_show (window);
+    }
   else
-    gtk_widget_destroy (window);
+    {
+      gtk_widget_destroy (window);
+      window = NULL;
+    }
+
+  return window;
 }
index dc6ad428d418f416a92ee8ed0bd96e53a242791e..a6f6b2206d8315959876991f734930d9eb35df59 100644 (file)
@@ -163,7 +163,7 @@ insert_text (GtkTextBuffer *buffer)
   GtkTextIter start, end;
   GdkPixbuf *pixbuf;
 
-  pixbuf = gdk_pixbuf_new_from_xpm_data (book_closed_xpm);
+  pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) book_closed_xpm);
   
   /* get start of buffer; each insertion will revalidate the
    * iterator to point to just after the inserted text.
@@ -282,7 +282,7 @@ insert_text (GtkTextBuffer *buffer)
   g_object_unref (G_OBJECT (pixbuf));
 }
 
-void
+GtkWidget *
 do_textview (void)
 {
   static GtkWidget *window = NULL;
@@ -342,8 +342,15 @@ do_textview (void)
     }
 
   if (!GTK_WIDGET_VISIBLE (window))
-    gtk_widget_show (window);
+    {
+      gtk_widget_show (window);
+    }
   else
-    gtk_widget_destroy (window);
+    {
+      gtk_widget_destroy (window);
+      window = NULL;
+    }
+
+  return window;
 }
 
index fb23aadfb416b08695c210c892303f40e2926ae7..063a844b5968b80c2115236dc22b5ffa0c3bbfb9 100644 (file)
@@ -442,6 +442,9 @@ gtk_list_store_set_cell (GtkListStore *list_store,
       if (column == 0)
        {
          _gtk_tree_data_list_value_to_node (list, value);
+         gtk_signal_emit_by_name (GTK_OBJECT (list_store),
+                                  "changed",
+                                  NULL, iter);
          return;
        }
 
index 706549ee3106d3df7c56f345b5e1dfada861a9e9..4654a7de2535c89ac746029c2043639386f7d707 100644 (file)
@@ -893,6 +893,7 @@ gtk_tree_selection_real_select_node (GtkTreeSelection *selection,
        }
       else
        selected = TRUE;
+      gtk_tree_path_free (path);
     }
   if (selected == TRUE)
     {
index c85c251b8d09a86e8a1f4ddd918beb04c13d6046..b57de70820fa28a9414623d6c4d99bc0a438eb03 100644 (file)
@@ -502,6 +502,9 @@ gtk_tree_store_set_cell (GtkTreeStore *tree_store,
       if (column == 0)
        {
          _gtk_tree_data_list_value_to_node (list, value);
+         gtk_signal_emit_by_name (GTK_OBJECT (tree_store),
+                                  "changed",
+                                  NULL, iter);
          return;
        }
 
index de3d504726545e37277cc5feb6bd3fc62920a2e1..e1122db48cfbc3dd63d6ca4f835b3ca94dddd965 100644 (file)
@@ -1947,7 +1947,7 @@ gtk_tree_view_changed (GtkTreeModel *model,
   else
     {
       /* FIXME: just redraw the node */
-      gtk_widget_queue_resize (GTK_WIDGET (data));
+      gtk_widget_queue_draw (GTK_WIDGET (data));
     }
 }