wayland-device: Upgrade to v4 of seat

Get our keyboard repeat info from the server.
This commit is contained in:
Jasper St. Pierre 2014-07-25 09:37:06 -04:00
parent 6c35ae199e
commit 61f0ed80a1
2 changed files with 43 additions and 10 deletions

View File

@ -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 = {

View File

@ -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 =