summaryrefslogtreecommitdiff
path: root/src/compositor/compositor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/compositor/compositor.c')
-rw-r--r--src/compositor/compositor.c94
1 files changed, 26 insertions, 68 deletions
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index 90c9e817e..fd1a75a88 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -54,15 +54,9 @@
#include "compositor/compositor-private.h"
-#include <X11/extensions/Xcomposite.h>
-
-#include "backends/x11/meta-backend-x11.h"
-#include "backends/x11/meta-event-x11.h"
-#include "backends/x11/meta-stage-x11.h"
#include "clutter/clutter-mutter.h"
#include "cogl/cogl.h"
#include "compositor/meta-later-private.h"
-#include "compositor/meta-window-actor-x11.h"
#include "compositor/meta-window-actor-private.h"
#include "compositor/meta-window-group-private.h"
#include "core/frame.h"
@@ -75,16 +69,27 @@
#include "meta/meta-background-group.h"
#include "meta/meta-context.h"
#include "meta/meta-shadow-factory.h"
-#include "meta/meta-x11-errors.h"
#include "meta/prefs.h"
#include "meta/window.h"
-#include "x11/meta-x11-display-private.h"
#ifdef HAVE_WAYLAND
#include "compositor/meta-window-actor-wayland.h"
#include "wayland/meta-wayland-private.h"
#endif
+#ifdef HAVE_X11_CLIENT
+#include <X11/extensions/Xcomposite.h>
+
+#include "backends/x11/meta-backend-x11.h"
+#include "backends/x11/meta-event-x11.h"
+#include "backends/x11/meta-stage-x11.h"
+
+#include "compositor/meta-window-actor-x11.h"
+
+#include "meta/meta-x11-errors.h"
+#include "x11/meta-x11-display-private.h"
+#endif
+
enum
{
PROP_0,
@@ -327,6 +332,7 @@ void
meta_focus_stage_window (MetaDisplay *display,
guint32 timestamp)
{
+#ifdef HAVE_X11_CLIENT
ClutterStage *stage;
Window window;
@@ -342,18 +348,19 @@ meta_focus_stage_window (MetaDisplay *display,
meta_x11_display_set_input_focus_xwindow (display->x11_display,
window,
timestamp);
+#endif
}
gboolean
meta_stage_is_focused (MetaDisplay *display)
{
- ClutterStage *stage;
- Window window;
-
if (meta_is_wayland_compositor ())
return TRUE;
- stage = CLUTTER_STAGE (meta_get_stage_for_display (display));
+#ifdef HAVE_X11_CLIENT
+ ClutterStage *stage = CLUTTER_STAGE (meta_get_stage_for_display (display));
+ Window window;
+
if (!stage)
return FALSE;
@@ -363,6 +370,9 @@ meta_stage_is_focused (MetaDisplay *display)
return FALSE;
return (display->x11_display->focus_xwindow == window);
+#else
+ return FALSE;
+#endif
}
void
@@ -377,62 +387,6 @@ meta_compositor_grab_end (MetaCompositor *compositor)
META_COMPOSITOR_GET_CLASS (compositor)->grab_end (compositor);
}
-static void
-redirect_windows (MetaCompositor *compositor,
- MetaX11Display *x11_display)
-{
- MetaDisplay *display = meta_compositor_get_display (compositor);
- MetaContext *context = meta_display_get_context (display);
- Display *xdisplay = meta_x11_display_get_xdisplay (x11_display);
- Window xroot = meta_x11_display_get_xroot (x11_display);
- int screen_number = meta_x11_display_get_screen_number (x11_display);
- guint n_retries;
- guint max_retries;
-
- if (meta_context_is_replacing (context))
- max_retries = 5;
- else
- max_retries = 1;
-
- n_retries = 0;
-
- /* Some compositors (like old versions of Mutter) might not properly unredirect
- * subwindows before destroying the WM selection window; so we wait a while
- * for such a compositor to exit before giving up.
- */
- while (TRUE)
- {
- meta_x11_error_trap_push (x11_display);
- XCompositeRedirectSubwindows (xdisplay, xroot, CompositeRedirectManual);
- XSync (xdisplay, FALSE);
-
- if (!meta_x11_error_trap_pop_with_return (x11_display))
- break;
-
- if (n_retries == max_retries)
- {
- /* This probably means that a non-WM compositor like xcompmgr is running;
- * we have no way to get it to exit */
- meta_fatal (_("Another compositing manager is already running on screen %i on display ā€œ%sā€."),
- screen_number, x11_display->name);
- }
-
- n_retries++;
- g_usleep (G_USEC_PER_SEC);
- }
-}
-
-void
-meta_compositor_redirect_x11_windows (MetaCompositor *compositor)
-{
- MetaCompositorPrivate *priv =
- meta_compositor_get_instance_private (compositor);
- MetaDisplay *display = priv->display;
-
- if (display->x11_display)
- redirect_windows (compositor, display->x11_display);
-}
-
static MetaCompositorView *
meta_compositor_create_view (MetaCompositor *compositor,
ClutterStageView *stage_view)
@@ -514,9 +468,11 @@ meta_compositor_add_window (MetaCompositor *compositor,
switch (window->client_type)
{
+#ifdef HAVE_X11_CLIENT
case META_WINDOW_CLIENT_TYPE_X11:
window_actor_type = META_TYPE_WINDOW_ACTOR_X11;
break;
+#endif
#ifdef HAVE_WAYLAND
case META_WINDOW_CLIENT_TYPE_WAYLAND:
@@ -602,7 +558,9 @@ meta_compositor_window_shape_changed (MetaCompositor *compositor,
if (!window_actor)
return;
+#ifdef HAVE_X11_CLIENT
meta_window_actor_x11_update_shape (META_WINDOW_ACTOR_X11 (window_actor));
+#endif
}
void