diff options
author | Thomas White <taw@physics.org> | 2019-06-17 23:45:25 +0200 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2019-06-17 23:45:25 +0200 |
commit | c269b1fa9eaa247ef2b863367c249b996b4a01be (patch) | |
tree | 4181613d6b5d0fa0b200d647da491794958c6739 /src/display.c | |
parent | 40130e129b523283e77dc7546e3a32671e0e1541 (diff) |
Prevent auto-repeat on playback keys
Diffstat (limited to 'src/display.c')
-rw-r--r-- | src/display.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/display.c b/src/display.c index 72dfb2b..ed10330 100644 --- a/src/display.c +++ b/src/display.c @@ -472,6 +472,23 @@ static void execute_command(struct nanolight *nl) } +static gboolean key_release_sig(GtkWidget *da, GdkEventKey *event, struct nanolight *nl) +{ + switch ( event->keyval ) { + + case GDK_KEY_KP_Enter : + nl->go_lock = 0; + break; + + case GDK_KEY_KP_Add : + nl->sb_lock = 0; + break; + } + + return FALSE; +} + + static gboolean key_press_sig(GtkWidget *da, GdkEventKey *event, struct nanolight *nl) { gboolean r; @@ -509,11 +526,17 @@ static gboolean key_press_sig(GtkWidget *da, GdkEventKey *event, struct nanoligh break; case GDK_KEY_KP_Enter : - printf("Go!\n"); + if ( !nl->go_lock ) { + printf("Go!\n"); + nl->go_lock = 1; + } break; case GDK_KEY_KP_Add : - printf("Stop/back!\n"); + if ( !nl->sb_lock ) { + printf("Stop/back!\n"); + nl->sb_lock = 1; + } break; case GDK_KEY_Home : @@ -611,6 +634,7 @@ static gint realise_sig(GtkWidget *da, struct nanolight *nl) gdk_window_set_accept_focus(win, TRUE); g_signal_connect(G_OBJECT(nl->im_context), "commit", G_CALLBACK(im_commit_sig), nl); g_signal_connect(G_OBJECT(da), "key-press-event", G_CALLBACK(key_press_sig), nl); + g_signal_connect(G_OBJECT(da), "key-release-event", G_CALLBACK(key_release_sig), nl); g_signal_connect(G_OBJECT(da), "button-press-event", G_CALLBACK(button_press_sig), nl); g_signal_connect(G_OBJECT(da), "button-release-event", G_CALLBACK(button_release_sig), nl); g_signal_connect(G_OBJECT(da), "motion-notify-event", G_CALLBACK(motion_sig), nl); |