2 * MACDRV Cocoa application class declaration
4 * Copyright 2011, 2012, 2013 Ken Thomases for CodeWeavers Inc.
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #import <AppKit/AppKit.h>
23 #include "macdrv_cocoa.h"
26 #define ERR(...) do { if (macdrv_err_on) LogError(__func__, __VA_ARGS__); } while (false)
30 WineApplicationEventWakeQuery
,
34 @
class WineEventQueue
;
38 @interface WineApplicationController
: NSObject
<NSApplicationDelegate
>
40 CFRunLoopSourceRef requestSource
;
41 NSMutableArray
* requests
;
42 dispatch_queue_t requestsManipQueue
;
44 NSMutableArray
* eventQueues
;
45 NSLock
* eventQueuesLock
;
47 NSTimeInterval eventTimeAdjustment
;
49 NSMutableArray
* keyWindows
;
50 NSMutableSet
* triedWindows
;
51 unsigned long windowFocusSerial
;
53 TISInputSourceRef lastKeyboardInputSource
;
54 TISInputSourceRef lastKeyboardLayoutInputSource
;
55 CGEventSourceKeyboardType keyboardType
;
56 NSEvent
* lastFlagsChanged
;
57 BOOL inputSourceIsInputMethod
;
58 BOOL inputSourceIsInputMethodValid
;
59 uint32_t pressedKeyCodes
[128 / 32];
61 CGFloat primaryScreenHeight
;
62 BOOL primaryScreenHeightValid
;
63 NSMutableData
* screenFrameCGRects
;
65 WineWindow
* lastTargetWindow
;
66 WineWindow
* mouseCaptureWindow
;
67 BOOL forceNextMouseMoveAbsolute
;
68 double mouseMoveDeltaX
, mouseMoveDeltaY
;
69 NSUInteger unmatchedMouseDowns
;
71 NSTimeInterval lastScrollTime
;
72 double accumScrollX
, accumScrollY
;
74 NSMutableDictionary
* originalDisplayModes
;
75 NSMutableDictionary
* latentDisplayModes
;
76 BOOL displaysCapturedForFullscreen
;
78 NSArray
* cursorFrames
;
84 BOOL clientWantsCursorHidden
;
87 CGRect cursorClipRect
;
88 CFMachPortRef cursorClippingEventTap
;
89 NSMutableArray
* warpRecords
;
90 CGPoint synthesizedLocation
;
91 NSTimeInterval lastSetCursorPositionTime
;
92 NSTimeInterval lastEventTapEventTime
;
94 NSImage
* applicationIcon
;
98 NSMutableSet
* windowsBeingDragged
;
101 @
property (nonatomic
) CGEventSourceKeyboardType keyboardType
;
102 @
property (readonly
, copy
, nonatomic
) NSEvent
* lastFlagsChanged
;
103 @
property (readonly
, nonatomic
) BOOL areDisplaysCaptured
;
105 @
property (readonly
) BOOL clippingCursor
;
107 + (WineApplicationController
*) sharedController
;
109 - (void) transformProcessToForeground
;
111 - (BOOL
) registerEventQueue
:(WineEventQueue
*)queue
;
112 - (void) unregisterEventQueue
:(WineEventQueue
*)queue
;
114 - (void) computeEventTimeAdjustmentFromTicks
:(unsigned long long)tickcount uptime
:(uint64_t)uptime_ns
;
115 - (double) ticksForEventTime
:(NSTimeInterval
)eventTime
;
117 - (void) windowGotFocus
:(WineWindow
*)window
;
119 - (BOOL
) waitUntilQueryDone
:(int*)done timeout
:(NSDate
*)timeout processEvents
:(BOOL
)processEvents
;
121 - (void) noteKey
:(uint16_t)keyCode pressed
:(BOOL
)pressed
;
123 - (void) window
:(WineWindow
*)window isBeingDragged
:(BOOL
)dragged
;
124 - (void) windowWillOrderOut
:(WineWindow
*)window
;
126 - (void) flipRect
:(NSRect
*)rect
;
128 - (WineWindow
*) frontWineWindow
;
129 - (void) adjustWindowLevels
;
130 - (void) updateFullscreenWindows
;
132 - (BOOL
) handleEvent
:(NSEvent
*)anEvent
;
133 - (void) didSendEvent
:(NSEvent
*)anEvent
;
138 @interface WineApplication
: NSApplication
140 WineApplicationController
* wineController
;
143 @
property (readwrite
, assign
, nonatomic
) WineApplicationController
* wineController
;
148 void OnMainThreadAsync(dispatch_block_t block
);
150 void LogError(const char* func
, NSString
* format
, ...);
151 void LogErrorv(const char* func
, NSString
* format
, va_list args
);