Skip to content

Instantly share code, notes, and snippets.

@leoncamel
Created June 12, 2012 16:22
Show Gist options
  • Save leoncamel/2918498 to your computer and use it in GitHub Desktop.
Save leoncamel/2918498 to your computer and use it in GitHub Desktop.
diff -urN emacs-24.1/lisp/term/ns-win.el emacs-24.1-lion-fullscreen-patched/lisp/term/ns-win.el
--- emacs-24.1/lisp/term/ns-win.el 2012-05-14 21:00:02.000000000 +0900
+++ emacs-24.1-lion-fullscreen-patched/lisp/term/ns-win.el 2012-06-13 00:52:11.000000000 +0900
@@ -930,7 +930,11 @@
(add-to-list 'frame-creation-function-alist '(ns . x-create-frame-with-faces))
(add-to-list 'window-system-initialization-alist '(ns . ns-initialize-window-system))
-
+(declare-function ns-toggle-fullscreen-internal "nsfns.m" ())
+(defun ns-toggle-fullscreen ()
+ (interactive)
+ (ns-toggle-fullscreen-internal))
+
(provide 'ns-win)
;;; ns-win.el ends here
diff -urN emacs-24.1/src/nsfns.m emacs-24.1-lion-fullscreen-patched/src/nsfns.m
--- emacs-24.1/src/nsfns.m 2012-04-08 12:03:02.000000000 +0900
+++ emacs-24.1-lion-fullscreen-patched/src/nsfns.m 2012-06-13 01:11:07.000000000 +0900
@@ -2608,6 +2608,21 @@
return Qt;
}
+DEFUN ("ns-toggle-fullscreen-internal", Fns_toggle_fullscreen_internal, Sns_toggle_fullscreen_internal,
+ 0, 0, 0,
+ doc: /* Toggle fulscreen mode */)
+()
+{
+ struct frame *f = SELECTED_FRAME();
+ EmacsWindow *window = ns_get_window(f);
+
+#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
+ [window toggleFullScreen:nil];
+#endif
+
+ return Qnil;
+}
+
/* ==========================================================================
@@ -2766,6 +2781,8 @@
defsubr (&Sx_show_tip);
defsubr (&Sx_hide_tip);
+ defsubr (&Sns_toggle_fullscreen_internal);
+
/* used only in fontset.c */
check_window_system_func = check_ns;
diff -urN emacs-24.1/src/nsmenu.m emacs-24.1-lion-fullscreen-patched/src/nsmenu.m
--- emacs-24.1/src/nsmenu.m 2012-04-08 12:03:02.000000000 +0900
+++ emacs-24.1-lion-fullscreen-patched/src/nsmenu.m 2012-06-13 01:13:13.000000000 +0900
@@ -1015,7 +1015,7 @@
-------------------------------------------------------------------------- */
{
BLOCK_INPUT;
- [[FRAME_NS_VIEW (f) toolbar] setVisible: NO];
+ [[FRAME_NS_VIEW (f) window] setToolbar: nil];
FRAME_TOOLBAR_HEIGHT (f) = 0;
UNBLOCK_INPUT;
}
@@ -1032,6 +1032,7 @@
EmacsToolbar *toolbar = [view toolbar];
BLOCK_INPUT;
+ [window setToolbar: toolbar];
[toolbar clearActive];
/* update EmacsToolbar as in GtkUtils, build items list */
diff -urN emacs-24.1/src/nsterm.h emacs-24.1-lion-fullscreen-patched/src/nsterm.h
--- emacs-24.1/src/nsterm.h 2012-04-08 12:03:02.000000000 +0900
+++ emacs-24.1-lion-fullscreen-patched/src/nsterm.h 2012-06-13 01:13:38.000000000 +0900
@@ -38,6 +38,9 @@
#ifndef MAC_OS_X_VERSION_10_6
#define MAC_OS_X_VERSION_10_6 1060
#endif
+#ifndef MAC_OS_X_VERSION_10_7
+#define MAC_OS_X_VERSION_10_7 1070
+#endif
#endif /* NS_IMPL_COCOA */
#ifdef __OBJC__
diff -urN emacs-24.1/src/nsterm.m emacs-24.1-lion-fullscreen-patched/src/nsterm.m
--- emacs-24.1/src/nsterm.m 2012-05-05 12:57:50.000000000 +0900
+++ emacs-24.1-lion-fullscreen-patched/src/nsterm.m 2012-06-13 01:16:30.000000000 +0900
@@ -5303,39 +5303,7 @@
#endif
if (rows < MINHEIGHT)
rows = MINHEIGHT;
-#ifdef NS_IMPL_COCOA
- {
- /* this sets window title to have size in it; the wm does this under GS */
- NSRect r = [[self window] frame];
- if (r.size.height == frameSize.height && r.size.width == frameSize.width)
- {
- if (old_title != 0)
- {
- xfree (old_title);
- old_title = 0;
- }
- }
- else
- {
- char *size_title;
- NSWindow *window = [self window];
- if (old_title == 0)
- {
- const char *t = [[[self window] title] UTF8String];
- char *pos = strstr (t, " — ");
- if (pos)
- *pos = '\0';
- old_title = (char *) xmalloc (strlen (t) + 1);
- strcpy (old_title, t);
- }
- size_title = xmalloc (strlen (old_title) + 40);
- esprintf (size_title, "%s — (%d x %d)", old_title, cols, rows);
- [window setTitle: [NSString stringWithUTF8String: size_title]];
- [window display];
- xfree (size_title);
- }
- }
-#endif /* NS_IMPL_COCOA */
+
/*fprintf (stderr," ...size became %.0f x %.0f (%d x %d)\n",frameSize.width,frameSize.height,cols,rows); */
return frameSize;
@@ -5357,14 +5325,6 @@
NSTRACE (windowDidResize);
/*fprintf (stderr,"windowDidResize: %.0f\n",[theWindow frame].size.height); */
-#ifdef NS_IMPL_COCOA
- if (old_title != 0)
- {
- xfree (old_title);
- old_title = 0;
- }
-#endif /* NS_IMPL_COCOA */
-
/* Avoid loop under GNUstep due to call at beginning of this function.
(x_set_window_size causes a resize which causes
a "windowDidResize" which calls x_set_window_size). */
@@ -5392,7 +5352,60 @@
ns_send_appdefined (-1);
}
+#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
+- (void)windowDidEnterFullScreen:(NSNotification *)notification
+{
+ NSTRACE (windowDidEnterFullScreen);
+ /* NSLog(@"Calling windowDidEnterFullScreen"); */
+
+ NSWindow *window = [self window];
+ NSRect wr = [window frame];
+ int w = (int)wr.size.width - emacsframe->border_width;
+ int h = (int)wr.size.height;
+ cols = FRAME_PIXEL_WIDTH_TO_TEXT_COLS(emacsframe, w);
+ rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES(emacsframe, h);
+ /* NSLog(@"window_size=%dx%d (%dx%d)", w, h, cols, rows); */
+ FRAME_PIXEL_WIDTH (emacsframe) = w;
+ FRAME_PIXEL_HEIGHT (emacsframe) = h;
+ change_frame_size (emacsframe, rows, cols, 0, 1, 0);
+ SET_FRAME_GARBAGED (emacsframe);
+ cancel_mouse_face (emacsframe);
+ ns_send_appdefined (-1);
+}
+#endif
+
+#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
+- (void)windowDidExitFullScreen:(NSNotification *)notification
+{
+ NSTRACE (windowDidExitFullScreen);
+ /* NSLog(@"Calling windowDidExitFullScreen"); */
+
+ NSWindow *window = [self window];
+ NSRect wr = [window frame];
+ int w = (int)wr.size.width - emacsframe->border_width;
+ int h = (int)wr.size.height
+ - FRAME_NS_TITLEBAR_HEIGHT (emacsframe)
+ - FRAME_TOOLBAR_HEIGHT (emacsframe);
+ cols = FRAME_PIXEL_WIDTH_TO_TEXT_COLS(emacsframe, w);
+ rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES(emacsframe, h);
+ /* NSLog(@"window_size=%dx%d (%dx%d)", w, h, cols, rows); */
+ FRAME_PIXEL_WIDTH (emacsframe) = w;
+ FRAME_PIXEL_HEIGHT (emacsframe) = h;
+ change_frame_size (emacsframe, rows, cols, 0, 1, 0);
+ SET_FRAME_GARBAGED (emacsframe);
+ cancel_mouse_face (emacsframe);
+ ns_send_appdefined (-1);
+}
+#endif
+#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
+- (NSApplicationPresentationOptions)window:(NSWindow *)window willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)proposedOptions
+{
+ /* NSLog(@"Calling window:willUseFullScreenPresentationOptions: %d", proposedOptions); */
+ return proposedOptions | NSApplicationPresentationAutoHideToolbar;
+}
+#endif
+
- (void)windowDidBecomeKey: (NSNotification *)notification
/* cf. x_detect_focus_change(), x_focus_changed(), x_new_focus_frame() */
{
@@ -5563,6 +5576,14 @@
[NSApp registerServicesMenuSendTypes: ns_send_types
returnTypes: nil];
+#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
+ if (NSApp != nil)
+ {
+ [NSApp setPresentationOptions: NSApplicationPresentationFullScreen | [NSApp presentationOptions] ];
+ [win setCollectionBehavior: NSWindowCollectionBehaviorFullScreenPrimary | [win collectionBehavior] ];
+ }
+#endif
+
ns_window_num++;
return self;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment