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:
Dana Jansens 2011-10-16 11:10:14 -04:00
parent 58f666a2a5
commit ad5b92588f
4 changed files with 15 additions and 12 deletions

View file

@ -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 */

View file

@ -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;

View file

@ -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;

View file

@ -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;
} }