Handle SYS_POWEROFF event in recorder and chessbox plugins

Credit to Igor Poretsky

Change-Id: I151d3511b9cee269190d87df7fa7dd355aaafc9b
diff --git a/apps/plugins/chessbox/chessbox.c b/apps/plugins/chessbox/chessbox.c
index 7d42b72..c7cd94c 100644
--- a/apps/plugins/chessbox/chessbox.c
+++ b/apps/plugins/chessbox/chessbox.c
@@ -92,6 +92,9 @@
 /* "While thinking" command */
 int wt_command = COMMAND_NOP;
 
+/* System event id */
+static long cb_sysevent = 0;
+
 /* ---- Get the board column and row (e2 f.e.) for a physical x y ---- */
 static void xy2cr ( short x, short y, short *c, short *r ) {
     if (computer == black ) {
@@ -189,12 +192,14 @@
     wt_command = COMMAND_NOP;
     button = rb->button_get(false);
     switch (button) {
+        case SYS_POWEROFF:
+            cb_sysevent = button;
 #ifdef CB_RC_QUIT
         case CB_RC_QUIT:
+#endif
             wt_command = COMMAND_QUIT;
             timeout = true;
             break;
-#endif
         case CB_MENU:
             wt_command = COMMAND_MENU;
             timeout = true;
@@ -531,11 +536,13 @@
     while ( true ) {
         button = rb->button_get(true);
         switch (button) {
+            case SYS_POWEROFF:
+                cb_sysevent = button;
 #ifdef CB_RC_QUIT
             case CB_RC_QUIT:
+#endif
                 result.type = COMMAND_QUIT;
                 return result;
-#endif
 #ifdef CB_RESTART
             case CB_RESTART:
                 result.type = COMMAND_RESTART;
@@ -764,11 +771,13 @@
     while ( true ) {
         button = rb->button_get(true);
         switch (button) {
+            case SYS_POWEROFF:
+                cb_sysevent = button;
 #ifdef CB_RC_QUIT
             case CB_RC_QUIT:
+#endif
                 result.type = COMMAND_QUIT;
                 return result;
-#endif
 #ifdef CB_RESTART
             case CB_RESTART:
                 result.type = COMMAND_RESTART;
@@ -1058,6 +1067,7 @@
 #if LCD_DEPTH > 1
     rb->lcd_set_backdrop(NULL);
 #endif
+    cb_sysevent = 0;
 
     /* end of plugin init */
 
@@ -1070,5 +1080,8 @@
         cb_play_game();
     }
 
+    if (cb_sysevent)
+        rb->default_event_handler(cb_sysevent);
+
     return PLUGIN_OK;
 }
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c
index 0098fea..0ab5654 100644
--- a/apps/recorder/recording.c
+++ b/apps/recorder/recording.c
@@ -1615,6 +1615,11 @@
                 break;
 #endif /*  CONFIG_KEYPAD == RECORDER_PAD */
 
+            case SYS_POWEROFF:
+                default_event_handler(SYS_POWEROFF);
+                done = true;
+                break;
+
             case SYS_USB_CONNECTED:
                 /* Only accept USB connection when not recording */
                 if(!(audio_stat & AUDIO_STATUS_RECORD))