# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1627069326 0 # Node ID d17e3fb76bdec621e3b8e5e0291bf64822e360b9 # Parent a256caa5034c32196ed399153fcf435352225cf9 dw_menu_popup() should also set handle NULL and add safety checks if missing. diff -r a256caa5034c -r d17e3fb76bde mac/dw.m --- a/mac/dw.m Fri Jul 23 19:26:01 2021 +0000 +++ b/mac/dw.m Fri Jul 23 19:42:06 2021 +0000 @@ -9432,25 +9432,29 @@ */ void API dw_menu_popup(HMENUI *menu, HWND parent, int x, int y) { - NSMenu *thismenu = (NSMenu *)*menu; - id object = parent; - NSView *view = [object isKindOfClass:[NSWindow class]] ? [object contentView] : parent; - NSWindow *window = [view window]; - NSEvent *event = [DWApp currentEvent]; - if(!window) - window = [event window]; - [thismenu autorelease]; - NSPoint p = NSMakePoint(x, [[NSScreen mainScreen] frame].size.height - y); - NSEvent* fake = [NSEvent mouseEventWithType:DWEventTypeRightMouseDown - location:_dw_windowPointFromScreen(window, p) - modifierFlags:0 - timestamp:[event timestamp] - windowNumber:[window windowNumber] - context:[NSGraphicsContext currentContext] - eventNumber:1 - clickCount:1 - pressure:0.0]; - [NSMenu popUpContextMenu:thismenu withEvent:fake forView:view]; + if(menu) + { + NSMenu *thismenu = (NSMenu *)*menu; + id object = parent; + NSView *view = [object isKindOfClass:[NSWindow class]] ? [object contentView] : parent; + NSWindow *window = [view window]; + NSEvent *event = [DWApp currentEvent]; + if(!window) + window = [event window]; + [thismenu autorelease]; + NSPoint p = NSMakePoint(x, [[NSScreen mainScreen] frame].size.height - y); + NSEvent* fake = [NSEvent mouseEventWithType:DWEventTypeRightMouseDown + location:_dw_windowPointFromScreen(window, p) + modifierFlags:0 + timestamp:[event timestamp] + windowNumber:[window windowNumber] + context:[NSGraphicsContext currentContext] + eventNumber:1 + clickCount:1 + pressure:0.0]; + [NSMenu popUpContextMenu:thismenu withEvent:fake forView:view]; + *menu = NULL; + } } char _dw_removetilde(char *dest, const char *src) diff -r a256caa5034c -r d17e3fb76bde os2/dw.c --- a/os2/dw.c Fri Jul 23 19:26:01 2021 +0000 +++ b/os2/dw.c Fri Jul 23 19:42:06 2021 +0000 @@ -6294,8 +6294,9 @@ if(menu) { popup = parent; - dw_window_set_data(*menu, "_dw_popup", (void *)1); + dw_window_set_data(*menu, "_dw_popup", DW_INT_TO_POINTER(1)); WinPopupMenu(HWND_DESKTOP, parent, *menu, x, dw_screen_height() - y, 0, PU_KEYBOARD | PU_MOUSEBUTTON1 | PU_VCONSTRAIN | PU_HCONSTRAIN); + *menu = 0; } } diff -r a256caa5034c -r d17e3fb76bde win/dw.c --- a/win/dw.c Fri Jul 23 19:26:01 2021 +0000 +++ b/win/dw.c Fri Jul 23 19:42:06 2021 +0000 @@ -6848,6 +6848,7 @@ _dw_popup = parent; TrackPopupMenu(mymenu, 0, x, y, 0, parent, NULL); PostMessage(DW_HWND_OBJECT, WM_USER+5, (LPARAM)mymenu, 0); + *menu = NULL; } }