|  |  |  | GTK+ Reference Manual |  | 
|---|
Why. 
	With
	gtk_accelerator_get_default_mod_mask()
	you can test for modifier keys reliably; this way your key
	event handlers will work correctly even if
	NumLock or CapsLock are
	activated.
      
      In a GdkEventKey, the
      state field is a bit mask which
      indicates the modifier state at the time the key was pressed.
      Modifiers are keys like Control and
      NumLock.  When implementing a GtkWidget::key_press_event
      handler, you should use gtk_accelerator_get_default_mod_mask() to
      test against modifier keys.  This function returns a bit mask
      which encompasses all the modifiers which the user may be
      actively pressing, such as Control,
      Shift, and Alt, but ignores
      "inocuous" modifiers such as NumLock and
      CapsLock.
    
      Say you want to see if
      Control-F10
      was pressed.  Doing a simple test like
      event->keysym == GDK_F10 &&
      event->state == GDK_CONTROL_MASK is not
      enough.  If CapsLock is pressed, then
      event->state will be equal to
      GDK_CONTROL_MASK | GDK_LOCK_MASK, and the
      simple test will fail.  By taking the logical-and of
      event->state and
      gtk_accelerator_get_default_mod_mask(), you
      can ignore the modifiers which are not actively pressed by the
      user at the same time as the base key.
    
The following example correctly tests for Control-F10 being pressed.
static gboolean
my_widget_key_press_event_handler (GtkWidget *widget, GdkEventKey *event)
{
  guint modifiers;
  modifiers = gtk_accelerator_get_default_mod_mask ();
  if (event->keysym == GDK_F10
      && (event->state & modifiers) == GDK_CONTROL_MASK)
    {
      g_print ("Control-F10 was pressed\n");
      return TRUE;
    }
  return FALSE;
}
    
| << Use GdkEventExpose.region | Use named icons >> |