summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2000-05-15 16:09:53 +0000
committerOwen Taylor <otaylor@src.gnome.org>2000-05-15 16:09:53 +0000
commit386ae2097042d60afa3c4d4d4244161d16966b77 (patch)
tree81f5b805d22e1cb86356b4e1c1b7be7ad4aab6b9 /gtk
parent014e275b3ab5c4965eab02a19a77ec31b5002895 (diff)
downloadgdk-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.c52
-rw-r--r--gtk/gtkwidget.c21
-rw-r--r--gtk/testgtk.c37
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);