]> Dogcows Code - chaz/openbox/blobdiff - openbox/screen.c
when placing transients in the stacking order, only use relatives that are on screen...
[chaz/openbox] / openbox / screen.c
index 2ada74384de4ee3c54142a2af6e28b5960a76d6c..5f1991d39b10bd4b6665119ee5624cb01072ee88 100644 (file)
@@ -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,6 +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_theme;
     supported[i++] = prop_atoms.ob_control;
     g_assert(i == num_support);
 
@@ -301,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;
@@ -504,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);
 
@@ -519,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);
 
@@ -568,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;
This page took 0.022549 seconds and 4 git commands to generate.