[vlc-commits] Qt: SoundSlider: don't fire back signal when a change comes from lib
Francois Cartegnie
git at videolan.org
Sun Apr 10 16:16:57 CEST 2011
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Sun Apr 10 13:49:31 2011 +0200| [e7e26e381c537afd80a423d49080841746606f92] | committer: Francois Cartegnie
Qt: SoundSlider: don't fire back signal when a change comes from lib
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e7e26e381c537afd80a423d49080841746606f92
---
modules/gui/qt4/components/controller_widget.cpp | 18 +++++++++++++-----
modules/gui/qt4/components/controller_widget.hpp | 5 +++++
2 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/modules/gui/qt4/components/controller_widget.cpp b/modules/gui/qt4/components/controller_widget.cpp
index e77cdec..0eca5e8 100644
--- a/modules/gui/qt4/components/controller_widget.cpp
+++ b/modules/gui/qt4/components/controller_widget.cpp
@@ -43,7 +43,7 @@
SoundWidget::SoundWidget( QWidget *_parent, intf_thread_t * _p_intf,
bool b_shiny, bool b_special )
: QWidget( _parent ), p_intf( _p_intf),
- b_is_muted( false )
+ b_is_muted( false ), b_ignore_valuechanged( false )
{
/* We need a layout for this widget */
QHBoxLayout *layout = new QHBoxLayout( this );
@@ -113,7 +113,8 @@ SoundWidget::SoundWidget( QWidget *_parent, intf_thread_t * _p_intf,
/* Volume control connection */
volumeSlider->setTracking( true );
- CONNECT( volumeSlider, valueChanged( int ), this, userUpdateVolume( int ) );
+ CONNECT( volumeSlider, valueChanged( int ), this, valueChangedFilter( int ) );
+ CONNECT( this, valueReallyChanged( int ), this, userUpdateVolume( int ) );
CONNECT( THEMIM, volumeChanged( void ), this, libUpdateVolume( void ) );
CONNECT( THEMIM, soundMuteChanged( void ), this, updateMuteStatus( void ) );
}
@@ -164,12 +165,19 @@ void SoundWidget::libUpdateVolume()
i_volume = aout_VolumeGet( p_playlist );
i_volume = ( ( i_volume + 1 ) * VOLUME_MAX )/ (AOUT_VOLUME_MAX/2);
int i_gauge = volumeSlider->value();
- if ( !b_is_muted && /* do not show mute effect on volume (set to 0) */
- ( i_volume - i_gauge > 1 || i_gauge - i_volume > 1 )
- )
+ if ( i_volume - i_gauge != 0 )
{
+ b_ignore_valuechanged = true;
volumeSlider->setValue( i_volume );
+ b_ignore_valuechanged = false;
}
+ refreshLabels();
+}
+
+void SoundWidget::valueChangedFilter( int i_val )
+{
+ /* valueChanged is also emitted when the lib setValue() */
+ if ( !b_ignore_valuechanged ) emit valueReallyChanged( i_val );
}
/* libvlc mute/unmute event slot */
diff --git a/modules/gui/qt4/components/controller_widget.hpp b/modules/gui/qt4/components/controller_widget.hpp
index 5727da3..c800020 100644
--- a/modules/gui/qt4/components/controller_widget.hpp
+++ b/modules/gui/qt4/components/controller_widget.hpp
@@ -86,6 +86,7 @@ private:
QMenu *volumeMenu;
virtual bool eventFilter( QObject *obj, QEvent *e );
bool b_is_muted;
+ bool b_ignore_valuechanged;
protected slots:
void userUpdateVolume( int );
@@ -93,6 +94,10 @@ protected slots:
void updateMuteStatus( void );
void refreshLabels( void );
void showVolumeMenu( QPoint pos );
+ void valueChangedFilter( int );
+
+signals:
+ void valueReallyChanged( int );
};
#endif
More information about the vlc-commits
mailing list