chiark / gitweb /
Return & Escape work in properties popup
[disorder] / disobedience / properties.c
index 8b461090999fd26934bd456917f33933a269593f..4d5606c16614a3022ab8238b2f43d3e5826d44a3 100644 (file)
@@ -19,9 +19,6 @@
  */
 /** @file disobedience/properties.c
  * @brief Track properties editor
- *
- * TODO:
- * - return and escape keys should work 
  */
 #include "disobedience.h"
 
@@ -32,7 +29,7 @@ static void completed_namepart(struct prefdata *f);
 static const char *get_edited_namepart(struct prefdata *f);
 static void set_edited_namepart(struct prefdata *f, const char *value);
 static void set_namepart(struct prefdata *f, const char *value);
-static void set_namepart_completed(void *v, const char *error);
+static void set_namepart_completed(void *v, const char *err);
 
 static void kickoff_string(struct prefdata *f);
 static void completed_string(struct prefdata *f);
@@ -46,7 +43,7 @@ static const char *get_edited_boolean(struct prefdata *f);
 static void set_edited_boolean(struct prefdata *f, const char *value);
 static void set_boolean(struct prefdata *f, const char *value);
 
-static void prefdata_completed(void *v, const char *error, const char *value);
+static void prefdata_completed(void *v, const char *err, const char *value);
 static void prefdata_onerror(struct callbackdata *cbd,
                              int code,
                              const char *msg);
@@ -179,6 +176,24 @@ static void propagate_clicked(GtkButton attribute((unused)) *button,
   }
 }
 
+/** @brief Keypress handler */
+static gboolean properties_keypress(GtkWidget attribute((unused)) *widget,
+                                    GdkEventKey *event,
+                                    gpointer attribute((unused)) user_data) {
+  if(event->state)
+    return FALSE;
+  switch(event->keyval) {
+  case GDK_Return:
+    properties_ok(0, 0);
+    return TRUE;
+  case GDK_Escape:
+    properties_cancel(0, 0);
+    return TRUE;
+  default:
+    return FALSE;
+  }
+}
+
 void properties(int ntracks, const char **tracks) {
   int n, m;
   struct prefdata *f;
@@ -205,6 +220,9 @@ void properties(int ntracks, const char **tracks) {
   gtk_widget_set_style(properties_window, tool_style);
   g_signal_connect(properties_window, "destroy",
                   G_CALLBACK(gtk_widget_destroyed), &properties_window);
+  /* Keyboard shortcuts */
+  g_signal_connect(properties_window, "key-press-event",
+                   G_CALLBACK(properties_keypress), 0);
   /* Most of the action is the table of preferences */
   properties_table = gtk_table_new((NPREFS + 1) * ntracks, 2 + ntracks > 1,
                                    FALSE);