Mercurial > dwindows
changeset 2617:d17e3fb76bde
dw_menu_popup() should also set handle NULL and add safety checks if missing.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Fri, 23 Jul 2021 19:42:06 +0000 |
parents | a256caa5034c |
children | 156ad91481eb |
files | mac/dw.m os2/dw.c win/dw.c |
diffstat | 3 files changed, 26 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- 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)
--- 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; } }