Index: apps/settings.c
===================================================================
RCS file: /cvsroot/rockbox/apps/settings.c,v
retrieving revision 1.367
diff -u -r1.367 settings.c
--- apps/settings.c	21 Mar 2006 23:20:17 -0000	1.367
+++ apps/settings.c	22 Mar 2006 15:18:21 -0000
@@ -1115,6 +1115,10 @@
 #ifdef HAVE_SPDIF_POWER
     spdif_power_enable(global_settings.spdif_enable);
 #endif
+
+#if (CONFIG_KEYPAD == IRIVER_H300_PAD)
+    set_backlight_on_keypress(global_settings.backlight_behaviour);
+#endif
 }
 
 
Index: apps/settings.h
===================================================================
RCS file: /cvsroot/rockbox/apps/settings.h,v
retrieving revision 1.209
diff -u -r1.209 settings.h
--- apps/settings.h	19 Mar 2006 17:42:57 -0000	1.209
+++ apps/settings.h	22 Mar 2006 15:18:22 -0000
@@ -472,6 +472,10 @@
     int fg_color; /* foreground color native format */
 #endif
     bool party_mode;	/* party mode - unstoppable music */
+    
+#if (CONFIG_KEYPAD == IRIVER_H300_PAD)
+    int backlight_behaviour;
+#endif
 };
 
 enum optiontype { INT, BOOL };
Index: apps/settings_menu.c
===================================================================
RCS file: /cvsroot/rockbox/apps/settings_menu.c,v
retrieving revision 1.240
diff -u -r1.240 settings_menu.c
--- apps/settings_menu.c	19 Mar 2006 17:42:57 -0000	1.240
+++ apps/settings_menu.c	22 Mar 2006 15:18:23 -0000
@@ -1046,6 +1046,20 @@
     return set_bool( str(LANG_PARTY_MODE), &global_settings.party_mode );
 }
 
+#if (CONFIG_KEYPAD == IRIVER_H300_PAD)
+static int set_backlight_behaviour(void)
+{
+    static const struct opt_items names[] = {
+        { STR(LANG_NAVI_BACKLIGHT_NONE) }, 
+        { STR(LANG_NAVI_BACKLIGHT_ONLYNAVI) }, 
+        { STR(LANG_NAVI_BACKLIGHT_ALLBUTTONS) }
+    };
+    int result = set_option( str(LANG_NAVI_BACKLIGHT), 
+                       &global_settings.backlight_behaviour, INT, names, 3, NULL);
+    set_backlight_on_keypress(global_settings.backlight_behaviour);
+    return result;
+}
+#endif 
 
 static bool ff_rewind_accel(void) 
 { 
@@ -1634,6 +1648,9 @@
         { ID2P(LANG_FOREGROUND_COLOR), set_fg_color },
         { ID2P(LANG_RESET_COLORS),     reset_color },
 #endif
+#if (CONFIG_KEYPAD == IRIVER_H300_PAD)
+        { ID2P(LANG_NAVI_BACKLIGHT),   set_backlight_behaviour },
+#endif
     };
 
     m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
Index: apps/lang/english.lang
===================================================================
RCS file: /cvsroot/rockbox/apps/lang/english.lang,v
retrieving revision 1.230
diff -u -r1.230 english.lang
--- apps/lang/english.lang	21 Mar 2006 12:05:03 -0000	1.230
+++ apps/lang/english.lang	22 Mar 2006 15:18:32 -0000
@@ -3832,3 +3832,27 @@
 eng: "Pitch"
 voice: "Pitch"
 new:
+
+id: LANG_NAVI_BACKLIGHT
+desc: NAVI backlight setting for H300
+eng: "Only backlight on keypress..."
+voice: "Only backlight on keypress"
+new:
+
+id: LANG_NAVI_BACKLIGHT_NONE
+desc: NAVI backlight setting for H300
+eng: "None"
+voice: "None"
+new:
+
+id: LANG_NAVI_BACKLIGHT_ONLYNAVI
+desc: NAVI backlight setting for H300
+eng: "Only NAVI"
+voice: "Only NAVI"
+new:
+
+id: LANG_NAVI_BACKLIGHT_ALLBUTTONS
+desc: NAVI backlight setting for H300
+eng: "All buttons"
+voice: "All buttons"
+new:
\ No newline at end of file
Index: firmware/backlight.c
===================================================================
RCS file: /cvsroot/rockbox/firmware/backlight.c,v
retrieving revision 1.78
diff -u -r1.78 backlight.c
--- firmware/backlight.c	19 Mar 2006 17:42:58 -0000	1.78
+++ firmware/backlight.c	22 Mar 2006 15:18:34 -0000
@@ -510,6 +510,14 @@
     queue_post(&backlight_queue, BACKLIGHT_OFF, NULL);
 }
 
+bool is_backlight_on(void)
+{
+    if (backlight_timer != 0 || backlight_get_current_timeout() == 0)
+        return true;
+    else
+        return false;
+}
+
 /* return value in ticks; 0 means always on, <0 means always off */
 int backlight_get_current_timeout(void)
 {
Index: firmware/drivers/button.c
===================================================================
RCS file: /cvsroot/rockbox/firmware/drivers/button.c,v
retrieving revision 1.131
diff -u -r1.131 button.c
--- firmware/drivers/button.c	21 Mar 2006 10:33:11 -0000	1.131
+++ firmware/drivers/button.c	22 Mar 2006 15:18:36 -0000
@@ -52,6 +52,11 @@
 #ifdef HAVE_LCD_BITMAP
 static bool flipped;  /* buttons can be flipped to match the LCD flip */
 #endif
+#if (CONFIG_KEYPAD == IRIVER_H300_PAD)
+/* on H300, the first press on NAVI will only turn the backlight on,
+if "navi_backlight" is "true" */
+static int backlight_on_keypress;
+#endif
 
 /* how often we check to see if a button is pressed */
 #define POLL_FREQUENCY    HZ/100
@@ -504,7 +509,19 @@
                     }
                     else
                     {
+#if (CONFIG_KEYPAD == IRIVER_H300_PAD)
+                        if (backlight_on_keypress == 0 || is_backlight_on())
+                        {
+                            queue_post(&button_queue, btn, NULL);
+                        }
+                        else
+                        {
+                            if (btn != BUTTON_SELECT && backlight_on_keypress == 1)
+                                queue_post(&button_queue, btn, NULL);
+                        }
+#else
                         queue_post(&button_queue, btn, NULL);
+#endif
                         post = false;
                     }
 #ifdef HAVE_REMOTE_LCD
@@ -629,6 +646,9 @@
 #ifdef HAVE_LCD_BITMAP
     flipped = false;
 #endif
+#if (CONFIG_KEYPAD == IRIVER_H300_PAD)
+    backlight_on_keypress = 0;
+#endif
 }
 
 #ifdef HAVE_LCD_BITMAP /* only bitmap displays can be flipped */
@@ -687,6 +707,13 @@
 }
 #endif /* HAVE_LCD_BITMAP */
 
+#if (CONFIG_KEYPAD == IRIVER_H300_PAD)
+void set_backlight_on_keypress(int value)
+{
+    backlight_on_keypress = value;
+}
+#endif
+
 /*
  Archos hardware button hookup
  =============================
Index: firmware/export/backlight.h
===================================================================
RCS file: /cvsroot/rockbox/firmware/export/backlight.h,v
retrieving revision 1.13
diff -u -r1.13 backlight.h
--- firmware/export/backlight.h	19 Mar 2006 17:42:58 -0000	1.13
+++ firmware/export/backlight.h	22 Mar 2006 15:18:40 -0000
@@ -21,6 +21,7 @@
 
 #include "config.h"
 
+bool is_backlight_on(void);
 void backlight_on(void);
 void backlight_off(void);
 void backlight_set_timeout(int index);
Index: firmware/export/button.h
===================================================================
RCS file: /cvsroot/rockbox/firmware/export/button.h,v
retrieving revision 1.47
diff -u -r1.47 button.h
--- firmware/export/button.h	21 Mar 2006 10:33:11 -0000	1.47
+++ firmware/export/button.h	22 Mar 2006 15:18:40 -0000
@@ -42,6 +42,9 @@
 #ifdef HAVE_LCD_BITMAP
 void button_set_flip(bool flip); /* turn 180 degrees */
 #endif
+#if (CONFIG_KEYPAD == IRIVER_H300_PAD)
+void set_backlight_on_keypress(int value);
+#endif
 
 #ifdef HAS_BUTTON_HOLD
 bool button_hold(void);
