Conditionalize Wayland support again

This commit is contained in:
Jasper St. Pierre 2014-08-13 20:19:35 -04:00
parent 467465c99c
commit 5f0fab2156
14 changed files with 72 additions and 14 deletions

View File

@ -79,12 +79,9 @@ MUTTER_PC_MODULES="
xcomposite >= 0.2 xfixes xext xdamage xi >= 1.6.0 xcomposite >= 0.2 xfixes xext xdamage xi >= 1.6.0
xcursor xcursor
$CLUTTER_PACKAGE >= 1.19.5 $CLUTTER_PACKAGE >= 1.19.5
clutter-wayland-1.0
clutter-wayland-compositor-1.0
clutter-egl-1.0 clutter-egl-1.0
cogl-1.0 >= 1.17.1 cogl-1.0 >= 1.17.1
libinput libinput
wayland-server >= 1.5.90
upower-glib >= 0.99.0 upower-glib >= 0.99.0
gnome-desktop-3.0 gnome-desktop-3.0
xkbfile xkbfile
@ -202,6 +199,12 @@ if test $have_native_backend = yes; then
fi fi
AM_CONDITIONAL([HAVE_NATIVE_BACKEND],[test $have_native_backend = yes]) AM_CONDITIONAL([HAVE_NATIVE_BACKEND],[test $have_native_backend = yes])
PKG_CHECK_MODULES(MUTTER_WAYLAND, [clutter-wayland-1.0 clutter-wayland-compositor-1.0 wayland-server >= 1.5.90], [have_wayland=yes], [have_wayland=no])
if test $have_wayland = yes; then
AC_DEFINE([HAVE_WAYLAND],[1],[Define if you want to enable Wayland support])
fi
AM_CONDITIONAL([HAVE_WAYLAND],[test $have_wayland = yes])
PKG_CHECK_EXISTS([xi >= 1.6.99.1], PKG_CHECK_EXISTS([xi >= 1.6.99.1],
AC_DEFINE([HAVE_XI23],[1],[Define if you have support for XInput 2.3 or greater])) AC_DEFINE([HAVE_XI23],[1],[Define if you have support for XInput 2.3 or greater]))

View File

@ -115,8 +115,6 @@ libmutter_la_SOURCES = \
compositor/meta-surface-actor.h \ compositor/meta-surface-actor.h \
compositor/meta-surface-actor-x11.c \ compositor/meta-surface-actor-x11.c \
compositor/meta-surface-actor-x11.h \ compositor/meta-surface-actor-x11.h \
compositor/meta-surface-actor-wayland.c \
compositor/meta-surface-actor-wayland.h \
compositor/meta-texture-rectangle.c \ compositor/meta-texture-rectangle.c \
compositor/meta-texture-rectangle.h \ compositor/meta-texture-rectangle.h \
compositor/meta-texture-tower.c \ compositor/meta-texture-tower.c \
@ -212,7 +210,12 @@ libmutter_la_SOURCES = \
x11/window-x11-private.h \ x11/window-x11-private.h \
x11/xprops.c \ x11/xprops.c \
x11/xprops.h \ x11/xprops.h \
x11/mutter-Xatomtype.h \ x11/mutter-Xatomtype.h
if HAVE_WAYLAND
libmutter_la_SOURCES += \
compositor/meta-surface-actor-wayland.c \
compositor/meta-surface-actor-wayland.h \
wayland/meta-wayland.c \ wayland/meta-wayland.c \
wayland/meta-wayland.h \ wayland/meta-wayland.h \
wayland/meta-wayland-private.h \ wayland/meta-wayland-private.h \
@ -237,6 +240,7 @@ libmutter_la_SOURCES = \
wayland/meta-wayland-outputs.h \ wayland/meta-wayland-outputs.h \
wayland/window-wayland.c \ wayland/window-wayland.c \
wayland/window-wayland.h wayland/window-wayland.h
endif
if HAVE_NATIVE_BACKEND if HAVE_NATIVE_BACKEND
libmutter_la_SOURCES += \ libmutter_la_SOURCES += \

View File

@ -31,7 +31,6 @@
#include <meta/util.h> #include <meta/util.h>
#include <cogl/cogl.h> #include <cogl/cogl.h>
#include <cogl/cogl-wayland-server.h>
#include <clutter/clutter.h> #include <clutter/clutter.h>
#include "meta-stage.h" #include "meta-stage.h"

View File

@ -34,7 +34,6 @@
#include <meta/errors.h> #include <meta/errors.h>
#include <cogl/cogl.h> #include <cogl/cogl.h>
#include <cogl/cogl-wayland-server.h>
#include <clutter/clutter.h> #include <clutter/clutter.h>
#include <gdk/gdk.h> #include <gdk/gdk.h>

View File

@ -39,7 +39,9 @@
#include <X11/extensions/Xfixes.h> #include <X11/extensions/Xfixes.h>
#include <X11/Xcursor/Xcursor.h> #include <X11/Xcursor/Xcursor.h>
#ifdef HAVE_WAYLAND
#include <cogl/cogl-wayland-server.h> #include <cogl/cogl-wayland-server.h>
#endif
MetaCursorReference * MetaCursorReference *
meta_cursor_reference_ref (MetaCursorReference *self) meta_cursor_reference_ref (MetaCursorReference *self)
@ -247,6 +249,7 @@ meta_cursor_reference_from_theme (MetaCursor cursor)
return self; return self;
} }
#ifdef HAVE_WAYLAND
static void static void
meta_cursor_image_load_from_buffer (MetaCursorImage *image, meta_cursor_image_load_from_buffer (MetaCursorImage *image,
struct wl_resource *buffer, struct wl_resource *buffer,
@ -345,6 +348,7 @@ meta_cursor_reference_from_buffer (struct wl_resource *buffer,
return self; return self;
} }
#endif
CoglTexture * CoglTexture *
meta_cursor_reference_get_cogl_texture (MetaCursorReference *cursor, meta_cursor_reference_get_cogl_texture (MetaCursorReference *cursor,

View File

@ -28,13 +28,15 @@ MetaCursorReference * meta_cursor_reference_ref (MetaCursorReference *cursor);
void meta_cursor_reference_unref (MetaCursorReference *cursor); void meta_cursor_reference_unref (MetaCursorReference *cursor);
#include <meta/common.h> #include <meta/common.h>
#include <wayland-server.h>
MetaCursorReference * meta_cursor_reference_from_theme (MetaCursor cursor); MetaCursorReference * meta_cursor_reference_from_theme (MetaCursor cursor);
#ifdef HAVE_WAYLAND
#include <wayland-server.h>
MetaCursorReference * meta_cursor_reference_from_buffer (struct wl_resource *buffer, MetaCursorReference * meta_cursor_reference_from_buffer (struct wl_resource *buffer,
int hot_x, int hot_x,
int hot_y); int hot_y);
#endif
MetaCursor meta_cursor_reference_get_meta_cursor (MetaCursorReference *cursor); MetaCursor meta_cursor_reference_get_meta_cursor (MetaCursorReference *cursor);

View File

@ -41,7 +41,6 @@
#include "dbus-utils.h" #include "dbus-utils.h"
#include "meta-dbus-login1.h" #include "meta-dbus-login1.h"
#include "wayland/meta-wayland-private.h"
#include "backends/meta-backend-private.h" #include "backends/meta-backend-private.h"
#include "meta-cursor-renderer-native.h" #include "meta-cursor-renderer-native.h"

View File

@ -396,8 +396,10 @@ after_stage_paint (ClutterStage *stage,
for (l = compositor->windows; l; l = l->next) for (l = compositor->windows; l; l = l->next)
meta_window_actor_post_paint (l->data); meta_window_actor_post_paint (l->data);
#ifdef HAVE_WAYLAND
if (meta_is_wayland_compositor ()) if (meta_is_wayland_compositor ())
meta_wayland_compositor_paint_finished (meta_wayland_compositor_get_default ()); meta_wayland_compositor_paint_finished (meta_wayland_compositor_get_default ());
#endif
} }
static void static void

View File

@ -32,7 +32,10 @@
#include "meta-surface-actor.h" #include "meta-surface-actor.h"
#include "meta-surface-actor-x11.h" #include "meta-surface-actor-x11.h"
#ifdef HAVE_WAYLAND
#include "meta-surface-actor-wayland.h" #include "meta-surface-actor-wayland.h"
#endif
#include "wayland/meta-wayland-surface.h" #include "wayland/meta-wayland-surface.h"
@ -596,6 +599,7 @@ meta_window_actor_get_shape_bounds (MetaWindowActor *self,
cairo_region_get_extents (priv->shape_region, bounds); cairo_region_get_extents (priv->shape_region, bounds);
#ifdef HAVE_WAYLAND
if (META_IS_SURFACE_ACTOR_WAYLAND (priv->surface)) if (META_IS_SURFACE_ACTOR_WAYLAND (priv->surface))
{ {
double scale = priv->surface ? double scale = priv->surface ?
@ -605,6 +609,7 @@ meta_window_actor_get_shape_bounds (MetaWindowActor *self,
bounds->width *= scale; bounds->width *= scale;
bounds->height *= scale; bounds->height *= scale;
} }
#endif
} }
static void static void

View File

@ -70,7 +70,9 @@
#include "x11/group-props.h" #include "x11/group-props.h"
#include "x11/xprops.h" #include "x11/xprops.h"
#ifdef HAVE_WAYLAND
#include "wayland/meta-xwayland-private.h" #include "wayland/meta-xwayland-private.h"
#endif
/* /*
* SECTION:pings * SECTION:pings
@ -468,6 +470,7 @@ meta_set_gnome_wm_keybindings (const char *wm_keybindings)
void void
meta_display_cancel_touch (MetaDisplay *display) meta_display_cancel_touch (MetaDisplay *display)
{ {
#ifdef HAVE_WAYLAND
MetaWaylandCompositor *compositor; MetaWaylandCompositor *compositor;
if (!meta_is_wayland_compositor ()) if (!meta_is_wayland_compositor ())
@ -475,6 +478,7 @@ meta_display_cancel_touch (MetaDisplay *display)
compositor = meta_wayland_compositor_get_default (); compositor = meta_wayland_compositor_get_default ();
meta_wayland_touch_cancel (&compositor->seat->touch); meta_wayland_touch_cancel (&compositor->seat->touch);
#endif
} }
static void static void
@ -545,8 +549,10 @@ meta_display_open (void)
return FALSE; return FALSE;
} }
#ifdef HAVE_WAYLAND
if (meta_is_wayland_compositor ()) if (meta_is_wayland_compositor ())
meta_xwayland_complete_init (); meta_xwayland_complete_init ();
#endif
if (meta_is_syncing ()) if (meta_is_syncing ())
XSynchronize (xdisplay, True); XSynchronize (xdisplay, True);
@ -1436,6 +1442,7 @@ meta_display_queue_autoraise_callback (MetaDisplay *display,
void void
meta_display_sync_wayland_input_focus (MetaDisplay *display) meta_display_sync_wayland_input_focus (MetaDisplay *display)
{ {
#ifdef HAVE_WAYLAND
MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default (); MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default ();
MetaWindow *focus_window = NULL; MetaWindow *focus_window = NULL;
@ -1451,6 +1458,7 @@ meta_display_sync_wayland_input_focus (MetaDisplay *display)
meta_wayland_compositor_set_input_focus (compositor, focus_window); meta_wayland_compositor_set_input_focus (compositor, focus_window);
meta_wayland_seat_repick (compositor->seat); meta_wayland_seat_repick (compositor->seat);
#endif
} }
void void

View File

@ -35,7 +35,9 @@
#endif #endif
#include "x11/events.h" #include "x11/events.h"
#ifdef HAVE_WAYLAND
#include "wayland/meta-wayland-private.h" #include "wayland/meta-wayland-private.h"
#endif
#include "meta-surface-actor.h" #include "meta-surface-actor.h"
static MetaWindow * static MetaWindow *
@ -162,17 +164,20 @@ meta_display_handle_event (MetaDisplay *display,
const ClutterEvent *event) const ClutterEvent *event)
{ {
MetaWindow *window; MetaWindow *window;
gboolean bypass_clutter = FALSE, bypass_wayland = FALSE; gboolean bypass_clutter = FALSE;
MetaWaylandCompositor *compositor = NULL; G_GNUC_UNUSED gboolean bypass_wayland = FALSE;
MetaGestureTracker *tracker; MetaGestureTracker *tracker;
meta_display_update_pointer_emulating_sequence (display, event); meta_display_update_pointer_emulating_sequence (display, event);
#ifdef HAVE_WAYLAND
MetaWaylandCompositor *compositor = NULL;
if (meta_is_wayland_compositor ()) if (meta_is_wayland_compositor ())
{ {
compositor = meta_wayland_compositor_get_default (); compositor = meta_wayland_compositor_get_default ();
meta_wayland_compositor_update (compositor, event); meta_wayland_compositor_update (compositor, event);
} }
#endif
handle_idletime_for_event (event); handle_idletime_for_event (event);
@ -281,11 +286,13 @@ meta_display_handle_event (MetaDisplay *display,
if (display->grab_op == META_GRAB_OP_WAYLAND_POPUP) if (display->grab_op == META_GRAB_OP_WAYLAND_POPUP)
bypass_clutter = TRUE; bypass_clutter = TRUE;
#ifdef HAVE_WAYLAND
if (compositor && !bypass_wayland) if (compositor && !bypass_wayland)
{ {
if (meta_wayland_compositor_handle_event (compositor, event)) if (meta_wayland_compositor_handle_event (compositor, event))
bypass_clutter = TRUE; bypass_clutter = TRUE;
} }
#endif
display->current_time = CurrentTime; display->current_time = CurrentTime;
return bypass_clutter; return bypass_clutter;

View File

@ -78,7 +78,9 @@
#include "x11/session.h" #include "x11/session.h"
#ifdef HAVE_WAYLAND
#include "wayland/meta-wayland.h" #include "wayland/meta-wayland.h"
#endif
/* /*
* The exit code we'll return to our parent process when we eventually die. * The exit code we'll return to our parent process when we eventually die.
@ -160,7 +162,9 @@ static gchar *opt_client_id;
static gboolean opt_replace_wm; static gboolean opt_replace_wm;
static gboolean opt_disable_sm; static gboolean opt_disable_sm;
static gboolean opt_sync; static gboolean opt_sync;
#ifdef HAVE_WAYLAND
static gboolean opt_wayland; static gboolean opt_wayland;
#endif
#ifdef HAVE_NATIVE_BACKEND #ifdef HAVE_NATIVE_BACKEND
static gboolean opt_display_server; static gboolean opt_display_server;
#endif #endif
@ -201,12 +205,14 @@ static GOptionEntry meta_options[] = {
N_("Make X calls synchronous"), N_("Make X calls synchronous"),
NULL NULL
}, },
#ifdef HAVE_WAYLAND
{ {
"wayland", 0, 0, G_OPTION_ARG_NONE, "wayland", 0, 0, G_OPTION_ARG_NONE,
&opt_wayland, &opt_wayland,
N_("Run as a wayland compositor"), N_("Run as a wayland compositor"),
NULL NULL
}, },
#endif
#ifdef HAVE_NATIVE_BACKEND #ifdef HAVE_NATIVE_BACKEND
{ {
"display-server", 0, 0, G_OPTION_ARG_NONE, "display-server", 0, 0, G_OPTION_ARG_NONE,
@ -271,8 +277,10 @@ meta_finalize (void)
meta_display_close (display, meta_display_close (display,
CurrentTime); /* I doubt correct timestamps matter here */ CurrentTime); /* I doubt correct timestamps matter here */
#ifdef HAVE_WAYLAND
if (meta_is_wayland_compositor ()) if (meta_is_wayland_compositor ())
meta_wayland_finalize (); meta_wayland_finalize ();
#endif
} }
static gboolean static gboolean
@ -323,7 +331,9 @@ meta_init (void)
#endif #endif
clutter_set_windowing_backend (CLUTTER_WINDOWING_X11); clutter_set_windowing_backend (CLUTTER_WINDOWING_X11);
#ifdef HAVE_WAYLAND
meta_set_is_wayland_compositor (opt_wayland); meta_set_is_wayland_compositor (opt_wayland);
#endif
if (g_get_home_dir ()) if (g_get_home_dir ())
if (chdir (g_get_home_dir ()) < 0) if (chdir (g_get_home_dir ()) < 0)
@ -336,6 +346,7 @@ meta_init (void)
g_irepository_prepend_search_path (MUTTER_PKGLIBDIR); g_irepository_prepend_search_path (MUTTER_PKGLIBDIR);
#endif #endif
#ifdef HAVE_WAYLAND
if (meta_is_wayland_compositor ()) if (meta_is_wayland_compositor ())
{ {
/* NB: When running as a hybrid wayland compositor we run our own headless X /* NB: When running as a hybrid wayland compositor we run our own headless X
@ -343,6 +354,7 @@ meta_init (void)
meta_wayland_init (); meta_wayland_init ();
} }
else else
#endif
meta_select_display (opt_display_name); meta_select_display (opt_display_name);
meta_set_syncing (opt_sync || (g_getenv ("MUTTER_SYNC") != NULL)); meta_set_syncing (opt_sync || (g_getenv ("MUTTER_SYNC") != NULL));

View File

@ -49,14 +49,17 @@
#include <string.h> #include <string.h>
#include <math.h> #include <math.h>
#include <meta/meta-cursor-tracker.h>
#include "meta/compositor-mutter.h" #include "meta/compositor-mutter.h"
#include "x11/window-x11.h" #include "x11/window-x11.h"
#include "x11/window-props.h" #include "x11/window-props.h"
#include "x11/xprops.h" #include "x11/xprops.h"
#ifdef HAVE_WAYLAND
#include "wayland/window-wayland.h" #include "wayland/window-wayland.h"
#include "wayland/meta-wayland-private.h" #include "wayland/meta-wayland-private.h"
#endif
#include "backends/meta-backend-private.h" #include "backends/meta-backend-private.h"
@ -779,8 +782,12 @@ _meta_window_shared_new (MetaDisplay *display,
if (client_type == META_WINDOW_CLIENT_TYPE_X11) if (client_type == META_WINDOW_CLIENT_TYPE_X11)
window = g_object_new (META_TYPE_WINDOW_X11, NULL); window = g_object_new (META_TYPE_WINDOW_X11, NULL);
else #ifdef HAVE_WAYLAND
else if (client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
window = g_object_new (META_TYPE_WINDOW_WAYLAND, NULL); window = g_object_new (META_TYPE_WINDOW_WAYLAND, NULL);
#endif
else
g_assert_not_reached ();
window->constructing = TRUE; window->constructing = TRUE;
@ -1221,6 +1228,7 @@ meta_window_unmanage (MetaWindow *window,
meta_verbose ("Unmanaging %s\n", window->desc); meta_verbose ("Unmanaging %s\n", window->desc);
#ifdef HAVE_WAYLAND
/* This needs to happen for both Wayland and XWayland clients, /* This needs to happen for both Wayland and XWayland clients,
* so it can't be in MetaWindowWayland. */ * so it can't be in MetaWindowWayland. */
if (window->surface) if (window->surface)
@ -1228,6 +1236,7 @@ meta_window_unmanage (MetaWindow *window,
meta_wayland_surface_set_window (window->surface, NULL); meta_wayland_surface_set_window (window->surface, NULL);
window->surface = NULL; window->surface = NULL;
} }
#endif
if (window->visible_to_compositor) if (window->visible_to_compositor)
{ {
@ -2434,8 +2443,10 @@ meta_window_show (MetaWindow *window)
if (did_show) if (did_show)
meta_screen_queue_check_fullscreen (window->screen); meta_screen_queue_check_fullscreen (window->screen);
#ifdef HAVE_WAYLAND
if (did_show && window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND) if (did_show && window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
meta_wayland_compositor_repick (meta_wayland_compositor_get_default ()); meta_wayland_compositor_repick (meta_wayland_compositor_get_default ());
#endif
/* /*
* Now that we have shown the window, we no longer want to consider the * Now that we have shown the window, we no longer want to consider the

View File

@ -1448,12 +1448,15 @@ handle_other_xevent (MetaDisplay *display,
case ClientMessage: case ClientMessage:
if (window) if (window)
{ {
#ifdef HAVE_WAYLAND
if (event->xclient.message_type == display->atom_WL_SURFACE_ID) if (event->xclient.message_type == display->atom_WL_SURFACE_ID)
{ {
guint32 surface_id = event->xclient.data.l[0]; guint32 surface_id = event->xclient.data.l[0];
meta_xwayland_handle_wl_surface_id (window, surface_id); meta_xwayland_handle_wl_surface_id (window, surface_id);
} }
else if (!frame_was_receiver) else
#endif
if (!frame_was_receiver)
meta_window_x11_client_message (window, event); meta_window_x11_client_message (window, event);
} }
else else