diff --git a/libretro-common/include/queues/task_queue.h b/libretro-common/include/queues/task_queue.h
index aaed4ea30e..3e182c755e 100644
--- a/libretro-common/include/queues/task_queue.h
+++ b/libretro-common/include/queues/task_queue.h
@@ -114,10 +114,15 @@ struct retro_task
/* task identifier */
uint32_t ident;
- /* frontend userdata
+ /* frontend userdata
* (e.g. associate a sticky notification to a task) */
void *frontend_userdata;
+ /* if set to true, frontend will
+ use an alternative look for the
+ task progress display */
+ bool alternative_look;
+
/* don't touch this. */
retro_task_t *next;
};
diff --git a/menu/widgets/menu_widgets.c b/menu/widgets/menu_widgets.c
index 8c096347ec..44d466dc31 100644
--- a/menu/widgets/menu_widgets.c
+++ b/menu/widgets/menu_widgets.c
@@ -448,7 +448,6 @@ static bool menu_widgets_msg_queue_push_internal(retro_task_t *task, const char
if (task->title != msg_widget->task_title_ptr)
{
- menu_animation_ctx_entry_t entry;
unsigned len = strlen(task->title);
unsigned new_width = font_driver_get_message_width(font_regular, task->title, len, msg_queue_text_scale_factor);
@@ -460,15 +459,24 @@ static bool menu_widgets_msg_queue_push_internal(retro_task_t *task, const char
msg_widget->task_title_ptr = task->title;
msg_widget->msg_transition_animation = 0;
- entry.easing_enum = EASING_OUT_QUAD;
- entry.tag = (uintptr_t) NULL;
- entry.duration = MSG_QUEUE_ANIMATION_DURATION*2;
- entry.target_value = msg_queue_height/2.0f;
- entry.subject = &msg_widget->msg_transition_animation;
- entry.cb = msg_widget_msg_transition_animation_done;
- entry.userdata = msg_widget;
+ if (!task->alternative_look)
+ {
+ menu_animation_ctx_entry_t entry;
- menu_animation_push(&entry);
+ entry.easing_enum = EASING_OUT_QUAD;
+ entry.tag = (uintptr_t) NULL;
+ entry.duration = MSG_QUEUE_ANIMATION_DURATION*2;
+ entry.target_value = msg_queue_height/2.0f;
+ entry.subject = &msg_widget->msg_transition_animation;
+ entry.cb = msg_widget_msg_transition_animation_done;
+ entry.userdata = msg_widget;
+
+ menu_animation_push(&entry);
+ }
+ else
+ {
+ msg_widget_msg_transition_animation_done(msg_widget);
+ }
msg_widget->task_count++;
diff --git a/tasks/task_database.c b/tasks/task_database.c
index 4a5e0e8548..4bf1fee131 100644
--- a/tasks/task_database.c
+++ b/tasks/task_database.c
@@ -15,6 +15,7 @@
* If not, see .
*/
+#include
#include
#include
#include
@@ -151,8 +152,10 @@ static int task_database_iterate_start(retro_task_t *task,
if (!string_is_empty(msg))
{
#ifdef RARCH_INTERNAL
- runloop_msg_queue_push(msg, 1, 180, true, NULL,
- MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
+ task_free_title(task);
+ task_set_title(task, strdup(msg));
+ if (db->list->size != 0)
+ task_set_progress(task, roundf((float)db->list_ptr / (float)db->list->size * 100.0f));
#else
fprintf(stderr, "msg: %s\n", msg);
#endif
@@ -1208,8 +1211,6 @@ static void task_database_handler(retro_task_t *task)
db->handle = database_info_file_init(db->fullpath, DATABASE_TYPE_ITERATE, task);
}
- task_free_title(task);
-
if (db->handle)
db->handle->status = DATABASE_STATUS_ITERATE_BEGIN;
}
@@ -1296,14 +1297,14 @@ static void task_database_handler(retro_task_t *task)
}
else
{
+#ifdef RARCH_INTERNAL
+ task_set_progress(task, 100);
+#else
const char *msg = NULL;
if (db->is_directory)
msg = msg_hash_to_str(MSG_SCANNING_OF_DIRECTORY_FINISHED);
else
msg = msg_hash_to_str(MSG_SCANNING_OF_FILE_FINISHED);
-#ifdef RARCH_INTERNAL
- runloop_msg_queue_push(msg, 0, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
-#else
fprintf(stderr, "msg: %s\n", msg);
#endif
ui_companion_driver_notify_refresh();
@@ -1365,6 +1366,7 @@ bool task_push_dbscan(
t->state = db;
t->callback = cb;
t->title = strdup(msg_hash_to_str(MSG_PREPARING_FOR_CONTENT_SCAN));
+ t->alternative_look = true;
db->show_hidden_files = db_dir_show_hidden_files;
db->is_directory = directory;