#include "ubinstall-gtk.h" void configuration_mode_accept(GtkWidget *,configuration_window *window){ const char *path = gtk_entry_get_text(GTK_ENTRY(window->PathEntry)); if (yon_char_is_empty(path)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),_EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->PathEntry); return; } if (access(path,F_OK)){ int homedir_create = 0; if (!strstr(path,"/")){ homedir_create = 1; } dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); data->action_text = homedir_create?CREATE_CONFIG_DIALOG_LABEL_HOMEDIR:CREATE_CONFIG_DIALOG_LABEL; data->title = WARNING_TITLE_LABEL; if (yon_confirmation_dialog_call(window->Window,data)==GTK_RESPONSE_ACCEPT){ char *full_path = NULL; if (homedir_create){ full_path = yon_char_unite(yon_ubl_user_get_home_directory(),"/",path,NULL); } else { full_path = yon_char_new(path); } yon_launch(ubconfig_file_create(full_path)); } else return; } if (!yon_char_is_empty(main_config.config_save_path)) free(main_config.config_save_path); main_config.config_save_path = yon_char_new(path); gtk_widget_destroy(window->Window); } void on_path_choose(GtkWidget *,configuration_window *window){ filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_SAVE); yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->Window),CONFIGURATION_MODE_TITLE_LABEL,icon_path,"filechooser_window"); GtkFileFilter *filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter,"*.ini"); gtk_file_filter_set_name(filter,"*.ini"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->MainFileChooser),filter); if (yon_file_chooser_start(dialog)==GTK_RESPONSE_APPLY){ gtk_entry_set_text(GTK_ENTRY(window->PathEntry),dialog->last_success_selection); free(dialog); } } void on_configuration_exit(GtkWidget *,configuration_window *window){ main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets"); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets->ConfigurationModeMenuItem),0); gtk_widget_destroy(window->Window); if (getuid()){ gtk_main_quit(); } } void on_configuration_mode_switch(GtkWidget *self,main_window *widgets){ if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(self))){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_configuration_mode); configuration_window *window = malloc(sizeof(configuration_window)); window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); window->PathEntry = yon_gtk_builder_get_widget(builder,"PathEntry"); window->PathButton = yon_gtk_builder_get_widget(builder,"PathButton"); window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); window->ChooseButton = yon_gtk_builder_get_widget(builder,"ChooseButton"); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_configuration_exit),window); g_signal_connect(G_OBJECT(window->Window),"destroy",G_CALLBACK(gtk_main_quit),NULL); g_signal_connect(G_OBJECT(window->ChooseButton),"clicked",G_CALLBACK(configuration_mode_accept),window); g_signal_connect(G_OBJECT(window->PathButton),"clicked",G_CALLBACK(on_path_choose),window); g_object_set_data(G_OBJECT(window->Window),"widgets",widgets); yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->MainWindow),CONFIGURATION_MODE_TITLE_LABEL,icon_path,"configuration_window"); if (getuid()){ yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"force_configure_mode",ROOT_FORCE_CONFIGURATION_MODE_LABEL,BACKGROUND_IMAGE_INFO_TYPE); } if (!yon_char_is_empty(main_config.config_save_path)) gtk_entry_set_text(GTK_ENTRY(window->PathEntry),main_config.config_save_path); gtk_widget_show(window->Window); gtk_main(); if (main_config.config_save_path){ yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(widgets->StatusBox),"config_mode",CONFIGURATION_MODE_STATUS_LABEL,BACKGROUND_IMAGE_INFO_TYPE); yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(widgets->StatusBox2),"config_mede",CONFIG_PATH_LABEL(main_config.config_save_path),BACKGROUND_IMAGE_INFO_TYPE); GList *revealerlist = gtk_container_get_children(GTK_CONTAINER(widgets->StatusBox2)); GList *list = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(revealerlist,0))); GtkWidget *box = GTK_WIDGET(list->data); g_list_free(revealerlist); g_list_free(list); gtk_style_context_remove_class(gtk_widget_get_style_context(box),"boxInfoMessOK"); gtk_style_context_add_class(gtk_widget_get_style_context(box),"boxInfoMessGray"); main_config.configure_mode = 1; } gtk_widget_destroy(window->Window); return; } else { yon_ubl_status_box_despawn_infinite(GTK_CONTAINER(widgets->StatusBox)); GList *revealerlist = gtk_container_get_children(GTK_CONTAINER(widgets->StatusBox2)); gtk_widget_destroy(GTK_WIDGET(g_list_nth_data(revealerlist,0))); g_list_free(revealerlist); main_config.configure_mode = 0; } }