backends/x11: Update MetaBackend on ClutterEvent processing
This should fix wonky handling of last used device and pointer visibility on X11. At least does on --nested under presence of touchscreen/tablet. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/285>
This commit is contained in:
parent
13330f34f3
commit
a870e6b38d
@ -402,7 +402,7 @@ handle_host_xevent (MetaBackend *backend,
|
||||
if (!bypass_clutter)
|
||||
{
|
||||
handle_input_event (x11, event);
|
||||
meta_x11_handle_event (event);
|
||||
meta_x11_handle_event (backend, event);
|
||||
}
|
||||
|
||||
XFreeEventData (priv->xdisplay, &event->xcookie);
|
||||
|
@ -26,11 +26,13 @@
|
||||
#include <glib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "backends/x11/meta-backend-x11.h"
|
||||
#include "backends/x11/meta-event-x11.h"
|
||||
#include "clutter/clutter-mutter.h"
|
||||
|
||||
/**
|
||||
* meta_x11_handle_event:
|
||||
* @backend: backend
|
||||
* @xevent: pointer to XEvent structure
|
||||
*
|
||||
* This function processes a single X event; it can be used to hook
|
||||
@ -48,13 +50,13 @@
|
||||
* Since: 0.8
|
||||
*/
|
||||
MetaX11FilterReturn
|
||||
meta_x11_handle_event (XEvent *xevent)
|
||||
meta_x11_handle_event (MetaBackend *backend,
|
||||
XEvent *xevent)
|
||||
{
|
||||
MetaX11FilterReturn result;
|
||||
ClutterBackend *backend;
|
||||
ClutterBackend *clutter_backend;
|
||||
ClutterEvent *event;
|
||||
gint spin = 1;
|
||||
MetaClutterBackendX11 *backend_x11;
|
||||
Display *xdisplay;
|
||||
gboolean allocated_event;
|
||||
|
||||
@ -69,16 +71,15 @@ meta_x11_handle_event (XEvent *xevent)
|
||||
|
||||
result = META_X11_FILTER_CONTINUE;
|
||||
|
||||
backend = clutter_get_default_backend ();
|
||||
clutter_backend = meta_backend_get_clutter_backend (backend);
|
||||
|
||||
event = clutter_event_new (CLUTTER_NOTHING);
|
||||
|
||||
backend_x11 = META_CLUTTER_BACKEND_X11 (backend);
|
||||
xdisplay = backend_x11->xdisplay;
|
||||
xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||
|
||||
allocated_event = XGetEventData (xdisplay, &xevent->xcookie);
|
||||
|
||||
if (_clutter_backend_translate_event (backend, xevent, event))
|
||||
if (_clutter_backend_translate_event (clutter_backend, xevent, event))
|
||||
{
|
||||
_clutter_event_push (event, FALSE);
|
||||
|
||||
@ -103,6 +104,7 @@ meta_x11_handle_event (XEvent *xevent)
|
||||
{
|
||||
/* forward the event into clutter for emission etc. */
|
||||
clutter_do_event (event);
|
||||
meta_backend_update_from_event (backend, event);
|
||||
clutter_event_free (event);
|
||||
--spin;
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
#include "backends/x11/meta-clutter-backend-x11.h"
|
||||
|
||||
MetaX11FilterReturn meta_x11_handle_event (XEvent *xevent);
|
||||
MetaX11FilterReturn meta_x11_handle_event (MetaBackend *backend,
|
||||
XEvent *xevent);
|
||||
|
||||
#endif /* META_EVENT_X11_H */
|
||||
|
@ -66,6 +66,8 @@ gboolean meta_compositor_is_unredirect_inhibited (MetaCompositor *compositor);
|
||||
|
||||
MetaDisplay * meta_compositor_get_display (MetaCompositor *compositor);
|
||||
|
||||
MetaBackend * meta_compositor_get_backend (MetaCompositor *compositor);
|
||||
|
||||
MetaWindowActor * meta_compositor_get_top_window_actor (MetaCompositor *compositor);
|
||||
|
||||
ClutterStage * meta_compositor_get_stage (MetaCompositor *compositor);
|
||||
|
@ -1442,6 +1442,15 @@ meta_compositor_get_stage (MetaCompositor *compositor)
|
||||
return CLUTTER_STAGE (meta_backend_get_stage (priv->backend));
|
||||
}
|
||||
|
||||
MetaBackend *
|
||||
meta_compositor_get_backend (MetaCompositor *compositor)
|
||||
{
|
||||
MetaCompositorPrivate *priv =
|
||||
meta_compositor_get_instance_private (compositor);
|
||||
|
||||
return priv->backend;
|
||||
}
|
||||
|
||||
MetaWindowActor *
|
||||
meta_compositor_get_top_window_actor (MetaCompositor *compositor)
|
||||
{
|
||||
|
@ -74,6 +74,7 @@ meta_compositor_x11_process_xevent (MetaCompositorX11 *compositor_x11,
|
||||
{
|
||||
MetaCompositor *compositor = META_COMPOSITOR (compositor_x11);
|
||||
MetaDisplay *display = meta_compositor_get_display (compositor);
|
||||
MetaBackend *backend = meta_compositor_get_backend (compositor);
|
||||
MetaX11Display *x11_display = display->x11_display;
|
||||
int damage_event_base;
|
||||
|
||||
@ -104,7 +105,7 @@ meta_compositor_x11_process_xevent (MetaCompositorX11 *compositor_x11,
|
||||
* stage is invisible
|
||||
*/
|
||||
if (xevent->type == MapNotify)
|
||||
meta_x11_handle_event (xevent);
|
||||
meta_x11_handle_event (backend, xevent);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user