|
32 | 32 | NSArray *afloatXItems; |
33 | 33 | CIFilter* colorInvertFilter; |
34 | 34 |
|
| 35 | +bool onSonomaOrHigher = false; |
| 36 | + |
35 | 37 | @implementation AfloatX |
36 | 38 |
|
37 | 39 | + (instancetype)sharedInstance { |
@@ -156,56 +158,62 @@ + (void)load { |
156 | 158 | if ([blackList containsObject:NSBundle.mainBundle.bundleIdentifier]) |
157 | 159 | return; |
158 | 160 |
|
159 | | - AfloatX *plugin = [AfloatX sharedInstance]; |
160 | | - |
161 | | - colorInvertFilter = [CIFilter filterWithName:@"CIColorInvert"]; |
162 | | - [colorInvertFilter setDefaults]; |
163 | | - |
164 | | - AfloatXMenu = [NSMenu new]; |
165 | | - AfloatXItem = [NSMenuItem new]; |
166 | | - AfloatXItem.title = @"AfloatX"; |
167 | | - AfloatXSubmenu = [NSMenu new]; |
168 | | - AfloatXItem.submenu = AfloatXSubmenu; |
169 | | - |
170 | | - windowOutlineItem = [NSMenuItem new]; |
171 | | - windowOutlineItem.title = @"Outline Window"; |
172 | | - |
173 | | - floatItem = [[NSMenuItem alloc] initWithTitle:@"Float Window" action:@selector(toggleFloatMainWindow) keyEquivalent:@""]; |
174 | | - [floatItem setTarget:plugin]; |
175 | | - |
176 | | - dropItem = [[NSMenuItem alloc] initWithTitle:@"Drop Window" action:@selector(toggleDropMainWindow) keyEquivalent:@""]; |
177 | | - [dropItem setTarget:plugin]; |
178 | | - |
179 | | - transientItem = [[NSMenuItem alloc] initWithTitle:@"Transient Window" action:@selector(toggleTransientMainWindow) keyEquivalent:@""]; |
180 | | - [transientItem setTarget:plugin]; |
181 | | - |
182 | | - stickyItem = [[NSMenuItem alloc] initWithTitle:@"Sticky Window" action:@selector(toggleStickyMainWindow) keyEquivalent:@""]; |
183 | | - [stickyItem setTarget:plugin]; |
184 | | - |
185 | | - invertColorItem = [[NSMenuItem alloc] initWithTitle:@"Invert Colors" action:@selector(toggleColorInvert) keyEquivalent:@""]; |
186 | | - [invertColorItem setTarget:plugin]; |
187 | | - |
188 | | - clickPassthroughItem = [[NSMenuItem alloc] initWithTitle:@"Click-Through Window" action:@selector(toggleEventPassthrough) keyEquivalent:@""]; |
189 | | - [clickPassthroughItem setTarget:plugin]; |
190 | | - |
191 | | - transparencyItem = [[NSMenuItem alloc] initWithTitle:@"Transparency..." action:@selector(showTransparencySheet) keyEquivalent:@""]; |
192 | | - [transparencyItem setTarget:plugin]; |
193 | | - |
194 | | - afloatXItems = [[NSArray alloc] initWithObjects:floatItem, |
195 | | - dropItem, |
196 | | - invertColorItem, |
197 | | - stickyItem, |
198 | | - transientItem, |
199 | | - clickPassthroughItem, |
200 | | - windowOutlineItem, |
201 | | - transparencyItem, |
202 | | - nil]; |
| 161 | + if (NSProcessInfo.processInfo.operatingSystemVersion.majorVersion >= 14) { |
| 162 | + onSonomaOrHigher = true; |
| 163 | + } |
203 | 164 |
|
204 | | - for(NSMenuItem *item in afloatXItems) |
205 | | - [AfloatXSubmenu addItem:item]; |
| 165 | + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ |
| 166 | + AfloatX *plugin = [AfloatX sharedInstance]; |
206 | 167 |
|
207 | | - [AfloatXMenu addItem:[NSMenuItem separatorItem]]; |
208 | | - [AfloatXMenu addItem:AfloatXItem]; |
| 168 | + colorInvertFilter = [CIFilter filterWithName:@"CIColorInvert"]; |
| 169 | + [colorInvertFilter setDefaults]; |
| 170 | + |
| 171 | + AfloatXMenu = [NSMenu new]; |
| 172 | + AfloatXItem = [NSMenuItem new]; |
| 173 | + AfloatXItem.title = @"AfloatX"; |
| 174 | + AfloatXSubmenu = [NSMenu new]; |
| 175 | + AfloatXItem.submenu = AfloatXSubmenu; |
| 176 | + |
| 177 | + windowOutlineItem = [NSMenuItem new]; |
| 178 | + windowOutlineItem.title = @"Outline Window"; |
| 179 | + |
| 180 | + floatItem = [[NSMenuItem alloc] initWithTitle:@"Float Window" action:@selector(toggleFloatMainWindow) keyEquivalent:@""]; |
| 181 | + [floatItem setTarget:plugin]; |
| 182 | + |
| 183 | + dropItem = [[NSMenuItem alloc] initWithTitle:@"Drop Window" action:@selector(toggleDropMainWindow) keyEquivalent:@""]; |
| 184 | + [dropItem setTarget:plugin]; |
| 185 | + |
| 186 | + transientItem = [[NSMenuItem alloc] initWithTitle:@"Transient Window" action:@selector(toggleTransientMainWindow) keyEquivalent:@""]; |
| 187 | + [transientItem setTarget:plugin]; |
| 188 | + |
| 189 | + stickyItem = [[NSMenuItem alloc] initWithTitle:@"Sticky Window" action:@selector(toggleStickyMainWindow) keyEquivalent:@""]; |
| 190 | + [stickyItem setTarget:plugin]; |
| 191 | + |
| 192 | + invertColorItem = [[NSMenuItem alloc] initWithTitle:@"Invert Colors" action:@selector(toggleColorInvert) keyEquivalent:@""]; |
| 193 | + [invertColorItem setTarget:plugin]; |
| 194 | + |
| 195 | + clickPassthroughItem = [[NSMenuItem alloc] initWithTitle:@"Click-Through Window" action:@selector(toggleEventPassthrough) keyEquivalent:@""]; |
| 196 | + [clickPassthroughItem setTarget:plugin]; |
| 197 | + |
| 198 | + transparencyItem = [[NSMenuItem alloc] initWithTitle:@"Transparency..." action:@selector(showTransparencySheet) keyEquivalent:@""]; |
| 199 | + [transparencyItem setTarget:plugin]; |
| 200 | + |
| 201 | + afloatXItems = [[NSArray alloc] initWithObjects:floatItem, |
| 202 | + dropItem, |
| 203 | + invertColorItem, |
| 204 | + stickyItem, |
| 205 | + transientItem, |
| 206 | + clickPassthroughItem, |
| 207 | + windowOutlineItem, |
| 208 | + transparencyItem, |
| 209 | + nil]; |
| 210 | + |
| 211 | + for(NSMenuItem *item in afloatXItems) |
| 212 | + [AfloatXSubmenu addItem:item]; |
| 213 | + |
| 214 | + [AfloatXMenu addItem:[NSMenuItem separatorItem]]; |
| 215 | + [AfloatXMenu addItem:AfloatXItem]; |
| 216 | + }); |
209 | 217 | } |
210 | 218 |
|
211 | 219 | @end |
@@ -272,7 +280,12 @@ - (CFArrayRef)_createDockMenu:(BOOL)enabled { |
272 | 280 | CFArrayRef flatDockMenu = ZKOrig(CFArrayRef, enabled); |
273 | 281 | CFArrayAppendArray(finalMenu, flatDockMenu, CFRangeMake(0, CFArrayGetCount(flatDockMenu))); |
274 | 282 | CFRelease(flatDockMenu); |
275 | | - CFArrayRef flatAfloatXMenu = [(NSApplication*)self _flattenMenu:AfloatXMenu flatList:nil]; |
| 283 | + CFArrayRef flatAfloatXMenu = nil; |
| 284 | + if (onSonomaOrHigher) { |
| 285 | + flatAfloatXMenu = [(NSApplication*)self _flattenMenu:AfloatXMenu flatList:nil extraUpdateFlags:0x40000000]; |
| 286 | + } else { |
| 287 | + flatAfloatXMenu = [(NSApplication*)self _flattenMenu:AfloatXMenu flatList:nil]; |
| 288 | + } |
276 | 289 |
|
277 | 290 | CFArrayAppendArray(finalMenu, flatAfloatXMenu, CFRangeMake(0, CFArrayGetCount(flatAfloatXMenu))); |
278 | 291 | CFRelease(flatAfloatXMenu); |
|
0 commit comments