@@ -211,59 +211,22 @@ + (void)load {
211211 transparencyItem,
212212 nil ];
213213 [AfloatXSubmenu setItemArray: afloatXItems];
214-
215- // Are we in an Electron app?
216- if (objc_lookUpClass (" AtomApplicationDelegate" )) {
217- dispatch_once (&injectMenuOnceToken, ^{ /* Use up token */ });
218- [AfloatXMenu addItem: AfloatXItem];
219- }
214+
215+ [AfloatXMenu addItem: [NSMenuItem separatorItem ]];
216+ [AfloatXMenu addItem: AfloatXItem];
220217}
221218
222219@end
223220
224- /*
225- AtomApplicationDelegate is the application delegate class
226- for all Electron apps. In order for AfloatX to work we must
227- explicitly swizzle this class because the application delegate
228- class gets subclassed/swizzled to this one after injection.
229- */
230- ZKSwizzleInterface (AXAppDelegate, AtomApplicationDelegate, NSObject )
231- @implementation AXAppDelegate
232- - (NSMenu *)applicationDockMenu:(NSApplication *)sender {
233- NSMenu *originalMenu = ZKOrig (NSMenu *, sender);
234- if (originalMenu) {
235- [AfloatXMenu removeItem: AfloatXItem];
236- AfloatXMenu = originalMenu;
237- // Only add a separator if last item isn't already a separator
238- if (!AfloatXMenu.itemArray .lastObject .isSeparatorItem )
239- [AfloatXMenu addItem: [NSMenuItem separatorItem ]];
240- [AfloatXMenu addItem: AfloatXItem];
241- }
242-
243- return AfloatXMenu;
244- }
245- @end
246-
247221ZKSwizzleInterface (AXApplication, NSApplication , NSResponder )
248222@implementation AXApplication
249- - (CFArrayRef)_flattenMenu:(NSMenu *)dockMenu flatList:(NSArray *)flatList {
250-
251- // Add AfloatX to the dock menu
252- dispatch_once (&injectMenuOnceToken, ^{
253- if (!dockMenu.itemArray .lastObject .isSeparatorItem )
254- [dockMenu addItem: [NSMenuItem separatorItem ]];
255-
256- [dockMenu addItem: AfloatXItem];
257- });
258-
259- // Make any necessary changes to our menu before it is 'flattened'
223+ - (CFArrayRef)_createDockMenu:(BOOL )enabled {
260224 NSWindow *window = [AXWindowUtils windowToModify ];
261225 if (!window) {
262- AfloatXItem.enabled = NO ;
263- return ZKOrig (CFArrayRef, dockMenu, flatList);
226+ return ZKOrig (CFArrayRef, enabled);
264227 }
265228
266- AfloatXItem. enabled = YES ;
229+ // Make any necessary changes to our menu before it is 'flattened'
267230 if ([[AfloatX sharedInstance ] isWindowTransient: window]) {
268231 [transientItem setState: NSControlStateValueOn ];
269232 } else {
@@ -311,7 +274,12 @@ - (CFArrayRef)_flattenMenu:(NSMenu *)dockMenu flatList:(NSArray *)flatList {
311274 } else {
312275 [invertColorItem setState: NSControlStateValueOff ];
313276 }
314-
315- return ZKOrig (CFArrayRef, dockMenu, flatList);
277+
278+ CFArrayRef flatDockMenu = ZKOrig (CFArrayRef, enabled);
279+ CFArrayRef flatAfloatXMenu = (__bridge CFArrayRef)(objc_msgSend (self, sel_getUid (" _flattenMenu:flatList:" ), AfloatXMenu, nil ));
280+
281+ NSMutableArray *combinedFlatMenus = (__bridge NSMutableArray *)flatDockMenu;
282+ [combinedFlatMenus addObjectsFromArray: (__bridge NSArray *)flatAfloatXMenu];
283+ return (__bridge CFArrayRef)combinedFlatMenus;
316284}
317285@end
0 commit comments