Mercurial > dwindows
changeset 735:b75be4860279
Possible fix for initial window creation with 0 size... not sure if the size I picked is good or not...
but it is better than invisible. Also make dw_window_function actually run on the main thread.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 15 Mar 2011 19:20:30 +0000 |
parents | 668a88a0b930 |
children | 5b48519a7fb2 |
files | mac/dw.m |
diffstat | 1 files changed, 48 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/mac/dw.m Tue Mar 15 06:40:37 2011 +0000 +++ b/mac/dw.m Tue Mar 15 19:20:30 2011 +0000 @@ -411,6 +411,21 @@ [window flushWindow]; } } +-(void)doWindowFunc:(id)param +{ + NSValue *v = (NSValue *)param; + void **params = (void **)[v pointerValue]; + void (* windowfunc)(void *); + + if(params) + { + windowfunc = params[0]; + if(windowfunc) + { + windowfunc(params[1]); + } + } +} @end DWObject *DWObj; @@ -5625,12 +5640,12 @@ { int _locked_by_me = FALSE; DW_MUTEX_LOCK; - NSRect frame = NSMakeRect(1,1,1,1); + NSRect frame = NSMakeRect(1,1,1,1); NSWindow *window = [[NSWindow alloc] - initWithContentRect:frame - styleMask:(flStyle | NSTexturedBackgroundWindowMask) - backing:NSBackingStoreBuffered - defer:false]; + initWithContentRect:frame + styleMask:(flStyle | NSTexturedBackgroundWindowMask) + backing:NSBackingStoreBuffered + defer:false]; [window setTitle:[ NSString stringWithUTF8String:title ]]; @@ -5638,9 +5653,8 @@ [window setContentView:view]; [window setDelegate:view]; - [window makeKeyAndOrderFront:nil]; #ifdef BUILDING_FOR_SNOW_LEOPARD - [window setAllowsConcurrentViewDrawing:NO]; + [window setAllowsConcurrentViewDrawing:NO]; #endif [view release]; @@ -5657,8 +5671,8 @@ [window setHidesOnDeactivate:YES]; } } - DW_MUTEX_UNLOCK; - return (HWND)window; + DW_MUTEX_UNLOCK; + return (HWND)window; } /* @@ -5670,12 +5684,12 @@ */ void API dw_window_function(HWND handle, void *function, void *data) { - void (* windowfunc)(void *); - - windowfunc = function; - - if(windowfunc) - windowfunc(data); + void **params = calloc(2, sizeof(void *)); + NSValue *v = [NSValue valueWithPointer:params]; + params[0] = function; + params[1] = data; + [DWObj performSelectorOnMainThread:@selector(doWindowFunc:) withObject:v waitUntilDone:YES]; + free(params); } @@ -5715,20 +5729,27 @@ */ int API dw_window_show(HWND handle) { - NSObject *object = handle; + NSObject *object = handle; - if([ object isKindOfClass:[ NSWindow class ] ]) - { - NSWindow *window = handle; - if([window isMiniaturized]) - { - [window deminiaturize:nil]; - } - [window orderFront:nil]; - [[window contentView] windowResized:nil]; + if([ object isKindOfClass:[ NSWindow class ] ]) + { + NSWindow *window = handle; + NSRect rect = [window frame]; + if([window isMiniaturized]) + { + [window deminiaturize:nil]; + } + /* If we haven't been sized by a call.. */ + if(rect.size.width < 1 || rect.size.height < 1) + { + /* Make a sane default size because MacOS won't automatically */ + [window setContentSize:NSMakeSize(200,150)]; + } + [window makeKeyAndOrderFront:nil]; + [[window contentView] windowResized:nil]; [[window contentView] windowDidBecomeMain:nil]; - } - return 0; + } + return 0; } /*