Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/ev-page-action.c
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2005-05-10 09:33:33 (GMT)
committer Marco Pesenti Gritti <marco@src.gnome.org>2005-05-10 09:33:33 (GMT)
commitd58f069362465e0bd50814853b86ab5341beba79 (patch)
tree30ab28f0c2e201934d1824cfc7e6ae06919089eb /shell/ev-page-action.c
parent43f12b7663328557c87c4d579a21e37e520ebdb3 (diff)
Keep a weak reference on proxy->page_cache so that we dont try to
2005-05-10 Marco Pesenti Gritti <mpg@redhat.com> * shell/ev-page-action.c: (ev_page_action_widget_set_page_cache), (ev_page_action_widget_finalize), (ev_page_action_widget_class_init), (update_page_cache): Keep a weak reference on proxy->page_cache so that we dont try to disconnect the signal if the object is already gone. Maybe there is a better way to cleanup reference handling in page action though...
Diffstat (limited to 'shell/ev-page-action.c')
-rw-r--r--shell/ev-page-action.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/shell/ev-page-action.c b/shell/ev-page-action.c
index deb9b77..57b9bfc 100644
--- a/shell/ev-page-action.c
+++ b/shell/ev-page-action.c
@@ -63,6 +63,9 @@ static GType ev_page_action_widget_get_type (void);
static void ev_page_action_widget_init (EvPageActionWidget *action_widget);
static void ev_page_action_widget_class_init (EvPageActionWidgetClass *action_widget);
+#define EV_TYPE_PAGE_ACTION_WIDGET (ev_page_action_widget_get_type ())
+#define EV_PAGE_ACTION_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_PAGE_ACTION_WIDGET, EvPageActionWidget))
+
G_DEFINE_TYPE (EvPageActionWidget, ev_page_action_widget, GTK_TYPE_TOOL_ITEM)
static void
@@ -72,11 +75,37 @@ ev_page_action_widget_init (EvPageActionWidget *action_widget)
}
static void
-ev_page_action_widget_class_init (EvPageActionWidgetClass *action_widget)
+ev_page_action_widget_set_page_cache (EvPageActionWidget *action_widget,
+ EvPageCache *page_cache)
+{
+ if (action_widget->page_cache != NULL) {
+ g_object_remove_weak_pointer (G_OBJECT (action_widget->page_cache),
+ (gpointer *)&action_widget->page_cache);
+ action_widget->page_cache = NULL;
+ }
+
+ if (page_cache != NULL) {
+ action_widget->page_cache = page_cache;
+ g_object_add_weak_pointer (G_OBJECT (page_cache),
+ (gpointer *)&action_widget->page_cache);
+ }
+}
+
+static void
+ev_page_action_widget_finalize (GObject *object)
{
+ EvPageActionWidget *action_widget = EV_PAGE_ACTION_WIDGET (object);
+
+ ev_page_action_widget_set_page_cache (action_widget, NULL);
}
+static void
+ev_page_action_widget_class_init (EvPageActionWidgetClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ object_class->finalize = ev_page_action_widget_finalize;
+}
static void ev_page_action_init (EvPageAction *action);
static void ev_page_action_class_init (EvPageActionClass *class);
@@ -210,7 +239,7 @@ update_page_cache (EvPageAction *page, GParamSpec *pspec, EvPageActionWidget *pr
signal_id = 0;
page_changed_cb (NULL, 0, proxy);
}
- proxy->page_cache = page_cache;
+ ev_page_action_widget_set_page_cache (proxy, page_cache);
proxy->signal_id = signal_id;
}