Sun, 20 Jul 2025 17:42:11 +0200
dialog functions should use arg pointers
| ui/common/args.c | file | annotate | diff | comparison | revisions | |
| ui/common/args.h | file | annotate | diff | comparison | revisions | |
| ui/gtk/window.c | file | annotate | diff | comparison | revisions | |
| ui/ui/window.h | file | annotate | diff | comparison | revisions |
--- a/ui/common/args.c Sun Jul 20 14:04:19 2025 +0200 +++ b/ui/common/args.c Sun Jul 20 17:42:11 2025 +0200 @@ -33,6 +33,156 @@ #include "../ui/container.h" + +/* ---------------------------- UiDialogArgs ---------------------------- */ + +UiDialogArgs* ui_dialog_args_new(void) { + UiDialogArgs *args = malloc(sizeof(UiDialogArgs)); + memset(args, 0, sizeof(UiDialogArgs)); + return args; +} + +void ui_dialog_args_set_title(UiDialogArgs *args, const char *title) { + args->title = strdup(title); +} + +void ui_dialog_args_set_content(UiDialogArgs *args, const char *str) { + args->content = strdup(str); +} + +void ui_dialog_args_set_button1_label(UiDialogArgs *args, const char *label) { + args->button1_label = strdup(label); +} + +void ui_dialog_args_set_button2_label(UiDialogArgs *args, const char *label) { + args->button2_label = strdup(label); +} + +void ui_dialog_args_set_closebutton_label(UiDialogArgs *args, const char *label) { + args->closebutton_label = strdup(label); +} + +void ui_dialog_args_set_input_value(UiDialogArgs *args, const char *value) { + args->input_value = strdup(value); +} + +void ui_dialog_args_set_input(UiDialogArgs *args, UiBool input) { + args->input = input; +} + +void ui_dialog_args_set_password(UiDialogArgs *args, UiBool password) { + args->password = password; +} + +void ui_dialog_args_set_result(UiDialogArgs *args, ui_callback cb) { + args->result = cb; +} + +void ui_dialog_args_set_resultdata(UiDialogArgs *args, void *userdata) { + args->resultdata = userdata; +} + +void ui_dialog_args_free(UiDialogArgs *args) { + free((void*)args->title); + free((void*)args->button1_label); + free((void*)args->button2_label); + free((void*)args->content); + free((void*)args->closebutton_label); + free((void*)args->input_value); + free(args); +} + + +/* -------------------------- UiDialogWindowArgs -------------------------- */ + +UiDialogWindowArgs* ui_dialogwindow_args_new(void) { + UiDialogWindowArgs *args = malloc(sizeof(UiDialogWindowArgs)); + memset(args, 0, sizeof(UiDialogWindowArgs)); + return args; +} + +void ui_dialogwindow_args_set_modal(UiDialogWindowArgs *args, UiTri value) { + args->modal = value; +} + +void ui_dialogwindow_args_set_titlebar_buttons(UiDialogWindowArgs *args, UiTri value) { + args->titlebar_buttons = value; +} + +void ui_dialogwindow_args_set_show_closebutton(UiDialogWindowArgs *args, UiTri value) { + args->show_closebutton = value; +} + +void ui_dialogwindow_args_set_title(UiDialogWindowArgs *args, const char *title) { + args->title = strdup(title); +} + +void ui_dialogwindow_args_set_lbutton1(UiDialogWindowArgs *args, const char *label) { + args->lbutton1 = strdup(label); +} + +void ui_dialogwindow_args_set_lbutton2(UiDialogWindowArgs *args, const char *label) { + args->lbutton2 = strdup(label); +} + +void ui_dialogwindow_args_set_rbutton3(UiDialogWindowArgs *args, const char *label) { + args->rbutton3 = strdup(label); +} + +void ui_dialogwindow_args_set_rbutton4(UiDialogWindowArgs *args, const char *label) { + args->rbutton4 = strdup(label); +} + +void ui_dialogwindow_args_set_lbutton1_states(UiDialogWindowArgs *args, const int *states) { + // TODO +} + +void ui_dialogwindow_args_set_lbutton2_states(UiDialogWindowArgs *args, const int *states) { + // TODO +} + +void ui_dialogwindow_args_set_rbutton3_states(UiDialogWindowArgs *args, const int *states) { + // TODO +} + +void ui_dialogwindow_args_set_rbutton4_states(UiDialogWindowArgs *args, const int *states) { + // TODO +} + +void ui_dialogwindow_args_set_default_button(UiDialogWindowArgs *args, int button) { + args->default_button = button; +} + +void ui_dialogwindow_args_set_width(UiDialogWindowArgs *args, int width) { + args->width = width; +} + +void ui_dialogwindow_args_set_height(UiDialogWindowArgs *args, int height) { + args->height = height; +} + +void ui_dialogwindow_args_set_onclick(UiDialogWindowArgs *args, ui_callback cb) { + args->onclick = cb; +} + +void ui_dialogwindow_args_set_onclickdata(UiDialogWindowArgs *args, void *userdata) { + args->onclickdata = userdata; +} + +void ui_dialogwindow_args_free(UiDialogWindowArgs *args) { + free((void*)args->title); + free((void*)args->lbutton1); + free((void*)args->lbutton2); + free((void*)args->rbutton3); + free((void*)args->rbutton4); + free((void*)args->lbutton1_groups); + free((void*)args->lbutton2_groups); + free((void*)args->rbutton3_groups); + free((void*)args->rbutton4_groups); + free(args); +} + + /* ---------------------------- UiMenuItemArgs ---------------------------- */ UiMenuItemArgs* ui_menuitem_args_new(void) {
--- a/ui/common/args.h Sun Jul 20 14:04:19 2025 +0200 +++ b/ui/common/args.h Sun Jul 20 17:42:11 2025 +0200 @@ -29,6 +29,7 @@ #ifndef UIC_ARGS_H #define UIC_ARGS_H +#include "../ui/window.h" #include "../ui/container.h" #include "../ui/display.h" #include "../ui/button.h" @@ -42,6 +43,38 @@ extern "C" { #endif +UIEXPORT UiDialogArgs* ui_dialog_args_new(void); +UIEXPORT void ui_dialog_args_set_title(UiDialogArgs *args, const char *title); +UIEXPORT void ui_dialog_args_set_content(UiDialogArgs *args, const char *str); +UIEXPORT void ui_dialog_args_set_button1_label(UiDialogArgs *args, const char *label); +UIEXPORT void ui_dialog_args_set_button2_label(UiDialogArgs *args, const char *label); +UIEXPORT void ui_dialog_args_set_closebutton_label(UiDialogArgs *args, const char *label); +UIEXPORT void ui_dialog_args_set_input_value(UiDialogArgs *args, const char *value); +UIEXPORT void ui_dialog_args_set_input(UiDialogArgs *args, UiBool input); +UIEXPORT void ui_dialog_args_set_password(UiDialogArgs *args, UiBool password); +UIEXPORT void ui_dialog_args_set_result(UiDialogArgs *args, ui_callback cb); +UIEXPORT void ui_dialog_args_set_resultdata(UiDialogArgs *args, void *userdata); +UIEXPORT void ui_dialog_args_free(UiDialogArgs *args); + +UIEXPORT UiDialogWindowArgs* ui_dialogwindow_args_new(void); +UIEXPORT void ui_dialogwindow_args_set_modal(UiDialogWindowArgs *args, UiTri value); +UIEXPORT void ui_dialogwindow_args_set_titlebar_buttons(UiDialogWindowArgs *args, UiTri value); +UIEXPORT void ui_dialogwindow_args_set_show_closebutton(UiDialogWindowArgs *args, UiTri value); +UIEXPORT void ui_dialogwindow_args_set_title(UiDialogWindowArgs *args, const char *title); +UIEXPORT void ui_dialogwindow_args_set_lbutton1(UiDialogWindowArgs *args, const char *label); +UIEXPORT void ui_dialogwindow_args_set_lbutton2(UiDialogWindowArgs *args, const char *label); +UIEXPORT void ui_dialogwindow_args_set_rbutton3(UiDialogWindowArgs *args, const char *label); +UIEXPORT void ui_dialogwindow_args_set_rbutton4(UiDialogWindowArgs *args, const char *label); +UIEXPORT void ui_dialogwindow_args_set_lbutton1_states(UiDialogWindowArgs *args, const int *states); +UIEXPORT void ui_dialogwindow_args_set_lbutton2_states(UiDialogWindowArgs *args, const int *states); +UIEXPORT void ui_dialogwindow_args_set_rbutton3_states(UiDialogWindowArgs *args, const int *states); +UIEXPORT void ui_dialogwindow_args_set_rbutton4_states(UiDialogWindowArgs *args, const int *states); +UIEXPORT void ui_dialogwindow_args_set_default_button(UiDialogWindowArgs *args, int button); +UIEXPORT void ui_dialogwindow_args_set_width(UiDialogWindowArgs *args, int width); +UIEXPORT void ui_dialogwindow_args_set_height(UiDialogWindowArgs *args, int height); +UIEXPORT void ui_dialogwindow_args_set_onclick(UiDialogWindowArgs *args, ui_callback cb); +UIEXPORT void ui_dialogwindow_args_set_onclickdata(UiDialogWindowArgs *args, void *userdata); +UIEXPORT void ui_dialogwindow_args_free(UiDialogWindowArgs *args); UIEXPORT UiMenuItemArgs* ui_menuitem_args_new(void); UIEXPORT void ui_menuitem_args_set_label(UiMenuItemArgs *args, const char *label);
--- a/ui/gtk/window.c Sun Jul 20 14:04:19 2025 +0200 +++ b/ui/gtk/window.c Sun Jul 20 17:42:11 2025 +0200 @@ -333,35 +333,35 @@ } } -void ui_dialog_create(UiObject *parent, UiDialogArgs args) { - AdwDialog *dialog = adw_alert_dialog_new(args.title, args.content); +void ui_dialog_create(UiObject *parent, UiDialogArgs *args) { + AdwDialog *dialog = adw_alert_dialog_new(args->title, args->content); UiEventData *event = malloc(sizeof(UiEventData)); - event->callback = args.result; - event->userdata = args.resultdata; + event->callback = args->result; + event->userdata = args->resultdata; event->customdata = NULL; event->customint = 0; event->value = 0; event->obj = parent; - if(args.button1_label) { - adw_alert_dialog_add_response(ADW_ALERT_DIALOG(dialog), "btn1", args.button1_label); + if(args->button1_label) { + adw_alert_dialog_add_response(ADW_ALERT_DIALOG(dialog), "btn1", args->button1_label); } - if(args.button2_label) { - adw_alert_dialog_add_response(ADW_ALERT_DIALOG(dialog), "btn2", args.button2_label); + if(args->button2_label) { + adw_alert_dialog_add_response(ADW_ALERT_DIALOG(dialog), "btn2", args->button2_label); } - if(args.closebutton_label) { - adw_alert_dialog_add_response(ADW_ALERT_DIALOG(dialog), "close", args.closebutton_label); + if(args->closebutton_label) { + adw_alert_dialog_add_response(ADW_ALERT_DIALOG(dialog), "close", args->closebutton_label); adw_alert_dialog_set_close_response(ADW_ALERT_DIALOG(dialog), "close"); } GtkWidget *entry = NULL; - if(args.input || args.password) { + if(args->input || args->password) { entry = gtk_entry_new(); - if(args.password) { + if(args->password) { gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); } - if(args.input_value) { - ENTRY_SET_TEXT(entry, args.input_value); + if(args->input_value) { + ENTRY_SET_TEXT(entry, args->input_value); } adw_alert_dialog_set_extra_child(ADW_ALERT_DIALOG(dialog), entry); event->customdata = entry; @@ -416,41 +416,41 @@ gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); GtkWidget *dialog_w = GTK_WIDGET(dialog); - if(args.title) { - gtk_window_set_title(GTK_WINDOW(dialog), args.title); + if(args->title) { + gtk_window_set_title(GTK_WINDOW(dialog), args->title); } - if(args.button1_label) { - gtk_dialog_add_button(dialog, args.button1_label, 1); + if(args->button1_label) { + gtk_dialog_add_button(dialog, args->button1_label, 1); } - if(args.button2_label) { - gtk_dialog_add_button(dialog, args.button2_label, 2); + if(args->button2_label) { + gtk_dialog_add_button(dialog, args->button2_label, 2); } - if(args.closebutton_label) { - gtk_dialog_add_button(dialog, args.closebutton_label, 0); + if(args->closebutton_label) { + gtk_dialog_add_button(dialog, args->closebutton_label, 0); } GtkWidget *content_area = gtk_dialog_get_content_area(dialog); - if(args.content) { - GtkWidget *label = gtk_label_new(args.content); + if(args->content) { + GtkWidget *label = gtk_label_new(args->content); BOX_ADD(content_area, label); } GtkWidget *textfield = NULL; - if(args.input || args.password) { + if(args->input || args->password) { textfield = gtk_entry_new(); - if(args.password) { + if(args->password) { gtk_entry_set_visibility(GTK_ENTRY(textfield), FALSE); } - if(args.input_value) { - ENTRY_SET_TEXT(textfield, args.input_value); + if(args->input_value) { + ENTRY_SET_TEXT(textfield, args->input_value); } BOX_ADD(content_area, textfield); } UiEventData *event = malloc(sizeof(UiEventData)); event->obj = parent; - event->callback = args.result; - event->userdata = args.resultdata; + event->callback = args->result; + event->userdata = args->resultdata; event->value = 0; event->customdata = textfield; @@ -749,18 +749,18 @@ -UiObject* ui_dialog_window_create(UiObject *parent, UiDialogWindowArgs args) { +UiObject* ui_dialog_window_create(UiObject *parent, UiDialogWindowArgs *args) { GtkWidget *dialog = DIALOG_NEW(); - if(args.width > 0 || args.height > 0) { + if(args->width > 0 || args->height > 0) { gtk_window_set_default_size( GTK_WINDOW(dialog), - args.width, - args.height); + args->width, + args->height); } gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(parent->widget)); - if(args.modal != UI_OFF) { + if(args->modal != UI_OFF) { gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); } @@ -770,15 +770,15 @@ obj->destroy = ui_window_widget_destroy; nwindows++; - if(args.title != NULL) { - gtk_window_set_title(GTK_WINDOW(dialog), args.title); + if(args->title != NULL) { + gtk_window_set_title(GTK_WINDOW(dialog), args->title); } #if ! GTK_CHECK_VERSION(4, 10, 0) UiEventData *event = malloc(sizeof(UiEventData)); event->obj = obj; - event->userdata = args.onclickdata; - event->callback = args.onclick; + event->userdata = args->onclickdata; + event->callback = args->onclick; event->value = 0; event->customdata = NULL; @@ -816,44 +816,44 @@ GtkWidget *content_vbox = ui_gtk_vbox_new(0); obj->container = ui_box_container(obj, content_vbox, UI_CONTAINER_VBOX); - if(args.lbutton1 || args.lbutton2 || args.rbutton3 || args.rbutton4) { + if(args->lbutton1 || args->lbutton2 || args->rbutton3 || args->rbutton4) { #if GTK_CHECK_VERSION(3, 10, 0) - if(args.titlebar_buttons != UI_OFF) { + if(args->titlebar_buttons != UI_OFF) { GtkWidget *headerbar = gtk_header_bar_new(); gtk_window_set_titlebar(GTK_WINDOW(dialog), headerbar); - if(args.show_closebutton == UI_OFF) { + if(args->show_closebutton == UI_OFF) { HEADERBAR_SHOW_CLOSEBUTTON(headerbar, FALSE); } - if(args.lbutton1) { - GtkWidget *button = ui_create_button(obj, args.lbutton1, NULL, args.onclick, args.onclickdata, 1, args.default_button == 1); + if(args->lbutton1) { + GtkWidget *button = ui_create_button(obj, args->lbutton1, NULL, args->onclick, args->onclickdata, 1, args->default_button == 1); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); - if(args.default_button == 1) { + if(args->default_button == 1) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); DEFAULT_BUTTON(dialog, button); } } - if(args.lbutton2) { - GtkWidget *button = ui_create_button(obj, args.lbutton2, NULL, args.onclick, args.onclickdata, 2, args.default_button == 2); + if(args->lbutton2) { + GtkWidget *button = ui_create_button(obj, args->lbutton2, NULL, args->onclick, args->onclickdata, 2, args->default_button == 2); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); - if(args.default_button == 2) { + if(args->default_button == 2) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); DEFAULT_BUTTON(dialog, button); } } - if(args.rbutton4) { - GtkWidget *button = ui_create_button(obj, args.rbutton4, NULL, args.onclick, args.onclickdata, 4, args.default_button == 4); + if(args->rbutton4) { + GtkWidget *button = ui_create_button(obj, args->rbutton4, NULL, args->onclick, args->onclickdata, 4, args->default_button == 4); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); - if(args.default_button == 4) { + if(args->default_button == 4) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); DEFAULT_BUTTON(dialog, button); } } - if(args.rbutton3) { - GtkWidget *button = ui_create_button(obj, args.rbutton3, NULL, args.onclick, args.onclickdata, 3, args.default_button == 3); + if(args->rbutton3) { + GtkWidget *button = ui_create_button(obj, args->rbutton3, NULL, args->onclick, args->onclickdata, 3, args->default_button == 3); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); - if(args.default_button == 3) { + if(args->default_button == 3) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); DEFAULT_BUTTON(dialog, button); } @@ -871,18 +871,18 @@ GtkWidget *widget = ui_box_set_margin(grid, 16); gtk_grid_set_column_homogeneous(GTK_GRID(grid), TRUE); - if(args.lbutton1) { - GtkWidget *button = ui_create_button(obj, args.lbutton1, NULL, args.onclick, args.onclickdata, 1, args.default_button == 1); + if(args->lbutton1) { + GtkWidget *button = ui_create_button(obj, args->lbutton1, NULL, args->onclick, args->onclickdata, 1, args->default_button == 1); gtk_grid_attach(GTK_GRID(grid), button, 0, 0, 1, 1); - if(args.default_button == 1) { + if(args->default_button == 1) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); DEFAULT_BUTTON(dialog, button); } } - if(args.lbutton2) { - GtkWidget *button = ui_create_button(obj, args.lbutton2, NULL, args.onclick, args.onclickdata, 2, args.default_button == 2); + if(args->lbutton2) { + GtkWidget *button = ui_create_button(obj, args->lbutton2, NULL, args->onclick, args->onclickdata, 2, args->default_button == 2); gtk_grid_attach(GTK_GRID(grid), button, 1, 0, 1, 1); - if(args.default_button == 2) { + if(args->default_button == 2) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); DEFAULT_BUTTON(dialog, button); } @@ -890,18 +890,18 @@ GtkWidget *space = gtk_label_new(NULL); gtk_widget_set_hexpand(space, TRUE); gtk_grid_attach(GTK_GRID(grid), space, 2, 0, 1, 1); - if(args.rbutton3) { - GtkWidget *button = ui_create_button(obj, args.rbutton3, NULL, args.onclick, args.onclickdata, 3, args.default_button == 3); + if(args->rbutton3) { + GtkWidget *button = ui_create_button(obj, args->rbutton3, NULL, args->onclick, args->onclickdata, 3, args->default_button == 3); gtk_grid_attach(GTK_GRID(grid), button, 3, 0, 1, 1); - if(args.default_button == 3) { + if(args->default_button == 3) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); DEFAULT_BUTTON(dialog, button); } } - if(args.rbutton4) { - GtkWidget *button = ui_create_button(obj, args.rbutton4, NULL, args.onclick, args.onclickdata, 4, args.default_button == 4); + if(args->rbutton4) { + GtkWidget *button = ui_create_button(obj, args->rbutton4, NULL, args->onclick, args->onclickdata, 4, args->default_button == 4); gtk_grid_attach(GTK_GRID(grid), button, 4, 0, 1, 1); - if(args.default_button == 4) { + if(args->default_button == 4) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); DEFAULT_BUTTON(dialog, button); }
--- a/ui/ui/window.h Sun Jul 20 14:04:19 2025 +0200 +++ b/ui/ui/window.h Sun Jul 20 17:42:11 2025 +0200 @@ -75,16 +75,16 @@ UIEXPORT UiObject *ui_window(const char *title, void *window_data); UIEXPORT UiObject *ui_sidebar_window(const char *title, void *window_data); UIEXPORT UiObject *ui_simple_window(const char *title, void *window_data); -UIEXPORT UiObject *ui_dialog_window_create(UiObject *parent, UiDialogWindowArgs args); +UIEXPORT UiObject *ui_dialog_window_create(UiObject *parent, UiDialogWindowArgs *args); -#define ui_dialog_window(parent, ...) ui_dialog_window_create(parent, (UiDialogWindowArgs){ __VA_ARGS__ }); -#define ui_dialog_window0(parent) ui_dialog_window_create(parent, (UiDialogWindowArgs){ 0 }); +#define ui_dialog_window(parent, ...) ui_dialog_window_create(parent, &(UiDialogWindowArgs){ __VA_ARGS__ }); +#define ui_dialog_window0(parent) ui_dialog_window_create(parent, &(UiDialogWindowArgs){ 0 }); UIEXPORT void ui_window_size(UiObject *obj, int width, int height); -#define ui_dialog(parent, ...) ui_dialog_create(parent, (UiDialogArgs){ __VA_ARGS__ } ) +#define ui_dialog(parent, ...) ui_dialog_create(parent, &(UiDialogArgs){ __VA_ARGS__ } ) -UIEXPORT void ui_dialog_create(UiObject *parent, UiDialogArgs args); +UIEXPORT void ui_dialog_create(UiObject *parent, UiDialogArgs *args); UIEXPORT void ui_openfiledialog(UiObject *obj, unsigned int mode, ui_callback file_selected_callback, void *cbdata); UIEXPORT void ui_savefiledialog(UiObject *obj, const char *name, ui_callback file_selected_callback, void *cbdata);