@ -36,22 +36,23 @@ void on_locale_accept(GtkWidget *self, language_window *window){
yon_interface_update ( widgets ) ;
}
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 - > ToggleCell = GTK_CELL_RENDERER ( gtk_builder_get_object ( builder , " ToggleCell " ) ) ;
window - > LanguagesList = GTK_LIST_STORE ( gtk_builder_get_object ( builder , " LanguagesList " ) ) ;
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 ;
}
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 ) ;
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 ;
@ -61,19 +62,51 @@ language_window *yon_language_window_new(){
}
int size ;
GtkTreeIter iter ;
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 , " | " ) ;
gtk_list_store_append ( window - > LanguagesList , & iter ) ;
gtk_list_store_set ( window - > LanguagesList , & iter , 1 , parsed [ 0 ] , 2 , parsed [ 1 ] , 3 , parsed [ 2 ] , - 1 ) ;
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 [ 2 ] ) > - 1 ) {
gtk_list_store_set ( window - > LanguagesList , & iter , 0 , 1 , - 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 ;
}
@ -82,7 +115,7 @@ void on_language_open(GtkWidget *, main_window *widgets){
g_object_set_data ( G_OBJECT ( window - > Window ) , " widgets " , widgets ) ;
yon_gtk_window_setup ( GTK_WINDOW ( window - > Window ) , GTK_WINDOW ( widgets - > Window ) , TITLE_LABEL, main_icon , " LocalesWindow " ) ;
yon_gtk_window_setup ( GTK_WINDOW ( window - > Window ) , GTK_WINDOW ( widgets - > Window ) , ADD_LANGUAGE_ TITLE_LABEL, main_icon , " LocalesWindow " ) ;
gtk_widget_show ( window - > Window ) ;