chiark / gitweb /
More comments.
[disorder] / disobedience / users.c
index a835ced63f0d26115f958685796dbcc8b0cadb6a..1d2a169c3910c7134a85df084b128cb81e5e1591 100644 (file)
@@ -2,20 +2,18 @@
  * This file is part of DisOrder
  * Copyright (C) 2008 Richard Kettlewell
  *
- * This program is free software; you can redistribute it and/or modify
+ * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 /** @file disobedience/users.c
  * @brief User management for Disobedience
@@ -35,7 +33,6 @@
  *
  * TODO:
  * - enter new username in the GtkTreeView
- * - escape and enter keys should work
  * - should have a cancel or close button, consistent with properties and login
  */
 
@@ -351,6 +348,8 @@ static void users_details_destroyed(GtkWidget attribute((unused)) *widget,
  * @param email Email address
  * @param rights User rights string
  * @param password Password
+ * @param nameflags Visibility/editability for username
+ * @param flags Visibility/editability for other fields
  */
 static void users_makedetails(const char *name,
                               const char *email,
@@ -672,6 +671,21 @@ static struct button users_buttons[] = {
 };
 #define NUSERS_BUTTONS (sizeof users_buttons / sizeof *users_buttons)
 
+/** @brief Keypress handler */
+static gboolean users_keypress(GtkWidget attribute((unused)) *widget,
+                               GdkEventKey *event,
+                               gpointer attribute((unused)) user_data) {
+  if(event->state)
+    return FALSE;
+  switch(event->keyval) {
+  case GDK_Escape:
+    gtk_widget_destroy(users_window);
+    return TRUE;
+  default:
+    return FALSE;
+  }
+}
+
 /** @brief Pop up the user management window */
 void manage_users(void) {
   GtkWidget *tree, *buttons, *hbox, *hbox2, *vbox, *vbox2;
@@ -692,6 +706,9 @@ void manage_users(void) {
   g_signal_connect(users_window, "destroy",
                   G_CALLBACK(gtk_widget_destroyed), &users_window);
   gtk_window_set_title(GTK_WINDOW(users_window), "User Management");
+  /* Keyboard shortcuts */
+  g_signal_connect(users_window, "key-press-event",
+                   G_CALLBACK(users_keypress), 0);
   /* default size is too small */
   gtk_window_set_default_size(GTK_WINDOW(users_window), 240, 240);