[gthumb] media viewer: save and restore the volume level



commit b15c33c32676eff56d900336b9559f167718a067
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Tue May 15 23:42:04 2012 +0200

    media viewer: save and restore the volume level
    
    [new feature]

 ...org.gnome.gthumb.gstreamer-tools.gschema.xml.in |    3 ++
 extensions/gstreamer_tools/gth-media-viewer-page.c |   28 +++++++++++++++++++-
 extensions/gstreamer_tools/preferences.h           |    1 +
 3 files changed, 31 insertions(+), 1 deletions(-)
---
diff --git a/data/org.gnome.gthumb.gstreamer-tools.gschema.xml.in b/data/org.gnome.gthumb.gstreamer-tools.gschema.xml.in
index bb8438b..7626765 100644
--- a/data/org.gnome.gthumb.gstreamer-tools.gschema.xml.in
+++ b/data/org.gnome.gthumb.gstreamer-tools.gschema.xml.in
@@ -22,6 +22,9 @@
     <key name="screenshot-location" type="s">
       <default>'file://~'</default>
     </key>
+    <key name="volume" type="i">
+      <default>100</default>
+    </key>
   </schema>
 
 </schemalist>
diff --git a/extensions/gstreamer_tools/gth-media-viewer-page.c b/extensions/gstreamer_tools/gth-media-viewer-page.c
index 4a61775..c970566 100644
--- a/extensions/gstreamer_tools/gth-media-viewer-page.c
+++ b/extensions/gstreamer_tools/gth-media-viewer-page.c
@@ -29,6 +29,7 @@
 #include <extensions/gstreamer_utils/gstreamer-utils.h>
 #include "actions.h"
 #include "gth-media-viewer-page.h"
+#include "preferences.h"
 
 
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
@@ -845,6 +846,20 @@ remove_fullscreen_toolbar (GthMediaViewerPage *self)
 
 
 static void
+save_volume (GthMediaViewerPage *self)
+{
+	GSettings *settings;
+	double     volume;
+
+	settings = g_settings_new (GTHUMB_GSTREAMER_TOOLS_SCHEMA);
+	g_object_get (self->priv->playbin, "volume", &volume, NULL);
+	g_settings_set_int (settings, PREF_GSTREAMER_TOOLS_VOLUME, (int) (volume * 100.0));
+
+	g_object_unref (settings);
+}
+
+
+static void
 gth_media_viewer_page_real_deactivate (GthViewerPage *base)
 {
 	GthMediaViewerPage *self;
@@ -862,6 +877,7 @@ gth_media_viewer_page_real_deactivate (GthViewerPage *base)
         }
 
 	if (self->priv->playbin != NULL) {
+		save_volume (self);
 		gst_element_set_state (self->priv->playbin, GST_STATE_NULL);
 		gst_object_unref (GST_OBJECT (self->priv->playbin));
 		self->priv->playbin = NULL;
@@ -1069,12 +1085,21 @@ playbin_notify_volume_cb (GObject    *playbin,
 static void
 create_playbin (GthMediaViewerPage *self)
 {
-	GstBus *bus;
+	GSettings *settings;
+	GstBus    *bus;
 
 	if (self->priv->playbin != NULL)
 		return;
 
 	self->priv->playbin = gst_element_factory_make ("playbin", "playbin");
+
+	settings = g_settings_new (GTHUMB_GSTREAMER_TOOLS_SCHEMA);
+	g_object_set (self->priv->playbin,
+		      "volume",
+		      (double) g_settings_get_int (settings, PREF_GSTREAMER_TOOLS_VOLUME) / 100.0,
+		      NULL);
+	g_object_unref (settings);
+
 	g_signal_connect (self->priv->playbin, "notify::volume", G_CALLBACK (playbin_notify_volume_cb), self);
 
 	bus = gst_pipeline_get_bus (GST_PIPELINE (self->priv->playbin));
@@ -1397,6 +1422,7 @@ gth_media_viewer_page_finalize (GObject *obj)
         }
 
 	if (self->priv->playbin != NULL) {
+		save_volume (self);
 		gst_element_set_state (self->priv->playbin, GST_STATE_NULL);
 		gst_object_unref (GST_OBJECT (self->priv->playbin));
 		self->priv->playbin = NULL;
diff --git a/extensions/gstreamer_tools/preferences.h b/extensions/gstreamer_tools/preferences.h
index e83f34d..5a0b641 100644
--- a/extensions/gstreamer_tools/preferences.h
+++ b/extensions/gstreamer_tools/preferences.h
@@ -29,5 +29,6 @@
 /* keys */
 
 #define  PREF_GSTREAMER_TOOLS_SCREESHOT_LOCATION "screenshot-location"
+#define  PREF_GSTREAMER_TOOLS_VOLUME             "volume"
 
 #endif /* PREFERENCES_H */



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