You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
5.4 KiB
108 lines
5.4 KiB
#include "ubl-settings-keyboard.h"
|
|
|
|
void on_keymaps_accept(GtkWidget *, layouts_window *window){
|
|
main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets");
|
|
GtkWidget *output_widget = g_object_get_data(G_OBJECT(window->Window),"output");
|
|
if (gtk_switch_get_active(GTK_SWITCH(window->OptionsFilterCombo))){
|
|
gtk_entry_set_text(GTK_ENTRY(output_widget),"");
|
|
yon_config_remove_by_key(console_keymap_parameter);
|
|
on_subwindow_close(window->Window);
|
|
return;
|
|
}
|
|
char *target = (char*)gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry));
|
|
if (yon_char_is_empty(target)){
|
|
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
|
|
return;
|
|
}
|
|
if (output_widget == widgets->TTYLayoutEntry){
|
|
gtk_entry_set_text(GTK_ENTRY(output_widget),target);
|
|
yon_config_register(console_keymap_parameter,console_keymap_parameter_command,target);
|
|
|
|
} else {
|
|
gtk_entry_set_text(GTK_ENTRY(output_widget),target);
|
|
yon_config_register(console_keymap_toggle_parameter,console_keymap_parameter_command,target);
|
|
|
|
}
|
|
on_subwindow_close(window->Window);
|
|
}
|
|
|
|
void on_keymaps_selection_changed(GtkWidget *,layouts_window *window){
|
|
GtkTreeModel *model;
|
|
GtkTreeIter iter;
|
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model, &iter)){
|
|
char *target;
|
|
gtk_tree_model_get(model,&iter,0,&target,-1);
|
|
gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),target);
|
|
} else {
|
|
gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),"");
|
|
}
|
|
}
|
|
|
|
layouts_window *yon_keymaps_window_new(){
|
|
GtkBuilder *builder = gtk_builder_new_from_resource(glade_keymaps_path);
|
|
layouts_window *window = malloc(sizeof(layouts_window));
|
|
memset(window,0,sizeof(layouts_window));
|
|
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->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
|
|
window->MainTree = yon_gtk_builder_get_widget(builder,"KeymapTree");
|
|
window->parameters = yon_char_new(config(keyboard_layout_parameter));
|
|
window->OptionsEntry = yon_gtk_builder_get_widget(builder,"ManualEntry");
|
|
window->OptionsFilterCombo = yon_gtk_builder_get_widget(builder,"DefaultSwitch");
|
|
window->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KeymapList"));
|
|
|
|
g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->MainTree);
|
|
g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->OptionsEntry);
|
|
g_signal_connect(G_OBJECT(window->MainTree),"cursor-changed",G_CALLBACK(on_keymaps_selection_changed),window);
|
|
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
|
|
return window;
|
|
}
|
|
|
|
void yon_keymaps_open(GtkWidget *self,main_window *widgets){
|
|
layouts_window *window = yon_keymaps_window_new();
|
|
if (self == widgets->TTYLayoutButton){
|
|
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEYBOARD_LAYOUT_LABEL,icon_path,"font-window");
|
|
g_object_set_data(G_OBJECT(window->Window),"output",widgets->TTYLayoutEntry);
|
|
} else {
|
|
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEYMAP_TITLE_LABEL,icon_path,"font-window");
|
|
g_object_set_data(G_OBJECT(window->Window),"output",widgets->TTYSecondLayoutEntry);
|
|
}
|
|
g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
|
|
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_keymaps_accept),window);
|
|
|
|
int keymap_size;
|
|
int size;
|
|
config_str keymaps = yon_resource_open_file(keymap_list_path, &keymap_size);
|
|
for (int i=0;i<keymap_size;i++){
|
|
yon_char_remove_last_symbol(keymaps[i],'\n');
|
|
}
|
|
GtkTreeIter iter;
|
|
config_str parameters = yon_config_load(tty_keymap_command,&size);
|
|
char *config_value = NULL;
|
|
if (self == widgets->TTYLayoutButton){
|
|
config_value = config(console_keymap_parameter);
|
|
} else {
|
|
config_value = config(console_keymap_toggle_parameter);
|
|
}
|
|
if (yon_char_is_empty(config_value)){
|
|
gtk_switch_set_active(GTK_SWITCH(window->OptionsFilterCombo),0);
|
|
}
|
|
for (int i=0;i<size;i++){
|
|
yon_char_remove_last_symbol(parameters[i],'\n');
|
|
char *found = yon_char_parsed_check_exist_begins_with(keymaps,keymap_size,parameters[i]);
|
|
if (found){
|
|
int parsed_size;
|
|
config_str parsed = yon_char_parse(found,&parsed_size,";");
|
|
gtk_list_store_append(GTK_LIST_STORE(window->OptionsList),&iter);
|
|
gtk_list_store_set(GTK_LIST_STORE(window->OptionsList),&iter,0,parsed[0],1,parsed[1],2,parsed[2],-1);
|
|
if (!yon_char_is_empty(config_value)&&!strcmp(parsed[0],config_value)){
|
|
gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&iter);
|
|
gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),config_value);
|
|
}
|
|
}
|
|
}
|
|
if (yon_char_is_empty(config_value)){
|
|
gtk_switch_set_active(GTK_SWITCH(window->OptionsFilterCombo),1);
|
|
}
|
|
} |