summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2019-06-17 23:45:25 +0200
committerThomas White <taw@physics.org>2019-06-17 23:45:25 +0200
commitc269b1fa9eaa247ef2b863367c249b996b4a01be (patch)
tree4181613d6b5d0fa0b200d647da491794958c6739
parent40130e129b523283e77dc7546e3a32671e0e1541 (diff)
Prevent auto-repeat on playback keys
-rw-r--r--src/display.c28
-rw-r--r--src/nanolight.c2
-rw-r--r--src/nanolight.h2
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;