mirror of
https://github.com/brl/mutter.git
synced 2024-12-23 11:32:04 +00:00
clutter: Drop select_stage_events() device manager vfunc
This is specific to X11, so handle it within the X11 backend. https://gitlab.gnome.org/GNOME/mutter/merge_requests/852
This commit is contained in:
parent
7afbc01fe8
commit
835f12043e
@ -203,9 +203,6 @@ CLUTTER_EXPORT
|
|||||||
void _clutter_device_manager_remove_device (ClutterDeviceManager *device_manager,
|
void _clutter_device_manager_remove_device (ClutterDeviceManager *device_manager,
|
||||||
ClutterInputDevice *device);
|
ClutterInputDevice *device);
|
||||||
void _clutter_device_manager_update_devices (ClutterDeviceManager *device_manager);
|
void _clutter_device_manager_update_devices (ClutterDeviceManager *device_manager);
|
||||||
CLUTTER_EXPORT
|
|
||||||
void _clutter_device_manager_select_stage_events (ClutterDeviceManager *device_manager,
|
|
||||||
ClutterStage *stage);
|
|
||||||
ClutterBackend *_clutter_device_manager_get_backend (ClutterDeviceManager *device_manager);
|
ClutterBackend *_clutter_device_manager_get_backend (ClutterDeviceManager *device_manager);
|
||||||
|
|
||||||
/* input device */
|
/* input device */
|
||||||
|
@ -311,19 +311,6 @@ clutter_device_manager_get_core_device (ClutterDeviceManager *device_manager,
|
|||||||
return manager_class->get_core_device (device_manager, device_type);
|
return manager_class->get_core_device (device_manager, device_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
_clutter_device_manager_select_stage_events (ClutterDeviceManager *device_manager,
|
|
||||||
ClutterStage *stage)
|
|
||||||
{
|
|
||||||
ClutterDeviceManagerClass *manager_class;
|
|
||||||
|
|
||||||
g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager));
|
|
||||||
|
|
||||||
manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager);
|
|
||||||
if (manager_class->select_stage_events)
|
|
||||||
manager_class->select_stage_events (device_manager, stage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* _clutter_device_manager_add_device:
|
* _clutter_device_manager_add_device:
|
||||||
* @device_manager: a #ClutterDeviceManager
|
* @device_manager: a #ClutterDeviceManager
|
||||||
|
@ -62,8 +62,6 @@ struct _ClutterDeviceManagerClass
|
|||||||
ClutterInputDevice *device);
|
ClutterInputDevice *device);
|
||||||
void (* remove_device) (ClutterDeviceManager *manager,
|
void (* remove_device) (ClutterDeviceManager *manager,
|
||||||
ClutterInputDevice *device);
|
ClutterInputDevice *device);
|
||||||
void (* select_stage_events) (ClutterDeviceManager *manager,
|
|
||||||
ClutterStage *stage);
|
|
||||||
|
|
||||||
/* padding */
|
/* padding */
|
||||||
gpointer _padding[4];
|
gpointer _padding[4];
|
||||||
|
@ -51,42 +51,6 @@ G_DEFINE_TYPE (MetaDeviceManagerX11,
|
|||||||
meta_device_manager_x11,
|
meta_device_manager_x11,
|
||||||
CLUTTER_TYPE_DEVICE_MANAGER)
|
CLUTTER_TYPE_DEVICE_MANAGER)
|
||||||
|
|
||||||
static void
|
|
||||||
meta_device_manager_x11_select_stage_events (ClutterDeviceManager *manager,
|
|
||||||
ClutterStage *stage)
|
|
||||||
{
|
|
||||||
MetaStageX11 *stage_x11;
|
|
||||||
XIEventMask xi_event_mask;
|
|
||||||
unsigned char *mask;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
stage_x11 = META_STAGE_X11 (_clutter_stage_get_window (stage));
|
|
||||||
|
|
||||||
len = XIMaskLen (XI_LASTEVENT);
|
|
||||||
mask = g_new0 (unsigned char, len);
|
|
||||||
|
|
||||||
XISetMask (mask, XI_Motion);
|
|
||||||
XISetMask (mask, XI_ButtonPress);
|
|
||||||
XISetMask (mask, XI_ButtonRelease);
|
|
||||||
XISetMask (mask, XI_KeyPress);
|
|
||||||
XISetMask (mask, XI_KeyRelease);
|
|
||||||
XISetMask (mask, XI_Enter);
|
|
||||||
XISetMask (mask, XI_Leave);
|
|
||||||
|
|
||||||
XISetMask (mask, XI_TouchBegin);
|
|
||||||
XISetMask (mask, XI_TouchUpdate);
|
|
||||||
XISetMask (mask, XI_TouchEnd);
|
|
||||||
|
|
||||||
xi_event_mask.deviceid = XIAllMasterDevices;
|
|
||||||
xi_event_mask.mask = mask;
|
|
||||||
xi_event_mask.mask_len = len;
|
|
||||||
|
|
||||||
XISelectEvents (clutter_x11_get_default_display (),
|
|
||||||
stage_x11->xwin, &xi_event_mask, 1);
|
|
||||||
|
|
||||||
g_free (mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_device_manager_x11_add_device (ClutterDeviceManager *manager,
|
meta_device_manager_x11_add_device (ClutterDeviceManager *manager,
|
||||||
ClutterInputDevice *device)
|
ClutterInputDevice *device)
|
||||||
@ -253,7 +217,6 @@ meta_device_manager_x11_class_init (MetaDeviceManagerX11Class *klass)
|
|||||||
manager_class->get_devices = meta_device_manager_x11_get_devices;
|
manager_class->get_devices = meta_device_manager_x11_get_devices;
|
||||||
manager_class->get_core_device = meta_device_manager_x11_get_core_device;
|
manager_class->get_core_device = meta_device_manager_x11_get_core_device;
|
||||||
manager_class->get_device = meta_device_manager_x11_get_device;
|
manager_class->get_device = meta_device_manager_x11_get_device;
|
||||||
manager_class->select_stage_events = meta_device_manager_x11_select_stage_events;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2227,3 +2227,39 @@ meta_seat_x11_lookup_device_id (MetaSeatX11 *seat_x11,
|
|||||||
return g_hash_table_lookup (seat_x11->devices_by_id,
|
return g_hash_table_lookup (seat_x11->devices_by_id,
|
||||||
GINT_TO_POINTER (device_id));
|
GINT_TO_POINTER (device_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
meta_seat_x11_select_stage_events (MetaSeatX11 *seat,
|
||||||
|
ClutterStage *stage)
|
||||||
|
{
|
||||||
|
MetaStageX11 *stage_x11;
|
||||||
|
XIEventMask xi_event_mask;
|
||||||
|
unsigned char *mask;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
stage_x11 = META_STAGE_X11 (_clutter_stage_get_window (stage));
|
||||||
|
|
||||||
|
len = XIMaskLen (XI_LASTEVENT);
|
||||||
|
mask = g_new0 (unsigned char, len);
|
||||||
|
|
||||||
|
XISetMask (mask, XI_Motion);
|
||||||
|
XISetMask (mask, XI_ButtonPress);
|
||||||
|
XISetMask (mask, XI_ButtonRelease);
|
||||||
|
XISetMask (mask, XI_KeyPress);
|
||||||
|
XISetMask (mask, XI_KeyRelease);
|
||||||
|
XISetMask (mask, XI_Enter);
|
||||||
|
XISetMask (mask, XI_Leave);
|
||||||
|
|
||||||
|
XISetMask (mask, XI_TouchBegin);
|
||||||
|
XISetMask (mask, XI_TouchUpdate);
|
||||||
|
XISetMask (mask, XI_TouchEnd);
|
||||||
|
|
||||||
|
xi_event_mask.deviceid = XIAllMasterDevices;
|
||||||
|
xi_event_mask.mask = mask;
|
||||||
|
xi_event_mask.mask_len = len;
|
||||||
|
|
||||||
|
XISelectEvents (clutter_x11_get_default_display (),
|
||||||
|
stage_x11->xwin, &xi_event_mask, 1);
|
||||||
|
|
||||||
|
g_free (mask);
|
||||||
|
}
|
||||||
|
@ -34,6 +34,8 @@ gboolean meta_seat_x11_translate_event (MetaSeatX11 *seat,
|
|||||||
ClutterEvent *event);
|
ClutterEvent *event);
|
||||||
ClutterInputDevice * meta_seat_x11_lookup_device_id (MetaSeatX11 *seat_x11,
|
ClutterInputDevice * meta_seat_x11_lookup_device_id (MetaSeatX11 *seat_x11,
|
||||||
int device_id);
|
int device_id);
|
||||||
|
void meta_seat_x11_select_stage_events (MetaSeatX11 *seat,
|
||||||
|
ClutterStage *stage);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include "core/display-private.h"
|
#include "core/display-private.h"
|
||||||
#include "meta/meta-x11-errors.h"
|
#include "meta/meta-x11-errors.h"
|
||||||
#include "meta-backend-x11.h"
|
#include "meta-backend-x11.h"
|
||||||
|
#include "meta-seat-x11.h"
|
||||||
#include "meta-stage-x11.h"
|
#include "meta-stage-x11.h"
|
||||||
|
|
||||||
#define STAGE_X11_IS_MAPPED(s) ((((MetaStageX11 *) (s))->wm_state & STAGE_X11_WITHDRAWN) == 0)
|
#define STAGE_X11_IS_MAPPED(s) ((((MetaStageX11 *) (s))->wm_state & STAGE_X11_WITHDRAWN) == 0)
|
||||||
@ -314,8 +315,8 @@ meta_stage_x11_realize (ClutterStageWindow *stage_window)
|
|||||||
MetaStageX11 *stage_x11 = META_STAGE_X11 (stage_window);
|
MetaStageX11 *stage_x11 = META_STAGE_X11 (stage_window);
|
||||||
ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
|
ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
|
||||||
ClutterBackend *backend = CLUTTER_BACKEND (stage_cogl->backend);
|
ClutterBackend *backend = CLUTTER_BACKEND (stage_cogl->backend);
|
||||||
|
MetaSeatX11 *seat_x11 = META_SEAT_X11 (clutter_backend_get_default_seat (backend));
|
||||||
Display *xdisplay = clutter_x11_get_default_display ();
|
Display *xdisplay = clutter_x11_get_default_display ();
|
||||||
ClutterDeviceManager *device_manager;
|
|
||||||
float width, height;
|
float width, height;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
@ -382,16 +383,7 @@ meta_stage_x11_realize (ClutterStageWindow *stage_window)
|
|||||||
*/
|
*/
|
||||||
XSelectInput (xdisplay, stage_x11->xwin, META_STAGE_X11_EVENT_MASK);
|
XSelectInput (xdisplay, stage_x11->xwin, META_STAGE_X11_EVENT_MASK);
|
||||||
|
|
||||||
/* input events also depent on the actual device, so we need to
|
meta_seat_x11_select_stage_events (seat_x11, stage_cogl->wrapper);
|
||||||
* use the device manager to let every device select them, using
|
|
||||||
* the event mask we passed to XSelectInput as the template
|
|
||||||
*/
|
|
||||||
device_manager = clutter_device_manager_get_default ();
|
|
||||||
if (G_UNLIKELY (device_manager != NULL))
|
|
||||||
{
|
|
||||||
_clutter_device_manager_select_stage_events (device_manager,
|
|
||||||
stage_cogl->wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
meta_stage_x11_fix_window_size (stage_x11,
|
meta_stage_x11_fix_window_size (stage_x11,
|
||||||
stage_x11->xwin_width,
|
stage_x11->xwin_width,
|
||||||
|
Loading…
Reference in New Issue
Block a user