Saving test version

pull/1/head
parent 82e1ddbf00
commit 29ea6d8dbd

@ -102,11 +102,103 @@ void on_about(){
//functions
void yon_load_proceed(YON_CONFIG_TYPE type){
if (yon_config_load_register(type,"keyboard","XkbModel","keyboard","XkbLayout","keyboard","KEYBOARD","keyboard","KEYTABLE","keyboard","GRP_TOGGLE","keyboard","XkbOptions",NULL))
yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
else
yon_ubl_status_box_render(LOAD_FAILED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
void yon_load_proceed(YON_CONFIG_TYPE type, main_window *widgets){
if (yon_config_load_register(type,"keyboard","XkbModel","keyboard","XkbLayout","keyboard","KEYBOARD","keyboard","XkbOptions","config","NUMLOCK",NULL)){
GtkTreeIter iter;
char *name = yon_config_get_by_key("XkbModel");
char *id;
if (name) {
int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->modelsList),&iter);
for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->modelsList),&iter)){
gtk_tree_model_get(GTK_TREE_MODEL(widgets->modelsList),&iter,0,&id,-1);
if (!strcmp(name,id)){
gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widgets->ModelCombo),&iter);
break;
}
}
} else gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ModelCombo),0);
free(name);
name = yon_config_get_by_key("XkbOptions");
if (name) {
char *id, *rname;
gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),name);
int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.options_list),&iter);
for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.options_list),&iter)){
gtk_tree_model_get(GTK_TREE_MODEL(main_config.options_list),&iter,0,&id,1,&rname,-1);
if (!strcmp(id,name)) gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),rname);
}
}
free(name);
name = yon_config_get_by_key("NUMLOCK");
if (name) {
if (!strcmp(name,"yes")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),1);
else if (!strcmp(name,"no")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),2);
}
else gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),0);
free(name);
if (main_config.layouts_list){
int size=0;
name = yon_config_get_by_key("XkbLayout");
config_str layouts = yon_char_parse(name,&size,",");
GtkTreeIter iter;
char *rid,*rname;
gtk_list_store_clear(widgets->layoutsList);
for (int i=0;i<size;i++){
int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.layouts_list),&iter);
for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.layouts_list),&iter)){
gtk_tree_model_get(GTK_TREE_MODEL(main_config.layouts_list),&iter,0,&rid,1,&rname,-1);
if (!strcmp(layouts[i],rid)){
gtk_list_store_append(widgets->layoutsList,&iter);
gtk_list_store_set(widgets->layoutsList,&iter,0,rname,1,rid,2,0,-1);
}
}
}
}
}
yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
}
void on_config_global_load(GtkWidget *self, main_window *widgets){
yon_load_proceed(YON_CONFIG_GLOBAL,widgets);
}
void on_config_local_load(GtkWidget *self, main_window *widgets){
yon_load_proceed(YON_CONFIG_LOCAL,widgets);
}
void yon_save_proceed(char *path,main_window *widgets) {
GtkTreeIter iter;
char *final_string="";
char *id,*name;
gboolean is_edited;
gboolean generic;
int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->layoutsList),&iter);
if (!valid) yon_config_remove_by_key(keyboard_layout_parameter);
else {
for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->layoutsList),&iter)){
gtk_tree_model_get(GTK_TREE_MODEL(widgets->layoutsList),&iter,0,&name,1,&id,2,!is_edited ? &is_edited : &generic ,-1);
final_string = yon_char_unite(strcmp(final_string,"") ? yon_char_append(final_string,",") : "" ,id,NULL);
}
if (is_edited)
if (yon_config_get_by_key(keyboard_layout_parameter))
yon_config_set(keyboard_layout_parameter,final_string);
else yon_config_register(keyboard_layout_parameter,"keyboard",final_string);
}
yon_config_save_registered(path);
}
void on_config_global_local_save(GtkWidget *self,main_window *widgets){
yon_save_proceed(NULL,widgets);
}
void on_config_global_save(GtkWidget *self,main_window *widgets){
yon_save_proceed("global",widgets);
}
void on_config_local_save(GtkWidget *self,main_window *widgets){
yon_save_proceed("system",widgets);
}
@ -151,10 +243,14 @@ void on_options_accept(GtkWidget *self, dictionary *dict){
layouts_window *window = yon_dictionary_get_data(dict->first->next,layouts_window*);
GtkTreeModel *model = GTK_TREE_MODEL(window->list);
GtkTreeIter iter;
char *name;
char *name, *id;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model,&iter)){
gtk_tree_model_get(model,&iter,0,&name,-1);
gtk_tree_model_get(model,&iter,0,&id,1,&name,-1);
gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),name);
if (yon_config_get_by_key(options_parameter))
yon_config_set(options_parameter,id);
else yon_config_register(options_parameter,"keyboard",id);
}
on_close_subwindow(self);
}
@ -177,7 +273,6 @@ void on_options_open(GtkWidget *self, main_window *widgets){
config_str option = yon_char_parse(rtn[i],&option_size,";");
gtk_list_store_append(window->list,&iter);
gtk_list_store_set(window->list,&iter,0,option[0],1,option[1],-1);
}
dictionary *dict = NULL;
yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets);
@ -200,7 +295,7 @@ void on_layouts_accept(GtkWidget *self, dictionary *dict){
gtk_tree_model_get_iter(model,&lwiter,pth);
gtk_list_store_append(widgets->layoutsList,&iter);
gtk_tree_model_get(model,&lwiter,0,&name,1,&id,-1);
gtk_list_store_set(widgets->layoutsList,&iter,1,name,0,id,-1);
gtk_list_store_set(widgets->layoutsList,&iter,1,name,0,id,2,1,-1);
}
on_close_subwindow(self);
}
@ -212,7 +307,8 @@ void on_layouts_add(GtkWidget *self, main_window *widgets){
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,"LayoutsTree");
window->list = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1"));
window->list = main_config.layouts_list;
gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree), GTK_TREE_MODEL(window->list));
int size,laysize;
GtkTreeIter iter;
config_str rtn = yon_config_load(get_layouts_command,&size);
@ -353,7 +449,25 @@ main_window *setup_window(){
models[i] = yon_char_divide_search(models[i],"\n",-1);
models[i+1] = yon_char_divide_search(models[i+1],"\n",-1);
gtk_list_store_append(widgets->modelsList,&iter);
gtk_list_store_set(widgets->modelsList,&iter,0,models[i],1,models[i+1],-1);
gtk_list_store_set(widgets->modelsList,&iter,1,models[i],0,models[i+1],-1);
}
main_config.layouts_list = gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_STRING);
int laysize;
config_str rtn = yon_config_load(get_layouts_command,&size);
for (int i=0; i<size; i++){
rtn[i] = yon_char_divide_search(rtn[i],"\n",-1);
config_str layout = yon_char_parse(rtn[i],&laysize,";");
gtk_list_store_append(main_config.layouts_list,&iter);
gtk_list_store_set(main_config.layouts_list,&iter,0,layout[0],1,layout[1],-1);
}
main_config.options_list = gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_STRING);
rtn = yon_config_load(get_options_command,&size);
for (int i=0; i<size;i++){
int option_size;
rtn[i] = yon_char_divide_search(rtn[i],"\n",-1);
config_str option = yon_char_parse(rtn[i],&option_size,";");
gtk_list_store_append(main_config.options_list,&iter);
gtk_list_store_set(main_config.options_list,&iter,0,option[0],1,option[1],-1);
}
/* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */
@ -369,7 +483,14 @@ main_window *setup_window(){
g_signal_connect(G_OBJECT(widgets->MoveDownButton),"clicked",G_CALLBACK(on_move_down),widgets);
g_signal_connect(G_OBJECT(widgets->MoveUpButton),"clicked",G_CALLBACK(on_move_up),widgets);
g_signal_connect(G_OBJECT(widgets->OptionsButton),"clicked",G_CALLBACK(on_options_open),widgets);
g_signal_connect(G_OBJECT(widgets->NumLockCombo),"changed",G_CALLBACK(on_num_lock_changed),NULL);
g_signal_connect(G_OBJECT(widgets->NumLockCombo),"changed",G_CALLBACK(on_num_lock_changed),widgets);
g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_global_local_save),widgets);
g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),widgets);
g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),widgets);
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets);
gtk_widget_show(widgets->Window);
@ -464,6 +585,7 @@ int main(int argc, char *argv[]){
yon_ubl_setup_sockets(widgets->PlugBox,widgets->LeftBox,widgets->RightBox,main_config.socket_id,main_config.load_socket_id,main_config.save_socket_id);
yon_window_config_setup(GTK_WINDOW(widgets->Window));
yon_window_config_load(config_path);
on_config_local_load(NULL,widgets);
GtkCssProvider *css=gtk_css_provider_new();
gtk_css_provider_load_from_resource(css,CssPath);
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),

@ -25,12 +25,10 @@
#define CssPath "/com/ublinux/css/ubl-settings-keyboard.css"
#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
#define hostname_parameter "HOSTNAME"
#define model_parameter "XkbModel"
#define keyboard_layout_parameter "XkbLayout"
#define console_font_parameter "CONSOLE_FONT"
#define options_parameter "XkbOptions"
#define num_lock_boot_parameter "NUMLOCK"
#define language_parameter "LANG"
#define get_options_command "grep \"grp:.*toggle\" /usr/share/X11/xkb/rules/base.lst|sed -e 's/^ *//g' -e 's/\t//g' -e 's/toggle */toggle;/g'"
#define get_models_command "sed '/<\\/modelList>/q' /usr/share/X11/xkb/rules/base.xml | grep -E '^ {8,8}<name>|^ {8,8}<description>'|sed -e 's/ *<name>//g' -e 's,</name>,,g' -e 's/ *<description>//g' -e 's,</description>,,g'"
@ -58,6 +56,9 @@ typedef struct {
int lock_save_local;
int lock_save_global;
int lock_load_global;
char *options;
GtkListStore *layouts_list;
GtkListStore *options_list;
} config;
typedef struct {

@ -646,10 +646,10 @@ char **yon_char_parse(char *parameters, int *size, char *divider){
char *paramline=yon_char_new(parameters);
char *param;
while ((param=yon_char_divide_search(paramline,divider,1))){
if (strcmp(param,paramline)==0) break;
string=realloc(string,sizeof(char*)*i);
string[i-1]=yon_char_new(param);
i++;
if (strcmp(param,paramline)==0) break;
}
string=realloc(string,sizeof(char*)*i);
string[i-1]=yon_char_new(paramline);
@ -1243,7 +1243,7 @@ config_str yon_config_load(char *command, int *str_len){
* Выполняет команду [command], добавляя в конец все записи конфига в таком виде:
* [ПАРАМЕТР1]="[значения1]" [ПАРАМЕТР2]="[значения2]"
*/
int yon_config_save_registered(char *path, char *section){
int yon_config_save_registered(char *path){
check_config{
dictionary *dct;
dictionary *sections_add=NULL;
@ -1252,8 +1252,8 @@ int yon_config_save_registered(char *path, char *section){
if (dct->data&&strcmp(yon_dictionary_get_data(dct,char*),"")!=0){
if (((yon_config_parameter*)dct)->flag1==1){
((yon_config_parameter*)dct)->flag1=0;
if (sections_add&&yon_dictionary_get(&sections_add,((yon_config_parameter*)dct)->section)) sections_add->data=(void*)yon_char_unite(yon_dictionary_get_data(sections_add,char*)," ",dct->key,"=",yon_dictionary_get_data(dct,char*),NULL);
else yon_dictionary_add_or_create_if_exists_with_data(sections_add,((yon_config_parameter*)dct)->section,yon_char_unite (ubconfig_save_command,path ? yon_char_append(" --target ",path):"", " set ", ((yon_config_parameter*)dct)->section, " ",dct->key,"=",yon_dictionary_get_data(dct,char*),NULL));
if (sections_add&&yon_dictionary_get(&sections_add,((yon_config_parameter*)dct)->section)) sections_add->data=(void*)yon_char_unite(yon_dictionary_get_data(sections_add,char*)," ",dct->key,"=\"",yon_dictionary_get_data(dct,char*),"\"",NULL);
else yon_dictionary_add_or_create_if_exists_with_data(sections_add,((yon_config_parameter*)dct)->section,yon_char_unite (ubconfig_save_command,path ? yon_char_append(" --target ",path):"", " set ", ((yon_config_parameter*)dct)->section," ", dct->key,"=\"",yon_dictionary_get_data(dct,char*),"\"",NULL));
} else if (((yon_config_parameter*)dct)->flag1==-1){
((yon_config_parameter*)dct)->flag1=0;
if (sections_remove&&yon_dictionary_get(&sections_remove,((yon_config_parameter*)dct)->section)) sections_remove->data=(void*)yon_char_unite(yon_dictionary_get_data(sections_remove,char*)," ",dct->key,NULL);

@ -186,7 +186,7 @@ typedef enum {
config_str yon_config_load(char *command, int *str_len);
int yon_config_save_registered(char *path, char *section);
int yon_config_save_registered(char *path);
char *yon_config_get_parameter(config_str parameters, int size, char *param);

Binary file not shown.

@ -415,6 +415,8 @@ translated and supported by community.</property>
<column type="gchararray"/>
<!-- column-name gchararray2 -->
<column type="gchararray"/>
<!-- column-name gboolean1 -->
<column type="gboolean"/>
</columns>
</object>
<object class="GtkListStore" id="liststore2">
@ -730,6 +732,7 @@ translated and supported by community.</property>
<property name="can-focus">False</property>
<property name="model">liststore2</property>
<property name="active">0</property>
<property name="id-column">1</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>

Loading…
Cancel
Save