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:")