diff options
author | Owen Taylor <otaylor@redhat.com> | 2000-05-15 16:09:53 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2000-05-15 16:09:53 +0000 |
commit | 386ae2097042d60afa3c4d4d4244161d16966b77 (patch) | |
tree | 81f5b805d22e1cb86356b4e1c1b7be7ad4aab6b9 /gtk | |
parent | 014e275b3ab5c4965eab02a19a77ec31b5002895 (diff) | |
download | gdk-pixbuf-386ae2097042d60afa3c4d4d4244161d16966b77.tar.gz |
A bit of editing.
Fri May 12 18:46:51 2000 Owen Taylor <otaylor@redhat.com>
* docs/Changes-1.4.txt: A bit of editing.
* gdk/gdkwindow.c (_gdk_window_clear_update_area)
* gdk/x11/gdkwindow-x11.c (gdk_window_hide): Add a function
to clear the update area for the window, and clear it
when hiding a window.
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Ignore
if window destroyed.
* gdk/gdkwindow.c (gdk_window_end_paint): Likewise.
* gdk/gdkwindow.c gdk/x11/gdkwindow-x11.c gdk/gdkinternals.h: Move
gdk_window_destroy() to the generic code, since there was a lot of
window-system-independent logic it in. Add a function:
_gdk_window_destroy()
to the internal API to destroy a window without unreferencing it.
Add a function:
_gdk_windowing_window_destroy()
That does the windowing-system-dependent part of destroying
the window.
Fri May 12 11:07:41 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testgtk.c: Fix various memory leaks of pixmaps.
Fri May 12 11:06:10 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c docs/Changes-1.4.txt (gtk_widget_shape_combine_mask):
Make gtk_widget_shape_combine_mask() keep a reference count on
the pixmap since it keeps it around.
Fri May 12 10:53:29 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.c (gdk_window_process_updates_internal): Fix refcount
leak.
* gdk/x11/gdkevents-x11.c (gdk_event_translate): Fix refcount
leak with event filters.
Thu May 11 14:29:44 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkdnd.c (gtk_drag_dest_set_internal): Remove the
signal handlers with the right data arguments. (Fixes
some warnings when a widget was repeatedly set as a drag
destination.)
* gdk/x11/gdkdnd-x11.c (gdk_window_register_dnd): Set data on the
window so we can avoid avoid setting the DND properties on the
toplevel window repeatedly.
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkdnd.c | 52 | ||||
-rw-r--r-- | gtk/gtkwidget.c | 21 | ||||
-rw-r--r-- | gtk/testgtk.c | 37 |
3 files changed, 60 insertions, 50 deletions
diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c index 781a3aad9..74e40352e 100644 --- a/gtk/gtkdnd.c +++ b/gtk/gtkdnd.c @@ -841,6 +841,30 @@ gtk_drag_unhighlight (GtkWidget *widget) gtk_widget_queue_clear (widget); } +static void +gtk_drag_dest_set_internal (GtkWidget *widget, + GtkDragDestSite *site) +{ + GtkDragDestSite *old_site; + + g_return_if_fail (widget != NULL); + + /* HACK, do this in the destroy */ + old_site = gtk_object_get_data (GTK_OBJECT (widget), "gtk-drag-dest"); + if (old_site) + gtk_signal_disconnect_by_data (GTK_OBJECT (widget), old_site); + + if (GTK_WIDGET_REALIZED (widget)) + gtk_drag_dest_realized (widget); + + gtk_signal_connect (GTK_OBJECT (widget), "realize", + GTK_SIGNAL_FUNC (gtk_drag_dest_realized), site); + + gtk_object_set_data_full (GTK_OBJECT (widget), "gtk-drag-dest", + site, gtk_drag_dest_site_destroy); +} + + /************************************************************* * gtk_drag_dest_set: * Register a drop site, and possibly add default behaviors. @@ -864,17 +888,6 @@ gtk_drag_dest_set (GtkWidget *widget, g_return_if_fail (widget != NULL); - /* HACK, do this in the destroy */ - site = gtk_object_get_data (GTK_OBJECT (widget), "gtk-drag-dest"); - if (site) - gtk_signal_disconnect_by_data (GTK_OBJECT (widget), site); - - if (GTK_WIDGET_REALIZED (widget)) - gtk_drag_dest_realized (widget); - - gtk_signal_connect (GTK_OBJECT (widget), "realize", - GTK_SIGNAL_FUNC (gtk_drag_dest_realized), NULL); - site = g_new (GtkDragDestSite, 1); site->flags = flags; @@ -887,8 +900,7 @@ gtk_drag_dest_set (GtkWidget *widget, site->actions = actions; site->do_proxy = FALSE; - gtk_object_set_data_full (GTK_OBJECT (widget), "gtk-drag-dest", - site, gtk_drag_dest_site_destroy); + gtk_drag_dest_set_internal (widget, site); } /************************************************************* @@ -914,17 +926,6 @@ gtk_drag_dest_set_proxy (GtkWidget *widget, g_return_if_fail (widget != NULL); - /* HACK, do this in the destroy */ - site = gtk_object_get_data (GTK_OBJECT (widget), "gtk-drag-dest"); - if (site) - gtk_signal_disconnect_by_data (GTK_OBJECT (widget), site); - - if (GTK_WIDGET_REALIZED (widget)) - gtk_drag_dest_realized (widget); - - gtk_signal_connect (GTK_OBJECT (widget), "realize", - GTK_SIGNAL_FUNC (gtk_drag_dest_realized), NULL); - site = g_new (GtkDragDestSite, 1); site->flags = 0; @@ -938,8 +939,7 @@ gtk_drag_dest_set_proxy (GtkWidget *widget, site->proxy_protocol = protocol; site->proxy_coords = use_coordinates; - gtk_object_set_data_full (GTK_OBJECT (widget), "gtk-drag-dest", - site, gtk_drag_dest_site_destroy); + gtk_drag_dest_set_internal (widget, site); } /************************************************************* diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index c09e605e5..e30ca4aa6 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -4297,6 +4297,13 @@ gtk_widget_aux_info_destroy (GtkWidgetAuxInfo *aux_info) g_mem_chunk_free (aux_info_mem_chunk, aux_info); } +static void +gtk_widget_shape_info_destroy (GtkWidgetShapeInfo *info) +{ + gdk_drawable_unref (info->shape_mask); + g_free (info); +} + /***************************************** * gtk_widget_shape_combine_mask: * set a shape for this widgets' gdk window, this allows for @@ -4327,21 +4334,17 @@ gtk_widget_shape_combine_mask (GtkWidget *widget, if (widget->window) gdk_window_shape_combine_mask (widget->window, NULL, 0, 0); - shape_info = gtk_object_get_data (GTK_OBJECT (widget), shape_info_key); gtk_object_remove_data (GTK_OBJECT (widget), shape_info_key); - g_free (shape_info); } else { GTK_PRIVATE_SET_FLAG (widget, GTK_HAS_SHAPE_MASK); - shape_info = gtk_object_get_data (GTK_OBJECT (widget), shape_info_key); - if (!shape_info) - { - shape_info = g_new (GtkWidgetShapeInfo, 1); - gtk_object_set_data (GTK_OBJECT (widget), shape_info_key, shape_info); - } - shape_info->shape_mask = shape_mask; + shape_info = g_new (GtkWidgetShapeInfo, 1); + gtk_object_set_data_full (GTK_OBJECT (widget), shape_info_key, shape_info, + (GDestroyNotify)gtk_widget_shape_info_destroy); + + shape_info->shape_mask = gdk_drawable_ref (shape_mask); shape_info->offset_x = offset_x; shape_info->offset_y = offset_y; diff --git a/gtk/testgtk.c b/gtk/testgtk.c index 56dc6cb13..299226506 100644 --- a/gtk/testgtk.c +++ b/gtk/testgtk.c @@ -5064,12 +5064,15 @@ void create_ctree (void) gtk_widget_realize (window); - pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1, - &transparent, book_closed_xpm); - pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2, - &transparent, book_open_xpm); - pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3, - &transparent, mini_page_xpm); + if (!pixmap1) + pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1, + &transparent, book_closed_xpm); + if (!pixmap2) + pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2, + &transparent, book_open_xpm); + if (!pixmap3) + pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3, + &transparent, mini_page_xpm); gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300); @@ -6157,14 +6160,16 @@ create_notebook (void) gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10); gtk_widget_realize (sample_notebook); - book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window, - &book_open_mask, - transparent, - book_open_xpm); - book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window, - &book_closed_mask, + if (!book_open) + book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window, + &book_open_mask, transparent, - book_closed_xpm); + book_open_xpm); + if (!book_closed) + book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window, + &book_closed_mask, + transparent, + book_closed_xpm); create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5); @@ -6748,8 +6753,10 @@ shape_create_icon (char *xpm_file, gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py); gtk_widget_show (pixmap); - gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px,py); - + gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px, py); + + gdk_drawable_unref (gdk_pixmap_mask); + gdk_drawable_unref (gdk_pixmap); gtk_signal_connect (GTK_OBJECT (window), "button_press_event", GTK_SIGNAL_FUNC (shape_pressed),NULL); |