From: Alex Wu <[email protected]>
This commit tracks the changes in wayland input protocol from
wl_input_device to wl_seat.
---
src/lib/ecore_wayland/Ecore_Wayland.h | 6 +-
src/lib/ecore_wayland/ecore_wl_input.c | 133 +++++++++++++++++++++----------
src/lib/ecore_wayland/ecore_wl_window.c | 14 ++--
3 files changed, 104 insertions(+), 49 deletions(-)
diff --git a/src/lib/ecore_wayland/Ecore_Wayland.h
b/src/lib/ecore_wayland/Ecore_Wayland.h
index 2d4ac51..15f6b7f 100644
--- a/src/lib/ecore_wayland/Ecore_Wayland.h
+++ b/src/lib/ecore_wayland/Ecore_Wayland.h
@@ -119,7 +119,11 @@ struct _Ecore_Wl_Output
struct _Ecore_Wl_Input
{
Ecore_Wl_Display *display;
- struct wl_input_device *input_device;
+ struct wl_seat *seat;
+ struct wl_pointer *pointer;
+ struct wl_keyboard *keyboard;
+ struct wl_touch *touch;
+
struct wl_data_device *data_device;
Ecore_Wl_Window *pointer_focus;
diff --git a/src/lib/ecore_wayland/ecore_wl_input.c
b/src/lib/ecore_wayland/ecore_wl_input.c
index 1627bc1..9f2c894 100644
--- a/src/lib/ecore_wayland/ecore_wl_input.c
+++ b/src/lib/ecore_wayland/ecore_wl_input.c
@@ -41,19 +41,21 @@
#define MOD_CONTROL_MASK 0x04
/* local function prototypes */
-static void _ecore_wl_input_cb_motion(void *data, struct wl_input_device
*input_device __UNUSED__, unsigned int timestamp, wl_fixed_t sx, wl_fixed_t sy);
-static void _ecore_wl_input_cb_button(void *data, struct wl_input_device
*input_device __UNUSED__, unsigned int serial, unsigned int timestamp, unsigned
int button, unsigned int state);
-static void _ecore_wl_input_cb_axis(void *data, struct wl_input_device
*input_device __UNUSED__, unsigned int timestamp, unsigned int axis, int value);
-static void _ecore_wl_input_cb_key(void *data, struct wl_input_device
*input_device __UNUSED__, unsigned int serial, unsigned int timestamp, unsigned
int key, unsigned int state);
-static void _ecore_wl_input_cb_pointer_enter(void *data, struct
wl_input_device *input_device __UNUSED__, unsigned int serial, struct
wl_surface *surface, wl_fixed_t sx, wl_fixed_t sy);
-static void _ecore_wl_input_cb_pointer_leave(void *data, struct
wl_input_device *input_device __UNUSED__, unsigned int serial, struct
wl_surface *surface);
-static void _ecore_wl_input_cb_keyboard_enter(void *data, struct
wl_input_device *input_device __UNUSED__, unsigned int serial, struct
wl_surface *surface, struct wl_array *keys __UNUSED__);
-static void _ecore_wl_input_cb_keyboard_leave(void *data, struct
wl_input_device *input_device __UNUSED__, unsigned int serial, struct
wl_surface *surface);
-static void _ecore_wl_input_cb_touch_down(void *data, struct wl_input_device
*input_device __UNUSED__, unsigned int serial, unsigned int timestamp, struct
wl_surface *surface __UNUSED__, int id __UNUSED__, wl_fixed_t x, wl_fixed_t y);
-static void _ecore_wl_input_cb_touch_up(void *data, struct wl_input_device
*input_device __UNUSED__, unsigned int serial, unsigned int timestamp, int id
__UNUSED__);
-static void _ecore_wl_input_cb_touch_motion(void *data, struct wl_input_device
*input_device __UNUSED__, unsigned int timestamp, int id __UNUSED__, wl_fixed_t
x, wl_fixed_t y);
-static void _ecore_wl_input_cb_touch_frame(void *data __UNUSED__, struct
wl_input_device *input_device __UNUSED__);
-static void _ecore_wl_input_cb_touch_cancel(void *data __UNUSED__, struct
wl_input_device *input_device __UNUSED__);
+static void _ecore_wl_input_seat_handle_capabilities(void *data, struct
wl_seat *seat, enum wl_seat_capability caps);
+
+static void _ecore_wl_input_cb_pointer_enter(void *data, struct wl_pointer
*pointer __UNUSED__, unsigned int serial, struct wl_surface *surface,
wl_fixed_t sx, wl_fixed_t sy);
+static void _ecore_wl_input_cb_pointer_leave(void *data, struct wl_pointer
*pointer __UNUSED__, unsigned int serial, struct wl_surface *surface);
+static void _ecore_wl_input_cb_pointer_motion(void *data, struct wl_pointer
*pointer __UNUSED__, unsigned int timestamp, wl_fixed_t sx, wl_fixed_t sy);
+static void _ecore_wl_input_cb_pointer_button(void *data, struct wl_pointer
*pointer __UNUSED__, unsigned int serial, unsigned int timestamp, unsigned int
button, unsigned int state);
+static void _ecore_wl_input_cb_pointer_axis(void *data, struct wl_pointer
*pointer __UNUSED__, unsigned int timestamp, unsigned int axis, int value);
+static void _ecore_wl_input_cb_keyboard_enter(void *data, struct wl_keyboard
*keyboard __UNUSED__, unsigned int serial, struct wl_surface *surface, struct
wl_array *keys __UNUSED__);
+static void _ecore_wl_input_cb_keyboard_leave(void *data, struct wl_keyboard
*keyboard __UNUSED__, unsigned int serial, struct wl_surface *surface);
+static void _ecore_wl_input_cb_keyboard_key(void *data, struct wl_keyboard
*keyboard __UNUSED__, unsigned int serial, unsigned int timestamp, unsigned int
key, unsigned int state);
+static void _ecore_wl_input_cb_touch_down(void *data, struct wl_touch *touch
__UNUSED__, unsigned int serial, unsigned int timestamp, struct wl_surface
*surface __UNUSED__, int id __UNUSED__, wl_fixed_t x, wl_fixed_t y);
+static void _ecore_wl_input_cb_touch_up(void *data, struct wl_touch *touch
__UNUSED__, unsigned int serial, unsigned int timestamp, int id __UNUSED__);
+static void _ecore_wl_input_cb_touch_motion(void *data, struct wl_touch *touch
__UNUSED__, unsigned int timestamp, int id __UNUSED__, wl_fixed_t x, wl_fixed_t
y);
+static void _ecore_wl_input_cb_touch_frame(void *data __UNUSED__, struct
wl_touch *touch __UNUSED__);
+static void _ecore_wl_input_cb_touch_cancel(void *data __UNUSED__, struct
wl_touch *touch __UNUSED__);
static void _ecore_wl_input_cb_data_offer(void *data, struct wl_data_device
*data_device, unsigned int id);
static void _ecore_wl_input_cb_data_enter(void *data, struct wl_data_device
*data_device, unsigned int timestamp, struct wl_surface *surface, wl_fixed_t x,
wl_fixed_t y, struct wl_data_offer *offer);
static void _ecore_wl_input_cb_data_leave(void *data, struct wl_data_device
*data_device);
@@ -73,16 +75,21 @@ static void _ecore_wl_input_mouse_wheel_send(Ecore_Wl_Input
*input, unsigned int
/* static int _ecore_wl_input_keysym_to_string(unsigned int symbol, char
*buffer, int len); */
/* wayland interfaces */
-static const struct wl_input_device_listener _ecore_wl_input_listener =
-{
- _ecore_wl_input_cb_motion,
- _ecore_wl_input_cb_button,
- _ecore_wl_input_cb_axis,
- _ecore_wl_input_cb_key,
+static const struct wl_pointer_listener pointer_listener = {
_ecore_wl_input_cb_pointer_enter,
_ecore_wl_input_cb_pointer_leave,
+ _ecore_wl_input_cb_pointer_motion,
+ _ecore_wl_input_cb_pointer_button,
+ _ecore_wl_input_cb_pointer_axis
+};
+
+static const struct wl_keyboard_listener keyboard_listener = {
_ecore_wl_input_cb_keyboard_enter,
_ecore_wl_input_cb_keyboard_leave,
+ _ecore_wl_input_cb_keyboard_key
+};
+
+static const struct wl_touch_listener touch_listener = {
_ecore_wl_input_cb_touch_down,
_ecore_wl_input_cb_touch_up,
_ecore_wl_input_cb_touch_motion,
@@ -90,6 +97,12 @@ static const struct wl_input_device_listener
_ecore_wl_input_listener =
_ecore_wl_input_cb_touch_cancel
};
+static const struct wl_seat_listener _ecore_wl_seat_listener =
+{
+ _ecore_wl_input_seat_handle_capabilities,
+};
+
+
static const struct wl_data_device_listener _ecore_wl_data_listener =
{
_ecore_wl_input_cb_data_offer,
@@ -136,16 +149,16 @@ _ecore_wl_input_add(Ecore_Wl_Display *ewd, unsigned int
id)
input->pointer_focus = NULL;
input->keyboard_focus = NULL;
- input->input_device =
- wl_display_bind(ewd->wl.display, id, &wl_input_device_interface);
+ input->seat =
+ wl_display_bind(ewd->wl.display, id, &wl_seat_interface);
wl_list_insert(ewd->inputs.prev, &input->link);
- wl_input_device_add_listener(input->input_device,
- &_ecore_wl_input_listener, input);
- wl_input_device_set_user_data(input->input_device, input);
+ wl_seat_add_listener(input->seat,
+ &_ecore_wl_seat_listener, input);
+ wl_seat_set_user_data(input->seat, input);
input->data_device =
wl_data_device_manager_get_data_device(ewd->wl.data_device_manager,
- input->input_device);
+ input->seat);
wl_data_device_add_listener(input->data_device,
&_ecore_wl_data_listener, input);
ewd->input = input;
@@ -163,7 +176,7 @@ _ecore_wl_input_del(Ecore_Wl_Input *input)
input->selection_source = NULL;
if (input->data_device) wl_data_device_destroy(input->data_device);
- if (input->input_device) wl_input_device_destroy(input->input_device);
+ if (input->seat) wl_seat_destroy(input->seat);
wl_list_remove(&input->link);
free(input);
}
@@ -177,7 +190,45 @@ _ecore_wl_input_pointer_xy_get(int *x, int *y)
/* local functions */
static void
-_ecore_wl_input_cb_motion(void *data, struct wl_input_device *input_device
__UNUSED__, unsigned int timestamp, wl_fixed_t sx, wl_fixed_t sy)
+_ecore_wl_input_seat_handle_capabilities(void *data, struct wl_seat *seat,
+ enum wl_seat_capability caps)
+{
+ Ecore_Wl_Input *input = data;
+
+ if ((caps & WL_SEAT_CAPABILITY_POINTER) && !input->pointer) {
+ input->pointer = wl_seat_get_pointer(seat);
+ wl_pointer_set_user_data(input->pointer, input);
+ wl_pointer_add_listener(input->pointer, &pointer_listener,
+ input);
+ } else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && input->pointer) {
+ wl_pointer_destroy(input->pointer);
+ input->pointer = NULL;
+ }
+
+ if ((caps & WL_SEAT_CAPABILITY_KEYBOARD) && !input->keyboard) {
+ input->keyboard = wl_seat_get_keyboard(seat);
+ wl_keyboard_set_user_data(input->keyboard, input);
+ wl_keyboard_add_listener(input->keyboard, &keyboard_listener,
+ input);
+ } else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && input->keyboard) {
+ wl_keyboard_destroy(input->keyboard);
+ input->keyboard = NULL;
+ }
+
+ if ((caps & WL_SEAT_CAPABILITY_TOUCH) && !input->touch) {
+ input->touch = wl_seat_get_touch(seat);
+ wl_touch_set_user_data(input->touch, input);
+ wl_touch_add_listener(input->touch, &touch_listener,
+ input);
+ } else if (!(caps & WL_SEAT_CAPABILITY_TOUCH) && input->touch) {
+ wl_touch_destroy(input->touch);
+ input->touch = NULL;
+ }
+}
+
+
+static void
+_ecore_wl_input_cb_pointer_motion(void *data, struct wl_pointer *pointer
__UNUSED__, unsigned int timestamp, wl_fixed_t sx, wl_fixed_t sy)
{
Ecore_Wl_Input *input;
@@ -199,7 +250,7 @@ _ecore_wl_input_cb_motion(void *data, struct
wl_input_device *input_device __UNU
}
static void
-_ecore_wl_input_cb_button(void *data, struct wl_input_device *input_device
__UNUSED__, unsigned int serial, unsigned int timestamp, unsigned int button,
unsigned int state)
+_ecore_wl_input_cb_pointer_button(void *data, struct wl_pointer *pointer
__UNUSED__, unsigned int serial, unsigned int timestamp, unsigned int button,
unsigned int state)
{
Ecore_Wl_Input *input;
@@ -235,7 +286,7 @@ _ecore_wl_input_cb_button(void *data, struct
wl_input_device *input_device __UNU
}
static void
-_ecore_wl_input_cb_axis(void *data, struct wl_input_device *input_device
__UNUSED__, unsigned int timestamp, unsigned int axis, int value)
+_ecore_wl_input_cb_pointer_axis(void *data, struct wl_pointer *pointer
__UNUSED__, unsigned int timestamp, unsigned int axis, int value)
{
Ecore_Wl_Input *input;
@@ -295,7 +346,7 @@ _ecore_wl_input_cb_axis(void *data, struct wl_input_device
*input_device __UNUSE
/* } */
static void
-_ecore_wl_input_cb_key(void *data, struct wl_input_device *input_device
__UNUSED__, unsigned int serial, unsigned int timestamp, unsigned int keycode,
unsigned int state)
+_ecore_wl_input_cb_keyboard_key(void *data, struct wl_keyboard *keyboard
__UNUSED__, unsigned int serial, unsigned int timestamp, unsigned int keycode,
unsigned int state)
{
Ecore_Wl_Input *input;
Ecore_Wl_Window *win;
@@ -376,7 +427,7 @@ _ecore_wl_input_cb_key(void *data, struct wl_input_device
*input_device __UNUSED
}
static void
-_ecore_wl_input_cb_pointer_enter(void *data, struct wl_input_device
*input_device __UNUSED__, unsigned int serial, struct wl_surface *surface,
wl_fixed_t sx, wl_fixed_t sy)
+_ecore_wl_input_cb_pointer_enter(void *data, struct wl_pointer *pointer
__UNUSED__, unsigned int serial, struct wl_surface *surface, wl_fixed_t sx,
wl_fixed_t sy)
{
Ecore_Wl_Input *input;
Ecore_Wl_Window *win = NULL;
@@ -441,7 +492,7 @@ _ecore_wl_input_cb_pointer_enter(void *data, struct
wl_input_device *input_devic
}
static void
-_ecore_wl_input_cb_pointer_leave(void *data, struct wl_input_device
*input_device __UNUSED__, unsigned int serial, struct wl_surface *surface)
+_ecore_wl_input_cb_pointer_leave(void *data, struct wl_pointer *pointer
__UNUSED__, unsigned int serial, struct wl_surface *surface)
{
Ecore_Wl_Input *input;
Ecore_Wl_Window *win;
@@ -470,7 +521,7 @@ _ecore_wl_input_cb_pointer_leave(void *data, struct
wl_input_device *input_devic
}
static void
-_ecore_wl_input_cb_keyboard_enter(void *data, struct wl_input_device
*input_device __UNUSED__, unsigned int serial, struct wl_surface *surface,
struct wl_array *keys __UNUSED__)
+_ecore_wl_input_cb_keyboard_enter(void *data, struct wl_keyboard *keyboard
__UNUSED__, unsigned int serial, struct wl_surface *surface, struct wl_array
*keys __UNUSED__)
{
Ecore_Wl_Input *input;
Ecore_Wl_Window *win = NULL;
@@ -499,7 +550,7 @@ _ecore_wl_input_cb_keyboard_enter(void *data, struct
wl_input_device *input_devi
}
static void
-_ecore_wl_input_cb_keyboard_leave(void *data, struct wl_input_device
*input_device __UNUSED__, unsigned int serial, struct wl_surface *surface)
+_ecore_wl_input_cb_keyboard_leave(void *data, struct wl_keyboard *keyboard
__UNUSED__, unsigned int serial, struct wl_surface *surface)
{
Ecore_Wl_Input *input;
Ecore_Wl_Window *win;
@@ -528,7 +579,7 @@ _ecore_wl_input_cb_keyboard_leave(void *data, struct
wl_input_device *input_devi
}
static void
-_ecore_wl_input_cb_touch_down(void *data, struct wl_input_device *input_device
__UNUSED__, unsigned int serial, unsigned int timestamp, struct wl_surface
*surface __UNUSED__, int id __UNUSED__, wl_fixed_t x, wl_fixed_t y)
+_ecore_wl_input_cb_touch_down(void *data, struct wl_touch *touch __UNUSED__,
unsigned int serial, unsigned int timestamp, struct wl_surface *surface
__UNUSED__, int id __UNUSED__, wl_fixed_t x, wl_fixed_t y)
{
Ecore_Wl_Input *input;
@@ -547,7 +598,7 @@ _ecore_wl_input_cb_touch_down(void *data, struct
wl_input_device *input_device _
}
static void
-_ecore_wl_input_cb_touch_up(void *data, struct wl_input_device *input_device
__UNUSED__, unsigned int serial, unsigned int timestamp, int id __UNUSED__)
+_ecore_wl_input_cb_touch_up(void *data, struct wl_touch *touch __UNUSED__,
unsigned int serial, unsigned int timestamp, int id __UNUSED__)
{
Ecore_Wl_Input *input;
@@ -564,7 +615,7 @@ _ecore_wl_input_cb_touch_up(void *data, struct
wl_input_device *input_device __U
}
static void
-_ecore_wl_input_cb_touch_motion(void *data, struct wl_input_device
*input_device __UNUSED__, unsigned int timestamp, int id __UNUSED__, wl_fixed_t
x, wl_fixed_t y)
+_ecore_wl_input_cb_touch_motion(void *data, struct wl_touch *touch __UNUSED__,
unsigned int timestamp, int id __UNUSED__, wl_fixed_t x, wl_fixed_t y)
{
Ecore_Wl_Input *input;
@@ -582,13 +633,13 @@ _ecore_wl_input_cb_touch_motion(void *data, struct
wl_input_device *input_device
}
static void
-_ecore_wl_input_cb_touch_frame(void *data __UNUSED__, struct wl_input_device
*input_device __UNUSED__)
+_ecore_wl_input_cb_touch_frame(void *data __UNUSED__, struct wl_touch *touch
__UNUSED__)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
}
static void
-_ecore_wl_input_cb_touch_cancel(void *data __UNUSED__, struct wl_input_device
*input_device __UNUSED__)
+_ecore_wl_input_cb_touch_cancel(void *data __UNUSED__, struct wl_touch *touch
__UNUSED__)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
}
@@ -846,12 +897,12 @@ _ecore_wl_input_mouse_wheel_send(Ecore_Wl_Input *input,
unsigned int axis, int v
/* ev->root.x = input->sx; */
/* ev->root.y = input->sy; */
- if (axis == WL_INPUT_DEVICE_AXIS_VERTICAL_SCROLL)
+ if (axis == WL_POINTER_AXIS_VERTICAL_SCROLL)
{
ev->direction = 0;
ev->z = -value;
}
- else if (axis == WL_INPUT_DEVICE_AXIS_HORIZONTAL_SCROLL)
+ else if (axis == WL_POINTER_AXIS_HORIZONTAL_SCROLL)
{
ev->direction = 1;
ev->z = -value;
diff --git a/src/lib/ecore_wayland/ecore_wl_window.c
b/src/lib/ecore_wayland/ecore_wl_window.c
index 70e6ee6..eb77acc 100644
--- a/src/lib/ecore_wayland/ecore_wl_window.c
+++ b/src/lib/ecore_wayland/ecore_wl_window.c
@@ -173,9 +173,9 @@ ecore_wl_window_move(Ecore_Wl_Window *win, int x, int y)
}
}
- if ((!input) || (!input->input_device)) return;
+ if ((!input) || (!input->seat)) return;
- wl_shell_surface_move(win->shell_surface, input->input_device,
+ wl_shell_surface_move(win->shell_surface, input->seat,
input->display->serial);
}
}
@@ -233,9 +233,9 @@ ecore_wl_window_resize(Ecore_Wl_Window *win, int w, int h,
int location)
}
}
- if ((!input) || (!input->input_device)) return;
+ if ((!input) || (!input->seat)) return;
- wl_shell_surface_resize(win->shell_surface, input->input_device,
+ wl_shell_surface_resize(win->shell_surface, input->seat,
input->display->serial, location);
}
}
@@ -338,7 +338,7 @@ ecore_wl_window_show(Ecore_Wl_Window *win)
break;
case ECORE_WL_WINDOW_TYPE_MENU:
wl_shell_surface_set_popup(win->shell_surface,
- _ecore_wl_disp->input->input_device,
+ _ecore_wl_disp->input->seat,
_ecore_wl_disp->serial,
/*
win->parent->pointer_device->input_device, */
/* win->parent->pointer_device->timestamp,
*/
@@ -550,8 +550,8 @@ ecore_wl_window_pointer_set(Ecore_Wl_Window *win, struct
wl_buffer *buffer, int
if (!win) return;
input = _ecore_wl_disp->input;
- wl_input_device_attach(input->input_device, timestamp,
- buffer, hot_x, hot_y);
+ wl_pointer_attach(input->pointer, timestamp,
+ buffer, hot_x, hot_y);
}
/* @since 1.2 */
--
1.7.9.5
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel