diff --git a/src/kits/interface/ChannelControl.cpp b/src/kits/interface/ChannelControl.cpp index d46f0e62af..bd4439d2a0 100644 --- a/src/kits/interface/ChannelControl.cpp +++ b/src/kits/interface/ChannelControl.cpp @@ -263,14 +263,12 @@ BChannelControl::InvokeChannel(BMessage *msg, int32 fromChannel, invokeMessage.AddInt32("be:current_channel", fCurrentChannel); - if (channelCount == -1) + if (channelCount < 0) channelCount = fChannelCount - fromChannel; - for (int32 i = fromChannel; i < fromChannel + channelCount; i++) { - invokeMessage.AddInt32("be:channel_value", fChannelValues[i]); - // TODO: Fix this: just send "be:channel_changed" = true - // for channels which have changed their values. - invokeMessage.AddBool("be:channel_changed", true); + for (int32 i = 0; i < channelCount; i++) { + invokeMessage.AddInt32("be:channel_value", fChannelValues[fromChannel + i]); + invokeMessage.AddBool("be:channel_changed", inMask ? inMask[i] : true); } return BControl::Invoke(&invokeMessage); @@ -417,7 +415,8 @@ BChannelControl::SetAllValue(int32 values) delete[] fChannelValues; fChannelValues = newValues; - + BControl::SetValue(fChannelValues[fCurrentChannel]); + return B_OK; } diff --git a/src/kits/interface/ChannelSlider.cpp b/src/kits/interface/ChannelSlider.cpp index 6174f8932d..725a167a4c 100644 --- a/src/kits/interface/ChannelSlider.cpp +++ b/src/kits/interface/ChannelSlider.cpp @@ -272,6 +272,7 @@ BChannelSlider::MouseDown(BPoint where) // Click was on a slider. if (frame.Contains(where)) { fCurrentChannel = channel; + SetCurrentChannel(channel); break; } } @@ -626,18 +627,15 @@ void BChannelSlider::FinishChange() { if (fInitialValues != NULL) { - if (fAllChannels) { - // TODO: Iterate through the list of channels, and invoke only - // for changed values ? - - InvokeChannel(); - - } else { - if (ValueList()[fCurrentChannel] != fInitialValues[fCurrentChannel]) { - SetValueFor(fCurrentChannel, ValueList()[fCurrentChannel]); - Invoke(); - } + bool *inMask = NULL; + int32 numChannels = CountChannels(); + if (!fAllChannels) { + inMask = new bool[CountChannels()]; + for (int i=0; i