X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=5f1991d39b10bd4b6665119ee5624cb01072ee88;hb=5417e5696ec693d41350ed5c12d60114730dbf4c;hp=11d527ee7c4fd43c9cee8c9984155d52d346473e;hpb=b8fded742abad3c43c708ee935f5b58237170a01;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index 11d527ee..5f1991d3 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -52,6 +52,7 @@ static gboolean screen_validate_layout(ObDesktopLayout *l); static gboolean replace_wm(); +static void screen_tell_ksplash(); guint screen_num_desktops; guint screen_num_monitors; @@ -294,7 +295,7 @@ gboolean screen_annex() supported[i++] = prop_atoms.ob_wm_action_undecorate; supported[i++] = prop_atoms.ob_wm_state_undecorated; supported[i++] = prop_atoms.openbox_pid; - supported[i++] = prop_atoms.ob_config; + supported[i++] = prop_atoms.ob_theme; supported[i++] = prop_atoms.ob_control; g_assert(i == num_support); @@ -302,9 +303,45 @@ gboolean screen_annex() net_supported, atom, supported, num_support); g_free(supported); + screen_tell_ksplash(); + return TRUE; } +static void screen_tell_ksplash() +{ + XEvent e; + char **argv; + + argv = g_new(gchar*, 6); + argv[0] = g_strdup("dcop"); + argv[1] = g_strdup("ksplash"); + argv[2] = g_strdup("ksplash"); + argv[3] = g_strdup("upAndRunning(QString)"); + argv[4] = g_strdup("wm started"); + argv[5] = NULL; + + /* tell ksplash through the dcop server command line interface */ + g_spawn_async(NULL, argv, NULL, + G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD | + G_SPAWN_STDERR_TO_DEV_NULL | G_SPAWN_STDOUT_TO_DEV_NULL, + NULL, NULL, NULL, NULL); + g_strfreev(argv); + + /* i'm not sure why we do this, kwin does it, but ksplash doesn't seem to + hear it anyways. perhaps it is for old ksplash. or new ksplash. or + something. oh well. */ + e.xclient.type = ClientMessage; + e.xclient.display = ob_display; + e.xclient.window = RootWindow(ob_display, ob_screen); + e.xclient.message_type = + XInternAtom(ob_display, "_KDE_SPLASH_PROGRESS", False ); + e.xclient.format = 8; + strcpy(e.xclient.data.b, "wm started"); + XSendEvent(ob_display, RootWindow(ob_display, ob_screen), + False, SubstructureNotifyMask, &e ); +} + void screen_startup(gboolean reconfig) { gchar **names = NULL; @@ -505,6 +542,7 @@ void screen_set_desktop(guint num, gboolean dofocus) ObClient *c; GList *it; guint old; + gulong ignore_start; g_assert(num < screen_num_desktops); @@ -520,6 +558,9 @@ void screen_set_desktop(guint num, gboolean dofocus) ob_debug("Moving to desktop %d\n", num+1); + /* ignore enter events caused by the move */ + ignore_start = event_start_ignore_all_enters(); + if (moveresize_client) client_set_desktop(moveresize_client, num, TRUE); @@ -569,7 +610,7 @@ void screen_set_desktop(guint num, gboolean dofocus) } } - event_ignore_all_queued_enters(); + event_end_ignore_all_enters(ignore_start); if (event_curtime != CurrentTime) screen_desktop_user_time = event_curtime;