From a1ccb79727e0088ab72bf519f1da7b5209152817 Mon Sep 17 00:00:00 2001 From: Christian Soffke Date: Thu, 16 Apr 2026 13:31:26 +0200 Subject: [PATCH 1/5] pitchscreen: adjust keymaps for ipod and fiiom3k ipod: - To be more consistent with other plugins and (Settings) menus, press Long Select, instead of Menu, to reset, and press Menu, or Select, to exit screen fiiom3k: - Press Back, or Select, to exit screen - Press Menu, instead of Select, to switch between modes - Use repeat button events and adjust values by 1%, instead of by 0.1%, when scrolling, to speed up setting changes - Get rid of surprising actions for Back/Menu/Volume buttons Change-Id: Ifd16958bf56c7e20fb182aa157b4cb4dd19ac9b9 --- apps/keymaps/keymap-fiiom3k.c | 19 +++++++++++-------- apps/keymaps/keymap-ipod.c | 5 +++-- manual/platform/keymap-fiiom3k.tex | 16 ++++++++-------- manual/platform/keymap-ipod1g2g.tex | 4 ++-- manual/platform/keymap-ipod3g.tex | 4 ++-- manual/platform/keymap-ipod4g.tex | 4 ++-- 6 files changed, 28 insertions(+), 24 deletions(-) diff --git a/apps/keymaps/keymap-fiiom3k.c b/apps/keymaps/keymap-fiiom3k.c index 1ccf7e956f..355a87e78f 100644 --- a/apps/keymaps/keymap-fiiom3k.c +++ b/apps/keymaps/keymap-fiiom3k.c @@ -185,20 +185,23 @@ static const struct button_mapping button_context_quickscreen[] = { static const struct button_mapping button_context_pitchscreen[] = { {ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE}, - {ACTION_PS_INC_SMALL, BUTTON_SCROLL_BACK, BUTTON_NONE}, - {ACTION_PS_INC_BIG, BUTTON_VOL_UP, BUTTON_NONE}, + {ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE}, + {ACTION_PS_INC_BIG, BUTTON_SCROLL_BACK, BUTTON_NONE}, + {ACTION_PS_INC_BIG, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE}, {ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE}, - {ACTION_PS_DEC_SMALL, BUTTON_SCROLL_FWD, BUTTON_NONE}, - {ACTION_PS_DEC_BIG, BUTTON_VOL_DOWN, BUTTON_NONE}, + {ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE}, + {ACTION_PS_DEC_BIG, BUTTON_SCROLL_FWD, BUTTON_NONE}, + {ACTION_PS_DEC_BIG, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE}, {ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE}, {ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE}, {ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE}, {ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE}, - {ACTION_PS_TOGGLE_MODE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT}, + {ACTION_PS_TOGGLE_MODE, BUTTON_MENU, BUTTON_NONE}, + {ACTION_PS_EXIT, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT}, {ACTION_PS_RESET, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT}, - {ACTION_PS_EXIT, BUTTON_POWER, BUTTON_NONE}, - {ACTION_PS_FASTER, BUTTON_BACK, BUTTON_NONE}, - {ACTION_PS_SLOWER, BUTTON_MENU, BUTTON_NONE}, + {ACTION_PS_EXIT, BUTTON_BACK, BUTTON_NONE}, + {ACTION_PS_FASTER, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE}, + {ACTION_PS_SLOWER, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE}, LAST_ITEM_IN_LIST }; /* button_context_pitchscreen */ diff --git a/apps/keymaps/keymap-ipod.c b/apps/keymaps/keymap-ipod.c index aea0c444a2..f074026e60 100644 --- a/apps/keymaps/keymap-ipod.c +++ b/apps/keymaps/keymap-ipod.c @@ -151,8 +151,9 @@ static const struct button_mapping button_context_pitchscreen[] = { { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, { ACTION_PS_TOGGLE_MODE, BUTTON_PLAY, BUTTON_NONE }, - { ACTION_PS_RESET, BUTTON_MENU, BUTTON_NONE }, - { ACTION_PS_EXIT, BUTTON_SELECT, BUTTON_NONE }, + { ACTION_PS_EXIT, BUTTON_MENU, BUTTON_NONE }, + { ACTION_PS_EXIT, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT}, + { ACTION_PS_RESET, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_SELECT}, { ACTION_PS_SLOWER, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_PS_FASTER, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, diff --git a/manual/platform/keymap-fiiom3k.tex b/manual/platform/keymap-fiiom3k.tex index 2112673f03..812ef21b9f 100644 --- a/manual/platform/keymap-fiiom3k.tex +++ b/manual/platform/keymap-fiiom3k.tex @@ -78,17 +78,17 @@ \newcommand{\ActionKbdAbort}{\ButtonPower} %Button actions, Pitch Screen context -\newcommand{\ActionPsToggleMode}{\ButtonSelect} -\newcommand{\ActionPsIncSmall}{\ButtonUp{} or \ButtonScrollBack} -\newcommand{\ActionPsDecSmall}{\ButtonDown{} or \ButtonScrollFwd} -\newcommand{\ActionPsIncBig}{\ButtonVolUp} -\newcommand{\ActionPsDecBig}{\ButtonVolDown} +\newcommand{\ActionPsToggleMode}{\ButtonMenu} +\newcommand{\ActionPsIncSmall}{\ButtonUp} +\newcommand{\ActionPsDecSmall}{\ButtonDown} +\newcommand{\ActionPsIncBig}{Long \ButtonUp{} or \ButtonScrollBack} +\newcommand{\ActionPsDecBig}{Long \ButtonDown {} or \ButtonScrollFwd} \newcommand{\ActionPsNudgeLeft}{\ButtonLeft} \newcommand{\ActionPsNudgeRight}{\ButtonRight} \newcommand{\ActionPsReset}{Long \ButtonSelect} -\newcommand{\ActionPsExit}{\ButtonPower} -\newcommand{\ActionPsFaster}{\ButtonBack} -\newcommand{\ActionPsSlower}{\ButtonMenu} +\newcommand{\ActionPsExit}{\ButtonBack{} or \ButtonSelect} +\newcommand{\ActionPsFaster}{Long \ButtonRight} +\newcommand{\ActionPsSlower}{Long \ButtonLeft} %Button actions, Bookmark screen context \newcommand{\ActionBmDelete}{\ButtonPlay} diff --git a/manual/platform/keymap-ipod1g2g.tex b/manual/platform/keymap-ipod1g2g.tex index 2db45b0803..9399b101af 100644 --- a/manual/platform/keymap-ipod1g2g.tex +++ b/manual/platform/keymap-ipod1g2g.tex @@ -77,8 +77,8 @@ \newcommand{\ActionPsDecBig}{Long \ButtonScrollBack} \newcommand{\ActionPsNudgeLeft}{\ButtonLeft} \newcommand{\ActionPsNudgeRight}{\ButtonRight} -\newcommand{\ActionPsReset}{\ButtonMenu} -\newcommand{\ActionPsExit}{\ButtonSelect} +\newcommand{\ActionPsReset}{Long \ButtonSelect} +\newcommand{\ActionPsExit}{\ButtonMenu}{} or \ButtonSelect} %Button actions, Bookmark screen context \newcommand{\ActionBmDelete}{Long \ButtonMenu} diff --git a/manual/platform/keymap-ipod3g.tex b/manual/platform/keymap-ipod3g.tex index cb855a4a47..1370a700e1 100644 --- a/manual/platform/keymap-ipod3g.tex +++ b/manual/platform/keymap-ipod3g.tex @@ -77,8 +77,8 @@ \newcommand{\ActionPsDecBig}{Long \ButtonScrollBack} \newcommand{\ActionPsNudgeLeft}{\ButtonLeft} \newcommand{\ActionPsNudgeRight}{\ButtonRight} -\newcommand{\ActionPsReset}{\ButtonMenu} -\newcommand{\ActionPsExit}{\ButtonSelect} +\newcommand{\ActionPsReset}{Long \ButtonSelect} +\newcommand{\ActionPsExit}{\ButtonMenu}{} or \ButtonSelect} %Button actions, Bookmark screen context \newcommand{\ActionBmDelete}{Long \ButtonMenu} diff --git a/manual/platform/keymap-ipod4g.tex b/manual/platform/keymap-ipod4g.tex index e4c49a81a3..8210884409 100644 --- a/manual/platform/keymap-ipod4g.tex +++ b/manual/platform/keymap-ipod4g.tex @@ -78,8 +78,8 @@ \newcommand{\ActionPsDecBig}{Long \ButtonScrollBack} \newcommand{\ActionPsNudgeLeft}{\ButtonLeft} \newcommand{\ActionPsNudgeRight}{\ButtonRight} -\newcommand{\ActionPsReset}{\ButtonMenu} -\newcommand{\ActionPsExit}{\ButtonSelect} +\newcommand{\ActionPsReset}{Long \ButtonSelect} +\newcommand{\ActionPsExit}{\ButtonMenu}{} or \ButtonSelect} %Button actions, Recording screen context \newcommand{\ActionRecPause}{\ButtonPlay} From fd7ae09e7ac6d63e50b82441fc2eb42fb5427877 Mon Sep 17 00:00:00 2001 From: Christian Soffke Date: Thu, 16 Apr 2026 13:03:09 +0200 Subject: [PATCH 2/5] fix FS#13864: Last char of folder and filename not voiced Change-Id: I9c237bb7721224c6ba44b6511d72094722fa980c --- apps/talk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/talk.c b/apps/talk.c index 167c41e6e8..9aaa93e70f 100644 --- a/apps/talk.c +++ b/apps/talk.c @@ -765,7 +765,7 @@ static int _talk_spell(const char* spell, size_t len, bool enqueue) do_enqueue(enqueue); /* cut off all the pending stuff */ const char *last = spell; - size_t len0 = len - 1; + size_t len0 = len; /* Tokenize into UTF8 codepoints */ while ((spell = utf8decode(spell, &c)), c != '\0') { From f4dc4d89dc85653111d19b2d663680660885239f Mon Sep 17 00:00:00 2001 From: Christian Soffke Date: Wed, 15 Apr 2026 19:17:43 +0200 Subject: [PATCH 3/5] plugins: imageviewer: Hide info by default when loading file Looks nicer, especially when the "View Album Art" option is used. Add delay to progress bar, so it only appears when 250ms have passed. Change-Id: I183c839f1ab206385cd01327922933b544c4b78b --- apps/lang/bulgarian.lang | 6 +++--- apps/lang/chinese-simp.lang | 6 +++--- apps/lang/deutsch.lang | 6 +++--- apps/lang/english-us.lang | 10 ++++----- apps/lang/english.lang | 10 ++++----- apps/lang/espanol.lang | 6 +++--- apps/lang/francais.lang | 6 +++--- apps/lang/italiano.lang | 6 +++--- apps/lang/japanese.lang | 6 +++--- apps/lang/korean.lang | 6 +++--- apps/lang/latviesu.lang | 6 +++--- apps/lang/magyar.lang | 6 +++--- apps/lang/moldoveneste.lang | 6 +++--- apps/lang/nederlands.lang | 6 +++--- apps/lang/norsk-nynorsk.lang | 6 +++--- apps/lang/polski.lang | 6 +++--- apps/lang/portugues-brasileiro.lang | 6 +++--- apps/lang/romaneste.lang | 6 +++--- apps/lang/russian.lang | 6 +++--- apps/lang/slovak.lang | 6 +++--- apps/lang/srpski.lang | 6 +++--- apps/lang/svenska.lang | 6 +++--- apps/lang/turkce.lang | 6 +++--- apps/lang/ukrainian.lang | 6 +++--- apps/lang/vietnamese.lang | 6 +++--- apps/plugins/imageviewer/bmp/bmp.c | 9 ++++++--- apps/plugins/imageviewer/gif/gif.c | 15 +++++++++----- apps/plugins/imageviewer/imageviewer.c | 28 +++++++++++++++++++++----- apps/plugins/imageviewer/imageviewer.h | 1 + apps/plugins/imageviewer/jpeg/jpeg.c | 15 +++++++++----- apps/plugins/imageviewer/jpegp/jpegp.c | 8 +++++--- apps/plugins/imageviewer/png/png.c | 27 ++++++++++++++++--------- apps/plugins/imageviewer/ppm/ppm.c | 11 ++++++---- apps/plugins/pictureflow/pictureflow.c | 2 +- 34 files changed, 160 insertions(+), 114 deletions(-) diff --git a/apps/lang/bulgarian.lang b/apps/lang/bulgarian.lang index 05400fa4d5..8f859fc112 100644 --- a/apps/lang/bulgarian.lang +++ b/apps/lang/bulgarian.lang @@ -14597,11 +14597,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Скриване на информацията" diff --git a/apps/lang/chinese-simp.lang b/apps/lang/chinese-simp.lang index 3e1394f774..1120999871 100644 --- a/apps/lang/chinese-simp.lang +++ b/apps/lang/chinese-simp.lang @@ -14601,11 +14601,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "隐藏信息" diff --git a/apps/lang/deutsch.lang b/apps/lang/deutsch.lang index 66e3e33183..806ee79348 100644 --- a/apps/lang/deutsch.lang +++ b/apps/lang/deutsch.lang @@ -14615,11 +14615,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Information verbergen" diff --git a/apps/lang/english-us.lang b/apps/lang/english-us.lang index febe166dce..db078e77af 100644 --- a/apps/lang/english-us.lang +++ b/apps/lang/english-us.lang @@ -14591,17 +14591,17 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" - *: "Hide information" + *: "Hide Information" - *: "Hide information" + *: "Hide Information" diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 6bb698cd78..aeedbc2541 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -14844,17 +14844,17 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" - *: "Hide information" + *: "Hide Information" - *: "Hide information" + *: "Hide Information" diff --git a/apps/lang/espanol.lang b/apps/lang/espanol.lang index ae9c36cb12..14dd2db561 100644 --- a/apps/lang/espanol.lang +++ b/apps/lang/espanol.lang @@ -14701,11 +14701,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Ocultar información" diff --git a/apps/lang/francais.lang b/apps/lang/francais.lang index adcb05916a..7b92309fe9 100644 --- a/apps/lang/francais.lang +++ b/apps/lang/francais.lang @@ -12290,11 +12290,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Masquer les informations" diff --git a/apps/lang/italiano.lang b/apps/lang/italiano.lang index 621058e074..5e837aa636 100644 --- a/apps/lang/italiano.lang +++ b/apps/lang/italiano.lang @@ -14300,11 +14300,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Nascondere le informazioni" diff --git a/apps/lang/japanese.lang b/apps/lang/japanese.lang index 501d102214..aaf46fa501 100644 --- a/apps/lang/japanese.lang +++ b/apps/lang/japanese.lang @@ -14794,11 +14794,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "情報を隠す" diff --git a/apps/lang/korean.lang b/apps/lang/korean.lang index 9b37d29230..99f91af6fa 100644 --- a/apps/lang/korean.lang +++ b/apps/lang/korean.lang @@ -14609,11 +14609,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "정보 숨기기" diff --git a/apps/lang/latviesu.lang b/apps/lang/latviesu.lang index 94391888a9..e0db4361b6 100644 --- a/apps/lang/latviesu.lang +++ b/apps/lang/latviesu.lang @@ -14706,11 +14706,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Paslēpt informāciju" diff --git a/apps/lang/magyar.lang b/apps/lang/magyar.lang index f88fd31b7e..edac063a7e 100644 --- a/apps/lang/magyar.lang +++ b/apps/lang/magyar.lang @@ -14709,11 +14709,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Információ elrejtése" diff --git a/apps/lang/moldoveneste.lang b/apps/lang/moldoveneste.lang index af4718d647..e1db7daf9d 100644 --- a/apps/lang/moldoveneste.lang +++ b/apps/lang/moldoveneste.lang @@ -14712,11 +14712,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Ascunde informațiile" diff --git a/apps/lang/nederlands.lang b/apps/lang/nederlands.lang index 6f2d2fc19f..d722854d22 100644 --- a/apps/lang/nederlands.lang +++ b/apps/lang/nederlands.lang @@ -14360,11 +14360,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Verberg informatie" diff --git a/apps/lang/norsk-nynorsk.lang b/apps/lang/norsk-nynorsk.lang index fa67417801..eee67b9be8 100644 --- a/apps/lang/norsk-nynorsk.lang +++ b/apps/lang/norsk-nynorsk.lang @@ -14779,11 +14779,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Gøym informasjon" diff --git a/apps/lang/polski.lang b/apps/lang/polski.lang index 8d6816b47b..097211e7dd 100644 --- a/apps/lang/polski.lang +++ b/apps/lang/polski.lang @@ -14306,11 +14306,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Ukryj informacje" diff --git a/apps/lang/portugues-brasileiro.lang b/apps/lang/portugues-brasileiro.lang index c28f304a94..71dc258233 100644 --- a/apps/lang/portugues-brasileiro.lang +++ b/apps/lang/portugues-brasileiro.lang @@ -14817,11 +14817,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Ocultar informações" diff --git a/apps/lang/romaneste.lang b/apps/lang/romaneste.lang index 6a3bd8fa19..a2bf35136b 100644 --- a/apps/lang/romaneste.lang +++ b/apps/lang/romaneste.lang @@ -14712,11 +14712,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Ascunde informațiile" diff --git a/apps/lang/russian.lang b/apps/lang/russian.lang index b9b30004c0..47feb49e30 100644 --- a/apps/lang/russian.lang +++ b/apps/lang/russian.lang @@ -14328,11 +14328,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Ничего не показывать" diff --git a/apps/lang/slovak.lang b/apps/lang/slovak.lang index d481450931..3c3aebca05 100644 --- a/apps/lang/slovak.lang +++ b/apps/lang/slovak.lang @@ -14326,11 +14326,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Skryť info" diff --git a/apps/lang/srpski.lang b/apps/lang/srpski.lang index 90ff30bdd3..1a238f8207 100644 --- a/apps/lang/srpski.lang +++ b/apps/lang/srpski.lang @@ -14705,11 +14705,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Сакриј информације" diff --git a/apps/lang/svenska.lang b/apps/lang/svenska.lang index f254d7aa49..0a7fa0fd6f 100644 --- a/apps/lang/svenska.lang +++ b/apps/lang/svenska.lang @@ -14714,11 +14714,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Göm information" diff --git a/apps/lang/turkce.lang b/apps/lang/turkce.lang index d9407a6173..68ef3f100c 100644 --- a/apps/lang/turkce.lang +++ b/apps/lang/turkce.lang @@ -14597,11 +14597,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Bilgileri gizle" diff --git a/apps/lang/ukrainian.lang b/apps/lang/ukrainian.lang index 5e89c07baa..507ce32de2 100644 --- a/apps/lang/ukrainian.lang +++ b/apps/lang/ukrainian.lang @@ -14706,11 +14706,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Приховати інформацію" diff --git a/apps/lang/vietnamese.lang b/apps/lang/vietnamese.lang index c9562ffa7d..d794a4e2be 100644 --- a/apps/lang/vietnamese.lang +++ b/apps/lang/vietnamese.lang @@ -14615,11 +14615,11 @@ - id: LANG_HIDE_ALBUM_TITLE_NEW - desc: in the pictureflow settings + id: LANG_HIDE_INFO + desc: Hide Information user: core - *: "Hide information" + *: "Hide Information" *: "Ẩn thông tin" diff --git a/apps/plugins/imageviewer/bmp/bmp.c b/apps/plugins/imageviewer/bmp/bmp.c index 019c4982d3..3911917fec 100644 --- a/apps/plugins/imageviewer/bmp/bmp.c +++ b/apps/plugins/imageviewer/bmp/bmp.c @@ -176,7 +176,8 @@ static int load_image(char *filename, struct image_info *info, return PLUGIN_OUTOFMEM; } - if (!iv->running_slideshow) + if (!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_puts(0, 0, rb->strrchr(filename,'/')+1); rb->lcd_putsf(0, 1, "loading %dx%d%s", @@ -206,7 +207,8 @@ static int load_image(char *filename, struct image_info *info, return PLUGIN_ERROR; } - if (!iv->running_slideshow) + if (!iv->settings->hide_info && + !iv->running_slideshow) { rb->snprintf(print, sizeof(print), " %ld.%02ld sec ", time/HZ, time%HZ); rb->lcd_getstringsize(print, &w, &h); /* centered in progress bar */ @@ -225,7 +227,8 @@ static int load_image(char *filename, struct image_info *info, buf_images = buf_root = buf + size; buf_images_size = root_size = *buf_size - size; - if (!iv->running_slideshow) + if (!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_putsf(0, 2, "image %dx%d", bmp.width, bmp.height); rb->lcd_update(); diff --git a/apps/plugins/imageviewer/gif/gif.c b/apps/plugins/imageviewer/gif/gif.c index 61ff1a6146..7fbf573a1a 100644 --- a/apps/plugins/imageviewer/gif/gif.c +++ b/apps/plugins/imageviewer/gif/gif.c @@ -56,7 +56,7 @@ static void draw_image_rect(struct image_info *info, #ifdef HAVE_LCD_COLOR rb->lcd_bitmap_part((fb_data *)*pdisp, info->x + x, info->y + y, - STRIDE(SCREEN_MAIN, info->width, info->height), + STRIDE(SCREEN_MAIN, info->width, info->height), x + MAX(0, (LCD_WIDTH-info->width)/2), y + MAX(0, (LCD_HEIGHT-info->height)/2), width, height); @@ -100,7 +100,7 @@ static int load_image(char *filename, struct image_info *info, } #endif - /* initialize decoder context struct, set buffer decoder is free + /* initialize decoder context struct, set buffer decoder is free * to use. */ gif_decoder_init(p_decoder, memory, memory_size); @@ -111,7 +111,8 @@ static int load_image(char *filename, struct image_info *info, if (!p_decoder->error) { - if (!iv->running_slideshow) + if (!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_putsf(0, 2, "file: %s", filename); @@ -137,7 +138,9 @@ static int load_image(char *filename, struct image_info *info, gif_decoder_destroy_memory_pool(p_decoder); - if (!iv->running_slideshow && !p_decoder->error) + if (!iv->settings->hide_info && + !iv->running_slideshow && + !p_decoder->error) { rb->snprintf(print, sizeof(print), " %ld.%02ld sec ", time/HZ, time%HZ); rb->lcd_getstringsize(print, &w, &h); /* centered in progress bar */ @@ -215,7 +218,9 @@ static int get_image(struct image_info *info, int frame, int ds) /* assign image buffer */ if (ds > 1) { - if (!iv->running_slideshow && (info->frames_count == 1)) + if (!iv->settings->hide_info && + !iv->running_slideshow && + (info->frames_count == 1)) { rb->lcd_putsf(0, 3, "resizing %d*%d", info->width, info->height); rb->lcd_update(); diff --git a/apps/plugins/imageviewer/imageviewer.c b/apps/plugins/imageviewer/imageviewer.c index b67ff764aa..01683c8ace 100644 --- a/apps/plugins/imageviewer/imageviewer.c +++ b/apps/plugins/imageviewer/imageviewer.c @@ -64,7 +64,8 @@ static struct imgview_settings settings = COLOURMODE_COLOUR, DITHER_NONE, #endif - SS_DEFAULT_TIMEOUT + SS_DEFAULT_TIMEOUT, + true }; static struct imgview_settings old_settings; @@ -78,6 +79,7 @@ static struct configdata config[] = #endif { TYPE_INT, SS_MIN_TIMEOUT, SS_MAX_TIMEOUT, { .int_p = &settings.ss_timeout }, "Slideshow Time", NULL }, + { TYPE_BOOL, 0, 1, { .bool_p = &settings.hide_info }, "Hide Info", NULL }, }; static void cb_progress(int current, int total); @@ -244,12 +246,22 @@ static bool set_option_dithering(void) return false; } +static bool set_option_hide_info(void) +{ + rb->set_bool(rb->str(LANG_HIDE_INFO), &settings.hide_info); + return false; +} + MENUITEM_FUNCTION(grayscale_item, 0, ID2P(LANG_GRAYSCALE), set_option_grayscale, NULL, Icon_NOICON); MENUITEM_FUNCTION(dithering_item, 0, ID2P(LANG_DITHERING), set_option_dithering, NULL, Icon_NOICON); -MAKE_MENU(display_menu, "Display Options", NULL, Icon_NOICON, - &grayscale_item, &dithering_item); +MENUITEM_FUNCTION(hide_info_item, 0, ID2P(LANG_HIDE_INFO), + set_option_hide_info, NULL, Icon_NOICON); +MAKE_MENU(display_menu, ID2P(LANG_MENU_DISPLAY_OPTIONS), NULL, Icon_NOICON, + &grayscale_item, + &dithering_item, + &hide_info_item); static void display_options(void) { @@ -451,6 +463,10 @@ static void cb_progress(int current, int total) { /* do not yield or update the progress bar if we did so too recently */ long now = *rb->current_tick; + + if (total == 0) + next_progress_tick = now + HZ/4; /* delay by 250ms initially */ + if(!TIME_AFTER(now, next_progress_tick)) return; @@ -965,6 +981,7 @@ reload_decoder: bool initial_frame = true; do /* loop the image prepare and decoding when zoomed */ { + cb_progress(0, 0); /* delay showing progress bar*/ status = imgdec->get_image(info, frame, ds); /* decode or fetch from cache */ if (status == PLUGIN_ERROR) { @@ -973,8 +990,9 @@ reload_decoder: } set_view(info, cx, cy); - - if(!iv_api.running_slideshow && (info->frames_count == 1)) + if(!settings.hide_info && + !iv_api.running_slideshow && + (info->frames_count == 1)) { rb->lcd_putsf(0, 3, "showing %dx%d", info->width, info->height); rb->lcd_update(); diff --git a/apps/plugins/imageviewer/imageviewer.h b/apps/plugins/imageviewer/imageviewer.h index 79691f747e..7727dd033d 100644 --- a/apps/plugins/imageviewer/imageviewer.h +++ b/apps/plugins/imageviewer/imageviewer.h @@ -77,6 +77,7 @@ struct imgview_settings int jpeg_dither_mode; #endif int ss_timeout; + bool hide_info; }; /* structure passed to image decoder. */ diff --git a/apps/plugins/imageviewer/jpeg/jpeg.c b/apps/plugins/imageviewer/jpeg/jpeg.c index c7969c10c9..1f152e0fc3 100644 --- a/apps/plugins/imageviewer/jpeg/jpeg.c +++ b/apps/plugins/imageviewer/jpeg/jpeg.c @@ -150,7 +150,8 @@ static int load_image(char *filename, struct image_info *info, return PLUGIN_OUTOFMEM; } - if(!iv->running_slideshow) + if(!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_puts(0, 0, rb->strrchr(filename,'/')+1); rb->lcd_putsf(0, 1, "loading %d bytes", filesize); @@ -160,7 +161,8 @@ static int load_image(char *filename, struct image_info *info, rb->read(fd, buf_jpeg, filesize); rb->close(fd); - if(!iv->running_slideshow) + if(!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_puts(0, 2, "decoding markers"); rb->lcd_update(); @@ -190,7 +192,8 @@ static int load_image(char *filename, struct image_info *info, default_huff_tbl(p_jpg); /* use default */ build_lut(p_jpg); /* derive Huffman and other lookup-tables */ - if(!iv->running_slideshow) + if(!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_putsf(0, 2, "image %dx%d", p_jpg->x_size, p_jpg->y_size); rb->lcd_update(); @@ -263,7 +266,8 @@ static int get_image(struct image_info *info, int frame, int ds) buf_images += size; buf_images_size -= size; - if(!iv->running_slideshow) + if(!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_putsf(0, 3, "decoding %d*%d", info->width, info->height); rb->lcd_update(); @@ -288,7 +292,8 @@ static int get_image(struct image_info *info, int frame, int ds) } time = *rb->current_tick - time; - if(!iv->running_slideshow) + if(!iv->settings->hide_info && + !iv->running_slideshow) { rb->snprintf(print, sizeof(print), " %ld.%02ld sec ", time/HZ, time%HZ); rb->lcd_getstringsize(print, &w, &h); /* centered in progress bar */ diff --git a/apps/plugins/imageviewer/jpegp/jpegp.c b/apps/plugins/imageviewer/jpegp/jpegp.c index eee5be8424..a5883e3a28 100644 --- a/apps/plugins/imageviewer/jpegp/jpegp.c +++ b/apps/plugins/imageviewer/jpegp/jpegp.c @@ -117,7 +117,8 @@ static int load_image(char *filename, struct image_info *info, POS(offset); } - if (!iv->running_slideshow) + if (!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_puts(0, 0, rb->strrchr(filename,'/')+1); rb->lcd_puts(0, 2, "decoding..."); @@ -142,7 +143,8 @@ static int load_image(char *filename, struct image_info *info, return PLUGIN_ERROR; } - if (!iv->running_slideshow) + if (!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_putsf(0, 2, "image %dx%d", p_jpg->X, p_jpg->Y); int w, h; /* used to center output */ @@ -262,7 +264,7 @@ static int get_image(struct image_info *info, int frame, int ds) c2 = (sumV + area/2) / area; } - // ITU BT.601 full-range YUV-to-RGB integer approximation + // ITU BT.601 full-range YUV-to-RGB integer approximation { int y = (c0 << 5) + 16; int u = c1 - 128; diff --git a/apps/plugins/imageviewer/png/png.c b/apps/plugins/imageviewer/png/png.c index 34a8a1fd34..68a14a268e 100644 --- a/apps/plugins/imageviewer/png/png.c +++ b/apps/plugins/imageviewer/png/png.c @@ -62,7 +62,7 @@ static void draw_image_rect(struct image_info *info, #ifdef HAVE_LCD_COLOR rb->lcd_bitmap_part((fb_data *)*pdisp, info->x + x, info->y + y, - STRIDE(SCREEN_MAIN, info->width, info->height), + STRIDE(SCREEN_MAIN, info->width, info->height), x + MAX(0, (LCD_WIDTH-info->width)/2), y + MAX(0, (LCD_HEIGHT-info->height)/2), width, height); @@ -82,8 +82,8 @@ static int img_mem(int ds) #ifdef USEGSLIB return (p_decoder->infoPng.width/ds) * (p_decoder->infoPng.height/ds); #else - return (p_decoder->infoPng.width/ds) * - (p_decoder->infoPng.height/ds) * + return (p_decoder->infoPng.width/ds) * + (p_decoder->infoPng.height/ds) * FB_DATA_SZ; #endif } @@ -126,7 +126,9 @@ static int load_image(char *filename, struct image_info *info, DEBUGF("reading file '%s'\n", filename); - if (!iv->running_slideshow) { + if (!iv->settings->hide_info && + !iv->running_slideshow) + { rb->lcd_puts(0, 0, rb->strrchr(filename,'/')+1); rb->lcd_update(); } @@ -136,7 +138,9 @@ static int load_image(char *filename, struct image_info *info, rb->close(fd); } else { - if (!iv->running_slideshow) { + if (!iv->settings->hide_info && + !iv->running_slideshow) + { rb->lcd_putsf(0, 1, "loading %zu bytes", file_size); rb->lcd_update(); } @@ -146,7 +150,9 @@ static int load_image(char *filename, struct image_info *info, rb->read(fd, image, file_size); rb->close(fd); - if (!iv->running_slideshow) { + if (!iv->settings->hide_info && + !iv->running_slideshow) + { rb->lcd_puts(0, 2, "decoding image"); rb->lcd_update(); } @@ -171,7 +177,8 @@ static int load_image(char *filename, struct image_info *info, if (!p_decoder->error) { - if (!iv->running_slideshow) { + if (!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_putsf(0, 2, "image %dx%d", p_decoder->infoPng.width, p_decoder->infoPng.height); @@ -194,7 +201,8 @@ static int load_image(char *filename, struct image_info *info, } } - if (!iv->running_slideshow && !p_decoder->error) + if (!iv->settings->hide_info && + !iv->running_slideshow && !p_decoder->error) { rb->snprintf(print, sizeof(print), " %ld.%02ld sec ", time/HZ, time%HZ); rb->lcd_getstringsize(print, &w, &h); /* centered in progress bar */ @@ -253,7 +261,8 @@ static int get_image(struct image_info *info, int frame, int ds) /* assign image buffer */ if (ds > 1) { - if (!iv->running_slideshow) + if (!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_putsf(0, 3, "resizing %d*%d", info->width, info->height); rb->lcd_update(); diff --git a/apps/plugins/imageviewer/ppm/ppm.c b/apps/plugins/imageviewer/ppm/ppm.c index 6f59b1f6b0..9a88744382 100644 --- a/apps/plugins/imageviewer/ppm/ppm.c +++ b/apps/plugins/imageviewer/ppm/ppm.c @@ -51,7 +51,7 @@ static void draw_image_rect(struct image_info *info, #ifdef HAVE_LCD_COLOR rb->lcd_bitmap_part((fb_data *)*pdisp, info->x + x, info->y + y, - STRIDE(SCREEN_MAIN, info->width, info->height), + STRIDE(SCREEN_MAIN, info->width, info->height), x + MAX(0, (LCD_WIDTH-info->width)/2), y + MAX(0, (LCD_HEIGHT-info->height)/2), width, height); @@ -111,7 +111,8 @@ static int load_image(char *filename, struct image_info *info, } DEBUGF("reading file '%s'\n", filename); - if (!iv->running_slideshow) + if (!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_puts(0, 0, rb->strrchr(filename,'/')+1); rb->lcd_putsf(0, 1, "loading %zu bytes", filesize); @@ -140,7 +141,8 @@ static int load_image(char *filename, struct image_info *info, return rc; } - if (!iv->running_slideshow) + if (!iv->settings->hide_info && + !iv->running_slideshow) { rb->snprintf(print, sizeof(print), " %ld.%02ld sec ", time/HZ, time%HZ); rb->lcd_getstringsize(print, &w, &h); /* centered in progress bar */ @@ -177,7 +179,8 @@ static int get_image(struct image_info *info, int frame, int ds) /* assign image buffer */ if (ds > 1) { - if (!iv->running_slideshow) + if (!iv->settings->hide_info && + !iv->running_slideshow) { rb->lcd_putsf(0, 3, "resizing %d*%d", info->width, info->height); rb->lcd_update(); diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c index 259b95f5f0..affde85b99 100644 --- a/apps/plugins/pictureflow/pictureflow.c +++ b/apps/plugins/pictureflow/pictureflow.c @@ -3619,7 +3619,7 @@ static int settings_menu(void) ID2P(LANG_DISPLAY)); static const struct opt_items album_name_options[] = { - { STR(LANG_HIDE_ALBUM_TITLE_NEW) }, + { STR(LANG_HIDE_INFO) }, { STR(LANG_SHOW_AT_THE_BOTTOM_NEW) }, { STR(LANG_SHOW_AT_THE_TOP_NEW) }, { STR(LANG_SHOW_ALL_AT_THE_TOP) }, From a496e011734aa28b7b991c4cb39f3445fcc7e561 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Sat, 11 Apr 2026 18:30:34 +0300 Subject: [PATCH 4/5] hiby: ability to add/remove input device Required for dynamic inputs (like bluetooth). Files are now opened with O_NONBLOCK, and inputs are automatically removed on poll errors. Also added call to close all devices on power off. Change-Id: I8991bdb881fdc00135d1fd5b01ac900c0b007aeb --- firmware/target/hosted/button-devinput.c | 67 ++++++++++++++++-------- firmware/target/hosted/button-devinput.h | 28 ++++++++++ firmware/target/hosted/system-hosted.c | 2 + 3 files changed, 75 insertions(+), 22 deletions(-) create mode 100644 firmware/target/hosted/button-devinput.h diff --git a/firmware/target/hosted/button-devinput.c b/firmware/target/hosted/button-devinput.c index a9129f3ea6..1c5e2abea2 100644 --- a/firmware/target/hosted/button-devinput.c +++ b/firmware/target/hosted/button-devinput.c @@ -21,6 +21,7 @@ ****************************************************************************/ #include #include +#include #include #include #include @@ -49,42 +50,60 @@ * Compute to angular velocity (degrees per second) */ -#define NR_POLL_DESC 4 +#define NR_POLL_DESC 5 static int num_devices = 0; static struct pollfd poll_fds[NR_POLL_DESC]; +void button_add_input_device(int i) +{ + int fd = poll_fds[i].fd; + if (fd >= 0) + close(fd); + + char path[32]; + snprintf(path, sizeof(path), "/dev/input/event%d", i); + fd = open(path, O_RDONLY | O_CLOEXEC | O_NONBLOCK); + poll_fds[i].fd = fd >= 0 ? fd : -1; + if(fd >= 0) + { + poll_fds[i].events = POLLIN; + poll_fds[i].revents = 0; + if (num_devices <= i) + num_devices = i + 1; + } +} + void button_init_device(void) { - const char * const input_devs[NR_POLL_DESC] = { - "/dev/input/event0", - "/dev/input/event1", - "/dev/input/event2", - "/dev/input/event3", - }; - for(int i = 0; i < NR_POLL_DESC; i++) { - int fd = open(input_devs[i], O_RDONLY | O_CLOEXEC); - - if(fd >= 0) - { - poll_fds[num_devices].fd = fd; - poll_fds[num_devices].events = POLLIN; - poll_fds[num_devices].revents = 0; - num_devices++; - } + poll_fds[i].fd = -1; + button_add_input_device(i); } } +void button_remove_input_device(int i) +{ + int fd = poll_fds[i].fd; + if (fd < 0) + return; + + if (i == num_devices - 1) + num_devices = i; + + close(fd); + poll_fds[i].fd = -1; +} + void button_close_device(void) { - /* close descriptors */ - for(int i = 0; i < num_devices; i++) - { - close(poll_fds[i].fd); - } num_devices = 0; + /* close descriptors */ + for(int i = 0; i < NR_POLL_DESC; i++) + { + button_remove_input_device(i); + } } #ifdef BUTTON_DELAY_RELEASE @@ -261,6 +280,10 @@ int button_read_device(BDATA) } } } + /* device was removed/disconnected — close it to stop poll returning POLLHUP forever */ + else if (poll_fds[i].revents & (POLLERR | POLLHUP)) { + button_remove_input_device(i); + } } } diff --git a/firmware/target/hosted/button-devinput.h b/firmware/target/hosted/button-devinput.h new file mode 100644 index 0000000000..20c76cab4b --- /dev/null +++ b/firmware/target/hosted/button-devinput.h @@ -0,0 +1,28 @@ +/*************************************************************************** + * __________ __ ___ + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) 2026 by Roman Artiukhin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + ****************************************************************************/ + + +#ifndef __BUTTON_DEVINPUT_H__ +#define __BUTTON_DEVINPUT_H__ + +void button_close_device(void); +void button_add_input_device(int i); +void button_remove_input_device(int i); + +#endif diff --git a/firmware/target/hosted/system-hosted.c b/firmware/target/hosted/system-hosted.c index bb20842d79..65b035c640 100644 --- a/firmware/target/hosted/system-hosted.c +++ b/firmware/target/hosted/system-hosted.c @@ -29,6 +29,7 @@ #include "font.h" #include "power.h" #include "button.h" +#include "button-devinput.h" #include "backlight-target.h" #include "lcd.h" #include "filesystem-hosted.h" @@ -92,6 +93,7 @@ static void sig_handler(int sig, siginfo_t *siginfo, void *context) void power_off(void) { backlight_hw_off(); + button_close_device(); sync(); system("/sbin/poweroff"); while (1) { From f83cb1f7d52e6ebde33266973be4fa1d076adde4 Mon Sep 17 00:00:00 2001 From: Christian Soffke Date: Thu, 16 Apr 2026 14:06:28 +0200 Subject: [PATCH 5/5] fix manual a1ccb79727 Change-Id: Ic1729fb81386e2010c662373baaa31c302a80ff7 --- manual/platform/keymap-ipod1g2g.tex | 2 +- manual/platform/keymap-ipod3g.tex | 2 +- manual/platform/keymap-ipod4g.tex | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/manual/platform/keymap-ipod1g2g.tex b/manual/platform/keymap-ipod1g2g.tex index 9399b101af..d3825cdb21 100644 --- a/manual/platform/keymap-ipod1g2g.tex +++ b/manual/platform/keymap-ipod1g2g.tex @@ -78,7 +78,7 @@ \newcommand{\ActionPsNudgeLeft}{\ButtonLeft} \newcommand{\ActionPsNudgeRight}{\ButtonRight} \newcommand{\ActionPsReset}{Long \ButtonSelect} -\newcommand{\ActionPsExit}{\ButtonMenu}{} or \ButtonSelect} +\newcommand{\ActionPsExit}{\ButtonMenu{} or \ButtonSelect} %Button actions, Bookmark screen context \newcommand{\ActionBmDelete}{Long \ButtonMenu} diff --git a/manual/platform/keymap-ipod3g.tex b/manual/platform/keymap-ipod3g.tex index 1370a700e1..7fc7035f6a 100644 --- a/manual/platform/keymap-ipod3g.tex +++ b/manual/platform/keymap-ipod3g.tex @@ -78,7 +78,7 @@ \newcommand{\ActionPsNudgeLeft}{\ButtonLeft} \newcommand{\ActionPsNudgeRight}{\ButtonRight} \newcommand{\ActionPsReset}{Long \ButtonSelect} -\newcommand{\ActionPsExit}{\ButtonMenu}{} or \ButtonSelect} +\newcommand{\ActionPsExit}{\ButtonMenu{} or \ButtonSelect} %Button actions, Bookmark screen context \newcommand{\ActionBmDelete}{Long \ButtonMenu} diff --git a/manual/platform/keymap-ipod4g.tex b/manual/platform/keymap-ipod4g.tex index 8210884409..c7e663bf3b 100644 --- a/manual/platform/keymap-ipod4g.tex +++ b/manual/platform/keymap-ipod4g.tex @@ -79,7 +79,7 @@ \newcommand{\ActionPsNudgeLeft}{\ButtonLeft} \newcommand{\ActionPsNudgeRight}{\ButtonRight} \newcommand{\ActionPsReset}{Long \ButtonSelect} -\newcommand{\ActionPsExit}{\ButtonMenu}{} or \ButtonSelect} +\newcommand{\ActionPsExit}{\ButtonMenu{} or \ButtonSelect} %Button actions, Recording screen context \newcommand{\ActionRecPause}{\ButtonPlay}