summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2006-05-28 10:48:50 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2006-05-28 10:48:50 +0200
commite892171736157127d1ca8fd6b5c6193eb5b55c53 (patch)
treef0896244778df5d2129753d88b1f497b8a4e8fcb
parent39162a98f081d997ad34c1d8dfb48111176eac15 (diff)
downloadvdr-e892171736157127d1ca8fd6b5c6193eb5b55c53.tar.gz
vdr-e892171736157127d1ca8fd6b5c6193eb5b55c53.tar.bz2
Fixed deleting channels in case the current channel's number changes1.4.0-2
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY2
-rw-r--r--channels.c13
-rw-r--r--channels.h6
-rw-r--r--menu.c32
5 files changed, 52 insertions, 3 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index c7f51a3c..c593cc46 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -446,6 +446,8 @@ Mirko Dölle <mdoelle@linux-user.de>
for suggesting to allow defining key macros for all non-modeless keys
for reporting a bug in entering '0' in a cMenuEditIntItem
for reporting that moving channels sometimes stopped the current replay session
+ for reporting a problem with deleting channels in case the current channel's
+ number changes
Michael Rakowski <mrak@gmx.de>
for translating OSD texts to the Polish language
diff --git a/HISTORY b/HISTORY
index e0c9b4ae..da5dd4f9 100644
--- a/HISTORY
+++ b/HISTORY
@@ -4743,3 +4743,5 @@ Video Disk Recorder Revision History
- Improved the repeat function for LIRC remote controls (thanks to Joerg Riechardt).
- Fixed moving channels, which sometimes stopped the current replay session
(reported by Mirko Dölle).
+- Fixed deleting channels in case the current channel's number changes (reported
+ by Mirko Dölle).
diff --git a/channels.c b/channels.c
index 343802ee..4f1d3951 100644
--- a/channels.c
+++ b/channels.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: channels.c 1.51 2006/04/17 12:18:57 kls Exp $
+ * $Id: channels.c 1.52 2006/05/28 10:14:18 kls Exp $
*/
#include "channels.h"
@@ -925,6 +925,17 @@ int cChannels::GetNextNormal(int Idx)
return channel ? Idx : -1;
}
+#if APIVERSNUM != 10400
+#warning ******* API version changed - activate new code
+int cChannels::GetPrevNormal(int Idx)
+{
+ cChannel *channel = Get(--Idx);
+ while (channel && channel->GroupSep())
+ channel = Get(--Idx);
+ return channel ? Idx : -1;
+}
+#endif
+
void cChannels::ReNumber( void )
{
channelsHashSid.Clear();
diff --git a/channels.h b/channels.h
index c7da4f35..abccceae 100644
--- a/channels.h
+++ b/channels.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: channels.h 1.40 2006/02/28 13:52:49 kls Exp $
+ * $Id: channels.h 1.41 2006/05/28 10:13:21 kls Exp $
*/
#ifndef __CHANNELS_H
@@ -233,6 +233,10 @@ public:
int GetNextGroup(int Idx); // Get next channel group
int GetPrevGroup(int Idx); // Get previous channel group
int GetNextNormal(int Idx); // Get next normal channel (not group)
+#if APIVERSNUM != 10400
+#warning ******* API version changed - activate new code
+ int GetPrevNormal(int Idx); // Get previous normal channel (not group)
+#endif
void ReNumber(void); // Recalculate 'number' based on channel type
cChannel *GetByNumber(int Number, int SkipGap = 0);
cChannel *GetByServiceID(int Source, int Transponder, unsigned short ServiceID);
diff --git a/menu.c b/menu.c
index 3f32adae..759cfe0d 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.c 1.437 2006/05/28 09:17:25 kls Exp $
+ * $Id: menu.c 1.438 2006/05/28 10:47:40 kls Exp $
*/
#include "menu.h"
@@ -499,6 +499,8 @@ eOSState cMenuChannels::New(void)
eOSState cMenuChannels::Delete(void)
{
if (!HasSubMenu() && Count() > 0) {
+ int CurrentChannelNr = cDevice::CurrentChannel();
+ cChannel *CurrentChannel = Channels.GetByNumber(CurrentChannelNr);
int Index = Current();
cChannel *channel = GetChannel(Current());
int DeletedChannel = channel->Number();
@@ -508,10 +510,38 @@ eOSState cMenuChannels::Delete(void)
return osContinue;
}
if (Interface->Confirm(tr("Delete channel?"))) {
+ if (CurrentChannel && channel == CurrentChannel) {
+ int n = Channels.GetNextNormal(CurrentChannel->Index());
+#if APIVERSNUM == 10400
+ if (n < 0) {
+ int Idx = CurrentChannel->Index();
+ cChannel *channel = Channels.Get(--Idx);
+ while (channel && channel->GroupSep())
+ channel = Channels.Get(--Idx);
+ if (channel)
+ n = Idx;
+ }
+#else
+#warning ******* API version changed - remove old stuff
+ if (n < 0)
+ n = Channels.GetPrevNormal(CurrentChannel->Index());
+#endif
+ CurrentChannel = Channels.Get(n);
+ CurrentChannelNr = 0; // triggers channel switch below
+ }
Channels.Del(channel);
cOsdMenu::Del(Index);
Propagate();
isyslog("channel %d deleted", DeletedChannel);
+ if (CurrentChannel && CurrentChannel->Number() != CurrentChannelNr) {
+ if (!cDevice::PrimaryDevice()->Replaying() || cDevice::PrimaryDevice()->Transferring())
+ Channels.SwitchTo(CurrentChannel->Number());
+#if APIVERSNUM != 10400
+#warning ******* API version changed - activate new code
+ else
+ cDevice::SetCurrentChannel(CurrentChannel);
+#endif
+ }
}
}
return osContinue;