diff --git a/shell/browser/api/electron_api_system_preferences_mac.mm b/shell/browser/api/electron_api_system_preferences_mac.mm index 70006a88dd..dda1e63c9e 100644 --- a/shell/browser/api/electron_api_system_preferences_mac.mm +++ b/shell/browser/api/electron_api_system_preferences_mac.mm @@ -423,17 +423,14 @@ std::string SystemPreferences::GetSystemColor(gin_helper::ErrorThrower thrower, } bool SystemPreferences::CanPromptTouchID() { - if (@available(macOS 10.12.2, *)) { - base::scoped_nsobject context([[LAContext alloc] init]); - if (![context - canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics - error:nil]) - return false; - if (@available(macOS 10.13.2, *)) - return [context biometryType] == LABiometryTypeTouchID; - return true; - } - return false; + base::scoped_nsobject context([[LAContext alloc] init]); + if (![context + canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics + error:nil]) + return false; + if (@available(macOS 10.13.2, *)) + return [context biometryType] == LABiometryTypeTouchID; + return true; } v8::Local SystemPreferences::PromptTouchID( @@ -442,46 +439,40 @@ v8::Local SystemPreferences::PromptTouchID( gin_helper::Promise promise(isolate); v8::Local handle = promise.GetHandle(); - if (@available(macOS 10.12.2, *)) { - base::scoped_nsobject context([[LAContext alloc] init]); - base::ScopedCFTypeRef access_control = - base::ScopedCFTypeRef( - SecAccessControlCreateWithFlags( - kCFAllocatorDefault, - kSecAttrAccessibleWhenUnlockedThisDeviceOnly, - kSecAccessControlPrivateKeyUsage | - kSecAccessControlUserPresence, - nullptr)); + base::scoped_nsobject context([[LAContext alloc] init]); + base::ScopedCFTypeRef access_control = + base::ScopedCFTypeRef( + SecAccessControlCreateWithFlags( + kCFAllocatorDefault, kSecAttrAccessibleWhenUnlockedThisDeviceOnly, + kSecAccessControlPrivateKeyUsage | kSecAccessControlUserPresence, + nullptr)); - scoped_refptr runner = - base::SequencedTaskRunnerHandle::Get(); + scoped_refptr runner = + base::SequencedTaskRunnerHandle::Get(); + + __block gin_helper::Promise p = std::move(promise); + [context + evaluateAccessControl:access_control + operation:LAAccessControlOperationUseKeySign + localizedReason:[NSString stringWithUTF8String:reason.c_str()] + reply:^(BOOL success, NSError* error) { + if (!success) { + std::string err_msg = std::string( + [error.localizedDescription UTF8String]); + runner->PostTask( + FROM_HERE, + base::BindOnce( + gin_helper::Promise::RejectPromise, + std::move(p), std::move(err_msg))); + } else { + runner->PostTask( + FROM_HERE, + base::BindOnce( + gin_helper::Promise::ResolvePromise, + std::move(p))); + } + }]; - __block gin_helper::Promise p = std::move(promise); - [context - evaluateAccessControl:access_control - operation:LAAccessControlOperationUseKeySign - localizedReason:[NSString stringWithUTF8String:reason.c_str()] - reply:^(BOOL success, NSError* error) { - if (!success) { - std::string err_msg = std::string( - [error.localizedDescription UTF8String]); - runner->PostTask( - FROM_HERE, - base::BindOnce( - gin_helper::Promise::RejectPromise, - std::move(p), std::move(err_msg))); - } else { - runner->PostTask( - FROM_HERE, - base::BindOnce( - gin_helper::Promise::ResolvePromise, - std::move(p))); - } - }]; - } else { - promise.RejectWithErrorMessage( - "This API is not available on macOS versions older than 10.12.2"); - } return handle; } @@ -529,8 +520,7 @@ std::string SystemPreferences::GetColor(gin_helper::ErrorThrower thrower, } else if (color == "quaternary-label") { sysColor = [NSColor quaternaryLabelColor]; } else if (color == "scrubber-textured-background") { - if (@available(macOS 10.12.2, *)) - sysColor = [NSColor scrubberTexturedBackgroundColor]; + sysColor = [NSColor scrubberTexturedBackgroundColor]; } else if (color == "secondary-label") { sysColor = [NSColor secondaryLabelColor]; } else if (color == "selected-content-background") { diff --git a/shell/browser/mac/electron_application_delegate.mm b/shell/browser/mac/electron_application_delegate.mm index 138400d625..ea7cbde4f3 100644 --- a/shell/browser/mac/electron_application_delegate.mm +++ b/shell/browser/mac/electron_application_delegate.mm @@ -19,30 +19,6 @@ #import -#if BUILDFLAG(USE_ALLOCATOR_SHIM) -// On macOS 10.12, the IME system attempts to allocate a 2^64 size buffer, -// which would typically cause an OOM crash. To avoid this, the problematic -// method is swizzled out and the make-OOM-fatal bit is disabled for the -// duration of the original call. https://crbug.com/654695 -static base::mac::ScopedObjCClassSwizzler* g_swizzle_imk_input_session; -@interface OOMDisabledIMKInputSession : NSObject -@end -@implementation OOMDisabledIMKInputSession -- (void)_coreAttributesFromRange:(NSRange)range - whichAttributes:(long long)attributes // NOLINT(runtime/int) - completionHandler:(void (^)(void))block { - // The allocator flag is per-process, so other threads may temporarily - // not have fatal OOM occur while this method executes, but it is better - // than crashing when using IME. - base::allocator::SetCallNewHandlerOnMallocFailure(false); - g_swizzle_imk_input_session->InvokeOriginal< - void, NSRange, long long, void (^)(void)>( // NOLINT(runtime/int) - self, _cmd, range, attributes, block); - base::allocator::SetCallNewHandlerOnMallocFailure(true); -} -@end -#endif // BUILDFLAG(USE_ALLOCATOR_SHIM) - static NSDictionary* UNNotificationResponseToNSDictionary( UNNotificationResponse* response) API_AVAILABLE(macosx(10.14)) { // [response isKindOfClass:[UNNotificationResponse class]] @@ -109,16 +85,6 @@ static NSDictionary* UNNotificationResponseToNSDictionary( electron::Browser::Get()->DidFinishLaunching( electron::NSDictionaryToDictionaryValue(notification_info)); - -#if BUILDFLAG(USE_ALLOCATOR_SHIM) - // Disable fatal OOM to hack around an OS bug https://crbug.com/654695. - if (base::mac::IsOS10_12()) { - g_swizzle_imk_input_session = new base::mac::ScopedObjCClassSwizzler( - NSClassFromString(@"IMKInputSession"), - [OOMDisabledIMKInputSession class], - @selector(_coreAttributesFromRange:whichAttributes:completionHandler:)); - } -#endif } - (void)applicationDidBecomeActive:(NSNotification*)notification { diff --git a/shell/browser/mac/in_app_purchase_product.mm b/shell/browser/mac/in_app_purchase_product.mm index 6165946261..da9a20fe53 100644 --- a/shell/browser/mac/in_app_purchase_product.mm +++ b/shell/browser/mac/in_app_purchase_product.mm @@ -220,11 +220,9 @@ withLocal:product.priceLocale] UTF8String]; // Currency Information - if (@available(macOS 10.12, *)) { - if (product.priceLocale.currencyCode != nil) { - productStruct.currencyCode = - [product.priceLocale.currencyCode UTF8String]; - } + if (product.priceLocale.currencyCode != nil) { + productStruct.currencyCode = + [product.priceLocale.currencyCode UTF8String]; } } } diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index 1563a7b2cf..e2723fba7d 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -392,13 +392,9 @@ NativeWindowMac::NativeWindowMac(const gin_helper::Dictionary& options, // Create a tab only if tabbing identifier is specified and window has // a native title bar. if (tabbingIdentifier.empty() || transparent() || !has_frame()) { - if (@available(macOS 10.12, *)) { - [window_ setTabbingMode:NSWindowTabbingModeDisallowed]; - } + [window_ setTabbingMode:NSWindowTabbingModeDisallowed]; } else { - if (@available(macOS 10.12, *)) { - [window_ setTabbingIdentifier:base::SysUTF8ToNSString(tabbingIdentifier)]; - } + [window_ setTabbingIdentifier:base::SysUTF8ToNSString(tabbingIdentifier)]; } // Resize to content bounds. @@ -1564,68 +1560,51 @@ void NativeWindowMac::UpdateFrame() { void NativeWindowMac::SetTouchBar( std::vector items) { - if (@available(macOS 10.12.2, *)) { - touch_bar_.reset([[ElectronTouchBar alloc] - initWithDelegate:window_delegate_.get() - window:this - settings:std::move(items)]); - [window_ setTouchBar:nil]; - } + touch_bar_.reset([[ElectronTouchBar alloc] + initWithDelegate:window_delegate_.get() + window:this + settings:std::move(items)]); + [window_ setTouchBar:nil]; } void NativeWindowMac::RefreshTouchBarItem(const std::string& item_id) { - if (@available(macOS 10.12.2, *)) { - if (touch_bar_ && [window_ touchBar]) - [touch_bar_ refreshTouchBarItem:[window_ touchBar] id:item_id]; - } + if (touch_bar_ && [window_ touchBar]) + [touch_bar_ refreshTouchBarItem:[window_ touchBar] id:item_id]; } void NativeWindowMac::SetEscapeTouchBarItem( gin_helper::PersistentDictionary item) { - if (@available(macOS 10.12.2, *)) { - if (touch_bar_ && [window_ touchBar]) - [touch_bar_ setEscapeTouchBarItem:std::move(item) - forTouchBar:[window_ touchBar]]; - } + if (touch_bar_ && [window_ touchBar]) + [touch_bar_ setEscapeTouchBarItem:std::move(item) + forTouchBar:[window_ touchBar]]; } void NativeWindowMac::SelectPreviousTab() { - if (@available(macOS 10.12, *)) { - [window_ selectPreviousTab:nil]; - } + [window_ selectPreviousTab:nil]; } void NativeWindowMac::SelectNextTab() { - if (@available(macOS 10.12, *)) { - [window_ selectNextTab:nil]; - } + [window_ selectNextTab:nil]; } void NativeWindowMac::MergeAllWindows() { - if (@available(macOS 10.12, *)) { - [window_ mergeAllWindows:nil]; - } + [window_ mergeAllWindows:nil]; } void NativeWindowMac::MoveTabToNewWindow() { - if (@available(macOS 10.12, *)) { - [window_ moveTabToNewWindow:nil]; - } + [window_ moveTabToNewWindow:nil]; } void NativeWindowMac::ToggleTabBar() { - if (@available(macOS 10.12, *)) { - [window_ toggleTabBar:nil]; - } + [window_ toggleTabBar:nil]; } bool NativeWindowMac::AddTabbedWindow(NativeWindow* window) { if (window_ == window->GetNativeWindow().GetNativeNSWindow()) { return false; } else { - if (@available(macOS 10.12, *)) - [window_ addTabbedWindow:window->GetNativeWindow().GetNativeNSWindow() - ordered:NSWindowAbove]; + [window_ addTabbedWindow:window->GetNativeWindow().GetNativeNSWindow() + ordered:NSWindowAbove]; } return true; } diff --git a/shell/browser/ui/cocoa/electron_menu_controller.mm b/shell/browser/ui/cocoa/electron_menu_controller.mm index 8725c80011..9caeadd9fb 100644 --- a/shell/browser/ui/cocoa/electron_menu_controller.mm +++ b/shell/browser/ui/cocoa/electron_menu_controller.mm @@ -422,10 +422,8 @@ static base::scoped_nsobject recentDocumentsMenuSwap_; [item setKeyEquivalentModifierMask:modifier_mask]; } - if (@available(macOS 10.13, *)) { - [(id)item - setAllowsKeyEquivalentWhenHidden:(model->WorksWhenHiddenAt(index))]; - } + [(id)item + setAllowsKeyEquivalentWhenHidden:(model->WorksWhenHiddenAt(index))]; // Set menu item's role. [item setTarget:self]; diff --git a/shell/browser/ui/cocoa/electron_ns_window.mm b/shell/browser/ui/cocoa/electron_ns_window.mm index f4cc2bc5bc..171bd26004 100644 --- a/shell/browser/ui/cocoa/electron_ns_window.mm +++ b/shell/browser/ui/cocoa/electron_ns_window.mm @@ -56,7 +56,7 @@ bool ScopedDisableResize::disable_resize_ = false; return [super contentRectForFrameRect:frameRect]; } -- (NSTouchBar*)makeTouchBar API_AVAILABLE(macosx(10.12.2)) { +- (NSTouchBar*)makeTouchBar { if (shell_->touch_bar()) return [shell_->touch_bar() makeTouchBar]; else diff --git a/shell/browser/ui/cocoa/electron_ns_window_delegate.mm b/shell/browser/ui/cocoa/electron_ns_window_delegate.mm index 2467be4742..740ed06b5f 100644 --- a/shell/browser/ui/cocoa/electron_ns_window_delegate.mm +++ b/shell/browser/ui/cocoa/electron_ns_window_delegate.mm @@ -329,8 +329,7 @@ using FullScreenTransitionState = #pragma mark - NSTouchBarDelegate - (NSTouchBarItem*)touchBar:(NSTouchBar*)touchBar - makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier - API_AVAILABLE(macosx(10.12.2)) { + makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier { if (touchBar && shell_->touch_bar()) return [shell_->touch_bar() makeItemForIdentifier:identifier]; else diff --git a/shell/browser/ui/cocoa/electron_touch_bar.h b/shell/browser/ui/cocoa/electron_touch_bar.h index 9b299d27e9..ff64504202 100644 --- a/shell/browser/ui/cocoa/electron_touch_bar.h +++ b/shell/browser/ui/cocoa/electron_touch_bar.h @@ -29,19 +29,16 @@ window:(electron::NativeWindow*)window settings:(std::vector)settings; -- (NSTouchBar*)makeTouchBar API_AVAILABLE(macosx(10.12.2)); -- (NSTouchBar*)touchBarFromItemIdentifiers:(NSMutableArray*)items - API_AVAILABLE(macosx(10.12.2)); +- (NSTouchBar*)makeTouchBar; +- (NSTouchBar*)touchBarFromItemIdentifiers:(NSMutableArray*)items; - (NSMutableArray*)identifiersFromSettings: (const std::vector&)settings; - (void)refreshTouchBarItem:(NSTouchBar*)touchBar - id:(const std::string&)item_id - API_AVAILABLE(macosx(10.12.2)); + id:(const std::string&)item_id; - (void)addNonDefaultTouchBarItems: (const std::vector&)items; - (void)setEscapeTouchBarItem:(gin_helper::PersistentDictionary)item - forTouchBar:(NSTouchBar*)touchBar - API_AVAILABLE(macosx(10.12.2)); + forTouchBar:(NSTouchBar*)touchBar; - (NSString*)idFromIdentifier:(NSString*)identifier withPrefix:(NSString*)prefix; @@ -52,47 +49,35 @@ // Selector actions - (void)buttonAction:(id)sender; -- (void)colorPickerAction:(id)sender API_AVAILABLE(macosx(10.12.2)); -- (void)sliderAction:(id)sender API_AVAILABLE(macosx(10.12.2)); +- (void)colorPickerAction:(id)sender; +- (void)sliderAction:(id)sender; // Helpers to create touch bar items -- (NSTouchBarItem*)makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier - API_AVAILABLE(macosx(10.12.2)); +- (NSTouchBarItem*)makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier; - (NSTouchBarItem*)makeButtonForID:(NSString*)id - withIdentifier:(NSString*)identifier - API_AVAILABLE(macosx(10.12.2)); + withIdentifier:(NSString*)identifier; - (NSTouchBarItem*)makeLabelForID:(NSString*)id - withIdentifier:(NSString*)identifier - API_AVAILABLE(macosx(10.12.2)); + withIdentifier:(NSString*)identifier; - (NSTouchBarItem*)makeColorPickerForID:(NSString*)id - withIdentifier:(NSString*)identifier - API_AVAILABLE(macosx(10.12.2)); + withIdentifier:(NSString*)identifier; - (NSTouchBarItem*)makeSliderForID:(NSString*)id - withIdentifier:(NSString*)identifier - API_AVAILABLE(macosx(10.12.2)); + withIdentifier:(NSString*)identifier; - (NSTouchBarItem*)makePopoverForID:(NSString*)id - withIdentifier:(NSString*)identifier - API_AVAILABLE(macosx(10.12.2)); + withIdentifier:(NSString*)identifier; - (NSTouchBarItem*)makeGroupForID:(NSString*)id - withIdentifier:(NSString*)identifier - API_AVAILABLE(macosx(10.12.2)); + withIdentifier:(NSString*)identifier; // Helpers to update touch bar items - (void)updateButton:(NSCustomTouchBarItem*)item - withSettings:(const gin_helper::PersistentDictionary&)settings - API_AVAILABLE(macosx(10.12.2)); + withSettings:(const gin_helper::PersistentDictionary&)settings; - (void)updateLabel:(NSCustomTouchBarItem*)item - withSettings:(const gin_helper::PersistentDictionary&)settings - API_AVAILABLE(macosx(10.12.2)); + withSettings:(const gin_helper::PersistentDictionary&)settings; - (void)updateColorPicker:(NSColorPickerTouchBarItem*)item - withSettings:(const gin_helper::PersistentDictionary&)settings - API_AVAILABLE(macosx(10.12.2)); + withSettings:(const gin_helper::PersistentDictionary&)settings; - (void)updateSlider:(NSSliderTouchBarItem*)item - withSettings:(const gin_helper::PersistentDictionary&)settings - API_AVAILABLE(macosx(10.12.2)); + withSettings:(const gin_helper::PersistentDictionary&)settings; - (void)updatePopover:(NSPopoverTouchBarItem*)item - withSettings:(const gin_helper::PersistentDictionary&)settings - API_AVAILABLE(macosx(10.12.2)); + withSettings:(const gin_helper::PersistentDictionary&)settings; @end diff --git a/shell/browser/ui/cocoa/electron_touch_bar.mm b/shell/browser/ui/cocoa/electron_touch_bar.mm index af690bd79d..3272ebc652 100644 --- a/shell/browser/ui/cocoa/electron_touch_bar.mm +++ b/shell/browser/ui/cocoa/electron_touch_bar.mm @@ -67,38 +67,36 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item"; bool has_other_items_proxy = false; - if (@available(macOS 10.12.2, *)) { - for (const auto& item : dicts) { - std::string type; - std::string item_id; - if (item.Get("type", &type) && item.Get("id", &item_id)) { - NSTouchBarItemIdentifier identifier = nil; - if (type == "spacer") { - std::string size; - item.Get("size", &size); - if (size == "large") { - identifier = NSTouchBarItemIdentifierFixedSpaceLarge; - } else if (size == "flexible") { - identifier = NSTouchBarItemIdentifierFlexibleSpace; - } else { - identifier = NSTouchBarItemIdentifierFixedSpaceSmall; - } - } else if (type == "other_items_proxy") { - identifier = NSTouchBarItemIdentifierOtherItemsProxy; - has_other_items_proxy = true; + for (const auto& item : dicts) { + std::string type; + std::string item_id; + if (item.Get("type", &type) && item.Get("id", &item_id)) { + NSTouchBarItemIdentifier identifier = nil; + if (type == "spacer") { + std::string size; + item.Get("size", &size); + if (size == "large") { + identifier = NSTouchBarItemIdentifierFixedSpaceLarge; + } else if (size == "flexible") { + identifier = NSTouchBarItemIdentifierFlexibleSpace; } else { - identifier = [self identifierFromID:item_id type:type]; + identifier = NSTouchBarItemIdentifierFixedSpaceSmall; } + } else if (type == "other_items_proxy") { + identifier = NSTouchBarItemIdentifierOtherItemsProxy; + has_other_items_proxy = true; + } else { + identifier = [self identifierFromID:item_id type:type]; + } - if (identifier) { - settings_[item_id] = item; - [identifiers addObject:identifier]; - } + if (identifier) { + settings_[item_id] = item; + [identifiers addObject:identifier]; } } - if (!has_other_items_proxy) - [identifiers addObject:NSTouchBarItemIdentifierOtherItemsProxy]; } + if (!has_other_items_proxy) + [identifiers addObject:NSTouchBarItemIdentifierOtherItemsProxy]; return identifiers; } @@ -140,8 +138,7 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item"; - (void)refreshTouchBarItem:(NSTouchBar*)touchBar id:(NSTouchBarItemIdentifier)identifier withType:(const std::string&)item_type - withSettings:(const gin_helper::PersistentDictionary&)settings - API_AVAILABLE(macosx(10.12.2)) { + withSettings:(const gin_helper::PersistentDictionary&)settings { NSTouchBarItem* item = [touchBar itemForIdentifier:identifier]; if (!item) return; @@ -289,8 +286,7 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item"; } - (void)scrubber:(NSScrubber*)scrubber - didSelectItemAtIndex:(NSInteger)selectedIndex - API_AVAILABLE(macosx(10.12.2)) { + didSelectItemAtIndex:(NSInteger)selectedIndex { base::DictionaryValue details; details.SetInteger("selectedIndex", selectedIndex); details.SetString("type", "select"); @@ -299,8 +295,7 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item"; } - (void)scrubber:(NSScrubber*)scrubber - didHighlightItemAtIndex:(NSInteger)highlightedIndex - API_AVAILABLE(macosx(10.12.2)) { + didHighlightItemAtIndex:(NSInteger)highlightedIndex { base::DictionaryValue details; details.SetInteger("highlightedIndex", highlightedIndex); details.SetString("type", "highlight"); @@ -592,8 +587,7 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item"; } - (void)updateGroup:(NSGroupTouchBarItem*)item - withSettings:(const gin_helper::PersistentDictionary&)settings - API_AVAILABLE(macosx(10.12.2)) { + withSettings:(const gin_helper::PersistentDictionary&)settings { v8::Isolate* isolate = electron::JavascriptEnvironment::GetIsolate(); v8::HandleScope handle_scope(isolate); @@ -609,8 +603,7 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item"; } - (NSTouchBarItem*)makeSegmentedControlForID:(NSString*)id - withIdentifier:(NSString*)identifier - API_AVAILABLE(macosx(10.12.2)) { + withIdentifier:(NSString*)identifier { std::string s_id([id UTF8String]); if (![self hasItemWithID:s_id]) return nil; @@ -635,8 +628,8 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item"; } - (void)updateSegmentedControl:(NSCustomTouchBarItem*)item - withSettings:(const gin_helper::PersistentDictionary&)settings - API_AVAILABLE(macosx(10.12.2)) { + withSettings: + (const gin_helper::PersistentDictionary&)settings { NSSegmentedControl* control = item.view; std::string segmentStyle; @@ -697,8 +690,7 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item"; } - (NSTouchBarItem*)makeScrubberForID:(NSString*)id - withIdentifier:(NSString*)identifier - API_AVAILABLE(macosx(10.12.2)) { + withIdentifier:(NSString*)identifier { std::string s_id([id UTF8String]); if (![self hasItemWithID:s_id]) return nil; @@ -729,8 +721,7 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item"; } - (void)updateScrubber:(NSCustomTouchBarItem*)item - withSettings:(const gin_helper::PersistentDictionary&)settings - API_AVAILABLE(macosx(10.12.2)) { + withSettings:(const gin_helper::PersistentDictionary&)settings { NSScrubber* scrubber = item.view; bool showsArrowButtons = false; @@ -780,8 +771,7 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item"; [scrubber reloadData]; } -- (NSInteger)numberOfItemsForScrubber:(NSScrubber*)scrubber - API_AVAILABLE(macosx(10.12.2)) { +- (NSInteger)numberOfItemsForScrubber:(NSScrubber*)scrubber { std::string s_id([[scrubber identifier] UTF8String]); if (![self hasItemWithID:s_id]) return 0; @@ -796,8 +786,7 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item"; } - (NSScrubberItemView*)scrubber:(NSScrubber*)scrubber - viewForItemAtIndex:(NSInteger)index - API_AVAILABLE(macosx(10.12.2)) { + viewForItemAtIndex:(NSInteger)index { std::string s_id([[scrubber identifier] UTF8String]); if (![self hasItemWithID:s_id]) return nil; @@ -839,7 +828,7 @@ static NSString* const ImageScrubberItemIdentifier = @"scrubber.image.item"; - (NSSize)scrubber:(NSScrubber*)scrubber layout:(NSScrubberFlowLayout*)layout - sizeForItemAtIndex:(NSInteger)itemIndex API_AVAILABLE(macosx(10.12.2)) { + sizeForItemAtIndex:(NSInteger)itemIndex { NSInteger width = 50; NSInteger height = 30; NSInteger margin = 15;