# HG changeset patch # User Adrian Robert # Date 1236351157 0 # Node ID 03f8a267cd563daf7057e70db61ed9be15422e22 # Parent 99e14dddbf65b45feb1590e4452fe02d6f555ce7 * nsterm.m (x_set_window_size): Change back to calculated method of setting toolbar height under Cocoa. (Bug#2546) (EmacsView-windowWillUseStandardFrame:defaultFrame:): New method. (EmacsView-drawRect:): Completely shortcircuit if ns_in_resize. diff -r 99e14dddbf65 -r 03f8a267cd56 src/nsterm.m --- a/src/nsterm.m Fri Mar 06 11:08:32 2009 +0000 +++ b/src/nsterm.m Fri Mar 06 14:52:37 2009 +0000 @@ -1152,21 +1152,21 @@ pixelwidth = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, cols); pixelheight = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, rows); - /* If we have a change in toolbar display, calculate height */ + /* If we have a toolbar, take its height into account. */ + /* XXX: GNUstep has not yet implemented the first method below, added + in Panther, however the second is incorrect under Cocoa. */ if (tb) - /* XXX: GNUstep has not yet implemented the first method below, added - in Panther, however the second is incorrect under Cocoa. */ -#ifdef NS_IMPL_GNUSTEP - FRAME_NS_TOOLBAR_HEIGHT (f) - = NSHeight ([NSWindow frameRectForContentRect: NSMakeRect (0, 0, 0, 0) - styleMask: [window styleMask]]) - - FRAME_NS_TITLEBAR_HEIGHT (f); + FRAME_NS_TOOLBAR_HEIGHT (f) = +#ifdef NS_IMPL_COCOA + NSHeight ([window frameRectForContentRect: NSMakeRect (0, 0, 0, 0)]) + /* NOTE: previously this would generate wrong result if toolbar not + yet displayed and fixing toolbar_height=32 helped, but + now (200903) seems no longer needed */ #else - FRAME_NS_TOOLBAR_HEIGHT (f) = 32; - /* actually get wrong result here if toolbar not yet displayed - NSHeight ([window frameRectForContentRect: NSMakeRect (0, 0, 0, 0)]) - - FRAME_NS_TITLEBAR_HEIGHT (f); */ + NSHeight ([NSWindow frameRectForContentRect: NSMakeRect (0, 0, 0, 0) + styleMask: [window styleMask]]) #endif + - FRAME_NS_TITLEBAR_HEIGHT (f); else FRAME_NS_TOOLBAR_HEIGHT (f) = 0; @@ -5293,14 +5293,33 @@ /* if we don't do this manually, the window will resize but not move */ - (BOOL)windowShouldZoom: (NSWindow *)sender toFrame: (NSRect)newFrame { + NSTRACE (windowShouldZoom); [[self window] setFrame: newFrame display: NO]; return YES; } #endif -/* Implement this to control size of frame on zoom. + +/* Override to do something slightly nonstandard, but nice. First click on + zoom button will zoom vertically. Second will zoom completely. Third + returns to original. */ - (NSRect)windowWillUseStandardFrame:(NSWindow *)sender - defaultFrame:(NSRect)defaultFrame; */ + defaultFrame:(NSRect)defaultFrame +{ + NSRect result = [sender frame]; + NSTRACE (windowWillUseStandardFrame); + + if (result.size.height == defaultFrame.size.height) { + result = defaultFrame; + } else { + result.size.height = defaultFrame.size.height; + result.origin.y = defaultFrame.origin.y; + } + + /* A windowWillResize does not get generated at least on Tiger. */ + [self windowWillResize: sender toSize: result.size]; + return result; +} - (void)windowDidDeminiaturize: sender @@ -5448,18 +5467,13 @@ NSTRACE (drawRect); - if (!emacsframe || !emacsframe->output_data.ns) + if (!emacsframe || !emacsframe->output_data.ns || ns_in_resize) return; - if (!ns_in_resize) - ns_clear_frame_area (emacsframe, x, y, width, height); + ns_clear_frame_area (emacsframe, x, y, width, height); expose_frame (emacsframe, x, y, width, height); - emacsframe->async_visible = 1; emacsframe->async_iconified = 0; - -/* SET_FRAME_GARBAGED (emacsframe); - ns_send_appdefined (-1); */ }