diff options
Diffstat (limited to 'kmix/kmixdockwidget.cpp')
-rw-r--r-- | kmix/kmixdockwidget.cpp | 103 |
1 files changed, 72 insertions, 31 deletions
diff --git a/kmix/kmixdockwidget.cpp b/kmix/kmixdockwidget.cpp index 1402191c..7b3ea1fa 100644 --- a/kmix/kmixdockwidget.cpp +++ b/kmix/kmixdockwidget.cpp @@ -22,17 +22,18 @@ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#include <tdeaction.h> -#include <tdelocale.h> -#include <tdeapplication.h> #include <kpanelapplet.h> -#include <tdepopupmenu.h> -#include <tdeglobalsettings.h> #include <kdialog.h> #include <kaudioplayer.h> #include <kiconloader.h> #include <kdebug.h> +#include <khelpmenu.h> #include <twin.h> +#include <tdeaction.h> +#include <tdeapplication.h> +#include <tdelocale.h> +#include <tdepopupmenu.h> +#include <tdeglobalsettings.h> #include <tqapplication.h> #include <tqcursor.h> @@ -45,7 +46,6 @@ #include "mixer.h" #include "mixdevicewidget.h" #include "kmixdockwidget.h" -#include "twin.h" #include "viewdockareapopup.h" KMixDockWidget::KMixDockWidget( Mixer *mixer, TQWidget *parent, const char *name, bool volumePopup, bool dockIconMuting ) @@ -80,30 +80,53 @@ KMixDockWidget::~KMixDockWidget() void KMixDockWidget::createActions() { - // Put "Mute" selector in context menu - (void)new TDEToggleAction( i18n( "M&ute" ), 0, TQT_TQOBJECT(this), TQT_SLOT( dockMute() ), - actionCollection(), "dock_mute" ); - TDEAction *a = actionCollection()->action( "dock_mute" ); - TDEPopupMenu *popupMenu = contextMenu(); - if ( a ) a->plug( popupMenu ); - - // Put "Select Master Channel" dialog in context menu - if ( m_mixer != 0 ) { - (void)new TDEAction( i18n("Select Master Channel..."), 0, TQT_TQOBJECT(this), TQT_SLOT(selectMaster()), - actionCollection(), "select_master"); - TDEAction *a2 = actionCollection()->action( "select_master" ); - if (a2) a2->plug( popupMenu ); - } + TDEPopupMenu *popupMenu = contextMenu(); - // Setup volume preview - if ( _playBeepOnVolumeChange ) { - _audioPlayer = new KAudioPlayer("KDE_Beep_Digital_1.ogg"); - } -} + // Put "Mute" selector in context menu + (void)new TDEToggleAction(i18n("M&ute"), 0, TQT_TQOBJECT(this), TQT_SLOT(dockMute()), + actionCollection(), "dock_mute"); + TDEAction *a = actionCollection()->action("dock_mute"); + if (a) + { + a->plug(popupMenu); + } + + // Put "Select Master Channel" dialog in context menu + if (m_mixer) + { + (void)new TDEAction(i18n("Select Master Channel..."), 0, TQT_TQOBJECT(this), TQT_SLOT(selectMaster()), + actionCollection(), "select_master"); + a = actionCollection()->action("select_master"); + if (a) + { + a->plug(popupMenu); + } + } + // Show/hide mixer window (use "minimizeRestore" action + a = actionCollection()->action("minimizeRestore"); + if (a) + { + a->plug(popupMenu); + } + + // Help and quit + popupMenu->insertSeparator(); + popupMenu->insertItem(SmallIcon("help"), KStdGuiItem::help().text(), (new KHelpMenu(this, TDEGlobal::instance()->aboutData(), false))->menu(), false); + popupMenu->insertSeparator(); + a = actionCollection()->action(KStdAction::name(KStdAction::Quit)); + if (a) + { + a->plug(popupMenu); + } + // Setup volume preview + if (_playBeepOnVolumeChange) + { + _audioPlayer = new KAudioPlayer("KDE_Beep_Digital_1.ogg"); + } +} -void -KMixDockWidget::createMasterVolWidget() +void KMixDockWidget::createMasterVolWidget() { // Reset flags, so that the dock icon will be reconstructed _oldToolTipValue = -1; @@ -117,6 +140,11 @@ KMixDockWidget::createMasterVolWidget() return; } // create devices + if (_dockAreaPopup) + { + // Delete the old popup widget if we are changing the channel + deleteMasterVolWidget(); + } _dockAreaPopup = new ViewDockAreaPopup(0, "dockArea", m_mixer, 0, this); _dockAreaPopup->createDeviceWidgets(); @@ -134,9 +162,22 @@ KMixDockWidget::createMasterVolWidget() * Refreshing the Icon * */ - // connect( m_mixer, TQT_SIGNAL(newVolumeLevels()), _dockAreaPopup, TQT_SLOT(refreshVolumeLevels()) ); - connect( m_mixer, TQT_SIGNAL(newVolumeLevels()), TQT_TQOBJECT(this), TQT_SLOT(setVolumeTip() ) ); - connect( m_mixer, TQT_SIGNAL(newVolumeLevels()), TQT_TQOBJECT(this), TQT_SLOT(slotUpdatePixmap() ) ); + connect(m_mixer, TQT_SIGNAL(newVolumeLevels()), TQT_TQOBJECT(this), TQT_SLOT(setVolumeTip())); + connect(m_mixer, TQT_SIGNAL(newVolumeLevels()), TQT_TQOBJECT(this), TQT_SLOT(slotUpdatePixmap())); +} + +void KMixDockWidget::deleteMasterVolWidget() +{ + if (_dockAreaPopup) + { + delete _dockAreaPopup; + _dockAreaPopup = NULL; + } + if (m_mixer) + { + disconnect(m_mixer, TQT_SIGNAL(newVolumeLevels()), TQT_TQOBJECT(this), TQT_SLOT(setVolumeTip())); + disconnect(m_mixer, TQT_SIGNAL(newVolumeLevels()), TQT_TQOBJECT(this), TQT_SLOT(slotUpdatePixmap())); + } } void KMixDockWidget::slotUpdatePixmap() @@ -161,6 +202,7 @@ void KMixDockWidget::handleNewMaster(int soundcard_id, TQString& channel_id) // kdError(67100) << "KMixDockWidget::createPage(): Invalid Mixer (soundcard_id=" << soundcard_id << ")" << endl; return; // can not happen } + deleteMasterVolWidget(); m_mixer = mixer; Mixer::setMasterCard(mixer->id()); // We must save this information "somewhere". Mixer::setMasterCardDevice( channel_id ); @@ -263,7 +305,6 @@ void KMixDockWidget::resizeEvent ( TQResizeEvent * ) void KMixDockWidget::showEvent ( TQShowEvent *se ) { updatePixmap(true); - KSystemTray::showEvent(se); } void |