mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-29 16:05:59 +01:00
xwm: dont focus override redirect windows
This commit is contained in:
parent
d6a1e6fd79
commit
7914f4bda9
4 changed files with 11 additions and 7 deletions
|
@ -172,6 +172,10 @@ void set_view_focus(struct roots_input *input, struct roots_desktop *desktop,
|
||||||
if (!view) {
|
if (!view) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (view->type == ROOTS_XWAYLAND_VIEW &&
|
||||||
|
view->xwayland_surface->override_redirect) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
input->last_active_view = view;
|
input->last_active_view = view;
|
||||||
|
|
||||||
size_t index = 0;
|
size_t index = 0;
|
||||||
|
@ -187,6 +191,7 @@ void set_view_focus(struct roots_input *input, struct roots_desktop *desktop,
|
||||||
// TODO: list_swap
|
// TODO: list_swap
|
||||||
wlr_list_del(desktop->views, index);
|
wlr_list_del(desktop->views, index);
|
||||||
wlr_list_add(desktop->views, view);
|
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) {
|
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)
|
input->input_events_idx = (i + 1)
|
||||||
% (sizeof(input->input_events) / sizeof(input->input_events[0]));
|
% (sizeof(input->input_events) / sizeof(input->input_events[0]));
|
||||||
set_view_focus(input, desktop, view);
|
set_view_focus(input, desktop, view);
|
||||||
if (view) {
|
|
||||||
wlr_seat_keyboard_notify_enter(input->wl_seat, surface);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,7 +112,6 @@ void view_initialize(struct roots_view *view) {
|
||||||
struct roots_input *input = view->desktop->server->input;
|
struct roots_input *input = view->desktop->server->input;
|
||||||
|
|
||||||
set_view_focus(input, view->desktop, view);
|
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,
|
struct roots_view *view_at(struct roots_desktop *desktop, double lx, double ly,
|
||||||
|
|
|
@ -36,8 +36,6 @@ static void keyboard_binding_execute(struct roots_keyboard *keyboard,
|
||||||
if (server->desktop->views->length > 0) {
|
if (server->desktop->views->length > 0) {
|
||||||
struct roots_view *view = server->desktop->views->items[0];
|
struct roots_view *view = server->desktop->views->items[0];
|
||||||
set_view_focus(keyboard->input, server->desktop, view);
|
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) {
|
} else if (strncmp(exec_prefix, command, strlen(exec_prefix)) == 0) {
|
||||||
const char *shell_cmd = command + strlen(exec_prefix);
|
const char *shell_cmd = command + strlen(exec_prefix);
|
||||||
|
|
|
@ -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,
|
static void xwm_send_focus_window(struct wlr_xwm *xwm,
|
||||||
struct wlr_xwayland_surface *surface) {
|
struct wlr_xwayland_surface *surface) {
|
||||||
if (surface) {
|
if (surface) {
|
||||||
|
if (surface->override_redirect) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
xcb_client_message_event_t client_message;
|
xcb_client_message_event_t client_message;
|
||||||
client_message.response_type = XCB_CLIENT_MESSAGE;
|
client_message.response_type = XCB_CLIENT_MESSAGE;
|
||||||
client_message.format = 32;
|
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,
|
void xwm_surface_activate(struct wlr_xwm *xwm,
|
||||||
struct wlr_xwayland_surface *xsurface) {
|
struct wlr_xwayland_surface *xsurface) {
|
||||||
if (xwm->focus_surface == xsurface) {
|
if (xwm->focus_surface == xsurface ||
|
||||||
|
(xsurface && xsurface->override_redirect)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue