cookbook: Fix key press to examine modifers correctly
The simple key press example in the cookbook used a brittle and incorrect switch statement to test modifier values. Instead, use logical "&" of the state with the modifiers we're interested in to check which keys were pressed. http://bugzilla.clutter-project.org/show_bug.cgi?id=2223
This commit is contained in:
parent
5865d2a4b3
commit
e45b8be71b
@ -102,6 +102,7 @@ g_signal_connect (actor, "key-press-event", G_CALLBACK (_key_press_cb), NULL);
|
||||
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
static gboolean
|
||||
_key_press_cb (ClutterActor *actor,
|
||||
ClutterEvent *event,
|
||||
@ -109,24 +110,18 @@ _key_press_cb (ClutterActor *actor,
|
||||
{
|
||||
guint keyval = clutter_event_get_key_symbol (event);
|
||||
|
||||
ClutterModifierType state = clutter_event_get_state (event);
|
||||
gboolean shift_pressed = (state & CLUTTER_SHIFT_MASK ? TRUE : FALSE);
|
||||
gboolean ctrl_pressed = (state & CLUTTER_CONTROL_MASK ? TRUE : FALSE);
|
||||
|
||||
if (CLUTTER_Up == keyval)
|
||||
{
|
||||
ClutterModifierType modifiers = clutter_event_get_state (event);
|
||||
|
||||
switch (modifiers)
|
||||
{
|
||||
case CLUTTER_SHIFT_MASK:
|
||||
g_debug ("Up and shift pressed");
|
||||
break;
|
||||
|
||||
case CLUTTER_SHIFT_MASK + CLUTTER_CONTROL_MASK:
|
||||
if (shift_pressed & ctrl_pressed)
|
||||
g_debug ("Up and shift and control pressed");
|
||||
break;
|
||||
|
||||
default:
|
||||
else if (shift_pressed)
|
||||
g_debug ("Up and shift pressed");
|
||||
else
|
||||
g_debug ("Up pressed");
|
||||
break;
|
||||
}
|
||||
|
||||
/* The event was handled, and the emission should stop */
|
||||
return TRUE;
|
||||
@ -135,6 +130,7 @@ _key_press_cb (ClutterActor *actor,
|
||||
/* The event was not handled, and the emission should continue */
|
||||
return FALSE;
|
||||
}
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user