Commit f4f50c9e authored by Ken Thomases's avatar Ken Thomases Committed by Alexandre Julliard

winemac: Implement support for Cocoa-style full-screen mode.

Based in large part on a patch submitted by Kevin Eaves.
parent 00e53de7
...@@ -239,6 +239,11 @@ int macdrv_err_on; ...@@ -239,6 +239,11 @@ int macdrv_err_on;
submenu = [[[NSMenu alloc] initWithTitle:@"Window"] autorelease]; submenu = [[[NSMenu alloc] initWithTitle:@"Window"] autorelease];
[submenu addItemWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@""]; [submenu addItemWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@""];
[submenu addItemWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; [submenu addItemWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""];
if ([NSWindow instancesRespondToSelector:@selector(toggleFullScreen:)])
{
item = [submenu addItemWithTitle:@"Enter Full Screen" action:@selector(toggleFullScreen:) keyEquivalent:@"f"];
[item setKeyEquivalentModifierMask:NSCommandKeyMask | NSAlternateKeyMask | NSControlKeyMask];
}
[submenu addItem:[NSMenuItem separatorItem]]; [submenu addItem:[NSMenuItem separatorItem]];
[submenu addItemWithTitle:@"Bring All to Front" action:@selector(arrangeInFront:) keyEquivalent:@""]; [submenu addItemWithTitle:@"Bring All to Front" action:@selector(arrangeInFront:) keyEquivalent:@""];
item = [[[NSMenuItem alloc] init] autorelease]; item = [[[NSMenuItem alloc] init] autorelease];
......
...@@ -58,6 +58,11 @@ ...@@ -58,6 +58,11 @@
NSSize savedContentMinSize; NSSize savedContentMinSize;
NSSize savedContentMaxSize; NSSize savedContentMaxSize;
BOOL enteringFullScreen;
BOOL exitingFullScreen;
NSRect nonFullscreenFrame;
NSTimeInterval enteredFullScreenTime;
BOOL ignore_windowDeminiaturize; BOOL ignore_windowDeminiaturize;
BOOL fakingClose; BOOL fakingClose;
} }
......
...@@ -246,7 +246,7 @@ void macdrv_handle_event(const macdrv_event *event) ...@@ -246,7 +246,7 @@ void macdrv_handle_event(const macdrv_event *event)
macdrv_window_did_unminimize(hwnd); macdrv_window_did_unminimize(hwnd);
break; break;
case WINDOW_FRAME_CHANGED: case WINDOW_FRAME_CHANGED:
macdrv_window_frame_changed(hwnd, event->window_frame_changed.frame); macdrv_window_frame_changed(hwnd, event);
break; break;
case WINDOW_GOT_FOCUS: case WINDOW_GOT_FOCUS:
macdrv_window_got_focus(hwnd, event); macdrv_window_got_focus(hwnd, event);
......
...@@ -155,7 +155,7 @@ extern void surface_clip_to_visible_rect(struct window_surface *window_surface, ...@@ -155,7 +155,7 @@ extern void surface_clip_to_visible_rect(struct window_surface *window_surface,
extern void macdrv_handle_event(const macdrv_event *event) DECLSPEC_HIDDEN; extern void macdrv_handle_event(const macdrv_event *event) DECLSPEC_HIDDEN;
extern void macdrv_window_close_requested(HWND hwnd) DECLSPEC_HIDDEN; extern void macdrv_window_close_requested(HWND hwnd) DECLSPEC_HIDDEN;
extern void macdrv_window_frame_changed(HWND hwnd, CGRect frame) DECLSPEC_HIDDEN; extern void macdrv_window_frame_changed(HWND hwnd, const macdrv_event *event) DECLSPEC_HIDDEN;
extern void macdrv_window_got_focus(HWND hwnd, const macdrv_event *event) DECLSPEC_HIDDEN; extern void macdrv_window_got_focus(HWND hwnd, const macdrv_event *event) DECLSPEC_HIDDEN;
extern void macdrv_window_lost_focus(HWND hwnd, const macdrv_event *event) DECLSPEC_HIDDEN; extern void macdrv_window_lost_focus(HWND hwnd, const macdrv_event *event) DECLSPEC_HIDDEN;
extern void macdrv_app_deactivated(void) DECLSPEC_HIDDEN; extern void macdrv_app_deactivated(void) DECLSPEC_HIDDEN;
......
...@@ -274,6 +274,7 @@ typedef struct macdrv_event { ...@@ -274,6 +274,7 @@ typedef struct macdrv_event {
} status_item_mouse_move; } status_item_mouse_move;
struct { struct {
CGRect frame; CGRect frame;
int fullscreen;
} window_frame_changed; } window_frame_changed;
struct { struct {
unsigned long serial; unsigned long serial;
......
...@@ -1654,7 +1654,7 @@ void macdrv_window_close_requested(HWND hwnd) ...@@ -1654,7 +1654,7 @@ void macdrv_window_close_requested(HWND hwnd)
* *
* Handler for WINDOW_FRAME_CHANGED events. * Handler for WINDOW_FRAME_CHANGED events.
*/ */
void macdrv_window_frame_changed(HWND hwnd, CGRect frame) void macdrv_window_frame_changed(HWND hwnd, const macdrv_event *event)
{ {
struct macdrv_win_data *data; struct macdrv_win_data *data;
RECT rect; RECT rect;
...@@ -1674,9 +1674,10 @@ void macdrv_window_frame_changed(HWND hwnd, CGRect frame) ...@@ -1674,9 +1674,10 @@ void macdrv_window_frame_changed(HWND hwnd, CGRect frame)
parent = GetAncestor(hwnd, GA_PARENT); parent = GetAncestor(hwnd, GA_PARENT);
TRACE("win %p/%p new Cocoa frame %s\n", hwnd, data->cocoa_window, wine_dbgstr_cgrect(frame)); TRACE("win %p/%p new Cocoa frame %s\n", hwnd, data->cocoa_window,
wine_dbgstr_cgrect(event->window_frame_changed.frame));
rect = rect_from_cgrect(frame); rect = rect_from_cgrect(event->window_frame_changed.frame);
macdrv_mac_to_window_rect(data, &rect); macdrv_mac_to_window_rect(data, &rect);
MapWindowPoints(0, parent, (POINT *)&rect, 2); MapWindowPoints(0, parent, (POINT *)&rect, 2);
...@@ -1699,6 +1700,8 @@ void macdrv_window_frame_changed(HWND hwnd, CGRect frame) ...@@ -1699,6 +1700,8 @@ void macdrv_window_frame_changed(HWND hwnd, CGRect frame)
release_win_data(data); release_win_data(data);
if (event->window_frame_changed.fullscreen)
flags |= SWP_NOSENDCHANGING;
if (!(flags & SWP_NOSIZE) || !(flags & SWP_NOMOVE)) if (!(flags & SWP_NOSIZE) || !(flags & SWP_NOMOVE))
SetWindowPos(hwnd, 0, rect.left, rect.top, width, height, flags); SetWindowPos(hwnd, 0, rect.left, rect.top, width, height, flags);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment