diff -Nurb rockbox.orig/apps/lang/english.lang rockbox.bl/apps/lang/english.lang
--- rockbox.orig/apps/lang/english.lang 2007-12-31 22:36:52.000000000 +0200
+++ rockbox.bl/apps/lang/english.lang 2008-01-01 19:59:11.000000000 +0200
@@ -11540,3 +11540,73 @@
*: "Save Sound Settings"
+
+ id: LANG_BACKLIGHT_FILTER_BUTTONS
+ desc: in settings
+ user:
+
+ *: "Which Buttons Turn Backlight On"
+
+
+ *: "Which Buttons Turn Backlight On"
+
+
+ *: "Which Buttons Turn Backlight On"
+
+
+
+ id: LANG_BACKLIGHT_FILTER_BUTTONS_ALL
+ desc: in settings
+ user:
+
+ *: "All"
+
+
+ *: "All"
+
+
+ *: "All"
+
+
+
+ id: LANG_BACKLIGHT_FILTER_BUTTONS_SELECT
+ desc: in settings
+ user:
+
+ *: "SELECT"
+
+
+ *: "SELECT"
+
+
+ *: "SELECT"
+
+
+
+ id: LANG_BACKLIGHT_FILTER_BUTTONS_POWER
+ desc: in settings
+ user:
+
+ *: "POWER"
+
+
+ *: "POWER"
+
+
+ *: "POWER"
+
+
+
+ id: LANG_BACKLIGHT_FILTER_BUTTONS_SELECT_POWER
+ desc: in settings
+ user:
+
+ *: "SELECT and POWER"
+
+
+ *: "SELECT and POWER"
+
+
+ *: "SELECT and POWER"
+
+
diff -Nurb rockbox.orig/apps/menus/display_menu.c rockbox.bl/apps/menus/display_menu.c
--- rockbox.orig/apps/menus/display_menu.c 2007-12-31 22:36:52.000000000 +0200
+++ rockbox.bl/apps/menus/display_menu.c 2007-12-31 22:43:13.000000000 +0200
@@ -57,6 +57,17 @@
}
return action;
}
+int filterbuttons_callback(int action,const struct menu_item_ex *this_item)
+{
+ (void)this_item;
+ switch (action)
+ {
+ case ACTION_EXIT_MENUITEM:
+ set_backlight_filter_buttons(global_settings.bl_filter_buttons);
+ break;
+ }
+ return action;
+}
#endif
#ifdef HAVE_LCD_BITMAP
int flipdisplay_callback(int action,const struct menu_item_ex *this_item)
@@ -97,6 +108,9 @@
MENUITEM_SETTING(bl_filter_first_keypress,
&global_settings.bl_filter_first_keypress,
filterfirstkeypress_callback);
+MENUITEM_SETTING(bl_filter_buttons,
+ &global_settings.bl_filter_buttons,
+ filterbuttons_callback);
#ifdef HAVE_LCD_SLEEP
MENUITEM_SETTING(lcd_sleep_after_backlight_off,
&global_settings.lcd_sleep_after_backlight_off, NULL);
@@ -133,6 +147,7 @@
,&backlight_fade_in, &backlight_fade_out
# endif
,&bl_filter_first_keypress
+ ,&bl_filter_buttons
# ifdef HAVE_LCD_SLEEP
,&lcd_sleep_after_backlight_off
# endif
diff -Nurb rockbox.orig/apps/settings.c rockbox.bl/apps/settings.c
--- rockbox.orig/apps/settings.c 2007-12-31 22:36:53.000000000 +0200
+++ rockbox.bl/apps/settings.c 2007-12-31 22:43:13.000000000 +0200
@@ -915,6 +915,7 @@
#ifdef HAVE_BACKLIGHT
set_backlight_filter_keypress(global_settings.bl_filter_first_keypress);
+ set_backlight_filter_buttons(global_settings.bl_filter_buttons);
#ifdef HAVE_REMOTE_LCD
set_remote_backlight_filter_keypress(global_settings.remote_bl_filter_first_keypress);
#endif
diff -Nurb rockbox.orig/apps/settings.h rockbox.bl/apps/settings.h
--- rockbox.orig/apps/settings.h 2007-12-31 22:36:53.000000000 +0200
+++ rockbox.bl/apps/settings.h 2007-12-31 22:43:13.000000000 +0200
@@ -629,6 +629,8 @@
#ifdef HAVE_BACKLIGHT
bool bl_filter_first_keypress; /* filter first keypress when dark? */
+ int bl_filter_buttons; /* which buttons will turn bl on? 1=SELECT, 2=SELECT|POWER,
+ anything other -- all buttons */
#ifdef HAVE_REMOTE_LCD
bool remote_bl_filter_first_keypress; /* filter first remote keypress when remote dark? */
#endif
diff -Nurb rockbox.orig/apps/settings_list.c rockbox.bl/apps/settings_list.c
--- rockbox.orig/apps/settings_list.c 2007-12-31 22:36:52.000000000 +0200
+++ rockbox.bl/apps/settings_list.c 2008-01-01 19:57:52.000000000 +0200
@@ -506,6 +506,12 @@
OFFON_SETTING(0,bl_filter_first_keypress,
LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
"backlight filters first keypress", NULL),
+ CHOICE_SETTING(0,bl_filter_buttons, LANG_BACKLIGHT_FILTER_BUTTONS, 0,
+ "backlight on buttons","all,select,power,select+power", NULL, 4,
+ ID2P(LANG_BACKLIGHT_FILTER_BUTTONS_ALL),
+ ID2P(LANG_BACKLIGHT_FILTER_BUTTONS_SELECT),
+ ID2P(LANG_BACKLIGHT_FILTER_BUTTONS_POWER),
+ ID2P(LANG_BACKLIGHT_FILTER_BUTTONS_SELECT_POWER)),
#ifdef HAVE_REMOTE_LCD
OFFON_SETTING(0,remote_bl_filter_first_keypress,
LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
diff -Nurb rockbox.orig/firmware/drivers/button.c rockbox.bl/firmware/drivers/button.c
--- rockbox.orig/firmware/drivers/button.c 2007-12-31 22:37:04.000000000 +0200
+++ rockbox.bl/firmware/drivers/button.c 2008-01-01 20:05:47.000000000 +0200
@@ -56,6 +56,7 @@
#endif
#ifdef HAVE_BACKLIGHT
static bool filter_first_keypress;
+static long backlight_on_button_mask = -1;
#ifdef HAVE_REMOTE_LCD
static bool remote_filter_first_keypress;
#endif
@@ -250,15 +251,16 @@
skip_remote_release = true;
}
else
+ {
#endif
- if (!filter_first_keypress || is_backlight_on()
-#if BUTTON_REMOTE
- || (btn&BUTTON_REMOTE)
-#endif
- )
+ if (is_backlight_on() || !filter_first_keypress
+ || (filter_first_keypress && !(btn & backlight_on_button_mask)))
queue_post(&button_queue, btn, data);
else
skip_release = true;
+#ifdef HAVE_REMOTE_LCD
+ }
+#endif
#else /* no backlight, nothing to skip */
queue_post(&button_queue, btn, data);
#endif
@@ -270,11 +272,15 @@
else
#endif
{
+ /* any button press should keep backlight lit,
+ * but only some may turn it on */
+ if(is_backlight_on() || (btn & backlight_on_button_mask)) {
backlight_on();
#ifdef HAVE_BUTTON_LIGHT
buttonlight_on();
#endif
}
+ }
reset_poweroff_timer();
}
@@ -468,6 +474,41 @@
{
filter_first_keypress = value;
}
+
+#if defined BUTTON_SELECT
+#define BACKLIGHT_BTN_SELECT BUTTON_SELECT
+#elif defined BUTTON_PLAY
+#define BACKLIGHT_BTN_SELECT BUTTON_PLAY
+#else
+#error Can't guess BACKLIGHT_BTN_SELECT for this target
+#endif
+
+#if defined BUTTON_POWER
+#define BACKLIGHT_BTN_POWER BUTTON_POWER
+#elif defined BUTTON_ON && defined BUTTON_OFF
+#define BACKLIGHT_BTN_POWER BUTTON_ON | BUTTON_OFF
+#elif defined BUTTON_ON
+#define BACKLIGHT_BTN_POWER BUTTON_ON
+#else
+#error Can't guess BACKLIGHT_BTN_POWER for this targer
+#endif
+
+void set_backlight_filter_buttons(int value)
+{
+ switch(value) {
+ case 1:
+ backlight_on_button_mask = BACKLIGHT_BTN_SELECT;
+ break;
+ case 2:
+ backlight_on_button_mask = BACKLIGHT_BTN_POWER;
+ break;
+ case 3:
+ backlight_on_button_mask = BACKLIGHT_BTN_SELECT | BACKLIGHT_BTN_POWER;
+ break;
+ default:
+ backlight_on_button_mask = -1;
+ }
+}
#ifdef HAVE_REMOTE_LCD
void set_remote_backlight_filter_keypress(bool value)
{
diff -Nurb rockbox.orig/firmware/export/button.h rockbox.bl/firmware/export/button.h
--- rockbox.orig/firmware/export/button.h 2007-12-31 22:37:04.000000000 +0200
+++ rockbox.bl/firmware/export/button.h 2007-12-31 22:43:13.000000000 +0200
@@ -38,6 +38,7 @@
#endif
#ifdef HAVE_BACKLIGHT
void set_backlight_filter_keypress(bool value);
+void set_backlight_filter_buttons(int value);
#ifdef HAVE_REMOTE_LCD
void set_remote_backlight_filter_keypress(bool value);
#endif