@ -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 ( ) ,