diff options
author | Christian Soffke <christian.soffke@gmail.com> | 2024-07-26 23:25:23 +0200 |
---|---|---|
committer | Christian Soffke <christian.soffke@gmail.com> | 2024-07-30 22:08:18 +0200 |
commit | 2f8cab91903fd14f475a40be7c819585568fa5ef (patch) | |
tree | b31218f961d8938c091fdf72aaaa34e6ed74cba1 | |
parent | cb7ae38fcd051b95fcc6513f91e861902ead76a7 (diff) | |
download | rockbox-2f8cab9190.tar.gz rockbox-2f8cab9190.zip |
plugins: properties: keep theme enabled
Launching a themed plugin can cause the screen to
flash due to the theme being disabled, before it
is re-enabled right away. For the Properties plugin
in particular, this seems a bit annoying and
unnecessary.
Change-Id: Ifa0275b453369051cc63a3c626551f54120fdb41
-rw-r--r-- | apps/plugin.c | 21 | ||||
-rw-r--r-- | apps/plugins/properties.c | 5 |
2 files changed, 15 insertions, 11 deletions
diff --git a/apps/plugin.c b/apps/plugin.c index b45b25f7ff..adf207da79 100644 --- a/apps/plugin.c +++ b/apps/plugin.c @@ -856,6 +856,10 @@ int plugin_load(const char* plugin, const void* parameter) if (!plugin) return PLUGIN_ERROR; + /* for some plugins, the SBS can be left enabled */ + const char *sepch = strrchr(plugin, PATH_SEPCH); + bool theme_enabled = sepch && !strcmp("properties.rock", sepch + 1); + if (current_plugin_handle && pfn_tsr_exit) { /* if we have a resident old plugin and a callback */ bool reenter = (strcmp(current_plugin, plugin) == 0); @@ -923,7 +927,8 @@ int plugin_load(const char* plugin, const void* parameter) *(p_hdr->api) = &rockbox_api; lcd_set_viewport(NULL); - lcd_clear_display(); + if (!theme_enabled) + lcd_clear_display(); #ifdef HAVE_REMOTE_LCD lcd_remote_set_viewport(NULL); @@ -938,8 +943,9 @@ int plugin_load(const char* plugin, const void* parameter) * they should be fixed properly instead of this lock */ tree_lock_cache(tree_get_context()); - FOR_NB_SCREENS(i) - viewportmanager_theme_enable(i, false, NULL); + if (!theme_enabled) + FOR_NB_SCREENS(i) + viewportmanager_theme_enable(i, false, NULL); #ifdef HAVE_TOUCHSCREEN touchscreen_set_mode(TOUCHSCREEN_BUTTON); @@ -1000,13 +1006,16 @@ int plugin_load(const char* plugin, const void* parameter) #endif #endif - lcd_clear_display(); #ifdef HAVE_REMOTE_LCD lcd_remote_clear_display(); #endif - FOR_NB_SCREENS(i) - viewportmanager_theme_undo(i, true); + if (!theme_enabled) + { + lcd_clear_display(); + FOR_NB_SCREENS(i) + viewportmanager_theme_undo(i, true); + } plugin_check_open_close__exit(); diff --git a/apps/plugins/properties.c b/apps/plugins/properties.c index d3fac59bde..dcd3d89edf 100644 --- a/apps/plugins/properties.c +++ b/apps/plugins/properties.c @@ -321,8 +321,6 @@ enum plugin_status plugin_start(const void* parameter) rb->action_userabort(TIMEOUT_BLOCK); return PLUGIN_OK; } - FOR_NB_SCREENS(i) - rb->viewportmanager_theme_enable(i, true, NULL); if (props_type == PROPS_MUL_ID3) ret = assemble_track_info(NULL, NULL); @@ -349,8 +347,5 @@ enum plugin_status plugin_start(const void* parameter) rb->browse_id3(&id3, 0, 0, NULL, mul_id3_count) : (stats.canceled ? 0 : -1); - FOR_NB_SCREENS(i) - rb->viewportmanager_theme_undo(i, false); - return ret == -1 ? PLUGIN_ERROR : ret == 1 ? PLUGIN_USB_CONNECTED : PLUGIN_OK; } |