diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 37b0108..0efee6e 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -715,16 +715,26 @@ void on_groups_save(GtkWidget *self, dictionary *dict){ } void on_groups_clicked(GtkWidget *self, GtkEntry *output_target){ - ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(); + ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(0); gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),MAIN_GROUP_LABEL); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),MAIN_GROUP_LABEL); - GtkTreeIter iter, itar; + GtkTreeIter iter, itar,itor; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.groups_list),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.groups_list),&iter)){ char *groupname; gtk_tree_model_get(GTK_TREE_MODEL(main_config.groups_list),&iter,1,&groupname,-1); - gtk_list_store_append(window->list,&itar); - gtk_list_store_set(window->list,&itar,1,groupname,-1); + int valid1 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itor); + for (;valid1;valid1 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itor)){ + char *checked; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itor,1,&checked,-1); + if (!strcmp(groupname,checked)){ + break; + } + } + if (!valid1){ + gtk_list_store_append(window->list,&itar); + gtk_list_store_set(window->list,&itar,1,groupname,-1); + } free(groupname); } gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->GroupsTree),0),0); @@ -760,10 +770,10 @@ void on_groups_multiple_save(GtkWidget *self, dictionary *dict){ } void on_groups_multiple_clicked(GtkWidget *self, GtkEntry *output_target){ - ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(); + ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(0); gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),ADDITIONAL_GROUPS_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),ADDITIONAL_GROUPS_TITLE_LABEL); - GtkTreeIter iter, itar; + GtkTreeIter iter, itar,itor; char *output = (char*)gtk_entry_get_text(output_target); int size=0; config_str parsed=NULL; @@ -774,8 +784,18 @@ void on_groups_multiple_clicked(GtkWidget *self, GtkEntry *output_target){ for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.groups_list),&iter)){ char *groupname; gtk_tree_model_get(GTK_TREE_MODEL(main_config.groups_list),&iter,1,&groupname,-1); - gtk_list_store_append(window->list,&itar); - gtk_list_store_set(window->list,&itar,1,groupname,-1); + int valid1 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itor); + for (;valid1;valid1 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itor)){ + char *checked; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itor,1,&checked,-1); + if (!strcmp(groupname,checked)){ + break; + } + } + if (!valid1){ + gtk_list_store_append(window->list,&itar); + gtk_list_store_set(window->list,&itar,1,groupname,-1); + } free(groupname); } valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&iter); @@ -1007,11 +1027,11 @@ void on_ubl_settings_usergroups_additional_settings_open(GtkWidget *self, main_w } void on_user_choose(GtkWidget *self, GtkEntry *target){ - ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(); + ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(1); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),GROUP_USERS_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),GROUP_USERS_TITLE_LABEL); gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(window->GroupColumn),USERS_LABEL); - GtkTreeIter iter, itar; + GtkTreeIter iter, itar,itor; char *output = (char*)gtk_entry_get_text(target); int size=0; config_str parsed=NULL; @@ -1022,8 +1042,18 @@ void on_user_choose(GtkWidget *self, GtkEntry *target){ for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.users_list),&iter)){ char *groupname; gtk_tree_model_get(GTK_TREE_MODEL(main_config.users_list),&iter,2,&groupname,-1); - gtk_list_store_append(window->list,&itar); - gtk_list_store_set(window->list,&itar,1,groupname,-1); + int valid1 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itor); + for (;valid1;valid1 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itor)){ + char *checked; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itor,1,&checked,-1); + if (!strcmp(groupname,checked)){ + break; + } + } + if (!valid1){ + gtk_list_store_append(window->list,&itar); + gtk_list_store_set(window->list,&itar,1,groupname,-1); + } free(groupname); } valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&iter); @@ -1119,12 +1149,12 @@ void on_group_save(GtkWidget *self, dictionary *dict){ admins = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdminGroupsEntry)); int non_unique_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck)); if(non_unique_active){ - non_unique=" --non-unique"; + non_unique="--non-unique"; } else non_unique=""; int gsystem_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck)); if(gsystem_active){ - gsystem=" --system"; + gsystem="--system"; } else gsystem=""; int shutdown_sync_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupaddShutdownCheck)); @@ -1232,7 +1262,7 @@ void on_group_clicked(GtkCellRenderer *self, char *path, ubl_settings_usergroups gtk_list_store_set(window->list,&iter,0,!status,-1); } -ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new(){ +ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new(int mode){ // 1 - user, 0 - group ubl_settings_usergroups_group_window *window = malloc(sizeof(ubl_settings_usergroups_group_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_group); window->GroupsWindow=yon_gtk_builder_get_widget(builder,"GroupsWindow"); @@ -1248,13 +1278,22 @@ ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new(){ gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),GROUPS_TITLE_LABEL); g_signal_connect(G_OBJECT(window->StatusCell),"toggled",G_CALLBACK(on_group_clicked),window); GtkTreeIter iter; - gtk_tree_view_set_model(GTK_TREE_VIEW(window->GroupsTree),GTK_TREE_MODEL(window->list)); - for (int i=0;ilist,&iter); gtk_list_store_set(window->list,&iter,0,0,1,group_name,-1); } + gtk_tree_view_set_model(GTK_TREE_VIEW(window->GroupsTree),GTK_TREE_MODEL(window->list)); g_signal_connect(G_OBJECT(window->GroupsCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); @@ -1282,16 +1321,26 @@ void on_standard_groups_accept(GtkWidget *self, ubl_settings_usergroups_group_wi } void on_standard_groups_open(GtkWidget *self, main_window *widgets){ - ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(); + ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(0); gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),DEFAULT_GROUPS_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),DEFAULT_GROUPS_TITLE_LABEL); - GtkTreeIter iter, itar; + GtkTreeIter iter, itar,itor; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.groups_list),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.groups_list),&iter)){ char *groupname; gtk_tree_model_get(GTK_TREE_MODEL(main_config.groups_list),&iter,1,&groupname,-1); - gtk_list_store_append(window->list,&itar); - gtk_list_store_set(window->list,&itar,1,groupname,-1); + int valid1 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itor); + for (;valid1;valid1 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itor)){ + char *checked; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itor,1,&checked,-1); + if (!strcmp(groupname,checked)){ + break; + } + } + if (!valid1){ + gtk_list_store_append(window->list,&itar); + gtk_list_store_set(window->list,&itar,1,groupname,-1); + } free(groupname); } g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_standard_groups_accept),window); @@ -1305,11 +1354,11 @@ void on_standard_groups_open(GtkWidget *self, main_window *widgets){ for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&iter)){ char *cur_name; gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,1,&cur_name,-1); - for (int i=0;ilist,&iter,0,1,-1); + for (int i=0;ilist,&iter,0,1,-1); + } } - } free(cur_name); } } @@ -1633,7 +1682,7 @@ void on_user_save(GtkWidget *self, dictionary *dict){ int do_not_check_actve = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDontCheckCheck)); if (do_not_check_actve) - do_not_check = " --badnames"; + do_not_check = "--badnames"; login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); if (login[0]>'0'&&login[0]<'9'&&!do_not_check_actve){ @@ -1718,9 +1767,9 @@ void on_user_save(GtkWidget *self, dictionary *dict){ int user_shell_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo)); if (user_shell_active>0){ - user_shell = yon_char_unite(" --shell ",(char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)),NULL); + user_shell = yon_char_unite("--shell ",(char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)),NULL); if (!strcmp(user_shell,SET_LABEL)){ - user_shell = yon_char_unite(" --shell ",(char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)),NULL); + user_shell = yon_char_unite("--shell ",(char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)),NULL); } } else user_shell=""; @@ -1733,11 +1782,11 @@ void on_user_save(GtkWidget *self, dictionary *dict){ int system_user_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck)); if (system_user_active) - create_system_user = " --system"; + create_system_user = "--system"; int create_ununique_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck)); if (create_ununique_active) - create_ununique = " --non-unique"; + create_ununique = "--non-unique"; samba_sync = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck)); samba_password_sync = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck)); @@ -1988,7 +2037,7 @@ void on_parameter_changed(GtkWidget *self,ubl_settings_usergroups_user_window *w int create_ununique_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck)); if (create_ununique_active) - create_ununique = " --non-unique"; + create_ununique = "--non-unique"; int main_group_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck)); if (!main_group_active){ main_group = (char*)gtk_entry_get_text(GTK_ENTRY(window->userGroupsEntry));