--- a/ui/gtk/toolkit.c Sun Dec 07 20:00:33 2025 +0100 +++ b/ui/gtk/toolkit.c Sat Dec 13 15:58:58 2025 +0100 @@ -39,6 +39,7 @@ #include "../common/menu.h" #include "../common/toolbar.h" #include "../common/threadpool.h" +#include "../common/app.h" #include <cx/string.h> #include <cx/printf.h> @@ -51,13 +52,6 @@ static const 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; @@ -95,30 +89,13 @@ return application_name; } -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_onexit(ui_callback f, void *userdata) { - exit_func = f; - exit_data = userdata; -} - void ui_app_exit_on_shutdown(UiBool exitapp) { exit_on_shutdown = exitapp; } #ifdef UI_APPLICATION static void app_startup(GtkApplication* app, gpointer userdata) { - if(startup_func) { - startup_func(NULL, startup_data); - } + uic_application_startup(NULL); } static void app_activate(GtkApplication* app, gpointer userdata) { @@ -126,9 +103,7 @@ } static void app_shutdown(GtkApplication *app, gpointer userdata) { - if(exit_func) { - exit_func(NULL, exit_data); - } + uic_application_exit(NULL); ui_app_save_settings(); } @@ -148,13 +123,9 @@ free(appid.ptr); #else - if(startup_func) { - startup_func(NULL, startup_data); - } + uic_application_startup(NULL); gtk_main(); - if(exit_func) { - exit_func(NULL, exit_data); - } + uic_application_exit(NULL); ui_app_save_settings(); #endif if(exit_on_shutdown) { @@ -164,7 +135,7 @@ #ifndef UI_GTK2 void ui_app_quit() { - g_application_quit(G_APPLICATION(app)); + g_application_quit(G_APPLICATION(app)); // TODO: fix, does not work } GtkApplication* ui_get_application() { @@ -175,7 +146,7 @@ void ui_show(UiObject *obj) { gboolean visible = gtk_widget_is_visible(obj->widget); - uic_check_group_widgets(obj->ctx); + uic_check_state_widgets(obj->ctx); #if GTK_MAJOR_VERSION >= 4 gtk_window_present(GTK_WINDOW(obj->widget)); #elif GTK_MAJOR_VERSION <= 3 @@ -263,14 +234,14 @@ #endif } -void ui_set_visible(UIWIDGET widget, int visible) { +void ui_set_visible(UIWIDGET widget, UiBool visible) { #if GTK_MAJOR_VERSION >= 4 gtk_widget_set_visible(widget, visible); #else if(visible) { - gtk_widget_set_no_show_all(widget, FALSE); gtk_widget_show_all(widget); } else { + gtk_widget_set_no_show_all(widget, FALSE); gtk_widget_hide(widget); } #endif @@ -346,6 +317,11 @@ #if GTK_MAJOR_VERSION == 4 static const char *ui_gtk_css = +".ui-entry-box {\n" +" background-color: alpha(currentColor, 0.1);" +" border-radius: 6px;" +" padding: 7px;" +"}\n" "#path-textfield-box {\n" " background-color: alpha(currentColor, 0.1);" " border-radius: 6px;" @@ -529,17 +505,17 @@ } } -void ui_set_widget_groups(UiContext *ctx, GtkWidget *widget, const int *groups) { - if(!groups) { +void ui_set_widget_states(UiContext *ctx, GtkWidget *widget, const int *states) { + if(!states) { return; } - size_t ngroups = uic_group_array_size(groups); - ui_set_widget_ngroups(ctx, widget, groups, ngroups); + size_t nstates = uic_state_array_size(states); + ui_set_widget_nstates(ctx, widget, states, nstates); } -void ui_set_widget_ngroups(UiContext *ctx, GtkWidget *widget, const int *groups, size_t ngroups) { - if(ngroups > 0) { - uic_add_group_widget_i(ctx, widget, (ui_enablefunc)ui_set_enabled, groups, ngroups); +void ui_set_widget_nstates(UiContext *ctx, GtkWidget *widget, const int *states, size_t nstates) { + if(nstates > 0) { + uic_add_state_widget_i(ctx, widget, (ui_enablefunc)ui_set_enabled, states, nstates); ui_set_enabled(widget, FALSE); } } @@ -548,14 +524,14 @@ if(!states) { return; } - size_t nstates = uic_group_array_size(states); + size_t nstates = uic_state_array_size(states); ui_set_widget_nvisibility_states(ctx, widget, states, nstates); } void ui_set_widget_nvisibility_states(UiContext *ctx, GtkWidget *widget, const int *states, size_t ngroups) { if(ngroups > 0) { - uic_add_group_widget_i(ctx, widget, (ui_enablefunc)ui_set_visible, states, ngroups); + uic_add_state_widget_i(ctx, widget, (ui_enablefunc)ui_set_visible, states, ngroups); ui_set_visible(widget, FALSE); } }