File kmix-global-shortcuts.diff of Package kdemultimedia4
Subject: Assign multimedia volumeup/volumedown/mute keys to kmix by default
From: Lubos Lunak
Patch-upstream: no (4.2 seems to have something slightly different)
This is just adding global shortcuts with default assignments (the i18n
strings are not new, they are also elsewhere) and more or less
copy&pasting code from the tray widget that does the same on scrollwheel.
--- kmix/kmix.cpp.sav 2008-11-04 16:29:16.000000000 +0100
+++ kmix/kmix.cpp 2008-11-04 17:04:06.000000000 +0100
@@ -122,6 +122,22 @@ void KMixWindow::initActions()
action = actionCollection()->addAction("toggle_channels_currentview");
action->setText(i18n("Configure &Channels..."));
connect(action, SIGNAL(triggered(bool) ), SLOT(slotConfigureCurrentView()));
+
+ KAction* globalAction = actionCollection()->addAction("increase_volume");
+ globalAction->setText(i18n("Increase Volume"));
+ globalAction->setGlobalShortcut(KShortcut(Qt::Key_VolumeUp));
+ connect(globalAction, SIGNAL(triggered(bool) ), SLOT(slotIncreaseVolume()));
+
+ globalAction = actionCollection()->addAction("decrease_volume");
+ globalAction->setText(i18n("Decrease Volume"));
+ globalAction->setGlobalShortcut(KShortcut(Qt::Key_VolumeDown));
+ connect(globalAction, SIGNAL(triggered(bool) ), SLOT(slotDecreaseVolume()));
+
+ globalAction = actionCollection()->addAction("mute");
+ globalAction->setText(i18n("Toggle Mute"));
+ globalAction->setGlobalShortcut(KShortcut(Qt::Key_VolumeMute));
+ connect(globalAction, SIGNAL(triggered(bool) ), SLOT(slotMute()));
+
createGUI( "kmixui.rc" );
}
@@ -694,6 +710,54 @@ void KMixWindow::newMixerShown(int /*tab
}
}
+// based on code from kmixdockwidget.cpp
+void KMixWindow::slotIncreaseVolume()
+{
+ volumeHelper( true );
+}
+
+void KMixWindow::slotDecreaseVolume()
+{
+ volumeHelper( false );
+}
+
+void KMixWindow::volumeHelper( bool up )
+{
+ MixDevice *md = Mixer::getGlobalMasterMD();
+ if ( md != 0 )
+ {
+ Volume vol = md->playbackVolume();
+ if ( md->playbackVolume().hasVolume() )
+ vol = md->playbackVolume();
+ else
+ vol = md->captureVolume();
+
+ int inc = vol.maxVolume() / 20;
+
+ if ( inc < 1 ) inc = 1;
+
+ for ( int i = 0; i < vol.count(); i++ ) {
+ int newVal = vol[i] + (inc * ( up ? 1 : -1 ));
+ if( newVal < 0 ) newVal = 0;
+ vol.setVolume( (Volume::ChannelID)i, newVal < vol.maxVolume() ? newVal : vol.maxVolume() );
+ }
+
+ if ( md->playbackVolume().hasVolume() )
+ md->playbackVolume().setVolume(vol);
+ else
+ md->captureVolume().setVolume(vol);
+ (Mixer::getGlobalMasterMixer())->commitVolumeChange(md);
+ }
+}
+
+void KMixWindow::slotMute()
+{
+ MixDevice *md = Mixer::getGlobalMasterMD();
+ if ( md != 0 ) {
+ md->setMuted( !md->isMuted() );
+ md->mixer()->commitVolumeChange( md );
+ }
+}
#include "kmix.moc"
--- kmix/kmix.h.sav 2008-11-04 16:29:16.000000000 +0100
+++ kmix/kmix.h 2008-11-04 16:42:38.000000000 +0100
@@ -70,6 +70,7 @@ KMixWindow : public KXmlGuiWindow
void clearMixerWidgets();
void fixConfigAfterRead();
+ void volumeHelper( bool up );
virtual bool queryClose();
@@ -124,6 +125,9 @@ KMixWindow : public KXmlGuiWindow
void plugged( const char* driverName, const QString& udi, QString& dev);
void unplugged( const QString& udi);
void hideOrClose();
+ void slotIncreaseVolume();
+ void slotDecreaseVolume();
+ void slotMute();
};
#endif // KMIX_H