[vlc-commits] dbus: Implement the MPRIS Raise method for the Qt interface

Jean-Baptiste Kempf git at videolan.org
Fri Oct 7 01:15:40 CEST 2011


vlc | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | Fri Oct  7 01:00:54 2011 +0200| [0d3c77678763f97f6ebe5aaa3fe63ef60cc679b0] | committer: Jean-Baptiste Kempf

dbus: Implement the MPRIS Raise method for the Qt interface

* Addd the org.mpris.MediaPlayer2.Raise method in the dbus control module
* Define the "intf-show" variable in libvlc
* Raise the Qt main window when the value of "intf-show" changes

Heavily based on the code from Mirsal, modified by me

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0d3c77678763f97f6ebe5aaa3fe63ef60cc679b0
---

 modules/control/dbus/dbus_introspect.h |    1 +
 modules/control/dbus/dbus_root.c       |    8 ++++++++
 modules/gui/qt4/main_interface.cpp     |   30 ++++++++++++++++++++++++++++++
 modules/gui/qt4/main_interface.hpp     |    3 +++
 src/libvlc.c                           |    3 +++
 5 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/modules/control/dbus/dbus_introspect.h b/modules/control/dbus/dbus_introspect.h
index bfdc98e..ff84c38 100644
--- a/modules/control/dbus/dbus_introspect.h
+++ b/modules/control/dbus/dbus_introspect.h
@@ -65,6 +65,7 @@ static const char* psz_introspection_xml =
 "    <property name=\"CanQuit\" type=\"b\" access=\"read\" />\n"
 "    <property name=\"CanRaise\" type=\"b\" access=\"read\" />\n"
 "    <method name=\"Quit\" />\n"
+"    <method name=\"Raise\" />\n"
 "  </interface>\n"
 "  <interface name=\"org.mpris.MediaPlayer2.Player\">\n"
 "    <property name=\"Metadata\" type=\"a{sv}\" access=\"read\" />\n"
diff --git a/modules/control/dbus/dbus_root.c b/modules/control/dbus/dbus_root.c
index 75b43cb..52a22e9 100644
--- a/modules/control/dbus/dbus_root.c
+++ b/modules/control/dbus/dbus_root.c
@@ -219,6 +219,13 @@ DBUS_METHOD( Quit )
     REPLY_SEND;
 }
 
+DBUS_METHOD( Raise )
+{/* shows vlc's main window */
+    REPLY_INIT;
+    var_ToggleBool( INTF->p_libvlc, "intf-show" );
+    REPLY_SEND;
+}
+
 #define PROPERTY_MAPPING_BEGIN if( 0 ) {}
 #define PROPERTY_FUNC( interface, property, function ) \
     else if( !strcmp( psz_interface_name, interface ) && \
@@ -277,6 +284,7 @@ handle_root ( DBusConnection *p_conn, DBusMessage *p_from, void *p_this )
     METHOD_MAPPING_BEGIN
     METHOD_FUNC( DBUS_INTERFACE_PROPERTIES, "Get",          GetProperty );
     METHOD_FUNC( DBUS_MPRIS_ROOT_INTERFACE, "Quit",         Quit );
+    METHOD_FUNC( DBUS_MPRIS_ROOT_INTERFACE, "Raise",        Raise );
     METHOD_MAPPING_END
 }
 
diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp
index 1c29488..3b46fc4 100644
--- a/modules/gui/qt4/main_interface.cpp
+++ b/modules/gui/qt4/main_interface.cpp
@@ -70,6 +70,9 @@ static int IntfShowCB( vlc_object_t *p_this, const char *psz_variable,
                        vlc_value_t old_val, vlc_value_t new_val, void *param );
 static int IntfBossCB( vlc_object_t *p_this, const char *psz_variable,
                        vlc_value_t old_val, vlc_value_t new_val, void *param );
+static int IntfRaiseMainCB( vlc_object_t *p_this, const char *psz_variable,
+                           vlc_value_t old_val, vlc_value_t new_val,
+                           void *param );
 
 MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
 {
@@ -221,6 +224,7 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
     CONNECT( this, askToQuit(), THEDP, quit() );
 
     CONNECT( this, askBoss(), this, setBoss() );
+    CONNECT( this, askRaise(), this, setRaise() );
 
     /** END of CONNECTS**/
 
@@ -230,6 +234,7 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
      ************/
     var_AddCallback( p_intf->p_libvlc, "intf-toggle-fscontrol", IntfShowCB, p_intf );
     var_AddCallback( p_intf->p_libvlc, "intf-boss", IntfBossCB, p_intf );
+    var_AddCallback( p_intf->p_libvlc,"intf-show", IntfRaiseMainCB, p_intf );
 
     /* Register callback for the intf-popupmenu variable */
     var_AddCallback( p_intf->p_libvlc, "intf-popupmenu", PopupMenuCB, p_intf );
@@ -1299,6 +1304,16 @@ void MainInterface::setBoss()
     }
 }
 
+void MainInterface::emitRaise()
+{
+    emit askRaise();
+}
+void MainInterface::setRaise()
+{
+    activateWindow();
+    raise();
+}
+
 /*****************************************************************************
  * PopupMenuCB: callback triggered by the intf-popupmenu playlist variable.
  *  We don't show the menu directly here because we don't want the
@@ -1337,6 +1352,21 @@ static int IntfShowCB( vlc_object_t *p_this, const char *psz_variable,
 }
 
 /*****************************************************************************
+ * IntfRaiseMainCB: callback triggered by the intf-show-main libvlc variable.
+ *****************************************************************************/
+static int IntfRaiseMainCB( vlc_object_t *p_this, const char *psz_variable,
+                       vlc_value_t old_val, vlc_value_t new_val, void *param )
+{
+    VLC_UNUSED( p_this ); VLC_UNUSED( psz_variable ); VLC_UNUSED( old_val );
+    VLC_UNUSED( new_val );
+
+    intf_thread_t *p_intf = (intf_thread_t *)param;
+    p_intf->p_sys->p_mi->emitRaise();
+
+    return VLC_SUCCESS;
+}
+
+/*****************************************************************************
  * IntfBossCB: callback triggered by the intf-boss libvlc variable.
  *****************************************************************************/
 static int IntfBossCB( vlc_object_t *p_this, const char *psz_variable,
diff --git a/modules/gui/qt4/main_interface.hpp b/modules/gui/qt4/main_interface.hpp
index fd925c4..1415bf3 100644
--- a/modules/gui/qt4/main_interface.hpp
+++ b/modules/gui/qt4/main_interface.hpp
@@ -205,6 +205,7 @@ public slots:
     void releaseVideoSlot( void );
 
     void emitBoss();
+    void emitRaise();
 
     void reloadPrefs();
 
@@ -246,6 +247,7 @@ private slots:
     void setVideoFullScreen( bool );
     void setVideoOnTop( bool );
     void setBoss();
+    void setRaise();
 
 signals:
     void askGetVideo( WId *p_id, int *pi_x, int *pi_y,
@@ -258,6 +260,7 @@ signals:
     void fullscreenInterfaceToggled( bool );
     void askToQuit();
     void askBoss();
+    void askRaise();
 
 };
 
diff --git a/src/libvlc.c b/src/libvlc.c
index e615f05..c8397d6 100644
--- a/src/libvlc.c
+++ b/src/libvlc.c
@@ -536,6 +536,9 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     /* Create a variable for the Boss Key */
     var_Create( p_libvlc, "intf-boss", VLC_VAR_VOID );
 
+    /* Create a variable for showing the main interface */
+    var_Create( p_libvlc, "intf-show", VLC_VAR_BOOL );
+
     /* Create a variable for showing the right click menu */
     var_Create( p_libvlc, "intf-popupmenu", VLC_VAR_BOOL );
 



More information about the vlc-commits mailing list