mirror of
https://github.com/labwc/labwc.git
synced 2026-03-03 01:40:37 -05:00
Revert "keyboard: add window rule to send release-events (#2377)"
This reverts commit 2f8afb2376.
This commit is contained in:
parent
adccc3ec84
commit
5bcc03db05
5 changed files with 3 additions and 48 deletions
|
|
@ -1099,18 +1099,6 @@ situation.
|
||||||
can be caused by *<margin>* settings or exclusive layer-shell clients
|
can be caused by *<margin>* settings or exclusive layer-shell clients
|
||||||
such as panels.
|
such as panels.
|
||||||
|
|
||||||
*<windowRules><windowRule wantAbsorbedModifierReleaseEvents="">* [yes|no|default]
|
|
||||||
*wantAbsorbedModifierReleaseEvents* allows clients to receive modifier
|
|
||||||
release events even if they are part of keybinds. Most clients should
|
|
||||||
not receive these, but some (for example blender) need it in some
|
|
||||||
situations.
|
|
||||||
|
|
||||||
```
|
|
||||||
<windowRules>
|
|
||||||
<windowRule identifier="blender" wantAbsorbedModifierReleaseEvents="yes"/>
|
|
||||||
</windowRules>
|
|
||||||
```
|
|
||||||
|
|
||||||
## MENU
|
## MENU
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,6 @@ struct window_rule {
|
||||||
enum property ignore_focus_request;
|
enum property ignore_focus_request;
|
||||||
enum property ignore_configure_request;
|
enum property ignore_configure_request;
|
||||||
enum property fixed_position;
|
enum property fixed_position;
|
||||||
enum property want_absorbed_modifier_release_events;
|
|
||||||
|
|
||||||
struct wl_list link; /* struct rcxml.window_rules */
|
struct wl_list link; /* struct rcxml.window_rules */
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -358,8 +358,6 @@ fill_window_rule(char *nodename, char *content)
|
||||||
set_property(content, ¤t_window_rule->ignore_configure_request);
|
set_property(content, ¤t_window_rule->ignore_configure_request);
|
||||||
} else if (!strcasecmp(nodename, "fixedPosition")) {
|
} else if (!strcasecmp(nodename, "fixedPosition")) {
|
||||||
set_property(content, ¤t_window_rule->fixed_position);
|
set_property(content, ¤t_window_rule->fixed_position);
|
||||||
} else if (!strcasecmp(nodename, "wantAbsorbedModifierReleaseEvents")) {
|
|
||||||
set_property(content, ¤t_window_rule->want_absorbed_modifier_release_events);
|
|
||||||
|
|
||||||
/* Actions */
|
/* Actions */
|
||||||
} else if (!strcmp(nodename, "name.action")) {
|
} else if (!strcmp(nodename, "name.action")) {
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@
|
||||||
#include "osd.h"
|
#include "osd.h"
|
||||||
#include "regions.h"
|
#include "regions.h"
|
||||||
#include "view.h"
|
#include "view.h"
|
||||||
#include "window-rules.h"
|
|
||||||
#include "workspaces.h"
|
#include "workspaces.h"
|
||||||
|
|
||||||
enum lab_key_handled {
|
enum lab_key_handled {
|
||||||
|
|
@ -366,8 +365,7 @@ get_keyinfo(struct wlr_keyboard *wlr_keyboard, uint32_t evdev_keycode)
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
handle_key_release(struct server *server, uint32_t evdev_keycode,
|
handle_key_release(struct server *server, uint32_t evdev_keycode)
|
||||||
bool is_modifier_key)
|
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Release events for keys that were not bound should always be
|
* Release events for keys that were not bound should always be
|
||||||
|
|
@ -390,33 +388,11 @@ handle_key_release(struct server *server, uint32_t evdev_keycode,
|
||||||
end_cycling(server);
|
end_cycling(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
key_state_bound_key_remove(evdev_keycode);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* There are some clients (for example blender) that want to see the
|
|
||||||
* modifier-release-event even if it was part of a keybinds. This is
|
|
||||||
* treated as a special case and can only be achieved by configuration.
|
|
||||||
*
|
|
||||||
* Most clients (including those using Qt and GTK) are setup to not see
|
|
||||||
* these modifier release events - and actually misbehave if they do.
|
|
||||||
* For example Firefox shows the menu bar if alt is pressed and then
|
|
||||||
* released, whereas if only pressed (because the release is absorbed)
|
|
||||||
* nothing happens. So, if Firefox saw bound modifier-release-events it
|
|
||||||
* would show the menu bar every time the window-switcher is used with
|
|
||||||
* alt-tab.
|
|
||||||
*/
|
|
||||||
struct view *view = server->active_view;
|
|
||||||
if (is_modifier_key && view) {
|
|
||||||
if (window_rules_get_property(view, "wantAbsorbedModifierReleaseEvents")
|
|
||||||
== LAB_PROP_TRUE) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If a press event was handled by a compositor binding, then do
|
* If a press event was handled by a compositor binding, then do
|
||||||
* not forward the corresponding release event to clients.
|
* not forward the corresponding release event to clients.
|
||||||
*/
|
*/
|
||||||
|
key_state_bound_key_remove(evdev_keycode);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -551,8 +527,7 @@ handle_compositor_keybindings(struct keyboard *keyboard,
|
||||||
actions_run(NULL, server, &cur_keybind->actions, NULL);
|
actions_run(NULL, server, &cur_keybind->actions, NULL);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return handle_key_release(server, event->keycode,
|
return handle_key_release(server, event->keycode);
|
||||||
keyinfo.is_modifier);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -108,11 +108,6 @@ window_rules_get_property(struct view *view, const char *property)
|
||||||
&& !strcasecmp(property, "fixedPosition")) {
|
&& !strcasecmp(property, "fixedPosition")) {
|
||||||
return rule->fixed_position;
|
return rule->fixed_position;
|
||||||
}
|
}
|
||||||
if (rule->want_absorbed_modifier_release_events
|
|
||||||
&& !strcasecmp(property,
|
|
||||||
"wantAbsorbedModifierReleaseEvents")) {
|
|
||||||
return rule->want_absorbed_modifier_release_events;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return LAB_PROP_UNSPECIFIED;
|
return LAB_PROP_UNSPECIFIED;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue