master #165
Merged
asmeron
merged 10 commits from YanTheKaller/ubinstall-gtk:master into master 5 months ago
@ -1,385 +1,467 @@
|
|||||||
#include "ubinstall-gtk.h"
|
#include "ubinstall-gtk.h"
|
||||||
|
|
||||||
int yon_keyboard_save(main_window *widgets){
|
int yon_keyboard_save(main_window *widgets){
|
||||||
GtkTreeIter iter,iter_child;
|
if (gtk_switch_get_active(GTK_SWITCH(widgets->KeyboardDefaultLayoutsSwitch))){
|
||||||
if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LayoutList),&iter)){
|
yon_config_remove_by_key(xkblayout_parameter);
|
||||||
yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),LAYOUTS_CHOSEN_BUT_EMPTY_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
|
} else {
|
||||||
yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->LayoutTree));
|
GtkTreeIter iter;
|
||||||
|
if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LayoutsList),&iter)){
|
||||||
|
yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),yon_char_get_localised_from_lib(EMPTY_IMPORTANT_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
|
||||||
|
yon_ubl_status_highlight_incorrect(widgets->KeyboardLayoutTree);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
char *layouts_list="";
|
}
|
||||||
GtkTreeModel *layouts_model=GTK_TREE_MODEL(widgets->LayoutList);
|
return 1;
|
||||||
char *cur_layout=NULL;
|
}
|
||||||
for_iter(layouts_model,&iter){
|
|
||||||
int chosen=0;
|
|
||||||
int primary=0;
|
|
||||||
gtk_tree_model_get(layouts_model,&iter,0,&cur_layout,3,&chosen,4,&primary,-1);
|
|
||||||
if (chosen)
|
|
||||||
layouts_list = yon_char_unite(layouts_list,yon_char_is_empty(layouts_list)?"":",",cur_layout,NULL);
|
|
||||||
if (primary){
|
|
||||||
yon_config_register(xkbvariant_parameter,xkbvariant_parameter_command,cur_layout);
|
|
||||||
}
|
|
||||||
if (gtk_tree_model_iter_children(layouts_model,&iter_child,&iter)){
|
|
||||||
for(int valid2=1;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->LayoutList),&iter_child)){
|
|
||||||
gtk_tree_model_get(layouts_model,&iter_child,0,&cur_layout,3,&chosen,4,&primary,-1);
|
|
||||||
if (chosen)
|
|
||||||
layouts_list = yon_char_unite(layouts_list,yon_char_is_empty(layouts_list)?"":",",cur_layout,NULL);
|
|
||||||
if (primary){
|
|
||||||
yon_config_register(xkbvariant_parameter,xkbvariant_parameter_command,cur_layout);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!yon_char_is_empty(layouts_list))
|
|
||||||
yon_config_register(xkblayout_parameter,xkblayout_parameter_command,layouts_list);
|
|
||||||
else
|
|
||||||
yon_config_remove_by_key(xkblayout_parameter);
|
|
||||||
|
|
||||||
if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo))){
|
void yon_keyboard_init(main_window *widgets){
|
||||||
char *model = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo));
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardModelCombo),G_CALLBACK(on_model_changed),widgets);
|
||||||
if (!yon_char_is_empty(model))
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardLayoutChangingCombo),G_CALLBACK(on_options_save),widgets);
|
||||||
yon_config_register(xkbmodel_parameter,xkbmodel_parameter_command,model);
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardNumLockCombo),G_CALLBACK(on_num_lock_changed),widgets);
|
||||||
} else{
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardScrollLockSwitch),G_CALLBACK(on_scroll_lock_switch),widgets);
|
||||||
yon_config_remove_by_key(xkbmodel_parameter);
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardComposeSwitch),G_CALLBACK(on_compose_switch),widgets);
|
||||||
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardDefaultLayoutsSwitch),G_CALLBACK(on_layout_default_toggled),widgets);
|
||||||
|
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo));
|
||||||
|
int size;
|
||||||
|
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo),DEFAULT_LABEL);
|
||||||
|
config_str models = yon_config_load(get_keyboard_models_command,&size);
|
||||||
|
for (int i=0;i<size;i++){
|
||||||
|
yon_char_remove_last_symbol(models[i],'\n');
|
||||||
|
int parsed_size;
|
||||||
|
config_str parsed = yon_char_parse(models[i],&parsed_size,"|");
|
||||||
|
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo),parsed[0],_(parsed[1]));
|
||||||
|
yon_char_parsed_free(parsed,parsed_size);
|
||||||
}
|
}
|
||||||
|
yon_char_parsed_free(models,size);
|
||||||
|
|
||||||
if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->LayoutBindingCombo))){
|
// g_signal_handlers_block_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets);
|
||||||
char *options = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LayoutBindingCombo));
|
|
||||||
if (options){};
|
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0);
|
||||||
yon_config_register(xkboptions_parameter,xkboptions_parameter_command,options);
|
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardNumLockCombo),0);
|
||||||
} else {
|
{
|
||||||
yon_config_remove_by_key(xkboptions_parameter);
|
char *kbmodel = yon_config_get_by_key(xkbmodel_parameter);
|
||||||
|
if (kbmodel) {
|
||||||
|
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo),kbmodel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
gtk_list_store_clear(widgets->LayoutsList);
|
||||||
|
char *layouts = config(xkblayout_parameter);
|
||||||
|
|
||||||
|
int layouts_parsed_size;
|
||||||
|
config_str layouts_parsed = yon_char_parse(layouts,&layouts_parsed_size,",");
|
||||||
|
for(int i=0;i<layouts_parsed_size;i++){
|
||||||
|
yon_layout_load(layouts_parsed[i],widgets);
|
||||||
|
}
|
||||||
|
if (yon_char_is_empty(layouts)||yon_config_check_ignore(xkblayout_parameter)){
|
||||||
|
gtk_switch_set_active(GTK_SWITCH(widgets->KeyboardDefaultLayoutsSwitch),1);
|
||||||
|
} else {
|
||||||
|
gtk_switch_set_active(GTK_SWITCH(widgets->KeyboardDefaultLayoutsSwitch),0);
|
||||||
|
}
|
||||||
|
|
||||||
if (!main_config.configure_mode){
|
if (yon_char_is_empty(layouts)){
|
||||||
|
char *element = yon_char_parsed_check_exist_begins_with(main_config.layouts_list,main_config.layouts_size,"us|");
|
||||||
|
if (element){
|
||||||
|
int parsed_size;
|
||||||
|
config_str parsed = yon_char_parse(element,&parsed_size,"|");
|
||||||
|
GtkTreeIter iter;
|
||||||
|
gtk_list_store_append(widgets->LayoutsList,&iter);
|
||||||
|
gtk_list_store_set(widgets->LayoutsList,&iter,0,parsed[0],2,_(parsed[1]),-1);
|
||||||
|
yon_char_parsed_free(parsed,parsed_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KeyboardLayoutChangingCombo));
|
||||||
|
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->KeyboardLayoutChangingCombo),DEFAULT_LABEL);
|
||||||
int size;
|
int size;
|
||||||
config_str parameters = yon_config_get_save_parameters_by_key(&size,xkbvariant_parameter,xkblayout_parameter,xkbmodel_parameter,xkboptions_parameter,NULL);
|
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardLayoutChangingCombo),0);
|
||||||
if (parameters){
|
config_str options = yon_config_load(grp_options_command,&size);
|
||||||
char *command_parameters = yon_char_parsed_to_string(parameters,size," -- ");
|
|
||||||
char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL);
|
for (int i=0;i<size;i++){
|
||||||
if (!system(yon_debug_output("%s\n",command))){}
|
yon_char_remove_last_symbol(options[i],'\n');
|
||||||
free(command);
|
int parsed_size;
|
||||||
yon_char_parsed_free(parameters,size);
|
config_str parsed = yon_char_parse(options[i],&parsed_size,"|");
|
||||||
|
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->KeyboardLayoutChangingCombo),parsed[0],_(parsed[1]));
|
||||||
|
yon_char_parsed_free(parsed,parsed_size);
|
||||||
}
|
}
|
||||||
|
yon_char_parsed_free(options,size);
|
||||||
}
|
}
|
||||||
return 1;
|
{
|
||||||
}
|
char *name = yon_config_get_by_key(num_lock_boot_parameter);
|
||||||
|
if (name) {
|
||||||
ubinstall_keyboard_window *yon_ubinstall_keyboard_new(){
|
if (!strcmp(name,"yes")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardNumLockCombo),1);
|
||||||
void on_additional_software_toggled();
|
else if (!strcmp(name,"no")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardNumLockCombo),2);
|
||||||
ubinstall_keyboard_window *window = malloc(sizeof(ubinstall_keyboard_window));
|
}
|
||||||
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubinstall_keyboard);
|
}
|
||||||
window->MainWindow=yon_gtk_builder_get_widget(builder,"MainWindow");
|
{
|
||||||
window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
|
char *options = config(xkboptions_parameter);
|
||||||
window->headerBar=yon_gtk_builder_get_widget(builder,"headerBar");
|
if (!yon_char_is_empty(options)){
|
||||||
window->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton");
|
int size;
|
||||||
window->SaveButton=yon_gtk_builder_get_widget(builder,"SaveButton");
|
config_str parsed = yon_char_parse(options,&size,",");
|
||||||
window->LayoutsTree=yon_gtk_builder_get_widget(builder,"LayoutsTree");
|
if (!yon_char_is_empty(parsed[0])){
|
||||||
window->ActiveToggle = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ActiveToggle"));
|
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->KeyboardLayoutChangingCombo),parsed[0]);
|
||||||
|
} else {
|
||||||
|
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardLayoutChangingCombo),0);
|
||||||
|
}
|
||||||
|
if (yon_char_parsed_check_exist(parsed,size,"compose:rwin")>-1){
|
||||||
|
gtk_switch_set_active(GTK_SWITCH(widgets->KeyboardComposeSwitch),1);
|
||||||
|
} else {
|
||||||
|
gtk_switch_set_active(GTK_SWITCH(widgets->KeyboardComposeSwitch),0);
|
||||||
|
}
|
||||||
|
if (yon_char_parsed_check_exist(parsed,size,"grp_led:scroll")>-1){
|
||||||
|
gtk_switch_set_active(GTK_SWITCH(widgets->KeyboardScrollLockSwitch),1);
|
||||||
|
} else {
|
||||||
|
gtk_switch_set_active(GTK_SWITCH(widgets->KeyboardScrollLockSwitch),0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
|
}
|
||||||
|
|
||||||
return window;
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardModelCombo),G_CALLBACK(on_model_changed),widgets);
|
||||||
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardNumLockCombo),G_CALLBACK(on_num_lock_changed),widgets);
|
||||||
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardLayoutChangingCombo),G_CALLBACK(on_options_save),widgets);
|
||||||
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardScrollLockSwitch),G_CALLBACK(on_scroll_lock_switch),widgets);
|
||||||
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardComposeSwitch),G_CALLBACK(on_compose_switch),widgets);
|
||||||
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardDefaultLayoutsSwitch),G_CALLBACK(on_layout_default_toggled),widgets);
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_keyboard_removed(GtkWidget *, main_window *widgets){
|
void on_layouts_accept(GtkWidget *self, layouts_window *window){
|
||||||
GtkTreeModel *model;
|
main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets");
|
||||||
GtkTreeIter iter, childiter;
|
if (!yon_char_is_empty(window->parameters)){
|
||||||
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LayoutTree)),&model,&iter)){
|
yon_config_register(xkblayout_parameter,xkblayout_parameter_command,window->parameters);
|
||||||
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter),&childiter,&iter);
|
} else {
|
||||||
gtk_tree_store_set(widgets->LayoutList,&childiter,3,0,-1);
|
yon_config_remove_by_key(xkblayout_parameter);
|
||||||
}
|
}
|
||||||
|
on_subwindow_close(self);
|
||||||
|
yon_keyboard_init(widgets);
|
||||||
}
|
}
|
||||||
|
|
||||||
void yon_language_selection_changed(GtkCellRenderer *, char *path, ubinstall_language_window *window){
|
void on_layouts_chosen(GtkCellRenderer *, gchar *path, layouts_window *window){
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
int state;
|
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path);
|
||||||
|
int chosen;
|
||||||
|
char *layout, *variant;
|
||||||
|
gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&layout,1,&variant,3,&chosen,-1);
|
||||||
|
gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,3,!chosen,-1);
|
||||||
|
|
||||||
if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->liststore1),&iter,path)){
|
|
||||||
gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&state,-1);
|
|
||||||
gtk_list_store_set(window->liststore1,&iter,0,!state,-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_language_window_accept(GtkWidget *,dictionary *dict){
|
char *full_layout = NULL;
|
||||||
main_window *widgets= yon_dictionary_get_data(dict->first,main_window*);
|
if (!yon_char_is_empty(variant)){
|
||||||
ubinstall_language_window *window = yon_dictionary_get_data(dict->first->next,ubinstall_language_window*);
|
full_layout = yon_char_unite(layout,"_",variant,NULL);
|
||||||
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultCheck))){
|
|
||||||
gtk_entry_set_text(GTK_ENTRY(widgets->AvailableLanguagesEntry),"");
|
|
||||||
GtkTreeIter iter;
|
|
||||||
int size;
|
|
||||||
config_str lang_parsed = default_langs(&size);
|
|
||||||
|
|
||||||
char *final = "";
|
|
||||||
for_iter(widgets->LanguagesList,&iter){
|
|
||||||
char *code, *labl;
|
|
||||||
gtk_tree_model_get(GTK_TREE_MODEL(widgets->LanguagesList),&iter,1,&code,2,&labl,-1);
|
|
||||||
if (yon_char_parsed_check_exist(lang_parsed,size,code)!=-1){
|
|
||||||
gtk_list_store_set(widgets->LanguagesList,&iter,0,1,-1);
|
|
||||||
char *tmp = yon_char_unite(final,!yon_char_is_empty(final)?";":"",labl,NULL);
|
|
||||||
if (!yon_char_is_empty(final)) free(final);
|
|
||||||
final = tmp;
|
|
||||||
} else
|
|
||||||
gtk_list_store_set(widgets->LanguagesList,&iter,0,0,-1);
|
|
||||||
}
|
|
||||||
if (!yon_char_is_empty(final)){
|
|
||||||
gtk_entry_set_text(GTK_ENTRY(widgets->AvailableLanguagesEntry),final);
|
|
||||||
}
|
|
||||||
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguagesCombo),-1);
|
|
||||||
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->LanguagesFilter));
|
|
||||||
} else {
|
} else {
|
||||||
yon_gtk_list_store_copy_full(widgets->LanguagesList,window->liststore1);
|
full_layout = layout;
|
||||||
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->LanguagesFilter));
|
|
||||||
config_str parsed = NULL;
|
|
||||||
int size;
|
|
||||||
GtkTreeIter iter;
|
|
||||||
for_iter(GTK_TREE_MODEL(window->liststore1),&iter){
|
|
||||||
char *current;
|
|
||||||
int status;
|
|
||||||
gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&status,2,¤t,-1);
|
|
||||||
if (status)
|
|
||||||
yon_char_parsed_add_or_create_if_exists(parsed,&size,current);
|
|
||||||
}
|
|
||||||
if (parsed){
|
|
||||||
char *final = yon_char_parsed_to_string(parsed,size,"; ");
|
|
||||||
gtk_entry_set_text(GTK_ENTRY(widgets->AvailableLanguagesEntry),!yon_char_is_empty(final)?final:"");
|
|
||||||
if (yon_char_is_empty(final)) {
|
|
||||||
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguagesCombo),-1);
|
|
||||||
}
|
|
||||||
if (final) free(final);
|
|
||||||
yon_char_parsed_free(parsed,size);
|
|
||||||
} else
|
|
||||||
gtk_entry_set_text(GTK_ENTRY(widgets->AvailableLanguagesEntry),"");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
on_subwindow_close(window->MainWindow);
|
if (!chosen){
|
||||||
free(window);
|
char *temp = yon_char_append_element(window->parameters,full_layout,",");
|
||||||
|
free(window->parameters);
|
||||||
|
window->parameters = temp;
|
||||||
|
} else {
|
||||||
|
char *temp = yon_char_remove_element(window->parameters,full_layout,",");
|
||||||
|
free(window->parameters);
|
||||||
|
window->parameters = temp;
|
||||||
|
}
|
||||||
|
free(full_layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
void yon_focus_set(GtkWidget *,GtkWidget *target){
|
void on_system_layouts_add(GtkWidget *, main_window *widgets){
|
||||||
gtk_widget_grab_focus(target);
|
yon_layouts_add(GTK_TREE_VIEW(widgets->KeyboardLayoutTree),widgets->LayoutsList,widgets);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ubinstall_language_window *yon_ubinstall_language_new(){
|
layouts_window *yon_layouts_window_new(){
|
||||||
ubinstall_language_window *window = malloc(sizeof(ubinstall_language_window));
|
GtkBuilder *builder = gtk_builder_new_from_resource(glade_layouts_path);
|
||||||
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubinstall_language);
|
layouts_window *window = malloc(sizeof(layouts_window));
|
||||||
window->liststore1=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1"));
|
memset(window,0,sizeof(layouts_window));
|
||||||
window->MainWindow=yon_gtk_builder_get_widget(builder,"MainWindow");
|
window->Window = yon_gtk_builder_get_widget(builder,"Window");
|
||||||
window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
|
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
|
||||||
window->DefaultCheck=yon_gtk_builder_get_widget(builder,"DefaultCheck");
|
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
|
||||||
window->LanguagesTree=yon_gtk_builder_get_widget(builder,"LanguagesTree");
|
window->ChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChosenCell"));
|
||||||
window->headerBar=yon_gtk_builder_get_widget(builder,"headerBar");
|
window->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree");
|
||||||
window->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton");
|
window->parameters = yon_char_new(config(xkblayout_parameter));
|
||||||
window->SaveButton=yon_gtk_builder_get_widget(builder,"SaveButton");
|
|
||||||
window->ToggleRenderer=GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ToggleRenderer"));
|
|
||||||
|
|
||||||
g_signal_connect(G_OBJECT(window->DefaultCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->LanguagesTree);
|
|
||||||
g_signal_connect(G_OBJECT(window->DefaultCheck),"toggled",G_CALLBACK(yon_focus_set),window->LanguagesTree);
|
|
||||||
g_signal_connect(G_OBJECT(window->ToggleRenderer),"toggled",G_CALLBACK(yon_language_selection_changed),window);
|
|
||||||
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
|
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
|
||||||
return window;
|
g_signal_connect(G_OBJECT(window->ChosenCell),"toggled",G_CALLBACK(on_layouts_chosen),window);
|
||||||
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_language_clicked(GtkWidget *, main_window *widgets){
|
void yon_layouts_add(GtkTreeView *, GtkListStore *, main_window *widgets){
|
||||||
ubinstall_language_window *window = yon_ubinstall_language_new();
|
layouts_window *window = yon_layouts_window_new();
|
||||||
g_object_ref(G_OBJECT(window->liststore1));
|
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->MainWindow),TITLE_LABEL,icon_path,"layout_window");
|
||||||
gtk_tree_view_set_model(GTK_TREE_VIEW(window->LanguagesTree),NULL);
|
|
||||||
yon_gtk_list_store_copy_full(window->liststore1,widgets->LanguagesList);
|
|
||||||
gtk_tree_view_set_model(GTK_TREE_VIEW(window->LanguagesTree),GTK_TREE_MODEL(window->liststore1));
|
|
||||||
yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->MainWindow),TITLE_LABEL,icon_path,"language-chooser-window");
|
|
||||||
gtk_tree_view_set_search_column(GTK_TREE_VIEW(window->LanguagesTree),2);
|
|
||||||
if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->AvailableLanguagesEntry)))){
|
|
||||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DefaultCheck),1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
window->list = main_config.layouts_store;
|
||||||
|
|
||||||
|
gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree), GTK_TREE_MODEL(main_config.layouts_store));
|
||||||
|
gtk_tree_view_column_clicked(GTK_TREE_VIEW_COLUMN(gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0)));
|
||||||
|
yon_layout_build(window);
|
||||||
|
g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
|
||||||
|
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_layouts_accept),window);
|
||||||
|
|
||||||
|
char *languages = config(xkblayout_parameter);
|
||||||
int size;
|
int size;
|
||||||
int found=0;
|
config_str parsed = yon_char_parse(languages,&size,",");
|
||||||
int statusfound=0;
|
GtkTreeIter iter,itar;
|
||||||
config_str langs = default_langs(&size);
|
for_iter(window->list,&iter){
|
||||||
GtkTreeIter iter;
|
int found = 0;
|
||||||
for_iter(widgets->LanguagesList,&iter){
|
char *id, *id_var;
|
||||||
char *cur;
|
gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&id,-1);
|
||||||
int status;
|
for (int i=0;i<size;i++){
|
||||||
gtk_tree_model_get(GTK_TREE_MODEL(widgets->LanguagesList),&iter,0,&status,2,&cur,-1);
|
char *key = NULL;
|
||||||
if (status){
|
key = yon_char_new(parsed[i]);
|
||||||
statusfound++;
|
if (!strcmp(id,key)){
|
||||||
if (yon_char_parsed_check_exist(langs,size,cur)>-1)
|
gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,3,1,-1);
|
||||||
found++;
|
found=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,3,0,-1);
|
||||||
|
}
|
||||||
|
if (gtk_tree_model_iter_children(GTK_TREE_MODEL(window->list),&itar,&iter)){
|
||||||
|
for (int valid2=1;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itar)){
|
||||||
|
gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,0,&id,1,&id_var,-1);
|
||||||
|
for (int i=0;i<size;i++){
|
||||||
|
char *key, *variant = NULL;
|
||||||
|
variant = yon_char_new(parsed[i]);
|
||||||
|
key = yon_char_divide_search(variant,"_",-1);
|
||||||
|
if (!strcmp(key,id)&&!yon_char_is_empty(id_var)&&!strcmp(variant,id_var)){
|
||||||
|
gtk_tree_store_set(GTK_TREE_STORE(window->list),&itar,3,1,-1);
|
||||||
|
found=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ((found==size)&&statusfound==size){
|
|
||||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DefaultCheck),1);
|
|
||||||
}
|
|
||||||
|
|
||||||
dictionary *dict=NULL;
|
|
||||||
yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets);
|
|
||||||
yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
|
|
||||||
g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_language_window_accept),dict);
|
|
||||||
gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(window->LanguagesTree),0));
|
|
||||||
gtk_widget_show(window->MainWindow);
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void yon_layouts_remove(GtkTreeView *tree, GtkListStore *cur_list, main_window *widgets){
|
||||||
void on_layout_toggle(GtkCellRendererToggle*, gchar* path, ubinstall_keyboard_window *window){
|
GtkTreeModel *model = GTK_TREE_MODEL(cur_list);
|
||||||
GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(window->LayoutsTree));
|
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
if (gtk_tree_model_get_iter_from_string(model,&iter,path)){
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(tree),&model,&iter)){
|
||||||
int status=0;
|
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
|
||||||
gtk_tree_model_get(model,&iter,3,&status,-1);
|
data->action_text = LAYOUT_REMOVE_LABEL;
|
||||||
gtk_tree_store_set(GTK_TREE_STORE(model),&iter,3,!status,-1);
|
data->title = LAYOUT_REMOVE_TITLE_LABEL;
|
||||||
|
if (yon_confirmation_dialog_call(widgets->MainWindow,data)!=GTK_RESPONSE_ACCEPT) return;
|
||||||
|
gtk_list_store_remove(widgets->LayoutsList,&iter);
|
||||||
}
|
}
|
||||||
|
yon_keyboard_init(widgets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void on_system_layouts_remove(GtkWidget *, main_window *widgets){
|
||||||
void on_keyboard_accept(GtkWidget *self,main_window *widgets){
|
yon_layouts_remove(GTK_TREE_VIEW(widgets->KeyboardLayoutTree),widgets->LayoutsList,widgets);
|
||||||
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter));
|
|
||||||
on_subwindow_close(self);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// standard functions
|
||||||
|
|
||||||
void on_keyboard_clicked (GtkWidget *, main_window *widgets){
|
config_str yon_layout_get_children(char *layout_id, int *size){
|
||||||
ubinstall_keyboard_window *window = yon_ubinstall_keyboard_new();
|
(*size)=0;
|
||||||
yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->MainWindow),KEYBOARD_TITLE_LABEL,icon_path,"keyboard-window");
|
config_str final = NULL;
|
||||||
gtk_tree_view_set_model(GTK_TREE_VIEW(window->LayoutsTree),GTK_TREE_MODEL(widgets->LayoutList));
|
for (int i=0;i<main_config.variants_size;i++){
|
||||||
gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(window->LayoutsTree),1));
|
int parsed_size;
|
||||||
|
config_str parsed = yon_char_parse(main_config.variants_list[i],&parsed_size,"|");
|
||||||
g_signal_connect(G_OBJECT(window->ActiveToggle),"toggled",G_CALLBACK(on_layout_toggle),window);
|
if (!strcmp(parsed[0],layout_id)){
|
||||||
g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_keyboard_accept),widgets);
|
yon_char_parsed_add_or_create_if_exists(final,size,main_config.variants_list[i]);
|
||||||
gtk_widget_show(window->MainWindow);
|
}
|
||||||
|
}
|
||||||
|
return final;
|
||||||
}
|
}
|
||||||
|
|
||||||
void yon_layout_build(char *key, GHashTable *value, main_window *widgets){
|
void yon_layout_load(char *layout,main_window *widgets){
|
||||||
GtkTreeIter parent;
|
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
gtk_tree_store_append(widgets->LayoutList,&parent,NULL);
|
if (strstr(layout,"_")){
|
||||||
gtk_tree_store_set(widgets->LayoutList,&parent,0,key,1,_((char*)g_hash_table_lookup(value,"")),2,1,3,0,-1);
|
char *cur_variant = yon_char_new(layout);
|
||||||
|
char *cur_layout = yon_char_divide_search(cur_variant,"_",-1);
|
||||||
GList *list = g_hash_table_get_keys(value);
|
for (int i=0;i<main_config.variants_size;i++){
|
||||||
GList *iterator = NULL;
|
int parsed_size;
|
||||||
for (iterator=list;iterator;iterator=iterator->next){
|
config_str parsed = yon_char_parse(main_config.variants_list[i],&parsed_size,"|");
|
||||||
if (!yon_char_is_empty((char*)iterator->data)){
|
if (!strcmp(parsed[0],cur_layout)&&!strcmp(parsed[1],cur_variant)){
|
||||||
gtk_tree_store_append(widgets->LayoutList,&iter,&parent);
|
gtk_list_store_append(widgets->LayoutsList,&iter);
|
||||||
gtk_tree_store_set(widgets->LayoutList,&iter,0,(char*)iterator->data,1,_((char*)g_hash_table_lookup(value,iterator->data)),2,1,3,0,4,0,-1);
|
gtk_list_store_set(widgets->LayoutsList,&iter,0,parsed[0],1,parsed[1],2,_(parsed[2]),-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
for (int i=0;i<main_config.layouts_size;i++){
|
||||||
|
int parsed_size;
|
||||||
|
config_str parsed = yon_char_parse(main_config.layouts_list[i],&parsed_size,"|");
|
||||||
|
if (!strcmp(parsed[0],layout)){
|
||||||
|
gtk_list_store_append(widgets->LayoutsList,&iter);
|
||||||
|
gtk_list_store_set(widgets->LayoutsList,&iter,0,parsed[0],2,_(parsed[1]),-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void yon_keyboard_init(main_window *widgets){
|
void yon_layout_build(layouts_window *window){
|
||||||
|
gtk_tree_store_clear(window->list);
|
||||||
|
GtkTreeIter parent;
|
||||||
|
GtkTreeIter iter;
|
||||||
int size;
|
int size;
|
||||||
config_str parsed = NULL;
|
config_str layouts = yon_config_load(layouts_command,&size);
|
||||||
parsed = yon_config_load(yon_debug_output("%s\n",get_layouts_command),&size);
|
|
||||||
GHashTable *table = g_hash_table_new(g_str_hash,g_str_equal);
|
|
||||||
for (int i=0;i<size;i++){
|
for (int i=0;i<size;i++){
|
||||||
yon_char_remove_last_symbol(parsed[i],'\n');
|
yon_char_remove_last_symbol(layouts[i],'\n');
|
||||||
int layout_size;
|
int parsed_size;
|
||||||
config_str layout = yon_char_parse(parsed[i],&layout_size,"|");
|
config_str parsed = yon_char_parse(layouts[i],&parsed_size,"|");
|
||||||
if (layout_size){
|
gtk_tree_store_append(window->list,&parent,NULL);
|
||||||
|
gtk_tree_store_set(window->list,&parent,0,parsed[0],2,_(parsed[1]),-1);
|
||||||
if (g_hash_table_contains(table,layout[0])){
|
int variants_size;
|
||||||
GHashTable *child_table = g_hash_table_lookup(table,layout[0]);
|
config_str variants = yon_layout_get_children(parsed[0],&variants_size);
|
||||||
g_hash_table_insert(child_table,yon_char_new(layout[1]),yon_char_new(layout[2]));
|
yon_char_parsed_free(parsed,parsed_size);
|
||||||
}else {
|
for (int k=0;k<variants_size;k++){
|
||||||
GHashTable *child_table = g_hash_table_new(g_str_hash,g_str_equal);
|
parsed = yon_char_parse(variants[k],&parsed_size,"|");
|
||||||
g_hash_table_insert(table,yon_char_new(layout[0]),child_table);
|
gtk_tree_store_append(window->list,&iter,&parent);
|
||||||
g_hash_table_insert(child_table,yon_char_new(layout[1]),yon_char_new(layout[2]));
|
gtk_tree_store_set(window->list,&iter,0,parsed[0],1,parsed[1],2,_(parsed[2]),-1);
|
||||||
}
|
yon_char_parsed_free(parsed,parsed_size);
|
||||||
}
|
}
|
||||||
|
yon_char_parsed_free(variants,variants_size);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
yon_char_parsed_free(layouts,size);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
g_hash_table_foreach(table,(GHFunc)yon_layout_build,widgets);
|
void on_layout_move_up(GtkWidget *, main_window *widgets){
|
||||||
yon_char_parsed_free(parsed,size);
|
GtkTreeModel *model;
|
||||||
config_str models = yon_config_load(yon_debug_output("%s\n",get_models_command),&size);
|
GtkTreeIter iter,*previter;
|
||||||
for (int i=0;i<size;i+=2){
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->KeyboardLayoutTree)),&model,&iter)){
|
||||||
models[i] = yon_char_divide_search(models[i],"\n",-1);
|
previter = gtk_tree_iter_copy(&iter);
|
||||||
models[i+1] = yon_char_divide_search(models[i+1],"\n",-1);
|
if (!gtk_tree_model_iter_previous(model,previter)) return;
|
||||||
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo),models[i],_(models[i+1]));
|
char *a, *b;
|
||||||
|
gtk_tree_model_get(model,&iter,0,&a,-1);
|
||||||
|
gtk_tree_model_get(model,previter,0,&b,-1);
|
||||||
|
char *layouts = config(xkblayout_parameter);
|
||||||
|
char *temp = yon_char_swap_element(layouts,a,b,",");
|
||||||
|
yon_config_register(xkblayout_parameter,xkblayout_parameter_command,temp);
|
||||||
|
free(temp);
|
||||||
|
gtk_list_store_swap(widgets->LayoutsList,&iter,previter);
|
||||||
|
gtk_tree_iter_free(previter);
|
||||||
}
|
}
|
||||||
if (size) yon_char_parsed_free(models,size);
|
}
|
||||||
|
|
||||||
char *keyboard = config(xkbmodel_parameter);
|
void on_layout_move_down(GtkWidget *, main_window *widgets){
|
||||||
char *option_parameter = config(xkboptions_parameter);
|
GtkTreeModel *model;
|
||||||
char *layouts = config(xkblayout_parameter);
|
GtkTreeIter iter,*nextiter;
|
||||||
char *variant = config(xkbvariant_parameter);
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->KeyboardLayoutTree)),&model,&iter)){
|
||||||
|
nextiter = gtk_tree_iter_copy(&iter);
|
||||||
|
if (!gtk_tree_model_iter_next(model,nextiter)) return;
|
||||||
|
char *a, *b;
|
||||||
|
gtk_tree_model_get(model,&iter,0,&a,-1);
|
||||||
|
gtk_tree_model_get(model,nextiter,0,&b,-1);
|
||||||
|
char *layouts = config(xkblayout_parameter);
|
||||||
|
char *temp = yon_char_swap_element(layouts,a,b,",");
|
||||||
|
yon_config_register(xkblayout_parameter,xkblayout_parameter_command,temp);
|
||||||
|
free(temp);
|
||||||
|
gtk_list_store_swap(widgets->LayoutsList,&iter,nextiter);
|
||||||
|
gtk_tree_iter_free(nextiter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!yon_char_is_empty(keyboard)){
|
void on_compose_switch(GtkWidget *,int status,main_window *widgets){
|
||||||
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo),keyboard);
|
switch(status){
|
||||||
} else {
|
case 0:{
|
||||||
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0);
|
yon_config_remove_element(xkboptions_parameter,"compose:rwin",",");
|
||||||
|
} break;
|
||||||
|
case 1:{
|
||||||
|
yon_config_append_element(xkboptions_parameter,"compose:rwin",",");
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
|
yon_keyboard_init(widgets);
|
||||||
|
}
|
||||||
|
|
||||||
if (!yon_char_is_empty(option_parameter)){
|
void on_scroll_lock_switch(GtkWidget *,int status,main_window *widgets){
|
||||||
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->LayoutBindingCombo),option_parameter);
|
switch(status){
|
||||||
} else{
|
case 0:{
|
||||||
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LayoutBindingCombo),0);
|
yon_config_remove_element(xkboptions_parameter,"grp_led:scroll",",");
|
||||||
|
} break;
|
||||||
|
case 1:{
|
||||||
|
yon_config_append_element(xkboptions_parameter,"grp_led:scroll",",");
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
|
yon_keyboard_init(widgets);
|
||||||
|
}
|
||||||
|
|
||||||
if (!yon_char_is_empty(layouts)){
|
void on_layout_default_sensitive_toggled(GtkWidget *, int status, main_window *widgets){
|
||||||
int parsed_size;
|
gtk_widget_set_sensitive(widgets->KeyboardLayoutTree,!status);
|
||||||
config_str parsed = yon_char_parse(layouts,&parsed_size,",");
|
gtk_widget_set_sensitive(widgets->KeyboardLayoutAddButton,!status);
|
||||||
|
if (status){
|
||||||
|
gtk_widget_set_sensitive(widgets->KeyboardLayoutRemoveButton,!status);
|
||||||
|
gtk_widget_set_sensitive(widgets->KeyboardLayoutMoveUpButton,!status);
|
||||||
|
gtk_widget_set_sensitive(widgets->KeyboardLayoutMoveDownButton,!status);
|
||||||
|
}else {
|
||||||
|
on_layout_selection_changed(GTK_TREE_VIEW(widgets->KeyboardLayoutTree),widgets);
|
||||||
|
|
||||||
GtkTreeIter iter, chiter;
|
}
|
||||||
GtkTreeModel *model = GTK_TREE_MODEL(widgets->LayoutList);
|
}
|
||||||
|
|
||||||
|
void on_layout_default_toggled(GtkWidget *, int status, main_window *widgets){
|
||||||
|
if (!status){
|
||||||
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->LayoutsList);
|
||||||
|
GtkTreeIter iter;
|
||||||
|
char *locales = NULL;
|
||||||
for_iter(model,&iter){
|
for_iter(model,&iter){
|
||||||
char *target;
|
char *target, *variant;
|
||||||
gtk_tree_model_get(model,&iter,0,&target,-1);
|
|
||||||
if (yon_char_parsed_check_exist(parsed,parsed_size,target)>-1){
|
|
||||||
gtk_tree_store_set(widgets->LayoutList,&iter,2,1,3,1,-1);
|
|
||||||
if (!strcmp(variant,target)){
|
|
||||||
gtk_tree_store_set(widgets->LayoutList,&iter,4,1,-1);
|
|
||||||
} else {
|
|
||||||
gtk_tree_store_set(widgets->LayoutList,&iter,4,0,-1);
|
|
||||||
|
|
||||||
}
|
gtk_tree_model_get(model,&iter,0,&target,1,&variant,-1);
|
||||||
for (int valid2 = gtk_tree_model_iter_children(model,&chiter,&iter);valid2;valid2 = gtk_tree_model_iter_next(model,&chiter)){
|
char *key = NULL;
|
||||||
gtk_tree_model_get(model,&chiter,0,&target,-1);
|
if (!yon_char_is_empty(variant)){
|
||||||
if (yon_char_parsed_check_exist(parsed,parsed_size,target)>-1){
|
key = yon_char_unite(target,"_",variant,NULL);
|
||||||
gtk_tree_store_set(widgets->LayoutList,&chiter,2,1,3,1,-1);
|
|
||||||
if (!strcmp(variant,target)){
|
|
||||||
gtk_tree_store_set(widgets->LayoutList,&chiter,4,1,-1);
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
gtk_tree_store_set(widgets->LayoutList,&chiter,3,0,4,0,-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
gtk_tree_store_set(widgets->LayoutList,&iter,3,0,4,0,-1);
|
key = yon_char_new(target);
|
||||||
}
|
}
|
||||||
|
char *temp = yon_char_append_element(locales?locales:"",key,",");
|
||||||
|
if (!yon_char_is_empty(locales)) free(locales);
|
||||||
|
locales = temp;
|
||||||
|
}
|
||||||
|
if (!yon_char_is_empty(locales)){
|
||||||
|
yon_config_register(xkblayout_parameter,xkblayout_parameter_command,locales);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_keyboard_layout_chosen(GtkCellRenderer *, gchar *path, main_window *widgets){
|
void on_layout_selection_changed(GtkTreeView *self,main_window *widgets){
|
||||||
GtkTreeIter iter, itar, itor, itur;
|
int status = gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(self)),NULL,NULL);
|
||||||
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->LayoutsFilter),&iter,path);
|
gtk_widget_set_sensitive(widgets->KeyboardLayoutMoveDownButton,status);
|
||||||
int status;
|
gtk_widget_set_sensitive(widgets->KeyboardLayoutMoveUpButton,status);
|
||||||
char *target;
|
gtk_widget_set_sensitive(widgets->KeyboardLayoutRemoveButton,status);
|
||||||
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter),&itur,&iter);
|
|
||||||
gtk_tree_model_get(GTK_TREE_MODEL(widgets->LayoutList),&itur,4,&status,1,&target,-1);
|
}
|
||||||
// g_signal_handlers_block_by_func(self,G_CALLBACK(on_keyboard_layout_chosen),widgets);
|
|
||||||
for_iter(GTK_TREE_MODEL(widgets->LayoutsFilter),&itar){
|
|
||||||
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter),&itor,&itar);
|
|
||||||
// gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(widgets->LayoutList),&itar,&itor);
|
|
||||||
gtk_tree_store_set(widgets->LayoutList,&itor,4,0,-1);
|
|
||||||
GtkTreeIter itor_child;
|
|
||||||
if (gtk_tree_model_iter_children(GTK_TREE_MODEL(widgets->LayoutList),&itor_child,&itor)){
|
|
||||||
for(int valid2=1;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->LayoutList),&itor_child)){
|
|
||||||
gtk_tree_store_set(widgets->LayoutList,&itor_child,4,0,-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
void on_num_lock_changed(GtkComboBox *self, main_window *){
|
||||||
|
switch (gtk_combo_box_get_active(self)){
|
||||||
|
case 0:
|
||||||
|
yon_config_remove_by_key(num_lock_boot_parameter);
|
||||||
|
break;
|
||||||
|
case 1: yon_config_register(num_lock_boot_parameter,num_lock_boot_parameter_command,"yes");
|
||||||
|
break;
|
||||||
|
case 2:yon_config_register(num_lock_boot_parameter,num_lock_boot_parameter_command,"no");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
gtk_tree_store_set(widgets->LayoutList,&itur,4,!status,-1);
|
}
|
||||||
// g_signal_handlers_unblock_by_func(self,G_CALLBACK(on_keyboard_layout_chosen),widgets);
|
|
||||||
if (!status){
|
void on_model_changed(GtkComboBoxText *self, main_window *widgets){
|
||||||
yon_config_register(xkbvariant_parameter,xkbvariant_parameter_command,target);
|
switch (gtk_combo_box_get_active(GTK_COMBO_BOX(self))){
|
||||||
|
case 0:
|
||||||
|
yon_config_remove_by_key(xkbmodel_parameter);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo));
|
||||||
|
yon_config_register(xkbmodel_parameter,xkbmodel_parameter_command,id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_options_save(GtkWidget *,main_window *widgets){
|
||||||
|
char *main_id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardLayoutChangingCombo));
|
||||||
|
int parameter_parsed_size;
|
||||||
|
config_str parameter_parsed = NULL;
|
||||||
|
yon_char_parsed_add_or_create_if_exists(parameter_parsed,¶meter_parsed_size,!yon_char_is_empty(main_id)?main_id:"");
|
||||||
|
char *final_parameter = yon_char_parsed_to_string_full(parameter_parsed,parameter_parsed_size,",");
|
||||||
|
yon_char_parsed_free(parameter_parsed,parameter_parsed_size);
|
||||||
|
if (!yon_char_is_empty(final_parameter)){
|
||||||
|
yon_config_register(xkboptions_parameter,xkboptions_parameter_command,final_parameter);
|
||||||
|
free(final_parameter);
|
||||||
} else {
|
} else {
|
||||||
yon_config_remove_by_key(xkbvariant_parameter);
|
yon_config_remove_by_key(xkboptions_parameter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -0,0 +1,243 @@
|
|||||||
|
#include "ubinstall-gtk.h"
|
||||||
|
|
||||||
|
void yon_language_update(main_window *widgets){
|
||||||
|
gtk_list_store_clear(widgets->LanguageList);
|
||||||
|
{
|
||||||
|
char *config_locale = config(locale_parameter);
|
||||||
|
char *config_languages = config(lang_parameter);
|
||||||
|
if (yon_char_is_empty(config_locale)||yon_config_check_ignore(locale_parameter)){
|
||||||
|
gtk_switch_set_active(GTK_SWITCH(widgets->LocaleDefaultSwitch),1);
|
||||||
|
} else {
|
||||||
|
gtk_switch_set_active(GTK_SWITCH(widgets->LocaleDefaultSwitch),0);
|
||||||
|
int parsed_param_size;
|
||||||
|
config_str parsed_param = yon_char_parse(config_locale,&parsed_param_size,",");
|
||||||
|
GtkTreeIter iter;
|
||||||
|
for (int i=0;i<parsed_param_size;i++){
|
||||||
|
char *cur_lang = g_hash_table_lookup(main_config.languages,parsed_param[i]);
|
||||||
|
if (!yon_char_is_empty(cur_lang)){
|
||||||
|
int parsed_size;
|
||||||
|
config_str parsed = yon_char_parse(cur_lang,&parsed_size,"|");
|
||||||
|
gtk_list_store_append(widgets->LanguageList,&iter);
|
||||||
|
gtk_list_store_set(widgets->LanguageList,&iter,1,parsed[1],2,parsed[2],3,parsed[0],-1);
|
||||||
|
if (!yon_char_is_empty(config_languages)){
|
||||||
|
if (!strcmp(config_languages,parsed[0])){
|
||||||
|
gtk_list_store_set(widgets->LanguageList,&iter,0,1,-1);
|
||||||
|
}
|
||||||
|
} else if (yon_char_is_empty(config_languages)&&!i){
|
||||||
|
gtk_list_store_set(widgets->LanguageList,&iter,0,1,-1);
|
||||||
|
}
|
||||||
|
yon_char_parsed_free(parsed,parsed_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void on_locale_toggle(GtkCellRenderer *, gchar *path,language_window *window){
|
||||||
|
GtkTreeIter iter;
|
||||||
|
GtkTreeModel *model = GTK_TREE_MODEL(window->LanguagesList);
|
||||||
|
gtk_tree_model_get_iter_from_string(model,&iter,path);
|
||||||
|
gboolean is_active;
|
||||||
|
char *target;
|
||||||
|
gtk_tree_model_get(model,&iter,0,&is_active,1,&target,-1);
|
||||||
|
gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,!is_active,-1);
|
||||||
|
|
||||||
|
char *locales = (char*)gtk_entry_get_text(GTK_ENTRY(window->ManualEntry));
|
||||||
|
if (!is_active){
|
||||||
|
if (!yon_char_check_element(locales,target,",")){
|
||||||
|
char *temp = yon_char_append_element(locales,target,",");
|
||||||
|
gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),temp);
|
||||||
|
free(temp);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
char *temp = yon_char_remove_element(locales,target,",");
|
||||||
|
gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),temp);
|
||||||
|
if (!yon_char_is_empty(temp)) free(temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_locale_accept(GtkWidget *self, language_window *window){
|
||||||
|
main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets");
|
||||||
|
|
||||||
|
char *final = (char*)gtk_entry_get_text(GTK_ENTRY(window->ManualEntry));
|
||||||
|
if (yon_char_is_empty(final)) {
|
||||||
|
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
char *locale_str = config(locale_parameter);
|
||||||
|
GtkTreeIter iter,itar;
|
||||||
|
for_iter (GTK_TREE_MODEL(window->LanguagesList),&iter){
|
||||||
|
char *locale,*lang,*territory;
|
||||||
|
int status;
|
||||||
|
gtk_tree_model_get(GTK_TREE_MODEL(window->LanguagesList),&iter,0,&status,1,&locale,2,&lang,3,&territory,-1);
|
||||||
|
if (status){
|
||||||
|
gtk_list_store_append(widgets->LanguageList,&itar);
|
||||||
|
gtk_list_store_set(widgets->LanguageList,&itar,1,lang,2,territory,3,locale,-1);
|
||||||
|
if (!yon_char_is_empty(locale_str)&&!strcmp(locale_str,locale)){
|
||||||
|
gtk_list_store_set(widgets->LanguageList,&itar,0,1,-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (yon_char_is_empty(locale_str)){
|
||||||
|
if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LanguageList),&iter)){
|
||||||
|
gtk_list_store_set(widgets->LanguageList,&iter,0,1,-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
on_subwindow_close(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean yon_locale_window_set_locales(struct locales_struct *data){
|
||||||
|
GtkTreeIter iter;
|
||||||
|
gtk_list_store_append(GTK_LIST_STORE(data->list),&iter);
|
||||||
|
gtk_list_store_set(GTK_LIST_STORE(data->list),&iter,1,data->locale,2,data->lang,3,data->territory,0,data->chosen,-1);
|
||||||
|
if(!yon_char_is_empty(data->lang)) free(data->lang);
|
||||||
|
if(!yon_char_is_empty(data->locale)) free(data->locale);
|
||||||
|
if(!yon_char_is_empty(data->territory)) free(data->territory);
|
||||||
|
if(!yon_char_is_empty(data->lang)) free(data);
|
||||||
|
return G_SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean yon_locale_window_unlock(GtkWidget *spinner){
|
||||||
|
gtk_widget_hide(spinner);
|
||||||
|
return G_SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *yon_locales_load_func(language_window *window){
|
||||||
|
char *config_value = config(locale_parameter);
|
||||||
|
int config_parsed_size;
|
||||||
|
config_str config_parsed = NULL;
|
||||||
|
if (config_value){
|
||||||
|
gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),config_value);
|
||||||
|
config_parsed = yon_char_parse(config_value,&config_parsed_size,",");
|
||||||
|
}
|
||||||
|
|
||||||
|
int size;
|
||||||
|
config_str languages = yon_config_load(languages_command,&size);
|
||||||
|
for (int i=0;i<size;i++){
|
||||||
|
struct locales_struct *data_struct = malloc(sizeof(struct locales_struct));
|
||||||
|
data_struct->list=window->LanguagesList;
|
||||||
|
yon_char_remove_last_symbol(languages[i],'\n');
|
||||||
|
int parsed_size;
|
||||||
|
config_str parsed = yon_char_parse(languages[i],&parsed_size,"|");
|
||||||
|
data_struct->locale = yon_char_new(parsed[0]);
|
||||||
|
data_struct->lang = yon_char_new(parsed[1]);
|
||||||
|
data_struct->territory = yon_char_new(parsed[2]);
|
||||||
|
|
||||||
|
if (config_parsed_size&&yon_char_parsed_check_exist(config_parsed,config_parsed_size,parsed[0])>-1){
|
||||||
|
data_struct->chosen=1;
|
||||||
|
} else {
|
||||||
|
data_struct->chosen=0;
|
||||||
|
}
|
||||||
|
g_idle_add((GSourceFunc)yon_locale_window_set_locales,data_struct);
|
||||||
|
yon_char_parsed_free(parsed,parsed_size);
|
||||||
|
}
|
||||||
|
g_idle_add((GSourceFunc)yon_locale_window_unlock,window->LoadingSpinner);
|
||||||
|
yon_char_parsed_free(config_parsed,config_parsed_size);
|
||||||
|
g_thread_exit(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
language_window *yon_language_window_new(){
|
||||||
|
language_window *window = malloc(sizeof(language_window));
|
||||||
|
GtkBuilder *builder = gtk_builder_new_from_resource(glade_locales_path);
|
||||||
|
window->Window = yon_gtk_builder_get_widget(builder,"Window");
|
||||||
|
window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
|
||||||
|
window->LanguagesTree = yon_gtk_builder_get_widget(builder,"LanguagesTree");
|
||||||
|
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
|
||||||
|
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
|
||||||
|
window->ManualEntry = yon_gtk_builder_get_widget(builder,"ManualEntry");
|
||||||
|
window->LoadingOverlay = yon_gtk_builder_get_widget(builder,"LoadingOverlay");
|
||||||
|
window->LoadingSpinner = yon_gtk_builder_get_widget(builder,"LoadingSpinner");
|
||||||
|
window->ToggleCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ToggleCell"));
|
||||||
|
window->LanguagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LanguagesList"));
|
||||||
|
|
||||||
|
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_locale_accept),window);
|
||||||
|
g_signal_connect(G_OBJECT(window->ToggleCell),"toggled",G_CALLBACK(on_locale_toggle),window);
|
||||||
|
yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(window->LanguagesTree));
|
||||||
|
|
||||||
|
gtk_overlay_add_overlay(GTK_OVERLAY(window->LoadingOverlay),window->LoadingSpinner);
|
||||||
|
g_thread_new("locales-thread",(GThreadFunc)yon_locales_load_func,window);
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_language_open(GtkWidget *, main_window *widgets){
|
||||||
|
language_window *window = yon_language_window_new();
|
||||||
|
|
||||||
|
g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
|
||||||
|
|
||||||
|
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->MainWindow),ADD_LANGUAGE_TITLE_LABEL,icon_path,"LocalesWindow");
|
||||||
|
|
||||||
|
gtk_widget_show(window->Window);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_language_remove(GtkWidget *, main_window *widgets){
|
||||||
|
GtkTreeIter iter;
|
||||||
|
GtkTreeModel *model;
|
||||||
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LocaleTree)),&model,&iter)){
|
||||||
|
gtk_list_store_remove(widgets->LanguageList,&iter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void on_language_default_toggled(GtkWidget *, int status, main_window *widgets){
|
||||||
|
gtk_widget_set_sensitive(widgets->LocaleTree,!status);
|
||||||
|
gtk_widget_set_sensitive(widgets->LocaleAddButton,!status);
|
||||||
|
GtkTreeModel *model;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
if (!status&>k_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LocaleTree)),&model,&iter)){
|
||||||
|
gtk_widget_set_sensitive(widgets->LocaleRemoveButton,1);
|
||||||
|
} else {
|
||||||
|
gtk_widget_set_sensitive(widgets->LocaleRemoveButton,0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_locale_toggled(GtkCellRenderer *, gchar *path, main_window *widgets){
|
||||||
|
GtkTreeIter fiter;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->LanguageList);
|
||||||
|
gtk_tree_model_get_iter_from_string(model,&fiter,path);
|
||||||
|
for_iter(model,&iter){
|
||||||
|
gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,0,-1);
|
||||||
|
|
||||||
|
}
|
||||||
|
char *target;
|
||||||
|
gtk_tree_model_get(model,&fiter,3,&target,-1);
|
||||||
|
gtk_list_store_set(GTK_LIST_STORE(model),&fiter,0,1,-1);
|
||||||
|
// yon_config_register(lang_parameter,lang_parameter_command,target);
|
||||||
|
}
|
||||||
|
|
||||||
|
int yon_language_save(main_window *widgets){
|
||||||
|
int status = gtk_switch_get_active(GTK_SWITCH(widgets->LocaleDefaultSwitch));
|
||||||
|
if (!status){
|
||||||
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->LanguageList);
|
||||||
|
GtkTreeIter iter;
|
||||||
|
char *locales = NULL;
|
||||||
|
for_iter(model,&iter){
|
||||||
|
int status;
|
||||||
|
char *target;
|
||||||
|
|
||||||
|
gtk_tree_model_get(model,&iter,0,&status,3,&target,-1);
|
||||||
|
char *temp = yon_char_append_element(locales?locales:"",target,",");
|
||||||
|
if (!yon_char_is_empty(locales)) free(locales);
|
||||||
|
locales = temp;
|
||||||
|
if (status){
|
||||||
|
yon_config_register(lang_parameter,lang_parameter_command,target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!yon_char_is_empty(locales)){
|
||||||
|
yon_config_register(locale_parameter,locale_parameter_command,locales);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
yon_config_remove_by_key(lang_parameter);
|
||||||
|
yon_config_remove_by_key(locale_parameter);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void yon_language_init(main_window *widgets){
|
||||||
|
yon_language_update(widgets);
|
||||||
|
}
|
||||||
@ -0,0 +1,123 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.38.2 -->
|
||||||
|
<interface domain="ubl-settings-keyboard">
|
||||||
|
<requires lib="gtk+" version="3.24"/>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.accept-symbolic</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkWindow" id="Window">
|
||||||
|
<property name="width-request">450</property>
|
||||||
|
<property name="height-request">550</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="icon-name">com.ublinux.ubl-settings-keyboard</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkScrolledWindow">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">True</property>
|
||||||
|
<property name="shadow-type">in</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeView" id="LayoutsTree">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">True</property>
|
||||||
|
<property name="headers-visible">False</property>
|
||||||
|
<property name="search-column">1</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn">
|
||||||
|
<property name="title" translatable="yes">column</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererToggle" id="ChosenCell"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="active">3</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn">
|
||||||
|
<property name="title" translatable="yes">column</property>
|
||||||
|
<property name="sort-column-id">0</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">2</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child type="titlebar">
|
||||||
|
<object class="GtkHeaderBar" id="headerBar">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<child type="title">
|
||||||
|
<object class="GtkLabel" id="headerTopic">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="margin-left">5</property>
|
||||||
|
<property name="margin-right">5</property>
|
||||||
|
<property name="margin-start">5</property>
|
||||||
|
<property name="margin-end">5</property>
|
||||||
|
<property name="margin-bottom">2</property>
|
||||||
|
<property name="label" translatable="yes">Keyboard</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="weight" value="bold"/>
|
||||||
|
</attributes>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImage">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="margin-left">5</property>
|
||||||
|
<property name="margin-right">5</property>
|
||||||
|
<property name="margin-start">5</property>
|
||||||
|
<property name="margin-end">5</property>
|
||||||
|
<property name="margin-top">6</property>
|
||||||
|
<property name="margin-bottom">6</property>
|
||||||
|
<property name="pixel-size">32</property>
|
||||||
|
<property name="icon-name">com.ublinux.ubl-settings-keyboard</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="CancelButton">
|
||||||
|
<property name="label" translatable="yes">Cancel</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">True</property>
|
||||||
|
<property name="receives-default">True</property>
|
||||||
|
<property name="image">image2</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="AcceptButton">
|
||||||
|
<property name="label" translatable="yes">Accept</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">True</property>
|
||||||
|
<property name="receives-default">True</property>
|
||||||
|
<property name="image">image1</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="pack-type">end</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<style>
|
||||||
|
<class name="toolbar"/>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
||||||
@ -0,0 +1,238 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.40.0 -->
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.24"/>
|
||||||
|
<object class="GtkListStore" id="LanguagesList">
|
||||||
|
<columns>
|
||||||
|
<!-- column-name Chosen -->
|
||||||
|
<column type="gboolean"/>
|
||||||
|
<!-- column-name Code -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name Name -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name Description -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
</columns>
|
||||||
|
</object>
|
||||||
|
<object class="GtkSpinner" id="LoadingSpinner">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="active">True</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image8">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image9">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.accept-symbolic</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkWindow" id="Window">
|
||||||
|
<property name="width-request">500</property>
|
||||||
|
<property name="height-request">550</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="modal">True</property>
|
||||||
|
<property name="icon-name">com.ublinux.ubl-settings-system</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="margin-bottom">5</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="spacing">5</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="StatusBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkOverlay" id="LoadingOverlay">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkScrolledWindow">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">True</property>
|
||||||
|
<property name="margin-start">5</property>
|
||||||
|
<property name="margin-end">5</property>
|
||||||
|
<property name="hscrollbar-policy">never</property>
|
||||||
|
<property name="shadow-type">in</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeView" id="LanguagesTree">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">True</property>
|
||||||
|
<property name="model">LanguagesList</property>
|
||||||
|
<property name="search-column">1</property>
|
||||||
|
<property name="enable-grid-lines">both</property>
|
||||||
|
<property name="activate-on-single-click">True</property>
|
||||||
|
<child internal-child="selection">
|
||||||
|
<object class="GtkTreeSelection"/>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn">
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererToggle" id="ToggleCell"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="active">0</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn">
|
||||||
|
<property name="title" translatable="yes">Locale</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText">
|
||||||
|
<property name="wrap-mode">word</property>
|
||||||
|
<property name="wrap-width">150</property>
|
||||||
|
</object>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">1</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn">
|
||||||
|
<property name="sizing">autosize</property>
|
||||||
|
<property name="min-width">35</property>
|
||||||
|
<property name="title" translatable="yes">Language</property>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText">
|
||||||
|
<property name="wrap-mode">word</property>
|
||||||
|
<property name="wrap-width">100</property>
|
||||||
|
</object>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">2</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn">
|
||||||
|
<property name="sizing">autosize</property>
|
||||||
|
<property name="title" translatable="yes">Territory</property>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText">
|
||||||
|
<property name="wrap-mode">word</property>
|
||||||
|
<property name="wrap-width">125</property>
|
||||||
|
</object>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">3</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="index">-1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="margin-start">5</property>
|
||||||
|
<property name="margin-end">5</property>
|
||||||
|
<property name="spacing">5</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Manual input:</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkEntry" id="ManualEntry">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child type="titlebar">
|
||||||
|
<object class="GtkHeaderBar" id="SettingsBar">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<child type="title">
|
||||||
|
<object class="GtkLabel" id="TitleLabel">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="label" translatable="yes">System configuration</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="weight" value="bold"/>
|
||||||
|
</attributes>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="CancelButton">
|
||||||
|
<property name="label" translatable="yes">Cancel</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">True</property>
|
||||||
|
<property name="receives-default">True</property>
|
||||||
|
<property name="image">image8</property>
|
||||||
|
<style>
|
||||||
|
<class name="button"/>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="AcceptButton">
|
||||||
|
<property name="label" translatable="yes">Apply</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">True</property>
|
||||||
|
<property name="receives-default">True</property>
|
||||||
|
<property name="image">image9</property>
|
||||||
|
<style>
|
||||||
|
<class name="button"/>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="pack-type">end</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue