--- uisimulator/sdl/button.c	(.../../../trunk)	(revision 165)
+++ uisimulator/sdl/button.c	(revision 165)
@@ -55,8 +55,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;
@@ -76,15 +79,30 @@ void button_event(int key, bool pressed)
     {
     case SDLK_KP4:
     case SDLK_LEFT:
+#ifdef BUTTON_RC_REW
+        if (mod & KMOD_CAPS)
+            new_btn = BUTTON_RC_REW;
+        else
+#endif                
         new_btn = BUTTON_LEFT;
         break;
     case SDLK_KP6:
     case SDLK_RIGHT:
+#ifdef BUTTON_RC_FF
+        if (mod & KMOD_CAPS)
+            new_btn = BUTTON_RC_FF;
+        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
@@ -96,6 +114,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
@@ -107,6 +130,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)
@@ -125,6 +153,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
@@ -146,6 +179,11 @@ void button_event(int key, bool pressed)
         new_btn = BUTTON_F3;
         break;
 #elif defined(BUTTON_REC)
+#ifdef BUTTON_RC_REC
+        if (mod & KMOD_CAPS)
+            new_btn = BUTTON_RC_REC;
+        else
+#endif                
     case SDLK_KP_DIVIDE:
     case SDLK_F1:
         new_btn = BUTTON_REC;
@@ -154,6 +192,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)
@@ -172,6 +215,11 @@ 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)
--- uisimulator/sdl/uisdl.c	(.../../../trunk)	(revision 165)
+++ uisimulator/sdl/uisdl.c	(revision 165)
@@ -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;
