[gtk+] iconhelper: Require a widget as construction argument
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] iconhelper: Require a widget as construction argument
- Date: Wed, 9 Dec 2015 12:47:22 +0000 (UTC)
commit c9d1a45d30ee5e131d12c8de276e3657111a578b
Author: Benjamin Otte <otte redhat com>
Date: Tue Dec 8 15:39:10 2015 +0100
iconhelper: Require a widget as construction argument
Note that the caller needs to ensure the widget lives as long as the
iconhelper as the iconhelper will not ref the widget.
gtk/deprecated/gtkstatusicon.c | 2 +-
gtk/gtkcellrendererpixbuf.c | 13 +++++++------
gtk/gtkentry.c | 2 +-
gtk/gtkiconhelper.c | 13 +++++++++++--
gtk/gtkiconhelperprivate.h | 2 +-
gtk/gtkimage.c | 2 +-
gtk/gtkspinbutton.c | 2 +-
7 files changed, 23 insertions(+), 13 deletions(-)
---
diff --git a/gtk/deprecated/gtkstatusicon.c b/gtk/deprecated/gtkstatusicon.c
index d6e13f7..fd65b0a 100644
--- a/gtk/deprecated/gtkstatusicon.c
+++ b/gtk/deprecated/gtkstatusicon.c
@@ -1394,7 +1394,7 @@ gtk_status_icon_update_image (GtkStatusIcon *status_icon)
context = gtk_widget_get_style_context (widget);
round_size = round_pixel_size (widget, priv->size);
- icon_helper = _gtk_icon_helper_new ();
+ icon_helper = _gtk_icon_helper_new (widget);
_gtk_icon_helper_set_force_scale_pixbuf (icon_helper, TRUE);
_gtk_icon_helper_set_definition (icon_helper, priv->image_def);
_gtk_icon_helper_set_icon_size (icon_helper, GTK_ICON_SIZE_SMALL_TOOLBAR);
diff --git a/gtk/gtkcellrendererpixbuf.c b/gtk/gtkcellrendererpixbuf.c
index 09597ce..397e7da 100644
--- a/gtk/gtkcellrendererpixbuf.c
+++ b/gtk/gtkcellrendererpixbuf.c
@@ -440,12 +440,13 @@ gtk_cell_renderer_pixbuf_new (void)
}
static GtkIconHelper *
-create_icon_helper (GtkCellRendererPixbuf *cellpixbuf)
+create_icon_helper (GtkCellRendererPixbuf *cellpixbuf,
+ GtkWidget *widget)
{
GtkCellRendererPixbufPrivate *priv = cellpixbuf->priv;
GtkIconHelper *helper;
- helper = _gtk_icon_helper_new ();
+ helper = _gtk_icon_helper_new (widget);
_gtk_icon_helper_set_force_scale_pixbuf (helper, TRUE);
_gtk_icon_helper_set_definition (helper, priv->image_def);
_gtk_icon_helper_set_icon_size (helper, priv->icon_size);
@@ -475,7 +476,7 @@ gtk_cell_renderer_pixbuf_get_size (GtkCellRenderer *cell,
context = gtk_widget_get_style_context (widget);
gtk_style_context_save (context);
gtk_style_context_add_class (context, GTK_STYLE_CLASS_IMAGE);
- icon_helper = create_icon_helper (cellpixbuf);
+ icon_helper = create_icon_helper (cellpixbuf, widget);
if (!_gtk_icon_helper_get_is_empty (icon_helper))
_gtk_icon_helper_get_size (icon_helper,
@@ -579,18 +580,18 @@ gtk_cell_renderer_pixbuf_render (GtkCellRenderer *cell,
if (is_expanded && priv->pixbuf_expander_open != NULL)
{
- icon_helper = _gtk_icon_helper_new ();
+ icon_helper = _gtk_icon_helper_new (widget);
_gtk_icon_helper_set_pixbuf (icon_helper, priv->pixbuf_expander_open);
}
else if (!is_expanded && priv->pixbuf_expander_closed != NULL)
{
- icon_helper = _gtk_icon_helper_new ();
+ icon_helper = _gtk_icon_helper_new (widget);
_gtk_icon_helper_set_pixbuf (icon_helper, priv->pixbuf_expander_closed);
}
}
if (icon_helper == NULL)
- icon_helper = create_icon_helper (cellpixbuf);
+ icon_helper = create_icon_helper (cellpixbuf, widget);
_gtk_icon_helper_set_window (icon_helper,
gtk_widget_get_window (widget));
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 3a849c3..139bd11 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -3260,7 +3260,7 @@ construct_icon_info (GtkWidget *widget,
icon_info = g_slice_new0 (EntryIconInfo);
priv->icons[icon_pos] = icon_info;
- icon_info->icon_helper = _gtk_icon_helper_new ();
+ icon_info->icon_helper = _gtk_icon_helper_new (widget);
_gtk_icon_helper_set_force_scale_pixbuf (icon_info->icon_helper, TRUE);
widget_node = get_entry_node (widget);
diff --git a/gtk/gtkiconhelper.c b/gtk/gtkiconhelper.c
index 8961713..9cae307 100644
--- a/gtk/gtkiconhelper.c
+++ b/gtk/gtkiconhelper.c
@@ -34,6 +34,7 @@
struct _GtkIconHelperPrivate {
GtkImageDefinition *def;
+ GtkWidget *owner;
GdkWindow *window;
GtkIconSize icon_size;
@@ -804,9 +805,17 @@ _gtk_icon_helper_get_icon_name (GtkIconHelper *self)
}
GtkIconHelper *
-_gtk_icon_helper_new (void)
+_gtk_icon_helper_new (GtkWidget *owner)
{
- return g_object_new (GTK_TYPE_ICON_HELPER, NULL);
+ GtkIconHelper *helper;
+
+ g_return_val_if_fail (GTK_IS_WIDGET (owner), NULL);
+
+ helper = g_object_new (GTK_TYPE_ICON_HELPER, NULL);
+
+ helper->priv->owner = owner;
+
+ return helper;
}
void
diff --git a/gtk/gtkiconhelperprivate.h b/gtk/gtkiconhelperprivate.h
index 0368807..a7bbcae 100644
--- a/gtk/gtkiconhelperprivate.h
+++ b/gtk/gtkiconhelperprivate.h
@@ -67,7 +67,7 @@ struct _GtkIconHelperClass
GType _gtk_icon_helper_get_type (void) G_GNUC_CONST;
-GtkIconHelper *_gtk_icon_helper_new (void);
+GtkIconHelper *_gtk_icon_helper_new (GtkWidget *owner);
void _gtk_icon_helper_clear (GtkIconHelper *self);
void _gtk_icon_helper_invalidate (GtkIconHelper *self);
diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c
index 7a2f33f..a24d0df 100644
--- a/gtk/gtkimage.c
+++ b/gtk/gtkimage.c
@@ -402,7 +402,7 @@ gtk_image_init (GtkImage *image)
priv = image->priv;
gtk_widget_set_has_window (GTK_WIDGET (image), FALSE);
- priv->icon_helper = _gtk_icon_helper_new ();
+ priv->icon_helper = _gtk_icon_helper_new (GTK_WIDGET (image));
_gtk_icon_helper_set_icon_size (priv->icon_helper, DEFAULT_ICON_SIZE);
}
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c
index 629e28e..0bf12c6 100644
--- a/gtk/gtkspinbutton.c
+++ b/gtk/gtkspinbutton.c
@@ -1099,7 +1099,7 @@ gtk_spin_button_panel_draw (GtkSpinButton *spin_button,
height = gdk_window_get_height (panel);
width = gdk_window_get_width (panel);
- icon_helper = _gtk_icon_helper_new ();
+ icon_helper = _gtk_icon_helper_new (widget);
_gtk_icon_helper_set_window (icon_helper, panel);
_gtk_icon_helper_set_use_fallback (icon_helper, TRUE);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]