Commit Graph

106 Commits

Author SHA1 Message Date
Camilla Löwy
e155c19f8e Wayland: Fix text input not following key repeat
The manual key repeat implementation did not call text input.

(cherry picked from commit 1a7da42e6e)
2022-02-15 21:22:26 +01:00
Camilla Löwy
6b15731e6c Wayland: Clean up key event handler
Adapt style and naming to match the rest of the project.

(cherry picked from commit bf99587005)
2022-02-15 21:21:43 +01:00
Camilla Löwy
554f5d0492 Wayland: Require xkbcommon 0.5.0 or greater
The Wayland backend now requires xkbcommon-compose, which was added in
version 0.5.0.  xkbcommon 0.5.0 was released in 2014.

This removes the non-composing fallback path for text input.

(cherry picked from commit 293d19a153)
2022-02-15 21:20:28 +01:00
Camilla Löwy
3901824c0e Wayland: Clean up text input
Adapt style and naming to match the rest of the project.

(cherry picked from commit b70259e52d)
2022-02-15 21:08:41 +01:00
Camilla Löwy
5066f57371 Clean up internal Unicode code point handling
Call code points by their name and store them as uint32_t.

(cherry picked from commit fe7be39793)
2022-02-15 21:08:17 +01:00
Camilla Löwy
1f7ce12cbc Wayland: Implement key name support
(cherry picked from commit 17a9e34fbc)
2022-02-15 21:02:07 +01:00
Camilla Löwy
61497796e6 Wayland: Fix keys reported as wrong or unknown key
(cherry picked from commit 37b7540db9)
2022-02-15 20:58:07 +01:00
Camilla Löwy
5f0b316c24 Wayland: Control key repeat via timerfd state
The key repeat logic is now controlled only via the key repeat timerfd.

(cherry picked from commit 850893a39f)
2022-02-15 20:50:58 +01:00
Emmanuel Gil Peyrot
17c5c53910 Wayland: Use correct action on fallback decoration
We were previously storing the pointer position only when on the main
window, so when the user clicked on a fallback decoration it would use
the last position of the cursor on the main window, instead of the
position in the decoration surface.

Fixes part of #1991.

(cherry picked from commit 855d338a65)
2022-02-15 20:46:36 +01:00
Camilla Löwy
9240ee5ddf Wayland: Fix key repeat continuing when refocused
If a window lost input focus while a key was held down, the key repeat
mechanism would resume once the window regained focus.

(cherry picked from commit e24fe4b189)
2021-12-24 01:53:53 +01:00
Stone Tickle
8f3677a0d4 Wayland: Set O_NONBLOCK on repeat timerfd
Fixes #1710
Fixes #1711

(cherry picked from commit 963e728881)
2021-12-24 01:43:44 +01:00
Waris Boonyasiriwat
6bb5f5d59d Wayland: Fix cursor offset when shape changes
The Wayland protocol spec[1] states that set_cursor must be called
with the serial number of the enter event.  However, GLFW is passing in
the serial number of the latest received event, which does not meet the
protocol spec.

[1] https://wayland.freedesktop.org/docs/html/apa.html#protocol-spec-wl_pointer

As a result, set_cursor calls were simply ignored by the compositor.

This fix complies with the protocol more closely by specifically caching
the enter event serial, and using it for all set_cursor calls.

Fixes #1706
Closes #1899

(cherry picked from commit e7758c506d)
2021-10-13 23:06:40 +02:00
Koray Kilinc
33ff23dc07 Wayland: Fix some keys not repeating
According to the libxkbcommon documentation[1], xkb_keymap_key_repeats
requires keymap and keycode as input:

int xkb_keymap_key_repeats( struct xkb_keymap * keymap,
			    xkb_keycode_t key)

However, in inputChar in wl_input.c we are passing in xkb_keysym_t,
which was a type mismatch.

This results in some keys not repeating when they should and vice versa.

[1] https://xkbcommon.org/doc/current/group__components.html#ga9d7f998efeca98b3afc7c257bbac90a8

Closes #1908.

(cherry picked from commit 216d5e8402)
2021-09-01 19:47:59 +02:00
Camilla Löwy
d61f7225d1 Wayland: Fix missing constant on FreeBSD
On FreeBSD O_CLOEXEC is only available when _POSIX_C_SOURCE >= 200809.
O_CLOEXEC is in turn required by the epollshim header.

Issue reported on IRC.

(cherry picked from commit a89fcd20d8)
2021-08-03 14:03:01 +02:00
Camilla Löwy
114704262c Wayland: Fix scroll offsets being inverted
Scrolling offsets were inverted compared to X11 and Win32.

Fixes #1463.

(cherry picked from commit f760b124ca)
2020-07-16 13:34:28 +02:00
Emmanuel Gil Peyrot
9db0bd45e6 Wayland: Unset the cursor name on border exit
It would previously conserve the last name it had before leaving the
border, sometimes desynchronising with what it should have been.

(cherry picked from commit ef6189f348)
2019-12-19 06:35:14 +01:00
Emmanuel Gil Peyrot
50218fbf7e Wayland: Don’t update cursor position in the frame
That way the application only sees the cursor moving when it is inside
of its area, it won’t go back to the top or left side when trying to
resize the window or just hovering the fallback decorations.

(cherry picked from commit a80788c17f)
2019-12-03 17:17:36 +01:00
Emmanuel Gil Peyrot
3a2c0aaa27 Wayland: Don’t reload the cursor on every pointer motion
Previously, any pointer motion in the window decorations when using the
fallback implementation would obtain the wl_cursor again, and do the
attach danse for no benefit.

This will ultimately allow animated cursors to not reset to the first
frame on motion, once these will be implemented.

(cherry picked from commit a9f674e719)
2019-12-03 17:17:33 +01:00
Camilla Löwy
04522580ad Add C dialect reminders to each source file
Files built for Win32 must use C89 style declarations for compatibility
with VS 2010 and 2012, which are still supported by GLFW.

(cherry picked from commit 56aad76b16)
2019-05-27 16:33:22 +02:00
Camilla Löwy
3461d1c2a5 Fix missing context APIs in version strings 2019-04-08 20:51:34 +02:00
Emmanuel Gil Peyrot
5f9cbd0ebc Wayland: keyboard repeat rate is given in Hz
It was currently interpreted as ms, which is obviously wrong.

Thanks to https://github.com/Smithay/client-toolkit/pull/62 for making
me notice this issue.
2019-02-20 15:56:04 +01:00
Emmanuel Gil Peyrot
c08abffc50 Wayland: Implement clipboard copy 2018-10-24 14:03:08 +02:00
Emmanuel Gil Peyrot
8b54e28c4e Wayland: Implement clipboard paste 2018-10-24 14:03:08 +02:00
Emmanuel Gil Peyrot
3c4b9a7eef Wayland: Add boilerplate for clipboard handling 2018-10-24 14:03:08 +02:00
Ricardo Vieira
92b3fd02e5 wayland: save serial from all input sources 2018-10-24 14:03:08 +02:00
emersion
5afcd0981b wayland: add support for XCURSOR_THEME and XCURSOR_SIZE
These can be set by the compositor or the user to configure the
xcursor theme and size.
2018-10-11 00:58:23 +02:00
Emmanuel Gil Peyrot
dcd2a19d90 Wayland: Add support for xdg-decoration
This allows compositors which prefer to draw the decorations around
clients to do so, rather than letting GLFW draw its own decorations.
The appearance is thus entirely subject to the compositor used, but
should generally be better than the current solid colour decorations we
have, which we continue to use when the compositor doesn’t support this
protocol or tells us to draw the decorations ourselves.

This new protocol has been tested against wlroots’s rootston compositor.

Fixes #1257.
2018-10-01 16:37:24 +02:00
Emmanuel Gil Peyrot
4d3f0fb5df Wayland: Split long lines for function declaration 2018-09-29 18:11:13 +02:00
Emmanuel Gil Peyrot
e0b83bbe8d Wayland: Use HiDPI cursors on decorations 2018-09-11 14:28:44 +02:00
Emmanuel Gil Peyrot
321062833a Wayland: Load a bigger cursor theme for HiDPI 2018-09-11 14:28:44 +02:00
Emmanuel Gil Peyrot
5ea6e6cda2 Wayland: Add support for animated standard cursors 2018-09-09 13:12:20 +02:00
Emmanuel Gil Peyrot
dede6d6886 Wayland: Add a timerfd for animated cursors 2018-09-09 13:12:20 +02:00
Emmanuel Gil Peyrot
685f2a5f91 Wayland: Close forgotten timerfd on terminate. 2018-09-09 13:12:20 +02:00
Greg V
0a3c4f5d80 Add support for Wayland on FreeBSD and other OSes 2018-03-27 22:03:37 +02:00
Emmanuel Gil Peyrot
0d4534733b Wayland: Destroy subcompositor and viewporter on terminate 2018-02-25 16:54:44 +01:00
Emmanuel Gil Peyrot
a8e551cffa Fix resizing and moving under xdg-shell 2018-02-25 16:54:44 +01:00
Emmanuel Gil Peyrot
9f7ec6b094 Implement window decorations 2018-02-25 16:54:44 +01:00
Emmanuel Gil Peyrot
9dc18a62a6 Rename wl_pointer to pointer 2018-02-25 16:54:44 +01:00
Emmanuel Gil Peyrot
5b65b9b860 Prevent a crash when giving focus to a non-GLFWwindow surface 2018-02-25 16:54:44 +01:00
Emmanuel Gil Peyrot
552e40a4be Add wl_subcompositor support 2018-02-25 16:54:44 +01:00
Emmanuel Gil Peyrot
79e16baca3 Add wp_viewporter support 2018-02-25 16:54:44 +01:00
Emmanuel Gil Peyrot
d6b9d00ceb Wayland: Handle monitor removal 2018-02-24 22:18:39 +01:00
Emmanuel Gil Peyrot
608f055c72 Wayland: Open the timerfd with cloexec 2018-02-24 21:06:25 +01:00
Emmanuel Gil Peyrot
84d10b32c3 Wayland: Ask xkbcommon whether to repeat a key 2018-02-24 21:06:25 +01:00
Emmanuel Gil Peyrot
8bc0c5c2c0 Wayland: dlsym() xkb_keymap_key_repeats 2018-02-24 21:06:25 +01:00
Emmanuel Gil Peyrot
97bf16e5b6 Wayland: Check for wayland protocol version
wl_keyboard version 4 is more recent than the libwayland available in
Ubuntu 14.04.
2018-02-24 21:06:25 +01:00
Emmanuel Gil Peyrot
90f5edc0b8 Wayland: Use a timerfd for key repeat 2018-02-24 21:06:25 +01:00
Emmanuel Gil Peyrot
c14a35e21e Wayland: Obtain keyboard repeat_info
This had to bump the seat version, we now may get the seat name but we
don’t do anything with it.
2018-02-24 21:06:25 +01:00
Camilla Löwy
53b193a161 Wayland: Fix uninitialized variable warning
Related to #1143.
Fixes #1197.
2018-02-06 13:10:41 +01:00
Emmanuel Gil Peyrot
525ad7bfb8 Close the libwayland-cursor handle after destroying the cursor theme
Fixes a segfault on glfwTerminate().
2018-01-29 04:55:55 +01:00