From a68bd97322e4a81940f734bc8e8e36a1a2ad99cc Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 8 Oct 2025 18:35:35 +0600 Subject: [PATCH] Added new functions --- source/libublsettings-gtk3.c | 38 ++++++++++++++++++++++++++++++++++++ source/libublsettings-gtk3.h | 3 +++ 2 files changed, 41 insertions(+) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index c1206f9..c4d5336 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -338,6 +338,44 @@ void yon_combo_box_set_default(GtkComboBoxText *target, char *command, char*(res g_thread_new("combo_get_default",(GThreadFunc)__yon_combo_set_default,target_struct); } +void on_widget_changed(GObject* target, GdkEvent*, gpointer user_data){ + char *config_parameter = g_object_get_data(target,"config_parameter"); + char *get_command = g_object_get_data(target,"get_command"); + char *object_property = g_object_get_data(target,"object_property"); + GValue value = G_VALUE_INIT; + g_object_get_property(target,object_property,&value); + char *value_str = g_strdup_value_contents(&value); + if (!yon_char_is_empty(value_str)||strcmp(value_str,"[invalid GValue]")){ + yon_config_register(config_parameter,get_command,value_str); + } + if (!yon_char_is_empty(value_str)) free(value_str); +} + +void yon_gtk_widget_register_parameter(GtkWidget *target, char *config_parameter, char *get_command, char *object_property){ + g_return_if_fail(G_IS_OBJECT(target)); + char *signal_name = yon_char_unite("notify::",object_property,NULL); + g_object_set_data(G_OBJECT(target),"config_parameter",yon_char_new(config_parameter)); + g_object_set_data(G_OBJECT(target),"get_command",yon_char_new(get_command)); + g_object_set_data(G_OBJECT(target),"object_property",yon_char_new(object_property)); + g_signal_connect(G_OBJECT(target),signal_name,G_CALLBACK(on_widget_changed),NULL); +} + +dictionary *__register_widgets = NULL; + +void yon_gtk_widget_register_parameter_manual(GtkWidget *target, char *config_parameter, char *get_command, char *object_property){ + yon_dictionary_add_or_create_if_exists_with_data(__register_widgets,NULL,target); + g_object_set_data(G_OBJECT(target),"config_parameter",yon_char_new(config_parameter)); + g_object_set_data(G_OBJECT(target),"get_command",yon_char_new(get_command)); + g_object_set_data(G_OBJECT(target),"object_property",yon_char_new(object_property)); +} + +void yon_gtk_widget_register_parameter_activate(){ + dictionary *cur; + for_dictionaries(cur,__register_widgets){ + on_widget_changed(yon_dictionary_get_data(cur,GObject*),NULL,NULL); + } +} + // dictionary *__yon_config_listeners = NULL; // typedef struct { // GtkWidget *target; diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index 344fa6f..3ce1117 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -610,4 +610,7 @@ void yon_combo_box_set_default(GtkComboBoxText *target, char *command, char*(res int yon_ip_mask_get_bits(char *mask); int yon_ip_check(char *ip); +void yon_gtk_widget_register_parameter(GtkWidget *target, char *config_parameter, char *get_command, char *object_property); +void yon_gtk_widget_register_parameter_manual(GtkWidget *target, char *config_parameter, char *get_command, char *object_property); +void yon_gtk_widget_register_parameter_activate(); #endif \ No newline at end of file