mac: remove Apple Remote support

the Apple Remote has long been deprecated and abandoned by Apple.
current macs don't come with support for it anymore. support might be
re-added with the next commit.
This commit is contained in:
der richter 2019-11-16 16:54:07 +01:00
parent 1eb6cbd093
commit 8a6ee7fe94
18 changed files with 9 additions and 2580 deletions

View File

@ -59,6 +59,9 @@ Interface changes
setting the properties to non-existing tracks may report it as selected
track for a small time window, until it's forced back to "no". The exact
details how this is handled may change in the future.
- remove old Apple Remote support, including --input-appleremote
- add MediaPlayer support and remove the old Media Key event tap on macOS.
this possibly also re-adds the Apple Remote support
--- mpv 0.30.0 ---
- add `--d3d11-output-format` to enable explicit selection of a D3D11
swap chain format.

View File

@ -145,9 +145,6 @@ Comments on some symbolic names:
``GAMEPAD_*``
Keys emitted by the SDL gamepad backend.
``AR_*``
Keys emitted by the OSX-only Apple Remote code.
``UNMAPPED``
Pseudo-key that matches any unmapped key. (You should probably avoid this
if possible, because it might change behavior or get removed in the future.)

View File

@ -3484,10 +3484,6 @@ Input
See `JSON IPC`_ for details.
``--input-appleremote=<yes|no>``
(OS X only)
Enable/disable Apple Remote support. Enabled by default (except for libmpv).
``--input-gamepad=<yes|no>``
Enable/disable SDL2 Gamepad support. Disabled by default.

View File

@ -144,7 +144,6 @@ Mac OS X
* Native OpenGL backend.
* Cocoa event loop is independent from MPlayer's event loop, so user
actions like accessing menus and live resizing do not block the playback.
* Apple Remote support.
* Media Keys support.
* VDA support using libavcodec hwaccel API instead of FFmpeg's decoder with up
to 2-2.5x reduction in CPU usage.
@ -248,7 +247,7 @@ Command Line Switches
``-msglevel`` ``--msg-level`` (changed semantics)
``-msgmodule`` ``--msg-module``
``-name`` ``--x11-name``
``-noar`` ``--no-input-appleremote``
``-noar`` ``(removed; replaced by MediaPlayer framework)``
``-noautosub`` ``--no-sub-auto``
``-noconsolecontrols`` ``--no-input-terminal``
``-nosound`` ``--no-audio``

View File

@ -19,7 +19,7 @@ PKG_CONFIG_PATH="${FFMPEG_SYSROOT}/lib/pkgconfig/" CC="${CC}" CXX="${CXX}" pytho
--variant="${MPV_VARIANT}" \
--prefix="${MPV_INSTALL_PREFIX}" \
--enable-{gl,iconv,lcms2,libass,libass-osd,libmpv-shared,lua,jpeg,plain-gl,zlib} \
--enable-{apple-remote,cocoa,coreaudio,gl-cocoa,macos-cocoa-cb,macos-touchbar,videotoolbox-gl}
--enable-{cocoa,coreaudio,gl-cocoa,macos-cocoa-cb,macos-touchbar,videotoolbox-gl}
python3 ./waf build --variant="${MPV_VARIANT}" -j4

View File

@ -27,7 +27,6 @@ osc=no
input-default-bindings=no
input-vo-keyboard=no
# OSX/Cocoa global input hooks
input-appleremote=no
input-media-keys=no
[encoding]

View File

@ -168,22 +168,6 @@
#F8 show_text ${playlist} # show playlist
#F9 show_text ${track-list} # show list of audio/sub streams
# Apple Remote section
#AR_PLAY cycle pause
#AR_PLAY_HOLD quit
#AR_CENTER cycle pause
#AR_CENTER_HOLD quit
#AR_NEXT seek 10
#AR_NEXT_HOLD seek 120
#AR_PREV seek -10
#AR_PREV_HOLD seek -120
#AR_MENU show-progress
#AR_MENU_HOLD cycle mute
#AR_VUP add volume 2
#AR_VUP_HOLD add chapter 1
#AR_VDOWN add volume -2
#AR_VDOWN_HOLD add chapter -1
#
# Legacy bindings (may or may not be removed in the future)
#

View File

@ -74,25 +74,6 @@ l cycle tv-channel -1
n cycle tv-norm
#b tv_step_chanlist
##
## Apple Remote section
##
## To use OSD menu with Apple Remote, set key AR_MENU to any OSD menu command,
## or just comment out the 'AR_MENU osd' line and uncomment the line after it.
##
AR_PLAY cycle pause
AR_PLAY_HOLD quit
AR_NEXT seek 30
AR_NEXT_HOLD seek 120
AR_PREV seek -10
AR_PREV_HOLD seek -120
#AR_MENU menu up
#AR_MENU menu cancel
AR_MENU_HOLD cycle mute
AR_VUP add volume 1
AR_VDOWN add volume -1
#? add chapter -1 # skip to previous dvd chapter
#? add chapter +1 # next

View File

@ -196,14 +196,14 @@ const struct m_sub_options input_config = {
OPT_FLAG("input-cursor", enable_mouse_movements, 0),
OPT_FLAG("input-vo-keyboard", vo_key_input, 0),
OPT_FLAG("input-media-keys", use_media_keys, 0),
#if HAVE_COCOA
OPT_FLAG("input-appleremote", use_appleremote, 0),
#endif
#if HAVE_SDL2_GAMEPAD
OPT_FLAG("input-gamepad", use_gamepad, 0),
#endif
OPT_FLAG("window-dragging", allow_win_drag, 0),
OPT_REPLACED("input-x11-keyboard", "input-vo-keyboard"),
#if HAVE_COCOA
OPT_REMOVED("input-appleremote", "replaced by MediaPlayer support"),
#endif
{0}
},
.size = sizeof(struct input_opts),
@ -215,9 +215,6 @@ const struct m_sub_options input_config = {
.use_alt_gr = 1,
.enable_mouse_movements = 1,
.use_media_keys = 1,
#if HAVE_COCOA
.use_appleremote = 1,
#endif
.default_bindings = 1,
.vo_key_input = 1,
.allow_win_drag = 1,
@ -1335,15 +1332,6 @@ static void reload_opts(struct input_ctx *ictx, bool shutdown)
#if HAVE_COCOA
struct input_opts *opts = ictx->opts;
if (ictx->using_ar != (opts->use_appleremote && !shutdown)) {
ictx->using_ar = !ictx->using_ar;
if (ictx->using_ar) {
cocoa_init_apple_remote();
} else {
cocoa_uninit_apple_remote();
}
}
if (ictx->using_cocoa_media_keys != (opts->use_media_keys && !shutdown)) {
ictx->using_cocoa_media_keys = !ictx->using_cocoa_media_keys;
if (ictx->using_cocoa_media_keys) {

View File

@ -102,21 +102,6 @@ static const struct key_name key_names[] = {
{ MP_MBTN_MID_DBL, "MBTN_MID_DBL" },
{ MP_MBTN_RIGHT_DBL, "MBTN_RIGHT_DBL" },
{ MP_AR_PLAY, "AR_PLAY" },
{ MP_AR_PLAY_HOLD, "AR_PLAY_HOLD" },
{ MP_AR_CENTER, "AR_CENTER" },
{ MP_AR_CENTER_HOLD, "AR_CENTER_HOLD" },
{ MP_AR_NEXT, "AR_NEXT" },
{ MP_AR_NEXT_HOLD, "AR_NEXT_HOLD" },
{ MP_AR_PREV, "AR_PREV" },
{ MP_AR_PREV_HOLD, "AR_PREV_HOLD" },
{ MP_AR_MENU, "AR_MENU" },
{ MP_AR_MENU_HOLD, "AR_MENU_HOLD" },
{ MP_AR_VUP, "AR_VUP" },
{ MP_AR_VUP_HOLD, "AR_VUP_HOLD" },
{ MP_AR_VDOWN, "AR_VDOWN" },
{ MP_AR_VDOWN_HOLD, "AR_VDOWN_HOLD" },
{ MP_KEY_GAMEPAD_ACTION_DOWN, "GAMEPAD_ACTION_DOWN" },
{ MP_KEY_GAMEPAD_ACTION_RIGHT, "GAMEPAD_ACTION_RIGHT" },
{ MP_KEY_GAMEPAD_ACTION_LEFT, "GAMEPAD_ACTION_LEFT" },

View File

@ -141,23 +141,6 @@
#define MP_KEY_MOUSE_BTN_COUNT (MP_MBTN_END - MP_MBTN_BASE)
// Apple Remote input module
#define MP_AR_BASE (MP_KEY_BASE+0xE0)
#define MP_AR_PLAY (MP_AR_BASE + 0)
#define MP_AR_PLAY_HOLD (MP_AR_BASE + 1)
#define MP_AR_CENTER (MP_AR_BASE + 2)
#define MP_AR_CENTER_HOLD (MP_AR_BASE + 3)
#define MP_AR_NEXT (MP_AR_BASE + 4)
#define MP_AR_NEXT_HOLD (MP_AR_BASE + 5)
#define MP_AR_PREV (MP_AR_BASE + 6)
#define MP_AR_PREV_HOLD (MP_AR_BASE + 7)
#define MP_AR_MENU (MP_AR_BASE + 8)
#define MP_AR_MENU_HOLD (MP_AR_BASE + 9)
#define MP_AR_VUP (MP_AR_BASE + 10)
#define MP_AR_VUP_HOLD (MP_AR_BASE + 11)
#define MP_AR_VDOWN (MP_AR_BASE + 12)
#define MP_AR_VDOWN_HOLD (MP_AR_BASE + 13)
/* game controller keys */
#define MP_KEY_GAMEPAD (MP_KEY_BASE+0xF0)
#define MP_KEY_GAMEPAD_ACTION_DOWN (MP_KEY_GAMEPAD+0)

View File

@ -1,378 +0,0 @@
//
// HIDRemote.h
// HIDRemote V1.2
//
// Created by Felix Schwarz on 06.04.07.
// Copyright 2007-2011 IOSPIRIT GmbH. All rights reserved.
//
// The latest version of this class is available at
// http://www.iospirit.com/developers/hidremote/
//
// ** LICENSE *************************************************************************
//
// Copyright (c) 2007-2011 IOSPIRIT GmbH (http://www.iospirit.com/)
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice, this list
// of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright notice, this
// list of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// * Neither the name of IOSPIRIT GmbH nor the names of its contributors may be used to
// endorse or promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
// SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
// DAMAGE.
//
// ************************************************************************************
// ************************************************************************************
// ********************************** DOCUMENTATION ***********************************
// ************************************************************************************
//
// - a reference is available at http://www.iospirit.com/developers/hidremote/reference/
// - for a guide, please see http://www.iospirit.com/developers/hidremote/guide/
//
// ************************************************************************************
#import <Cocoa/Cocoa.h>
#include <Carbon/Carbon.h>
#include <unistd.h>
#include <mach/mach.h>
#include <sys/types.h>
#include <IOKit/IOKitLib.h>
#include <IOKit/IOCFPlugIn.h>
#include <IOKit/IOMessage.h>
#include <IOKit/hid/IOHIDKeys.h>
#include <IOKit/hid/IOHIDLib.h>
#include <IOKit/hid/IOHIDUsageTables.h>
#include <IOKit/hidsystem/IOHIDLib.h>
#include <IOKit/hidsystem/IOHIDParameter.h>
#include <IOKit/hidsystem/IOHIDShared.h>
#pragma mark -- Enums / Codes --
typedef enum
{
kHIDRemoteModeNone = 0L,
kHIDRemoteModeShared, // Share the remote with others - let's you listen to the remote control events as long as no one has an exclusive lock on it
// (RECOMMENDED ONLY FOR SPECIAL PURPOSES)
kHIDRemoteModeExclusive, // Try to acquire an exclusive lock on the remote (NOT RECOMMENDED)
kHIDRemoteModeExclusiveAuto // Try to acquire an exclusive lock on the remote whenever the application has focus. Temporarily release control over the
// remote when another application has focus (RECOMMENDED)
} HIDRemoteMode;
typedef enum
{
/* A code reserved for "no button" (needed for tracking) */
kHIDRemoteButtonCodeNone = 0L,
/* Standard codes - available for white plastic and aluminum remote */
kHIDRemoteButtonCodeUp,
kHIDRemoteButtonCodeDown,
kHIDRemoteButtonCodeLeft,
kHIDRemoteButtonCodeRight,
kHIDRemoteButtonCodeCenter,
kHIDRemoteButtonCodeMenu,
/* Extra codes - Only available for the new aluminum version of the remote */
kHIDRemoteButtonCodePlay,
/* Masks */
kHIDRemoteButtonCodeCodeMask = 0xFFL,
kHIDRemoteButtonCodeHoldMask = (1L << 16L),
kHIDRemoteButtonCodeSpecialMask = (1L << 17L),
kHIDRemoteButtonCodeAluminumMask = (1L << 21L), // PRIVATE - only used internally
/* Hold button standard codes - available for white plastic and aluminum remote */
kHIDRemoteButtonCodeUpHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodeUp),
kHIDRemoteButtonCodeDownHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodeDown),
kHIDRemoteButtonCodeLeftHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodeLeft),
kHIDRemoteButtonCodeRightHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodeRight),
kHIDRemoteButtonCodeCenterHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodeCenter),
kHIDRemoteButtonCodeMenuHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodeMenu),
/* Hold button extra codes - Only available for aluminum version of the remote */
kHIDRemoteButtonCodePlayHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodePlay),
/* DEPRECATED codes - compatibility with HIDRemote 1.0 */
kHIDRemoteButtonCodePlus = kHIDRemoteButtonCodeUp,
kHIDRemoteButtonCodePlusHold = kHIDRemoteButtonCodeUpHold,
kHIDRemoteButtonCodeMinus = kHIDRemoteButtonCodeDown,
kHIDRemoteButtonCodeMinusHold = kHIDRemoteButtonCodeDownHold,
kHIDRemoteButtonCodePlayPause = kHIDRemoteButtonCodeCenter,
kHIDRemoteButtonCodePlayPauseHold = kHIDRemoteButtonCodeCenterHold,
/* Special purpose codes */
kHIDRemoteButtonCodeIDChanged = (kHIDRemoteButtonCodeSpecialMask|(1L << 18L)), // (the ID of the connected remote has changed, you can safely ignore this)
#ifdef _HIDREMOTE_EXTENSIONS
#define _HIDREMOTE_EXTENSIONS_SECTION 1
#include "HIDRemoteAdditions.h"
#undef _HIDREMOTE_EXTENSIONS_SECTION
#endif /* _HIDREMOTE_EXTENSIONS */
} HIDRemoteButtonCode;
typedef enum
{
kHIDRemoteModelUndetermined = 0L, // Assume a white plastic remote
kHIDRemoteModelWhitePlastic, // Signal *likely* to be coming from a white plastic remote
kHIDRemoteModelAluminum // Signal *definitely* coming from an aluminum remote
} HIDRemoteModel;
typedef enum
{
kHIDRemoteAluminumRemoteSupportLevelNone = 0L, // This system has no support for the Aluminum Remote at all
kHIDRemoteAluminumRemoteSupportLevelEmulation, // This system possibly has support for the Aluminum Remote (via emulation)
kHIDRemoteAluminumRemoteSupportLevelNative // This system has native support for the Aluminum Remote
} HIDRemoteAluminumRemoteSupportLevel;
@class HIDRemote;
#pragma mark -- Delegate protocol (mandatory) --
@protocol HIDRemoteDelegate
// Notification of button events
- (void)hidRemote:(HIDRemote *)hidRemote // The instance of HIDRemote sending this
eventWithButton:(HIDRemoteButtonCode)buttonCode // Event for the button specified by code
isPressed:(BOOL)isPressed // The button was pressed (YES) / released (NO)
fromHardwareWithAttributes:(NSMutableDictionary *)attributes; // Information on the device this event comes from
@optional
// Notification of ID changes
- (void)hidRemote:(HIDRemote *)hidRemote // Invoked when the user switched to a remote control with a different ID
remoteIDChangedOldID:(SInt32)old
newID:(SInt32)newID
forHardwareWithAttributes:(NSMutableDictionary *)attributes;
// Notification about hardware additions/removals
- (void)hidRemote:(HIDRemote *)hidRemote // Invoked when new hardware was found / added to HIDRemote's pool
foundNewHardwareWithAttributes:(NSMutableDictionary *)attributes;
- (void)hidRemote:(HIDRemote *)hidRemote // Invoked when initialization of new hardware as requested failed
failedNewHardwareWithError:(NSError *)error;
- (void)hidRemote:(HIDRemote *)hidRemote // Invoked when hardware was removed from HIDRemote's pool
releasedHardwareWithAttributes:(NSMutableDictionary *)attributes;
// ### WARNING: Unless you know VERY PRECISELY what you are doing, do not implement any of the delegate methods below. ###
// Matching of newly found receiver hardware
- (BOOL)hidRemote:(HIDRemote *)hidRemote // Invoked when new hardware is inspected
inspectNewHardwareWithService:(io_service_t)service //
prematchResult:(BOOL)prematchResult; // Return YES if HIDRemote should go on with this hardware and try
// to use it, or NO if it should not be pursued further.
// Exlusive lock lending
- (BOOL)hidRemote:(HIDRemote *)hidRemote
lendExclusiveLockToApplicationWithInfo:(NSDictionary *)applicationInfo;
- (void)hidRemote:(HIDRemote *)hidRemote
exclusiveLockReleasedByApplicationWithInfo:(NSDictionary *)applicationInfo;
- (BOOL)hidRemote:(HIDRemote *)hidRemote
shouldRetryExclusiveLockWithInfo:(NSDictionary *)applicationInfo;
@end
#pragma mark -- Actual header file for class --
@interface HIDRemote : NSObject
{
// IOMasterPort
mach_port_t _masterPort;
// Notification ports
IONotificationPortRef _notifyPort;
CFRunLoopSourceRef _notifyRLSource;
// Matching iterator
io_iterator_t _matchingServicesIterator;
// SecureInput notification
io_object_t _secureInputNotification;
// Service attributes
NSMutableDictionary *_serviceAttribMap;
// Mode
HIDRemoteMode _mode;
BOOL _autoRecover;
NSTimer *_autoRecoveryTimer;
// Delegate
NSObject <HIDRemoteDelegate> *_delegate;
// Last seen ID and remote model
SInt32 _lastSeenRemoteID;
HIDRemoteModel _lastSeenModel;
SInt32 _lastSeenModelRemoteID;
// Unused button codes
NSArray *_unusedButtonCodes;
// Simulate Plus/Minus Hold
BOOL _simulateHoldEvents;
// SecureEventInput workaround
BOOL _secureEventInputWorkAround;
UInt64 _lastSecureEventInputPIDSum;
uid_t _lastFrontUserSession;
// Exclusive lock lending
BOOL _exclusiveLockLending;
BOOL _sendExclusiveResourceReuseNotification;
NSNumber *_waitForReturnByPID;
NSNumber *_returnToPID;
BOOL _isRestarting;
// Status notifications
BOOL _sendStatusNotifications;
NSString *_pidString;
// Status
BOOL _applicationIsTerminating;
BOOL _isStopping;
// Thread safety
#ifdef HIDREMOTE_THREADSAFETY_HARDENED_NOTIFICATION_HANDLING /* #define HIDREMOTE_THREADSAFETY_HARDENED_NOTIFICATION_HANDLING if you're running your HIDRemote instance on a background thread (requires OS X 10.5 or later) */
NSThread *_runOnThread;
#endif
}
#pragma mark -- PUBLIC: Shared HID Remote --
+ (HIDRemote *)sharedHIDRemote;
#pragma mark -- PUBLIC: System Information --
+ (BOOL)isCandelairInstalled;
+ (BOOL)isCandelairInstallationRequiredForRemoteMode:(HIDRemoteMode)remoteMode;
- (HIDRemoteAluminumRemoteSupportLevel)aluminiumRemoteSystemSupportLevel;
#pragma mark -- PUBLIC: Interface / API --
- (BOOL)startRemoteControl:(HIDRemoteMode)hidRemoteMode;
- (void)stopRemoteControl;
- (BOOL)isStarted;
- (HIDRemoteMode)startedInMode;
- (unsigned)activeRemoteControlCount;
- (SInt32)lastSeenRemoteControlID;
- (void)setLastSeenModel:(HIDRemoteModel)aModel;
- (HIDRemoteModel)lastSeenModel;
- (void)setDelegate:(NSObject <HIDRemoteDelegate> *)newDelegate;
- (NSObject <HIDRemoteDelegate> *)delegate;
- (void)setSimulateHoldEvents:(BOOL)newSimulateHoldEvents;
- (BOOL)simulateHoldEvents;
- (void)setUnusedButtonCodes:(NSArray *)newArrayWithUnusedButtonCodesAsNSNumbers;
- (NSArray *)unusedButtonCodes;
#pragma mark -- PUBLIC: Expert APIs --
- (void)setEnableSecureEventInputWorkaround:(BOOL)newEnableSecureEventInputWorkaround;
- (BOOL)enableSecureEventInputWorkaround;
- (void)setExclusiveLockLendingEnabled:(BOOL)newExclusiveLockLendingEnabled;
- (BOOL)exclusiveLockLendingEnabled;
- (BOOL)isApplicationTerminating;
- (BOOL)isStopping;
#pragma mark -- PRIVATE: HID Event handling --
- (void)_handleButtonCode:(HIDRemoteButtonCode)buttonCode isPressed:(BOOL)isPressed hidAttribsDict:(NSMutableDictionary *)hidAttribsDict;
- (void)_sendButtonCode:(HIDRemoteButtonCode)buttonCode isPressed:(BOOL)isPressed hidAttribsDict:(NSMutableDictionary *)hidAttribsDict;
- (void)_hidEventFor:(io_service_t)hidDevice from:(IOHIDQueueInterface **)interface withResult:(IOReturn)result;
#pragma mark -- PRIVATE: Service setup and destruction --
- (BOOL)_prematchService:(io_object_t)service;
- (HIDRemoteButtonCode)buttonCodeForUsage:(unsigned int)usage usagePage:(unsigned int)usagePage;
- (BOOL)_setupService:(io_object_t)service;
- (void)_destructService:(io_object_t)service;
#pragma mark -- PRIVATE: Distributed notifiations handling --
- (void)_postStatusWithAction:(NSString *)action;
- (void)_handleNotifications:(NSNotification *)notification;
- (void)_setSendStatusNotifications:(BOOL)doSend;
- (BOOL)_sendStatusNotifications;
#pragma mark -- PRIVATE: Application becomes active / inactive handling for kHIDRemoteModeExclusiveAuto --
- (void)_appStatusChanged:(NSNotification *)notification;
- (void)_delayedAutoRecovery:(NSTimer *)aTimer;
#pragma mark -- PRIVATE: Notification handling --
- (void)_serviceMatching:(io_iterator_t)iterator;
- (void)_serviceNotificationFor:(io_service_t)service messageType:(natural_t)messageType messageArgument:(void *)messageArgument;
- (void)_updateSessionInformation;
- (void)_secureInputNotificationFor:(io_service_t)service messageType:(natural_t)messageType messageArgument:(void *)messageArgument;
@end
#pragma mark -- Information attribute keys --
extern NSString *kHIDRemoteManufacturer;
extern NSString *kHIDRemoteProduct;
extern NSString *kHIDRemoteTransport;
#pragma mark -- Internal/Expert attribute keys (AKA: don't touch these unless you really, really, REALLY know what you do) --
extern NSString *kHIDRemoteCFPluginInterface;
extern NSString *kHIDRemoteHIDDeviceInterface;
extern NSString *kHIDRemoteCookieButtonCodeLUT;
extern NSString *kHIDRemoteHIDQueueInterface;
extern NSString *kHIDRemoteServiceNotification;
extern NSString *kHIDRemoteCFRunLoopSource;
extern NSString *kHIDRemoteLastButtonPressed;
extern NSString *kHIDRemoteService;
extern NSString *kHIDRemoteSimulateHoldEventsTimer;
extern NSString *kHIDRemoteSimulateHoldEventsOriginButtonCode;
extern NSString *kHIDRemoteAluminumRemoteSupportLevel;
extern NSString *kHIDRemoteAluminumRemoteSupportOnDemand;
#pragma mark -- Distributed notifications --
extern NSString *kHIDRemoteDNHIDRemotePing;
extern NSString *kHIDRemoteDNHIDRemoteRetry;
extern NSString *kHIDRemoteDNHIDRemoteStatus;
extern NSString *kHIDRemoteDNHIDRemoteRetryGlobalObject;
#pragma mark -- Distributed notifications userInfo keys and values --
extern NSString *kHIDRemoteDNStatusHIDRemoteVersionKey;
extern NSString *kHIDRemoteDNStatusPIDKey;
extern NSString *kHIDRemoteDNStatusModeKey;
extern NSString *kHIDRemoteDNStatusUnusedButtonCodesKey;
extern NSString *kHIDRemoteDNStatusRemoteControlCountKey;
extern NSString *kHIDRemoteDNStatusReturnToPIDKey;
extern NSString *kHIDRemoteDNStatusActionKey;
extern NSString *kHIDRemoteDNStatusActionStart;
extern NSString *kHIDRemoteDNStatusActionStop;
extern NSString *kHIDRemoteDNStatusActionUpdate;
extern NSString *kHIDRemoteDNStatusActionNoNeed;
#pragma mark -- Driver compatibility flags --
typedef enum
{
kHIDRemoteCompatibilityFlagsStandardHIDRemoteDevice = 1L,
} HIDRemoteCompatibilityFlags;

File diff suppressed because it is too large Load Diff

View File

@ -27,9 +27,6 @@ struct mpv_handle;
void cocoa_put_key(int keycode);
void cocoa_put_key_with_modifiers(int keycode, int modifiers);
void cocoa_init_apple_remote(void);
void cocoa_uninit_apple_remote(void);
void cocoa_init_media_keys(void);
void cocoa_uninit_media_keys(void);

View File

@ -50,17 +50,12 @@
BOOL _is_application;
NSCondition *_input_lock;
CFMachPortRef _mk_tap_port;
#if HAVE_APPLE_REMOTE
HIDRemote *_remote;
#endif
}
- (BOOL)handleMediaKey:(NSEvent *)event;
- (NSEvent *)handleKey:(NSEvent *)event;
- (BOOL)setMpvHandle:(struct mpv_handle *)ctx;
- (void)readEvents;
- (void)startAppleRemote;
- (void)stopAppleRemote;
- (void)startMediaKeys;
- (void)restartMediaKeys;
- (void)stopMediaKeys;
@ -126,16 +121,6 @@ static int convert_key(unsigned key, unsigned charcode)
return charcode;
}
void cocoa_init_apple_remote(void)
{
[[EventsResponder sharedInstance] startAppleRemote];
}
void cocoa_uninit_apple_remote(void)
{
[[EventsResponder sharedInstance] stopAppleRemote];
}
static int mk_code(NSEvent *event)
{
return (([event data1] & 0xFFFF0000) >> 16);
@ -352,29 +337,6 @@ void cocoa_set_mpv_handle(struct mpv_handle *ctx)
}
}
- (void)startAppleRemote
{
#if HAVE_APPLE_REMOTE
dispatch_async(dispatch_get_main_queue(), ^{
self->_remote = [[HIDRemote alloc] init];
if (self->_remote) {
[self->_remote setDelegate:self];
[self->_remote startRemoteControl:kHIDRemoteModeExclusiveAuto];
}
});
#endif
}
- (void)stopAppleRemote
{
#if HAVE_APPLE_REMOTE
dispatch_async(dispatch_get_main_queue(), ^{
[self->_remote stopRemoteControl];
[self->_remote release];
});
#endif
}
- (void)restartMediaKeys
{
if (self->_mk_tap_port)
@ -448,33 +410,6 @@ void cocoa_set_mpv_handle(struct mpv_handle *ctx)
andMapping:keymapd];
}
- (void)hidRemote:(HIDRemote *)remote
eventWithButton:(HIDRemoteButtonCode)buttonCode
isPressed:(BOOL)isPressed
fromHardwareWithAttributes:(NSMutableDictionary *)attributes
{
if (!isPressed) return;
NSDictionary *keymapd = @{
@(kHIDRemoteButtonCodePlay): @(MP_AR_PLAY),
@(kHIDRemoteButtonCodePlayHold): @(MP_AR_PLAY_HOLD),
@(kHIDRemoteButtonCodeCenter): @(MP_AR_CENTER),
@(kHIDRemoteButtonCodeCenterHold): @(MP_AR_CENTER_HOLD),
@(kHIDRemoteButtonCodeLeft): @(MP_AR_PREV),
@(kHIDRemoteButtonCodeLeftHold): @(MP_AR_PREV_HOLD),
@(kHIDRemoteButtonCodeRight): @(MP_AR_NEXT),
@(kHIDRemoteButtonCodeRightHold): @(MP_AR_NEXT_HOLD),
@(kHIDRemoteButtonCodeMenu): @(MP_AR_MENU),
@(kHIDRemoteButtonCodeMenuHold): @(MP_AR_MENU_HOLD),
@(kHIDRemoteButtonCodeUp): @(MP_AR_VUP),
@(kHIDRemoteButtonCodeUpHold): @(MP_AR_VUP_HOLD),
@(kHIDRemoteButtonCodeDown): @(MP_AR_VDOWN),
@(kHIDRemoteButtonCodeDownHold): @(MP_AR_VDOWN_HOLD),
};
[self handleKey:buttonCode withMask:0 andMapping:keymapd];
}
- (int)mapKeyModifiers:(int)cocoaModifiers
{
int mask = 0;

View File

@ -18,12 +18,11 @@
*/
#import <Cocoa/Cocoa.h>
#import "ar/HIDRemote.h"
#include "osdep/macosx_events.h"
struct input_ctx;
@interface EventsResponder : NSObject <HIDRemoteDelegate>
@interface EventsResponder : NSObject
+ (EventsResponder *)sharedInstance;
- (void)setInputContext:(struct input_ctx *)ctx;

View File

@ -904,11 +904,6 @@ standalone_features = [
'desc': 'w32 executable',
'deps': 'os-win32 || !(!(os-cygwin))',
'func': check_ctx_vars('WINDRES')
}, {
'name': '--apple-remote',
'desc': 'Apple Remote support',
'deps': 'cocoa',
'func': check_true
}, {
'name': '--macos-touchbar',
'desc': 'macOS Touch Bar support',

View File

@ -544,7 +544,6 @@ def build(ctx):
( "osdep/android/posix-spawn.c", "android"),
( "osdep/android/strnlen.c", "android"),
( "osdep/ar/HIDRemote.m", "apple-remote" ),
( "osdep/glob-win.c", "glob-win32" ),
( "osdep/macosx_application.m", "cocoa" ),
( "osdep/macosx_events.m", "cocoa" ),