diff --git a/icons/actions/com.ublinux.libublsettingsui-gtk.update-cloud-symbolic.svg b/icons/actions/com.ublinux.libublsettingsui-gtk3.update-cloud-symbolic.svg similarity index 100% rename from icons/actions/com.ublinux.libublsettingsui-gtk.update-cloud-symbolic.svg rename to icons/actions/com.ublinux.libublsettingsui-gtk3.update-cloud-symbolic.svg diff --git a/icons/actions/com.ublinux.libublsettingsui-gtk3.xmarker-symbolic.svg b/icons/actions/com.ublinux.libublsettingsui-gtk3.xmarker-symbolic.svg new file mode 100644 index 0000000..db6aca6 --- /dev/null +++ b/icons/actions/com.ublinux.libublsettingsui-gtk3.xmarker-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libublsettingsui-gtk3_ru.po b/libublsettingsui-gtk3_ru.po index 79ec1ef..8995df7 100644 --- a/libublsettingsui-gtk3_ru.po +++ b/libublsettingsui-gtk3_ru.po @@ -155,7 +155,7 @@ msgstr "Открыть" #: source/libublsettingsui-gtk3.h:420 msgid "Create directory" -msgstr "Создать файл" +msgstr "Создать папку" #: source/libublsettingsui-gtk3.h:421 msgid "Select directory" diff --git a/source/libublsettingsui-gtk3-filechooser.c b/source/libublsettingsui-gtk3-filechooser.c index cdb88e0..7942dab 100644 --- a/source/libublsettingsui-gtk3-filechooser.c +++ b/source/libublsettingsui-gtk3-filechooser.c @@ -4,6 +4,10 @@ void on_file_chooser_accept(GtkWidget *, filechooser_window *window){ switch (gtk_file_chooser_get_action(GTK_FILE_CHOOSER(window->MainFileChooser))){ case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: case GTK_FILE_CHOOSER_ACTION_SAVE: + if (yon_char_is_empty(window->last_success_selection)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } window->responce=GTK_RESPONSE_APPLY; break; @@ -66,6 +70,23 @@ void on_file_chooser_exit(GtkWidget *, filechooser_window *){ __yon_filechooser_window = NULL; } +void on_file_chooser_check_root(GtkWidget *, filechooser_window *window){ + char *cur_path = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(window->MainFileChooser)); + if (!yon_char_is_empty(window->root)&&!strstr(cur_path,window->root)) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(window->MainFileChooser),window->root); +} + +void yon_file_chooser_set_root(filechooser_window *window, char *root_path){ + window->root = yon_char_new(root_path); + g_signal_connect(G_OBJECT(window->MainFileChooser),"current-folder-changed",G_CALLBACK(on_file_chooser_check_root),window); +} + +void yon_file_chooser_remove_root(filechooser_window *window, char *root_path){ + if (!yon_char_is_empty(window->root)) free(window->root); + window->root=NULL; + g_signal_handlers_disconnect_by_func(G_OBJECT(window->MainFileChooser),G_CALLBACK(on_file_chooser_check_root),window); + +} + filechooser_window *yon_file_chooser_window_new(GtkFileChooserAction action){ if (!__yon_filechooser_window){ filechooser_window *window = malloc(sizeof(filechooser_window)); @@ -80,14 +101,17 @@ filechooser_window *yon_file_chooser_window_new(GtkFileChooserAction action){ window->ChooseFolderCheck = yon_gtk_builder_get_widget(builder,"ChooseFolderCheck"); window->last_any_selection=NULL; window->last_success_selection=NULL; + window->root=NULL; + g_signal_connect(G_OBJECT(window->ChooseFolderCheck),"toggled",G_CALLBACK(on_file_chooser_selected),window); g_signal_connect(G_OBJECT(window->MainFileChooser),"selection-changed",G_CALLBACK(on_file_chooser_selected),window); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_file_chooser_cancel),window); g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_file_chooser_accept),window); g_signal_connect(G_OBJECT(window->Window),"destroy",G_CALLBACK(on_file_chooser_exit),window); - + yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"file_chooser_window"); gtk_file_chooser_set_action(GTK_FILE_CHOOSER(window->MainFileChooser),action); switch(action){ case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: + gtk_file_chooser_set_create_folders(GTK_FILE_CHOOSER(window->MainFileChooser),1); gtk_widget_hide(window->ChooseFolderCheck); gtk_button_set_label(GTK_BUTTON(window->SaveButton),yon_char_get_localised_from_lib(CREATE_FOLDER_LABEL)); break; @@ -97,6 +121,7 @@ filechooser_window *yon_file_chooser_window_new(GtkFileChooserAction action){ break; case GTK_FILE_CHOOSER_ACTION_SAVE: + gtk_file_chooser_set_create_folders(GTK_FILE_CHOOSER(window->MainFileChooser),1); gtk_widget_hide(window->ChooseFolderCheck); gtk_button_set_label(GTK_BUTTON(window->SaveButton),yon_char_get_localised_from_lib(SAVE_LABEL)); break; diff --git a/source/libublsettingsui-gtk3-service.c b/source/libublsettingsui-gtk3-service.c index 60e79ac..0188478 100644 --- a/source/libublsettingsui-gtk3-service.c +++ b/source/libublsettingsui-gtk3-service.c @@ -31,7 +31,7 @@ void __on_service_start_clicked(GtkWidget *, service_window *window){ } void __on_service_stop_clicked(GtkWidget *, service_window *window){ - if (system(window->stop_command)){ + if (system(yon_debug_output("%s\n",window->stop_command))){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE); return; }; @@ -42,7 +42,7 @@ void __on_service_stop_clicked(GtkWidget *, service_window *window){ void __on_service_enable_clicked(GtkWidget *, service_window *window){ - if (system(window->enable_command)){ + if (system(yon_debug_output("%s\n",window->enable_command))){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE); return; }; @@ -52,7 +52,7 @@ void __on_service_enable_clicked(GtkWidget *, service_window *window){ void __on_service_disable_clicked(GtkWidget *, service_window *window){ - if (system(window->disable_command)){ + if (system(yon_debug_output("%s\n",window->disable_command))){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE); return; }; @@ -62,11 +62,11 @@ void __on_service_disable_clicked(GtkWidget *, service_window *window){ void __on_service_restart_clicked(GtkWidget *, service_window *window){ - if (system(window->stop_command)){ + if (system(yon_debug_output("%s\n",window->stop_command))){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE); return; }; - if (system(window->start_command)){ + if (system(yon_debug_output("%s\n",window->start_command))){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE); return; }; @@ -83,7 +83,7 @@ void __on_service_status_clicked(GtkWidget *, service_window *window){ } void __on_service_update_clicked(GtkWidget *, service_window *window){ - if (!system(window->check_enable_command)){ + if (!system(yon_debug_output("%s\n",window->check_enable_command))){ gtk_label_set_text(GTK_LABEL(window->EnableLabel),yon_char_get_localised_from_lib(_SERVICE_ENABLE_LABEL)); gtk_image_set_from_icon_name(GTK_IMAGE(window->EnableImage),service_start_status_icon_name,GTK_ICON_SIZE_BUTTON); } else { @@ -91,7 +91,7 @@ void __on_service_update_clicked(GtkWidget *, service_window *window){ gtk_image_set_from_icon_name(GTK_IMAGE(window->EnableImage),service_stop_status_icon_name,GTK_ICON_SIZE_BUTTON); } - if (!system(window->check_active_command)){ + if (!system(yon_debug_output("%s\n",window->check_active_command))){ gtk_label_set_text(GTK_LABEL(window->ActiveLabel),yon_char_get_localised_from_lib(_SERVICE_ACTIVE_LABEL)); gtk_image_set_from_icon_name(GTK_IMAGE(window->ActiveImage),service_start_status_icon_name,GTK_ICON_SIZE_BUTTON); diff --git a/source/libublsettingsui-gtk3.h b/source/libublsettingsui-gtk3.h index 98c9faa..f422d7b 100644 --- a/source/libublsettingsui-gtk3.h +++ b/source/libublsettingsui-gtk3.h @@ -173,11 +173,14 @@ typedef struct { char *last_success_selection; char *last_any_selection; GtkResponseType responce; + char *root; } filechooser_window; filechooser_window *yon_file_chooser_window_new(GtkFileChooserAction action); GtkResponseType yon_file_chooser_start(filechooser_window *window); void yon_file_chooser_set_button_label(char *label); +void yon_file_chooser_set_root(filechooser_window *window, char *root_path); +void yon_file_chooser_remove_root(filechooser_window *window, char *root_path); dialog_confirmation_data *yon_confirmation_dialog_data_new();