From bed95813a8517e53597affe65bfed6f115dfce39 Mon Sep 17 00:00:00 2001 From: Antoine Fontaine <antoine.fontaine@epfl.ch> Date: Sun, 16 Jun 2019 22:11:46 +0200 Subject: [PATCH] Added keybindings: ctrl-begin/end to switch to first or last course --- src/gui-window.c | 63 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/src/gui-window.c b/src/gui-window.c index 1bbafb4..4ade00a 100644 --- a/src/gui-window.c +++ b/src/gui-window.c @@ -117,39 +117,66 @@ gui_window_key_pressed_cb (GtkWidget *sender, case GDK_CONTROL_MASK: switch (keyval) { + + // quit case GDK_KEY_q: gtk_widget_destroy (GTK_WIDGET (self)); break; + + // go to first course + case GDK_KEY_Begin: + case GDK_KEY_KP_Begin: + case GDK_KEY_Home: + case GDK_KEY_KP_Home: + if (self->course_count > 0) { + const gchar *name = self->courses[0].name; + gtk_stack_set_visible_child_name (self->stack, name); + } + break; + + // go to last course + case GDK_KEY_End: + case GDK_KEY_KP_End: + if (self->course_count > 0) { + const gchar *name = self->courses[self->course_count-1].name; + gtk_stack_set_visible_child_name (self->stack, name); + } + break; + + // go to previous course case GDK_KEY_Page_Up: case GDK_KEY_KP_Page_Up: - { // that's a little hackish, but works well enough - const gchar *name = gtk_stack_get_visible_child_name (self->stack); - for (guint i=0; i<self->course_count; i++) { - if (!g_strcmp0 (name, self->courses[i].name)) { - if (i!=0) { - const gchar *target_name = self->courses[i-1].name; - gtk_stack_set_visible_child_name (self->stack, target_name); + if (self->course_count > 1) { // that's a little hackish, but works well enough + const gchar *name = gtk_stack_get_visible_child_name (self->stack); + for (guint i=0; i<self->course_count; i++) { + if (!g_strcmp0 (name, self->courses[i].name)) { + if (i > 0) { // we don't go before the first element + const gchar *target_name = self->courses[i-1].name; + gtk_stack_set_visible_child_name (self->stack, target_name); + } + break; } - break; } } - } break; + + // go to next course case GDK_KEY_Page_Down: case GDK_KEY_KP_Page_Down: - { - const gchar *name = gtk_stack_get_visible_child_name (self->stack); - for (guint i=0; i<self->course_count; i++) { - if (!g_strcmp0 (name, self->courses[i].name)) { - if (i!=self->course_count-1) { - const gchar *target_name = self->courses[i+1].name; - gtk_stack_set_visible_child_name (self->stack, target_name); + if (self->course_count > 1) { // that's a little hackish, but works well enough + const gchar *name = gtk_stack_get_visible_child_name (self->stack); + for (guint i=0; i<self->course_count; i++) { + if (!g_strcmp0 (name, self->courses[i].name)) { + if (i < self->course_count-1) { // we don't go past the last + const gchar *target_name = self->courses[i+1].name; + gtk_stack_set_visible_child_name (self->stack, target_name); + } + break; } - break; } } - } break; + default: return FALSE; } -- GitLab