--- rxvt-unicode/src/init.C 2011/05/30 18:39:03 1.296 +++ rxvt-unicode/src/init.C 2011/12/03 11:47:31 1.303 @@ -57,6 +57,11 @@ # include #endif +#ifdef HAVE_STARTUP_NOTIFICATION +# define SN_API_NOT_YET_FROZEN +# include +#endif + #ifdef DISPLAY_IS_IP /* On Solaris link with -lsocket and -lnsl */ #include @@ -607,10 +612,7 @@ get_options (r_argc, r_argv); if (!(display = displays.get (rs[Rs_display_name]))) - { - free (r_argv); - rxvt_fatal ("can't open display %s, aborting.\n", rs[Rs_display_name]); - } + rxvt_fatal ("can't open display %s, aborting.\n", rs[Rs_display_name]); // using a local pointer decreases code size a lot xa = display->xa; @@ -629,15 +631,6 @@ if (rs [i] == resval_undef) rs [i] = 0; -#ifdef HAVE_AFTERIMAGE - set_application_name ((char *)rs[Rs_name]); - set_output_threshold (OUTPUT_LEVEL_WARNING); -#endif - -#ifdef HAVE_PIXBUF - g_type_init (); -#endif - #if ENABLE_PERL if (!rs[Rs_perl_ext_1]) rs[Rs_perl_ext_1] = "default"; @@ -651,6 +644,10 @@ } #endif + // must be called after initialising the perl interpreter as it + // may invoke the `on_register_command' hook + extract_keysym_resources (); + /* * set any defaults not already set */ @@ -795,10 +792,20 @@ } if (option (Opt_scrollBar)) - scrollBar.state = STATE_IDLE; /* set existence for size calculations */ + scrollBar.state = SB_STATE_IDLE; /* set existence for size calculations */ pty = ptytty::create (); +#ifdef HAVE_AFTERIMAGE + set_application_name ((char *)rs[Rs_name]); + set_output_threshold (OUTPUT_LEVEL_WARNING); +#endif + + // must be called before create_windows, because the latter may call set_icon +#ifdef HAVE_PIXBUF + g_type_init (); +#endif + create_windows (argc, argv); init_xlocale (); @@ -838,16 +845,6 @@ #ifdef BG_IMAGE_FROM_FILE if (rs[Rs_backgroundPixmap]) { - const char *p = rs[Rs_backgroundPixmap]; - - if ((p = strchr (p, ';')) != 0) - { - p++; - bg_set_geometry (p); - } - else - bg_set_default_geometry (); - if (bg_set_file (rs[Rs_backgroundPixmap])) if (!bg_window_position_sensitive ()) update_background (); @@ -881,9 +878,33 @@ } #endif +#if HAVE_STARTUP_NOTIFICATION + SnDisplay *snDisplay; + SnLauncheeContext *snContext; + + snDisplay = sn_display_new (dpy, NULL, NULL); + snContext = sn_launchee_context_new_from_environment (snDisplay, DefaultScreen (dpy)); + + /* Tell the window manager that this window is part of the startup context */ + if (snContext) + sn_launchee_context_setup_window (snContext, parent); +#endif + XMapWindow (dpy, vt); XMapWindow (dpy, parent); +#if HAVE_STARTUP_NOTIFICATION + if (snContext) + { + /* Mark the startup process as complete */ + sn_launchee_context_complete (snContext); + + sn_launchee_context_unref (snContext); + } + + sn_display_unref (snDisplay); +#endif + refresh_check (); }