|
|
|
|
@ -27,12 +27,14 @@ void on_region_changed(GtkComboBox *self, main_window *widgets){
|
|
|
|
|
char *active = (char*)gtk_combo_box_get_active_id(self);
|
|
|
|
|
size_t size;
|
|
|
|
|
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->ZoneCombo));
|
|
|
|
|
config_str parsed = yon_timezone_get_zones_from_region(active,&size);
|
|
|
|
|
for (size_t i=0;i<size;i++){
|
|
|
|
|
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->ZoneCombo),parsed[i],_(parsed[i]));
|
|
|
|
|
if (!yon_char_is_empty(active)){
|
|
|
|
|
config_str parsed = yon_timezone_get_zones_from_region(active,&size);
|
|
|
|
|
for (size_t i=0;i<size;i++){
|
|
|
|
|
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->ZoneCombo),parsed[i],_(parsed[i]));
|
|
|
|
|
}
|
|
|
|
|
if (size) yon_char_parsed_free(parsed,size);
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ZoneCombo),0);
|
|
|
|
|
}
|
|
|
|
|
if (size) yon_char_parsed_free(parsed,size);
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ZoneCombo),0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef TIMEZONEMAP_INCLUDE
|
|
|
|
|
@ -108,25 +110,37 @@ void on_map_selection_changed(GtkWidget *,CcTimezoneLocation *location,main_wind
|
|
|
|
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->ZoneCombo),G_CALLBACK(on_zone_changed),widgets);
|
|
|
|
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->RegionEntry),G_CALLBACK(on_region_entry_changed),widgets);
|
|
|
|
|
char *zone = yon_char_new(cc_timezone_location_get_zone(location));
|
|
|
|
|
char *timezone = yon_char_divide_search(zone,"/",-1);
|
|
|
|
|
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->RegionCombo),timezone);
|
|
|
|
|
while(gtk_events_pending()) gtk_main_iteration();
|
|
|
|
|
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->ZoneCombo),zone);
|
|
|
|
|
if (!yon_char_is_empty(timezone)) free(timezone);
|
|
|
|
|
char *region = yon_char_divide_search(zone,"/",-1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
timezone = (char*)cc_timezone_location_get_zone(location);
|
|
|
|
|
char *timezone = (char*)cc_timezone_location_get_zone(location);
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
int found = 0;
|
|
|
|
|
for_iter(widgets->RegionTimezoneCompletionList,&iter){
|
|
|
|
|
char *render, *tz;
|
|
|
|
|
gtk_tree_model_get(GTK_TREE_MODEL(widgets->RegionTimezoneCompletionList),&iter,0,&render,1,&tz,-1);
|
|
|
|
|
if (!strcmp(timezone,tz)){
|
|
|
|
|
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->RegionCombo),region);
|
|
|
|
|
while(gtk_events_pending()) gtk_main_iteration();
|
|
|
|
|
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->ZoneCombo),zone);
|
|
|
|
|
gtk_entry_set_text(GTK_ENTRY(widgets->RegionEntry),render);
|
|
|
|
|
char *utc = yon_timezone_get_utc(tz);
|
|
|
|
|
yon_map_status_show(widgets,NULL,MAP_TITLE_LABEL(utc),render);
|
|
|
|
|
found = 1;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!found){
|
|
|
|
|
const char *region = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->RegionCombo));
|
|
|
|
|
const char *zone = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->ZoneCombo));
|
|
|
|
|
char *timezone = yon_char_unite(region,"/",zone,NULL);
|
|
|
|
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->RegionMapTarget),G_CALLBACK(on_map_selection_changed),widgets);
|
|
|
|
|
cc_timezone_map_set_timezone(CC_TIMEZONE_MAP(widgets->RegionMapTarget),timezone);
|
|
|
|
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->RegionMapTarget),G_CALLBACK(on_map_selection_changed),widgets);
|
|
|
|
|
free(timezone);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!yon_char_is_empty(region)) free(region);
|
|
|
|
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->ZoneCombo),G_CALLBACK(on_zone_changed),widgets);
|
|
|
|
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->RegionEntry),G_CALLBACK(on_region_entry_changed),widgets);
|
|
|
|
|
}
|
|
|
|
|
@ -216,17 +230,17 @@ void yon_region_init(main_window *widgets){
|
|
|
|
|
char *zone_name = yon_char_unite(_(zone_city),", ", _(zone_country),NULL);
|
|
|
|
|
gtk_list_store_append(widgets->RegionTimezoneCompletionList,&iter);
|
|
|
|
|
gtk_list_store_set(widgets->RegionTimezoneCompletionList,&iter,0,zone_name,1,parsed[i],-1);
|
|
|
|
|
g_hash_table_add(timezones_list,zone);
|
|
|
|
|
g_hash_table_add(timezones_list,yon_char_new(zone));
|
|
|
|
|
}
|
|
|
|
|
yon_char_parsed_free(parsed,size);
|
|
|
|
|
|
|
|
|
|
size_t zones_size;
|
|
|
|
|
parsed = (config_str)g_hash_table_get_keys_as_array(timezones_list,(guint*)&zones_size);
|
|
|
|
|
qsort(parsed,zones_size,sizeof(char*),(__compar_fn_t)yon_char_parsed_compare);
|
|
|
|
|
size_t zones_size=0;
|
|
|
|
|
config_str keys = (config_str)g_hash_table_get_keys_as_array(timezones_list,(guint*)&zones_size);
|
|
|
|
|
qsort(keys,zones_size,sizeof(char*),(__compar_fn_t)yon_char_parsed_compare);
|
|
|
|
|
for (size_t i=0;i<zones_size;i++){
|
|
|
|
|
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->RegionCombo),parsed[i],_(parsed[i]));
|
|
|
|
|
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->RegionCombo),keys[i],_(keys[i]));
|
|
|
|
|
}
|
|
|
|
|
yon_char_parsed_free(parsed,zones_size);
|
|
|
|
|
yon_char_parsed_free(keys,zones_size);
|
|
|
|
|
textdomain(LocaleName);
|
|
|
|
|
while(gtk_events_pending()) gtk_main_iteration();
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->RegionCombo),0);
|
|
|
|
|
|