diff --git a/include/Mw/StringDefs.h b/include/Mw/StringDefs.h index 05429ad..956a952 100644 --- a/include/Mw/StringDefs.h +++ b/include/Mw/StringDefs.h @@ -18,6 +18,7 @@ #define MwNchecked "Ichecked" #define MwNalignment "Ialignment" #define MwNbold "Ibold" +#define MwNmain "Imain" #define MwNtitle "Stitle" #define MwNtext "Stext" @@ -36,6 +37,7 @@ #define MwNmouseUpHandler "CmouseUpHandler" #define MwNchangedHandler "CchangedHandler" #define MwNkeyHandler "CkeyHandler" -#define MwNkeyReleasedHandler "CkeyReleasedHandler" +#define MwNkeyReleaseHandler "CkeyReleaseHandler" +#define MwNcloseHandler "CcloseHandler" #endif diff --git a/src/backend/x11.c b/src/backend/x11.c index b5fbb83..626ce6b 100644 --- a/src/backend/x11.c +++ b/src/backend/x11.c @@ -83,7 +83,9 @@ void MwLLDestroy(MwLL handle) { destroy_pixmap(handle); XFreeGC(handle->display, handle->gc); + XUnmapWindow(handle->display, handle->window); XDestroyWindow(handle->display, handle->window); + XFlush(handle->display); free(handle); } diff --git a/src/core.c b/src/core.c index f218022..92cc499 100644 --- a/src/core.c +++ b/src/core.c @@ -49,10 +49,18 @@ static void llresizehandler(MwLL handle, void* data) { static void llclosehandler(MwLL handle, void* data) { MwWidget h = (MwWidget)handle->user; + int n; (void)data; - h->close = 1; + if((n = MwGetInteger(h, MwNmain)) != -1 && n) { + while(h != NULL) { + h->close = 1; + MwDispatchUserHandler(h, MwNcloseHandler, NULL); + h = h->parent; + } + } + MwDestroyWidget(handle->user); } static void llmovehandler(MwLL handle, void* data) { @@ -75,7 +83,7 @@ static void llkeyhandler(MwLL handle, void* data) { static void llkeyrelhandler(MwLL handle, void* data) { MwWidget h = (MwWidget)handle->user; - MwDispatchUserHandler(h, MwNkeyReleasedHandler, data); + MwDispatchUserHandler(h, MwNkeyReleaseHandler, data); } MwWidget MwCreateWidget(MwClass widget_class, const char* name, MwWidget parent, int x, int y, unsigned int width, unsigned int height) {