compositor: Move out X11 compositing code into sub type

Introduce MetaCompositorX11, dealing with being a X11 compositor, and
MetaCompositorServer, being a compositor while also being the display
server itself, e.g. a Wayland display server.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/727
This commit is contained in:
Jonas Ådahl
2019-08-14 23:25:54 +02:00
committed by Georges Basile Stavracas Neto
parent 9af90bf9c1
commit 984aad4b86
13 changed files with 679 additions and 383 deletions

View File

@ -27,11 +27,14 @@
#include <xkbcommon/xkbcommon-x11.h>
#include "backends/meta-backend-private.h"
#include "backends/meta-dnd-private.h"
#include "backends/x11/meta-cursor-renderer-x11.h"
#include "backends/x11/meta-gpu-xrandr.h"
#include "backends/x11/meta-input-settings-x11.h"
#include "backends/x11/meta-monitor-manager-xrandr.h"
#include "backends/x11/cm/meta-renderer-x11-cm.h"
#include "compositor/meta-compositor-x11.h"
#include "core/display-private.h"
struct _MetaBackendX11Cm
{
@ -328,6 +331,20 @@ meta_backend_x11_cm_handle_host_xevent (MetaBackendX11 *backend_x11,
MetaMonitorManagerXrandr *monitor_manager_xrandr =
META_MONITOR_MANAGER_XRANDR (monitor_manager);
Display *xdisplay = meta_backend_x11_get_xdisplay (x11);
gboolean bypass_clutter = FALSE;
MetaDisplay *display;
display = meta_get_display ();
if (display)
{
MetaCompositor *compositor = display->compositor;
MetaCompositorX11 *compositor_x11 = META_COMPOSITOR_X11 (compositor);
Display *xdisplay = meta_backend_x11_get_xdisplay (x11);
if (meta_dnd_handle_xdnd_event (backend, compositor_x11,
xdisplay, event))
bypass_clutter = TRUE;
}
if (event->type == meta_backend_x11_get_xkb_event_base (x11))
{
@ -351,8 +368,10 @@ meta_backend_x11_cm_handle_host_xevent (MetaBackendX11 *backend_x11,
}
}
return meta_monitor_manager_xrandr_handle_xevent (monitor_manager_xrandr,
event);
bypass_clutter |=
meta_monitor_manager_xrandr_handle_xevent (monitor_manager_xrandr, event);
return bypass_clutter;
}
static void

View File

@ -42,7 +42,6 @@
#include <string.h>
#include <xkbcommon/xkbcommon-x11.h>
#include "backends/meta-dnd-private.h"
#include "backends/meta-idle-monitor-private.h"
#include "backends/meta-stage-private.h"
#include "backends/x11/meta-clutter-backend-x11.h"
@ -326,25 +325,20 @@ handle_host_xevent (MetaBackend *backend,
MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
gboolean bypass_clutter = FALSE;
MetaDisplay *display;
XGetEventData (priv->xdisplay, &event->xcookie);
{
MetaDisplay *display = meta_get_display ();
display = meta_get_display ();
if (display)
{
MetaCompositor *compositor = display->compositor;
MetaPluginManager *plugin_mgr =
meta_compositor_get_plugin_manager (compositor);
if (display)
{
MetaCompositor *compositor = display->compositor;
MetaPluginManager *plugin_mgr =
meta_compositor_get_plugin_manager (compositor);
if (meta_plugin_manager_xevent_filter (plugin_mgr, event))
bypass_clutter = TRUE;
if (meta_dnd_handle_xdnd_event (backend, compositor, priv->xdisplay, event))
bypass_clutter = TRUE;
}
}
if (meta_plugin_manager_xevent_filter (plugin_mgr, event))
bypass_clutter = TRUE;
}
bypass_clutter = (meta_backend_x11_handle_host_xevent (x11, event) ||
bypass_clutter);