From c269b1fa9eaa247ef2b863367c249b996b4a01be Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 17 Jun 2019 23:45:25 +0200 Subject: Prevent auto-repeat on playback keys --- src/display.c | 28 ++++++++++++++++++++++++++-- src/nanolight.c | 2 ++ src/nanolight.h | 2 ++ 3 files changed, 30 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); diff --git a/src/nanolight.c b/src/nanolight.c index aea925c..4751feb 100644 --- a/src/nanolight.c +++ b/src/nanolight.c @@ -208,6 +208,8 @@ int main(int argc, char *argv[]) nl.n_sel = 0; nl.sel_attr = ATT_INTENSITY; nl.dragging = 0; + nl.go_lock = 0; + nl.sb_lock = 0; create_fixture(&nl, &cls, "mh1", 0, 1); create_fixture(&nl, &cls, "mh2", 0, 52); diff --git a/src/nanolight.h b/src/nanolight.h index dfe7b6a..dec9f52 100644 --- a/src/nanolight.h +++ b/src/nanolight.h @@ -98,6 +98,8 @@ struct nanolight enum attr_class sel_attr; int dragging; int fine; + int go_lock; + int sb_lock; double x_orig; double y_orig; -- cgit v1.2.3