/** * vu_set_auto_features_on_first_run: * * Ask the user's opinion to set some of Viking's default behaviour */ void vu_set_auto_features_on_first_run ( void ) { gboolean auto_features = FALSE; gboolean set_defaults = FALSE; if ( a_vik_very_first_run () ) { GtkWidget *win = gtk_window_new ( GTK_WINDOW_TOPLEVEL ); if ( a_dialog_yes_or_no ( GTK_WINDOW(win), _("This appears to be Viking's very first run.\n\nDo you wish to enable automatic internet features?\n\nIndividual settings can be controlled in the Preferences."), NULL ) ) auto_features = TRUE; // Default to more standard cache layout for new users (well new installs at least) maps_layer_set_cache_default ( VIK_MAPS_CACHE_LAYOUT_OSM ); set_defaults = TRUE; } if ( auto_features ) { // Set Maps to autodownload // Ensure the default is true maps_layer_set_autodownload_default ( TRUE ); set_defaults = TRUE; // Simplistic repeat of preference settings // Only the name & type are important for setting a preference via this 'external' way // Enable auto add map + // Enable IP lookup VikLayerParam pref_add_map[] = { { VIK_LAYER_NUM_TYPES, VIKING_PREFERENCES_STARTUP_NAMESPACE "add_default_map_layer", VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_GROUP_NONE, NULL, VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL, NULL, NULL, NULL, }, }; VikLayerParam pref_startup_method[] = { { VIK_LAYER_NUM_TYPES, VIKING_PREFERENCES_STARTUP_NAMESPACE "startup_method", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, NULL, VIK_LAYER_WIDGET_COMBOBOX, NULL, NULL, NULL, NULL, NULL, NULL}, }; VikLayerParamData vlp_data; vlp_data.b = TRUE; a_preferences_run_setparam ( vlp_data, pref_add_map ); vlp_data.u = VIK_STARTUP_METHOD_AUTO_LOCATION; a_preferences_run_setparam ( vlp_data, pref_startup_method ); // Only on Windows make checking for the latest version on by default // For other systems it's expected a Package manager or similar controls the installation, so leave it off #ifdef WINDOWS VikLayerParam pref_startup_version_check[] = { { VIK_LAYER_NUM_TYPES, VIKING_PREFERENCES_STARTUP_NAMESPACE "check_version", VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_GROUP_NONE, NULL, VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL, NULL, }, }; vlp_data.b = TRUE; a_preferences_run_setparam ( vlp_data, pref_startup_version_check ); #endif // Ensure settings are saved for next time a_preferences_save_to_file (); } // Ensure defaults are saved if changed if ( set_defaults ) a_layer_defaults_save (); }
int main( int argc, char *argv[] ) { VikWindow *first_window; GdkPixbuf *main_icon; gboolean dashdash_already = FALSE; int i = 0; GError *error = NULL; gboolean gui_initialized; bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #if ! GLIB_CHECK_VERSION (2, 32, 0) g_thread_init ( NULL ); #endif gdk_threads_init (); gui_initialized = gtk_init_with_args (&argc, &argv, "files+", entries, NULL, &error); if (!gui_initialized) { /* check if we have an error message */ if (error == NULL) { /* no error message, the GUI initialization failed */ const gchar *display_name = gdk_get_display_arg_name (); (void)g_fprintf (stderr, "Failed to open display: %s\n", (display_name != NULL) ? display_name : " "); } else { /* yep, there's an error, so print it */ (void)g_fprintf (stderr, "Parsing command line options failed: %s\n", error->message); g_error_free (error); (void)g_fprintf (stderr, "Run \"%s --help\" to see the list of recognized options.\n",argv[0]); } return EXIT_FAILURE; } if (vik_version) { (void)g_printf ("%s %s\nCopyright (c) 2003-2008 Evan Battaglia\nCopyright (c) 2008-"THEYEAR" Viking's contributors\n", PACKAGE_NAME, PACKAGE_VERSION); return EXIT_SUCCESS; } #if GLIB_CHECK_VERSION (2, 32, 0) if (vik_debug) g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, log_debug, NULL); #else if (!vik_debug) g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, mute_log, NULL); #endif #if HAVE_X11_XLIB_H XSetErrorHandler(myXErrorHandler); #endif // Discover if this is the very first run a_vik_very_first_run (); a_settings_init (); a_preferences_init (); /* * First stage initialization * * Should not use a_preferences_get() yet * * Since the first time a_preferences_get() is called it loads any preferences values from disk, * but of course for preferences not registered yet it can't actually understand them * so subsequent initial attempts to get those preferences return the default value, until the values have changed */ a_vik_preferences_init (); a_layer_defaults_init (); a_download_init(); curl_download_init(); a_babel_init (); /* Init modules/plugins */ modules_init(); vik_georef_layer_init (); maps_layer_init (); a_mapcache_init (); a_background_init (); a_toolbar_init(); vik_routing_prefs_init(); /* * Second stage initialization * * Can now use a_preferences_get() */ a_background_post_init (); a_babel_post_init (); modules_post_init (); // May need to initialize the Positonal TimeZone lookup if ( a_vik_get_time_ref_frame() == VIK_TIME_REF_WORLD ) vu_setup_lat_lon_tz_lookup(); /* Set the icon */ main_icon = gdk_pixbuf_from_pixdata(&viking_pixbuf, FALSE, NULL); gtk_window_set_default_icon(main_icon); gdk_threads_enter (); // Ask for confirmation of default settings on first run vu_set_auto_features_on_first_run (); /* Create the first window */ first_window = vik_window_new_window(); vu_check_latest_version ( GTK_WINDOW(first_window) ); // Load startup file first so that subsequent files are loaded on top // Especially so that new tracks+waypoints will be above any maps in a startup file if ( a_vik_get_startup_method () == VIK_STARTUP_METHOD_SPECIFIED_FILE ) { gboolean load_startup_file = TRUE; // When a viking file is to be loaded via the command line // then we'll skip loading any startup file int jj = 0; while ( ++jj < argc ) { if ( check_file_magic_vik(argv[jj]) ) load_startup_file = FALSE; } if ( load_startup_file ) vik_window_open_file ( first_window, a_vik_get_startup_file(), TRUE ); } while ( ++i < argc ) { if ( strcmp(argv[i],"--") == 0 && !dashdash_already ) dashdash_already = TRUE; /* hack to open '-' */ else { VikWindow *newvw = first_window; gboolean change_filename = (i == 1); // Open any subsequent .vik files in their own window if ( i > 1 && check_file_magic_vik ( argv[i] ) ) { newvw = vik_window_new_window (); change_filename = TRUE; } vik_window_open_file ( newvw, argv[i], change_filename ); } } vik_window_new_window_finish ( first_window ); vu_command_line ( first_window, latitude, longitude, zoom_level_osm, map_id ); gtk_main (); gdk_threads_leave (); a_babel_uninit (); a_toolbar_uninit (); a_background_uninit (); a_mapcache_uninit (); a_dems_uninit (); a_layer_defaults_uninit (); a_preferences_uninit (); a_settings_uninit (); modules_uninit(); curl_download_uninit(); vu_finalize_lat_lon_tz_lookup (); // Clean up any temporary files util_remove_all_in_deletion_list (); return 0; }
int main( int argc, char *argv[] ) { VikWindow *first_window; GdkPixbuf *main_icon; gboolean dashdash_already = FALSE; int i = 0; GError *error = NULL; gboolean gui_initialized; bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #if ! GLIB_CHECK_VERSION (2, 32, 0) g_thread_init ( NULL ); #endif gdk_threads_init (); gui_initialized = gtk_init_with_args (&argc, &argv, "files+", entries, NULL, &error); if (!gui_initialized) { /* check if we have an error message */ if (error == NULL) { /* no error message, the GUI initialization failed */ const gchar *display_name = gdk_get_display_arg_name (); g_fprintf (stderr, "Failed to open display: %s\n", (display_name != NULL) ? display_name : " "); } else { /* yep, there's an error, so print it */ g_fprintf (stderr, "Parsing command line options failed: %s\n", error->message); g_error_free (error); g_fprintf (stderr, "Run \"%s --help\" to see the list of recognized options.\n",argv[0]); } return EXIT_FAILURE; } if (vik_version) { g_printf ("%s %s\nCopyright (c) 2003-2008 Evan Battaglia\nCopyright (c) 2008-2012 Viking's contributors\n", PACKAGE_NAME, PACKAGE_VERSION); return EXIT_SUCCESS; } #if GLIB_CHECK_VERSION (2, 32, 0) if (vik_debug) g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, log_debug, NULL); #else if (!vik_debug) g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, mute_log, NULL); #endif #if HAVE_X11_XLIB_H XSetErrorHandler(myXErrorHandler); #endif // Discover if this is the very first run a_vik_very_first_run (); a_settings_init (); a_preferences_init (); a_vik_preferences_init (); a_layer_defaults_init (); a_download_init(); curl_download_init(); a_babel_init (); /* Init modules/plugins */ modules_init(); maps_layer_init (); a_mapcache_init (); a_background_init (); #ifdef VIK_CONFIG_GEOCACHES a_datasource_gc_init(); #endif vik_routing_prefs_init(); /* Set the icon */ main_icon = gdk_pixbuf_from_pixdata(&viking_pixbuf, FALSE, NULL); gtk_window_set_default_icon(main_icon); gdk_threads_enter (); // Ask for confirmation of default settings on first run set_auto_features_on_first_run (); /* Create the first window */ first_window = vik_window_new_window(); check_latest_version ( GTK_WINDOW(first_window) ); while ( ++i < argc ) { if ( strcmp(argv[i],"--") == 0 && !dashdash_already ) dashdash_already = TRUE; /* hack to open '-' */ else { VikWindow *newvw = first_window; gboolean change_filename = (i == 1); // Open any subsequent .vik files in their own window if ( i > 1 && check_file_magic_vik ( argv[i] ) ) { newvw = vik_window_new_window (); change_filename = TRUE; } vik_window_open_file ( newvw, argv[i], change_filename ); } } vik_window_new_window_finish ( first_window ); gtk_main (); gdk_threads_leave (); a_babel_uninit (); a_background_uninit (); a_mapcache_uninit (); a_dems_uninit (); a_layer_defaults_uninit (); a_preferences_uninit (); a_settings_uninit (); curl_download_uninit(); return 0; }