Index: apps/lang/english.lang =================================================================== --- apps/lang/english.lang (revision 22658) +++ apps/lang/english.lang (working copy) @@ -12735,3 +12735,72 @@ quickscreen: "Set as Top Quickscreen Item" + + 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,gigabeats: "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,gigabeats: "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,gigabeats: "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" + + Index: apps/settings.c =================================================================== --- apps/settings.c (revision 22658) +++ apps/settings.c (working copy) @@ -965,6 +965,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 Index: apps/settings.h =================================================================== --- apps/settings.h (revision 22658) +++ apps/settings.h (working copy) @@ -703,6 +703,10 @@ int brightness; #endif +#ifdef HAVE_BACKLIGHT + bool bl_filter_buttons; /* prevent some buttons from turning backlight on */ +#endif + #ifdef HAVE_REMOTE_LCD /* remote lcd */ int remote_contrast; /* lcd contrast: 0-63 0=low 63=high */ Index: apps/menus/display_menu.c =================================================================== --- apps/menus/display_menu.c (revision 22658) +++ apps/menus/display_menu.c (working copy) @@ -59,6 +59,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_FLIP static int flipdisplay_callback(int action,const struct menu_item_ex *this_item) @@ -101,6 +112,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_SETTING MENUITEM_SETTING(lcd_sleep_after_backlight_off, &global_settings.lcd_sleep_after_backlight_off, NULL); @@ -138,6 +152,7 @@ ,&backlight_fade_in, &backlight_fade_out #endif ,&bl_filter_first_keypress + ,&bl_filter_buttons # ifdef HAVE_LCD_SLEEP_SETTING ,&lcd_sleep_after_backlight_off # endif Index: apps/settings_list.c =================================================================== --- apps/settings_list.c (revision 22658) +++ apps/settings_list.c (working copy) @@ -725,6 +725,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, Index: firmware/export/button.h =================================================================== --- firmware/export/button.h (revision 22658) +++ firmware/export/button.h (working copy) @@ -43,6 +43,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 Index: firmware/target/arm/tatung/tpj1022/button-target.h =================================================================== --- firmware/target/arm/tatung/tpj1022/button-target.h (revision 22658) +++ firmware/target/arm/tatung/tpj1022/button-target.h (working copy) @@ -57,4 +57,6 @@ #define POWEROFF_BUTTON BUTTON_POWER #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_MENU + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/pnx0101/iriver-ifp7xx/button-target.h =================================================================== --- firmware/target/arm/pnx0101/iriver-ifp7xx/button-target.h (revision 22658) +++ firmware/target/arm/pnx0101/iriver-ifp7xx/button-target.h (working copy) @@ -55,4 +55,6 @@ #define POWEROFF_BUTTON BUTTON_PLAY #define POWEROFF_COUNT 40 +#define BACKLIGHT_BUTTON BUTTON_SELECT BUTTON_PLAY + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/archos/av300/button-target.h =================================================================== --- firmware/target/arm/archos/av300/button-target.h (revision 22658) +++ firmware/target/arm/archos/av300/button-target.h (working copy) @@ -48,4 +48,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_ */ Index: firmware/target/arm/tcc77x/logikdax/button-target.h =================================================================== --- firmware/target/arm/tcc77x/logikdax/button-target.h (revision 22658) +++ firmware/target/arm/tcc77x/logikdax/button-target.h (working copy) @@ -50,4 +50,6 @@ #define POWEROFF_BUTTON BUTTON_POWERPLAY #define POWEROFF_COUNT 40 +#define BACKLIGHT_BUTTON BUTTON_POWERPLAY BUTTON_SELECT + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/ipod/button-target.h =================================================================== --- firmware/target/arm/ipod/button-target.h (revision 22658) +++ firmware/target/arm/ipod/button-target.h (working copy) @@ -75,4 +75,6 @@ #define POWEROFF_BUTTON BUTTON_PLAY #define POWEROFF_COUNT 40 +#define BACKLIGHT_BUTTON BUTTON_PLAY | BUTTON_SELECT | BUTTON_MENU + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/sandisk/sansa-c200/button-target.h =================================================================== --- firmware/target/arm/sandisk/sansa-c200/button-target.h (revision 22658) +++ firmware/target/arm/sandisk/sansa-c200/button-target.h (working copy) @@ -52,4 +52,6 @@ #define POWEROFF_BUTTON BUTTON_POWER #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/sandisk/sansa-e200/button-e200.c =================================================================== --- firmware/target/arm/sandisk/sansa-e200/button-e200.c (revision 22658) +++ firmware/target/arm/sandisk/sansa-e200/button-e200.c (working copy) @@ -194,7 +194,7 @@ /* poke backlight to turn it on or maintain it no more often than every 1/4 second*/ next_backlight_on = current_tick + HZ/4; - backlight_on(); + /*backlight_on();*/ buttonlight_on(); reset_poweroff_timer(); } Index: firmware/target/arm/sandisk/sansa-e200/button-target.h =================================================================== --- firmware/target/arm/sandisk/sansa-e200/button-target.h (revision 22658) +++ firmware/target/arm/sandisk/sansa-e200/button-target.h (working copy) @@ -57,4 +57,6 @@ #define POWEROFF_BUTTON BUTTON_POWER #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_REC | BUTTON_DOWN | BUTTON_SELECT | BUTTON_UP | BUTTON_POWER + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/tms320dm320/mrobe-500/button-target.h =================================================================== --- firmware/target/arm/tms320dm320/mrobe-500/button-target.h (revision 22658) +++ firmware/target/arm/tms320dm320/mrobe-500/button-target.h (working copy) @@ -88,4 +88,6 @@ BUTTON_RC_PLAY|BUTTON_RC_DOWN| \ BUTTON_RC_REW|BUTTON_RC_FF) +#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_MODE + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/iriver/h10/button-target.h =================================================================== --- firmware/target/arm/iriver/h10/button-target.h (revision 22658) +++ firmware/target/arm/iriver/h10/button-target.h (working copy) @@ -67,4 +67,6 @@ #define RC_POWEROFF_BUTTON BUTTON_RC_PLAY #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_POWER + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/imx31/gigabeat-s/button-target.h =================================================================== --- firmware/target/arm/imx31/gigabeat-s/button-target.h (revision 22658) +++ firmware/target/arm/imx31/gigabeat-s/button-target.h (working copy) @@ -71,4 +71,6 @@ #define POWEROFF_BUTTON BUTTON_POWER #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT | BUTTON_MENU + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/s3c2440/gigabeat-fx/button-target.h =================================================================== --- firmware/target/arm/s3c2440/gigabeat-fx/button-target.h (revision 22658) +++ firmware/target/arm/s3c2440/gigabeat-fx/button-target.h (working copy) @@ -97,4 +97,6 @@ #define POWEROFF_BUTTON BUTTON_POWER #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT | BUTTON_MENU + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/coldfire/iriver/button-target.h =================================================================== --- firmware/target/coldfire/iriver/button-target.h (revision 22658) +++ firmware/target/coldfire/iriver/button-target.h (working copy) @@ -85,4 +85,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_ */ Index: firmware/target/coldfire/iaudio/button-target.h =================================================================== --- firmware/target/coldfire/iaudio/button-target.h (revision 22658) +++ firmware/target/coldfire/iaudio/button-target.h (working copy) @@ -72,4 +72,6 @@ #define RC_POWEROFF_BUTTON BUTTON_RC_PLAY #define POWEROFF_COUNT 30 +#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/sh/archos/recorder/button-target.h =================================================================== --- firmware/target/sh/archos/recorder/button-target.h (revision 22658) +++ firmware/target/sh/archos/recorder/button-target.h (working copy) @@ -62,4 +62,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_ */ Index: firmware/target/sh/archos/ondio/button-target.h =================================================================== --- firmware/target/sh/archos/ondio/button-target.h (revision 22658) +++ firmware/target/sh/archos/ondio/button-target.h (working copy) @@ -44,4 +44,6 @@ #define POWEROFF_BUTTON BUTTON_OFF #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_OFF | BUTTON_MENU + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/sh/archos/fm_v2/button-target.h =================================================================== --- firmware/target/sh/archos/fm_v2/button-target.h (revision 22658) +++ firmware/target/sh/archos/fm_v2/button-target.h (working copy) @@ -52,4 +52,6 @@ #define POWEROFF_BUTTON BUTTON_OFF #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_ON | BUTTON_OFF + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/sh/archos/player/button-target.h =================================================================== --- firmware/target/sh/archos/player/button-target.h (revision 22658) +++ firmware/target/sh/archos/player/button-target.h (working copy) @@ -55,4 +55,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_ */ Index: firmware/drivers/button.c =================================================================== --- firmware/drivers/button.c (revision 22658) +++ firmware/drivers/button.c (working copy) @@ -58,6 +58,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 @@ -263,15 +264,16 @@ skip_remote_release = true; } else + { #endif - if (!filter_first_keypress || is_backlight_on(false) -#if BUTTON_REMOTE - || (btn & BUTTON_REMOTE) -#endif - ) + if (is_backlight_on(false) || !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 @@ -283,11 +285,15 @@ else #endif { + /* any button press should keep backlight lit, + * but only some may turn it on */ + if(is_backlight_on(false) || (btn & backlight_on_button_mask)) { backlight_on(); #ifdef HAVE_BUTTON_LIGHT buttonlight_on(); #endif } + } reset_poweroff_timer(); } @@ -515,6 +521,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) { Index: uisimulator/sdl/button.c =================================================================== --- uisimulator/sdl/button.c (revision 22658) +++ uisimulator/sdl/button.c (working copy) @@ -62,11 +62,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; @@ -1324,12 +1333,16 @@ skip_remote_release = true; } else -#endif - if (!filter_first_keypress - || is_backlight_on(false)) + { +#endif + if (is_backlight_on(false) || !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 @@ -1341,7 +1354,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(false) || (btn & backlight_on_button_mask)) { + backlight_on(); +#ifdef HAVE_BUTTON_LIGHT + buttonlight_on(); +#endif + } + } } }