Updating branch refs/heads/master
         to 6cda92561575c320a843427affcd17323a0cbd67 (commit)
       from 8f8b7754f934ea30898fa46eba09cdf12540ebf7 (commit)

commit 6cda92561575c320a843427affcd17323a0cbd67
Author: Sean Davis <smd.seanda...@gmail.com>
Date:   Wed Nov 14 13:59:48 2012 -0500

    Added gst-plugins-installer and some build fixes.

 configure.ac.in      |    1 +
 src/gst/Makefile.am  |    6 ++-
 src/gst/parole-gst.c |   89 +++++++++++++++++++++++++++++++++++++++++++++++++-
 src/main.c           |   16 ++++----
 src/parole-player.c  |    2 +
 src/parole-player.h  |    2 +
 6 files changed, 105 insertions(+), 11 deletions(-)

diff --git a/configure.ac.in b/configure.ac.in
index 76047ab..50eb9d3 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -101,6 +101,7 @@ XDT_CHECK_PACKAGE([GST], [gstreamer-0.10], 
[gstreamer_minimum_version])
 XDT_CHECK_PACKAGE([GST_BASE], [gstreamer-base-0.10], 
[gstreamer_minimum_version])
 XDT_CHECK_PACKAGE([GST_VIDEO], [gstreamer-video-0.10], 
[gstreamer_minimum_version])
 XDT_CHECK_PACKAGE([GST_INTERFACES], [gstreamer-interfaces-0.10], 
[gstreamer_minimum_version])
+XDT_CHECK_PACKAGE([GST_PBUTILS], [gstreamer-pbutils-0.10], [0.10.2])
 
 XDT_CHECK_PACKAGE([DBUS], [dbus-1], [dbus_minimum_version])
 XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [dbus_glib_minimum_version])
diff --git a/src/gst/Makefile.am b/src/gst/Makefile.am
index 30e7c08..5f2de02 100644
--- a/src/gst/Makefile.am
+++ b/src/gst/Makefile.am
@@ -25,11 +25,13 @@ libparolegst_la_CFLAGS =            \
        $(GST_VIDEO_CFLAGS)             \
         $(GST_INTERFACES_CFLAGS)       \
        $(GTHREAD_CFLAGS)               \
-       $(LIBXFCE4UI_CFLAGS)
+       $(LIBXFCE4UI_CFLAGS)            \
+       $(PBUTILS_CFLAGS)
 
 libparolegst_la_LIBADD =               \
        $(top_builddir)/src/misc/libparole.la\
-       $(top_builddir)/src/common/libparolecommon.la
+       $(top_builddir)/src/common/libparolecommon.la\
+       $(GST_PBUTILS_LIBS)
 
 parole_glib_enum_headers =             \
        parole-gst.h
diff --git a/src/gst/parole-gst.c b/src/gst/parole-gst.c
index ef1a3a8..bc8dee1 100644
--- a/src/gst/parole-gst.c
+++ b/src/gst/parole-gst.c
@@ -30,6 +30,8 @@
 
 #include <gst/interfaces/xoverlay.h>
 #include <gst/interfaces/navigation.h>
+#include <gst/pbutils/missing-plugins.h>
+#include <gst/pbutils/install-plugins.h>
 
 #include <gst/video/video.h>
 
@@ -1119,10 +1121,76 @@ parole_gst_application_message (ParoleGst *gst, 
GstMessage *msg)
     }
 }
 
+/**
+ * parole_gst_install_plugins_result_func:
+ * @result    : %GST_INSTALL_PLUGINS_SUCCESS (0) if successful.
+ * @user_data : gst instance passed as user_data for callback function.
+ *
+ * Callback function for when asynchronous codec installation finishes.  Update
+ * the gstreamer plugin registry and restart playback.
+ **/
+static void
+parole_gst_install_plugins_result_func(GstInstallPluginsReturn result, 
gpointer user_data)
+{
+    switch (result)
+    {
+        case GST_INSTALL_PLUGINS_SUCCESS:
+            g_debug ("Finished plugin install.\n");
+            gst_update_registry();
+            parole_gst_resume(PAROLE_GST(user_data));
+            break;
+        case GST_INSTALL_PLUGINS_NOT_FOUND:
+            g_debug ("An appropriate installation candidate could not be 
found.\n");
+            break;
+        case GST_INSTALL_PLUGINS_USER_ABORT:
+            g_debug ("User aborted plugin install.\n");
+            break;
+        default:
+            g_debug ("Plugin installation failed with code %i\n", result);
+            break;
+    }
+}
+
+static GtkDialog*
+parole_gst_missing_codec_dialog(ParoleGst *gst, GstMessage *msg)
+{
+    GtkMessageDialog *dialog;
+    gchar*     desc;
+                                                    
+    desc = gst_missing_plugin_message_get_description(msg);
+    
+    dialog = GTK_MESSAGE_DIALOG(gtk_message_dialog_new_with_markup(
+                            NULL,
+                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                            GTK_MESSAGE_QUESTION,
+                            GTK_BUTTONS_NONE,
+                            "<b><big>%s</big></b>", 
+                            _("Additional software is required.")
+                            ));
+                            
+    gtk_dialog_add_buttons( GTK_DIALOG(dialog), 
+                            _("Don't Install"),
+                            GTK_RESPONSE_REJECT,
+                            _("Install"), 
+                            GTK_RESPONSE_ACCEPT,
+                            NULL );
+    
+    gtk_message_dialog_format_secondary_markup(dialog,
+                                             "Parole needs <b>%s</b> to play 
this file.\n"
+                                             "It can be installed 
automatically.",
+                                             desc);
+    
+    return GTK_DIALOG(dialog);
+}
+
 static gboolean
 parole_gst_bus_event (GstBus *bus, GstMessage *msg, gpointer data)
 {
-    ParoleGst *gst;
+    ParoleGst                *gst;
+    GtkDialog                *dialog;
+    gchar*                    details[2];
+    GstInstallPluginsContext *ctx;
+    gint response;
     
     gst = PAROLE_GST (data);
 
@@ -1220,6 +1288,25 @@ parole_gst_bus_event (GstBus *bus, GstMessage *msg, 
gpointer data)
            }
            break;
        case GST_MESSAGE_ELEMENT:
+           if (gst_is_missing_plugin_message(msg))
+           {
+               g_debug("Missing plugin\n");
+               parole_gst_stop(gst);
+               dialog = parole_gst_missing_codec_dialog(gst, msg);
+               response = gtk_dialog_run(dialog);
+               if ( response == GTK_RESPONSE_ACCEPT )
+               {
+                    gtk_widget_destroy(GTK_WIDGET(dialog));
+                    details[0] = 
gst_missing_plugin_message_get_installer_detail(msg);
+                    details[1] = NULL;
+                    ctx = gst_install_plugins_context_new();
+                    gst_install_plugins_async(details, ctx, 
parole_gst_install_plugins_result_func, gst);
+                    
+                    gst_install_plugins_context_free(ctx);
+               }
+               else if ( response == GTK_RESPONSE_REJECT )
+                   gtk_widget_destroy(GTK_WIDGET(dialog));
+        }
            break;
        case GST_MESSAGE_WARNING:
            break;
diff --git a/src/main.c b/src/main.c
index 769d50a..2195dff 100644
--- a/src/main.c
+++ b/src/main.c
@@ -264,14 +264,6 @@ int main (int argc, char **argv)
        gboolean enqueue = FALSE;
     gchar    *client_id = NULL;
     
-    /* initialize xfconf */
-    if (!xfconf_init (&error))
-    {
-        g_critical ("Failed to initialize Xfconf: %s", error->message);
-        g_error_free (error);
-        return EXIT_FAILURE;
-    }
-    
     /* Command-line options */
     GOptionEntry option_entries[] = 
     {
@@ -297,6 +289,14 @@ int main (int argc, char **argv)
         { NULL, },
     };
     
+        /* initialize xfconf */
+    if (!xfconf_init (&error))
+    {
+        g_critical ("Failed to initialize Xfconf: %s", error->message);
+        g_error_free (error);
+        return EXIT_FAILURE;
+    }
+    
        XInitThreads();
 
     xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
diff --git a/src/parole-player.c b/src/parole-player.c
index 7ed6156..9afba68 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -158,6 +158,8 @@ gboolean    parole_player_delete_event_cb           
(GtkWidget *widget,
 
 void           parole_player_show_hide_playlist        (GtkWidget *widget,
                                                         ParolePlayer *player);
+                                                        
+void        parole_player_reset_controls (ParolePlayer *player, gboolean 
fullscreen);
 
 /*Menu items callbacks*/
 void            parole_player_menu_open_location_cb     (GtkWidget *widget, 
diff --git a/src/parole-player.h b/src/parole-player.h
index a663e01..54125b2 100644
--- a/src/parole-player.h
+++ b/src/parole-player.h
@@ -63,6 +63,8 @@ void                           parole_player_play_uri_disc   
(ParolePlayer *player,
 
 void                            parole_player_terminate       (ParolePlayer 
*player);
 
+void                parole_player_embedded (ParolePlayer *player);
+
 void                            parole_player_full_screen     (ParolePlayer 
*player, 
                                                                gboolean 
fullscreen);
 
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to