|
|
|
@ -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;
|
|
|
|
|