diff -Nur rockbox.orig/apps/lang/english.lang rockbox.bl/apps/lang/english.lang
--- rockbox.orig/apps/lang/english.lang 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/apps/lang/english.lang 2008-01-29 11:42:10.000000000 +0200
@@ -11574,3 +11574,72 @@
swcodec: "Keyclick Repeats"
+
+ id: LANG_BACKLIGHT_FILTER_BUTTONS
+ desc: in settings
+ user:
+
+ *: "Backlight On Buttons"
+
+
+ *: "Backlight On Buttons"
+
+
+ *: "Backlight On Buttons"
+
+
+
+ id: LANG_BACKLIGHT_FILTER_BUTTONS_ALL
+ desc: in settings
+ user:
+
+ *: "All"
+
+
+ *: "All"
+
+
+ *: "All"
+
+
+
+ id: LANG_BACKLIGHT_FILTER_BUTTONS_SELECTED
+ desc: in settings
+ user:
+
+ *: "Selected only"
+ ipod*: "PLAY, SELECT and MENU"
+ h10: "POWER only"
+ ifp7xx: "SELECT and PLAY"
+ gigabeatf: "POWER, SELECT and MENU"
+ c200,e200,x5,e5: "POWER and SELECT"
+ h100,h120,h300: "ON, OFF and SELECT"
+ recorderv2: "ON and OFF"
+ ondiosp: "OFF and MENU"
+ player: "ON and MENU"
+
+
+ *: "Selected only"
+ ipod*: "PLAY, SELECT and MENU"
+ h10: "POWER only"
+ ifp7xx: "SELECT and PLAY"
+ gigabeatf: "POWER, SELECT and MENU"
+ c200,e200,x5,e5: "POWER and SELECT"
+ h100,h120,h300: "ON, OFF and SELECT"
+ recorderv2: "ON and OFF"
+ ondiosp: "OFF and MENU"
+ player: "ON and MENU"
+
+
+ *: "Selected only"
+ ipod*: "PLAY, SELECT and MENU"
+ h10: "POWER only"
+ ifp7xx: "SELECT and PLAY"
+ gigabeatf: "POWER, SELECT and MENU"
+ c200,e200,x5,e5: "POWER and SELECT"
+ h100,h120,h300: "ON, OFF and SELECT"
+ recorderv2: "ON and OFF"
+ ondiosp: "OFF and MENU"
+ player: "ON and MENU"
+
+
diff -Nur rockbox.orig/apps/menus/display_menu.c rockbox.bl/apps/menus/display_menu.c
--- rockbox.orig/apps/menus/display_menu.c 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/apps/menus/display_menu.c 2008-01-29 11:42:10.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 -Nur rockbox.orig/apps/settings.c rockbox.bl/apps/settings.c
--- rockbox.orig/apps/settings.c 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/apps/settings.c 2008-01-29 11:42:10.000000000 +0200
@@ -923,6 +923,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 -Nur rockbox.orig/apps/settings.h rockbox.bl/apps/settings.h
--- rockbox.orig/apps/settings.h 2008-01-29 11:41:38.000000000 +0200
+++ rockbox.bl/apps/settings.h 2008-01-29 11:42:10.000000000 +0200
@@ -635,6 +635,7 @@
#ifdef HAVE_BACKLIGHT
bool bl_filter_first_keypress; /* filter first keypress when dark? */
+ bool bl_filter_buttons; /* prevent some buttons from turning backlight on */
#ifdef HAVE_REMOTE_LCD
bool remote_bl_filter_first_keypress; /* filter first remote keypress when remote dark? */
#endif
diff -Nur rockbox.orig/apps/settings_list.c rockbox.bl/apps/settings_list.c
--- rockbox.orig/apps/settings_list.c 2008-01-29 11:41:38.000000000 +0200
+++ rockbox.bl/apps/settings_list.c 2008-01-29 11:42:10.000000000 +0200
@@ -506,6 +506,10 @@
OFFON_SETTING(0,bl_filter_first_keypress,
LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
"backlight filters first keypress", NULL),
+ BOOL_SETTING(0,bl_filter_buttons, LANG_BACKLIGHT_FILTER_BUTTONS, false,
+ "backlight on buttons", "all,selected",
+ LANG_BACKLIGHT_FILTER_BUTTONS_SELECTED, LANG_BACKLIGHT_FILTER_BUTTONS_ALL,
+ set_backlight_filter_buttons),
#ifdef HAVE_REMOTE_LCD
OFFON_SETTING(0,remote_bl_filter_first_keypress,
LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
diff -Nur rockbox.orig/firmware/drivers/button.c rockbox.bl/firmware/drivers/button.c
--- rockbox.orig/firmware/drivers/button.c 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/drivers/button.c 2008-01-29 11:42:10.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
@@ -257,15 +258,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
@@ -277,11 +279,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();
}
@@ -478,6 +484,15 @@
{
filter_first_keypress = value;
}
+
+void set_backlight_filter_buttons(bool value)
+{
+ if(value)
+ backlight_on_button_mask = BACKLIGHT_BUTTON;
+ else
+ backlight_on_button_mask = -1;
+}
+
#ifdef HAVE_REMOTE_LCD
void set_remote_backlight_filter_keypress(bool value)
{
diff -Nur rockbox.orig/firmware/export/button.h rockbox.bl/firmware/export/button.h
--- rockbox.orig/firmware/export/button.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/export/button.h 2008-01-29 11:42:10.000000000 +0200
@@ -38,6 +38,7 @@
#endif
#ifdef HAVE_BACKLIGHT
void set_backlight_filter_keypress(bool value);
+void set_backlight_filter_buttons(bool value);
#ifdef HAVE_REMOTE_LCD
void set_remote_backlight_filter_keypress(bool value);
#endif
diff -Nur rockbox.orig/firmware/target/arm/archos/av300/button-target.h rockbox.bl/firmware/target/arm/archos/av300/button-target.h
--- rockbox.orig/firmware/target/arm/archos/av300/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/arm/archos/av300/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -46,4 +46,6 @@
|BUTTON_UP|BUTTON_DOWN|BUTTON_SELECT\
|BUTTON_F1|BUTTON_F2|BUTTON_F3)
+#define BACKLIGHT_BUTTON BUTTON_ON | BUTTON_OFF | BUTTON_SELECT
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/arm/imx31/gigabeat-s/button-target.h rockbox.bl/firmware/target/arm/imx31/gigabeat-s/button-target.h
--- rockbox.orig/firmware/target/arm/imx31/gigabeat-s/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/arm/imx31/gigabeat-s/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -56,4 +56,6 @@
#define POWEROFF_BUTTON BUTTON_POWER
#define POWEROFF_COUNT 10
+#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT | BUTTON_MENU
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/arm/ipod/button-target.h rockbox.bl/firmware/target/arm/ipod/button-target.h
--- rockbox.orig/firmware/target/arm/ipod/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/arm/ipod/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -58,4 +58,6 @@
#define POWEROFF_BUTTON BUTTON_PLAY
#define POWEROFF_COUNT 40
+#define BACKLIGHT_BUTTON BUTTON_PLAY | BUTTON_SELECT | BUTTON_MENU
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/arm/iriver/h10/button-target.h rockbox.bl/firmware/target/arm/iriver/h10/button-target.h
--- rockbox.orig/firmware/target/arm/iriver/h10/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/arm/iriver/h10/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -65,4 +65,6 @@
#define RC_POWEROFF_BUTTON BUTTON_RC_PLAY
#define POWEROFF_COUNT 10
+#define BACKLIGHT_BUTTON BUTTON_POWER
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/arm/pnx0101/iriver-ifp7xx/button-target.h rockbox.bl/firmware/target/arm/pnx0101/iriver-ifp7xx/button-target.h
--- rockbox.orig/firmware/target/arm/pnx0101/iriver-ifp7xx/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/arm/pnx0101/iriver-ifp7xx/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -53,4 +53,6 @@
#define POWEROFF_BUTTON BUTTON_PLAY
#define POWEROFF_COUNT 40
+#define BACKLIGHT_BUTTON BUTTON_SELECT BUTTON_PLAY
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/arm/s3c2440/gigabeat-fx/button-target.h rockbox.bl/firmware/target/arm/s3c2440/gigabeat-fx/button-target.h
--- rockbox.orig/firmware/target/arm/s3c2440/gigabeat-fx/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/arm/s3c2440/gigabeat-fx/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -95,4 +95,6 @@
#define POWEROFF_BUTTON BUTTON_POWER
#define POWEROFF_COUNT 10
+#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT | BUTTON_MENU
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/arm/sandisk/sansa-c200/button-target.h rockbox.bl/firmware/target/arm/sandisk/sansa-c200/button-target.h
--- rockbox.orig/firmware/target/arm/sandisk/sansa-c200/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/arm/sandisk/sansa-c200/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -50,4 +50,6 @@
#define POWEROFF_BUTTON BUTTON_POWER
#define POWEROFF_COUNT 10
+#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/arm/sandisk/sansa-e200/button-target.h rockbox.bl/firmware/target/arm/sandisk/sansa-e200/button-target.h
--- rockbox.orig/firmware/target/arm/sandisk/sansa-e200/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/arm/sandisk/sansa-e200/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -51,4 +51,6 @@
#define POWEROFF_BUTTON BUTTON_POWER
#define POWEROFF_COUNT 10
+#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/arm/tatung/tpj1022/button-target.h rockbox.bl/firmware/target/arm/tatung/tpj1022/button-target.h
--- rockbox.orig/firmware/target/arm/tatung/tpj1022/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/arm/tatung/tpj1022/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -55,4 +55,6 @@
#define POWEROFF_BUTTON BUTTON_POWER
#define POWEROFF_COUNT 10
+#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_MENU
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/arm/tcc77x/logikdax/button-target.h rockbox.bl/firmware/target/arm/tcc77x/logikdax/button-target.h
--- rockbox.orig/firmware/target/arm/tcc77x/logikdax/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/arm/tcc77x/logikdax/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -48,4 +48,6 @@
#define POWEROFF_BUTTON BUTTON_POWERPLAY
#define POWEROFF_COUNT 40
+#define BACKLIGHT_BUTTON BUTTON_POWERPLAY BUTTON_SELECT
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/arm/tms320dm320/mrobe-500/button-target.h rockbox.bl/firmware/target/arm/tms320dm320/mrobe-500/button-target.h
--- rockbox.orig/firmware/target/arm/tms320dm320/mrobe-500/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/arm/tms320dm320/mrobe-500/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -67,4 +67,6 @@
BUTTON_RC_PLAY|BUTTON_RC_DOWN| \
BUTTON_RC_REW|BUTTON_RC_FF)
+#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_MODE
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/coldfire/iaudio/button-target.h rockbox.bl/firmware/target/coldfire/iaudio/button-target.h
--- rockbox.orig/firmware/target/coldfire/iaudio/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/coldfire/iaudio/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -70,4 +70,6 @@
#define RC_POWEROFF_BUTTON BUTTON_RC_PLAY
#define POWEROFF_COUNT 30
+#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/coldfire/iriver/button-target.h rockbox.bl/firmware/target/coldfire/iriver/button-target.h
--- rockbox.orig/firmware/target/coldfire/iriver/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/coldfire/iriver/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -83,4 +83,6 @@
#define RC_POWEROFF_BUTTON BUTTON_RC_STOP
#define POWEROFF_COUNT 10
+#define BACKLIGHT_BUTTON BUTTON_ON | BUTTON_OFF | BUTTON_SELECT
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/sh/archos/fm_v2/button-target.h rockbox.bl/firmware/target/sh/archos/fm_v2/button-target.h
--- rockbox.orig/firmware/target/sh/archos/fm_v2/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/sh/archos/fm_v2/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -50,4 +50,6 @@
#define POWEROFF_BUTTON BUTTON_OFF
#define POWEROFF_COUNT 10
+#define BACKLIGHT_BUTTON BUTTON_ON | BUTTON_OFF
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/sh/archos/ondio/button-target.h rockbox.bl/firmware/target/sh/archos/ondio/button-target.h
--- rockbox.orig/firmware/target/sh/archos/ondio/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/sh/archos/ondio/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -42,4 +42,6 @@
#define POWEROFF_BUTTON BUTTON_OFF
#define POWEROFF_COUNT 10
+#define BACKLIGHT_BUTTON BUTTON_OFF | BUTTON_MENU
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/sh/archos/player/button-target.h rockbox.bl/firmware/target/sh/archos/player/button-target.h
--- rockbox.orig/firmware/target/sh/archos/player/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/sh/archos/player/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -53,4 +53,6 @@
|BUTTON_RC_LEFT|BUTTON_RC_RIGHT\
|BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN)
+#define BACKLIGHT_BUTTON BUTTON_ON | BUTTON_MENU
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/firmware/target/sh/archos/recorder/button-target.h rockbox.bl/firmware/target/sh/archos/recorder/button-target.h
--- rockbox.orig/firmware/target/sh/archos/recorder/button-target.h 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/firmware/target/sh/archos/recorder/button-target.h 2008-01-29 11:42:10.000000000 +0200
@@ -60,4 +60,6 @@
|BUTTON_RC_LEFT|BUTTON_RC_RIGHT\
|BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN)
+#define BACKLIGHT_BUTTON BUTTON_ON | BUTTON_OFF
+
#endif /* _BUTTON_TARGET_H_ */
diff -Nur rockbox.orig/uisimulator/sdl/button.c rockbox.bl/uisimulator/sdl/button.c
--- rockbox.orig/uisimulator/sdl/button.c 2008-01-29 11:41:37.000000000 +0200
+++ rockbox.bl/uisimulator/sdl/button.c 2008-01-29 11:42:24.000000000 +0200
@@ -57,11 +57,20 @@
#ifdef HAVE_BACKLIGHT
static bool filter_first_keypress;
+static long backlight_on_button_mask;
void set_backlight_filter_keypress(bool value)
{
filter_first_keypress = value;
}
+
+void set_backlight_filter_buttons(bool value)
+{
+ if(value)
+ backlight_on_button_mask = BACKLIGHT_BUTTON;
+ else
+ backlight_on_button_mask = -1;
+}
#ifdef HAVE_REMOTE_LCD
static bool remote_filter_first_keypress;
@@ -821,11 +830,16 @@
skip_remote_release = true;
}
else
-#endif
- if (!filter_first_keypress || is_backlight_on())
+ {
+#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
@@ -837,7 +851,16 @@
remote_backlight_on();
else
#endif
- backlight_on();
+ {
+ /* 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
+ }
+ }
}
}