window: handle key pressed properly

Before the code handling key presses was an unreadable mess. Now we use
gtk_accelerator_get_default_mod_mask as stated on Gtk documentation.
This commit is contained in:
Erick Pérez Castellanos
2014-12-04 17:10:49 -05:00
parent 2e82b098b3
commit 516a611055
+26 -18
View File
@@ -204,38 +204,46 @@ key_pressed (GtkWidget *widget,
gpointer user_data) gpointer user_data)
{ {
GcalWindowPrivate *priv; GcalWindowPrivate *priv;
GdkModifierType modifiers;
priv = gcal_window_get_instance_private (GCAL_WINDOW (user_data)); priv = gcal_window_get_instance_private (GCAL_WINDOW (user_data));
modifiers = gtk_accelerator_get_default_mod_mask ();
g_debug ("Catching key events"); g_debug ("Catching key events");
/* case 1:close leave new event mode */
if (priv->new_event_mode && if (priv->new_event_mode &&
event->keyval == GDK_KEY_Escape) event->keyval == GDK_KEY_Escape)
{ {
set_new_event_mode (GCAL_WINDOW (user_data), FALSE); set_new_event_mode (GCAL_WINDOW (user_data), FALSE);
return TRUE; return TRUE;
} }
else
/* case 2: write in new-event-widget entry */
if (priv->new_event_mode)
return FALSE;
/* case 3: leave search-mode*/
if (priv->search_mode && event->keyval == GDK_KEY_Escape)
{ {
if (priv->new_event_mode) gcal_window_set_search_mode (GCAL_WINDOW (widget), FALSE);
return FALSE; return TRUE;
}
if ((event->state & GDK_META_MASK) != 0 || /* case 4: write into search-mode entry */
(event->state & GDK_CONTROL_MASK) != 0 || if (priv->search_mode)
event->keyval == GDK_KEY_Control_L || return FALSE;
event->keyval == GDK_KEY_Control_R ||
event->keyval == GDK_KEY_Meta_L ||
event->keyval == GDK_KEY_Meta_R ||
event->keyval == GDK_KEY_Alt_L ||
event->keyval == GDK_KEY_Alt_R)
{
return FALSE;
}
if (priv->search_mode && event->keyval == GDK_KEY_Escape) /* case 5: open search-mode */
gcal_window_set_search_mode (GCAL_WINDOW (widget), FALSE); if (!priv->search_mode &&
if (!priv->search_mode) gdk_keyval_to_unicode (event->keyval) != 0 &&
gcal_window_set_search_mode (GCAL_WINDOW (widget), TRUE); ((event->state & modifiers & GDK_META_MASK) == 0) &&
((event->state & modifiers & GDK_SUPER_MASK) == 0) &&
((event->state & modifiers & GDK_HYPER_MASK) == 0) &&
((event->state & modifiers & GDK_CONTROL_MASK) == 0))
{
gcal_window_set_search_mode (GCAL_WINDOW (widget), TRUE);
return FALSE;
} }
return FALSE; return FALSE;