static int gdk_x_io_error (Display *display) { /* This is basically modelled after the code in XLib. We need * an explicit error handler here, so we can disable our atexit() * which would otherwise cause a nice segfault. * We fprintf(stderr, instead of g_warning() because g_warning() * could possibly be redirected to a dialog */ if (errno == EPIPE) { g_warning ("The application '%s' lost its connection to the display %s;\n" "most likely the X server was shut down or you killed/destroyed\n" "the application.\n", g_get_prgname (), display ? DisplayString (display) : gdk_get_display_arg_name ()); } else { g_warning ("%s: Fatal IO error %d (%s) on X server %s.\n", g_get_prgname (), errno, g_strerror (errno), display ? DisplayString (display) : gdk_get_display_arg_name ()); } _exit (1); }
/** * gdk_init: * @argc: (inout): the number of command line arguments. * @argv: (array length=argc) (inout): the array of command line arguments. * * Initializes the GDK library and connects to the windowing system. * If initialization fails, a warning message is output and the application * terminates with a call to `exit(1)`. * * Any arguments used by GDK are removed from the array and @argc and @argv * are updated accordingly. * * GTK+ initializes GDK in gtk_init() and so this function is not usually * needed by GTK+ applications. */ void gdk_init (int *argc, char ***argv) { if (!gdk_init_check (argc, argv)) { const char *display_name = gdk_get_display_arg_name (); g_warning ("cannot open display: %s", display_name ? display_name : ""); exit(1); } }
static VALUE rg_s_init(int argc, VALUE *argv, VALUE self) { gint i, gargc; VALUE argary; char** gargv; VALUE progname; if (_initialized) return self; else _initialized = TRUE; rb_scan_args(argc, argv, "01", &argary); if (NIL_P(argary)){ argary = rb_const_get(rb_cObject, rb_intern("ARGV")); gargc = RARRAY_LEN(argary); } else { Check_Type(argary, T_ARRAY); gargc = RARRAY_LEN(argary); } gargv = ALLOCA_N(char *, gargc + 1); progname = rb_gv_get("$0"); gargv[0] = (char *)RVAL2CSTR(progname); for (i = 0; i < gargc; i++) if (TYPE(RARRAY_PTR(argary)[i]) == T_STRING) gargv[i+1] = (char *)RVAL2CSTR(RARRAY_PTR(argary)[i]); else gargv[i+1] = (char *)""; gargc++; { gboolean is_initialized; is_initialized = gtk_init_check(&gargc, &gargv); if (! is_initialized) { const char *display_name_arg = gdk_get_display_arg_name(); display_name_arg = display_name_arg ? display_name_arg : g_getenv("DISPLAY"); rb_raise(rbgtk_eGtkInitError, "Cannot open display: %s", display_name_arg ? display_name_arg : " "); } setlocale(LC_NUMERIC, "C"); } return self; }
/*< private > * gdk_display_open_default: * * Opens the default display specified by command line arguments or * environment variables, sets it as the default display, and returns * it. gdk_parse_args() must have been called first. If the default * display has previously been set, simply returns that. An internal * function that should not be used by applications. * * Returns: (nullable) (transfer none): the default display, if it * could be opened, otherwise %NULL. */ GdkDisplay * gdk_display_open_default (void) { GdkDisplay *display; g_return_val_if_fail (gdk_initialized, NULL); display = gdk_display_get_default (); if (display) return display; display = gdk_display_open (gdk_get_display_arg_name ()); return display; }
static int rbgdk_x_io_error(Display *display) { int errno_saved = errno; const gchar* disp; const gchar* error; disp = display ? DisplayString(display) : gdk_get_display_arg_name(); if (! disp) disp = "(none)"; error = g_strerror(errno_saved); rb_funcall((VALUE)rb_x_io_error, id_call, 3, CSTR2RVAL(disp), INT2NUM(errno), CSTR2RVAL(error)); return 0; }
/** * gdk_display_open_default_libgtk_only: * * Opens the default display specified by command line arguments or * environment variables, sets it as the default display, and returns * it. gdk_parse_args() must have been called first. If the default * display has previously been set, simply returns that. An internal * function that should not be used by applications. * * Return value: (transfer none): the default display, if it could be * opened, otherwise %NULL. **/ GdkDisplay * gdk_display_open_default_libgtk_only (void) { GdkDisplay *display; g_return_val_if_fail (gdk_initialized, NULL); if (gdk_display_manager_peek () == NULL) return NULL; display = gdk_display_get_default (); if (display) return display; display = gdk_display_open (gdk_get_display_arg_name ()); return display; }
static VALUE gdk_s_get_display_arg_name(VALUE self) { return CSTR2RVAL(gdk_get_display_arg_name()); }
G_CONST_RETURN gchar * gdk_display_get_name (GdkDisplay *display) { return gdk_get_display_arg_name (); }
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) { ThunarSessionClient *session_client; #ifdef HAVE_DBUS ThunarDBusService *dbus_service = NULL; #endif ThunarApplication *application; GError *error = NULL; gchar *working_directory; gchar **filenames = NULL; const gchar *startup_id; /* setup translation domain */ xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); /* setup application name */ g_set_application_name (_("Thunar")); #ifdef G_ENABLE_DEBUG /* Do NOT remove this line for now, If something doesn't work, * fix your code instead! */ g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING); #endif #if !GLIB_CHECK_VERSION (2, 32, 0) /* initialize the GThread system */ if (!g_thread_supported ()) g_thread_init (NULL); #endif /* get the startup notification id */ startup_id = g_getenv ("DESKTOP_STARTUP_ID"); /* initialize Gtk+ */ if (!gtk_init_with_args (&argc, &argv, _("[FILES...]"), option_entries, GETTEXT_PACKAGE, &error)) { /* check if we have an error message */ if (G_LIKELY (error == NULL)) { /* no error message, the GUI initialization failed */ const gchar *display_name = gdk_get_display_arg_name (); g_printerr (_("Thunar: Failed to open display: %s\n"), (display_name != NULL) ? display_name : " "); } else { /* yep, there's an error, so print it */ g_printerr (_("Thunar: %s\n"), error->message); g_error_free (error); } return EXIT_FAILURE; } /* check if we should print version information */ if (G_UNLIKELY (opt_version)) { g_print ("%s %s (Xfce %s)\n\n", PACKAGE_NAME, PACKAGE_VERSION, xfce_version_string ()); g_print ("%s\n", "Copyright (c) 2004-2012"); g_print ("\t%s\n\n", _("The Thunar development team. All rights reserved.")); g_print ("%s\n\n", _("Written by Benedikt Meurer <*****@*****.**>.")); g_print (_("Please report bugs to <%s>."), PACKAGE_BUGREPORT); g_print ("\n"); return EXIT_SUCCESS; } /* initialize xfconf */ if (!xfconf_init (&error)) { g_printerr (PACKAGE_NAME ": Failed to initialize Xfconf: %s\n\n", error->message); g_clear_error (&error); /* disable get/set properties */ thunar_preferences_xfconf_init_failed (); } #ifdef HAVE_GIO_UNIX /* set desktop environment for app infos */ g_desktop_app_info_set_desktop_env ("XFCE"); #endif /* register additional transformation functions */ thunar_g_initialize_transformations (); #ifdef HAVE_DBUS /* check if we should terminate a running Thunar instance */ if (G_UNLIKELY (opt_quit)) { /* try to terminate whatever is running */ if (!thunar_dbus_client_terminate (&error)) { g_printerr ("Thunar: Failed to terminate running instance: %s\n", error->message); g_error_free (error); return EXIT_FAILURE; } return EXIT_SUCCESS; } #endif /* determine the current working directory */ working_directory = g_get_current_dir (); /* check if atleast one filename was specified, else * fall back to opening the current working directory * if daemon mode is not requested. */ if (G_LIKELY (argc > 1)) { /* use the specified filenames */ filenames = g_strdupv (argv + 1); } else if (opt_bulk_rename) { /* default to an empty list */ filenames = g_new (gchar *, 1); filenames[0] = NULL; } else if (!opt_daemon)
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); g_thread_init ( NULL ); 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, Copyright (c) 2003-2007 Evan Battaglia\n", PACKAGE_NAME, PACKAGE_VERSION); return EXIT_SUCCESS; } if (!vik_debug) g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, mute_log, NULL); curl_download_init(); a_preferences_init (); a_vik_preferences_init (); /* Init modules/plugins */ modules_init(); a_mapcache_init (); a_background_init (); #ifdef VIK_CONFIG_GEOCACHES a_datasource_gc_init(); #endif /* Set the icon */ main_icon = gdk_pixbuf_from_pixdata(&viking_pixbuf, FALSE, NULL); gtk_window_set_default_icon(main_icon); /* Create the first window */ first_window = new_window(); gdk_threads_enter (); while ( ++i < argc ) { if ( strcmp(argv[i],"--") == 0 && !dashdash_already ) dashdash_already = TRUE; /* hack to open '-' */ else vik_window_open_file ( first_window, argv[i], argc == 2 ); } gtk_main (); gdk_threads_leave (); a_background_uninit (); a_mapcache_uninit (); a_dems_uninit (); a_preferences_uninit (); 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; }
static VALUE rg_m_display_arg_name(G_GNUC_UNUSED VALUE self) { return CSTR2RVAL(gdk_get_display_arg_name()); }
static VALUE rg_m_init(int argc, VALUE *argv, VALUE self) { gint i, gargc; VALUE argary; char** gargv; VALUE progname; if (_initialized) return self; else _initialized = TRUE; rb_scan_args(argc, argv, "01", &argary); if (NIL_P(argary)){ argary = rb_const_get(rb_cObject, rb_intern("ARGV")); gargc = RARRAY_LEN(argary); } else { Check_Type(argary, T_ARRAY); gargc = RARRAY_LEN(argary); } gargv = ALLOCA_N(char *, gargc + 1); progname = rb_gv_get("$0"); gargv[0] = (char *)RVAL2CSTR(progname); for (i = 0; i < gargc; i++) if (TYPE(RARRAY_PTR(argary)[i]) == T_STRING) gargv[i+1] = (char *)RVAL2CSTR(RARRAY_PTR(argary)[i]); else gargv[i+1] = (char *)""; gargc++; { gboolean is_initialized; /* Gdk modifies sighandlers, sigh */ #ifdef NT RETSIGTYPE (*sigfunc[3])(); #else RETSIGTYPE (*sigfunc[7])(); #endif #ifdef NT sigfunc[0] = signal(SIGINT, SIG_IGN); sigfunc[1] = signal(SIGSEGV, SIG_IGN); sigfunc[2] = signal(SIGTERM, SIG_IGN); #else sigfunc[0] = signal(SIGHUP, SIG_IGN); sigfunc[1] = signal(SIGINT, SIG_IGN); sigfunc[2] = signal(SIGQUIT, SIG_IGN); sigfunc[3] = signal(SIGBUS, SIG_IGN); sigfunc[4] = signal(SIGSEGV, SIG_IGN); sigfunc[5] = signal(SIGPIPE, SIG_IGN); sigfunc[6] = signal(SIGTERM, SIG_IGN); #endif is_initialized = gtk_init_check(&gargc, &gargv); if (! is_initialized) { const char *display_name_arg = gdk_get_display_arg_name(); display_name_arg = display_name_arg ? display_name_arg : g_getenv("DISPLAY"); rb_raise(rbgtk_eGtkInitError, "Cannot open display: %s", display_name_arg ? display_name_arg : " "); } setlocale(LC_NUMERIC, "C"); #ifdef NT signal(SIGINT, (SignalFunc)sigfunc[0]); signal(SIGSEGV, (SignalFunc)sigfunc[1]); signal(SIGTERM, (SignalFunc)sigfunc[2]); #else signal(SIGHUP, sigfunc[0]); signal(SIGINT, sigfunc[1]); signal(SIGQUIT, sigfunc[2]); signal(SIGBUS, sigfunc[3]); signal(SIGSEGV, sigfunc[4]); signal(SIGPIPE, sigfunc[5]); signal(SIGTERM, sigfunc[6]); #endif } return self; }
const gchar * gdk_display_get_name (GdkDisplay *display) { return gdk_get_display_arg_name (); }
static void init_xcb() { const xcb_query_extension_reply_t *qer; const xcb_setup_t *setup; xcb_screen_t *screen; xcb_screen_iterator_t screen_iter; xcb_drawable_t win; guint num_screens; guint i; xcb_generic_error_t *err = NULL; /* Open xcb connection */ conn = xcb_connect(gdk_get_display_arg_name(), NULL); if (xcb_connection_has_error(conn)) { g_error("Failed to connect to display\n"); exit(EXIT_FAILURE); } /* query the version to prevent error 16 when setting config */ xcb_randr_query_version_unchecked(conn, 1, 5); qer = xcb_get_extension_data(conn, &xcb_randr_id); if (!qer || !qer->present) { g_error("RandR extension missing\n"); exit(EXIT_FAILURE); } randr_base = qer->first_event; xcb_source = g_xcb_source_new_for_connection(NULL, conn); g_xcb_source_set_event_callback(xcb_source, on_xcb_event, NULL); /* get the screens */ setup = xcb_get_setup(conn); screen_iter = xcb_setup_roots_iterator(setup); num_screens = setup->roots_len; /* Set up space for cookies */ xcb_randr_get_screen_info_cookie_t get_screen_info_cookies[num_screens]; for (i = 0; i < num_screens; i++) { /* Get root window */ screen = screen_iter.data; win = screen->root; /* Register for screen change events */ xcb_randr_select_input(conn, win, XCB_RANDR_NOTIFY_MASK_SCREEN_CHANGE); /* Get screen info */ get_screen_info_cookies[i] = xcb_randr_get_screen_info_unchecked(conn, win); xcb_screen_next(&screen_iter); } /* TODO: detect adding and removal of screens */ xcb_flush(conn); /* Get screen info replies */ for (i = 0; i < num_screens; i++) { xcb_randr_get_screen_info_reply_t *reply = xcb_randr_get_screen_info_reply(conn, get_screen_info_cookies[i], &err); if (err) { g_warning("Error getting info for screen %u\n", i); err = NULL; continue; } add_screen(reply); free(reply); } xcb_flush(conn); }