From 4423c318e8300b0a7f5f2140f29c0dab004e5ce6 Mon Sep 17 00:00:00 2001 From: Nishi Date: Mon, 20 Apr 2026 15:51:51 +0900 Subject: [PATCH] fix for -O3 --- include/Mw/Core.h | 7 ------- include/Mw/LowLevel/Wayland.h | 2 +- include/Mw/MachDep.h | 1 - include/Mw/TypeDefs.h | 4 ++-- src/core.c | 9 +++------ src/widget/submenu.c | 2 -- 6 files changed, 6 insertions(+), 19 deletions(-) diff --git a/include/Mw/Core.h b/include/Mw/Core.h index ad4cd19..31c6ca4 100644 --- a/include/Mw/Core.h +++ b/include/Mw/Core.h @@ -246,13 +246,6 @@ MWDECL void MwSetErrorHandler(MwErrorHandler handler, void* user_data); */ MWDECL void MwDispatchError(int code, const char* message); -/*! - * @brief Gets the before_step of widget - * @param handle Widget - * @param jmpbuf jmp_buf - */ -MWDECL void MwGetBeforeStep(MwWidget handle, jmp_buf* jmpbuf); - /*! * @brief Forcefully makes widget render * @param handle Widget diff --git a/include/Mw/LowLevel/Wayland.h b/include/Mw/LowLevel/Wayland.h index 6aa9c48..42990a3 100644 --- a/include/Mw/LowLevel/Wayland.h +++ b/include/Mw/LowLevel/Wayland.h @@ -434,7 +434,7 @@ struct _MwLLWayland { }* wl_protocol_map; MwBool has_decorations; - char title[255]; + char title[256]; struct xkb_context* xkb_context; struct xkb_keymap* xkb_keymap; diff --git a/include/Mw/MachDep.h b/include/Mw/MachDep.h index df2043c..4c9b9d6 100644 --- a/include/Mw/MachDep.h +++ b/include/Mw/MachDep.h @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include diff --git a/include/Mw/TypeDefs.h b/include/Mw/TypeDefs.h index 5e62dbf..d3e4ba3 100644 --- a/include/Mw/TypeDefs.h +++ b/include/Mw/TypeDefs.h @@ -35,6 +35,7 @@ typedef void* MwWidget; #endif typedef void (*MwHandler)(MwWidget handle); typedef int (*MwHandlerWithStatus)(MwWidget handle); +typedef void (*MwHandlerProps)(MwWidget handle, const char** key); typedef void (*MwHandlerProp)(MwWidget handle, const char* key); typedef void (*MwHandlerChildrenProp)(MwWidget handle, MwWidget child, const char* key); typedef void (*MwHandlerKey)(MwWidget handle, int key); @@ -85,7 +86,6 @@ struct _MwWidget { int pressed; MwPoint mouse_point; int close; - jmp_buf before_step; int prop_event; void* internal; @@ -228,10 +228,10 @@ struct _MwClass { MwHandler children_update; MwHandlerChildrenProp children_prop_change; MwHandlerClipboardReceived clipboard; + MwHandlerProps props_change; void* reserved1; void* reserved2; void* reserved3; - void* reserved4; }; #endif diff --git a/src/core.c b/src/core.c index 15d1a51..d5a6903 100644 --- a/src/core.c +++ b/src/core.c @@ -340,8 +340,8 @@ static void MwFreeWidget(MwWidget handle) { } handle->destroyed = 0; - MwDispatch(handle, destroy); if(handle->destroy_inject != NULL) handle->destroy_inject(handle); + MwDispatch(handle, destroy); for(i = 0; i < arrlen(handle->children); i++) { MwFreeWidget(handle->children[i]); @@ -392,6 +392,8 @@ static void destroy_children(MwWidget handle) { } void MwDestroyWidget(MwWidget handle) { + if(handle->destroyed) return; + if(handle->parent != NULL) { int i; for(i = 0; i < arrlen(handle->parent->destroy_queue); i++) { @@ -457,7 +459,6 @@ static void MwAfterStep(MwWidget handle) { int MwStep(MwWidget handle) { int i; MwWidget* widgets = NULL; - if(setjmp(handle->before_step)) return 0; for(i = 0; i < arrlen(handle->children); i++) { arrput(widgets, handle->children[i]); } @@ -859,10 +860,6 @@ void MwDispatchError(int code, const char* message) { } } -void MwGetBeforeStep(MwWidget handle, jmp_buf* jmpbuf) { - memcpy(jmpbuf, &handle->before_step, sizeof(*jmpbuf)); -} - void MwForceRender(MwWidget handle) { MwLLForceRender(handle->lowlevel); } diff --git a/src/widget/submenu.c b/src/widget/submenu.c index b681c98..7a2afca 100644 --- a/src/widget/submenu.c +++ b/src/widget/submenu.c @@ -102,7 +102,6 @@ static void draw(MwWidget handle) { static void click(MwWidget handle) { MwWidget w = handle; - jmp_buf jmp; MwMenu menu = handle->internal; if(arrlen(menu->sub) > 0) { @@ -152,7 +151,6 @@ static void click(MwWidget handle) { MwForceRender(handle); } else if(strcmp(menu->sub[i]->name, "----") != 0 && arrlen(menu->sub[i]->sub) == 0) { while(w->parent->widget_class == MwSubMenuClass) w = w->parent; - MwGetBeforeStep(w, &jmp); MwDestroyWidget(w); ((MwMenu)w->internal)->wsub = NULL;