]> git.sesse.net Git - vlc/commitdiff
Qt: make sure the random buttons states are consistent
authorJean-Baptiste Kempf <jb@videolan.org>
Sun, 29 Nov 2009 17:20:24 +0000 (18:20 +0100)
committerJean-Baptiste Kempf <jb@videolan.org>
Fri, 4 Dec 2009 06:21:39 +0000 (07:21 +0100)
with the core and between themselves

modules/gui/qt4/components/controller.cpp
modules/gui/qt4/input_manager.cpp
modules/gui/qt4/input_manager.hpp

index aa73f05a80a2d9c787ce10421ddd7bfab64eef4c..0a2071e3a6ff4f4423d6c4a38205f1ccf5ce0a02 100644 (file)
@@ -363,6 +363,8 @@ QWidget *AbstractController::createWidget( buttonType_e button, int options )
     case RANDOM_BUTTON: {
         NORMAL_BUTTON( RANDOM );
         RANDOMButton->setCheckable( true );
+        CONNECT( THEMIM, randomChanged( bool ),
+                 RANDOMButton, setChecked( bool ) );
         }
         break;
     default:
index 77d09fc36d0f02e18de9421d6afc1d808fea3d92..7f65ff0d5578f119108f117c19bacd15317f2f44 100644 (file)
@@ -46,6 +46,10 @@ static int PLItemRemoved( vlc_object_t *, const char *,
 static int VolumeChanged( vlc_object_t *, const char *,
                         vlc_value_t, vlc_value_t, void * );
 
+static int RandomChanged( vlc_object_t *, const char *,
+                        vlc_value_t, vlc_value_t, void * );
+
+
 static int InputEvent( vlc_object_t *, const char *,
                        vlc_value_t, vlc_value_t, void * );
 static int VbiEvent( vlc_object_t *, const char *,
@@ -888,6 +892,7 @@ MainInputManager::MainInputManager( intf_thread_t *_p_intf )
     var_AddCallback( THEPL, "activity", PLItemChanged, this );
     var_AddCallback( THEPL, "playlist-item-append", PLItemAppended, this );
     var_AddCallback( THEPL, "playlist-item-deleted", PLItemRemoved, this );
+    var_AddCallback( THEPL, "random", RandomChanged, this );
 
     var_AddCallback( p_intf->p_libvlc, "volume-change", VolumeChanged, this );
 
@@ -959,6 +964,9 @@ void MainInputManager::customEvent( QEvent *event )
         plEv = static_cast<PLEvent*>( event );
         emit playlistItemRemoved( plEv->i_item );
         return;
+    case RandomChanged_Type:
+        emit randomChanged( var_GetBool( THEPL, "random" ) );
+        return;
     default:
         if( type != ItemChanged_Type ) return;
     }
@@ -1079,3 +1087,13 @@ static int PLItemRemoved
     QApplication::postEvent( mim, event );
     return VLC_SUCCESS;
 }
+
+static int RandomChanged
+( vlc_object_t * obj, const char *var, vlc_value_t old, vlc_value_t cur, void *data )
+{
+    MainInputManager *mim = static_cast<MainInputManager*>(data);
+
+    IMEvent *event = new IMEvent( RandomChanged_Type );
+    QApplication::postEvent( mim, event );
+    return VLC_SUCCESS;
+}
index 5fc39a551bb4871e1ed2e190dfb3c253bde77934..98f5c1d86d197dca959615320737eab835b007d0 100644 (file)
@@ -57,6 +57,7 @@ enum {
     BookmarksChanged_Type,
     RecordingEvent_Type,
     ProgramChanged_Type,
+    RandomChanged_Type,
 /*    SignalChanged_Type, */
 
     FullscreenControlToggle_Type = QEvent::User + IMEventType + 20,
@@ -269,6 +270,7 @@ signals:
     void volumeChanged();
     void playlistItemAppended( int itemId, int parentId );
     void playlistItemRemoved( int itemId );
+    void randomChanged( bool );
 };
 
 #endif