diff --git a/gresource.xml b/gresource.xml
index 08c8d12..c29a06f 100644
--- a/gresource.xml
+++ b/gresource.xml
@@ -9,6 +9,7 @@
ubl-settings-usergroups-user.glade
ubl-settings-usergroups-system.glade
ubl-settings-usergroups-savesettings.glade
+ ubl-settings-usergroups-confirmation.glade
ubl-settings-usergroups.css
diff --git a/icons/com.ublinux.ubl-settings-usergroups.save-symbolic.svg b/icons/com.ublinux.ubl-settings-usergroups.save-symbolic.svg
index d383f09..6ed49b5 100644
--- a/icons/com.ublinux.ubl-settings-usergroups.save-symbolic.svg
+++ b/icons/com.ublinux.ubl-settings-usergroups.save-symbolic.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index b5fd2fb..30a24e5 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -32,6 +32,7 @@ set(DEPENDFILES
../ubl-settings-usergroups-user.glade
../ubl-settings-usergroups-group.glade
../ubl-settings-usergroups-savesettings.glade
+ ../ubl-settings-usergroups-confirmation.glade
../gresource.xml
../ubl-settings-usergroups-banner.png
../ubl-settings-usergroups.css
diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c
index 2d13f9c..f2122dc 100644
--- a/source/ubl-settings-usergroups.c
+++ b/source/ubl-settings-usergroups.c
@@ -5,8 +5,8 @@ config main_config;
//functions
int yon_load_proceed(YON_CONFIG_TYPE type){
- yon_config_load_register(YON_CONFIG_DEFAULT,"[users]","DEFAULTPASSWD DEFAULTROOTPASSWD USERGROUPS DEFAULTUSER HASHPASSWD ADDADM",NULL);
- if (yon_config_load_register_no_cleaning(type,"[users]","DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]","[system]","SYSTEMBOOT_STATEMODE","[save]","SAVE_ROOTCOPY_CHANGES",NULL)){
+ yon_config_load_register(YON_CONFIG_DEFAULT,"users","DEFAULTPASSWD DEFAULTROOTPASSWD USERGROUPS DEFAULTUSER HASHPASSWD ADDADM",NULL);
+ if (yon_config_load_register_no_cleaning(type,"users","DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]","[system]","SYSTEMBOOT_STATEMODE","[save]","SAVE_ROOTCOPY_CHANGES",NULL)){
return 1;
}
return 0;
@@ -82,7 +82,7 @@ void yon_interface_update(main_window *widgets){
void on_config_local_load(GtkWidget *self, main_window *widgets){
yon_load_proceed(YON_CONFIG_LOCAL);
textdomain(template_ui_LocaleName);
- yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
textdomain(LocaleName);
main_config.load_mode=1;
yon_interface_update(widgets);
@@ -120,6 +120,104 @@ void on_saving_settings_save(GtkWidget *self, yon_savasettings_window *window){
on_subwindow_close(self);
}
+void on_delete_confirmation_delete_home_check(GtkCellRenderer *self, char *path, yon_confirmation_window *window){
+ GtkTreeIter iter;
+ gboolean status;
+ gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path);
+ gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,3,&status,-1);
+ gtk_list_store_set(window->list,&iter,3,!status,-1);
+
+}
+
+void on_delete_confirmation_delete_check(GtkCellRenderer *self, char *path, yon_confirmation_window *window){
+ GtkTreeIter iter;
+ gboolean status;
+ gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path);
+ gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&status,-1);
+ gtk_list_store_set(window->list,&iter,0,!status,-1);
+
+}
+
+void yon_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->UsersList),&iter);
+ for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->UsersList),&iter)){
+ char *name;
+ gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&iter,2,&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;
+ gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,1,&name_check,-1);
+ if (!strcmp(name,name_check)){
+ GtkTreeIter *it = gtk_tree_iter_copy(&iter);
+ if (!gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->UsersList),&iter)){
+ iter = *gtk_tree_iter_copy(it);
+ if (!gtk_tree_model_iter_previous(GTK_TREE_MODEL(widgets->UsersList),&iter)){
+ iter = *gtk_tree_iter_copy(it);
+ }
+ }
+ gtk_list_store_remove(widgets->UsersList,it);
+ yon_config_remove_by_key(USERADD(name));
+ yon_config_remove_by_key(USERSHADOW(name));
+ }
+ }
+ }
+ on_subwindow_close(self);
+}
+
+yon_confirmation_window *yon_delete_confirmation_new(){
+ yon_confirmation_window *window = malloc(sizeof(yon_confirmation_window));
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_confirmation);
+ window->Window = yon_gtk_builder_get_widget(builder,"Window");
+ window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
+ window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
+ window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
+ window->DeletionTree = yon_gtk_builder_get_widget(builder,"DeletionTree");
+ window->DeleteCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"DeleteCell"));
+ window->DeleteHomeCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"DeleteHomeCell"));
+ window->list = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1"));
+ gtk_window_set_title(GTK_WINDOW(window->Window),DELETE_CONFIRMATION_TITLE_LABEL);
+ g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
+ g_signal_connect(G_OBJECT(window->DeleteCell),"toggled",G_CALLBACK(on_delete_confirmation_delete_check),window);
+ g_signal_connect(G_OBJECT(window->DeleteHomeCell),"toggled",G_CALLBACK(on_delete_confirmation_delete_home_check),window);
+ return window;
+}
+
+void yon_delete_confirmation_open(main_window *widgets){
+ yon_confirmation_window *window = yon_delete_confirmation_new();
+ GtkTreeIter iter,itar;
+ dictionary *dict = NULL;
+ 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_delete_confirmation_save),dict);
+ int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->UsersList),&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->UsersList),&iter)){
+ char *name,*parameters,*homedir=NULL;
+ gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&iter,2,&name,6,¶meters,-1);
+ if (strstr(parameters,"--home-dir")){
+ int size;
+ config_str parsed = yon_char_parse(parameters,&size," ");
+ for (int i=0;ilist,&itar);
+ gtk_list_store_set(window->list,&itar,1,name,2,homedir,3,0,4,status,-1);
+ free(name);
+ free(parameters);
+ free(homedir);
+ }
+ gtk_widget_show(window->Window);
+}
+
yon_savasettings_window *yon_saving_settings_new(){
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_savesettings);
yon_savasettings_window *window = malloc(sizeof(yon_savasettings_window));
@@ -1450,19 +1548,7 @@ void on_main_delete(GtkWidget *self, main_window *widgets){
data->function=NULL;
data->data=NULL;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
- model = GTK_TREE_MODEL(widgets->UsersList);
- cur_tree=widgets->UsersTree;
- if(gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(cur_tree)),&model,&iter)){
- char *name;
- gtk_tree_model_get(model,&iter,2,&name,-1);
- data->action_text=DELETE_CONFIRMATION_LABEL("user",name);
- if (yon_confirmation_dialog_call(self,data)==GTK_RESPONSE_ACCEPT){
- yon_config_remove_by_key(USERADD(name));
- yon_config_remove_by_key(USERADD_SYNC(name));
- yon_config_remove_by_key(USERSHADOW(name));
- gtk_list_store_remove(GTK_LIST_STORE(model),&iter);
- }
- }
+ yon_delete_confirmation_open(widgets);
} else {
model = GTK_TREE_MODEL(widgets->GroupsList);
cur_tree=widgets->GroupsTree;
diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h
index ff40b73..2369238 100644
--- a/source/ubl-settings-usergroups.h
+++ b/source/ubl-settings-usergroups.h
@@ -27,6 +27,7 @@
#define glade_path_ubl_settings_usergroups_system "/com/ublinux/ui/ubl-settings-usergroups-system.glade"
#define glade_path_ubl_settings_usergroups_user "/com/ublinux/ui/ubl-settings-usergroups-user.glade"
#define glade_path_ubl_settings_usergroups_savesettings "/com/ublinux/ui/ubl-settings-usergroups-savesettings.glade"
+#define glade_path_ubl_settings_usergroups_confirmation "/com/ublinux/ui/ubl-settings-usergroups-confirmation.glade"
#define banner_path "/com/ublinux/images/ubl-settings-usergroups-banner.png"
#define CssPath "/com/ublinux/css/ubl-settings-usergroups.css"
@@ -276,6 +277,17 @@ typedef struct{
GtkWidget *SambaCheck;
} yon_savasettings_window;
+ typedef struct {
+ GtkWidget *Window;
+ GtkWidget *StatusBox;
+ GtkWidget *CancelButton;
+ GtkWidget *AcceptButton;
+ GtkWidget *DeletionTree;
+ GtkListStore *list;
+ GtkCellRenderer *DeleteCell;
+ GtkCellRenderer *DeleteHomeCell;
+ } yon_confirmation_window;
+
ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_additional_settings_new();
void on_ubl_settings_usergroups_additional_settings_open(GtkWidget *self, main_window *widgets);
diff --git a/source/ubl-strings.h b/source/ubl-strings.h
index 143c13a..a72969f 100644
--- a/source/ubl-strings.h
+++ b/source/ubl-strings.h
@@ -160,4 +160,12 @@
//ubl-settings-usergroups-savesettings.glade
#define SAVESETTINGS_TITLE_LABEL _("Additional configuration of service parameter saving")
#define SAMBA_ROOTCOPY_LABEL _("At every system shutdown save changes of (root)/var/lib/samba\ninto (hd)/ublinux-data/rootcopy")
-#define SYSTEM_SAVEMODE_LABEL _("For system save mode \"Sandbox\"")
\ No newline at end of file
+#define SYSTEM_SAVEMODE_LABEL _("For system save mode \"Sandbox\"")
+
+//ubl-settings-usergroups-confirmation.glade
+#define DELETE_CONFIRMATION_TITLE_LABEL _("User deletion")
+#define DELETE_CONFIRMATION_CONFIRM_LABEL _("Confirm user(-s) deletion:")
+#define DELETE_CONFIRMATION_CHOSEN_LABEL _("Chosen")
+#define DELETE_CONFIRMATION_USER_LABEL _("User")
+#define DELETE_CONFIRMATION_HOME_LABEL _("Home directory")
+#define DELETE_CONFIRMATION_DELETE_HOME_LABEL _("Delete home directory")
\ No newline at end of file
diff --git a/ubl-settings-usergroups-confirmation.glade b/ubl-settings-usergroups-confirmation.glade
new file mode 100644
index 0000000..a99a9ca
--- /dev/null
+++ b/ubl-settings-usergroups-confirmation.glade
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/ubl-settings-usergroups-savesettings.glade b/ubl-settings-usergroups-savesettings.glade
index e5f6bfe..fe73517 100644
--- a/ubl-settings-usergroups-savesettings.glade
+++ b/ubl-settings-usergroups-savesettings.glade
@@ -13,6 +13,8 @@
com.ublinux.ubl-settings-usergroups.accept-symbolic
+ 450
+ 300
False
False
True
diff --git a/ubl-settings-usergroups.glade b/ubl-settings-usergroups.glade
index b490cce..f55656f 100644
--- a/ubl-settings-usergroups.glade
+++ b/ubl-settings-usergroups.glade
@@ -100,6 +100,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
False
com.ublinux.ubl-settings-usergroups.trash-symbolic
+
+ True
+ False
+ com.ublinux.ubl-settings-usergroups.save-symbolic
+
True
False
@@ -239,6 +244,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
7
+
+
+ True
+ False
+
+
+ False
+ True
+ 8
+
+
True
@@ -253,7 +269,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
False
True
- 8
+ 9
@@ -270,7 +286,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
False
True
- 9
+ 10
@@ -577,9 +593,4 @@ status
-
- True
- False
- com.ublinux.ubl-settings-usergroups.save-symbolic
-
diff --git a/ubl-settings-usergroups.pot b/ubl-settings-usergroups.pot
index bff1203..321db2c 100644
--- a/ubl-settings-usergroups.pot
+++ b/ubl-settings-usergroups.pot
@@ -593,3 +593,27 @@ msgstr ""
#: source/ubl-strings.h:163
msgid "For system save mode \"Sandbox\""
msgstr ""
+
+#: source/ubl-strings.h:166
+msgid "User deletion"
+msgstr ""
+
+#: source/ubl-strings.h:167
+msgid "Confirm user(-s) deletion:"
+msgstr ""
+
+#: source/ubl-strings.h:168
+msgid "Chosen"
+msgstr ""
+
+#: source/ubl-strings.h:169
+msgid "User"
+msgstr ""
+
+#: source/ubl-strings.h:170
+msgid "Home directory"
+msgstr ""
+
+#: source/ubl-strings.h:171
+msgid "Delete home directory"
+msgstr ""
diff --git a/ubl-settings-usergroups_ru.po b/ubl-settings-usergroups_ru.po
index ea791f4..0a9d8d6 100644
--- a/ubl-settings-usergroups_ru.po
+++ b/ubl-settings-usergroups_ru.po
@@ -630,3 +630,27 @@ msgstr ""
#: source/ubl-strings.h:163
msgid "For system save mode \"Sandbox\""
msgstr "Для режима сохранения системы \"Песочница\""
+
+#: source/ubl-strings.h:166
+msgid "User deletion"
+msgstr "Удаление пользователя(-лей)"
+
+#: source/ubl-strings.h:167
+msgid "Confirm user(-s) deletion:"
+msgstr "Подтвердите удаление пользователя (-ей):"
+
+#: source/ubl-strings.h:168
+msgid "Chosen"
+msgstr "Выбран"
+
+#: source/ubl-strings.h:169
+msgid "User"
+msgstr "Пользователь"
+
+#: source/ubl-strings.h:170
+msgid "Home directory"
+msgstr "Домашний каталог"
+
+#: source/ubl-strings.h:171
+msgid "Delete home directory"
+msgstr "Удалить домашний каталог"