@ -2,115 +2,117 @@
config main_config ;
//signal emmit handlers - no header initialization
/**on_close_subwindow(GtkWidget *self)
* [ EN ]
* Closes window in which [ self ] is contained .
* [ RU ]
* З а к р ы в а е т о к н о , в к о т о р о м р а с п о л о ж е н в и д ж е т [ self ] .
*/
void on_close_subwindow ( GtkWidget * self ) {
gtk_widget_destroy ( gtk_widget_get_toplevel ( self ) ) ;
}
/**yon_open_browser(GtkWidget *self, char *link)
* [ EN ]
* Opens browser with [ link ] link .
* [ RU ]
* О т к р ы в а е т б р а у з е р с [ link ] с с ы л к о й .
*/
void yon_open_browser ( GtkWidget * self , char * link ) {
yon_ubl_browser_window_open ( link , TITLE_LABEL ) ;
}
/**on_open_documentation_confirmation(GtkWidget *self, char *link)
* [ EN ]
* Opens confirmation window for [ link ] link .
* [ RU ]
* О т к р ы в а е т о к н о п о д т в е р ж д е н и е п е р е х о д а п о с с ы л к е [ link ] .
*/
void on_open_documentation_confirmation ( GtkWidget * self , char * link ) {
if ( main_config . always_open_documentation = = 0 ) {
GtkBuilder * builder = gtk_builder_new_from_resource ( glade_path ) ;
documentation_confirmation_window * widgets = malloc ( sizeof ( documentation_confirmation_window ) ) ;
widgets - > Window = yon_gtk_builder_get_widget ( builder , " helpConfirmationWindow " ) ;
widgets - > AcceptButton = yon_gtk_builder_get_widget ( builder , " ReadHelpButton " ) ;
widgets - > CloseButton = yon_gtk_builder_get_widget ( builder , " CancelHelpButton " ) ;
widgets - > HatText = yon_gtk_builder_get_widget ( builder , " webHeaderNameLabel " ) ;
widgets - > HeaderText = yon_gtk_builder_get_widget ( builder , " helpHeader " ) ;
widgets - > InfoText = yon_gtk_builder_get_widget ( builder , " helpText " ) ;
widgets - > AlwaysOpenCheck = yon_gtk_builder_get_widget ( builder , " AlwaysOpenDocumentationCheckbox " ) ;
gtk_label_set_text ( GTK_LABEL ( widgets - > HatText ) , TITLE_LABEL ) ;
gtk_label_set_text ( GTK_LABEL ( widgets - > HeaderText ) , HELP_TITLE_LABEL ) ;
gtk_label_set_text ( GTK_LABEL ( widgets - > InfoText ) , HELP_INFO_LABEL ) ;
gtk_button_set_label ( GTK_BUTTON ( widgets - > AcceptButton ) , OPEN_HELP_LABEL ) ;
gtk_button_set_label ( GTK_BUTTON ( widgets - > AlwaysOpenCheck ) , HELP_ALWAYS_OPEN_LABEL ) ;
gtk_button_set_label ( GTK_BUTTON ( widgets - > CloseButton ) , CANCEL_LABEL ) ;
gtk_widget_show_all ( widgets - > Window ) ;
g_signal_connect ( G_OBJECT ( widgets - > CloseButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , NULL ) ;
g_signal_connect ( G_OBJECT ( widgets - > AcceptButton ) , " clicked " , G_CALLBACK ( yon_open_browser ) , yon_char_new ( link ) ) ;
g_signal_connect ( G_OBJECT ( widgets - > AcceptButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , NULL ) ;
void on_save_done ( main_window * , config_str output , int size ) {
char * final_output = yon_char_parsed_to_string ( output , size , " " ) ;
if ( final_output ) {
printf ( " %s \n " , final_output ) ;
free ( final_output ) ;
}
yon_char_parsed_free ( output , size ) ;
textdomain ( template_ui_LocaleName ) ;
switch ( main_config . save_config ) {
case 0 :
yon_ubl_status_box_render ( GLOBAL_SAVE_SUCCESS_LABEL , BACKGROUND_IMAGE_SUCCESS_TYPE ) ;
break ;
case 1 :
yon_ubl_status_box_render ( LOCAL_SAVE_SUCCESS_LABEL , BACKGROUND_IMAGE_SUCCESS_TYPE ) ;
break ;
case 2 :
yon_ubl_status_box_render ( GLOBAL_LOCAL_SAVE_SUCCESS_LABEL , BACKGROUND_IMAGE_SUCCESS_TYPE ) ;
break ;
}
textdomain ( LocaleName ) ;
}
void on_config_global_local_save ( GtkWidget * , main_window * ) {
main_config . save_config = 3 ;
yon_save_proceed ( NULL , YON_CONFIG_BOTH , config_get_global_command , NULL ) ;
}
void on_config_local_save ( GtkWidget * , main_window * ) {
main_config . save_config = 1 ;
yon_save_proceed ( " system " , YON_CONFIG_LOCAL , config_get_local_command , NULL ) ;
}
void on_config_global_save ( GtkWidget * , main_window * ) {
main_config . save_config = 0 ;
yon_save_proceed ( " global " , YON_CONFIG_GLOBAL , config_get_global_command , NULL ) ;
}
void on_config_custom_save ( GtkWidget * , main_window * ) {
main_config . save_config = 1 ;
template_saving_window * window = yon_save_proceed ( NULL , YON_CONFIG_CUSTOM , yon_config_get_custom_command ( " system " ) , NULL ) ;
if ( window ) { } ;
}
void on_config_local_load ( GtkWidget * , main_window * widgets ) {
yon_load_proceed ( YON_CONFIG_LOCAL ) ;
g_idle_add ( ( GSourceFunc ) yon_interface_update , widgets ) ;
main_config . load_mode = 1 ;
}
void on_config_global_load ( GtkWidget * , main_window * widgets ) {
yon_load_proceed ( YON_CONFIG_GLOBAL ) ;
g_idle_add ( ( GSourceFunc ) yon_interface_update , widgets ) ;
main_config . load_mode = 0 ;
}
void on_config_custom_load ( GtkWidget * , main_window * widgets ) {
yon_load_proceed ( YON_CONFIG_CUSTOM ) ;
textdomain ( template_ui_LocaleName ) ;
yon_ubl_status_box_render ( GLOBAL_LOAD_SUCCESS_LABEL , BACKGROUND_IMAGE_SUCCESS_TYPE ) ;
textdomain ( LocaleName ) ;
main_config . load_mode = 3 ;
g_idle_add ( ( GSourceFunc ) yon_interface_update , widgets ) ;
}
void yon_load_proceed ( YON_CONFIG_TYPE type ) {
yon_config_clean ( ) ;
if ( ! yon_char_is_empty ( config_get_default_command ) )
yon_config_load_config ( YON_CONFIG_DEFAULT , config_get_default_command , NULL ) ;
if ( type = = YON_CONFIG_GLOBAL ) {
yon_config_load_config ( type , config_get_global_command , NULL ) ;
} else if ( type = = YON_CONFIG_LOCAL ) {
yon_config_load_config ( type , config_get_local_command , NULL ) ;
} else if ( type = = YON_CONFIG_CUSTOM ) {
char * path = " " ;
textdomain ( template_ui_LocaleName ) ;
GtkWidget * dialog = gtk_file_chooser_dialog_new ( template_app_information . app_title , NULL , GTK_FILE_CHOOSER_ACTION_SAVE , CANCEL_LABEL , GTK_RESPONSE_CANCEL , OPEN_LABEL , GTK_RESPONSE_ACCEPT , NULL ) ;
textdomain ( LocaleName ) ;
gtk_window_set_icon_name ( GTK_WINDOW ( dialog ) , " com.ublinux.ubl-settings-services " ) ;
gtk_window_set_title ( GTK_WINDOW ( dialog ) , TITLE_LABEL ) ;
GtkFileFilter * filter = gtk_file_filter_new ( ) ;
gtk_file_filter_add_pattern ( filter , " *.ini " ) ;
gtk_file_filter_set_name ( filter , " *.ini " ) ;
gtk_file_chooser_add_filter ( GTK_FILE_CHOOSER ( dialog ) , filter ) ;
gtk_widget_show ( dialog ) ;
int response = gtk_dialog_run ( GTK_DIALOG ( dialog ) ) ;
if ( response = = GTK_RESPONSE_ACCEPT ) {
char * file = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER ( dialog ) ) ;
if ( ! yon_char_is_empty ( file ) ) {
path = file ;
}
gtk_widget_destroy ( dialog ) ;
} else {
yon_open_browser ( self , link ) ;
}
}
/**on_link(GtkWidget *self, char* uri, gpointer user_data)
* [ EN ]
* Signal for hadnling AboutDialog links .
* Connect to " activate-link " signal .
* [ self ] is AboutDialog window ;
* [ uri ] is activated link ;
* [ user_data ] is pointer for user data , hasn ' t used in standard handler ;
* [ RU ]
* Ф у н к ц и я д л я о б р а б о т к и с и г н а л а н а ж а т и я н а с с ы л к у о к н а AboutDialog .
* П р и с о е д и н я т ь к с и г н а л у " activate-link " .
* [ self ] - о к н о AboutDialog ;
* [ uri ] - с с ы л к а , п о к о т о р о й с о в е р ш а е т с я п е р е х о д ;
* [ user_data ] - у к а з а т е л ь н а л ю б ы е д р у г и е д а н н ы е , н е и с п о л ь з у е т с я в с т а н д а р т н о м о б р а б о т ч и к е ;
*/
void on_link ( GtkWidget * self , char * uri , gpointer user_data ) {
gtk_widget_destroy ( self ) ;
on_open_documentation_confirmation ( self , uri ) ;
}
/**on_about()
* [ EN ]
* Function for setting up and showing AboutDialog .
* Connect it to " activate " signal of Documentation MenuItem .
* [ RU ]
* Ф у н к и ц я д л я н а с т р о й к и и п о к а з а о к н а AboutDialog .
* П р и с о е д и н я т ь к с и г н а л у " activate " к н о п к и с п р а в к и т и п а MenuItem .
*/
void on_about ( ) {
GtkBuilder * builder = gtk_builder_new_from_resource ( glade_path ) ;
GtkWidget * window = yon_gtk_builder_get_widget ( builder , " AboutWindow " ) ;
GtkWidget * title = yon_gtk_builder_get_widget ( builder , " headerAboutTopic " ) ;
GtkWidget * hideButtonBox = yon_gtk_builder_get_widget ( builder , " buttonBoxHide " ) ;
gtk_about_dialog_set_version ( GTK_ABOUT_DIALOG ( window ) , version_application ) ;
gtk_about_dialog_set_website_label ( GTK_ABOUT_DIALOG ( window ) , PROJECT_HOME_LABEL ) ;
gtk_about_dialog_set_comments ( GTK_ABOUT_DIALOG ( window ) , TITLE_LABEL ) ;
gtk_label_set_text ( GTK_LABEL ( title ) , TITLE_LABEL ) ;
g_signal_connect ( G_OBJECT ( window ) , " activate-link " , G_CALLBACK ( on_link ) , NULL ) ;
gtk_widget_set_visible ( hideButtonBox , 0 ) ;
gtk_widget_destroy ( hideButtonBox ) ;
gtk_widget_show ( window ) ;
}
//functions
void yon_load_proceed ( YON_CONFIG_TYPE type , main_window * widgets ) {
gtk_widget_destroy ( dialog ) ;
}
char * command = yon_config_get_custom_command ( path ) ;
yon_config_load_config ( type , command , NULL ) ;
}
}
gboolean yon_interface_update ( main_window * widgets ) {
gtk_list_store_clear ( widgets - > layoutsList ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( widgets - > ModelCombo ) , 0 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( widgets - > NumLockCombo ) , 0 ) ;
gtk_entry_set_text ( GTK_ENTRY ( widgets - > OptionsEntry ) , DEFAULT_LABEL ) ;
char * name ;
if ( yon_config_load_register ( type , " keyboard " , " XkbModel " , " keyboard " , " XkbLayout " , " keyboard " , " KEYBOARD " , " keyboard " , " XkbOptions " , " config " , " NUMLOCK " , NULL ) ) {
GtkTreeIter iter ;
name = yon_config_get_by_key ( " XkbModel " ) ;
gtk_entry_set_text ( GTK_ENTRY ( widgets - > OptionsEntry ) , DEFAULT_LABEL ) ;
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 ) ;
@ -141,16 +143,9 @@ void yon_load_proceed(YON_CONFIG_TYPE type, main_window *widgets){
}
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 " ) ;
if ( ! name ) {
int sizes ;
config_str rtn = yon_config_load ( get_defaults_command , & sizes ) ;
name = yon_char_divide_search ( rtn [ 0 ] , " \n " , - 1 ) ;
yon_char_divide_search ( name , " = " , - 1 ) ;
}
config_str layouts = yon_char_parse ( name , & size , " , " ) ;
GtkTreeIter iter ;
char * rid , * rname ;
@ -165,71 +160,18 @@ void yon_load_proceed(YON_CONFIG_TYPE type, main_window *widgets){
}
}
}
}
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 ) ;
return G_SOURCE_REMOVE ;
}
void on_num_lock_changed ( GtkComboBox * self , main_window * widgets ) {
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 :
if ( yon_config_get_by_key ( num_lock_boot_parameter ) )
yon_config_set ( num_lock_boot_parameter , " yes " ) ;
else yon_config_register ( num_lock_boot_parameter , " config " , " yes " ) ;
case 1 : yon_config_register ( num_lock_boot_parameter , num_lock_boot_parameter_command , " yes " ) ;
break ;
case 2 :
if ( yon_config_get_by_key ( num_lock_boot_parameter ) )
yon_config_set ( num_lock_boot_parameter , " no " ) ;
else yon_config_register ( num_lock_boot_parameter , " config " , " no " ) ;
case 2 : yon_config_register ( num_lock_boot_parameter , num_lock_boot_parameter_command , " no " ) ;
break ;
}
}
@ -243,10 +185,8 @@ void on_model_changed(GtkComboBoxText *self, main_window *widgets){
char * id ;
GtkTreeIter iter ;
gtk_combo_box_get_active_iter ( GTK_COMBO_BOX ( widgets - > ModelCombo ) , & iter ) ;
gtk_tree_model_get ( GTK_TREE_MODEL ( widgets - > modelsList ) , & iter , 0 , & id , - 1 ) ;
if ( yon_config_get_by_key ( model_parameter ) )
yon_config_set ( model_parameter , id ) ;
else yon_config_register ( model_parameter , " keyboard " , id ) ;
gtk_tree_model_get ( GTK_TREE_MODEL ( widgets - > modelsList ) , & iter , 1 , & id , - 1 ) ;
yon_config_register ( model_parameter , model_parameter_command , id ) ;
break ;
}
@ -261,15 +201,32 @@ void on_options_accept(GtkWidget *self, dictionary *dict){
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 , & 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 ) ;
yon_config_register ( options_parameter , options_parameter_command , id ) ;
}
on_subwindow_close ( self ) ;
}
void yon_layouts_save ( main_window * widgets ) {
GtkTreeIter iter ;
GtkTreeIter child_iter ;
int size ;
config_str parsed = NULL ;
for_iter ( widgets - > layoutsFilter , & iter ) {
char * name , * id ;
gtk_tree_model_filter_convert_iter_to_child_iter ( GTK_TREE_MODEL_FILTER ( widgets - > layoutsFilter ) , & child_iter , & iter ) ;
gtk_tree_model_get ( GTK_TREE_MODEL ( widgets - > layoutsList ) , & child_iter , 0 , & name , 1 , & id , - 1 ) ;
yon_char_parsed_add_or_create_if_exists ( parsed , & size , id ) ;
}
if ( parsed & & size > 0 ) {
yon_config_register ( keyboard_layout_parameter , keyboard_layout_parameter_command , yon_char_parsed_to_string ( parsed , size , " , " ) ) ;
yon_char_parsed_free ( parsed , size ) ;
} else {
yon_config_remove_by_key ( keyboard_layout_parameter ) ;
}
on_close_subwindow ( self ) ;
}
void on_options_open ( GtkWidget * self , main_window * widgets ) {
void on_options_open ( GtkWidget * , main_window * widgets ) {
GtkBuilder * builder = gtk_builder_new_from_resource ( glade_layouts_path ) ;
layouts_window * window = malloc ( sizeof ( layouts_window ) ) ;
window - > Window = yon_gtk_builder_get_widget ( builder , " Window " ) ;
@ -281,7 +238,7 @@ void on_options_open(GtkWidget *self, main_window *widgets){
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 - > CancelButton ) , " clicked " , G_CALLBACK ( on_ close_ subwindow) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > CancelButton ) , " clicked " , G_CALLBACK ( on_ subwindow_close ) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > AcceptButton ) , " clicked " , G_CALLBACK ( on_options_accept ) , dict ) ;
}
@ -294,17 +251,18 @@ void on_layouts_accept(GtkWidget *self, dictionary *dict){
char * id ;
GtkTreeIter iter , lwiter ;
GtkTreePath * pth ;
for ( int i = 0 ; i < g_list_length ( list ) ; i + + ) {
for ( gu int i = 0 ; i < g_list_length ( list ) ; i + + ) {
pth = ( GtkTreePath * ) g_list_nth_data ( list , i ) ;
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 , 2 , 1 , - 1 ) ;
}
on_close_subwindow ( self ) ;
yon_layouts_save ( widgets ) ;
on_subwindow_close ( self ) ;
}
void on_layouts_add ( GtkWidget * self , main_window * widgets ) {
void on_layouts_add ( GtkWidget * , main_window * widgets ) {
GtkBuilder * builder = gtk_builder_new_from_resource ( glade_layouts_path ) ;
layouts_window * window = malloc ( sizeof ( layouts_window ) ) ;
window - > Window = yon_gtk_builder_get_widget ( builder , " Window " ) ;
@ -319,35 +277,48 @@ void on_layouts_add(GtkWidget *self, main_window *widgets){
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 - > CancelButton ) , " clicked " , G_CALLBACK ( on_ close_ subwindow) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > CancelButton ) , " clicked " , G_CALLBACK ( on_ subwindow_close ) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > AcceptButton ) , " clicked " , G_CALLBACK ( on_layouts_accept ) , dict ) ;
}
void on_layouts_remove ( GtkWidget * self , main_window * widgets ) {
void on_layouts_remove ( GtkWidget * , main_window * widgets ) {
GtkTreeModel * model = GTK_TREE_MODEL ( widgets - > layoutsList ) ;
GtkTreeIter iter ;
if ( gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( widgets - > LayoutsTree ) ) , & model , & iter ) ) {
gtk_list_store_remove ( widgets - > layoutsList , & iter ) ;
GtkTreeIter iter_converted ;
gtk_tree_model_filter_convert_iter_to_child_iter ( widgets - > layoutsFilter , & iter_converted , & iter ) ;
gtk_list_store_remove ( widgets - > layoutsList , & iter_converted ) ;
}
}
void on_move_up ( GtkWidget * self , main_window * widgets ) {
GtkTreeModel * model = GTK_TREE_MODEL ( widgets - > layouts List ) ;
void on_move_up ( GtkWidget * , main_window * widgets ) {
GtkTreeModel * model = GTK_TREE_MODEL ( widgets - > layouts Filter ) ;
GtkTreeIter iter , * previter ;
if ( gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( widgets - > LayoutsTree ) ) , & model , & iter ) ) {
previter = gtk_tree_iter_copy ( & iter ) ;
if ( gtk_tree_model_iter_previous ( model , previter ) )
gtk_list_store_move_before ( widgets - > layoutsList , & iter , previter ) ;
{
GtkTreeIter iter_converted , previter_converted ;
gtk_tree_model_filter_convert_iter_to_child_iter ( widgets - > layoutsFilter , & iter_converted , & iter ) ;
gtk_tree_model_filter_convert_iter_to_child_iter ( widgets - > layoutsFilter , & previter_converted , previter ) ;
gtk_list_store_move_before ( widgets - > layoutsList , & iter_converted , & previter_converted ) ;
yon_layouts_save ( widgets ) ;
}
}
}
void on_move_down ( GtkWidget * self , main_window * widgets ) {
GtkTreeModel * model = GTK_TREE_MODEL ( widgets - > layoutsList ) ;
void on_move_down ( GtkWidget * , main_window * widgets ) {
GtkTreeModel * model = GTK_TREE_MODEL ( widgets - > layouts Filter ) ;
GtkTreeIter iter , * nextiter ;
if ( gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( widgets - > LayoutsTree ) ) , & model , & iter ) ) {
nextiter = gtk_tree_iter_copy ( & iter ) ;
if ( gtk_tree_model_iter_next ( model , nextiter ) )
gtk_list_store_move_after ( widgets - > layoutsList , & iter , nextiter ) ;
if ( gtk_tree_model_iter_next ( model , nextiter ) ) {
GtkTreeIter iter_converted , nextiter_converted ;
gtk_tree_model_filter_convert_iter_to_child_iter ( widgets - > layoutsFilter , & iter_converted , & iter ) ;
gtk_tree_model_filter_convert_iter_to_child_iter ( widgets - > layoutsFilter , & nextiter_converted , nextiter ) ;
gtk_list_store_move_after ( widgets - > layoutsList , & iter_converted , & nextiter_converted ) ;
yon_layouts_save ( widgets ) ;
}
}
}
@ -356,50 +327,13 @@ void on_move_down(GtkWidget *self, main_window *widgets){
// standard functions
void config_init ( ) {
main_config . always_open_documentation = 0 ;
main_config . win_height = 0 ;
main_config . win_width = 0 ;
main_config . win_pos_x = 0 ;
main_config . win_pos_y = 0 ;
main_config . socket_id = - 1 ;
main_config . save_socket_id = - 1 ;
main_config . load_socket_id = - 1 ;
main_config . lock_help = 0 ;
main_config . lock_help = 0 ;
main_config . lock_load_global = 0 ;
main_config . lock_save_global = 0 ;
main_config . lock_save_local = 0 ;
}
main_window * setup_window ( ) {
/* Widgets getting | Получение виджетов */
main_window * widgets = malloc ( sizeof ( main_window ) ) ;
void yon_main_window_complete ( main_window * widgets ) {
widgets = yon_remalloc ( widgets , sizeof ( main_window ) ) ;
GtkBuilder * builder = gtk_builder_new_from_resource ( glade_path ) ;
widgets - > Window = yon_gtk_builder_get_widget ( builder , " MainWindow " ) ;
widgets - > HatLabel = yon_gtk_builder_get_widget ( builder , " headerTopic " ) ;
widgets - > PlugBox = yon_gtk_builder_get_widget ( builder , " plugBox " ) ;
widgets - > HeadOverlay = yon_gtk_builder_get_widget ( builder , " HeadOverlay " ) ;
widgets - > HeadImage = yon_gtk_builder_get_widget ( builder , " HeadBackgroundImage " ) ;
widgets - > HeadBox = yon_gtk_builder_get_widget ( builder , " HeaderBox " ) ;
widgets - > HeadTitleLabel = yon_gtk_builder_get_widget ( builder , " HeaderTitleLabel " ) ;
widgets - > HeadInfoLabel = yon_gtk_builder_get_widget ( builder , " HeaderInfoLabel " ) ;
widgets - > StatusBox = yon_gtk_builder_get_widget ( builder , " mainStatusBox " ) ;
widgets - > StatusIcon = yon_gtk_builder_get_widget ( builder , " mainStatusIcon " ) ;
widgets - > StatusLabel = yon_gtk_builder_get_widget ( builder , " mainStatusLabel " ) ;
widgets - > SaveLabel = yon_gtk_builder_get_widget ( builder , " headerSaveConfigLabel " ) ;
widgets - > SaveMenuItem = yon_gtk_builder_get_widget ( builder , " SaveGlobalLocalConfigurationMenuItem " ) ;
widgets - > SaveGlobalMenuItem = yon_gtk_builder_get_widget ( builder , " SaveGlobalConfigurationMenuItem " ) ;
widgets - > SaveLocalMenuItem = yon_gtk_builder_get_widget ( builder , " SaveLocalConfigurationMenuItem " ) ;
widgets - > RightBox = yon_gtk_builder_get_widget ( builder , " HeaderRightBox " ) ;
widgets - > LoadLabel = yon_gtk_builder_get_widget ( builder , " headerLoadConfigLabel " ) ;
widgets - > LoadGlobalMenuItem = yon_gtk_builder_get_widget ( builder , " LoadGlobalConfigurationMenuItem " ) ;
widgets - > LoadLocalMenuItem = yon_gtk_builder_get_widget ( builder , " LoadLocalConfigurationMenuItem " ) ;
widgets - > LeftBox = yon_gtk_builder_get_widget ( builder , " HeaderLeftBox " ) ;
gtk_box_pack_start ( GTK_BOX ( widgets - > InterfaceBox ) , yon_gtk_builder_get_widget ( builder , " BoxMain " ) , 1 , 1 , 0 ) ;
// Custom widgets configuration
{
widgets - > NumLockCombo = yon_gtk_builder_get_widget ( builder , " NumlockCombo " ) ;
widgets - > ModelCombo = yon_gtk_builder_get_widget ( builder , " ModelCombo " ) ;
@ -414,29 +348,9 @@ main_window *setup_window(){
widgets - > AddButton = yon_gtk_builder_get_widget ( builder , " AddButton " ) ;
widgets - > RemoveButton = yon_gtk_builder_get_widget ( builder , " RemoveButton " ) ;
widgets - > layoutsList = GTK_LIST_STORE ( gtk_builder_get_object ( builder , " liststore1 " ) ) ;
widgets - > layoutsFilter = GTK_TREE_MODEL_FILTER ( gtk_builder_get_object ( builder , " LayoutsFilter " ) ) ;
widgets - > modelsList = GTK_LIST_STORE ( gtk_builder_get_object ( builder , " liststore2 " ) ) ;
widgets - > DocumentationMenuItem = yon_ubl_menu_item_documentation_new ( DOCUMENTATION_LABEL ) ;
widgets - > AboutMenuItem = yon_ubl_menu_item_about_new ( ABOUT_LABEL ) ;
gtk_window_set_title ( GTK_WINDOW ( widgets - > Window ) , TITLE_LABEL ) ;
GtkWidget * menu = yon_gtk_builder_get_widget ( builder , " menu2 " ) ;
gtk_menu_shell_append ( GTK_MENU_SHELL ( menu ) , widgets - > DocumentationMenuItem ) ;
gtk_menu_shell_append ( GTK_MENU_SHELL ( menu ) , widgets - > AboutMenuItem ) ;
if ( main_config . lock_load_global = = 1 ) {
gtk_widget_set_sensitive ( widgets - > LoadGlobalMenuItem , 0 ) ;
}
if ( main_config . lock_save_global = = 1 ) {
gtk_widget_set_sensitive ( widgets - > SaveGlobalMenuItem , 0 ) ;
gtk_widget_set_sensitive ( widgets - > SaveMenuItem , 0 ) ;
}
if ( main_config . lock_save_local = = 1 ) {
gtk_widget_set_sensitive ( widgets - > SaveLocalMenuItem , 0 ) ;
gtk_widget_set_sensitive ( widgets - > SaveMenuItem , 0 ) ;
}
int size ;
GtkTreeIter iter ;
config_str models = yon_config_load ( get_models_command , & size ) ;
@ -446,11 +360,11 @@ main_window *setup_window(){
gtk_list_store_append ( widgets - > modelsList , & iter ) ;
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 ) ;
main_config . layouts_list = gtk_list_store_new ( 3 , G_TYPE_STRING , G_TYPE_STRING , G_TYPE_BOOLEAN ) ;
int laysize ;
config_str rtn = yon_ config_load( get_layouts_command , & size ) ;
config_str rtn = yon_ resource_open_file( layouts_path , & size ) ;
for ( int i = 0 ; i < size ; i + + ) {
rtn [ i ] = yon_char_divide_search ( rtn [ i ] , " \n " , - 1 ) ;
yon_char_remove_last_symbol ( rtn [ i ] , ' \n ' ) ;
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 ) ;
@ -469,8 +383,6 @@ main_window *setup_window(){
// yon_window_config_add_custom_parameter(widgets->HeadInfoLabel,"head-text","label",YON_TYPE_STRING);
/* Signal connection | Присоединение сигналов */
g_signal_connect ( G_OBJECT ( widgets - > DocumentationMenuItem ) , " activate " , G_CALLBACK ( on_open_documentation_confirmation ) , WIKI_LINK ) ;
g_signal_connect ( G_OBJECT ( widgets - > AboutMenuItem ) , " activate " , G_CALLBACK ( on_about ) , NULL ) ;
g_signal_connect ( G_OBJECT ( widgets - > AddButton ) , " clicked " , G_CALLBACK ( on_layouts_add ) , widgets ) ;
g_signal_connect ( G_OBJECT ( widgets - > RemoveButton ) , " clicked " , G_CALLBACK ( on_layouts_remove ) , widgets ) ;
@ -479,112 +391,43 @@ main_window *setup_window(){
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 ) , 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 ) ;
g_signal_connect ( G_OBJECT ( widgets - > LoadGlobalMenuItem ) , " activate " , G_CALLBACK ( on_config_global_load ) , widgets ) ;
g_signal_connect ( G_OBJECT ( widgets - > LoadCustomMenuItem ) , " activate " , G_CALLBACK ( on_config_custom_load ) , widgets ) ;
g_signal_connect ( G_OBJECT ( widgets - > SaveMenuItem ) , " activate " , G_CALLBACK ( on_config_global_local_save ) , NULL ) ;
g_signal_connect ( G_OBJECT ( widgets - > SaveLocalMenuItem ) , " activate " , G_CALLBACK ( on_config_local_save ) , NULL ) ;
g_signal_connect ( G_OBJECT ( widgets - > SaveGlobalMenuItem ) , " activate " , G_CALLBACK ( on_config_global_save ) , NULL ) ;
g_signal_connect ( G_OBJECT ( widgets - > SaveCustomMenuItem ) , " activate " , G_CALLBACK ( on_config_custom_save ) , NULL ) ;
yon_root_button_setup ( ( template_main_window * ) widgets , main_config . launch_arguments , main_config . launch_size ) ;
yon_save_window_set_postsave_function ( on_save_done , widgets ) ;
gtk_widget_show ( widgets - > Window ) ;
return widgets ;
on_config_local_load ( NULL , widgets ) ;
}
int main ( int argc , char * argv [ ] ) {
local = setlocale ( LC_ALL , " " ) ;
setlocale ( LC_ALL , " " ) ;
textdomain ( LocaleName ) ;
config_init ( ) ;
int option_index = 0 ;
int show_help = 0 ;
int debug_mode = 0 ;
{
struct option long_options [ ] = {
{ " help " , 0 , 0 , ' h ' } ,
{ " version " , 0 , 0 , ' V ' } ,
{ " lock-help " , 0 , 0 , 1 } ,
{ " lock-save " , 0 , 0 , 2 } ,
{ " lock-save-local " , 0 , 0 , 3 } ,
{ " lock-save-global " , 0 , 0 , 4 } ,
{ " lock-load-global " , 0 , 0 , 5 } ,
{ " socket-id " , 1 , 0 , ' s ' } ,
{ " socket-ext-id " , 1 , 0 , ' e ' } ,
{ " socket-trd-id " , 1 , 0 , ' t ' } ,
{ " debug " , 0 , 0 , ' d ' } ,
{ NULL , 0 , NULL , 0 }
} ;
for ( int i = 0 ; i < argc ; i + + ) {
int argument = getopt_long ( argc , argv , " hVvs:e:t:d " , long_options , & option_index ) ;
switch ( argument ) {
case ' h ' :
show_help = 1 ;
break ;
case ' v ' :
case ' V ' :
printf ( " %s \n " , VERSION_LABEL ) ;
exit ( 0 ) ;
break ;
case ' s ' :
if ( optarg )
main_config . socket_id = atoi ( optarg ) ;
break ;
case ' e ' :
if ( optarg )
main_config . save_socket_id = atoi ( optarg ) ;
break ;
case ' t ' :
if ( optarg )
main_config . load_socket_id = atoi ( optarg ) ;
break ;
case 1 :
main_config . lock_help = 1 ;
break ;
case 2 :
main_config . lock_save_local = 1 ;
main_config . lock_save_global = 1 ;
break ;
case 3 :
main_config . lock_save_local = 1 ;
break ;
case 4 :
main_config . lock_save_global = 1 ;
break ;
case 5 :
main_config . lock_load_global = 1 ;
break ;
}
}
if ( show_help = = 1 & & main_config . lock_help ! = 1 ) {
printf ( " %s \n " , HELP_LABEL ) ;
exit ( 0 ) ;
}
}
if ( getuid ( ) ! = 0 ) {
main_config . lock_load_global = 1 ;
main_config . lock_save_global = 1 ;
main_config . lock_save_local = 1 ;
}
yon_ubl_connect_config ( ( _template_config * ) & main_config ) ;
yon_ubl_window_init ( TITLE_LABEL , TITLE_INFO_LABEL , LocaleName , CssPath , LocaleName , version_application , WIKI_LINK ) ;
config_str unfound = NULL ;
int size = 0 ;
yon_ubl_setup_arguments ( argc , argv , & unfound , & size , NULL ) ;
gtk_init ( & argc , & argv ) ;
template_main_window * widgets = yon_ubl_window_setup ( ) ;
//turn off if custom presented
// yon_ubl_settings_window_set_standard_callbacks(widgets,config_get_global_command,config_get_local_command,yon_config_get_custom_command("./"),config_get_default_command,config_get_global_only_parameters,config_get_local_only_parameters);
main_window * widgets = setup_window ( ) ;
yon_ubl_header_setup_resource ( widgets - > HeadOverlay , widgets - > HeadBox , widgets - > HeadImage , banner_path ) ;
yon_ubl_status_box_setup ( widgets - > StatusIcon , widgets - > StatusBox , widgets - > StatusLabel ) ;
if ( getuid ( ) ! = 0 )
yon_ubl_status_box_render ( ROOT_WARNING_LABEL , BACKGROUND_IMAGE_FAIL_TYPE ) ;
else
yon_ubl_status_box_render ( TITLE_LABEL , BACKGROUND_IMAGE_SUCCESS_TYPE ) ;
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 ( ) ,
GTK_STYLE_PROVIDER ( css ) ,
- 1 ) ;
yon_main_window_complete ( ( main_window * ) widgets ) ;
char * path = yon_char_unite ( yon_ubl_user_get_home_directory ( ) , " /.config/ " , LocaleName , " / " , LocaleName , " .conf " , NULL ) ;
yon_window_config_load ( path ) ;
main_config . launch_arguments = yon_char_parsed_copy ( argv , argc ) ;
main_config . launch_size = argc ;
gtk_main ( ) ;
return 0 ;
}