[gthumb] Fixed properties not updated after selecting a video or audio file
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] Fixed properties not updated after selecting a video or audio file
- Date: Sun, 13 Nov 2011 18:13:37 +0000 (UTC)
commit 749d9cf1f1c5177ece61d73340d9311e0bc083bd
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sun Nov 13 18:07:24 2011 +0100
Fixed properties not updated after selecting a video or audio file
...and play the media instead of setting it to paused if the viewer is visible
extensions/gstreamer_tools/gth-media-viewer-page.c | 66 ++++++++++++--------
1 files changed, 41 insertions(+), 25 deletions(-)
---
diff --git a/extensions/gstreamer_tools/gth-media-viewer-page.c b/extensions/gstreamer_tools/gth-media-viewer-page.c
index 3558441..597afcd 100644
--- a/extensions/gstreamer_tools/gth-media-viewer-page.c
+++ b/extensions/gstreamer_tools/gth-media-viewer-page.c
@@ -54,6 +54,7 @@ struct _GthMediaViewerPagePrivate {
GtkBuilder *builder;
GtkWidget *area;
GtkWidget *area_box;
+ gboolean visible;
gboolean playing;
gboolean paused;
gdouble last_volume;
@@ -1004,6 +1005,11 @@ bus_message_cb (GstBus *bus,
update_current_position_bar (self, TRUE);
+ if ((old_state == GST_STATE_NULL) && (new_state == GST_STATE_READY) && (pending_state != GST_STATE_PAUSED)) {
+ update_stream_info (self);
+ gth_viewer_page_update_sensitivity (GTH_VIEWER_PAGE (self));
+ gth_viewer_page_file_loaded (GTH_VIEWER_PAGE (self), self->priv->file_data, TRUE);
+ }
if ((old_state == GST_STATE_READY) && (new_state == GST_STATE_PAUSED)) {
update_stream_info (self);
gth_viewer_page_update_sensitivity (GTH_VIEWER_PAGE (self));
@@ -1056,25 +1062,9 @@ playbin_notify_volume_cb (GObject *playbin,
static void
-gth_media_viewer_page_real_show (GthViewerPage *base)
+create_playbin (GthMediaViewerPage *self)
{
- GthMediaViewerPage *self;
- GError *error = NULL;
- GstBus *bus;
- char *uri;
-
- self = (GthMediaViewerPage*) base;
-
- if (self->priv->merge_id != 0)
- return;
-
- self->priv->merge_id = gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager (self->priv->browser), media_viewer_ui_info, -1, &error);
- if (self->priv->merge_id == 0) {
- g_warning ("ui building failed: %s", error->message);
- g_error_free (error);
- }
-
- gth_viewer_page_focus (GTH_VIEWER_PAGE (self));
+ GstBus *bus;
if (self->priv->playbin != NULL)
return;
@@ -1088,14 +1078,36 @@ gth_media_viewer_page_real_show (GthViewerPage *base)
gst_bus_add_signal_watch (bus);
g_signal_connect (bus, "message", G_CALLBACK (bus_message_cb), self);
- if (self->priv->file_data == NULL)
- return;
+}
- uri = g_file_get_uri (self->priv->file_data->file);
- g_object_set (G_OBJECT (self->priv->playbin), "uri", uri, NULL);
- gst_element_set_state (self->priv->playbin, GST_STATE_PAUSED);
- g_free (uri);
+static void
+gth_media_viewer_page_real_show (GthViewerPage *base)
+{
+ GthMediaViewerPage *self = GTH_MEDIA_VIEWER_PAGE (base);
+ GError *error = NULL;
+
+ self->priv->visible = TRUE;
+
+ if (self->priv->merge_id == 0) {
+ self->priv->merge_id = gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager (self->priv->browser), media_viewer_ui_info, -1, &error);
+ if (self->priv->merge_id == 0) {
+ g_warning ("ui building failed: %s", error->message);
+ g_error_free (error);
+ }
+ }
+ gth_viewer_page_focus (GTH_VIEWER_PAGE (self));
+
+ create_playbin (self);
+ if (self->priv->file_data != NULL) {
+ char *uri;
+
+ uri = g_file_get_uri (self->priv->file_data->file);
+ g_object_set (G_OBJECT (self->priv->playbin), "uri", uri, NULL);
+ gst_element_set_state (self->priv->playbin, GST_STATE_PLAYING);
+
+ g_free (uri);
+ }
}
@@ -1106,6 +1118,8 @@ gth_media_viewer_page_real_hide (GthViewerPage *base)
self = (GthMediaViewerPage*) base;
+ self->priv->visible = FALSE;
+
if (self->priv->merge_id != 0) {
gtk_ui_manager_remove_ui (gth_browser_get_ui_manager (self->priv->browser), self->priv->merge_id);
self->priv->merge_id = 0;
@@ -1133,7 +1147,7 @@ set_to_paused (gpointer user_data)
self->priv->set_to_pause_id = 0;
if (self->priv->playbin != NULL)
- gst_element_set_state (self->priv->playbin, GST_STATE_PAUSED);
+ gst_element_set_state (self->priv->playbin, self->priv->visible ? GST_STATE_PLAYING : GST_STATE_READY);
return FALSE;
}
@@ -1182,6 +1196,7 @@ gth_media_viewer_page_real_view (GthViewerPage *base,
g_signal_handlers_unblock_by_func(GET_WIDGET ("position_adjustment"), position_value_changed_cb, self);
reset_player_state (self);
+ create_playbin (self);
if (self->priv->playbin == NULL)
return;
@@ -1432,6 +1447,7 @@ gth_media_viewer_page_init (GthMediaViewerPage *self)
self->priv->icon = NULL;
self->priv->cursor_visible = TRUE;
self->priv->screensaver = gth_screensaver_new (NULL);
+ self->priv->visible = FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]