Commit Graph

87 Commits

Author SHA1 Message Date
Giovanni Campagna
aef3d0022c evdev: add callback to constrain the pointer position
Add a new callback that is called prior to emitting pointer
motion events and that can modify the new pointer position.
The main purpose is allowing multiscreen apps to prevent the
pointer for entering the dead area that exists when the screens
are not the same size, but it could also used to implement
pointer barriers.
A callback is needed to make sure that the hook is called early
enough and the Clutter state is always consistent.

https://bugzilla.gnome.org/show_bug.cgi?id=706652
2013-09-09 12:00:52 +02:00
Emmanuele Bassi
0d7bbc747f docs: Fix gtk-doc warnings 2013-08-19 23:30:09 +01:00
Giovanni Campagna
0e519e2b3b evdev: implement wheel events
Mouse wheel events come as EV_REL/REL_WHEEL, and we can convert
them to clutter events on the assumption that scrolling with
the wheel is always vertical.

https://bugzilla.gnome.org/show_bug.cgi?id=705710
2013-08-14 16:50:45 +02:00
Giovanni Campagna
7b780b0c38 evdev: don't update xkb state for autorepeated keys
xkb_state_update_key() needs to be called only on state transitions,
otherwise the state tracking gets confused and locks certain modifiers
forever.

https://bugzilla.gnome.org/show_bug.cgi?id=705710
2013-08-13 18:11:12 +02:00
Giovanni Campagna
8c358f18b1 evdev: allow hooking directly into libxkbcommon
A wayland compositor needs to have more keyboard state than
ClutterModifierState exposes, so it makes sense for it to use
xkb_state directly. Also, it makes sense for it to provide
it's own keymap, to ensure a consistent view between the compositor
and the wayland clients.

https://bugzilla.gnome.org/show_bug.cgi?id=705710
2013-08-13 17:51:33 +02:00
Giovanni Campagna
786532213b evdev: add master / slave device handling
All evdev devices are slave devices, which means that xkb state
and pointer position must be shared by emulating a core keyboard
and a core pointer. Also, we must make sure to add all modifier
state (keyboard and button) to our events.

https://bugzilla.gnome.org/show_bug.cgi?id=705710
2013-08-13 17:42:43 +02:00
Giovanni Campagna
d844cf5462 evdev: fix xkb_state handling
We must pass X11 keycodes, not evdev ones, to libxkbcommon,
otherwise the modifier state is wrong.

https://bugzilla.gnome.org/show_bug.cgi?id=705710
2013-08-13 09:41:44 +02:00
Giovanni Campagna
26b2852601 evdev: add a way for applications to tweak how devices are opened
In some cases, applications (or actually, wayland compositors)
don't have the required permissions to access evdev directly, but
can do so with an external helper like weston-launch.

Allow them to do so with a custom callback that replaces the regular
open() path.

https://bugzilla.gnome.org/show_bug.cgi?id=704269
2013-08-13 09:41:44 +02:00
Emmanuele Bassi
41bb03da2d Use the new macros for adding private data 2013-07-03 18:04:32 +01:00
Neil Roberts
d0d1b562bd evdev: Fix use of the common XKB code for the evdev device
In commit 8f4e39b6d7 the Wayland code was updated to use the new
xkbcommon API. This involved changing the common XKB code shared with
the evdev input backend. However the evdev input backend was not
modified so it wouldn't compile. This patch just makes a minor change
to update it.

https://bugzilla.gnome.org/show_bug.cgi?id=693348
2013-02-08 12:02:26 +00:00
Emmanuele Bassi
78a7a60b89 evdev: Fix missing ClutterEventSource member
https://bugzilla.gnome.org/show_bug.cgi?id=686692
2012-12-18 01:27:31 +00:00
Daniel Stone
8f4e39b6d7 Port to new Wayland and xkbcommon APIs
For Wayland, this is mostly the input protocol having changed, although
there's also the SHM pool API, the cursor API, as well as fullscreen and
ping.

Also port to the new (months-old) xkbcommon API, as used by Weston 0.95.
This involves having xkbcommon manage the state for us, where
appropriate.  Fans of multi-layout keyboards (or just caps lock) will no
doubt appreciate these changes.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2012-10-12 15:12:55 +01:00
Neil Roberts
99a7406d01 evdev: Swap the numbers for the middle and right buttons
The ordering of the evdev button numbers is the opposite of the
order in Clutter (the middle button is 3 instead of 2) so we need to
manually map the button numbers when creating a ClutterButtonEvent.

https://bugzilla.gnome.org/show_bug.cgi?id=680255
2012-09-03 21:58:25 +01:00
Emmanuele Bassi
0e4c6d0a87 Deprecate clutter_threads_enter()/leave()
Acquiring the Clutter lock to mark critical sections is not portable,
and not recommended to implement threaded applications with Clutter.

The recommended pattern is to use worker threads, and schedule UI
updates inside idle or timeout handlers within the main loop. We should
enforce this pattern by deprecating the threads_enter()/leave()
functions. For compatibility concerns, we need internal API to acquire
the main lock during frame processing dispatch.

https://bugzilla.gnome.org/show_bug.cgi?id=679450
2012-07-11 13:22:19 +01:00
Neil Roberts
dee544645b wayland: Fix some missing includes
The commit 90e5088 added some extra compiler warning options that were
triggering warnings when enabling the wayland build due to missing
header includes. This adds those header includes in.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
Reviewed-by: Emmanuele Bassi <ebassi@linux.intel.com>
2012-03-20 14:36:58 +00:00
Robert Bragg
3c6a0cdc61 evdev: Adds api to release/reclaim the evdev devices
Clutter applications using evdev are typically fullscreen applications
associated with a single virtual termainal. When switching away from
the applications associated tty then Clutter should stop managing all
evdev devices and re-probe for devices when the application regains
focus by switching back to the tty. To facilitate this, this patch
adds clutter_evdev_release_devices() and clutter_evdev_reclaim_devices()
functions.

Reviewed-by: Neil Roberts <neil@linux.intel.com>
Reviewed-by: Emmanuele Bassi <ebassi@linux.intel.com>
2012-03-01 11:41:51 +00:00
Neil Roberts
a3bbcff946 evdev: Associate devices with the first created stage
Because evdev isn't associated with the display system, it doesn't
have any easy way to associate an input device with a stage.
Previously Clutter would never set a stage for an input device and
leave it up to the application to set it. To make it easier for
applications which just have a single fullscreen stage (which is
probably the most common use case for evdev) the device manager now
associates all input devices with the first stage that is created
unless something has already set a stage.

Reviewed-by: Emmanuele Bassi <ebassi@linux.intel.com>
2012-03-01 11:41:51 +00:00
Robert Bragg
3e85ad6b95 build: make internal option_xkb_* symbols static
This makes the option_xkb_* symbols declared for the evdev device manager
and the wayland device manager private so we don't get symbol collisions
if both of these backends are enabled.

Reviewed-by: Emmanuele Bassi <ebassi@linux.intel.com>
2011-12-08 16:13:38 +00:00
Robert Bragg
602a89afa8 evdev: fixes evdev build issues + don't ref default stage
This updates the evdev input backend code to compile and also updates
the code to not refer to the default stage and instead check for a
stage to be associated with the input device. If no stage is currently
associated with a device generating events then the events are dropped
on the floor.

Reviewed-by: Emmanuele Bassi <ebassi@linux.intel.com>
2011-12-08 16:13:37 +00:00
Lionel Landwerlin
213e6e4a16 evdev: do not associate device with stage
Their might not be any stage at that time, so this avoids to create a
default one.

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>

https://bugzilla.gnome.org/show_bug.cgi?id=651718
2011-11-10 15:41:41 +00:00
Lionel Landwerlin
5705d08b5d evdev: don't even process events without a default stage
The evdev system is a bit different from other input systems in
Clutter because it's completly decorrelated from anything graphic.

In the case of embedded devices with no proper windowing system, you
might want to not implicitly create a default stage when you're
receiving the first input event.

This patch changes this behavior by not forwarding any event if you
don't have a default stage.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@linux.intel.com>

https://bugzilla.gnome.org/show_bug.cgi?id=651718
2011-11-10 15:39:16 +00:00
Emmanuele Bassi
17c89bd0a0 backend: Clean up the device manager creation
Create the device manager during the event initialization, where it
makes sense.

This allows us to get rid of the per-backend get_device_manager()
virtual function, and just store the DeviceManager pointer into the
ClutterBackend structure.
2011-11-10 14:55:03 +00:00
Emmanuele Bassi
405e72f2e4 egl: First attempt at cleaning up the EGL native backend
At least, let's make it compile when built along with the other
backends. In reality, it still needs to be verified as working.
2011-11-03 13:45:20 +00:00
Emmanuele Bassi
8816730081 evdev: Remove unused variable 2011-04-18 16:24:27 +01:00
James Athey
3d3ae619c6 determine evdev device type using g_udev_device_has_property
http://bugzilla.clutter-project.org/show_bug.cgi?id=2631
2011-04-12 21:15:50 +01:00
James Athey
aa4ff0b90f uniquely name and enable evdev ClutterInputDevice objects on creation
http://bugzilla.clutter-project.org/show_bug.cgi?id=2631
2011-04-12 21:15:48 +01:00
Emmanuele Bassi
3e5aa9ed63 Add private header for event-related API 2011-02-18 16:35:36 +00:00
Emmanuele Bassi
0f56abf569 */event: Never manipulate the event queue directly
Always use _clutter_event_push() instead.
2011-01-21 10:25:45 +00:00
Damien Lespiau
4ceb95d2ca evdev: Add a comment to revisit the GSource management with glib 2.28
With glib 2.28, we'll be able to have one GSource per device manager
with child sources for earch device. Make a note to update the code
in a few months.
2010-11-30 14:50:13 +00:00
Damien Lespiau
bce4c87232 evdev: Don't oveflow when translating buttons to masks
An array is used to translate the button to its mask. Clutter defines
the masks for button 1 to 5 but we report BTN_LEFT..BTN_TASK ie
0x110..0x117. We need to pad the array for the translation not to access
random data for buttons between 0x115 and 0x117.
2010-11-30 14:40:38 +00:00
Damien Lespiau
c20beabf93 evdev: Add mouse support
We know support EV_REL events comming from evdev devices. This addition
is pretty straigthforward, it adds a x,y per GSource listening to a
evdev device, updates from EL_REL (relative) events and craft new
ClutterMotionEvents. As for buttons, BTN_LEFT..BTN_TASK are translated
to ClutterButtonEvents with 1..8 as button number.
2010-11-30 14:40:38 +00:00
Damien Lespiau
94c2812d72 evdev: Only create a xkbcommon mapping for keyboard devices 2010-11-30 14:40:38 +00:00
Damien Lespiau
7cd6ba2828 evdev: Close the device gracefully in case of a read() error
Even with udev, the read fails before udev has a chance to signal the
change. Hence (and to handle errors gracefully anyway), let's remove the
device from the device manager in case of a read() error.
2010-11-30 14:40:38 +00:00
Damien Lespiau
afd279dd76 evdev: Merge clutter-event-evdev.[ch] into the device manager
The device manager now fully owns the GSources corresponding to the
devices it manages. This will allow not only to remove the source when
udev signals a device removal but also handle read() errors gracefully
by removing the faulty device from the manager.
2010-11-30 14:40:38 +00:00
Damien Lespiau
afee3b009c evdev: Support hotplug (addition/removal) of evdev devices
Just connect to the GUdevClient "uevent" signal and deals with
"add"/"remove" commands. This drives the installation/removal of
GSource to listen to the device.
2010-11-30 14:40:37 +00:00
Damien Lespiau
b83a4813a4 evdev: Make sure we only add evdev devices
Let's use the sysfs path of the device to make sure we only load evdev
device, not legacy mousedev ones for instance. We rely on the sysfs
API/ABI guarantees and look for devices finishing by /input%d/event%d.
2010-11-30 14:40:37 +00:00
Damien Lespiau
c6493885c3 evdev: First stab at an evdev backend
This backend is a event backend that can be enabled for EGL (for now).
It uses udev (gudev) to query input devices on a linux system, listens to
keyboard events from input devices and xkbcommon to translate raw key
codes into key keysyms.

This commit only supports key events, more to follow.
2010-11-30 14:40:37 +00:00