xwm: Use a simple heuristic for mapping X input events to a weston seat
This commit is contained in:
@@ -149,6 +149,7 @@ weston_wm_get_selection_targets(struct weston_wm *wm)
|
|||||||
{
|
{
|
||||||
struct x11_data_source *source;
|
struct x11_data_source *source;
|
||||||
struct weston_compositor *compositor;
|
struct weston_compositor *compositor;
|
||||||
|
struct weston_seat *seat = weston_wm_pick_seat(wm);
|
||||||
xcb_get_property_cookie_t cookie;
|
xcb_get_property_cookie_t cookie;
|
||||||
xcb_get_property_reply_t *reply;
|
xcb_get_property_reply_t *reply;
|
||||||
xcb_atom_t *value;
|
xcb_atom_t *value;
|
||||||
@@ -194,7 +195,7 @@ weston_wm_get_selection_targets(struct weston_wm *wm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
compositor = wm->server->compositor;
|
compositor = wm->server->compositor;
|
||||||
wl_seat_set_selection(&compositor->seat->seat, &source->base,
|
wl_seat_set_selection(&seat->seat, &source->base,
|
||||||
wl_display_next_serial(compositor->wl_display));
|
wl_display_next_serial(compositor->wl_display));
|
||||||
|
|
||||||
free(reply);
|
free(reply);
|
||||||
@@ -422,7 +423,7 @@ static void
|
|||||||
weston_wm_send_data(struct weston_wm *wm, xcb_atom_t target, const char *mime_type)
|
weston_wm_send_data(struct weston_wm *wm, xcb_atom_t target, const char *mime_type)
|
||||||
{
|
{
|
||||||
struct wl_data_source *source;
|
struct wl_data_source *source;
|
||||||
struct wl_seat *seat = &wm->server->compositor->seat->seat;
|
struct weston_seat *seat = weston_wm_pick_seat(wm);
|
||||||
int p[2];
|
int p[2];
|
||||||
|
|
||||||
if (pipe2(p, O_CLOEXEC | O_NONBLOCK) == -1) {
|
if (pipe2(p, O_CLOEXEC | O_NONBLOCK) == -1) {
|
||||||
@@ -440,7 +441,7 @@ weston_wm_send_data(struct weston_wm *wm, xcb_atom_t target, const char *mime_ty
|
|||||||
weston_wm_read_data_source,
|
weston_wm_read_data_source,
|
||||||
wm);
|
wm);
|
||||||
|
|
||||||
source = seat->selection_data_source;
|
source = seat->seat.selection_data_source;
|
||||||
source->send(source, mime_type, p[1]);
|
source->send(source, mime_type, p[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -550,6 +551,7 @@ weston_wm_handle_xfixes_selection_notify(struct weston_wm *wm,
|
|||||||
xcb_xfixes_selection_notify_event_t *xfixes_selection_notify =
|
xcb_xfixes_selection_notify_event_t *xfixes_selection_notify =
|
||||||
(xcb_xfixes_selection_notify_event_t *) event;
|
(xcb_xfixes_selection_notify_event_t *) event;
|
||||||
struct weston_compositor *compositor;
|
struct weston_compositor *compositor;
|
||||||
|
struct weston_seat *seat = weston_wm_pick_seat(wm);
|
||||||
uint32_t serial;
|
uint32_t serial;
|
||||||
|
|
||||||
weston_log("xfixes selection notify event: owner %d\n",
|
weston_log("xfixes selection notify event: owner %d\n",
|
||||||
@@ -561,7 +563,7 @@ weston_wm_handle_xfixes_selection_notify(struct weston_wm *wm,
|
|||||||
* proxy selection. Clear the wayland selection. */
|
* proxy selection. Clear the wayland selection. */
|
||||||
compositor = wm->server->compositor;
|
compositor = wm->server->compositor;
|
||||||
serial = wl_display_next_serial(compositor->wl_display);
|
serial = wl_display_next_serial(compositor->wl_display);
|
||||||
wl_seat_set_selection(&compositor->seat->seat, NULL, serial);
|
wl_seat_set_selection(&seat->seat, NULL, serial);
|
||||||
}
|
}
|
||||||
|
|
||||||
wm->selection_owner = XCB_WINDOW_NONE;
|
wm->selection_owner = XCB_WINDOW_NONE;
|
||||||
@@ -663,7 +665,7 @@ weston_wm_set_selection(struct wl_listener *listener, void *data)
|
|||||||
void
|
void
|
||||||
weston_wm_selection_init(struct weston_wm *wm)
|
weston_wm_selection_init(struct weston_wm *wm)
|
||||||
{
|
{
|
||||||
struct wl_seat *seat;
|
struct weston_seat *seat;
|
||||||
uint32_t values[1], mask;
|
uint32_t values[1], mask;
|
||||||
|
|
||||||
wm->selection_request.requestor = XCB_NONE;
|
wm->selection_request.requestor = XCB_NONE;
|
||||||
@@ -693,9 +695,9 @@ weston_wm_selection_init(struct weston_wm *wm)
|
|||||||
xcb_xfixes_select_selection_input(wm->conn, wm->selection_window,
|
xcb_xfixes_select_selection_input(wm->conn, wm->selection_window,
|
||||||
wm->atom.clipboard, mask);
|
wm->atom.clipboard, mask);
|
||||||
|
|
||||||
seat = &wm->server->compositor->seat->seat;
|
seat = weston_wm_pick_seat(wm);
|
||||||
wm->selection_listener.notify = weston_wm_set_selection;
|
wm->selection_listener.notify = weston_wm_set_selection;
|
||||||
wl_signal_add(&seat->selection_signal, &wm->selection_listener);
|
wl_signal_add(&seat->seat.selection_signal, &wm->selection_listener);
|
||||||
|
|
||||||
weston_wm_set_selection(&wm->selection_listener, seat);
|
weston_wm_set_selection(&wm->selection_listener, seat);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -879,6 +879,13 @@ weston_wm_handle_reparent_notify(struct weston_wm *wm, xcb_generic_event_t *even
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct weston_seat *
|
||||||
|
weston_wm_pick_seat(struct weston_wm *wm)
|
||||||
|
{
|
||||||
|
return container_of(wm->server->compositor->seat_list.next,
|
||||||
|
struct weston_seat, link);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
weston_wm_window_handle_moveresize(struct weston_wm_window *window,
|
weston_wm_window_handle_moveresize(struct weston_wm_window *window,
|
||||||
xcb_client_message_event_t *client_message)
|
xcb_client_message_event_t *client_message)
|
||||||
@@ -895,7 +902,7 @@ weston_wm_window_handle_moveresize(struct weston_wm_window *window,
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct weston_wm *wm = window->wm;
|
struct weston_wm *wm = window->wm;
|
||||||
struct weston_seat *seat = wm->server->compositor->seat;
|
struct weston_seat *seat = weston_wm_pick_seat(wm);
|
||||||
int detail;
|
int detail;
|
||||||
struct weston_shell_interface *shell_interface =
|
struct weston_shell_interface *shell_interface =
|
||||||
&wm->server->compositor->shell_interface;
|
&wm->server->compositor->shell_interface;
|
||||||
@@ -1047,6 +1054,7 @@ weston_wm_handle_button(struct weston_wm *wm, xcb_generic_event_t *event)
|
|||||||
xcb_button_press_event_t *button = (xcb_button_press_event_t *) event;
|
xcb_button_press_event_t *button = (xcb_button_press_event_t *) event;
|
||||||
struct weston_shell_interface *shell_interface =
|
struct weston_shell_interface *shell_interface =
|
||||||
&wm->server->compositor->shell_interface;
|
&wm->server->compositor->shell_interface;
|
||||||
|
struct weston_seat *seat = weston_wm_pick_seat(wm);
|
||||||
struct weston_wm_window *window;
|
struct weston_wm_window *window;
|
||||||
enum theme_location location;
|
enum theme_location location;
|
||||||
struct theme *t = wm->theme;
|
struct theme *t = wm->theme;
|
||||||
@@ -1068,8 +1076,7 @@ weston_wm_handle_button(struct weston_wm *wm, xcb_generic_event_t *event)
|
|||||||
|
|
||||||
switch (location) {
|
switch (location) {
|
||||||
case THEME_LOCATION_TITLEBAR:
|
case THEME_LOCATION_TITLEBAR:
|
||||||
shell_interface->move(window->shsurf,
|
shell_interface->move(window->shsurf, seat);
|
||||||
wm->server->compositor->seat);
|
|
||||||
break;
|
break;
|
||||||
case THEME_LOCATION_RESIZING_TOP:
|
case THEME_LOCATION_RESIZING_TOP:
|
||||||
case THEME_LOCATION_RESIZING_BOTTOM:
|
case THEME_LOCATION_RESIZING_BOTTOM:
|
||||||
@@ -1080,8 +1087,7 @@ weston_wm_handle_button(struct weston_wm *wm, xcb_generic_event_t *event)
|
|||||||
case THEME_LOCATION_RESIZING_BOTTOM_LEFT:
|
case THEME_LOCATION_RESIZING_BOTTOM_LEFT:
|
||||||
case THEME_LOCATION_RESIZING_BOTTOM_RIGHT:
|
case THEME_LOCATION_RESIZING_BOTTOM_RIGHT:
|
||||||
shell_interface->resize(window->shsurf,
|
shell_interface->resize(window->shsurf,
|
||||||
wm->server->compositor->seat,
|
seat, location);
|
||||||
location);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -152,3 +152,5 @@ weston_wm_create(struct weston_xserver *wxs);
|
|||||||
void
|
void
|
||||||
weston_wm_destroy(struct weston_wm *wm);
|
weston_wm_destroy(struct weston_wm *wm);
|
||||||
|
|
||||||
|
struct weston_seat *
|
||||||
|
weston_wm_pick_seat(struct weston_wm *wm);
|
||||||
|
|||||||
Reference in New Issue
Block a user