diff options
Diffstat (limited to 'src/backends/native/meta-seat-native.c')
-rw-r--r-- | src/backends/native/meta-seat-native.c | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/src/backends/native/meta-seat-native.c b/src/backends/native/meta-seat-native.c index 022f56983..8310cb078 100644 --- a/src/backends/native/meta-seat-native.c +++ b/src/backends/native/meta-seat-native.c @@ -1485,31 +1485,42 @@ process_base_event (MetaSeatNative *seat, struct libinput_event *event) { ClutterInputDevice *device = NULL; - ClutterEvent *device_event; + ClutterEvent *device_event = NULL; struct libinput_device *libinput_device; + ClutterStage *stage; + + stage = meta_seat_native_get_stage (seat); switch (libinput_event_get_type (event)) { case LIBINPUT_EVENT_DEVICE_ADDED: libinput_device = libinput_event_get_device (event); - device = evdev_add_device (seat, libinput_device); - device_event = clutter_event_new (CLUTTER_DEVICE_ADDED); - clutter_event_set_device (device_event, device); + + if (stage) + { + device_event = clutter_event_new (CLUTTER_DEVICE_ADDED); + clutter_event_set_device (device_event, device); + } break; case LIBINPUT_EVENT_DEVICE_REMOVED: libinput_device = libinput_event_get_device (event); device = libinput_device_get_user_data (libinput_device); - device_event = clutter_event_new (CLUTTER_DEVICE_REMOVED); - clutter_event_set_device (device_event, device); + + if (stage) + { + device_event = clutter_event_new (CLUTTER_DEVICE_REMOVED); + clutter_event_set_device (device_event, device); + } + evdev_remove_device (seat, META_INPUT_DEVICE_NATIVE (device)); break; default: - device_event = NULL; + break; } if (device_event) @@ -2861,6 +2872,16 @@ meta_seat_native_set_stage (MetaSeatNative *seat, ClutterInputDevice *device = l->data; _clutter_input_device_set_stage (device, stage); + + if (clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_PHYSICAL) + { + ClutterEvent *device_event; + + device_event = clutter_event_new (CLUTTER_DEVICE_ADDED); + clutter_event_set_device (device_event, device); + device_event->device.stage = stage; + queue_event (device_event); + } } } |