aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rootston/cursor.c8
-rw-r--r--rootston/desktop.c1
-rw-r--r--rootston/keyboard.c2
-rw-r--r--xwayland/xwm.c7
4 files changed, 11 insertions, 7 deletions
diff --git a/rootston/cursor.c b/rootston/cursor.c
index b55eab3f..9193f9b7 100644
--- a/rootston/cursor.c
+++ b/rootston/cursor.c
@@ -172,6 +172,10 @@ void set_view_focus(struct roots_input *input, struct roots_desktop *desktop,
if (!view) {
return;
}
+ if (view->type == ROOTS_XWAYLAND_VIEW &&
+ view->xwayland_surface->override_redirect) {
+ return;
+ }
input->last_active_view = view;
size_t index = 0;
@@ -187,6 +191,7 @@ void set_view_focus(struct roots_input *input, struct roots_desktop *desktop,
// TODO: list_swap
wlr_list_del(desktop->views, index);
wlr_list_add(desktop->views, view);
+ wlr_seat_keyboard_notify_enter(input->wl_seat, view->wlr_surface);
}
static void handle_cursor_motion(struct wl_listener *listener, void *data) {
@@ -275,9 +280,6 @@ static void do_cursor_button_press(struct roots_input *input,
input->input_events_idx = (i + 1)
% (sizeof(input->input_events) / sizeof(input->input_events[0]));
set_view_focus(input, desktop, view);
- if (view) {
- wlr_seat_keyboard_notify_enter(input->wl_seat, surface);
- }
break;
}
}
diff --git a/rootston/desktop.c b/rootston/desktop.c
index 30b5a519..9438ecea 100644
--- a/rootston/desktop.c
+++ b/rootston/desktop.c
@@ -112,7 +112,6 @@ void view_initialize(struct roots_view *view) {
struct roots_input *input = view->desktop->server->input;
set_view_focus(input, view->desktop, view);
- wlr_seat_keyboard_notify_enter(input->wl_seat, view->wlr_surface);
}
struct roots_view *view_at(struct roots_desktop *desktop, double lx, double ly,
diff --git a/rootston/keyboard.c b/rootston/keyboard.c
index 61604da0..ef0826aa 100644
--- a/rootston/keyboard.c
+++ b/rootston/keyboard.c
@@ -36,8 +36,6 @@ static void keyboard_binding_execute(struct roots_keyboard *keyboard,
if (server->desktop->views->length > 0) {
struct roots_view *view = server->desktop->views->items[0];
set_view_focus(keyboard->input, server->desktop, view);
- wlr_seat_keyboard_notify_enter(keyboard->input->wl_seat,
- view->wlr_surface);
}
} else if (strncmp(exec_prefix, command, strlen(exec_prefix)) == 0) {
const char *shell_cmd = command + strlen(exec_prefix);
diff --git a/xwayland/xwm.c b/xwayland/xwm.c
index 27d8bff9..90f2f21c 100644
--- a/xwayland/xwm.c
+++ b/xwayland/xwm.c
@@ -96,6 +96,10 @@ static void xwm_set_net_active_window(struct wlr_xwm *xwm,
static void xwm_send_focus_window(struct wlr_xwm *xwm,
struct wlr_xwayland_surface *surface) {
if (surface) {
+ if (surface->override_redirect) {
+ return;
+ }
+
xcb_client_message_event_t client_message;
client_message.response_type = XCB_CLIENT_MESSAGE;
client_message.format = 32;
@@ -124,7 +128,8 @@ static void xwm_send_focus_window(struct wlr_xwm *xwm,
void xwm_surface_activate(struct wlr_xwm *xwm,
struct wlr_xwayland_surface *xsurface) {
- if (xwm->focus_surface == xsurface) {
+ if (xwm->focus_surface == xsurface ||
+ (xsurface && xsurface->override_redirect)) {
return;
}