--- vdr-1.4.7/menu.c	2007-06-13 20:51:22.000000000 +0300
+++ vdr-1.4.7-darwin/menu.c	2007-09-18 21:09:43.000000000 +0300
@@ -3350,6 +3350,10 @@
 eOSState cDisplayVolume::ProcessKey(eKeys Key)
 {
   switch (Key) {
+    case kLeft|k_Repeat:
+    case kLeft:
+    case kRight|k_Repeat:
+    case kRight:
     case kVolUp|k_Repeat:
     case kVolUp:
     case kVolDn|k_Repeat:
--- vdr-1.4.7/menu.h	2006-10-20 16:09:57.000000000 +0300
+++ vdr-1.4.7-darwin/menu.h	2007-09-19 18:08:34.000000000 +0300
@@ -105,6 +105,7 @@
   cDisplayVolume(void);
 public:
   virtual ~cDisplayVolume();
+  static bool IsOpen(void) { return currentDisplayVolume != NULL; }
   static cDisplayVolume *Create(void);
   static void Process(eKeys Key);
   eOSState ProcessKey(eKeys Key);
--- vdr-1.4.7/vdr.c	2007-09-19 19:13:23.000000000 +0300
+++ vdr-1.4.7-remote/vdr.c	2007-09-19 19:16:37.000000000 +0300
@@ -987,6 +987,10 @@
                key = kNone; // nobody else needs to see these keys
                break;
           // Volume control:
+          case kLeft|k_Repeat:
+          case kLeft:
+          case kRight|k_Repeat:
+          case kRight:
           case kVolUp|k_Repeat:
           case kVolUp:
           case kVolDn|k_Repeat:
@@ -999,11 +1003,16 @@
                      }
                   }
                else
-                  cDevice::PrimaryDevice()->SetVolume(NORMALKEY(key) == kVolDn ? -VOLUMEDELTA : VOLUMEDELTA);
+               {
+                  if (key == kVolDn ||  (key == kLeft && cDisplayVolume::IsOpen() ))
+                    cDevice::PrimaryDevice()->SetVolume(-VOLUMEDELTA);
+                  if (key == kVolUp ||  (key == kRight && cDisplayVolume::IsOpen() ))
+                    cDevice::PrimaryDevice()->SetVolume(VOLUMEDELTA);
+               }
                if (!Menu && !cOsd::IsOpen())
                   Menu = cDisplayVolume::Create();
                cDisplayVolume::Process(key);
-               key = kNone; // nobody else needs to see these keys
+ //                 key = kNone; // nobody else needs to see these keys
                break;
           // Audio track control:
           case kAudio:

