[gthumb] fixed crash when closing the slideshow



commit 039a62180eb38762ec75e51e568cecc4511bb990
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Tue Jul 5 00:51:43 2011 +0200

    fixed crash when closing the slideshow
    
    don't call uninhibit in the screensaver finalize function

 extensions/gstreamer_tools/gth-media-viewer-page.c |    5 +++-
 extensions/slideshow/gth-slideshow.c               |    5 +++-
 gthumb/gth-screensaver.c                           |   23 ++++++++++---------
 3 files changed, 20 insertions(+), 13 deletions(-)
---
diff --git a/extensions/gstreamer_tools/gth-media-viewer-page.c b/extensions/gstreamer_tools/gth-media-viewer-page.c
index 6bf7b84..356e0f9 100644
--- a/extensions/gstreamer_tools/gth-media-viewer-page.c
+++ b/extensions/gstreamer_tools/gth-media-viewer-page.c
@@ -1283,7 +1283,10 @@ gth_media_viewer_page_finalize (GObject *obj)
 	}
 	_g_object_unref (self->priv->icon);
 	_g_object_unref (self->priv->file_data);
-	_g_object_unref (self->priv->screensaver);
+	if (self->priv->screensaver != NULL) {
+		gth_screensaver_uninhibit (self->priv->screensaver);
+		g_object_unref (self->priv->screensaver);
+	}
 
 	G_OBJECT_CLASS (gth_media_viewer_page_parent_class)->finalize (obj);
 }
diff --git a/extensions/slideshow/gth-slideshow.c b/extensions/slideshow/gth-slideshow.c
index e894b79..fd8ee68 100644
--- a/extensions/slideshow/gth-slideshow.c
+++ b/extensions/slideshow/gth-slideshow.c
@@ -323,7 +323,10 @@ gth_slideshow_finalize (GObject *object)
 	}
 #endif
 
-	_g_object_unref (self->priv->screensaver);
+	if (self->priv->screensaver != NULL) {
+		gth_screensaver_uninhibit (self->priv->screensaver);
+		g_object_unref (self->priv->screensaver);
+	}
 
 	G_OBJECT_CLASS (parent_class)->finalize (object);
 }
diff --git a/gthumb/gth-screensaver.c b/gthumb/gth-screensaver.c
index 34fd153..a0063bd 100644
--- a/gthumb/gth-screensaver.c
+++ b/gthumb/gth-screensaver.c
@@ -51,11 +51,11 @@ gth_screensaver_finalize (GObject *object)
 
 	self = GTH_SCREENSAVER (object);
 
-	gth_screensaver_uninhibit (self);
-
 	g_free (self->priv->app_id);
-	if (self->priv->proxy != NULL)
+	if (self->priv->proxy != NULL) {
 		g_object_unref (self->priv->proxy);
+		self->priv->proxy = NULL;
+	}
 
 	G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -215,14 +215,13 @@ org_gnome_session_manager_inhibit_ready_cb (GObject      *source_object,
 	if (value == NULL) {
 		g_warning ("%s\n", error->message);
 		g_clear_error (&error);
-		return;
+	}
+	else {
+		g_variant_get (value, "(u)", &self->priv->cookie);
+		g_variant_unref (value);
 	}
 
-	g_print ("idle inhibited\n");
-
-	g_variant_get (value, "(u)", &self->priv->cookie);
-
-	g_variant_unref (value);
+	g_object_unref (self);
 }
 
 
@@ -251,6 +250,7 @@ gth_screensaver_inhibit (GthScreensaver *self,
 	if (gtk_widget_is_toplevel (toplevel_window))
 		xid = GDK_WINDOW_XID (gtk_widget_get_window (toplevel_window));
 
+	g_object_ref (self);
 	g_dbus_proxy_call (self->priv->proxy,
 			   "Inhibit",
 			   g_variant_new ("(susu)",
@@ -281,12 +281,12 @@ org_gnome_session_manager_uninhibit_ready_cb (GObject      *source_object,
 		g_clear_error (&error);
 	}
 
-	g_print ("idle uninhibited\n");
-
 	self->priv->cookie = 0;
 
 	if (value != NULL)
 		g_variant_unref (value);
+
+	g_object_unref (self);
 }
 
 
@@ -306,6 +306,7 @@ gth_screensaver_uninhibit (GthScreensaver *self)
 		return;
 	}
 
+	g_object_ref (self);
 	g_dbus_proxy_call (self->priv->proxy,
 			   "Uninhibit",
 			   g_variant_new ("(u)", self->priv->cookie),



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]