mirror of
https://github.com/labwc/labwc.git
synced 2026-02-06 04:06:33 -05:00
cursor: also toggle mousebinds with ToggleKeybinds
Mousebinds can still be applied when the cursor is over their decoration
This commit is contained in:
parent
73095f75cb
commit
024ab280a0
5 changed files with 26 additions and 12 deletions
|
|
@ -227,10 +227,10 @@ Actions are used in menus and keyboard/mouse bindings.
|
||||||
window.
|
window.
|
||||||
|
|
||||||
*<action name="ToggleKeybinds" />*
|
*<action name="ToggleKeybinds" />*
|
||||||
Stop handling keybinds other than ToggleKeybinds itself.
|
Stop handling keybinds/mousebinds other than ToggleKeybinds itself.
|
||||||
This can be used to allow A-Tab and similar keybinds to be delivered
|
This can be used to allow A-Tab and similar keybinds/mousebinds to be
|
||||||
to Virtual Machines, VNC clients or nested compositors.
|
delivered to Virtual Machines, VNC clients or nested compositors.
|
||||||
A second call will restore all original keybinds.
|
A second call will restore all original keybinds/mousebinds.
|
||||||
|
|
||||||
This action will only affect the window that had keyboard focus when
|
This action will only affect the window that had keyboard focus when
|
||||||
the binding was executed. Thus when switching to another window, all
|
the binding was executed. Thus when switching to another window, all
|
||||||
|
|
|
||||||
|
|
@ -229,7 +229,7 @@ struct view {
|
||||||
bool visible_on_all_workspaces;
|
bool visible_on_all_workspaces;
|
||||||
enum view_edge tiled;
|
enum view_edge tiled;
|
||||||
uint32_t edges_visible; /* enum wlr_edges bitset */
|
uint32_t edges_visible; /* enum wlr_edges bitset */
|
||||||
bool inhibits_keybinds;
|
bool inhibits_keybinds; /* also inhibits mousebinds */
|
||||||
xkb_layout_index_t keyboard_layout;
|
xkb_layout_index_t keyboard_layout;
|
||||||
|
|
||||||
/* Pointer to an output owned struct region, may be NULL */
|
/* Pointer to an output owned struct region, may be NULL */
|
||||||
|
|
@ -526,6 +526,7 @@ void mappable_connect(struct mappable *mappable, struct wlr_surface *surface,
|
||||||
void mappable_disconnect(struct mappable *mappable);
|
void mappable_disconnect(struct mappable *mappable);
|
||||||
|
|
||||||
void view_toggle_keybinds(struct view *view);
|
void view_toggle_keybinds(struct view *view);
|
||||||
|
bool view_inhibits_actions(struct view *view, struct wl_list *actions);
|
||||||
|
|
||||||
void view_set_activated(struct view *view, bool activated);
|
void view_set_activated(struct view *view, bool activated);
|
||||||
void view_set_output(struct view *view, struct output *output);
|
void view_set_output(struct view *view, struct output *output);
|
||||||
|
|
|
||||||
|
|
@ -610,6 +610,10 @@ cursor_process_motion(struct server *server, uint32_t time, double *sx, double *
|
||||||
|
|
||||||
struct mousebind *mousebind;
|
struct mousebind *mousebind;
|
||||||
wl_list_for_each(mousebind, &rc.mousebinds, link) {
|
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
|
if (mousebind->mouse_event == MOUSE_ACTION_DRAG
|
||||||
&& mousebind->pressed_in_context) {
|
&& mousebind->pressed_in_context) {
|
||||||
/*
|
/*
|
||||||
|
|
@ -949,6 +953,10 @@ process_release_mousebinding(struct server *server,
|
||||||
uint32_t modifiers = keyboard_get_all_modifiers(&server->seat);
|
uint32_t modifiers = keyboard_get_all_modifiers(&server->seat);
|
||||||
|
|
||||||
wl_list_for_each(mousebind, &rc.mousebinds, link) {
|
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)
|
if (ssd_part_contains(mousebind->context, ctx->type)
|
||||||
&& mousebind->button == button
|
&& mousebind->button == button
|
||||||
&& modifiers == mousebind->modifiers) {
|
&& 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);
|
uint32_t modifiers = keyboard_get_all_modifiers(&server->seat);
|
||||||
|
|
||||||
wl_list_for_each(mousebind, &rc.mousebinds, link) {
|
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)
|
if (ssd_part_contains(mousebind->context, ctx->type)
|
||||||
&& mousebind->button == button
|
&& mousebind->button == button
|
||||||
&& modifiers == mousebind->modifiers) {
|
&& modifiers == mousebind->modifiers) {
|
||||||
|
|
|
||||||
|
|
@ -211,9 +211,7 @@ match_keybinding_for_sym(struct server *server, uint32_t modifiers,
|
||||||
if (modifiers ^ keybind->modifiers) {
|
if (modifiers ^ keybind->modifiers) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (server->active_view
|
if (view_inhibits_actions(server->active_view, &keybind->actions)) {
|
||||||
&& server->active_view->inhibits_keybinds
|
|
||||||
&& !actions_contain_toggle_keybinds(&keybind->actions)) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (sym == XKB_KEY_NoSymbol) {
|
if (sym == XKB_KEY_NoSymbol) {
|
||||||
|
|
|
||||||
11
src/view.c
11
src/view.c
|
|
@ -4,6 +4,7 @@
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#include <wlr/types/wlr_output_layout.h>
|
#include <wlr/types/wlr_output_layout.h>
|
||||||
#include <wlr/types/wlr_security_context_v1.h>
|
#include <wlr/types/wlr_security_context_v1.h>
|
||||||
|
#include "action.h"
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
#include "common/box.h"
|
#include "common/box.h"
|
||||||
#include "common/list.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
|
void
|
||||||
mappable_connect(struct mappable *mappable, struct wlr_surface *surface,
|
mappable_connect(struct mappable *mappable, struct wlr_surface *surface,
|
||||||
wl_notify_func_t notify_map, wl_notify_func_t notify_unmap)
|
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);
|
zfree(view->tiled_region_evacuate);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (view->inhibits_keybinds) {
|
|
||||||
view->inhibits_keybinds = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
osd_on_view_destroy(view);
|
osd_on_view_destroy(view);
|
||||||
undecorate(view);
|
undecorate(view);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue