diff --git a/locale/ubinstall-gtk.pot b/locale/ubinstall-gtk.pot index c7a671a..e8f6f53 100644 --- a/locale/ubinstall-gtk.pot +++ b/locale/ubinstall-gtk.pot @@ -928,6 +928,10 @@ msgstr "" msgid "Enable VNC server" msgstr "" +#: source/ubl-strings.h:283 +msgid "Enable RDP server" +msgstr "" + #: source/ubl-strings.h:285 msgid "Package:" msgstr "" diff --git a/locale/ubinstall-gtk_ru.po b/locale/ubinstall-gtk_ru.po index d4272f6..14548d8 100644 --- a/locale/ubinstall-gtk_ru.po +++ b/locale/ubinstall-gtk_ru.po @@ -950,6 +950,10 @@ msgstr "Настройка сетевых интерфейсов" msgid "Enable VNC server" msgstr "Запустить VNC сервер" +#: source/ubl-strings.h:283 +msgid "Enable RDP server" +msgstr "Запустить RDP сервер" + #: source/ubl-strings.h:285 msgid "Package:" msgstr "Пакет:" diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index a459ff0..a1b596f 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -123,6 +123,7 @@ set(SOURCE_FILES ubinstall-gtk-installation.c ubinstall-gtk-network.c ubinstall-gtk-separate.c + ubinstall-gtk-source.c ubinstall-gtk-users.c ubinstall-gtk-configuration-mode.c ubinstall-gtk-decorations.c diff --git a/source/ubinstall-gtk-source.c b/source/ubinstall-gtk-source.c new file mode 100644 index 0000000..f507f3c --- /dev/null +++ b/source/ubinstall-gtk-source.c @@ -0,0 +1,241 @@ +#include "ubinstall-gtk.h" + +void on_source_changed(GtkComboBox *self){ + GtkWidget *devices_combo = g_object_get_data(G_OBJECT(self),"target"); + GtkWidget *path_button = g_object_get_data(G_OBJECT(self),"button"); + GtkWidget *path_combo = g_object_get_data(G_OBJECT(self),"combo"); + if (gtk_combo_box_get_active(self)){ + gtk_widget_show(path_button); + gtk_widget_show(path_combo); + gtk_widget_hide(devices_combo); + } else{ + gtk_widget_hide(path_button); + gtk_widget_hide(path_combo); + gtk_widget_show(devices_combo); + } +} + +source_element *yon_source_element_new(){ + source_element *element = new(source_element); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_source_element); + + element->MainBox = yon_gtk_builder_get_widget(builder,"MainBox"); + element->TypeCombo = yon_gtk_builder_get_widget(builder,"TypeCombo"); + element->PathEntry = yon_gtk_builder_get_widget(builder,"PathEntry"); + element->DeviceCombo = yon_gtk_builder_get_widget(builder,"DeviceCombo"); + element->PathButton = yon_gtk_builder_get_widget(builder,"PathButton"); + element->RemoveButton = yon_gtk_builder_get_widget(builder,"RemoveButton"); + yon_gtk_combo_box_block_scroll(GTK_COMBO_BOX(element->DeviceCombo)); + yon_gtk_combo_box_block_scroll(GTK_COMBO_BOX(element->TypeCombo)); + g_signal_connect(G_OBJECT(element->RemoveButton),"clicked",G_CALLBACK(on_source_remove),element); + g_signal_connect(G_OBJECT(element->PathButton),"clicked",G_CALLBACK(on_source_choose),element); + g_signal_connect(G_OBJECT(element->TypeCombo),"changed",G_CALLBACK(on_source_changed),element); + g_object_set_data(G_OBJECT(element->PathButton),"combo",element->TypeCombo); + g_object_set_data(G_OBJECT(element->PathButton),"target_combo",element->TypeCombo); + g_object_set_data(G_OBJECT(element->TypeCombo),"target",element->DeviceCombo); + g_object_set_data(G_OBJECT(element->TypeCombo),"button",element->PathButton); + g_object_set_data(G_OBJECT(element->TypeCombo),"combo",element->PathEntry); + int size; + config_str parts = yon_config_load(get_parts_and_devices_command, &size); + for (int i=0;iDeviceCombo),parsed[1],parsed[1]); + } + yon_char_parsed_free(parsed,parsed_size); + } + gtk_combo_box_set_active(GTK_COMBO_BOX(element->DeviceCombo),0); + yon_char_parsed_free(parts,size); + + return element; +} + +void yon_source_element_add(char *key,void*,source_window *window){ + source_element *element = yon_source_element_new(); + if (yon_char_check_begins_with(key,"/dev/")){ + gtk_combo_box_set_active_id(GTK_COMBO_BOX(element->DeviceCombo),key); + gtk_combo_box_set_active(GTK_COMBO_BOX(element->TypeCombo),0); + } else if (g_regex_match_simple(".*\\.iso",key,G_REGEX_DEFAULT,G_REGEX_MATCH_DEFAULT)){ + gtk_entry_set_text(GTK_ENTRY(element->PathEntry),key); + gtk_combo_box_set_active(GTK_COMBO_BOX(element->TypeCombo),2); + } else { + gtk_entry_set_text(GTK_ENTRY(element->PathEntry),key); + gtk_combo_box_set_active(GTK_COMBO_BOX(element->TypeCombo),1); + } + gtk_box_pack_start(GTK_BOX(window->AddBox),element->MainBox,0,0,0); + g_object_set_data(G_OBJECT(element->MainBox),"window",window); + g_object_set_data(G_OBJECT(element->PathButton),"target",window->PathEntry); +} + +void yon_source_update(source_window *window){ + GList *list = gtk_container_get_children(GTK_CONTAINER(window->AddBox)); + GList *iter; + for (iter=list;iter;iter=iter->next){ + gtk_widget_destroy(GTK_WIDGET(iter->data)); + } + dictionary *dict; + if (!window->sources) return; + for_dictionaries(dict,window->sources){ + yon_source_element_add(dict->key,NULL,window); + + } +} + +void on_source_add(GtkWidget *,source_window *window){ + const char *path = gtk_widget_get_visible(window->PathEntry)?gtk_entry_get_text(GTK_ENTRY(window->PathEntry)):gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->DeviceCombo)); + if (!yon_dictionary_get(&window->sources,(char*)path)){ + yon_dictionary_add_or_create_if_exists_with_data(window->sources,yon_char_new(path),NULL); + gtk_entry_set_text(GTK_ENTRY(window->PathEntry),""); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceCombo),0); + yon_source_update(window); + } else { + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),VALUE_REPEAT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + } +} + +void on_source_remove(GtkWidget *,source_element *element){ + source_window *window = g_object_get_data(G_OBJECT(element->MainBox),"window"); + const char *path = gtk_widget_get_visible(element->PathEntry)?gtk_entry_get_text(GTK_ENTRY(element->PathEntry)):gtk_combo_box_get_active_id(GTK_COMBO_BOX(element->DeviceCombo)); + dictionary *dict = yon_dictionary_get(&window->sources,(char*)path); + if (dict){ + window->sources = yon_dictionary_rip(dict); + yon_source_update(window); + } +} + +void on_source_choose(GtkWidget *self){ + GtkWidget *target_entry = g_object_get_data(G_OBJECT(self),"target"); + GtkWidget *target_mode = g_object_get_data(G_OBJECT(self),"combo"); + switch (gtk_combo_box_get_active(GTK_COMBO_BOX(target_mode))){ + case 1:{ + filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(dialog->Window),OPEN_LABEL,icon_path,"filechooser_window"); + if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ + gtk_entry_set_text(GTK_ENTRY(target_entry),dialog->last_success_selection); + free(dialog); + } + + } break; + case 2: { + filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_OPEN); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(dialog->Window),OPEN_LABEL,icon_path,"filechooser_window"); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.iso"); + gtk_file_filter_set_name(filter,".iso"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->MainFileChooser),filter); + + if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ + gtk_entry_set_text(GTK_ENTRY(target_entry),dialog->last_success_selection); + free(dialog); + } + + } break; + } +} + +void on_source_accept(GtkWidget *,source_window *window){ + if (gtk_switch_get_active(GTK_SWITCH(window->AutoSwitch))){ + yon_config_register(source_parameter,source_parameter_command,"auto"); + on_subwindow_close(window->Window); + return; + } + const char *creation_path = gtk_widget_get_visible(window->PathEntry)? gtk_entry_get_text(GTK_ENTRY(window->PathEntry)):NULL; + if (!yon_char_is_empty(creation_path)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),SOURCE_CREATE_ONGOING_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + } + int size; + config_str paths = NULL; + dictionary *dict; + if (!window->sources) return; + for_dictionaries(dict,window->sources){ + if (yon_char_parsed_check_exist(paths,size,dict->key)>-1){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),VALUE_REPEAT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + yon_char_parsed_add_or_create_if_exists(paths,&size,dict->key); + } + if (!size){ + 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; + } + char *parameter_string = yon_char_parsed_to_string(paths,(int)size,","); + yon_config_register(source_parameter,source_parameter_command,parameter_string); + free(parameter_string); + on_subwindow_close(window->Window); + + if (!main_config.configure_mode){ + int size; + config_str parameters = yon_config_get_save_parameters_by_key(&size,locale_parameter,lang_parameter,zone_parameter,NULL); + if (parameters){ + char *command_parameters = yon_char_parsed_to_string(parameters,size," -- "); + char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL); + if (!system(command)){} + free(command); + yon_char_parsed_free(parameters,size); + } + } + yon_dictionary_free_all(window->sources,NULL); + free(window); +} + +source_window *yon_source_window_new(){ + source_window *window = new(source_window); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_source); + + window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + 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->AutoSwitch = yon_gtk_builder_get_widget(builder,"AutoSwitch"); + window->TypeCombo = yon_gtk_builder_get_widget(builder,"TypeCombo"); + window->PathEntry = yon_gtk_builder_get_widget(builder,"PathEntry"); + window->DeviceCombo = yon_gtk_builder_get_widget(builder,"DeviceCombo"); + window->PathButton = yon_gtk_builder_get_widget(builder,"PathButton"); + window->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); + window->AddBox = yon_gtk_builder_get_widget(builder,"AddBox"); + window->sources = NULL; + + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_source_accept),window); + g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_source_add),window); + g_signal_connect(G_OBJECT(window->PathButton),"clicked",G_CALLBACK(on_source_choose),window); + g_signal_connect(G_OBJECT(window->TypeCombo),"changed",G_CALLBACK(on_source_changed),window); + g_signal_connect(G_OBJECT(window->AutoSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),gtk_widget_get_parent(gtk_widget_get_parent(window->AddBox))); + g_object_set_data(G_OBJECT(window->PathButton),"combo",window->TypeCombo); + g_object_set_data(G_OBJECT(window->PathButton),"target",window->PathEntry); + g_object_set_data(G_OBJECT(window->TypeCombo),"target",window->DeviceCombo); + g_object_set_data(G_OBJECT(window->TypeCombo),"button",window->PathButton); + g_object_set_data(G_OBJECT(window->TypeCombo),"combo",window->PathEntry); + int size; + config_str parts = yon_config_load(get_parts_and_devices_command, &size); + for (int i=0;iDeviceCombo),parsed[1],parsed[1]); + } + yon_char_parsed_free(parsed,parsed_size); + } + gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceCombo),0); + yon_char_parsed_free(parts,size); + return window; +} + +void on_source_clicked(GtkWidget *,main_window *widgets){ + source_window *window = yon_source_window_new(); + char *sources = config(source_parameter); + if (!yon_char_is_empty(sources)&&strcmp(sources,"auto")){ + gtk_switch_set_active(GTK_SWITCH(window->AutoSwitch),0); + int size; + config_str parsed = yon_char_parse(sources,&size,","); + for (int i=0;isources,parsed[i],NULL); + } + yon_char_parsed_free(parsed,size); + } + g_object_set_data(G_OBJECT(window->Window),"widgets",widgets); + yon_source_update(window); + gtk_widget_show(window->Window); +} diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index eda485a..bda27e4 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -168,6 +168,20 @@ void yon_fs_type_setup(GtkComboBoxText *target){ } } +void on_rdp_toggled(GtkWidget *self, main_window *){ + GList *box = gtk_container_get_children(GTK_CONTAINER(self)); + GList *children = gtk_container_get_children(GTK_CONTAINER(box->data)); + + int active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(g_list_nth_data(children,1))); + if (!active){ + yon_launch(enable_rdp_command); + } else { + yon_launch(disable_rdp_command); + } + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_list_nth_data(children,1)),!active); + g_list_free(box); + g_list_free(children); +} void on_vnc_toggled(GtkWidget *self, main_window *){ GList *box = gtk_container_get_children(GTK_CONTAINER(self)); GList *children = gtk_container_get_children(GTK_CONTAINER(box->data)); @@ -268,245 +282,6 @@ double yon_size_long_convert_to_mod(double size, char mod){ return final_size; } -void on_source_changed(GtkComboBox *self){ - GtkWidget *devices_combo = g_object_get_data(G_OBJECT(self),"target"); - GtkWidget *path_button = g_object_get_data(G_OBJECT(self),"button"); - GtkWidget *path_combo = g_object_get_data(G_OBJECT(self),"combo"); - if (gtk_combo_box_get_active(self)){ - gtk_widget_show(path_button); - gtk_widget_show(path_combo); - gtk_widget_hide(devices_combo); - } else{ - gtk_widget_hide(path_button); - gtk_widget_hide(path_combo); - gtk_widget_show(devices_combo); - } -} - -source_element *yon_source_element_new(){ - source_element *element = new(source_element); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_source_element); - - element->MainBox = yon_gtk_builder_get_widget(builder,"MainBox"); - element->TypeCombo = yon_gtk_builder_get_widget(builder,"TypeCombo"); - element->PathEntry = yon_gtk_builder_get_widget(builder,"PathEntry"); - element->DeviceCombo = yon_gtk_builder_get_widget(builder,"DeviceCombo"); - element->PathButton = yon_gtk_builder_get_widget(builder,"PathButton"); - element->RemoveButton = yon_gtk_builder_get_widget(builder,"RemoveButton"); - - g_signal_connect(G_OBJECT(element->RemoveButton),"clicked",G_CALLBACK(on_source_remove),element); - g_signal_connect(G_OBJECT(element->PathButton),"clicked",G_CALLBACK(on_source_choose),element); - g_signal_connect(G_OBJECT(element->TypeCombo),"changed",G_CALLBACK(on_source_changed),element); - g_object_set_data(G_OBJECT(element->PathButton),"combo",element->TypeCombo); - g_object_set_data(G_OBJECT(element->PathButton),"target_combo",element->TypeCombo); - g_object_set_data(G_OBJECT(element->TypeCombo),"target",element->DeviceCombo); - g_object_set_data(G_OBJECT(element->TypeCombo),"button",element->PathButton); - g_object_set_data(G_OBJECT(element->TypeCombo),"combo",element->PathEntry); - int size; - config_str parts = yon_config_load(get_parts_and_devices_command, &size); - for (int i=0;iDeviceCombo),parsed[1],parsed[1]); - } - yon_char_parsed_free(parsed,parsed_size); - } - gtk_combo_box_set_active(GTK_COMBO_BOX(element->DeviceCombo),0); - yon_char_parsed_free(parts,size); - - return element; -} - -void yon_source_element_add(char *key,void*,source_window *window){ - source_element *element = yon_source_element_new(); - if (yon_char_check_begins_with(key,"/dev/")){ - gtk_combo_box_set_active_id(GTK_COMBO_BOX(element->DeviceCombo),key); - gtk_combo_box_set_active(GTK_COMBO_BOX(element->TypeCombo),0); - } else if (g_regex_match_simple(".*\\.iso",key,G_REGEX_DEFAULT,G_REGEX_MATCH_DEFAULT)){ - gtk_entry_set_text(GTK_ENTRY(element->PathEntry),key); - gtk_combo_box_set_active(GTK_COMBO_BOX(element->TypeCombo),2); - } else { - gtk_entry_set_text(GTK_ENTRY(element->PathEntry),key); - gtk_combo_box_set_active(GTK_COMBO_BOX(element->TypeCombo),1); - } - gtk_box_pack_start(GTK_BOX(window->AddBox),element->MainBox,0,0,0); - g_object_set_data(G_OBJECT(element->MainBox),"window",window); - g_object_set_data(G_OBJECT(element->PathButton),"target",window->PathEntry); -} - -void yon_source_update(source_window *window){ - GList *list = gtk_container_get_children(GTK_CONTAINER(window->AddBox)); - GList *iter; - for (iter=list;iter;iter=iter->next){ - gtk_widget_destroy(GTK_WIDGET(iter->data)); - } - dictionary *dict; - if (!window->sources) return; - for_dictionaries(dict,window->sources){ - yon_source_element_add(dict->key,NULL,window); - - } -} - -void on_source_add(GtkWidget *,source_window *window){ - const char *path = gtk_widget_get_visible(window->PathEntry)?gtk_entry_get_text(GTK_ENTRY(window->PathEntry)):gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->DeviceCombo)); - if (!yon_dictionary_get(&window->sources,(char*)path)){ - yon_dictionary_add_or_create_if_exists_with_data(window->sources,yon_char_new(path),NULL); - gtk_entry_set_text(GTK_ENTRY(window->PathEntry),""); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceCombo),0); - yon_source_update(window); - } else { - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),VALUE_REPEAT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - } -} - -void on_source_remove(GtkWidget *,source_element *element){ - source_window *window = g_object_get_data(G_OBJECT(element->MainBox),"window"); - const char *path = gtk_widget_get_visible(element->PathEntry)?gtk_entry_get_text(GTK_ENTRY(element->PathEntry)):gtk_combo_box_get_active_id(GTK_COMBO_BOX(element->DeviceCombo)); - dictionary *dict = yon_dictionary_get(&window->sources,(char*)path); - if (dict){ - window->sources = yon_dictionary_rip(dict); - yon_source_update(window); - } -} - -void on_source_choose(GtkWidget *self){ - GtkWidget *target_entry = g_object_get_data(G_OBJECT(self),"target"); - GtkWidget *target_mode = g_object_get_data(G_OBJECT(self),"combo"); - switch (gtk_combo_box_get_active(GTK_COMBO_BOX(target_mode))){ - case 1:{ - filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); - yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(dialog->Window),OPEN_LABEL,icon_path,"filechooser_window"); - if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ - gtk_entry_set_text(GTK_ENTRY(target_entry),dialog->last_success_selection); - free(dialog); - } - - } break; - case 2: { - filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_OPEN); - yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(dialog->Window),OPEN_LABEL,icon_path,"filechooser_window"); - GtkFileFilter *filter = gtk_file_filter_new(); - gtk_file_filter_add_pattern(filter,"*.iso"); - gtk_file_filter_set_name(filter,".iso"); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->MainFileChooser),filter); - - if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ - gtk_entry_set_text(GTK_ENTRY(target_entry),dialog->last_success_selection); - free(dialog); - } - - } break; - } -} - -void on_source_accept(GtkWidget *,source_window *window){ - if (gtk_switch_get_active(GTK_SWITCH(window->AutoSwitch))){ - yon_config_register(source_parameter,source_parameter_command,"auto"); - on_subwindow_close(window->Window); - return; - } - const char *creation_path = gtk_widget_get_visible(window->PathEntry)? gtk_entry_get_text(GTK_ENTRY(window->PathEntry)):NULL; - if (!yon_char_is_empty(creation_path)){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),SOURCE_CREATE_ONGOING_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - } - int size; - config_str paths = NULL; - dictionary *dict; - if (!window->sources) return; - for_dictionaries(dict,window->sources){ - if (yon_char_parsed_check_exist(paths,size,dict->key)>-1){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),VALUE_REPEAT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - yon_char_parsed_add_or_create_if_exists(paths,&size,dict->key); - } - if (!size){ - 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; - } - char *parameter_string = yon_char_parsed_to_string(paths,(int)size,","); - yon_config_register(source_parameter,source_parameter_command,parameter_string); - free(parameter_string); - on_subwindow_close(window->Window); - - if (!main_config.configure_mode){ - int size; - config_str parameters = yon_config_get_save_parameters_by_key(&size,locale_parameter,lang_parameter,zone_parameter,NULL); - if (parameters){ - char *command_parameters = yon_char_parsed_to_string(parameters,size," -- "); - char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL); - if (!system(command)){} - free(command); - yon_char_parsed_free(parameters,size); - } - } - yon_dictionary_free_all(window->sources,NULL); - free(window); -} - -source_window *yon_source_window_new(){ - source_window *window = new(source_window); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_source); - - window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); - 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->AutoSwitch = yon_gtk_builder_get_widget(builder,"AutoSwitch"); - window->TypeCombo = yon_gtk_builder_get_widget(builder,"TypeCombo"); - window->PathEntry = yon_gtk_builder_get_widget(builder,"PathEntry"); - window->DeviceCombo = yon_gtk_builder_get_widget(builder,"DeviceCombo"); - window->PathButton = yon_gtk_builder_get_widget(builder,"PathButton"); - window->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); - window->AddBox = yon_gtk_builder_get_widget(builder,"AddBox"); - window->sources = NULL; - - g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_source_accept),window); - g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_source_add),window); - g_signal_connect(G_OBJECT(window->PathButton),"clicked",G_CALLBACK(on_source_choose),window); - g_signal_connect(G_OBJECT(window->TypeCombo),"changed",G_CALLBACK(on_source_changed),window); - g_signal_connect(G_OBJECT(window->AutoSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),gtk_widget_get_parent(gtk_widget_get_parent(window->AddBox))); - g_object_set_data(G_OBJECT(window->PathButton),"combo",window->TypeCombo); - g_object_set_data(G_OBJECT(window->PathButton),"target",window->PathEntry); - g_object_set_data(G_OBJECT(window->TypeCombo),"target",window->DeviceCombo); - g_object_set_data(G_OBJECT(window->TypeCombo),"button",window->PathButton); - g_object_set_data(G_OBJECT(window->TypeCombo),"combo",window->PathEntry); - int size; - config_str parts = yon_config_load(get_parts_and_devices_command, &size); - for (int i=0;iDeviceCombo),parsed[1],parsed[1]); - } - yon_char_parsed_free(parsed,parsed_size); - } - gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceCombo),0); - yon_char_parsed_free(parts,size); - return window; -} - -void on_source_clicked(GtkWidget *,main_window *widgets){ - source_window *window = yon_source_window_new(); - char *sources = config(source_parameter); - if (!yon_char_is_empty(sources)&&strcmp(sources,"auto")){ - gtk_switch_set_active(GTK_SWITCH(window->AutoSwitch),0); - int size; - config_str parsed = yon_char_parse(sources,&size,","); - for (int i=0;isources,parsed[i],NULL); - } - yon_char_parsed_free(parsed,size); - } - g_object_set_data(G_OBJECT(window->Window),"widgets",widgets); - yon_source_update(window); - gtk_widget_show(window->Window); -} - double yon_size_long_convert_automatic(unsigned long bytes, char *size){ int repeats; double byte_float=bytes; @@ -1236,6 +1011,19 @@ void yon_main_window_create(main_window *widgets){ gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),(GtkTreeModelFilterVisibleFunc)on_country_filter,widgets,NULL); + { + widgets->EnableRDPMenuItem = gtk_menu_item_new(); + GtkWidget *Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + GtkWidget *Label = gtk_label_new(ENABLE_RDP_LABEL); + GtkWidget *Check = gtk_check_button_new(); + gtk_box_pack_start(GTK_BOX(Box),Label,0,0,0); + gtk_box_pack_start(GTK_BOX(Box),Check,0,0,0); + gtk_container_add(GTK_CONTAINER(widgets->EnableRDPMenuItem),Box); + g_signal_connect(G_OBJECT(widgets->EnableRDPMenuItem),"activate",G_CALLBACK(on_rdp_toggled),widgets); + gtk_style_context_add_class(gtk_widget_get_style_context(widgets->EnableRDPMenuItem),"menuitemmiddle"); + gtk_widget_show_all(widgets->EnableRDPMenuItem); + gtk_menu_shell_prepend(GTK_MENU_SHELL(widgets->menu2),widgets->EnableRDPMenuItem); + } { widgets->EnableVNCMenuItem = gtk_menu_item_new(); GtkWidget *Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index b92da22..f31d507 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -149,6 +149,9 @@ layout && /description:/ {\ #define enable_vnc_command "ubconfig --target system set [desktop] X11VNC[password]=ublinux" #define disable_vnc_command "ubconfig --target system remove [desktop] X11VNC[password]" +#define enable_rdp_command "ubconfig --target system set [desktop] AUTOEXEC[@users]='freerdp-server.service'" +#define disable_rdp_command "ubconfig --target system remove [desktop] AUTOEXEC[@users]" + #define get_layouts_local_command(layout) yon_char_unite("xkbcli list --load-exotic | awk -v layout=\"",layout,"\" \"BEGIN {layout_pattern = sprintf(\\\"^ *- *layout: *'%s'\\\",layout);matched=0} matched && /variant:/ {match(\\$0, /: *'([^']+)'/, matches);variant = matches[1]} matched && /description:/ {match(\\$0, /: *(.+)/, matches);description = matches[1]} matched && /^ *-/{matched=0; if (variant) printf \\\"%s|%s\\n\\\",variant,description} \\$0 ~ layout_pattern {matched=1;variant=\\\"\\\";description=\\\"\\\";next}\" | sort -u",NULL) #define get_devices_command "lsblk --noheadings --nodeps -Jo PATH,SIZE,MODEL,VENDOR,SERIAL --exclude 7" #define get_parts_and_devices_command "lsblk --noheadings --bytes -o TYPE,PATH,SIZE,FSTYPE,LABEL,PARTLABEL,MOUNTPOINT,FSUSED,FSUSE% --exclude 7 |awk '{print ($1\";\"$2\";\"$3\";\"$4\";\"$5\";\"$6\";\"$7\";\"$8\";\"$9)}'" @@ -571,6 +574,7 @@ typedef struct { GtkWidget *ConfigurationModeMenuItem; GtkWidget *EnableVNCMenuItem; + GtkWidget *EnableRDPMenuItem; GtkWidget *AboutMenuItem; GtkWidget *DocumentationMenuItem; @@ -1301,6 +1305,7 @@ void on_source_add(GtkWidget *,source_window *window); void yon_source_update(source_window *window); void yon_source_element_add(char *key,void*,source_window *window); source_element *yon_source_element_new(); +void on_rdp_toggled(GtkWidget *self, main_window *); void on_vnc_toggled(GtkWidget *self, main_window *widgets); void yon_main_window_create(main_window *widgets); void set_locales_list(main_window *widgets); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 15dc13d..72f4ee0 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -278,6 +278,7 @@ NULL) #define BOOTLOADER_LABEL _("Boot load") #define NETWORK_LABEL _("Network") #define ENABLE_VNC_LABEL _("Enable VNC server") +#define ENABLE_RDP_LABEL _("Enable RDP server") // #define _LABEL _("Package:") // #define _LABEL _("Module:")