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).
This commit is contained in:
parent
58f666a2a5
commit
ad5b92588f
4 changed files with 15 additions and 12 deletions
|
@ -375,7 +375,7 @@ static gboolean actions_interactive_begin_act(ObActionsAct *act, guint state)
|
||||||
interactive_act = act;
|
interactive_act = act;
|
||||||
actions_act_ref(interactive_act);
|
actions_act_ref(interactive_act);
|
||||||
|
|
||||||
interactive_initial_state = obt_keyboard_only_modmasks(state);
|
interactive_initial_state = state;
|
||||||
|
|
||||||
/* if using focus_delay, stop the timer now so that focus doesn't go
|
/* if using focus_delay, stop the timer now so that focus doesn't go
|
||||||
moving on us, which would kill the action */
|
moving on us, which would kill the action */
|
||||||
|
|
|
@ -181,8 +181,9 @@ static gboolean i_input_func(guint initial_state,
|
||||||
gboolean *used)
|
gboolean *used)
|
||||||
{
|
{
|
||||||
Options *o = options;
|
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);
|
mods = obt_keyboard_only_modmasks(e->xkey.state);
|
||||||
if (e->type == KeyRelease) {
|
if (e->type == KeyRelease) {
|
||||||
/* remove from the state the mask of the modifier key being
|
/* 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 */
|
/* 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->cancel = FALSE;
|
||||||
o->state = e->xkey.state;
|
o->state = e->xkey.state;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* They released the modifiers */
|
/* 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->cancel = FALSE;
|
||||||
o->state = e->xkey.state;
|
o->state = e->xkey.state;
|
||||||
|
|
|
@ -319,8 +319,9 @@ static gboolean i_input_func(guint initial_state,
|
||||||
gpointer options,
|
gpointer options,
|
||||||
gboolean *used)
|
gboolean *used)
|
||||||
{
|
{
|
||||||
guint mods;
|
guint mods, initial_mods;
|
||||||
|
|
||||||
|
initial_mods = obt_keyboard_only_modmasks(initial_state);
|
||||||
mods = obt_keyboard_only_modmasks(e->xkey.state);
|
mods = obt_keyboard_only_modmasks(e->xkey.state);
|
||||||
if (e->type == KeyRelease) {
|
if (e->type == KeyRelease) {
|
||||||
/* remove from the state the mask of the modifier key being
|
/* 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;
|
return FALSE;
|
||||||
|
|
||||||
/* There were no modifiers and they pressed enter */
|
/* 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;
|
return FALSE;
|
||||||
}
|
}
|
||||||
/* They released the modifiers */
|
/* 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;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -350,7 +351,8 @@ static gboolean i_input_func(guint initial_state,
|
||||||
|
|
||||||
static gboolean i_pre_func(guint initial_state, gpointer options)
|
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;
|
Options *o = options;
|
||||||
o->interactive = FALSE;
|
o->interactive = FALSE;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -259,8 +259,9 @@ static gboolean i_input_func(guint initial_state,
|
||||||
gpointer options,
|
gpointer options,
|
||||||
gboolean *used)
|
gboolean *used)
|
||||||
{
|
{
|
||||||
guint mods;
|
guint mods, initial_mods;
|
||||||
|
|
||||||
|
initial_mods = obt_keyboard_only_modmasks(initial_state);
|
||||||
mods = obt_keyboard_only_modmasks(e->xkey.state);
|
mods = obt_keyboard_only_modmasks(e->xkey.state);
|
||||||
if (e->type == KeyRelease) {
|
if (e->type == KeyRelease) {
|
||||||
/* remove from the state the mask of the modifier key being
|
/* 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 */
|
/* 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);
|
end_cycle(FALSE, e->xkey.state, options);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* They released the modifiers */
|
/* 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);
|
end_cycle(FALSE, e->xkey.state, options);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue