diff --git a/libublsettingsui-gtk3-config-window.glade b/libublsettingsui-gtk3-config-window.glade index df65feb..1adaf1f 100644 --- a/libublsettingsui-gtk3-config-window.glade +++ b/libublsettingsui-gtk3-config-window.glade @@ -7,7 +7,6 @@ 450 200 False - True com.ublinux.libublsettingsui-gtk3 dialog diff --git a/source/libublsettingsui-gtk3-config-window.c b/source/libublsettingsui-gtk3-config-window.c index 2ca27a6..ae12e42 100644 --- a/source/libublsettingsui-gtk3-config-window.c +++ b/source/libublsettingsui-gtk3-config-window.c @@ -36,6 +36,7 @@ typedef struct yon_configuration_parameters { dictionary_fields(yon_configuration_parameters); char *label; char *value; + GCallback func; enum CONFIGURATION_PARAMETER_TYPE type; } yon_configuration_parameters; @@ -51,6 +52,8 @@ yon_configuration_entry_parameter *yon_configuration_entry_parameter_new(char *i return parameter; } +yon_configuration_parameters *__yon_settings_parameters = NULL; + yon_configuration_combo_parameter *yon_configuration_combo_box_parameter_new(char *id, char *label_text, config_str parameters){ yon_configuration_combo_parameter *parameter = malloc(sizeof(yon_configuration_combo_parameter)); parameter->Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); @@ -70,6 +73,12 @@ yon_configuration_combo_parameter *yon_configuration_combo_box_parameter_new(cha gtk_combo_box_set_active(GTK_COMBO_BOX(parameter->ComboBox),0); } g_signal_connect(G_OBJECT(parameter->ComboBox),"changed",G_CALLBACK(on_confuguration_combo_box_changed),id); + yon_configuration_parameters *target = (yon_configuration_parameters*)yon_dictionary_get((dictionary**)&__yon_settings_parameters,id); + if (target){ + if (target->func){ + g_signal_connect(G_OBJECT(parameter->ComboBox),"changed",G_CALLBACK(target->func),target->value); + } + } gtk_widget_show_all(parameter->Box); return parameter; } @@ -84,8 +93,6 @@ ubl_settings_window *yon_ubl_settings_window_new(){ return window; } -yon_configuration_parameters *__yon_settings_parameters = NULL; - yon_configuration_boolean_parameter *__yon_configuration_boolean_parameter_new(char *id, char *label_text){ yon_configuration_boolean_parameter *parameter = malloc(sizeof(yon_configuration_boolean_parameter)); @@ -109,6 +116,7 @@ yon_configuration_parameters *yon_configuration_parameter_new() dict->prev = NULL; dict->data = NULL; dict->value = NULL; + dict->func = NULL; dict->first = (struct yon_configuration_parameters*)dict; dict->data_type = DICTIONARY_OTHER_TYPE; return dict; @@ -123,6 +131,7 @@ yon_configuration_parameters *yon_configuration_parameter_append(yon_configurati targetdict->next->data_type = DICTIONARY_OTHER_TYPE; targetdict->next->data = NULL; targetdict->next->value = NULL; + targetdict->next->func = NULL; return targetdict->next; } @@ -202,19 +211,19 @@ void __yon_on_boolean_parameter_toggled(GtkToggleButton *self ,char *id){ void on_confuguration_combo_box_changed(GtkComboBox *self, char *id){ yon_configuration_parameters *cur = (yon_configuration_parameters*)yon_dictionary_get((dictionary**)&__yon_settings_parameters,id); if (cur){ - cur->value = yon_char_new((char*)gtk_combo_box_get_active_id(self)); + char *cur_value = yon_char_new((char*)gtk_combo_box_get_active_id(self)); if (yon_window_config_check_init()){ - yon_window_config_add_instant_parameter(id,"settings",cur->value,YON_TYPE_STRING); + yon_window_config_add_instant_parameter(id,"settings",cur_value,YON_TYPE_STRING); } } } //init section -void yon_configuration_window_add_combo_box_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label,...){ +void yon_configuration_window_add_combo_box_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label, GCallback func, gpointer data,...){ yon_configuration_parameter_add_or_create_if_exists_with_data(__yon_settings_parameters,id,label); va_list args; - va_start(args,label); + va_start(args,data); char *cur=NULL; int size=0; config_str variants = NULL; @@ -234,6 +243,8 @@ void yon_configuration_window_add_combo_box_parameter(enum CONFIGURATION_PARAMET parameter->data = (void*)variants; parameter->type = CONFIGURATION_PARAMETER_COMBO_BOX; + parameter->func = func; + parameter->value = data; } } diff --git a/source/libublsettingsui-gtk3.h b/source/libublsettingsui-gtk3.h index ac56b3d..76609a0 100644 --- a/source/libublsettingsui-gtk3.h +++ b/source/libublsettingsui-gtk3.h @@ -261,7 +261,7 @@ enum CONFIGURATION_PARAMETER_TYPE{ void yon_ubl_settings_window_init(GtkMenu *menu); void *yon_ubl_settings_window_get(char *id); void yon_configuration_window_add_boolean_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label); -void yon_configuration_window_add_combo_box_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label,...); +void yon_configuration_window_add_combo_box_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label, GCallback func, gpointer data, ...); typedef struct { GtkWidget *window;