]> granicus.if.org Git - graphviz/commitdiff
Fix bug associated with clicking X to close an X dialogue box
authorerg <devnull@localhost>
Thu, 7 Sep 2006 15:48:30 +0000 (15:48 +0000)
committererg <devnull@localhost>
Thu, 7 Sep 2006 15:48:30 +0000 (15:48 +0000)
cmd/lefty/ws/x11/gcommon.c
cmd/lefty/ws/x11/gcommon.h
cmd/lefty/ws/x11/gquery.c

index 580f7ff424a970748be989a8be8406319950e04d..f2deef14ab2a94e85cb435eb0bd42d535f58e3a8 100644 (file)
@@ -49,6 +49,7 @@ static XtActionsRec actiontable[] = {
     { "lwkey", Glwkeyaction },
     { "tweol", Gtweolaction },
     { "qwpop", Gqwpopaction },
+    { "qwdel", Gqwdelaction },
     { "wmdel", Gwmdelaction },
 };
 static char defcwanytrans[] = "\
@@ -63,14 +64,16 @@ static char deflwanytrans[] = "\
     <KeyUp>: lwkey()";
 static char deftweoltrans[] = "<Key>Return: newline()\n<KeyUp>Return: tweol()";
 static char defqwpoptrans[] = "<KeyDown>Return:\n<KeyUp>Return: qwpop()";
+static char defqwdeltrans[] = "<Message>WM_PROTOCOLS: qwdel()\n";
 static char defwmdeltrans[] = "<Message>WM_PROTOCOLS: wmdel()\n";
 XtTranslations Gtweoltable;
 XtTranslations Gqwpoptable;
 XtTranslations Glwanytable;
 XtTranslations Gcwanytable;
+XtTranslations Gqwdeltable;
 XtTranslations Gwmdeltable;
 
-Atom Gwmdelatom;
+Atom Gqwdelatom, Gwmdelatom;
 
 static XtAppContext appcontext;
 static XFontStruct *deffont;
@@ -174,6 +177,7 @@ int Ginitgraphics (void) {
     Gqwpoptable = XtParseTranslationTable (defqwpoptrans);
     Glwanytable = XtParseTranslationTable (deflwanytrans);
     Gcwanytable = XtParseTranslationTable (defcwanytrans);
+    Gqwdeltable = XtParseTranslationTable (defqwdeltrans);
     Gwmdeltable = XtParseTranslationTable (defwmdeltrans);
     XtRegisterGrabAction (
         Glwbutaction, True,
@@ -188,6 +192,7 @@ int Ginitgraphics (void) {
     Gdepth = DefaultDepth (Gdisplay, Gscreenn);
     deffont = XLoadQueryFont (Gdisplay, "fixed");
     Gxfd = ConnectionNumber (Gdisplay);
+    Gqwdelatom = XInternAtom (Gdisplay, "WM_DELETE_WINDOW", False);
     Gwmdelatom = XInternAtom (Gdisplay, "WM_DELETE_WINDOW", False);
     Gpopdownflag = FALSE;
     Glazyq.flag = 0;
index 8bdc3e55516656dc44c0eea9b64ab9677405615e..e2174b24337bfb0b6518b73a740ffd480196fc76 100644 (file)
@@ -202,14 +202,16 @@ void Glwbutaction (Widget, XEvent *, char **, unsigned int *);
 void Glwkeyaction (Widget, XEvent *, char **, unsigned int *);
 void Gtweolaction (Widget, XEvent *, char **, unsigned int *);
 void Gqwpopaction (Widget, XEvent *, char **, unsigned int *);
+void Gqwdelaction (Widget, XEvent *, char **, unsigned int *);
 void Gwmdelaction (Widget, XEvent *, char **, unsigned int *);
 extern XtTranslations Gtweoltable;
 extern XtTranslations Gqwpoptable;
 extern XtTranslations Glwanytable;
 extern XtTranslations Gcwanytable;
+extern XtTranslations Gqwdeltable;
 extern XtTranslations Gwmdeltable;
 
-extern Atom Gwmdelatom;
+extern Atom Gqwdelatom, Gwmdelatom;
 
 #endif /* _GCOMMON_H */
 
index 262952f46b2911d946291e963a7fc89b7ed7a562..ebb31adbaa528bc5745c7dd6fc3840bbeb1bc605 100644 (file)
@@ -19,7 +19,6 @@
 #include "common.h"
 #include "g.h"
 #include "gcommon.h"
-
 #include "SF.h"
 
 #define WQU widget->u.q
@@ -81,6 +80,7 @@ int GQcreatewidget (
             return -1;
         }
         XtOverrideTranslations (w, Gqwpoptable);
+        XtOverrideTranslations (widget->w, Gqwdeltable);
         break;
     case G_QWFILE:
         widget->w = 0;
@@ -101,6 +101,7 @@ int GQcreatewidget (
             Gerr (POS, G_ERRCANNOTCREATEWIDGET);
             return -1;
         }
+        XtOverrideTranslations (widget->w, Gqwdeltable);
         break;
     }
     return 0;
@@ -189,6 +190,7 @@ int GQqueryask (
         ADD2ARGS (XtNvalue, args ? args : "");
         XtSetValues (WQU->w, argp, argn);
         XtRealizeWidget (widget->w);
+        XSetWMProtocols (Gdisplay, XtWindow (widget->w), &Gqwdelatom, 1);
         XQueryPointer (
             Gdisplay, XtWindow (widget->w),
             &rwin, &cwin, &rx, &ry, &x, &y, &mask
@@ -261,6 +263,7 @@ int GQqueryask (
                 s1++;
         }
         XtRealizeWidget (widget->w);
+        XSetWMProtocols (Gdisplay, XtWindow (widget->w), &Gqwdelatom, 1);
         XQueryPointer (
             Gdisplay, XtWindow (widget->w),
             &rwin, &cwin, &rx, &ry, &x, &y, &mask
@@ -318,6 +321,13 @@ void Gqwpopaction (Widget w, XEvent *evp, char **app, unsigned int *anp) {
     WQU->state = 1;
 }
 
+void Gqwdelaction (Widget w, XEvent *evp, char **app, unsigned int *anp) {
+    Gwidget_t *widget;
+
+    widget = findwidget ((unsigned long) w, G_QUERYWIDGET);
+    WQU->state = 1;
+}
+
 static void qwcallback (Widget w, XtPointer clientdata, XtPointer calldata) {
     Gwidget_t *widget;