[gtk+] wayland-device: Upgrade to v4 of seat
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] wayland-device: Upgrade to v4 of seat
- Date: Fri, 25 Jul 2014 14:28:25 +0000 (UTC)
commit 61f0ed80a1fb91bb356e8083672044b851ffdb3e
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Fri Jul 25 09:37:06 2014 -0400
wayland-device: Upgrade to v4 of seat
Get our keyboard repeat info from the server.
gdk/wayland/gdkdevice-wayland.c | 51 +++++++++++++++++++++++++++++++------
gdk/wayland/gdkdisplay-wayland.c | 2 +-
2 files changed, 43 insertions(+), 10 deletions(-)
---
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 96c5ebf..5e99e2e 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -82,6 +82,9 @@ struct _GdkWaylandDeviceData
uint32_t button_press_serial;
GdkWindow *pointer_grab_window;
uint32_t pointer_grab_time;
+ gboolean have_server_repeat;
+ uint32_t server_repeat_rate;
+ uint32_t server_repeat_delay;
guint32 repeat_timer;
guint32 repeat_key;
guint32 repeat_count;
@@ -1111,19 +1114,35 @@ get_key_repeat (GdkWaylandDeviceData *device,
{
gboolean repeat;
- GSettings *keyboard_settings = get_keyboard_settings (device);
-
- if (keyboard_settings)
+ if (device->have_server_repeat)
{
- repeat = g_settings_get_boolean (keyboard_settings, "repeat");
- *delay = g_settings_get_uint (keyboard_settings, "delay");
- *interval = g_settings_get_uint (keyboard_settings, "repeat-interval");
+ if (device->server_repeat_rate > 0)
+ {
+ repeat = TRUE;
+ *delay = device->server_repeat_delay;
+ *interval = (1000 / device->server_repeat_rate);
+ }
+ else
+ {
+ repeat = FALSE;
+ }
}
else
{
- repeat = TRUE;
- *delay = 400;
- *interval = 80;
+ GSettings *keyboard_settings = get_keyboard_settings (device);
+
+ if (keyboard_settings)
+ {
+ repeat = g_settings_get_boolean (keyboard_settings, "repeat");
+ *delay = g_settings_get_uint (keyboard_settings, "delay");
+ *interval = g_settings_get_uint (keyboard_settings, "repeat-interval");
+ }
+ else
+ {
+ repeat = TRUE;
+ *delay = 400;
+ *interval = 80;
+ }
}
return repeat;
@@ -1270,6 +1289,19 @@ keyboard_handle_modifiers (void *data,
g_signal_emit_by_name (keymap, "direction-changed");
}
+static void
+keyboard_handle_repeat_info (void *data,
+ struct wl_keyboard *keyboard,
+ uint32_t rate,
+ uint32_t delay)
+{
+ GdkWaylandDeviceData *device = data;
+
+ device->have_server_repeat = TRUE;
+ device->server_repeat_rate = rate;
+ device->server_repeat_delay = delay;
+}
+
static GdkWaylandTouchData *
_device_manager_add_touch (GdkWaylandDeviceData *device,
uint32_t id,
@@ -1452,6 +1484,7 @@ static const struct wl_keyboard_listener keyboard_listener = {
keyboard_handle_leave,
keyboard_handle_key,
keyboard_handle_modifiers,
+ keyboard_handle_repeat_info,
};
static const struct wl_touch_listener touch_listener = {
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
index e8c03e3..1d62160 100644
--- a/gdk/wayland/gdkdisplay-wayland.c
+++ b/gdk/wayland/gdkdisplay-wayland.c
@@ -171,7 +171,7 @@ gdk_registry_handle_global(void *data, struct wl_registry *registry, uint32_t id
wl_registry_bind(display_wayland->wl_registry, id, &wl_output_interface, MIN (version, 2));
_gdk_wayland_screen_add_output(display_wayland->screen, id, output, MIN (version, 2));
} else if (strcmp(interface, "wl_seat") == 0) {
- seat = wl_registry_bind(display_wayland->wl_registry, id, &wl_seat_interface, 3);
+ seat = wl_registry_bind(display_wayland->wl_registry, id, &wl_seat_interface, 4);
_gdk_wayland_device_manager_add_seat (gdk_display->device_manager, id, seat);
} else if (strcmp(interface, "wl_data_device_manager") == 0) {
display_wayland->data_device_manager =
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]