[Xfce4-commits] <parole:master> Fix screensaver bug (7407). Thanks Tekk

Sean Davis noreply at xfce.org
Wed Dec 19 11:46:01 CET 2012


Updating branch refs/heads/master
         to 6d836941fb5c382e4338fd00bf993ffbd6959e89 (commit)
       from f59afa18f12be9aead59324f50f2e91d832b17c6 (commit)

commit 6d836941fb5c382e4338fd00bf993ffbd6959e89
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Wed Dec 19 05:44:05 2012 -0500

    Fix screensaver bug (7407).  Thanks Tekk

 src/common/parole-screensaver.c |   51 +++++++++++++--------------------------
 src/common/parole-screensaver.h |    8 ++----
 src/parole-player.c             |    8 +++---
 3 files changed, 24 insertions(+), 43 deletions(-)

diff --git a/src/common/parole-screensaver.c b/src/common/parole-screensaver.c
index 1f35fff..880785e 100644
--- a/src/common/parole-screensaver.c
+++ b/src/common/parole-screensaver.c
@@ -37,23 +37,12 @@
 #define PAROLE_SCREEN_SAVER_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_SCREENSAVER, ParoleScreenSaverPrivate))
 
-struct ParoleScreenSaverPrivate
-{
-    gulong reset_id;
-};
-
 G_DEFINE_TYPE (ParoleScreenSaver, parole_screen_saver, G_TYPE_OBJECT)
 
 
 static void
 parole_screen_saver_finalize (GObject *object)
 {
-    ParoleScreenSaver *saver;
-
-    saver = PAROLE_SCREEN_SAVER (object);
-    
-    parole_screen_saver_uninhibit (saver);
-
     G_OBJECT_CLASS (parole_screen_saver_parent_class)->finalize (object);
 }
 
@@ -64,22 +53,12 @@ parole_screen_saver_class_init (ParoleScreenSaverClass *klass)
 
     object_class->finalize = parole_screen_saver_finalize;
 
-    g_type_class_add_private (klass, sizeof (ParoleScreenSaverPrivate));
 }
 
 static void
 parole_screen_saver_init (ParoleScreenSaver *saver)
 {
-    saver->priv = PAROLE_SCREEN_SAVER_GET_PRIVATE (saver);
-    
-    saver->priv->reset_id = 0;
-}
-
-static gboolean
-parole_screen_saver_reset_timeout (gpointer data)
-{
-    XResetScreenSaver (GDK_DISPLAY ());
-    return TRUE;
+    return;
 }
 
 ParoleScreenSaver *
@@ -90,24 +69,28 @@ parole_screen_saver_new (void)
     return saver;
 }
 
-void parole_screen_saver_inhibit (ParoleScreenSaver *saver)
+void parole_screen_saver_inhibit (ParoleScreenSaver *saver, GtkWindow *window)
 {
-    g_return_if_fail (PAROLE_IS_SCREENSAVER (saver));
+    gchar *cmd;
     
-    parole_screen_saver_uninhibit (saver);
+    g_return_if_fail (PAROLE_IS_SCREENSAVER (saver));
 
-    saver->priv->reset_id = g_timeout_add_seconds (RESET_SCREENSAVER_TIMEOUT, 
-						   (GSourceFunc) parole_screen_saver_reset_timeout,
-						   NULL);
+    cmd = g_strdup_printf("xdg-screensaver suspend %d", (int)GDK_WINDOW_XID(GDK_WINDOW(GTK_WIDGET(window)->window)));
+    //cmd = g_strdup_printf("xdg-screensaver suspend %d", (int)GDK_WINDOW_XID(GDK_WINDOW( gtk_widget_get_parent_window(GTK_WIDGET(window)) )));
+    system(cmd);
+
+    g_free(cmd);
 }
 
-void parole_screen_saver_uninhibit (ParoleScreenSaver *saver)
+void parole_screen_saver_uninhibit (ParoleScreenSaver *saver, GtkWindow *window)
 {
+    gchar *cmd;
+    
     g_return_if_fail (PAROLE_IS_SCREENSAVER (saver));
     
-    if ( saver->priv->reset_id != 0 )
-    {
-	g_source_remove (saver->priv->reset_id);
-	saver->priv->reset_id = 0;
-    }
+    cmd = g_strdup_printf("xdg-screensaver resume %d", (int)GDK_WINDOW_XID(GDK_WINDOW(GTK_WIDGET(window)->window)));
+    //cmd = g_strdup_printf("xdg-screensaver resume %d", (int)GDK_WINDOW_XID(GDK_WINDOW( gtk_widget_get_parent_window(GTK_WIDGET(window)) )));
+    system(cmd);
+    
+    g_free(cmd);
 }
diff --git a/src/common/parole-screensaver.h b/src/common/parole-screensaver.h
index 8fe6f1f..c4188c0 100644
--- a/src/common/parole-screensaver.h
+++ b/src/common/parole-screensaver.h
@@ -22,6 +22,7 @@
 #define __PAROLE_SCREEN_SAVER_H
 
 #include <glib-object.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
@@ -29,12 +30,9 @@ G_BEGIN_DECLS
 #define PAROLE_SCREEN_SAVER(o)         (G_TYPE_CHECK_INSTANCE_CAST ((o), PAROLE_TYPE_SCREENSAVER, ParoleScreenSaver))
 #define PAROLE_IS_SCREENSAVER(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), PAROLE_TYPE_SCREENSAVER))
 
-typedef struct ParoleScreenSaverPrivate ParoleScreenSaverPrivate;
-
 typedef struct
 {
     GObject         		  parent;
-    ParoleScreenSaverPrivate     *priv;
     
 } ParoleScreenSaver;
 
@@ -47,9 +45,9 @@ typedef struct
 GType        			  parole_screen_saver_get_type        (void) G_GNUC_CONST;
 ParoleScreenSaver       	 *parole_screen_saver_new             (void);
 
-void				  parole_screen_saver_inhibit	      (ParoleScreenSaver *saver);
+void				  parole_screen_saver_inhibit	      (ParoleScreenSaver *saver, GtkWindow *window);
 
-void				  parole_screen_saver_uninhibit	      (ParoleScreenSaver *saver);
+void				  parole_screen_saver_uninhibit	      (ParoleScreenSaver *saver, GtkWindow *window);
 
 G_END_DECLS
 
diff --git a/src/parole-player.c b/src/parole-player.c
index 49dd235..6d6b651 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -1489,7 +1489,7 @@ parole_player_reset_saver_changed (ParolePlayer *player, const ParoleStream *str
 		  NULL);
 		  
     if ( !reset_saver )
-	parole_screen_saver_uninhibit (player->priv->screen_saver);
+	parole_screen_saver_uninhibit (player->priv->screen_saver, GTK_WINDOW (player->priv->window));
     else if ( player->priv->state ==  PAROLE_STATE_PLAYING )
     {
 	gboolean has_video;
@@ -1500,11 +1500,11 @@ parole_player_reset_saver_changed (ParolePlayer *player, const ParoleStream *str
 		      
 	if ( has_video )
 	{
-	    parole_screen_saver_inhibit (player->priv->screen_saver);
+	    parole_screen_saver_inhibit (player->priv->screen_saver, GTK_WINDOW (player->priv->window));
 	}
     }
     else
-	parole_screen_saver_uninhibit (player->priv->screen_saver);
+	parole_screen_saver_uninhibit (player->priv->screen_saver, GTK_WINDOW (player->priv->window));
 }
 
 static void
@@ -1646,7 +1646,7 @@ static void
 parole_player_error_cb (ParoleGst *gst, const gchar *error, ParolePlayer *player)
 {
     parole_dialog_error (GTK_WINDOW (player->priv->window), _("GStreamer backend error"), error);
-    parole_screen_saver_uninhibit (player->priv->screen_saver);
+    parole_screen_saver_uninhibit (player->priv->screen_saver, GTK_WINDOW (player->priv->window));
     parole_player_stopped (player);
 }
 


More information about the Xfce4-commits mailing list