#include "ubl-settings-usergroups.h" ubl_settings_usergroups_group_creation_window *yon_ubl_settings_usergroups_group_creation_new(){ ubl_settings_usergroups_group_creation_window *window = malloc(sizeof(ubl_settings_usergroups_group_creation_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_group_creation); window->CreateGroupWindow=yon_gtk_builder_get_widget(builder,"CreateGroupWindow"); window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); window->userUIDAutoCheck=yon_gtk_builder_get_widget(builder,"GIDAutoCheck"); window->userUIDEntry=yon_gtk_builder_get_widget(builder,"userUIDEntry"); window->userLoginEntry=yon_gtk_builder_get_widget(builder,"userLoginEntry"); window->userGroupsEntry=yon_gtk_builder_get_widget(builder,"userGroupsEntry"); window->UserAdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"AdditionalGroupsButton"); window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); window->AdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"AdditionalGroupsButton"); window->UnuniqueGIDCheck=yon_gtk_builder_get_widget(builder,"UnuniqueGIDCheck"); window->SystemGroupCheck=yon_gtk_builder_get_widget(builder,"SystemGroupCheck"); window->PasswordCombo=yon_gtk_builder_get_widget(builder,"PasswordCombo"); window->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry"); window->ChangePasswordButton=yon_gtk_builder_get_widget(builder,"ChangePasswordButton"); window->userTitleNameLabel=yon_gtk_builder_get_widget(builder,"userTitleNameLabel"); window->AdminGroupsEntry=yon_gtk_builder_get_widget(builder,"AdminGroupsEntry"); window->AdminGroupsButton=yon_gtk_builder_get_widget(builder,"AdminGroupsButton"); window->GroupaddShutdownCheck=yon_gtk_builder_get_widget(builder,"GroupaddShutdownCheck"); window->groupExtraOptionsEntry=yon_gtk_builder_get_widget(builder,"groupExtraOptionsEntry"); window->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); window->last_gid=NULL; gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),GROUPS_TITLE_LABEL); on_GID_update(NULL,window); dictionary *entry_dict=NULL; yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"combo",window->PasswordCombo); yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"entry",window->PasswordEntry); yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateGroupWindow),"GroupAddWindow"); g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry); g_signal_connect(G_OBJECT(window->ChangePasswordButton),"clicked",G_CALLBACK(on_password_change),entry_dict); g_signal_connect(G_OBJECT(window->PasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->ChangePasswordButton); g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->UserAdditionalGroupsButton),"clicked",G_CALLBACK(on_user_choose),window->userGroupsEntry); g_signal_connect(G_OBJECT(window->AdminGroupsButton),"clicked",G_CALLBACK(on_user_choose),window->AdminGroupsEntry); g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(on_GID_update),window); g_signal_connect(G_OBJECT(window->SystemGroupCheck),"toggled",G_CALLBACK(on_GID_update),window); g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button),window->SystemGroupCheck); g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->SystemGroupCheck); g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button_inversed),window->UnuniqueGIDCheck); g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->UnuniqueGIDCheck); g_signal_connect(G_OBJECT(window->UnuniqueGIDCheck),"toggled",G_CALLBACK(on_system_parameter_changed),window); g_signal_connect(G_OBJECT(window->SystemGroupCheck),"toggled",G_CALLBACK(on_system_parameter_changed),window); g_signal_connect(G_OBJECT(window->userUIDEntry),"insert-text",G_CALLBACK(yon_on_text_insert_only_digits),NULL); return window; } void on_GID_update(GtkWidget *, ubl_settings_usergroups_group_creation_window *window){ if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck))){ if (window->last_gid){ gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),window->last_gid); } else { int config_size=0; int final_size=0; config_str config_groups = yon_config_get_all_by_key(GROUPADD_parameter,&config_size); yon_char_parsed_prepend_strings(config_groups,config_size,":"); config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_groups,config_size,&final_size); long prev_busy=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?0:main_config.MINGID; int minimum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?0:main_config.MINGID; int maximum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?68000:main_config.MAXGID; for (int i=0;i2&&minimumprev_busy){ prev_busy=atol(parsed[2]); } } yon_char_parsed_free(parsed, parsed_size); } gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),yon_char_from_long(prev_busy+1)); } } else { gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),""); } } void on_group_save(GtkWidget *self, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); ubl_settings_usergroups_group_creation_window *window = yon_dictionary_get_data(dict->first->next,ubl_settings_usergroups_group_creation_window*); char *final_string = NULL; char *group_name = NULL; char *group_users = NULL; char *gid = NULL; char *non_unique = NULL; char *gsystem = NULL; char *admins = NULL; char *password = NULL; int gid_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck)); if (gid_active){ gid="x"; } else { gid = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); if (yon_char_is_empty(gid)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); yon_ubl_status_highlight_incorrect(window->userUIDEntry); return; } if (!yon_char_is_empty(window->last_gid)&&strcmp(gid,window->last_gid)){ int config_size=0; int final_size=0; config_str config_users = yon_config_get_all_by_key(GROUPADD_SEARCH_macro,&config_size); config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_users,config_size,&final_size); if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck))){ int found=0; char *uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); for (int i=0;i2&&!strcmp(parsed[2],uid_string)){ if (yon_char_is_empty(window->last_gid)||(!yon_char_is_empty(window->last_gid)&&strcmp(parsed[2],window->last_gid))){ found = yon_char_parsed_check_exist(config_users,config_size,final[i])>-1?1:2; break; } } if (parsed_size) yon_char_parsed_free(parsed,parsed_size); } if (found){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),found==1?GID_ALREADY_EXIST_CONFIG_LABEL:GID_ALREADY_EXIST_SYSTEM_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->userUIDEntry); gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); return; } } } } group_name = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); if (group_name[0]>'0'&&group_name[0]<'9'){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GROUP_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->userLoginEntry); return; } if (yon_char_is_empty(group_name)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); yon_ubl_status_highlight_incorrect(window->userLoginEntry); return; } { GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); for_iter(model,&iter){ char *cur; gtk_tree_model_get(model,&iter,1, &cur,-1); if (!yon_char_is_empty(cur)&&!strcmp(cur,group_name)){ if (!gtk_tree_selection_iter_is_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&iter)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GROUP_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->userLoginEntry); gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); return; } } } } group_users = (char*)gtk_entry_get_text(GTK_ENTRY(window->userGroupsEntry)); 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"; } else non_unique=""; int gsystem_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck)); if(gsystem_active){ gsystem="--system"; } else gsystem=""; int shutdown_sync_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupaddShutdownCheck)); if (shutdown_sync_active){ char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD_SYNC(group_name)); yon_config_register(GROUPADD_SYNC(group_name),final_command,"shutdown"); } else { yon_config_remove_by_key(GROUPADD_SYNC(group_name)); } int password_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->PasswordCombo)); if (password_active == 1) { password = "!*"; } else if (password_active == 2){ password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); if (yon_char_is_empty(password)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); yon_ubl_status_highlight_incorrect(window->PasswordEntry); return; } } else { password=""; } final_string = yon_char_unite(yon_char_return_if_exist(group_users,""), ":",yon_char_return_if_exist(gid,"x"), ":",yon_char_return_if_exist(non_unique,""), yon_char_return_if_exist(gsystem,""), ":",yon_char_return_if_exist(admins,""), ":",yon_char_return_if_exist(password,""), NULL); char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD_SYNC(group_name)); yon_config_register(GROUPADD(group_name),final_command,final_string); yon_interface_update(widgets); on_subwindow_close(self); } void yon_group_delete_confirmation_open(main_window *widgets){ yon_confirmation_window *window = yon_delete_confirmation_new(); gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window)); GtkTreeIter iter,itar; dictionary *dict = NULL; gtk_label_set_text(GTK_LABEL(window->TitleLabel),DELETE_GROUP_CONFIRMATION_CONFIRM_LABEL); gtk_tree_view_column_set_title(window->UserCell,GROUP_LABEL); gtk_label_set_text(GTK_LABEL(window->HatLabel),DELETE_GROUP_CONFIRMATION_TITLE_LABEL); gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),2),0); gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),3),0); gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),4),0); yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(yon_group_delete_confirmation_save),dict); GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model); int chosen_size=0; config_str chosen = NULL; for (guint i=0;iGroupsList),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->GroupsList),&iter)){ char *name; gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&iter,1,&name,-1); gtk_list_store_append(window->list,&itar); gtk_list_store_set(window->list,&itar,0,yon_char_parsed_check_exist(chosen,chosen_size,name)>-1?1:0,1,name,-1); free(name); } gtk_widget_show(window->Window); } void yon_group_delete_confirmation_save(GtkWidget *self, dictionary *dict){ GtkTreeIter iter,itar; main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); yon_confirmation_window *window = yon_dictionary_get_data(dict->first->next,yon_confirmation_window*); int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->GroupsList),&iter); for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->GroupsList),&iter)){ char *name; gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&iter,1,&name,-1); int valid2 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itar); for (;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itar)){ char *name_check; int delete; gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,0,&delete,1,&name_check,-1); if (!strcmp(name,name_check)&&delete){ yon_config_remove_by_key(GROUPADD(name)); yon_config_remove_by_key(GROUPADD_SYNC(name)); valid=0; break; } } } yon_interface_update(widgets); on_subwindow_close(self); }