diff -p -up xmris.4.0.5/xmris.c.orig xmris.4.0.5/xmris.c --- xmris.4.0.5/xmris.c.orig 2008-05-06 18:32:58.000000000 -0300 +++ xmris.4.0.5/xmris.c 2008-05-06 18:33:39.000000000 -0300 @@ -55,6 +55,8 @@ static VOIDFUNC action_pause PROTOARG((Widget, XEvent *, String *, Cardinal *)); static VOIDFUNC action_unmap PROTOARG((Widget, XEvent *, String *, Cardinal *)); +static VOIDFUNC action_quit + PROTOARG((Widget, XEvent *, String *, Cardinal *)); static VOIDFUNC age_scores PROTOARG((VOIDARG)); static PROTOANIMATE(animate_death); static PROTOANIMATE(animate_pause); @@ -75,6 +77,7 @@ static XtActionsRec actions[] = {"map", action_map}, {"unmap", action_unmap}, {"expose", action_expose}, + {"quit", action_quit}, }; /*}}}*/ /*{{{ static char CONST garden_translations[] =*/ @@ -96,6 +99,7 @@ static char CONST toplevel_translations[ "\ <MapNotify>:map()\n\ <UnmapNotify>:unmap()\n\ +<Message>WM_PROTOCOLS: quit()\n\ "; /*}}}*/ /*}}}*/ @@ -116,6 +120,22 @@ ARGSEP Cardinal *num_params return; } /*}}}*/ +/*{{{ void action_quit(widget, event, params, num_params)*/ +static VOIDFUNC action_quit +FUNCARG((widget, event, params, num_params), + Widget widget +ARGSEP XEvent *event +ARGSEP String *params +ARGSEP Cardinal *num_params +) +{ +#ifdef DEBUGEVENTLOOP + fprintf(stderr, "action_quit(0x%lx)\n", XtWindow(widget)); +#endif /* DEBUGEVENTLOOP */ + set_key_default(); + global.quit = 1; +} +/*}}}*/ /*{{{ void action_keypress(widget, event, params, num_params)*/ static VOIDFUNC action_keypress FUNCARG((widget, event, params, num_params), @@ -1235,6 +1255,7 @@ ARGSEP char CONST **argv ) { PROTOANIMATE((*animate)); + Atom wm_delete_window; myname = *argv ? *argv : "Xmris"; #ifndef TRANSPUTER @@ -1280,6 +1301,10 @@ ARGSEP char CONST **argv XtOverrideTranslations(display.toplevel, XtParseTranslationTable(toplevel_translations)); XtRealizeWidget(display.toplevel); + wm_delete_window = XInternAtom(XtDisplay(display.toplevel), "WM_DELETE_WINDOW", + False); + (void)XSetWMProtocols(XtDisplay(display.toplevel), XtWindow(display.toplevel), + &wm_delete_window, 1); #ifdef DEBUGEVENTLOOP printf("Toplevel is 0x%lx\n", (long)XtWindow(display.toplevel)); printf("Garden is 0x%lx\n", (long)XtWindow(display.garden));