summaryrefslogtreecommitdiff
path: root/openbox/actions
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2011-10-16 11:10:14 -0400
committerDana Jansens <danakj@orodu.net>2012-09-30 14:46:11 -0400
commitad5b92588fbe36100cdc4ae7064883cd16e13a1e (patch)
tree4a6cd8ce8adac234350dc6866da9a5c93ed20c38 /openbox/actions
parent58f666a2a5111a16cbb1b416852e90c4c79f6671 (diff)
Don't make desktop switching interactive when no mods used. (Fix bug #5203)
Make mod state passing more consistent, and always give actions the full state instead of stripping sometimes. (They ended up expecting it stripped always).
Diffstat (limited to 'openbox/actions')
-rw-r--r--openbox/actions/cyclewindows.c7
-rw-r--r--openbox/actions/desktop.c10
-rw-r--r--openbox/actions/directionalwindows.c8
3 files changed, 14 insertions, 11 deletions
diff --git a/openbox/actions/cyclewindows.c b/openbox/actions/cyclewindows.c
index 5f0db27c..a64d2256 100644
--- a/openbox/actions/cyclewindows.c
+++ b/openbox/actions/cyclewindows.c
@@ -181,8 +181,9 @@ static gboolean i_input_func(guint initial_state,
gboolean *used)
{
Options *o = options;
- guint mods;
+ guint mods, initial_mods;
+ initial_mods = obt_keyboard_only_modmasks(initial_state);
mods = obt_keyboard_only_modmasks(e->xkey.state);
if (e->type == KeyRelease) {
/* remove from the state the mask of the modifier key being
@@ -201,14 +202,14 @@ static gboolean i_input_func(guint initial_state,
}
/* There were no modifiers and they pressed enter */
- else if ((sym == XK_Return || sym == XK_KP_Enter) && !initial_state) {
+ else if ((sym == XK_Return || sym == XK_KP_Enter) && !initial_mods) {
o->cancel = FALSE;
o->state = e->xkey.state;
return FALSE;
}
}
/* They released the modifiers */
- else if (e->type == KeyRelease && initial_state && !(mods & initial_state))
+ else if (e->type == KeyRelease && initial_mods && !(mods & initial_mods))
{
o->cancel = FALSE;
o->state = e->xkey.state;
diff --git a/openbox/actions/desktop.c b/openbox/actions/desktop.c
index a3a1f6b9..70d807db 100644
--- a/openbox/actions/desktop.c
+++ b/openbox/actions/desktop.c
@@ -319,8 +319,9 @@ static gboolean i_input_func(guint initial_state,
gpointer options,
gboolean *used)
{
- guint mods;
+ guint mods, initial_mods;
+ initial_mods = obt_keyboard_only_modmasks(initial_state);
mods = obt_keyboard_only_modmasks(e->xkey.state);
if (e->type == KeyRelease) {
/* remove from the state the mask of the modifier key being
@@ -336,11 +337,11 @@ static gboolean i_input_func(guint initial_state,
return FALSE;
/* There were no modifiers and they pressed enter */
- else if ((sym == XK_Return || sym == XK_KP_Enter) && !initial_state)
+ else if ((sym == XK_Return || sym == XK_KP_Enter) && !initial_mods)
return FALSE;
}
/* They released the modifiers */
- else if (e->type == KeyRelease && initial_state && !(mods & initial_state))
+ else if (e->type == KeyRelease && initial_mods && !(mods & initial_mods))
{
return FALSE;
}
@@ -350,7 +351,8 @@ static gboolean i_input_func(guint initial_state,
static gboolean i_pre_func(guint initial_state, gpointer options)
{
- if (!initial_state) {
+ guint initial_mods = obt_keyboard_only_modmasks(initial_state);
+ if (!inital_mods) {
Options *o = options;
o->interactive = FALSE;
return FALSE;
diff --git a/openbox/actions/directionalwindows.c b/openbox/actions/directionalwindows.c
index 602e7edc..0ad464b7 100644
--- a/openbox/actions/directionalwindows.c
+++ b/openbox/actions/directionalwindows.c
@@ -259,8 +259,9 @@ static gboolean i_input_func(guint initial_state,
gpointer options,
gboolean *used)
{
- guint mods;
+ guint mods, initial_mods;
+ initial_mods = obt_keyboard_only_modmasks(initial_state);
mods = obt_keyboard_only_modmasks(e->xkey.state);
if (e->type == KeyRelease) {
/* remove from the state the mask of the modifier key being
@@ -278,14 +279,13 @@ static gboolean i_input_func(guint initial_state,
}
/* There were no modifiers and they pressed enter */
- else if ((sym == XK_Return || sym == XK_KP_Enter) && !initial_state) {
+ else if ((sym == XK_Return || sym == XK_KP_Enter) && !initial_mods) {
end_cycle(FALSE, e->xkey.state, options);
return FALSE;
}
}
/* They released the modifiers */
- else if (e->type == KeyRelease && initial_state && !(mods & initial_state))
- {
+ else if (e->type == KeyRelease && initial_mods && !(mods & initial_mods)) {
end_cycle(FALSE, e->xkey.state, options);
return FALSE;
}