diff --git a/examples/basic/messagebox.c b/examples/basic/messagebox.c index 0a8f1cc..50481fd 100644 --- a/examples/basic/messagebox.c +++ b/examples/basic/messagebox.c @@ -8,7 +8,7 @@ void ok(MwWidget handle, void* user, void* call) { } void spawn(MwWidget handle, void* user, void* call) { - MwWidget mb = MwMessageBox(user, "news has arrived!", "title", MwMB_ICONNEWS | MwMB_BUTTONOK); + MwWidget mb = MwMessageBox(handle, "news has arrived!", "title", MwMB_ICONNEWS | MwMB_BUTTONOK); (void)handle; (void)call; diff --git a/src/backend/x11.c b/src/backend/x11.c index c902c57..c448598 100644 --- a/src/backend/x11.c +++ b/src/backend/x11.c @@ -869,7 +869,7 @@ static void MwLLMakePopupImpl(MwLL handle, MwLL parent) { Atom wndstate = XInternAtom(handle->x11.display, "_NET_WM_STATE", False); Atom wndmodal = XInternAtom(handle->x11.display, "_NET_WM_STATE_MODAL", False); - XSetTransientForHint(handle->x11.display, handle->x11.window, parent->x11.window); + if(parent != NULL) XSetTransientForHint(handle->x11.display, handle->x11.window, parent->x11.window); XChangeProperty(handle->x11.display, handle->x11.window, wndtype, XA_ATOM, 32, PropModeReplace, (unsigned char*)&wnddlg, 1); XChangeProperty(handle->x11.display, handle->x11.window, wndstate, XA_ATOM, 32, PropModeReplace, (unsigned char*)&wndmodal, 1); } diff --git a/src/core.c b/src/core.c index 81a8d33..e4ff0a4 100644 --- a/src/core.c +++ b/src/core.c @@ -280,7 +280,10 @@ int MwStep(MwWidget handle) { handle->prop_event = 1; clean_destroy_queue(handle); - if(handle->parent == NULL && handle->destroyed) return 1; + if(handle->parent == NULL && handle->destroyed){ + MwFreeWidget(handle); + return 1; + } return 0; } @@ -371,7 +374,10 @@ void MwSetVoid(MwWidget handle, const char* key, void* value) { MwLLSetIcon(handle->lowlevel, value); } else if(strcmp(key, MwNsizeHints) == 0) { MwSizeHints* sz = value; + + MwLLBeginStateChange(handle->lowlevel); MwLLSetSizeHints(handle->lowlevel, sz->min_width, sz->min_height, sz->max_width, sz->max_height); + MwLLEndStateChange(handle->lowlevel); } else { shput(handle->data, key, value); } diff --git a/src/dialog/colorpicker.c b/src/dialog/colorpicker.c index a61e121..6f49e9d 100644 --- a/src/dialog/colorpicker.c +++ b/src/dialog/colorpicker.c @@ -371,7 +371,7 @@ MwWidget MwColorPicker(MwWidget handle, const char* title) { MwLLBeginStateChange(window->lowlevel); if(handle != NULL) MwLLDetach(window->lowlevel, &p); - MwLLMakePopup(window->lowlevel, handle->lowlevel); + MwLLMakePopup(window->lowlevel, handle == NULL ? NULL : handle->lowlevel); MwLLEndStateChange(window->lowlevel); return window; diff --git a/src/dialog/filechooser.c b/src/dialog/filechooser.c index 5da06e3..c334afc 100644 --- a/src/dialog/filechooser.c +++ b/src/dialog/filechooser.c @@ -509,7 +509,7 @@ MwWidget MwFileChooser(MwWidget handle, const char* title) { MwLLBeginStateChange(window->lowlevel); if(handle != NULL) MwLLDetach(window->lowlevel, &p); - MwLLMakePopup(window->lowlevel, handle->lowlevel); + MwLLMakePopup(window->lowlevel, handle == NULL ? NULL : handle->lowlevel); MwLLEndStateChange(window->lowlevel); return window; diff --git a/src/dialog/messagebox.c b/src/dialog/messagebox.c index 8ef35e2..0da76e0 100644 --- a/src/dialog/messagebox.c +++ b/src/dialog/messagebox.c @@ -36,6 +36,7 @@ MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsi int wy; int ww = handle == NULL ? 0 : MwGetInteger(handle, MwNwidth); int wh = handle == NULL ? 0 : MwGetInteger(handle, MwNheight); + MwSizeHints sh; w = 512; h = 32 * 4; @@ -43,10 +44,14 @@ MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsi wx = wy = 0; if(handle == NULL) wx = wy = MwDEFAULT; + sh.min_width = sh.max_width = w; + sh.min_height = sh.max_height = h; + p.x = (ww - w) / 2; p.y = (wh - h) / 2; window = MwVaCreateWidget(MwWindowClass, "messagebox", handle, wx, wy, w, h, MwNtitle, title, + MwNsizeHints, &sh, NULL); window->opaque = NULL; @@ -106,8 +111,7 @@ MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsi MwLLBeginStateChange(window->lowlevel); if(handle != NULL) MwLLDetach(window->lowlevel, &p); - MwLLSetSizeHints(window->lowlevel, w, h, w, h); - MwLLMakePopup(window->lowlevel, handle->lowlevel); + MwLLMakePopup(window->lowlevel, handle == NULL ? NULL : handle->lowlevel); MwLLEndStateChange(window->lowlevel); MwAddUserHandler(window, MwNcloseHandler, messagebox_close, NULL);