# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: address@hidden # target_branch: http://bzr.savannah.gnu.org/r/emacs/trunk # testament_sha1: cb25bfa7130858067241507e19cd3d6a13629ee6 # timestamp: 2010-01-31 23:59:04 +0000 # base_revision_id: address@hidden # # Begin patch === modified file 'src/nsfns.m' --- src/nsfns.m 2010-01-15 01:46:53 +0000 +++ src/nsfns.m 2010-01-31 23:58:16 +0000 @@ -1029,7 +1029,7 @@ x_set_fringe_width, /* generic OK */ x_set_fringe_width, /* generic OK */ 0, /* x_set_wait_for_wm, will ignore */ - 0, /* x_set_fullscreen will ignore */ + x_set_fullscreen, /* generic OK */ x_set_font_backend, /* generic OK */ x_set_alpha, 0, /* x_set_sticky */ === modified file 'src/nsterm.m' --- src/nsterm.m 2010-01-31 05:23:09 +0000 +++ src/nsterm.m 2010-01-31 23:58:16 +0000 @@ -1103,6 +1103,10 @@ NSTRACE (x_set_offset); + /* Refuse to change one or both offsets if in full-screen mode. */ + if (f->want_fullscreen & FULLSCREEN_BOTH) + return; + BLOCK_INPUT; f->left_pos = xoff; @@ -1150,6 +1154,9 @@ && oldTB == tb)) return; + if (f->want_fullscreen & FULLSCREEN_BOTH) + return; + /*fprintf (stderr, "\tsetWindowSize: %d x %d, font size %d x %d\n", cols, rows, FRAME_COLUMN_WIDTH (f), FRAME_LINE_HEIGHT (f)); */ BLOCK_INPUT; @@ -3446,6 +3453,168 @@ } +/* From AquaMacs: Fullscreen mode*/ +/* ========================================================================== + + Fullscreen + + ========================================================================== */ + +#ifndef NSAppKitVersionNumber10_5 +#define NSAppKitVersionNumber10_5 949 +#endif + +/* Hack to allow for compilation with pre-10.6 SDKs */ +#define _NSApplicationPresentationAutoHideDock (1 << 0) +#define _NSApplicationPresentationAutoHideMenuBar (1 << 2) + +extern NSString * const NSFullScreenModeAllScreens __attribute__((weak_import)); + + +static void +ns_fullscreen_hook (f) +FRAME_PTR f; +{ + int rows, cols; + int fs =0; + int width, height, ign; + +#ifdef NS_IMPL_COCOA + if (f->async_visible) + { + EmacsView *view = FRAME_NS_VIEW (f); + + if ([view respondsToSelector:@selector(exitFullScreenModeWithOptions:)]) + { + BLOCK_INPUT; + NSDisableScreenUpdates(); + NSDictionary *opts; + + switch (f->want_fullscreen) + { + case FULLSCREEN_BOTH: + if (NSAppKitVersionNumber < NSAppKitVersionNumber10_5) + { + opts = [NSDictionary dictionaryWithObjectsAndKeys: nil]; + } else if (NSAppKitVersionNumber < NSAppKitVersionNumber10_5+1) /* not 10.6 yet? */ + { + opts = [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithBool:NO], + NSFullScreenModeAllScreens, /* defined from 10.5 on */ + nil]; + } else /* 10.6 and later. */ + { + opts = [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithBool:NO], + NSFullScreenModeAllScreens, + /* let menu and Dock appear if mouse is moved there. */ + [NSNumber numberWithInt: (_NSApplicationPresentationAutoHideMenuBar|_NSApplicationPresentationAutoHideDock)], + /* hack: avoid using constant to allow for compilation with pre-10.6 SDKs */ + @"NSFullScreenModeApplicationPresentationOptions", /* defined from 10.6 on */ + nil]; + } + + /* Hide the non-fullscreened window while on fullscreen mode. */ + [[view window] orderOut: NSApp]; + [view enterFullScreenMode:[[view window] screen] + withOptions:opts]; + FRAME_NS_WINDOW (f) = [view window]; + + fs = 1; + [NSCursor setHiddenUntilMouseMoves:YES]; + + break; + default: + [view exitFullScreenModeWithOptions: nil]; + FRAME_NS_WINDOW (f) = [view window]; + /* restore from fullscreen NSWindow: */ + [[view window] makeFirstResponder: view]; + } + + NSRect vr = [view frame]; + + NSRect r = [[view window] frame]; + width = r.size.width; + height = r.size.height; + + /* NS removes toolbar / titlebar for fullscreen. + We need to recalculate frame geometry and + update frame parameters. */ + FRAME_NS_TITLEBAR_HEIGHT (f) = height - vr.size.height; + + if ([[[view window] toolbar] isVisible]) + { + FRAME_EXTERNAL_TOOL_BAR (f) = 1; + update_frame_tool_bar (f); + x_set_frame_parameters (f, Fcons (Fcons (Qtool_bar_lines, make_number(1)), + Qnil)); + } + else + { + if (FRAME_EXTERNAL_TOOL_BAR (f)) + { + free_frame_tool_bar (f); + FRAME_EXTERNAL_TOOL_BAR (f) = 0; + } + x_set_frame_parameters (f, Fcons (Fcons (Qtool_bar_lines, make_number(0)), + Qnil)); + } + + /* to do: save and restore previous state of tool bar */ + + if (FRAME_EXTERNAL_TOOL_BAR (f)) + { + + FRAME_NS_TOOLBAR_HEIGHT (f) = + NSHeight ([[view window] frameRectForContentRect: NSMakeRect (0, 0, 0, 0)]) + - FRAME_NS_TITLEBAR_HEIGHT (f); + } + else + FRAME_NS_TOOLBAR_HEIGHT (f) = 0; + + + + cols = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, + width); + if (cols < MINWIDTH) + cols = MINWIDTH; + rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, height + - FRAME_NS_TITLEBAR_HEIGHT (f) + - FRAME_NS_TOOLBAR_HEIGHT (f)); + if (rows < MINHEIGHT) + rows = MINHEIGHT; + + /* Handle scroll bars */ + set_vertical_scroll_bar (XWINDOW (f->root_window)); + + FRAME_NS_DISPLAY_INFO (f)->x_focus_frame = f; + + FRAME_PIXEL_WIDTH (f) = width; + FRAME_PIXEL_HEIGHT (f) = height; + if (FRAME_COLS (f) != cols || FRAME_LINES (f) != rows) + { + change_frame_size (f, rows, cols, 0, 0, 1); /* pretend, delay, safe */ + SET_FRAME_GARBAGED (f); + cancel_mouse_face (f); + } + x_set_window_size (f, 0, f->text_cols, f->text_lines); + + f->async_iconified = 0; + f->async_visible = 1; + windows_or_buffers_changed++; + SET_FRAME_GARBAGED (f); + ns_raise_frame (f); + ns_frame_rehighlight (f); + ns_send_appdefined (-1); + + NSEnableScreenUpdates(); + + UNBLOCK_INPUT; + } + } +#endif +} + /* ========================================================================== @@ -3679,7 +3848,7 @@ terminal->frame_rehighlight_hook = ns_frame_rehighlight; terminal->frame_raise_lower_hook = ns_frame_raise_lower; - terminal->fullscreen_hook = 0; /* see XTfullscreen_hook */ + terminal->fullscreen_hook = ns_fullscreen_hook; /* see XTfullscreen_hook */ terminal->set_vertical_scroll_bar_hook = ns_set_vertical_scroll_bar; terminal->condemn_scroll_bars_hook = ns_condemn_scroll_bars; @@ -4918,6 +5087,9 @@ NSTRACE (windowWillResize); /*fprintf (stderr,"Window will resize: %.0f x %.0f\n",frameSize.width,frameSize.height); */ + if (emacsframe->want_fullscreen & FULLSCREEN_BOTH) + return; + cols = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (emacsframe, #ifdef NS_IMPL_GNUSTEP frameSize.width + 3); @@ -4995,6 +5167,9 @@ NSTRACE (windowDidResize); /*fprintf (stderr,"windowDidResize: %.0f\n",[theWindow frame].size.height); */ + if (emacsframe->want_fullscreen & FULLSCREEN_BOTH) + return; + #ifdef NS_IMPL_COCOA if (old_title != 0) { @@ -5191,6 +5366,9 @@ NSTRACE (windowDidMove); + if (emacsframe->want_fullscreen & FULLSCREEN_BOTH) + return; + if (!emacsframe->output_data.ns) return; if (screen != nil) # Begin bundle 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