Commit Graph

4863 Commits

Author SHA1 Message Date
Carlos Garnacho
bdfb8609a3 window: Update drag hotspot as new touches approach
Any number of touches >= 3 starts a drag operation, but the
window jumped around as new touches joined. So recalculate
the touch drag area/hotspot and tiling mode as expected
as soon as touches enter/leave the drag op.
2011-10-31 01:09:36 +01:00
Carlos Garnacho
141a353a52 window: Implement tiling/maximizing through touch events
If during a multitouch drag, the area height is 1.5x the original
size, the window is tiled to the closest side the hotspot is on
(left/right).

If both with/height are 1.5x the original, the window is maximized.
2011-10-30 18:22:19 +01:00
Carlos Garnacho
15186016c2 window: Implement window moving through touch events
Window moving is triggered by 3-4 simultaneous touch events on
the window, the hotspot being in the center of the touch area
bounding rect.
2011-10-30 18:22:19 +01:00
Carlos Garnacho
bd77a67ea4 devices-xi2: Enable touch events 2011-10-30 18:22:19 +01:00
Carlos Garnacho
2a9a499841 core: Handle TouchUpdate with TouchPendingEnd as TouchEnd
The touch sequence is possibly unhandled, but we need a call
to meta_window_end_touch() so such touch sequences are notified
to the server, this would trigger the real TouchEnd event as
the touch is rejected, but should be a no-op the second time
2011-10-30 18:22:18 +01:00
Carlos Garnacho
50aa509ee1 device-map: Get slave devices in the XI2 implementation
Slave devices are at least needed for touch devices.
2011-10-30 18:22:18 +01:00
Carlos Garnacho
0eefb6b306 device-map: Implement passive touch grabs in XI2 backend 2011-10-30 18:22:18 +01:00
Carlos Garnacho
d115c90ed1 device-map: Add grab/ungrab_touch() methods
These functions deal with passive touch grabs, where
available
2011-10-30 18:22:18 +01:00
Carlos Garnacho
83096642f0 core: Add meta_input_event_get_source_device()
This function would return the slave device behind and
event, this is mostly needed for touch passive grabs,
as XIAllowTouchEvents() at the moment requires a slave
device, this has changed in the latest drafts of the
multitouch protocol.
2011-10-30 18:22:18 +01:00
Carlos Garnacho
a65c4e993e input-events: Add meta_input_event_get_touch_id()
This function returns the touch ID generating an input event,
if any.
2011-10-30 18:22:18 +01:00
Carlos Garnacho
e73a566eeb input-events: Add meta_input_event_ignored()
This function tells whether an input event should be ignored,
the only current reason being the duplication of touch events
and their emulated XI2 pointer event counterparts.
2011-10-30 18:22:18 +01:00
Carlos Garnacho
46ef055da5 input-events: Handle touch events
TouchBegin/End/Update are now handled similarly to
ButtonPress/Release/MotionNotify.
2011-10-30 18:22:18 +01:00
Carlos Garnacho
45450c2fa3 device-map: Initialize XInput 2.1
This is needed in order to use the Multitouch API.
2011-10-30 18:22:18 +01:00
Carlos Garnacho
afa4c643a8 configure: Look for Multitouch API in XInput2 2011-10-30 18:22:18 +01:00
Carlos Garnacho
5d1c302b18 frame: disallow frame operations if the popup is open
If some device has a popped up menu, meta_frame_get_flags()
returns 0 to indicate other devices cannot trigger any
actions on the frame.
2011-10-30 18:22:17 +01:00
Carlos Garnacho
53b289ce25 ui: Add a MetaDevice arg to meta_window_menu_popup()
This will be the device popping up the menu, gtk_menu_popup()
uses the current GTK+ event device, and that might not even be
filled up with mutter event bypassing.
2011-10-30 18:22:17 +01:00
Carlos Garnacho
776628fde2 window: Make MetaWindow keep a pointer to the popup menu
Multiple windows may now have different popup menus, responding
only to the device pair that popped it up.
2011-10-30 18:22:17 +01:00
Carlos Garnacho
b9f5185c90 ui: enable multidevice on frame windows
This is so different pointers may have different
cursors on them.
2011-10-30 18:22:17 +01:00
Carlos Garnacho
7555b092eb frames: Use the triggering device when updating controls 2011-10-30 18:22:17 +01:00
Carlos Garnacho
f46ef5f6e0 frames: Get coordinates from event
Don't spare a synchronous X call, instead translate
properly the XEvent coordinates in ui.c and use
the event coordinates in MetaFrames
2011-10-30 18:22:17 +01:00
Carlos Garnacho
0e182c7c3d meta: Add device.h
This is real proof noone tried the branch yet
2011-10-30 18:22:17 +01:00
Carlos Garnacho
84b9d5c9f9 display: Make focus info persistent
It must not be freed (at least meanwhile the device pair
exists), so ensure it's kept around, and we don't create
info for a same keyboard twice.
2011-10-30 18:22:17 +01:00
Carlos Garnacho
8e3b9be79c window: make guess_grab_pointer() more reliable
Now either the current focus keyboard or the client pointer
(i.e. the pointer paired to the last keyboard that had the
window focus) are used to guess the pointer that should be
grabbed.
2011-10-30 18:22:17 +01:00
Carlos Garnacho
74520ab20b window: set the corresponding client pointer on focused windows.
The client window determines the device pair that is used for
core protocol calls such as XQueryPointer(), so different
clients using the core protocol can be focused by different
devices simultaneously.
2011-10-30 18:22:17 +01:00
Carlos Garnacho
40c2b0c5bb core: Fix rebase glitch 2011-10-30 18:22:16 +01:00
Carlos Garnacho
40ec37eed0 core: enable XInput2 by default
This is nothing but the beginning, things work with a single
pointer/keyboard pair, but will be largely broken with multiple
devices interacting simultaneously, so we first need a policy
to establish a sensible behavior for extra pointer/keyboard
pairs.

the MUTTER_USE_CORE_DEVICES envvar has been added to force use
of Xlib core events for devices in order to check for regressions.
2011-10-30 18:22:16 +01:00
Carlos Garnacho
4e6e40de87 display: Ignore events from slave devices
Mutter only handles master devices.
2011-10-30 18:21:12 +01:00
Carlos Garnacho
319208f859 compositor: use meta_device_grab() for pointer/keyboard grabs
These happen invariably on the VCP/VCK pair.
2011-10-30 18:21:12 +01:00
Carlos Garnacho
f670a4f348 screen: Use meta_device_pointer_set_window_cursor() for startup sequence.
At the moment feedback is only provided for the Virtual Core Pointer
2011-10-30 18:21:12 +01:00
Carlos Garnacho
57dff10ab5 device-map: Add meta_device_map_list_devices()
This function returns a list of the devices currently handled by
the device map.
2011-10-30 18:21:12 +01:00
Carlos Garnacho
53bd0c70c9 core: Make frame handle per-pointer cursors. 2011-10-30 18:21:12 +01:00
Carlos Garnacho
2507d20bb7 workspace: use triggering device to focus the default window on workspace switch 2011-10-30 18:21:12 +01:00
Carlos Garnacho
7d5e7ec3e6 screen: make "monitor under pointer" logic work for several devices 2011-10-30 18:21:12 +01:00
Carlos Garnacho
0b8848057b window: query the guessed pointer's modifiers on _NET_WM_MOVERESIZE 2011-10-30 18:20:29 +01:00
Carlos Garnacho
0b841f8940 display: Use the grab pointer for delayed window raising 2011-10-30 18:20:29 +01:00
Carlos Garnacho
61b120d08c keybindings: use the right device for querying the modifier mask. 2011-10-30 18:20:29 +01:00
Carlos Garnacho
2aa39eb4fd devices: make meta_device_pointer_query_position() return a boolean
like in XQueryPointer/XIQueryPointer, the return value tells whether
the pointer device is on the same screen than the passed window.
2011-10-30 18:20:29 +01:00
Carlos Garnacho
dc5b813608 core: Make keyboard focus handling happen per-keyboard
MetaFocusInfo is a struct holding all necessary info, code has
been updated to use the per-keyboard focus info instead of the
old fields.
2011-10-30 18:20:29 +01:00
Carlos Garnacho
df044a0035 core: Add meta_device_keyboard_[gs]et_focus_window()
These functions are meant to replace X[GS]etInputFocus() calls across
the core.
2011-10-30 18:19:51 +01:00
Carlos Garnacho
154730a3d9 display: Use meta_device_grab() for pointer active grabs. 2011-10-30 18:19:51 +01:00
Carlos Garnacho
557ed7ac0b keybindings: Use meta_device_grab() for keyboard active grabs 2011-10-30 18:19:51 +01:00
Carlos Garnacho
bce2bc0568 window: Use meta_device_pointer_warp() 2011-10-30 18:19:51 +01:00
Carlos Garnacho
7c86cb85ba core: Keep track of per pointer/keyboard grabs
There is now a MetaGrabInfo struct, holding all information about
an ongoing grab, there were unfortunately no means of making this
commit smaller, as things are too intertwined to separate it,

On places where it was most obvious, the correct device has been
used (in reaction to events, for example), in other parts, the
private API has been extended to include the MetaDevice (or device
ID for core.h functions), in other places, the virtual core
pointer/keyboard are used out of cluelessness.
2011-10-30 18:19:51 +01:00
Carlos Garnacho
ab58d87142 ui: Use input-events.h to translate XEvents to GdkEvents
This is the only use in the UI part of core functions not
exported via core.h, but this is sort of a hack within a hack,
and still better than doing the XInput2 vs core dance again.
2011-10-30 18:19:51 +01:00
Carlos Garnacho
e62076f055 devices: Make MetaDevice/MetaDeviceMap partly public
MetaDevice is quite limited outside of the core, mostly useful
to represent a device, and get the paired one.
2011-10-30 18:18:50 +01:00
Carlos Garnacho
1e8f10826a keybindings: Replace XGrabKey() with meta_device_map_grab_key() 2011-10-30 18:18:50 +01:00
Carlos Garnacho
cca79a77da display: Replace XGrabButton with meta_device_map_grab_button() 2011-10-30 18:18:50 +01:00
Carlos Garnacho
67018d2d04 core: Add XInput2 device map implementation 2011-10-30 18:18:49 +01:00
Carlos Garnacho
199395a395 Replace XAllowEvents with meta_device_allow_events() 2011-10-30 18:18:49 +01:00
Carlos Garnacho
ad911d6cce Use meta_core_select_events() for input events 2011-10-30 18:18:49 +01:00