diff --git a/ChangeLog b/ChangeLog index bab240f7d9..db565e1553 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2004-11-11 Matthias Clasen + * gtk/gtkuimanager.c (update_node): Remove two more places + where we were unconditionally setting "visible", causing + unnecessary notifications. + + * gtk/gtkclipboard.c (gtk_clipboard_get_for_display): + (gtk_clipboard_get): Clarify the docs. (#156638, Torsten + Schoenfeld) + (gtk_clipboard_finalize): Warn if the clipboard is still in + its displays clipboard list. + Considerably speed up GtkUIManager, by changing the semantics of the dirty flag. It is now propagated up the tree, and update_node() doesn't descend into clean subtrees. (#143668, @@ -44,7 +54,7 @@ Thu Nov 11 11:34:32 2004 Jonathan Blandford by leaving room for the resize grip. (#157778, Christian Persch) * gdk/linux-fb/*: Fix many sparse warnings. (#157253, - Kjartan Maraas. + Kjartan Maraas). * NEWS: Updates diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index bab240f7d9..db565e1553 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,15 @@ 2004-11-11 Matthias Clasen + * gtk/gtkuimanager.c (update_node): Remove two more places + where we were unconditionally setting "visible", causing + unnecessary notifications. + + * gtk/gtkclipboard.c (gtk_clipboard_get_for_display): + (gtk_clipboard_get): Clarify the docs. (#156638, Torsten + Schoenfeld) + (gtk_clipboard_finalize): Warn if the clipboard is still in + its displays clipboard list. + Considerably speed up GtkUIManager, by changing the semantics of the dirty flag. It is now propagated up the tree, and update_node() doesn't descend into clean subtrees. (#143668, @@ -44,7 +54,7 @@ Thu Nov 11 11:34:32 2004 Jonathan Blandford by leaving room for the resize grip. (#157778, Christian Persch) * gdk/linux-fb/*: Fix many sparse warnings. (#157253, - Kjartan Maraas. + Kjartan Maraas). * NEWS: Updates diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index bab240f7d9..db565e1553 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,5 +1,15 @@ 2004-11-11 Matthias Clasen + * gtk/gtkuimanager.c (update_node): Remove two more places + where we were unconditionally setting "visible", causing + unnecessary notifications. + + * gtk/gtkclipboard.c (gtk_clipboard_get_for_display): + (gtk_clipboard_get): Clarify the docs. (#156638, Torsten + Schoenfeld) + (gtk_clipboard_finalize): Warn if the clipboard is still in + its displays clipboard list. + Considerably speed up GtkUIManager, by changing the semantics of the dirty flag. It is now propagated up the tree, and update_node() doesn't descend into clean subtrees. (#143668, @@ -44,7 +54,7 @@ Thu Nov 11 11:34:32 2004 Jonathan Blandford by leaving room for the resize grip. (#157778, Christian Persch) * gdk/linux-fb/*: Fix many sparse warnings. (#157253, - Kjartan Maraas. + Kjartan Maraas). * NEWS: Updates diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index bab240f7d9..db565e1553 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,15 @@ 2004-11-11 Matthias Clasen + * gtk/gtkuimanager.c (update_node): Remove two more places + where we were unconditionally setting "visible", causing + unnecessary notifications. + + * gtk/gtkclipboard.c (gtk_clipboard_get_for_display): + (gtk_clipboard_get): Clarify the docs. (#156638, Torsten + Schoenfeld) + (gtk_clipboard_finalize): Warn if the clipboard is still in + its displays clipboard list. + Considerably speed up GtkUIManager, by changing the semantics of the dirty flag. It is now propagated up the tree, and update_node() doesn't descend into clean subtrees. (#143668, @@ -44,7 +54,7 @@ Thu Nov 11 11:34:32 2004 Jonathan Blandford by leaving room for the resize grip. (#157778, Christian Persch) * gdk/linux-fb/*: Fix many sparse warnings. (#157253, - Kjartan Maraas. + Kjartan Maraas). * NEWS: Updates diff --git a/gtk/gtkclipboard.c b/gtk/gtkclipboard.c index 6a23db7e83..150e801a25 100644 --- a/gtk/gtkclipboard.c +++ b/gtk/gtkclipboard.c @@ -194,13 +194,22 @@ gtk_clipboard_finalize (GObject *object) { GtkClipboard *clipboard; GtkWidget *clipboard_widget; + GSList *clipboards; clipboard = GTK_CLIPBOARD (object); + clipboards = g_object_get_data (G_OBJECT (clipboard->display), "gtk-clipboard-list"); + if (g_slist_index (clipboards, clipboard) >= 0) + g_warning ("GtkClipboard prematurely finalized"); + clipboard_widget = get_clipboard_widget (clipboard->display); clipboard_unset (clipboard); + clipboards = g_object_get_data (G_OBJECT (clipboard->display), "gtk-clipboard-list"); + clipboards = g_slist_remove (clipboards, clipboard); + g_object_set_data (G_OBJECT (clipboard->display), "gtk-clipboard-list", clipboards); + if (g_main_loop_is_running (clipboard->store_loop)) { g_main_loop_quit (clipboard->store_loop); @@ -227,10 +236,9 @@ clipboard_display_closed (GdkDisplay *display, clipboards = g_object_get_data (G_OBJECT (display), "gtk-clipboard-list"); g_object_run_dispose (G_OBJECT (clipboard)); - g_object_unref (clipboard); clipboards = g_slist_remove (clipboards, clipboard); - g_object_set_data (G_OBJECT (display), "gtk-clipboard-list", clipboards); + g_object_unref (clipboard); } /** @@ -268,8 +276,9 @@ clipboard_display_closed (GdkDisplay *display, * Return value: the appropriate clipboard object. If no * clipboard already exists, a new one will * be created. Once a clipboard object has - * been created, it is persistent for all time and - * cannot be freed. + * been created, it is persistent and, since + * it is owned by GTK+, must not be freed or + * unrefd. * * Since: 2.2 **/ @@ -295,8 +304,9 @@ gtk_clipboard_get_for_display (GdkDisplay *display, * Return value: the appropriate clipboard object. If no * clipboard already exists, a new one will * be created. Once a clipboard object has - * been created, it is persistent for all time and - * cannot be freed. + * been created, it is persistent and, since + * it is owned by GTK+, must not be freed or + * unrefd. **/ GtkClipboard * gtk_clipboard_get (GdkAtom selection) diff --git a/gtk/gtkuimanager.c b/gtk/gtkuimanager.c index 496d3c4ef0..7803248f6f 100644 --- a/gtk/gtkuimanager.c +++ b/gtk/gtkuimanager.c @@ -2110,9 +2110,12 @@ update_node (GtkUIManager *self, menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (info->proxy)); siblings = gtk_container_get_children (GTK_CONTAINER (menu)); if (siblings != NULL && GTK_IS_TEAROFF_MENU_ITEM (siblings->data)) - g_object_set (G_OBJECT (siblings->data), - "visible", self->private_data->add_tearoffs && !in_popup, - NULL); + { + if (self->private_data->add_tearoffs && !in_popup) + gtk_widget_show (GTK_WIDGET (siblings->data)); + else + gtk_widget_hide (GTK_WIDGET (siblings->data)); + } g_list_free (siblings); } @@ -2207,9 +2210,12 @@ update_node (GtkUIManager *self, menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (info->proxy)); siblings = gtk_container_get_children (GTK_CONTAINER (menu)); if (siblings != NULL && GTK_IS_TEAROFF_MENU_ITEM (siblings->data)) - g_object_set (G_OBJECT (siblings->data), - "visible", self->private_data->add_tearoffs && !in_popup, - NULL); + { + if (self->private_data->add_tearoffs && !in_popup) + gtk_widget_show (GTK_WIDGET (siblings->data)); + else + gtk_widget_hide (GTK_WIDGET (siblings->data)); + } g_list_free (siblings); } break;