Moved to mgLib.
[xtoys] / xshutdown.c
index d65a9bd..d2a1750 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: xshutdown.c,v 1.2 1998/11/21 22:30:23 mdw Exp $
+ * $Id: xshutdown.c,v 1.5 1998/12/03 01:00:19 mdw Exp $
  *
  * Pretty GTK interface to waking up an xwait
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: xshutdown.c,v $
+ * Revision 1.5  1998/12/03 01:00:19  mdw
+ * Honour escape presses in the dialogue boxes.
+ *
+ * Revision 1.4  1998/12/03 00:39:45  mdw
+ * Force focus when starting up.
+ *
+ * Revision 1.3  1998/11/30 22:36:49  mdw
+ * Tidy up tabbing in help texts very slightly.
+ *
  * Revision 1.2  1998/11/21 22:30:23  mdw
  * Support GNU-style long options throughout, and introduce proper help
  * text to all programs.  Update manual pages to match.
@@ -49,7 +58,9 @@
 
 #include <gtk/gtk.h>
 #include <gdk/gdkprivate.h>
+#include <gdk/gdkkeysyms.h>
 
+#include "mdwfocus.h"
 #include "mdwopt.h"
 #include "quis.h"
 #include "xwait.h"
@@ -63,6 +74,29 @@ static Atom xwait_die;
 
 /*----- Main code ---------------------------------------------------------*/
 
+/* --- @check_escape@ --- *
+ *
+ * Arguments:  @GtkWidget *w@ = widget raising the signal
+ *             @GdkEventKey *ev@ = pointer to event data
+ *             @gpointer *p@ = widget to activate in response
+ *
+ * Returns:    ---
+ *
+ * Use:                Activates a widget when an escape keypress is detected.
+ */
+
+static gboolean check_escape(GtkWidget *w, GdkEventKey *ev, gpointer *p)
+{
+  if (ev->keyval == GDK_Escape) {
+    if (p)
+      gtk_widget_activate(GTK_WIDGET(p));
+    else
+      gtk_object_destroy(GTK_OBJECT(w));
+    return (1);
+  }
+  return (0);
+}
+
 /* --- @cancel@ --- *
  *
  * Just end the main loop.
@@ -148,7 +182,7 @@ int main(int argc, char *argv[])
 "-u, --usage           Display a short usage summary\n"
 "-v, --version         Display the program's version number\n"
 "\n"
-"-a, --atom=ATOM               Select the atom that `xwait' is waiting for\n"
+"-a, --atom=ATOM\t     Select the atom that `xwait' is waiting for\n"
 "-m, --msg=MSG         Select the message to send to `xwait'\n"
 "-p, --prompt=PROMPT   Select the prompt string in the confirmation box\n"
 "-t, --title=TITLE     Select the title string in the confirmation box\n",
@@ -203,6 +237,8 @@ int main(int argc, char *argv[])
       gtk_window_set_title(GTK_WINDOW(win), "xshutdown");
       gtk_signal_connect(GTK_OBJECT(win), "destroy",
                       GTK_SIGNAL_FUNC(cancel), 0);
+      gtk_signal_connect(GTK_OBJECT(win), "key_press_event",
+                        GTK_SIGNAL_FUNC(check_escape), 0);
 
       gtk_box_set_homogeneous(GTK_BOX(GTK_DIALOG(win)->action_area), 0);
 
@@ -226,6 +262,8 @@ int main(int argc, char *argv[])
 
       /* --- Make everything work --- */
 
+      gtk_widget_realize(win);
+      mdwfocus(win);
       gtk_widget_show(win);
       gtk_main();
       exit(EXIT_FAILURE);
@@ -273,6 +311,10 @@ int main(int argc, char *argv[])
 
     /* --- Show the completed window --- */
 
+    gtk_signal_connect(GTK_OBJECT(win), "key_press_event",
+                      GTK_SIGNAL_FUNC(check_escape), 0);
+    gtk_widget_realize(win);
+    mdwfocus(win);
     gtk_widget_show(win);
   }