To avoid having to use the main unit when accidentally launching a plugin from the remote, plugins now support remote quit


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10157 a1c6a512-1295-4272-9138-f99709370657
diff --git a/apps/plugins/battery_test.c b/apps/plugins/battery_test.c
index 0d38b32..cbea016 100644
--- a/apps/plugins/battery_test.c
+++ b/apps/plugins/battery_test.c
@@ -41,6 +41,7 @@
 #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
       (CONFIG_KEYPAD == IRIVER_H300_PAD)
 #define BATTERY_TEST_QUIT BUTTON_OFF
+#define BATTERY_TEST_RC_QUIT BUTTON_RC_STOP
 #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
 #define BATTERY_TEST_QUIT BUTTON_PLAY
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
@@ -123,7 +124,11 @@
         rb->button_clear_queue();
         button = rb->button_get_w_tmo(HZ * buffersize / 16000 - HZ*10);
 
-        if (button == BATTERY_TEST_QUIT)
+        if (button == BATTERY_TEST_QUIT
+#ifdef BATTERY_TEST_RC_QUIT
+         || button == BATTERY_TEST_RC_QUIT
+#endif
+         )
             return PLUGIN_OK;
 
         if (rb->default_event_handler(button) == SYS_USB_CONNECTED)
diff --git a/apps/plugins/bounce.c b/apps/plugins/bounce.c
index b69f64e..c0c757c 100644
--- a/apps/plugins/bounce.c
+++ b/apps/plugins/bounce.c
@@ -52,6 +52,8 @@
 #define BOUNCE_QUIT (BUTTON_OFF | BUTTON_REL)
 #define BOUNCE_MODE (BUTTON_SELECT | BUTTON_REL)
 
+#define BOUNCE_RC_QUIT (BUTTON_RC_STOP | BUTTON_REL)
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define BOUNCE_UP   BUTTON_SCROLL_BACK
@@ -337,15 +339,19 @@
     while(1)
     {
         b = rb->button_get_w_tmo(HZ/10);
-        if ( b == BOUNCE_QUIT )
-            return 0;
-
-        if ( b == BOUNCE_MODE )
-            return 1;
-
-        if ( rb->default_event_handler(b) == SYS_USB_CONNECTED )
-            return -1;
-
+        switch(b)
+        {
+#ifdef BOUNCE_RC_QUIT
+            case BOUNCE_RC_QUIT :
+#endif
+            case BOUNCE_QUIT :
+                return 0;
+            case BOUNCE_MODE : 
+                return 1;
+            default:
+                if ( rb->default_event_handler(b) == SYS_USB_CONNECTED )
+                    return -1;
+        }
         rb->lcd_clear_display();
 
         for(i=0, yy=y, xx=x; i< LETTERS_ON_SCREEN; i++) {
diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c
index b5d0e47..2bd01e7 100644
--- a/apps/plugins/brickmania.c
+++ b/apps/plugins/brickmania.c
@@ -32,6 +32,8 @@
 #define UP BUTTON_UP
 #define DOWN BUTTON_DOWN
 
+#define RC_QUIT BUTTON_RC_STOP
+
 /* Only iPod have scroll events */
 #define SCROLL_FWD(x) (0)
 #define SCROLL_BACK(x) (0)
@@ -971,6 +973,9 @@
                     return 3;
                 }
                 break;
+#ifdef RC_QUIT
+            case RC_QUIT:
+#endif
             case QUIT:
                 return 3;
                 break;
@@ -1062,6 +1067,9 @@
 
         button=rb->button_get(true);
         switch (button) {
+#ifdef RC_QUIT
+            case RC_QUIT:
+#endif
             case QUIT:
                 switch (game_menu(when)) {
                     case 0:
@@ -1810,6 +1818,9 @@
                         con_game=0;
                     }
                     break;
+#ifdef RC_QUIT
+                case RC_QUIT:
+#endif
                 case QUIT:
                     switch(game_menu(1)) {
                         case 0:
diff --git a/apps/plugins/bubbles.c b/apps/plugins/bubbles.c
index 05e618e..f2676f7 100755
--- a/apps/plugins/bubbles.c
+++ b/apps/plugins/bubbles.c
@@ -64,6 +64,8 @@
 #define BUBBLES_SELECT BUTTON_SELECT
 #define BUBBLES_RESUME BUTTON_MODE
 
+#define BUBBLES_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
 #define BUBBLES_LEFT   BUTTON_SCROLL_BACK
 #define BUBBLES_RIGHT  BUTTON_SCROLL_FWD
@@ -2407,7 +2409,9 @@
                 return BB_END;
             }
             break;
-
+#ifdef BUBBLES_RC_QUIT
+        case BUBBLES_RC_QUIT:
+#endif
         case BUBBLES_QUIT:   /* end the game */
             return BB_END;
 
@@ -2534,7 +2538,9 @@
                 bb->level = startlevel;
                 startgame = true;
                 break;
-
+#ifdef BUBBLES_RC_QUIT
+            case BUBBLES_RC_QUIT:
+#endif
             case BUBBLES_QUIT:   /* quit program */
                 if(showscores) {
                     showscores = false;
diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c
index 0cce186..5194f91 100644
--- a/apps/plugins/calculator.c
+++ b/apps/plugins/calculator.c
@@ -134,6 +134,8 @@
 #define CALCULATOR_OPERATORS BUTTON_MODE
 #define CALCULATOR_CLEAR BUTTON_REC
 
+#define CALCULATOR_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 
@@ -1402,6 +1404,9 @@
             case CALCULATOR_DOWN | BUTTON_REPEAT:
                 moveButton();
                 break;
+#ifdef CALCULATOR_RC_QUIT
+            case CALCULATOR_RC_QUIT:
+#endif
             case CALCULATOR_QUIT:
                 calStatus = cal_exit;
                 printResult();
diff --git a/apps/plugins/chessbox/chessbox.c b/apps/plugins/chessbox/chessbox.c
index edebbf2..5f2ed9a 100644
--- a/apps/plugins/chessbox/chessbox.c
+++ b/apps/plugins/chessbox/chessbox.c
@@ -73,6 +73,8 @@
 #define CB_RESTART BUTTON_REC
 #define CB_QUIT    BUTTON_OFF
 
+#define CB_RC_QUIT BUTTON_RC_STOP
+
 #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
 #define CB_SELECT  BUTTON_SELECT
 #define CB_UP      BUTTON_UP
@@ -280,6 +282,9 @@
     wt_command = COMMAND_NOP;
     button = rb->button_get(false);
     switch (button) {
+#ifdef CB_RC_QUIT
+        case CB_RC_QUIT:
+#endif
         case CB_QUIT:
             wt_command = COMMAND_QUIT;
             timeout = true;
@@ -486,6 +491,9 @@
     while ( true ) {
         button = rb->button_get(true);
         switch (button) {
+#ifdef CB_RC_QUIT
+            case CB_RC_QUIT:
+#endif
             case CB_QUIT:
                 result.type = COMMAND_QUIT;
                 return result;
diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c
index 2a70369..3facd04 100644
--- a/apps/plugins/chip8.c
+++ b/apps/plugins/chip8.c
@@ -976,6 +976,8 @@
 #define CHIP8_KEY6 BUTTON_RIGHT
 #define CHIP8_KEY8 BUTTON_DOWN
 
+#define CHIP8_RC_OFF BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define CHIP8_OFF  BUTTON_MENU
@@ -1106,6 +1108,9 @@
     int button = rb->button_get(false);
     switch (button)
     {
+#ifdef CHIP8_RC_OFF
+    case CHIP8_RC_OFF:
+#endif
     case CHIP8_OFF:                                      /* Abort Emulator */
         chip8_running = 0;
         break;
diff --git a/apps/plugins/clock.c b/apps/plugins/clock.c
index 81caafc..756a83d 100644
--- a/apps/plugins/clock.c
+++ b/apps/plugins/clock.c
@@ -155,6 +155,8 @@
 #define CHANGE_UP_BUTTON BUTTON_RIGHT
 #define CHANGE_DOWN_BUTTON BUTTON_LEFT
 
+#define EXIT_RC_BUTTON BUTTON_RC_STOP
+
 #define YESTEXT "Select/Navi"
 #define NAVI_BUTTON_TEXT_LEFT "LEFT"
 #define NAVI_BUTTON_TEXT_RIGHT "RIGHT"
@@ -1778,6 +1780,9 @@
 
         switch(rb->button_get_w_tmo(HZ/4))
         {
+#ifdef EXIT_RC_BUTTON
+            case EXIT_RC_BUTTON:
+#endif
             case EXIT_BUTTON:
                 done = true;
                 break;
@@ -2061,7 +2066,9 @@
             case CHANGE_UP_BUTTON:
                 change_setting(cursorpos-1, 1, false);
                 break;
-
+#ifdef EXIT_RC_BUTTON
+            case EXIT_RC_BUTTON
+#endif
             case EXIT_BUTTON:
             case MENU_BUTTON:
                 done = true;
@@ -2107,6 +2114,9 @@
 #endif
             case CHANGE_DOWN_BUTTON:
             case CHANGE_UP_BUTTON:
+#ifdef EXIT_RC_BUTTON
+            case EXIT_RC_BUTTON
+#endif
             case EXIT_BUTTON:
                 ask_reset_done = true;
                 break;
@@ -2148,6 +2158,9 @@
 
         switch(rb->button_get_w_tmo(HZ/4))
         {
+#ifdef EXIT_RC_BUTTON
+            case EXIT_RC_BUTTON
+#endif
             case EXIT_BUTTON:
             case MENU_BUTTON:
                 if(settings.general[general_savesetting] == 2)
@@ -2495,6 +2508,9 @@
                 done = true;
                 break;
 
+#ifdef EXIT_RC_BUTTON
+            case EXIT_RC_BUTTON
+#endif
             case EXIT_BUTTON:
             case CHANGE_DOWN_BUTTON:
                 done = true;
@@ -2825,6 +2841,9 @@
                 }
                 break;
 
+#ifdef EXIT_RC_BUTTON
+                case EXIT_RC_BUTTON
+#endif
                 case EXIT_BUTTON:
                 current = counting_up;
                 if(current != original)
@@ -2947,6 +2966,9 @@
                 }
                 break;
 
+#ifdef EXIT_RC_BUTTON
+            case EXIT_RC_BUTTON
+#endif
             case EXIT_BUTTON:
             case CHANGE_DOWN_BUTTON:
 #ifdef ALT_MENU_BUTTON
@@ -3065,6 +3087,9 @@
         button = rb->button_get_w_tmo(HZ/10);
         switch (button)
         {
+#ifdef EXIT_RC_BUTTON
+            case EXIT_RC_BUTTON
+#endif
             case EXIT_BUTTON: /* save and exit */
                 cleanup(NULL);
                 return PLUGIN_OK;
diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c
index 1db8b24..c7f7b63 100644
--- a/apps/plugins/cube.c
+++ b/apps/plugins/cube.c
@@ -82,6 +82,7 @@
 #define CUBE_PAUSE         (BUTTON_ON | BUTTON_REL)
 #define CUBE_HIGHSPEED     BUTTON_SELECT
 
+#define CUBE_RC_QUIT       BUTTON_RC_STOP
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define CUBE_QUIT          BUTTON_MENU
@@ -773,6 +774,9 @@
                 t_disp = DISP_TIME;
                 break;
 
+#ifdef CUBE_RC_QUIT
+            case CUBE_RC_QUIT:
+#endif
             case CUBE_QUIT:
                 exit = true;
                 break;
diff --git a/apps/plugins/demystify.c b/apps/plugins/demystify.c
index e86482f..4ebb649 100644
--- a/apps/plugins/demystify.c
+++ b/apps/plugins/demystify.c
@@ -51,6 +51,10 @@
 #define DEMYSTIFY_REMOVE_POLYGON BUTTON_DOWN
 #define DEMYSTIFY_INCREASE_SPEED BUTTON_RIGHT
 #define DEMYSTIFY_DECREASE_SPEED BUTTON_LEFT
+#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
+      (CONFIG_KEYPAD == IRIVER_H300_PAD)
+#define DEMYSTIFY_RC_QUIT BUTTON_RC_STOP
+#endif
 #endif
 
 #define DEFAULT_WAIT_TIME 3
@@ -315,6 +319,9 @@
         button = rb->button_get(false);
         switch(button)
         {
+#ifdef DEMYSTIFY_RC_QUIT
+            case DEMYSTIFY_RC_QUIT :
+#endif
             case (DEMYSTIFY_QUIT):
                 cleanup(NULL);
                 return PLUGIN_OK;
diff --git a/apps/plugins/dice.c b/apps/plugins/dice.c
index 7d4745e..c20b385 100644
--- a/apps/plugins/dice.c
+++ b/apps/plugins/dice.c
@@ -87,6 +87,8 @@
 #define DICE_BUTTON_LEFT       BUTTON_LEFT
 #define DICE_BUTTON_RIGHT      BUTTON_RIGHT
 
+#define DICE_BUTTON_RC_OFF     BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define DICE_BUTTON_UP         BUTTON_SCROLL_FWD
 #define DICE_BUTTON_DOWN       BUTTON_SCROLL_BACK
@@ -205,7 +207,9 @@
                     print_dice(dice, total);
                 }
                 break;
-
+#ifdef DICE_BUTTON_RC_OFF
+            case DICE_BUTTON_RC_OFF:
+#endif
             case DICE_BUTTON_OFF:
                 selected = EXIT;
                 break;
diff --git a/apps/plugins/fire.c b/apps/plugins/fire.c
index e066362..7e0c3ba 100644
--- a/apps/plugins/fire.c
+++ b/apps/plugins/fire.c
@@ -49,6 +49,8 @@
 #define FIRE_INCREASE_MULT BUTTON_UP
 #define FIRE_DECREASE_MULT BUTTON_DOWN
 
+#define FIRE_RC_QUIT BUTTON_RC_STOP
+
 #elif CONFIG_KEYPAD == RECORDER_PAD
 #define FIRE_QUIT BUTTON_OFF
 #define FIRE_SWITCH_FLAMES_TYPE BUTTON_ON
@@ -357,6 +359,9 @@
 
         switch(button)
         {
+#ifdef FIRE_RC_QUIT
+            case FIRE_RC_QUIT :
+#endif
             case(FIRE_QUIT):
                 cleanup(NULL);
                 return PLUGIN_OK;
diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c
index 164949b..4cc7959 100644
--- a/apps/plugins/flipit.c
+++ b/apps/plugins/flipit.c
@@ -52,6 +52,8 @@
 #define FLIPIT_TOGGLE_PRE BUTTON_SELECT
 #define FLIPIT_TOGGLE (BUTTON_SELECT | BUTTON_REL)
 
+#define FLIPIT_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 
@@ -336,6 +338,9 @@
     while(true) {
         button = rb->button_get(true);
         switch (button) {
+#ifdef FLIPIT_RC_QUIT
+            case FLIPIT_RC_QUIT:
+#endif
             case FLIPIT_QUIT:
                 /* get out of here */
                 return PLUGIN_OK;
diff --git a/apps/plugins/grayscale.c b/apps/plugins/grayscale.c
index 182c081..162f8d7 100644
--- a/apps/plugins/grayscale.c
+++ b/apps/plugins/grayscale.c
@@ -51,6 +51,8 @@
 #define GRAYSCALE_RIGHT BUTTON_RIGHT
 #define GRAYSCALE_OFF BUTTON_OFF
 
+#define GRAYSCALE_RC_OFF BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
 #define GRAYSCALE_SHIFT (BUTTON_SELECT | BUTTON_REL)
 #define GRAYSCALE_UP BUTTON_MENU
@@ -315,7 +317,9 @@
                 gray_scroll_down(scroll_amount);  /* scroll down */
                 gray_update();
                 break;
-
+#ifdef GRAYSCALE_RC_OFF
+            case GRAYSCALE_RC_OFF:
+#endif
             case GRAYSCALE_OFF:
 
                 cleanup(NULL);
diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c
index 02cb8e0..02516d7 100644
--- a/apps/plugins/jewels.c
+++ b/apps/plugins/jewels.c
@@ -51,6 +51,7 @@
 #define JEWELS_SELECT BUTTON_SELECT
 #define JEWELS_CANCEL BUTTON_OFF
 
+#define JEWELS_RC_CANCEL BUTTON_RC_STOP
 #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
 #define JEWELS_SCROLLWHEEL
 #define JEWELS_UP     BUTTON_MENU
@@ -1234,6 +1235,9 @@
                 break;
 
 #ifdef JEWELS_CANCEL
+#ifdef JEWELS_RC_CANCEL
+            case JEWELS_RC_CANCEL:
+#endif
             case JEWELS_CANCEL:
                 return BJ_QUIT;
 #endif
@@ -1415,6 +1419,9 @@
                 break;
 
 #ifdef JEWELS_CANCEL
+#ifdef JEWELS_RC_CANCEL
+            case JEWELS_RC_CANCEL:
+#endif
             case JEWELS_CANCEL:           /* end game */
                 return BJ_END;
                 break;
diff --git a/apps/plugins/jpeg.c b/apps/plugins/jpeg.c
index c36eb8a..5656aee 100644
--- a/apps/plugins/jpeg.c
+++ b/apps/plugins/jpeg.c
@@ -74,6 +74,7 @@
 #define JPEG_PREVIOUS BUTTON_ON
 #endif
 #define JPEG_MENU BUTTON_OFF
+#define JPEG_RC_MENU BUTTON_RC_STOP
 
 #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
 #define JPEG_ZOOM_IN BUTTON_SCROLL_FWD
@@ -2287,7 +2288,9 @@
 #endif
             return ZOOM_OUT;
             break;
-
+#ifdef JPEG_RC_MENU
+        case JPEG_RC_MENU:
+#endif
         case JPEG_MENU:
 #ifdef USEGSLIB
             gray_show(false); /* switch off grayscale overlay */
@@ -2559,7 +2562,9 @@
                                 rb->plugin_get_audio_buffer(&buf_images_size);
                         /*try again this file, now using the audio buffer */
                         return PLUGIN_OTHER;
-
+#ifdef JPEG_RC_MENU
+                    case JPEG_RC_MENU:
+#endif
                     case JPEG_MENU:
                         return PLUGIN_OK;
 
diff --git a/apps/plugins/mandelbrot.c b/apps/plugins/mandelbrot.c
index ac33e90..bd0994a 100644
--- a/apps/plugins/mandelbrot.c
+++ b/apps/plugins/mandelbrot.c
@@ -66,6 +66,8 @@
 #define MANDELBROT_MAXITER_DEC (BUTTON_ON | BUTTON_LEFT)
 #define MANDELBROT_RESET BUTTON_REC
 
+#define MANDELBROT_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define MANDELBROT_QUIT (BUTTON_SELECT | BUTTON_MENU)
@@ -516,6 +518,9 @@
 
         button = rb->button_get(true);
         switch (button) {
+#ifdef MANDELBROT_RC_QUIT
+        case MANDELBROT_RC_QUIT:
+#endif
         case MANDELBROT_QUIT:
 #ifdef USEGSLIB
             gray_release();
diff --git a/apps/plugins/midiplay.c b/apps/plugins/midiplay.c
index 4da4f05..1cdc438 100644
--- a/apps/plugins/midiplay.c
+++ b/apps/plugins/midiplay.c
@@ -40,6 +40,8 @@
 #define BTN_UP           BUTTON_UP
 #define BTN_DOWN         BUTTON_DOWN
 
+#define BTN_RC_QUIT      BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
 #define BTN_QUIT         (BUTTON_SELECT | BUTTON_MENU)
 #define BTN_RIGHT        BUTTON_RIGHT
@@ -300,7 +302,9 @@
                         tick();
                     break;
                 }
-
+#ifdef BTN_RC_QUIT
+                case BTN_RC_QUIT:
+#endif
                 case BTN_QUIT:
                     quit=1;
         }
diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c
index bdb6fd7..0b4f571 100644
--- a/apps/plugins/minesweeper.c
+++ b/apps/plugins/minesweeper.c
@@ -71,6 +71,8 @@
 #define MINESWP_RIGHT (BUTTON_ON | BUTTON_RIGHT)
 #define MINESWP_LEFT (BUTTON_ON | BUTTON_LEFT)
 
+#define MINESWP_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define MINESWP_UP BUTTON_SCROLL_BACK
@@ -506,7 +508,9 @@
             case MINESWP_START:/* start playing */
                 i = 1;
                 break;
-
+#ifdef MINESWP_RC_QUIT
+            case MINESWP_RC_QUIT:
+#endif
             case MINESWP_QUIT:/* quit program */
                 return MINESWEEPER_QUIT;
 
@@ -580,6 +584,9 @@
         button = rb->button_get(true);
         switch(button){
             /* quit minesweeper (you really shouldn't use this button ...) */
+#ifdef MINESWP_RC_QUIT
+            case MINESWP_RC_QUIT:
+#endif
             case MINESWP_QUIT:
                 return MINESWEEPER_QUIT;
                                                 
diff --git a/apps/plugins/mosaique.c b/apps/plugins/mosaique.c
index 7f3dc65..b1f1481 100644
--- a/apps/plugins/mosaique.c
+++ b/apps/plugins/mosaique.c
@@ -53,6 +53,8 @@
 #define MOSAIQUE_SPEED BUTTON_MODE
 #define MOSAIQUE_RESTART BUTTON_ON
 
+#define MOSAIQUE_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define MOSAIQUE_QUIT BUTTON_MENU
@@ -136,6 +138,9 @@
         button = rb->button_get(false);
         switch (button)
         {
+#ifdef MOSAIQUE_RC_QUIT
+            case MOSAIQUE_RC_QUIT:
+#endif
             case MOSAIQUE_QUIT:
                 MYLCD(set_drawmode)(DRMODE_SOLID);
 #ifdef HAVE_LCD_CHARCELLS
diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c
index 3c20d39..bd8b949 100644
--- a/apps/plugins/oscilloscope.c
+++ b/apps/plugins/oscilloscope.c
@@ -62,6 +62,7 @@
 #define OSCILLOSCOPE_VOL_UP       BUTTON_UP
 #define OSCILLOSCOPE_VOL_DOWN     BUTTON_DOWN
 
+#define OSCILLOSCOPE_RC_QUIT      BUTTON_RC_STOP
 #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
 #define OSCILLOSCOPE_QUIT         (BUTTON_SELECT | BUTTON_MENU)
 #define OSCILLOSCOPE_DRAWMODE     (BUTTON_SELECT | BUTTON_PLAY)
@@ -583,6 +584,9 @@
         button = rb->button_get(paused);
         switch (button)
         {
+#ifdef OSCILLOSCOPE_RC_QUIT
+            case OSCILLOSCOPE_RC_QUIT:
+#endif
             case OSCILLOSCOPE_QUIT:
                 exit = true;
                 break;
diff --git a/apps/plugins/plasma.c b/apps/plugins/plasma.c
index d8be446..e2738ec 100644
--- a/apps/plugins/plasma.c
+++ b/apps/plugins/plasma.c
@@ -67,6 +67,9 @@
 #define PLASMA_QUIT BUTTON_OFF
 #define PLASMA_INCREASE_FREQUENCY BUTTON_UP
 #define PLASMA_DECREASE_FREQUENCY BUTTON_DOWN
+#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
+#define PLASMA_RC_QUIT            BUTTON_RC_STOP
+#endif
 #endif
 
 #ifdef HAVE_LCD_COLOR
@@ -283,6 +286,9 @@
 
         switch(button)
         {
+#ifdef PLASMA_RC_QUIT
+            case PLASMA_RC_QUIT:
+#endif
             case(PLASMA_QUIT):
                 cleanup(NULL);
                 return PLUGIN_OK;
diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c
index adba3f5..421ae02 100644
--- a/apps/plugins/pong.c
+++ b/apps/plugins/pong.c
@@ -57,6 +57,7 @@
 #define PONG_LEFT_DOWN BUTTON_DOWN
 #define PONG_RIGHT_UP BUTTON_ON
 #define PONG_RIGHT_DOWN BUTTON_MODE
+#define PONG_RC_QUIT BUTTON_RC_STOP
 
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
@@ -298,7 +299,11 @@
     while(end > *rb->current_tick) {
         key = rb->button_get_w_tmo(end - *rb->current_tick);
 
-        if(key & PONG_QUIT)
+        if(key & PONG_QUIT
+#ifdef PONG_RC_QUIT
+           || key & PONG_RC_QUIT
+#endif
+        )
             return 0; /* exit game NOW */
 
         if(key & PONG_LEFT_DOWN) /* player left goes down */
diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c
index 8ae2cb8..085db87 100644
--- a/apps/plugins/sliding_puzzle.c
+++ b/apps/plugins/sliding_puzzle.c
@@ -45,6 +45,8 @@
 #define PUZZLE_SHUFFLE BUTTON_SELECT
 #define PUZZLE_PICTURE BUTTON_ON
 
+#define PUZZLE_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define PUZZLE_QUIT    (BUTTON_SELECT | BUTTON_MENU)
@@ -291,6 +293,9 @@
     while(true) {
         button = rb->button_get(true);
         switch (button) {
+#ifdef PUZZLE_RC_QUIT
+            case PUZZLE_RC_QUIT:
+#endif
             case PUZZLE_QUIT:
                 /* get out of here */
                 return PLUGIN_OK;
diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c
index 3d12b67..55b3cbf 100644
--- a/apps/plugins/snake.c
+++ b/apps/plugins/snake.c
@@ -55,6 +55,8 @@
 #define SNAKE_DOWN BUTTON_DOWN
 #define SNAKE_PLAYPAUSE BUTTON_ON
 
+#define SNAKE_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define SNAKE_QUIT (BUTTON_SELECT|BUTTON_MENU)
@@ -219,6 +221,9 @@
     while (1) {
         button=rb->button_get(true);
         switch (button) {
+#ifdef SNAKE_RC_QUIT
+            case SNAKE_RC_QUIT:
+#endif
             case SNAKE_QUIT:
                 dead=1;
                 return;
@@ -275,6 +280,9 @@
              case BUTTON_LEFT:
                  if (dir!=1) dir=3;
                  break;
+#ifdef SNAKE_RC_QUIT
+             case SNAKE_RC_QUIT:
+#endif
              case SNAKE_QUIT:
                  dead=1;
                  return;
@@ -336,6 +344,9 @@
                 if (level>1)
                     level--;
                 break;
+#ifdef SNAKE_RC_QUIT
+            case SNAKE_RC_QUIT:
+#endif
             case SNAKE_QUIT:
                 dead=1;
                 return;
diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c
index 7fdf24e..f3dc4be 100644
--- a/apps/plugins/snake2.c
+++ b/apps/plugins/snake2.c
@@ -181,6 +181,7 @@
 #define SNAKE2_PLAYPAUSE BUTTON_ON
 #define SNAKE2_PLAYPAUSE_TEXT "Play"
 
+#define SNAKE2_RC_QUIT  BUTTON_RC_STOP
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define SNAKE2_UP   BUTTON_MENU
@@ -1134,6 +1135,9 @@
                  if (dir != EAST) set_direction(WEST);
                  break;
 
+#ifdef SNAKE2_RC_QUIT
+             case SNAKE2_RC_QUIT:
+#endif
              case SNAKE2_QUIT:
                  dead=1;
                  return;
diff --git a/apps/plugins/snow.c b/apps/plugins/snow.c
index 8042932..bde8be8 100644
--- a/apps/plugins/snow.c
+++ b/apps/plugins/snow.c
@@ -47,6 +47,9 @@
 #define SNOW_QUIT BUTTON_A
 #else
 #define SNOW_QUIT BUTTON_OFF
+#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
+#define SNOW_RC_QUIT BUTTON_RC_STOP
+#endif
 #endif
 
 static short particles[NUM_PARTICLES][2];
@@ -189,7 +192,11 @@
         
         button = rb->button_get(false);
 
-        if (button == SNOW_QUIT)
+        if (button == SNOW_QUIT
+#ifdef SNOW_RC_QUIT
+        || button == SNOW_RC_QUIT
+#endif
+        )
         {
 #ifdef HAVE_LCD_CHARCELLS
             pgfx_release();
diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c
index 93f7b7e..6dfbdc6 100644
--- a/apps/plugins/sokoban.c
+++ b/apps/plugins/sokoban.c
@@ -70,6 +70,8 @@
 #define SOKOBAN_LEVEL_DOWN BUTTON_REC
 #define SOKOBAN_LEVEL_REPEAT BUTTON_SELECT
 
+#define SOKOBAN_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define SOKOBAN_UP BUTTON_MENU
@@ -563,6 +565,9 @@
 
         switch(button)
         {
+#ifdef SOKOBAN_RC_QUIT
+            case SOKOBAN_RC_QUIT:
+#endif
             case SOKOBAN_QUIT:
                 /* get out of here */
 #ifdef HAVE_LCD_COLOR /* reset background color */
diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c
index 45d5695..56990be 100644
--- a/apps/plugins/solitaire.c
+++ b/apps/plugins/solitaire.c
@@ -109,6 +109,8 @@
 #define SOL_OPT BUTTON_ON
 #define SOL_REM BUTTON_REC
 
+#define SOL_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define SOL_QUIT (BUTTON_SELECT | BUTTON_MENU)
@@ -463,7 +465,9 @@
 #endif
                 rb->splash(HZ*2, true, HELP_SOL_REM2CUR);
                 break;
-
+#ifdef SOL_RC_QUIT
+            case SOL_RC_QUIT:
+#endif
             case SOL_QUIT:
                 return HELP_QUIT;
 
@@ -600,6 +604,10 @@
             case SOL_OPT:
                 return MENU_OPT;
 #endif
+
+#ifdef SOL_RC_QUIT
+            case SOL_RC_QUIT:
+#endif
             case SOL_QUIT:
                 return MENU_QUIT;
             
@@ -1460,6 +1468,9 @@
                 break;
 
             /* Show the menu */
+#ifdef SOL_RC_QUIT
+            case SOL_RC_QUIT:
+#endif
             case SOL_QUIT:
 #if LCD_DEPTH>1 
                 rb->lcd_set_background(LCD_DEFAULT_BG);
diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c
index c865af6..32ab4bd 100755
--- a/apps/plugins/spacerocks.c
+++ b/apps/plugins/spacerocks.c
@@ -65,6 +65,8 @@
 #define AST_FIRE BUTTON_SELECT
 #define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
 
+#define AST_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IAUDIO_X5_PAD)
 #define AST_PAUSE BUTTON_PLAY
 #define AST_QUIT BUTTON_POWER
@@ -1531,7 +1533,10 @@
                 else if(game_state == PAUSE_MODE)
                     game_state = PLAY_MODE;
                 break;  
-                
+
+#ifdef AST_RC_QUIT
+            case AST_RC_QUIT:
+#endif
             case(AST_QUIT):
                 if(game_state == ATTRACT_MODE)
                     return PLUGIN_OK;
diff --git a/apps/plugins/splitedit.c b/apps/plugins/splitedit.c
index 927c000..fa5ff8e 100644
--- a/apps/plugins/splitedit.c
+++ b/apps/plugins/splitedit.c
@@ -56,7 +56,7 @@
 #define SPLITEDIT_SPEED150 (BUTTON_REC | BUTTON_RIGHT)
 #define SPLITEDIT_MENU_RUN BUTTON_RIGHT
 
-
+#define SPLITEDIT_RC_QUIT BUTTON_RC_STOP
 #endif
 
 #define BMPHEIGHT 7
@@ -593,7 +593,11 @@
 
         button = rb->button_get(false);
 
-        if (button == SPLITEDIT_QUIT) {
+        if (button == SPLITEDIT_QUIT
+#ifdef SPLITEDIT_RC_QUIT
+            || button == SPLITEDIT_RC_QUIT:
+#endif
+        ) {
             rb->splash(0, true, "Aborting copy.");
             rb->button_get(true);
             rb->button_get(true);
@@ -887,7 +891,9 @@
                 break;
             }
             break;
-
+#ifdef SPLITEDIT_RC_QUIT
+        case SPLITEDIT_RC_QUIT:
+#endif
         case SPLITEDIT_QUIT:
             exit_request = true;
             break;
@@ -1171,6 +1177,9 @@
                 update_icons();
                 break;
 
+#ifdef SPLITEDIT_RC_QUIT
+            case SPLITEDIT_RC_QUIT:
+#endif
             case SPLITEDIT_QUIT:
                 exit_request = true;
                 break;
diff --git a/apps/plugins/star.c b/apps/plugins/star.c
index 5c89a79..10bc3fd 100644
--- a/apps/plugins/star.c
+++ b/apps/plugins/star.c
@@ -95,6 +95,7 @@
 #define STAR_LEVEL_REPEAT (BUTTON_MODE | BUTTON_UP)
 #define STAR_MENU_RUN BUTTON_RIGHT
 
+#define STAR_RC_QUIT BUTTON_RC_STOP
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 
@@ -687,6 +688,9 @@
             key = rb->button_get(true);
             switch (key)
             {
+#ifdef STAR_RC_QUIT
+                case STAR_RC_QUIT:
+#endif
                 case STAR_QUIT:
                     return 0;
 
@@ -905,6 +909,9 @@
         key = rb->button_get(false);
         switch (key)
         {
+#ifdef STAR_RC_QUIT
+            case STAR_RC_QUIT:
+#endif
             case STAR_QUIT:
                 return PLUGIN_OK;
             case STAR_UP:
diff --git a/apps/plugins/starfield.c b/apps/plugins/starfield.c
index 388d59b..64c2b34 100644
--- a/apps/plugins/starfield.c
+++ b/apps/plugins/starfield.c
@@ -51,6 +51,10 @@
 #define STARFIELD_DECREASE_ZMOVE BUTTON_DOWN
 #define STARFIELD_INCREASE_NB_STARS BUTTON_RIGHT
 #define STARFIELD_DECREASE_NB_STARS BUTTON_LEFT
+#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
+#define STARFIELD_RC_QUIT BUTTON_RC_STOP
+#endif
+
 #endif
 
 #define LCD_CENTER_X (LCD_WIDTH/2)
@@ -252,6 +256,9 @@
                 starfield_del_stars(&starfield, STARFIELD_INCREASE_STEP);
                 t_disp=MSG_DISP_TIME;
                 break;
+#ifdef STARFIELD_RC_QUIT
+            case STARFIELD_RC_QUIT:
+#endif
             case(STARFIELD_QUIT):
             case(SYS_USB_CONNECTED):
                 rb->backlight_set_timeout(rb->global_settings->backlight_timeout);
diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c
index 0aff7e2..d8204e4 100644
--- a/apps/plugins/stopwatch.c
+++ b/apps/plugins/stopwatch.c
@@ -63,6 +63,9 @@
 #define STOPWATCH_LAP_TIMER BUTTON_ON
 #define STOPWATCH_SCROLL_UP BUTTON_RIGHT
 #define STOPWATCH_SCROLL_DOWN BUTTON_LEFT
+
+#define STOPWATCH_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
 #define STOPWATCH_QUIT BUTTON_MENU
@@ -200,6 +203,9 @@
         {
 
             /* exit */
+#ifdef STOPWATCH_RC_QUIT
+            case STOPWATCH_RC_QUIT:
+#endif
             case STOPWATCH_QUIT:
                   done = true;
                   break;
diff --git a/apps/plugins/text_editor.c b/apps/plugins/text_editor.c
index f98194b..5abd484 100644
--- a/apps/plugins/text_editor.c
+++ b/apps/plugins/text_editor.c
@@ -35,6 +35,8 @@
 #define TEXT_EDITOR_DELETE BUTTON_REC
 #define TEXT_EDITOR_ITEM_MENU BUTTON_MODE
 
+#define TEXT_EDITOR_RC_CANCEL BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
 #define TEXT_EDITOR_SELECT_PRE    BUTTON_SELECT
 #define TEXT_EDITOR_SELECT ( BUTTON_SELECT | BUTTON_REL)
@@ -462,6 +464,9 @@
                 if (last_button != TEXT_EDITOR_CANCEL_PRE)
                     break;
 #endif
+#ifdef TEXT_EDITOR_RC_CANCEL
+            case TEXT_EDITOR_RC_CANCEL:
+#endif
                 if (changed)
                 {
                     int m;
diff --git a/apps/plugins/viewer.c b/apps/plugins/viewer.c
index 4e72aa1..9c60fd1 100644
--- a/apps/plugins/viewer.c
+++ b/apps/plugins/viewer.c
@@ -110,6 +110,8 @@
 #define VIEWER_COLUMN_LEFT (BUTTON_ON | BUTTON_LEFT)
 #define VIEWER_COLUMN_RIGHT (BUTTON_ON | BUTTON_RIGHT)
 
+#define VIEWER_RC_QUIT BUTTON_RC_STOP
+
 /* iPods with the 4G pad */
 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
       (CONFIG_KEYPAD == IPOD_3G_PAD)
@@ -1368,6 +1370,9 @@
                 break;
 #endif
 
+#ifdef VIEWER_RC_QUIT
+            case VIEWER_RC_QUIT:
+#endif
             case VIEWER_QUIT:
                 viewer_exit(NULL);
                 done = true;
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
index d903f97..d97c834 100644
--- a/apps/plugins/vu_meter.c
+++ b/apps/plugins/vu_meter.c
@@ -58,6 +58,8 @@
 #define VUMETER_UP BUTTON_UP
 #define VUMETER_DOWN BUTTON_DOWN
 
+#define VUMETER_RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || \
       (CONFIG_KEYPAD == IPOD_4G_PAD)
 #define VUMETER_QUIT BUTTON_MENU
@@ -521,6 +523,9 @@
         button = rb->button_get_w_tmo(1);
         switch (button)
         {
+#ifdef VUMETER_RC_QUIT
+            case VUMETER_RC_QUIT:
+#endif
             case VUMETER_QUIT:
                 save_settings();
                 return PLUGIN_OK;
diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c
index e4efa8f..6a4a5d2 100644
--- a/apps/plugins/wormlet.c
+++ b/apps/plugins/wormlet.c
@@ -83,6 +83,8 @@
 #define BTN_QUIT (BUTTON_SELECT|BUTTON_MENU)
 #define BTN_STOPRESET (BUTTON_SELECT|BUTTON_PLAY)
 
+#define BTN_RC_QUIT BUTTON_RC_STOP
+
 #define PLAYERS_TEXT "Menu/Play"
 #define WORMS_TEXT "Left/Right"
 
@@ -1487,6 +1489,9 @@
                 else
                     paused = true;
                 break;
+#ifdef BTN_RC_QUIT
+            case BTN_RC_QUIT:
+#endif
             case BTN_QUIT:
                 return 2;  /* back to menu */
                 break;
diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c
index a4200f0..3ae9e22 100644
--- a/apps/plugins/xobox.c
+++ b/apps/plugins/xobox.c
@@ -31,6 +31,8 @@
 #define DOWN BUTTON_DOWN
 #define SELECT BUTTON_SELECT
 
+#define RC_QUIT BUTTON_RC_STOP
+
 #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || \
       (CONFIG_KEYPAD == IPOD_4G_PAD)
 
@@ -729,6 +731,9 @@
             case RIGHT:
                 quit = true;
                 break;
+#ifdef RC_QUIT
+            case RC_QUIT:
+#endif
             case QUIT:
                 selection = MENU_QUIT;
                 quit = true;