cursor: also toggle mousebinds with ToggleKeybinds

Mousebinds can still be applied when the cursor is over their decoration
This commit is contained in:
tokyo4j 2025-07-24 11:08:03 +09:00 committed by Hiroaki Yamamoto
parent 73095f75cb
commit 024ab280a0
5 changed files with 26 additions and 12 deletions

View file

@ -610,6 +610,10 @@ cursor_process_motion(struct server *server, uint32_t time, double *sx, double *
struct mousebind *mousebind;
wl_list_for_each(mousebind, &rc.mousebinds, link) {
if (ctx.type == LAB_SSD_CLIENT
&& view_inhibits_actions(ctx.view, &mousebind->actions)) {
continue;
}
if (mousebind->mouse_event == MOUSE_ACTION_DRAG
&& mousebind->pressed_in_context) {
/*
@ -949,6 +953,10 @@ process_release_mousebinding(struct server *server,
uint32_t modifiers = keyboard_get_all_modifiers(&server->seat);
wl_list_for_each(mousebind, &rc.mousebinds, link) {
if (ctx->type == LAB_SSD_CLIENT
&& view_inhibits_actions(ctx->view, &mousebind->actions)) {
continue;
}
if (ssd_part_contains(mousebind->context, ctx->type)
&& mousebind->button == button
&& modifiers == mousebind->modifiers) {
@ -1016,6 +1024,10 @@ process_press_mousebinding(struct server *server, struct cursor_context *ctx,
uint32_t modifiers = keyboard_get_all_modifiers(&server->seat);
wl_list_for_each(mousebind, &rc.mousebinds, link) {
if (ctx->type == LAB_SSD_CLIENT
&& view_inhibits_actions(ctx->view, &mousebind->actions)) {
continue;
}
if (ssd_part_contains(mousebind->context, ctx->type)
&& mousebind->button == button
&& modifiers == mousebind->modifiers) {

View file

@ -211,9 +211,7 @@ match_keybinding_for_sym(struct server *server, uint32_t modifiers,
if (modifiers ^ keybind->modifiers) {
continue;
}
if (server->active_view
&& server->active_view->inhibits_keybinds
&& !actions_contain_toggle_keybinds(&keybind->actions)) {
if (view_inhibits_actions(server->active_view, &keybind->actions)) {
continue;
}
if (sym == XKB_KEY_NoSymbol) {

View file

@ -4,6 +4,7 @@
#include <strings.h>
#include <wlr/types/wlr_output_layout.h>
#include <wlr/types/wlr_security_context_v1.h>
#include "action.h"
#include "buffer.h"
#include "common/box.h"
#include "common/list.h"
@ -2444,6 +2445,12 @@ view_toggle_keybinds(struct view *view)
}
}
bool
view_inhibits_actions(struct view *view, struct wl_list *actions)
{
return view && view->inhibits_keybinds && !actions_contain_toggle_keybinds(actions);
}
void
mappable_connect(struct mappable *mappable, struct wlr_surface *surface,
wl_notify_func_t notify_map, wl_notify_func_t notify_unmap)
@ -2614,10 +2621,6 @@ view_destroy(struct view *view)
zfree(view->tiled_region_evacuate);
}
if (view->inhibits_keybinds) {
view->inhibits_keybinds = false;
}
osd_on_view_destroy(view);
undecorate(view);