Added filechooser window size and position saving #48

Merged
asmeron merged 4 commits from YanTheKaller/libublsettingsui-gtk3:master into master 4 months ago

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z"/></svg>

After

Width:  |  Height:  |  Size: 510 B

@ -155,7 +155,7 @@ msgstr "Открыть"
#: source/libublsettingsui-gtk3.h:420 #: source/libublsettingsui-gtk3.h:420
msgid "Create directory" msgid "Create directory"
msgstr "Создать файл" msgstr "Создать папку"
#: source/libublsettingsui-gtk3.h:421 #: source/libublsettingsui-gtk3.h:421
msgid "Select directory" msgid "Select directory"

@ -4,6 +4,10 @@ void on_file_chooser_accept(GtkWidget *, filechooser_window *window){
switch (gtk_file_chooser_get_action(GTK_FILE_CHOOSER(window->MainFileChooser))){ switch (gtk_file_chooser_get_action(GTK_FILE_CHOOSER(window->MainFileChooser))){
case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER:
case GTK_FILE_CHOOSER_ACTION_SAVE: 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; window->responce=GTK_RESPONSE_APPLY;
break; break;
@ -66,6 +70,23 @@ void on_file_chooser_exit(GtkWidget *, filechooser_window *){
__yon_filechooser_window = NULL; __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){ filechooser_window *yon_file_chooser_window_new(GtkFileChooserAction action){
if (!__yon_filechooser_window){ if (!__yon_filechooser_window){
filechooser_window *window = malloc(sizeof(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->ChooseFolderCheck = yon_gtk_builder_get_widget(builder,"ChooseFolderCheck");
window->last_any_selection=NULL; window->last_any_selection=NULL;
window->last_success_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->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->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->SaveButton),"clicked",G_CALLBACK(on_file_chooser_accept),window);
g_signal_connect(G_OBJECT(window->Window),"destroy",G_CALLBACK(on_file_chooser_exit),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); gtk_file_chooser_set_action(GTK_FILE_CHOOSER(window->MainFileChooser),action);
switch(action){ switch(action){
case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: 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_widget_hide(window->ChooseFolderCheck);
gtk_button_set_label(GTK_BUTTON(window->SaveButton),yon_char_get_localised_from_lib(CREATE_FOLDER_LABEL)); gtk_button_set_label(GTK_BUTTON(window->SaveButton),yon_char_get_localised_from_lib(CREATE_FOLDER_LABEL));
break; break;
@ -97,6 +121,7 @@ filechooser_window *yon_file_chooser_window_new(GtkFileChooserAction action){
break; break;
case GTK_FILE_CHOOSER_ACTION_SAVE: case GTK_FILE_CHOOSER_ACTION_SAVE:
gtk_file_chooser_set_create_folders(GTK_FILE_CHOOSER(window->MainFileChooser),1);
gtk_widget_hide(window->ChooseFolderCheck); gtk_widget_hide(window->ChooseFolderCheck);
gtk_button_set_label(GTK_BUTTON(window->SaveButton),yon_char_get_localised_from_lib(SAVE_LABEL)); gtk_button_set_label(GTK_BUTTON(window->SaveButton),yon_char_get_localised_from_lib(SAVE_LABEL));
break; break;

@ -31,7 +31,7 @@ void __on_service_start_clicked(GtkWidget *, service_window *window){
} }
void __on_service_stop_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); yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
return; return;
}; };
@ -42,7 +42,7 @@ void __on_service_stop_clicked(GtkWidget *, service_window *window){
void __on_service_enable_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); yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
return; return;
}; };
@ -52,7 +52,7 @@ void __on_service_enable_clicked(GtkWidget *, service_window *window){
void __on_service_disable_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); yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
return; return;
}; };
@ -62,11 +62,11 @@ void __on_service_disable_clicked(GtkWidget *, service_window *window){
void __on_service_restart_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); yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
return; 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); yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
return; return;
}; };
@ -83,7 +83,7 @@ void __on_service_status_clicked(GtkWidget *, service_window *window){
} }
void __on_service_update_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_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); gtk_image_set_from_icon_name(GTK_IMAGE(window->EnableImage),service_start_status_icon_name,GTK_ICON_SIZE_BUTTON);
} else { } 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); 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_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); gtk_image_set_from_icon_name(GTK_IMAGE(window->ActiveImage),service_start_status_icon_name,GTK_ICON_SIZE_BUTTON);

@ -173,11 +173,14 @@ typedef struct {
char *last_success_selection; char *last_success_selection;
char *last_any_selection; char *last_any_selection;
GtkResponseType responce; GtkResponseType responce;
char *root;
} filechooser_window; } filechooser_window;
filechooser_window *yon_file_chooser_window_new(GtkFileChooserAction action); filechooser_window *yon_file_chooser_window_new(GtkFileChooserAction action);
GtkResponseType yon_file_chooser_start(filechooser_window *window); GtkResponseType yon_file_chooser_start(filechooser_window *window);
void yon_file_chooser_set_button_label(char *label); 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(); dialog_confirmation_data *yon_confirmation_dialog_data_new();

Loading…
Cancel
Save