Skip to content

Commit 8c6907e

Browse files
committed
Update for Sonoma
1 parent 3d07d28 commit 8c6907e

4 files changed

Lines changed: 75 additions & 55 deletions

File tree

AfloatX.xcodeproj/project.pbxproj

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@
303303
09AA56062350FFBE00356916 /* Debug */ = {
304304
isa = XCBuildConfiguration;
305305
buildSettings = {
306+
ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
306307
ARCHS = (
307308
x86_64,
308309
arm64e,
@@ -315,29 +316,32 @@
315316
CURRENT_PROJECT_VERSION = 1.5;
316317
DEPLOYMENT_LOCATION = YES;
317318
DEVELOPMENT_TEAM = "";
318-
DSTROOT = /;
319+
DSTROOT = "/Library/Application Support/MacEnhance/";
319320
ENABLE_STRICT_OBJC_MSGSEND = NO;
320321
GCC_DYNAMIC_NO_PIC = NO;
321322
GCC_PRECOMPILE_PREFIX_HEADER = YES;
322323
GCC_PREFIX_HEADER = AfloatX/PrefixHeader.pch;
323324
INFOPLIST_FILE = AfloatX/Info.plist;
324-
INSTALL_PATH = "/Library/Application Support/MacEnhance/Plugins";
325+
INSTALL_PATH = Plugins;
325326
LLVM_LTO = YES;
326327
MACH_O_TYPE = mh_dylib;
327-
MACOSX_DEPLOYMENT_TARGET = 10.14;
328+
MACOSX_DEPLOYMENT_TARGET = 10.13;
328329
MARKETING_VERSION = 1.5;
329330
OTHER_LDFLAGS = "";
330331
PRODUCT_BUNDLE_IDENTIFIER = com.github.jslegendre.AfloatX;
331332
PRODUCT_NAME = "$(TARGET_NAME)";
332333
PROVISIONING_PROFILE_SPECIFIER = "";
333334
SDKROOT = macosx;
335+
SUPPORTED_PLATFORMS = "watchsimulator watchos macosx iphonesimulator iphoneos driverkit appletvsimulator appletvos";
336+
SUPPORTS_MACCATALYST = YES;
334337
WRAPPER_EXTENSION = bundle;
335338
};
336339
name = Debug;
337340
};
338341
09AA56072350FFBE00356916 /* Release */ = {
339342
isa = XCBuildConfiguration;
340343
buildSettings = {
344+
ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
341345
ARCHS = (
342346
x86_64,
343347
arm64e,
@@ -350,23 +354,25 @@
350354
CURRENT_PROJECT_VERSION = 1.5;
351355
DEPLOYMENT_LOCATION = YES;
352356
DEVELOPMENT_TEAM = "";
353-
DSTROOT = /;
357+
DSTROOT = "/Library/Application Support/MacEnhance/";
354358
ENABLE_STRICT_OBJC_MSGSEND = NO;
355359
GCC_DYNAMIC_NO_PIC = NO;
356360
GCC_OPTIMIZATION_LEVEL = fast;
357361
GCC_PRECOMPILE_PREFIX_HEADER = YES;
358362
GCC_PREFIX_HEADER = AfloatX/PrefixHeader.pch;
359363
INFOPLIST_FILE = AfloatX/Info.plist;
360-
INSTALL_PATH = "/Library/Application Support/MacEnhance/Plugins";
364+
INSTALL_PATH = Plugins;
361365
LLVM_LTO = YES;
362366
MACH_O_TYPE = mh_dylib;
363-
MACOSX_DEPLOYMENT_TARGET = 10.14;
367+
MACOSX_DEPLOYMENT_TARGET = 10.13;
364368
MARKETING_VERSION = 1.5;
365369
OTHER_LDFLAGS = "";
366370
PRODUCT_BUNDLE_IDENTIFIER = com.github.jslegendre.AfloatX;
367371
PRODUCT_NAME = "$(TARGET_NAME)";
368372
PROVISIONING_PROFILE_SPECIFIER = "";
369373
SDKROOT = macosx;
374+
SUPPORTED_PLATFORMS = "watchsimulator watchos macosx iphonesimulator iphoneos driverkit appletvsimulator appletvos";
375+
SUPPORTS_MACCATALYST = YES;
370376
WRAPPER_EXTENSION = bundle;
371377
};
372378
name = Release;

AfloatX/AfloatX.m

Lines changed: 62 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
NSArray *afloatXItems;
3333
CIFilter* colorInvertFilter;
3434

35+
bool onSonomaOrHigher = false;
36+
3537
@implementation AfloatX
3638

3739
+ (instancetype)sharedInstance {
@@ -156,56 +158,62 @@ + (void)load {
156158
if ([blackList containsObject:NSBundle.mainBundle.bundleIdentifier])
157159
return;
158160

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+
}
203164

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];
206167

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+
});
209217
}
210218

211219
@end
@@ -272,7 +280,12 @@ - (CFArrayRef)_createDockMenu:(BOOL)enabled {
272280
CFArrayRef flatDockMenu = ZKOrig(CFArrayRef, enabled);
273281
CFArrayAppendArray(finalMenu, flatDockMenu, CFRangeMake(0, CFArrayGetCount(flatDockMenu)));
274282
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+
}
276289

277290
CFArrayAppendArray(finalMenu, flatAfloatXMenu, CFRangeMake(0, CFArrayGetCount(flatAfloatXMenu)));
278291
CFRelease(flatAfloatXMenu);

AfloatX/NSApplication+Private.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
@interface NSApplication (Private)
1515
- (CFArrayRef)_flattenMenu:(NSMenu *)menu flatList:(id)list;
16+
- (CFArrayRef)_flattenMenu:(NSMenu *)menu flatList:(id)list extraUpdateFlags:(uint32_t)flags;
1617
@end
1718

1819
#endif /* NSApplication_Private_h */

0 commit comments

Comments
 (0)