[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