From 69434f91818375c8bbd38e75af992ab599eeed14 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 21 Aug 2025 13:38:46 +0600 Subject: [PATCH] Added function to set custom data command for exit config check window --- source/libublsettingsui-gtk3.c | 19 +++++++++++++++++-- source/libublsettingsui-gtk3.h | 2 ++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/source/libublsettingsui-gtk3.c b/source/libublsettingsui-gtk3.c index 3134af5..d15dc5f 100644 --- a/source/libublsettingsui-gtk3.c +++ b/source/libublsettingsui-gtk3.c @@ -233,9 +233,19 @@ int yon_ubl_connect_config(_template_config *config){ return replaces; } -gboolean on_window_delete (GtkWidget *, GdkEvent *,template_main_window *widgets){ +gboolean on_window_delete (GtkWidget *self, GdkEvent *,template_main_window *){ template_saving_window *window = yon_exit_window_new(); if (window){ + GCallback delete_callback = g_object_get_data(G_OBJECT(self),"exit_data_callback"); + if (delete_callback){ + ((void(*)(template_saving_window*))delete_callback)(window); + GtkTreeIter iter; + if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&iter)){ + gtk_widget_destroy(window->Window); + free(window); + return 0; + } + } gtk_widget_show(window->Window); return 1; } @@ -246,6 +256,11 @@ void yon_window_remove_exit_config_check(template_main_window *widgets){ g_signal_handlers_disconnect_by_func(G_OBJECT(widgets->Window),G_CALLBACK(on_window_delete),widgets); } +void yon_window_set_exit_config_check(template_main_window *widgets, GCallback data_callback_function){ + g_signal_connect(G_OBJECT(widgets->Window),"delete-event",G_CALLBACK(on_window_delete),widgets->Window); + g_object_set_data(G_OBJECT(widgets->Window),"exit_data_callback",data_callback_function); +} + template_main_window *setup_window(){ /* Widgets getting | Получение виджетов */ template_main_window *widgets = malloc(sizeof(template_main_window)); @@ -318,7 +333,7 @@ template_main_window *setup_window(){ g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),template_app_information.wiki_link); g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),template_app_information.app_version); - // g_signal_connect(G_OBJECT(widgets->Window),"delete-event",G_CALLBACK(on_window_delete),widgets); + g_signal_connect(G_OBJECT(widgets->Window),"delete-event",G_CALLBACK(on_window_delete),NULL); if (yon_char_is_empty(__yon_config_mode)){ int size; diff --git a/source/libublsettingsui-gtk3.h b/source/libublsettingsui-gtk3.h index b2cf715..9708ff7 100644 --- a/source/libublsettingsui-gtk3.h +++ b/source/libublsettingsui-gtk3.h @@ -325,6 +325,8 @@ void yon_ubl_settings_window_set_standard_callbacks(template_main_window *widget void yon_window_remove_exit_config_check(template_main_window *widgets); +void yon_window_set_exit_config_check(template_main_window *widgets, GCallback data_callback_function); + typedef struct { GtkWidget *Window; GtkWidget *HeaderTopic;