[Xfce4-commits] <parole:master> Provide an option to Enable/Disable resetting X screen saver counter while playing movies

Ali Abdallah noreply at xfce.org
Thu Dec 10 14:24:01 CET 2009


Updating branch refs/heads/master
         to b80be92f7a47a83042cebbbd59a32064b39758bd (commit)
       from 0dc861b3aed8c897be40c392723085ef2ffb8b47 (commit)

commit b80be92f7a47a83042cebbbd59a32064b39758bd
Author: Ali Abdallah <aliov at xfce.org>
Date:   Thu Dec 10 14:18:56 2009 +0100

    Provide an option to Enable/Disable resetting X screen saver counter while playing movies
    
    Ideally this option shouldn't be exposed to the user, and the player should always be
    resetting the X screen saver counter, but for unknown reason xrandr is dimming the screen
    when calling XResetScreenSaver.

 common/parole-screensaver.c        |    8 ++++-
 data/interfaces/parole-settings.ui |   41 ++++++++++++++++++++++++-
 gst/parole-gst.c                   |    7 ++++
 gst/parole-gst.h                   |    2 +
 src/parole-conf-dialog.c           |   18 +++++++++++
 src/parole-conf.c                  |    9 +++++-
 src/parole-player.c                |   57 ++++++++++++++++++++++++++++++------
 src/parole-utils.c                 |    5 ++-
 8 files changed, 132 insertions(+), 15 deletions(-)

diff --git a/common/parole-screensaver.c b/common/parole-screensaver.c
index f927238..b7c44bf 100644
--- a/common/parole-screensaver.c
+++ b/common/parole-screensaver.c
@@ -51,6 +51,8 @@ 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);
 }
@@ -90,8 +92,10 @@ parole_screen_saver_new (void)
 
 void parole_screen_saver_inhibit (ParoleScreenSaver *saver)
 {
+    g_return_if_fail (PAROLE_IS_SCREENSAVER (saver));
+    
     parole_screen_saver_uninhibit (saver);
-	
+
     saver->priv->reset_id = g_timeout_add_seconds (RESET_SCREENSAVER_TIMEOUT, 
 						   (GSourceFunc) parole_screen_saver_reset_timeout,
 						   NULL);
@@ -99,6 +103,8 @@ void parole_screen_saver_inhibit (ParoleScreenSaver *saver)
 
 void parole_screen_saver_uninhibit (ParoleScreenSaver *saver)
 {
+    g_return_if_fail (PAROLE_IS_SCREENSAVER (saver));
+    
     if ( saver->priv->reset_id != 0 )
     {
 	g_source_remove (saver->priv->reset_id);
diff --git a/data/interfaces/parole-settings.ui b/data/interfaces/parole-settings.ui
index 7a02201..b9b39e0 100644
--- a/data/interfaces/parole-settings.ui
+++ b/data/interfaces/parole-settings.ui
@@ -67,6 +67,7 @@
                               <object class="GtkHScale" id="brightness">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
+                                <property name="update_policy">discontinuous</property>
                                 <property name="draw_value">False</property>
                                 <signal name="value_changed" handler="brightness_value_changed_cb"/>
                               </object>
@@ -79,6 +80,7 @@
                               <object class="GtkHScale" id="contrast">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
+                                <property name="update_policy">discontinuous</property>
                                 <property name="draw_value">False</property>
                                 <signal name="value_changed" handler="contrast_value_changed_cb"/>
                               </object>
@@ -117,6 +119,7 @@
                               <object class="GtkHScale" id="hue">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
+                                <property name="update_policy">discontinuous</property>
                                 <property name="draw_value">False</property>
                                 <signal name="value_changed" handler="hue_value_changed_cb"/>
                               </object>
@@ -131,6 +134,7 @@
                               <object class="GtkHScale" id="saturation">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
+                                <property name="update_policy">discontinuous</property>
                                 <property name="draw_value">False</property>
                                 <signal name="value_changed" handler="saturation_value_changed_cb"/>
                               </object>
@@ -187,6 +191,39 @@
               </packing>
             </child>
             <child>
+              <object class="GtkFrame" id="frame2">
+                <property name="visible">True</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">none</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment4">
+                    <property name="visible">True</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <object class="GtkCheckButton" id="reset-saver">
+                        <property name="label" translatable="yes">Disable screen saver while playing movies</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="parole_conf_dialog_reset_saver_changed_cb"/>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child type="label">
+                  <object class="GtkLabel" id="label12">
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes"><b>Video</b></property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
               <object class="GtkFrame" id="frame1">
                 <property name="visible">True</property>
                 <property name="label_xalign">0</property>
@@ -262,7 +299,7 @@
                 </child>
               </object>
               <packing>
-                <property name="position">1</property>
+                <property name="position">2</property>
               </packing>
             </child>
             <child>
@@ -361,7 +398,7 @@
                 </child>
               </object>
               <packing>
-                <property name="position">2</property>
+                <property name="position">3</property>
               </packing>
             </child>
           </object>
diff --git a/gst/parole-gst.c b/gst/parole-gst.c
index 84e2a96..35db181 100644
--- a/gst/parole-gst.c
+++ b/gst/parole-gst.c
@@ -2195,3 +2195,10 @@ parole_gst_set_cursor_visible (ParoleGst *gst, gboolean visible)
     else
 	parole_window_invisible_cursor (GTK_WIDGET (gst)->window);
 }
+
+const ParoleStream     *parole_gst_get_stream 		(ParoleGst *gst)
+{
+    g_return_val_if_fail (PAROLE_IS_GST (gst), NULL);
+    
+    return gst->priv->stream;
+}
diff --git a/gst/parole-gst.h b/gst/parole-gst.h
index 52c4eb9..bf1e8d1 100644
--- a/gst/parole-gst.h
+++ b/gst/parole-gst.h
@@ -152,6 +152,8 @@ gboolean		parole_gst_get_is_xvimage_sink  (ParoleGst *gst);
 
 void 			parole_gst_set_cursor_visible 	(ParoleGst *gst, 
 							 gboolean visible);
+
+const ParoleStream     *parole_gst_get_stream 		(ParoleGst *gst);
 							 
 G_END_DECLS
 
diff --git a/src/parole-conf-dialog.c b/src/parole-conf-dialog.c
index e6db9b6..81ba185 100644
--- a/src/parole-conf-dialog.c
+++ b/src/parole-conf-dialog.c
@@ -46,6 +46,9 @@ void		parole_conf_dialog_response_cb		 	(GtkDialog *dialog,
 void		parole_conf_dialog_enable_vis_changed_cb 	(GtkToggleButton *widget,
 								 ParoleConfDialog *self);
 
+void		parole_conf_dialog_reset_saver_changed_cb	(GtkToggleButton *widget,
+								 ParoleConfDialog *self);
+
 void		parole_conf_dialog_vis_plugin_changed_cb 	(GtkComboBox *widget,
 								 ParoleConfDialog *self);
 
@@ -197,6 +200,13 @@ void parole_conf_dialog_vis_plugin_changed_cb (GtkComboBox *widget,  ParoleConfD
     g_free (active);
 }
 
+void parole_conf_dialog_reset_saver_changed_cb (GtkToggleButton *widget, ParoleConfDialog *self)
+{
+    g_object_set (G_OBJECT (self->priv->conf),
+		  "reset-saver", gtk_toggle_button_get_active (widget),
+		  NULL);
+}
+
 void parole_conf_dialog_font_set_cb (GtkFontButton *button, ParoleConfDialog *self)
 {
     g_object_set (G_OBJECT (self->priv->conf), 
@@ -341,6 +351,7 @@ void parole_conf_dialog_open (ParoleConfDialog *self, GtkWidget *parent)
     GtkWidget  *dialog;
     GtkWidget  *combox;
     gboolean    with_display;
+    gboolean    reset_saver;
     
     builder = parole_builder_new_from_string (parole_settings_ui, parole_settings_ui_length);
     
@@ -362,6 +373,13 @@ void parole_conf_dialog_open (ParoleConfDialog *self, GtkWidget *parent)
 
     parole_conf_dialog_set_defaults (self);
     
+    g_object_get (G_OBJECT (self->priv->conf),
+		  "reset-saver", &reset_saver,
+		  NULL);
+    
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "reset-saver")),
+				  reset_saver);
+    
     with_display = parole_gst_get_is_xvimage_sink (PAROLE_GST (parole_gst_get ()));
     
     if ( !with_display )
diff --git a/src/parole-conf.c b/src/parole-conf.c
index 21136c4..04bfce4 100644
--- a/src/parole-conf.c
+++ b/src/parole-conf.c
@@ -52,6 +52,7 @@ enum
     PROP_0,
     PROP_VIS_ENABLED,
     PROP_VIS_NAME,
+    PROP_DISABLE_SCREEN_SAVER,
     PROP_SUBTITLE_ENABLED,
     PROP_SUBTITLE_FONT,
     PROP_SUBTITLE_ENCODING,
@@ -213,6 +214,13 @@ parole_conf_class_init (ParoleConfClass *klass)
                                                            G_PARAM_READWRITE));
 
     g_object_class_install_property (object_class,
+                                     PROP_DISABLE_SCREEN_SAVER,
+                                     g_param_spec_boolean ("reset-saver",
+                                                           NULL, NULL,
+                                                           TRUE,
+                                                           G_PARAM_READWRITE));
+
+    g_object_class_install_property (object_class,
                                      PROP_VIS_NAME,
                                      g_param_spec_string  ("vis-name",
                                                            NULL, NULL,
@@ -389,7 +397,6 @@ parole_conf_init (ParoleConf *conf)
     conf->priv->values = g_new0 (GValue, N_PROP);
     
     parole_conf_load (conf);
-    
 }
 
 ParoleConf *
diff --git a/src/parole-player.c b/src/parole-player.c
index 400b2fd..48c7e01 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -699,21 +699,40 @@ parole_player_play_prev (ParolePlayer *player)
 }
 
 static void
-parole_player_media_state_cb (ParoleGst *gst, const ParoleStream *stream, ParoleMediaState state, ParolePlayer *player)
+parole_player_reset_saver_changed (ParolePlayer *player, const ParoleStream *stream)
 {
-    gboolean has_video;
+    gboolean reset_saver;
     
-    PAROLE_DEBUG_ENUM ("State callback", state, GST_ENUM_TYPE_MEDIA_STATE);
+    TRACE ("Start");
     
-    g_object_get (G_OBJECT (stream),
-		  "has-video", &has_video,
+    g_object_get (G_OBJECT (player->priv->conf),
+		  "reset-saver", &reset_saver,
 		  NULL);
-    
-    if ( state == PAROLE_MEDIA_STATE_PLAYING && has_video )
-	parole_screen_saver_inhibit (player->priv->screen_saver);
+		  
+    if ( !reset_saver )
+	parole_screen_saver_uninhibit (player->priv->screen_saver);
+    else if ( player->priv->state ==  PAROLE_MEDIA_STATE_PLAYING )
+    {
+	gboolean has_video;
+	
+	g_object_get (G_OBJECT (stream),
+		      "has-video", &has_video,
+		      NULL);
+		      
+	if ( has_video )
+	    parole_screen_saver_inhibit (player->priv->screen_saver);
+    }
     else
 	parole_screen_saver_uninhibit (player->priv->screen_saver);
+}
+
+static void
+parole_player_media_state_cb (ParoleGst *gst, const ParoleStream *stream, ParoleMediaState state, ParolePlayer *player)
+{
+    PAROLE_DEBUG_ENUM ("State callback", state, GST_ENUM_TYPE_MEDIA_STATE);
 
+    parole_player_reset_saver_changed (player, stream);
+    
     if ( state == PAROLE_MEDIA_STATE_PLAYING )
     {
 	parole_player_playing (player, stream);
@@ -1339,11 +1358,11 @@ parole_player_finalize (GObject *object)
     
     dbus_g_connection_unref (player->priv->bus);
     
+    g_object_unref (player->priv->conf);
     g_object_unref (player->priv->video_filter);
     g_object_unref (player->priv->status);
     g_object_unref (player->priv->disc);
     g_object_unref (player->priv->disc_menu);
-    g_object_unref (player->priv->conf);
     g_object_unref (player->priv->screen_saver);
     
 #ifdef HAVE_XF86_KEYSYM
@@ -1367,6 +1386,22 @@ parole_player_class_init (ParolePlayerClass *klass)
     parole_player_dbus_class_init (klass);
 }
 
+/**
+ * Configuration changed regarding
+ * whether to Reset the screen saver counter
+ * while playing movies or not.
+ * 
+ */
+static void
+parole_player_reset_saver_changed_cb (ParolePlayer *player)
+{
+    const ParoleStream *stream;
+    
+    stream = parole_gst_get_stream (PAROLE_GST (player->priv->gst));
+    TRACE ("Reset saver configuration changed");
+    parole_player_reset_saver_changed (player, stream);
+}
+
 static gboolean
 parole_player_handle_key_press (GdkEventKey *ev, ParolePlayer *player)
 {
@@ -1713,6 +1748,10 @@ parole_player_init (ParolePlayer *player)
     builder = parole_builder_get_main_interface ();
     
     player->priv->conf = parole_conf_new ();
+    
+    g_signal_connect_swapped (player->priv->conf, "notify::reset-saver",
+			      G_CALLBACK (parole_player_reset_saver_changed_cb), player);
+    
     player->priv->session = parole_session_get ();
     
     g_signal_connect_swapped (player->priv->session, "die",
diff --git a/src/parole-utils.c b/src/parole-utils.c
index 826b2a3..d7a0b76 100644
--- a/src/parole-utils.c
+++ b/src/parole-utils.c
@@ -245,7 +245,7 @@ parole_get_subtitle_in_dir (const gchar *dir_path, const gchar *file)
     
     for ( i = 0; i < G_N_ELEMENTS (subtitle_ext); i++)
     {
-	sub_path = g_strdup_printf ("%s/%s.%s", dir_path, file_no_ext, subtitle_ext[i]);
+	sub_path = g_strdup_printf ("%s%c%s.%s", dir_path, G_DIR_SEPARATOR, file_no_ext, subtitle_ext[i]);
 	
 	if ( g_file_test (sub_path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR ) )
 	    break;
@@ -253,6 +253,7 @@ parole_get_subtitle_in_dir (const gchar *dir_path, const gchar *file)
 	g_free (sub_path);
 	sub_path = NULL;
     }
+
     g_free (file_no_ext);
     
     return sub_path;
@@ -380,7 +381,7 @@ void parole_get_media_files (GtkFileFilter *filter, const gchar *path,
 	
 	while ( (name = g_dir_read_name (dir)) )
 	{
-	    gchar *path_internal = g_strdup_printf ("%s/%s", path, name);
+	    gchar *path_internal = g_build_filename (path, name, NULL);
 	    if ( g_file_test (path_internal, G_FILE_TEST_IS_DIR) && recursive)
 	    {
 		parole_get_media_files (filter, path_internal, TRUE, list);



More information about the Xfce4-commits mailing list