summaryrefslogtreecommitdiff
blob: 22d16983f88f894f53f4192941d60ee2c3661598 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
From 5ddf8e7f68098ebb86d0023653e540edf119291d Mon Sep 17 00:00:00 2001
From: Kelvie Wong <kelvie@ieee.org>
Date: Sat, 3 Nov 2007 21:42:27 -0700
Subject: [PATCH] KMilo: reintroduced support for kmix's user-set master channel
 * uses the new masterDeviceIndex dcop call in KMix (from other patch)

---
 kmilo/generic/generic_monitor.cpp |   18 +++++++++++++-----
 kmilo/generic/generic_monitor.h   |    1 +
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/kmilo/generic/generic_monitor.cpp b/kmilo/generic/generic_monitor.cpp
index 51b96b1..fd7a47f 100644
--- a/kmilo/generic/generic_monitor.cpp
+++ b/kmilo/generic/generic_monitor.cpp
@@ -50,6 +50,7 @@ GenericMonitor::GenericMonitor(QObject *parent, const char *name, const QStringL
 	m_minVolume = 0;
 	m_maxVolume = 100;
 	m_volume = 50;
+	m_deviceIdx = 0;
 }
 
 GenericMonitor::~GenericMonitor()
@@ -92,7 +93,14 @@ bool GenericMonitor::retrieveVolume()
 {
 	bool kmix_error = false;
 
-	DCOPReply reply = kmixClient->call("absoluteVolume", 0);
+	// Set it to the master, or 0 (from GenericMonitor()) if this dcop
+	// call doesn't exist or various other errors.  It used to be
+	// hard-coded to 0 anyways.
+	DCOPReply reply = kmixClient->call("masterDeviceIndex");
+	if (reply.isValid())
+		m_deviceIdx = reply;
+
+	reply = kmixClient->call("absoluteVolume", m_deviceIdx);
 	if (reply.isValid())
 		m_volume = reply;
 	else
@@ -104,7 +112,7 @@ bool GenericMonitor::retrieveVolume()
 		if (kapp->startServiceByDesktopName("kmix")==0) // trying to start kmix
 		{
 			// trying again
-			reply = kmixClient->call("absoluteVolume", 0);
+			reply = kmixClient->call("absoluteVolume", m_deviceIdx);
 			if (reply.isValid()) 
 			{
 				m_volume = reply;
@@ -122,9 +130,9 @@ bool GenericMonitor::retrieveVolume()
 		
 		return false;
 	} else {
-		reply = kmixClient->call("absoluteVolumeMax", 0);
+		reply = kmixClient->call("absoluteVolumeMax", m_deviceIdx);
 		m_maxVolume = reply;
-		reply = kmixClient->call("absoluteVolumeMin", 0);
+		reply = kmixClient->call("absoluteVolumeMin", m_deviceIdx);
 		m_minVolume = reply;
 		return true;
 	}
@@ -165,7 +173,7 @@ void GenericMonitor::displayVolume()
 
 	// If we got this far, the DCOP communication with kmix works,
 	// so we don't have to test the result.
-	kmixClient->send("setAbsoluteVolume", 0, m_volume);
+	kmixClient->send("setAbsoluteVolume", m_deviceIdx, m_volume);
 
 	// if mute then unmute
 	if (m_mute)
diff --git a/kmilo/generic/generic_monitor.h b/kmilo/generic/generic_monitor.h
index 7a0ba51..d04274f 100644
--- a/kmilo/generic/generic_monitor.h
+++ b/kmilo/generic/generic_monitor.h
@@ -74,6 +74,7 @@ private:
 
 	DCOPRef *kmixClient, *kmixWindow;
 
+	int m_deviceIdx;
 	int m_progress;
 	long m_volume, m_oldVolume;
 	bool m_mute;
-- 
1.5.3.4