--- uisimulator/sdl/button.c	(.../../../trunk)	(revision 265)
+++ uisimulator/sdl/button.c	(revision 265)
@@ -66,8 +66,11 @@ void set_remote_backlight_filter_keypres
 #endif
 #endif
 
-void button_event(int key, bool pressed)
+void button_event(int key, int mod, bool pressed)
 {
+#if BUTTON_REMOTE == 0
+    (void)mod;
+#endif
     int new_btn = 0;
     int diff = 0;
     static int count = 0;
@@ -112,15 +115,38 @@ void button_event(int key, bool pressed)
 
     case SDLK_KP4:
     case SDLK_LEFT:
+#if defined(BUTTON_RC_REW) || defined(BUTTON_RC_LEFT)
+        if (mod & KMOD_CAPS)
+#ifdef BUTTON_RC_REW
+            new_btn = BUTTON_RC_REW;
+#else
+            new_btn = BUTTON_RC_LEFT;
+#endif                
+        else
+#endif                
         new_btn = BUTTON_LEFT;
         break;
     case SDLK_KP6:
     case SDLK_RIGHT:
+#if defined(BUTTON_RC_FF) || defined(BUTTON_RC_RIGHT)
+        if (mod & KMOD_CAPS)
+#ifdef BUTTON_RC_FF
+            new_btn = BUTTON_RC_FF;
+#else
+            new_btn = BUTTON_RC_RIGHT;
+#endif
+        else
+#endif                
         new_btn = BUTTON_RIGHT;
         break;
 
     case SDLK_KP8:
     case SDLK_UP:
+#ifdef BUTTON_RC_VOL_UP
+        if (mod & KMOD_CAPS)
+            new_btn = BUTTON_RC_VOL_UP;
+        else
+#endif                
 #ifdef BUTTON_UP
         new_btn = BUTTON_UP;
 #elif defined BUTTON_SCROLL_BACK
@@ -134,6 +160,11 @@ void button_event(int key, bool pressed)
 
     case SDLK_KP2:
     case SDLK_DOWN:
+#ifdef BUTTON_RC_VOL_DOWN
+        if (mod & KMOD_CAPS)
+            new_btn = BUTTON_RC_VOL_DOWN;
+        else
+#endif                
 #ifdef BUTTON_DOWN
         new_btn = BUTTON_DOWN;
 #elif defined BUTTON_SCROLL_FWD
@@ -147,6 +178,11 @@ void button_event(int key, bool pressed)
 
     case SDLK_KP_PLUS:
     case SDLK_F8:
+#ifdef BUTTON_RC_ON
+        if (mod & KMOD_CAPS)
+            new_btn = BUTTON_RC_ON;
+        else
+#endif                
 #ifdef BUTTON_ON
         new_btn = BUTTON_ON;
 #elif defined(BUTTON_SELECT) && defined(BUTTON_PLAY)
@@ -165,6 +201,11 @@ void button_event(int key, bool pressed)
     case SDLK_KP_ENTER:
     case SDLK_RETURN:
     case SDLK_a:
+#ifdef BUTTON_RC_STOP
+        if (mod & KMOD_CAPS)
+            new_btn = BUTTON_RC_STOP;
+        else
+#endif                
 #ifdef BUTTON_OFF
         new_btn = BUTTON_OFF;
 #elif defined BUTTON_A
@@ -190,6 +231,11 @@ void button_event(int key, bool pressed)
 #elif defined(BUTTON_REC)
     case SDLK_KP_DIVIDE:
     case SDLK_F1:
+#ifdef BUTTON_RC_REC
+        if (mod & KMOD_CAPS)
+            new_btn = BUTTON_RC_REC;
+        else
+#endif                
         new_btn = BUTTON_REC;
         break;
 #elif defined BUTTON_REW
@@ -205,6 +251,11 @@ void button_event(int key, bool pressed)
 
     case SDLK_KP5:
     case SDLK_SPACE:
+#ifdef BUTTON_RC_MENU
+        if (mod & KMOD_CAPS)
+            new_btn = BUTTON_RC_MENU;
+        else
+#endif                
 #if defined(BUTTON_PLAY) && !defined(BUTTON_SELECT)
         new_btn = BUTTON_PLAY;
 #elif defined(BUTTON_SELECT)
@@ -223,12 +274,34 @@ void button_event(int key, bool pressed)
 
     case SDLK_KP_PERIOD:
     case SDLK_INSERT:
+#ifdef BUTTON_RC_MODE
+        if (mod & KMOD_CAPS)
+            new_btn = BUTTON_RC_MODE;
+        else
+#endif                
 #ifdef BUTTON_MENU
         new_btn = BUTTON_MENU;
 #elif defined(BUTTON_MODE)
         new_btn = BUTTON_MODE;
 #endif
         break;
+
+#ifdef BUTTON_RC_BITRATE
+    case SDLK_KP3:
+    case SDLK_PAGEDOWN:
+        if (mod & KMOD_CAPS)
+            new_btn = BUTTON_RC_BITRATE;
+        break;
+#endif
+
+#ifdef BUTTON_RC_SOURCE
+    case SDLK_KP9:
+    case SDLK_PAGEUP:
+        if (mod & KMOD_CAPS)
+            new_btn = BUTTON_RC_SOURCE;
+        break;
+#endif
+
     }
     
     if (pressed)
--- uisimulator/sdl/uisdl.c	(.../../../trunk)	(revision 265)
+++ uisimulator/sdl/uisdl.c	(revision 265)
@@ -42,7 +42,7 @@ extern void                 app_main (vo
 extern void                 new_key(int key);
 extern void                 sim_tick_tasks(void);
 
-void button_event(int key, bool pressed);
+void button_event(int key, int mod, bool pressed);
 
 SDL_Surface *gui_surface;
 bool background = false;        /* Don't use backgrounds by default */
@@ -86,10 +86,10 @@ void gui_message_loop(void)
         switch(event.type)
         {
             case SDL_KEYDOWN:
-                button_event(event.key.keysym.sym, true);
+                button_event(event.key.keysym.sym, event.key.keysym.mod, true);
                 break;
             case SDL_KEYUP:
-                button_event(event.key.keysym.sym, false);
+                button_event(event.key.keysym.sym, event.key.keysym.mod, false);
                 break;
             case SDL_QUIT:
                 done = true;
