Source window moved to separate file; RDP server menu item added

pull/170/head
parent f6b6f63a51
commit 65e83dd753

@ -928,6 +928,10 @@ msgstr ""
msgid "Enable VNC server" msgid "Enable VNC server"
msgstr "" msgstr ""
#: source/ubl-strings.h:283
msgid "Enable RDP server"
msgstr ""
#: source/ubl-strings.h:285 #: source/ubl-strings.h:285
msgid "<i><b>Package:</b></i>" msgid "<i><b>Package:</b></i>"
msgstr "" msgstr ""

@ -950,6 +950,10 @@ msgstr "Настройка сетевых интерфейсов"
msgid "Enable VNC server" msgid "Enable VNC server"
msgstr "Запустить VNC сервер" msgstr "Запустить VNC сервер"
#: source/ubl-strings.h:283
msgid "Enable RDP server"
msgstr "Запустить RDP сервер"
#: source/ubl-strings.h:285 #: source/ubl-strings.h:285
msgid "<i><b>Package:</b></i>" msgid "<i><b>Package:</b></i>"
msgstr "<i><b>Пакет:</b></i>" msgstr "<i><b>Пакет:</b></i>"

@ -123,6 +123,7 @@ set(SOURCE_FILES
ubinstall-gtk-installation.c ubinstall-gtk-installation.c
ubinstall-gtk-network.c ubinstall-gtk-network.c
ubinstall-gtk-separate.c ubinstall-gtk-separate.c
ubinstall-gtk-source.c
ubinstall-gtk-users.c ubinstall-gtk-users.c
ubinstall-gtk-configuration-mode.c ubinstall-gtk-configuration-mode.c
ubinstall-gtk-decorations.c ubinstall-gtk-decorations.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;i<size;i++){
int parsed_size;
config_str parsed = yon_char_parse(parts[i],&parsed_size,";");
if (!strcmp(parsed[0],"part")){
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(element->DeviceCombo),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;i<size;i++){
int parsed_size;
config_str parsed = yon_char_parse(parts[i],&parsed_size,";");
if (!strcmp(parsed[0],"part")){
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->DeviceCombo),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;i<size;i++){
yon_dictionary_add_or_create_if_exists_with_data(window->sources,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);
}

@ -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 *){ void on_vnc_toggled(GtkWidget *self, main_window *){
GList *box = gtk_container_get_children(GTK_CONTAINER(self)); GList *box = gtk_container_get_children(GTK_CONTAINER(self));
GList *children = gtk_container_get_children(GTK_CONTAINER(box->data)); 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; 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;i<size;i++){
int parsed_size;
config_str parsed = yon_char_parse(parts[i],&parsed_size,";");
if (!strcmp(parsed[0],"part")){
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(element->DeviceCombo),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;i<size;i++){
int parsed_size;
config_str parsed = yon_char_parse(parts[i],&parsed_size,";");
if (!strcmp(parsed[0],"part")){
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->DeviceCombo),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;i<size;i++){
yon_dictionary_add_or_create_if_exists_with_data(window->sources,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){ double yon_size_long_convert_automatic(unsigned long bytes, char *size){
int repeats; int repeats;
double byte_float=bytes; 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); 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(); widgets->EnableVNCMenuItem = gtk_menu_item_new();
GtkWidget *Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); GtkWidget *Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);

@ -149,6 +149,9 @@ layout && /description:/ {\
#define enable_vnc_command "ubconfig --target system set [desktop] X11VNC[password]=ublinux" #define enable_vnc_command "ubconfig --target system set [desktop] X11VNC[password]=ublinux"
#define disable_vnc_command "ubconfig --target system remove [desktop] X11VNC[password]" #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_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_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)}'" #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 *ConfigurationModeMenuItem;
GtkWidget *EnableVNCMenuItem; GtkWidget *EnableVNCMenuItem;
GtkWidget *EnableRDPMenuItem;
GtkWidget *AboutMenuItem; GtkWidget *AboutMenuItem;
GtkWidget *DocumentationMenuItem; GtkWidget *DocumentationMenuItem;
@ -1301,6 +1305,7 @@ void on_source_add(GtkWidget *,source_window *window);
void yon_source_update(source_window *window); void yon_source_update(source_window *window);
void yon_source_element_add(char *key,void*,source_window *window); void yon_source_element_add(char *key,void*,source_window *window);
source_element *yon_source_element_new(); source_element *yon_source_element_new();
void on_rdp_toggled(GtkWidget *self, main_window *);
void on_vnc_toggled(GtkWidget *self, main_window *widgets); void on_vnc_toggled(GtkWidget *self, main_window *widgets);
void yon_main_window_create(main_window *widgets); void yon_main_window_create(main_window *widgets);
void set_locales_list(main_window *widgets); void set_locales_list(main_window *widgets);

@ -278,6 +278,7 @@ NULL)
#define BOOTLOADER_LABEL _("Boot load") #define BOOTLOADER_LABEL _("Boot load")
#define NETWORK_LABEL _("Network") #define NETWORK_LABEL _("Network")
#define ENABLE_VNC_LABEL _("Enable VNC server") #define ENABLE_VNC_LABEL _("Enable VNC server")
#define ENABLE_RDP_LABEL _("Enable RDP server")
// #define _LABEL _("<i><b>Package:</b></i>") // #define _LABEL _("<i><b>Package:</b></i>")
// #define _LABEL _("<i><b>Module:</b></i>") // #define _LABEL _("<i><b>Module:</b></i>")

Loading…
Cancel
Save