ocarina: Created thread-safe ocarina callbacks
I use the gdk threading functions to change my gtk code. This should create fewer UI inconsistencies whenever anything changes, and it should also allow me to trigger TRACK_LOADED from a new gstreamer thread. Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
parent
7150e8bdee
commit
6b6b2814c3
|
@ -9,61 +9,48 @@
|
|||
#include <ocarina/settings.h>
|
||||
#include <ocarina/footer.h>
|
||||
|
||||
void cb_play()
|
||||
void cb_handler(callback_t type)
|
||||
{
|
||||
println("Ocarina PLAY callback!");
|
||||
hide_button_list(PLAY_BUTTON_LIST);
|
||||
show_button_list(PAUSE_BUTTON_LIST);
|
||||
}
|
||||
libsaria::Track *current;
|
||||
|
||||
void cb_pause()
|
||||
{
|
||||
println("Ocarina PAUSE callback!");
|
||||
hide_button_list(PAUSE_BUTTON_LIST);
|
||||
show_button_list(PLAY_BUTTON_LIST);
|
||||
}
|
||||
gdk_threads_enter();
|
||||
|
||||
void cb_idle_task_queued()
|
||||
{
|
||||
println("Ocarina IDLE_TASK_QUEUED callback!");
|
||||
ocarina::idle_add();
|
||||
}
|
||||
switch (type) {
|
||||
case PLAY:
|
||||
hide_button_list(PLAY_BUTTON_LIST);
|
||||
show_button_list(PAUSE_BUTTON_LIST);
|
||||
break;
|
||||
case PAUSE:
|
||||
hide_button_list(PAUSE_BUTTON_LIST);
|
||||
show_button_list(PLAY_BUTTON_LIST);
|
||||
break;
|
||||
case IDLE_TASK_QUEUED:
|
||||
ocarina::idle_add();
|
||||
break;
|
||||
case LIBRARY_REFRESH:
|
||||
ocarina::library::refresh();
|
||||
library_settings_refresh();
|
||||
break;
|
||||
case QUEUE_REFRESH:
|
||||
ocarina::queue::refresh();
|
||||
break;
|
||||
case REFILTER:
|
||||
ocarina::library::refilter();
|
||||
break;
|
||||
case TRACK_LOADED:
|
||||
current = libsaria::current_track();
|
||||
change_footer(current);
|
||||
ocarina::library::scroll_to(current);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
void cb_library_refresh()
|
||||
{
|
||||
println("Ocarina LIBRARY_REFRESH callback!");
|
||||
ocarina::library::refresh();
|
||||
library_settings_refresh();
|
||||
}
|
||||
|
||||
void cb_queue_refresh()
|
||||
{
|
||||
println("Ocarina QUEUE_REFRESH callback!");
|
||||
ocarina::queue::refresh();
|
||||
}
|
||||
|
||||
void cb_refilter()
|
||||
{
|
||||
println("Ocarina REFILTER callback!");
|
||||
ocarina::library::refilter();
|
||||
}
|
||||
|
||||
void cb_track_loaded()
|
||||
{
|
||||
println("Ocarina TRACK_LOADED callback!");
|
||||
libsaria::Track *current = libsaria::current_track();
|
||||
change_footer(current);
|
||||
ocarina::library::scroll_to(current);
|
||||
gdk_threads_leave();
|
||||
}
|
||||
|
||||
void setup_callbacks()
|
||||
{
|
||||
println("Ocarina setting up callbacks");
|
||||
register_callback(PLAY, cb_play);
|
||||
register_callback(PAUSE, cb_pause);
|
||||
register_callback(IDLE_TASK_QUEUED, cb_idle_task_queued);
|
||||
register_callback(LIBRARY_REFRESH, cb_library_refresh);
|
||||
register_callback(QUEUE_REFRESH, cb_queue_refresh);
|
||||
register_callback(REFILTER, cb_refilter);
|
||||
register_callback(TRACK_LOADED, cb_track_loaded);
|
||||
set_cb_handler(cb_handler);
|
||||
}
|
||||
|
|
|
@ -75,13 +75,19 @@ int main(int argc, char **argv)
|
|||
|
||||
libsaria::init(argc, argv);
|
||||
setup_callbacks();
|
||||
|
||||
g_thread_init(NULL);
|
||||
gdk_threads_init();
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
ocarina::init(argc, argv);
|
||||
|
||||
if (argc > 1)
|
||||
libsaria::audio::load(argv[1]);
|
||||
|
||||
gdk_threads_enter();
|
||||
gtk_main();
|
||||
gdk_threads_leave();
|
||||
libsaria::quit();
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue