diff -r a24465cc7262 -r 6dd780cbc8c6 ui/gtk/toolkit.c --- a/ui/gtk/toolkit.c Sun Jan 15 15:08:07 2017 +0100 +++ b/ui/gtk/toolkit.c Sun Jan 22 11:16:21 2017 +0100 @@ -38,10 +38,21 @@ #include "../common/document.h" #include "../common/properties.h" +#include + #include +static GtkApplication *app; + static char *application_name; +static ui_callback startup_func; +static void *startup_data; +static ui_callback open_func; +void *open_data; +static ui_callback exit_func; +void *exit_data; + static ui_callback appclose_fnc; static void *appclose_udata; @@ -66,23 +77,62 @@ return application_name; } -void ui_exitfunc(ui_callback f, void *userdata) { - appclose_fnc = f; - appclose_udata = userdata; +void ui_onstartup(ui_callback f, void *userdata) { + startup_func = f; + startup_data = userdata; +} + +void ui_onopen(ui_callback f, void *userdata) { + open_func = f; + open_data = userdata; } -void ui_openfilefunc(ui_callback f, void *userdata) { - // OS X only +void ui_onexit(ui_callback f, void *userdata) { + exit_func = f; + exit_data = userdata; +} + + +static void app_startup(GtkApplication* app, gpointer userdata) { + startup_func(NULL, startup_data); +} + +static void app_activate(GtkApplication* app, gpointer userdata) { + printf("activate\n"); } void ui_main() { +#ifndef GTK2_LEGACY + sstr_t appid = ucx_sprintf( + "ui.%s", + application_name ? application_name : "application1"); + + app = gtk_application_new( + appid.ptr, + G_APPLICATION_FLAGS_NONE); + g_signal_connect (app, "startup", G_CALLBACK (app_startup), NULL); + g_signal_connect (app, "activate", G_CALLBACK (app_activate), NULL); + g_application_run(G_APPLICATION (app), 0, NULL); + g_object_unref (app); + + free(appid.ptr); +#else gtk_main(); +#endif if(appclose_fnc) { appclose_fnc(NULL, appclose_udata); } uic_store_app_properties(); } +void ui_app_quit() { + g_application_quit(G_APPLICATION(app)); +} + +GtkApplication* ui_get_application() { + return app; +} + void ui_show(UiObject *obj) { uic_check_group_widgets(obj->ctx); gtk_widget_show_all(obj->widget);