mirror of https://github.com/mpv-player/mpv
mac: add an option to prevent focusing of the window on open
on macOS 10.15 setting the activation policy behaves quite weirdly. the call changes the current active App to a nameless process, which probably also the reason that prevents the not focusing to work. a workaround for that, is to refocus the previous active app. Fixes #7725
This commit is contained in:
parent
c535dfed66
commit
18a35f17e2
|
@ -2949,6 +2949,11 @@ Window
|
||||||
:desktop: On top of the Dekstop behind windows and Desktop icons.
|
:desktop: On top of the Dekstop behind windows and Desktop icons.
|
||||||
:level: A level as integer.
|
:level: A level as integer.
|
||||||
|
|
||||||
|
``--focus-on-open``, ``--no-focus-on-open``
|
||||||
|
(macOS only)
|
||||||
|
Focus the video window on creation and makes it the front most window. This
|
||||||
|
is on by default.
|
||||||
|
|
||||||
``--border``, ``--no-border``
|
``--border``, ``--no-border``
|
||||||
Play video with window border and decorations. Since this is on by
|
Play video with window border and decorations. Since this is on by
|
||||||
default, use ``--no-border`` to disable the standard window decorations.
|
default, use ``--no-border`` to disable the standard window decorations.
|
||||||
|
|
|
@ -121,6 +121,7 @@ static const m_option_t mp_vo_opt_list[] = {
|
||||||
{"window-scale", OPT_DOUBLE(window_scale), M_RANGE(0.001, 100)},
|
{"window-scale", OPT_DOUBLE(window_scale), M_RANGE(0.001, 100)},
|
||||||
{"window-minimized", OPT_FLAG(window_minimized)},
|
{"window-minimized", OPT_FLAG(window_minimized)},
|
||||||
{"window-maximized", OPT_FLAG(window_maximized)},
|
{"window-maximized", OPT_FLAG(window_maximized)},
|
||||||
|
{"focus-on-open", OPT_BOOL(focus_on_open)},
|
||||||
{"force-window-position", OPT_FLAG(force_window_position)},
|
{"force-window-position", OPT_FLAG(force_window_position)},
|
||||||
{"x11-name", OPT_STRING(winname)},
|
{"x11-name", OPT_STRING(winname)},
|
||||||
{"wayland-app-id", OPT_STRING(appid)},
|
{"wayland-app-id", OPT_STRING(appid)},
|
||||||
|
@ -199,6 +200,7 @@ const struct m_sub_options vo_sub_opts = {
|
||||||
.ontop_level = -1,
|
.ontop_level = -1,
|
||||||
.timing_offset = 0.050,
|
.timing_offset = 0.050,
|
||||||
.swapchain_depth = 3,
|
.swapchain_depth = 3,
|
||||||
|
.focus_on_open = true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ typedef struct mp_vo_opts {
|
||||||
int all_workspaces;
|
int all_workspaces;
|
||||||
int window_minimized;
|
int window_minimized;
|
||||||
int window_maximized;
|
int window_maximized;
|
||||||
|
bool focus_on_open;
|
||||||
|
|
||||||
int screen_id;
|
int screen_id;
|
||||||
int fsscreen_id;
|
int fsscreen_id;
|
||||||
|
|
|
@ -73,8 +73,9 @@ class CocoaCB: Common {
|
||||||
}
|
}
|
||||||
|
|
||||||
func initBackend(_ vo: UnsafeMutablePointer<vo>) {
|
func initBackend(_ vo: UnsafeMutablePointer<vo>) {
|
||||||
|
let previousActiveApp = getActiveApp()
|
||||||
initApp()
|
initApp()
|
||||||
initWindow(vo)
|
initWindow(vo, previousActiveApp)
|
||||||
updateICCProfile()
|
updateICCProfile()
|
||||||
initWindowState()
|
initWindowState()
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ class Common: NSObject {
|
||||||
setAppIcon()
|
setAppIcon()
|
||||||
}
|
}
|
||||||
|
|
||||||
func initWindow(_ vo: UnsafeMutablePointer<vo>) {
|
func initWindow(_ vo: UnsafeMutablePointer<vo>, _ previousActiveApp: NSRunningApplication?) {
|
||||||
let (mpv, targetScreen, wr) = getInitProperties(vo)
|
let (mpv, targetScreen, wr) = getInitProperties(vo)
|
||||||
|
|
||||||
guard let view = self.view else {
|
guard let view = self.view else {
|
||||||
|
@ -115,7 +115,12 @@ class Common: NSObject {
|
||||||
window.orderFront(nil)
|
window.orderFront(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
NSApp.activate(ignoringOtherApps: true)
|
NSApp.activate(ignoringOtherApps: mpv.opts.focus_on_open)
|
||||||
|
|
||||||
|
// workaround for macOS 10.15 to refocus the previous App
|
||||||
|
if (!mpv.opts.focus_on_open) {
|
||||||
|
previousActiveApp?.activate(options: .activateAllWindows)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func initView(_ vo: UnsafeMutablePointer<vo>, _ layer: CALayer) {
|
func initView(_ vo: UnsafeMutablePointer<vo>, _ layer: CALayer) {
|
||||||
|
@ -419,6 +424,11 @@ class Common: NSObject {
|
||||||
return (mpv, targetScreen, wr)
|
return (mpv, targetScreen, wr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// call before initApp, because on macOS +10.15 it changes the active App
|
||||||
|
func getActiveApp() -> NSRunningApplication? {
|
||||||
|
return NSWorkspace.shared.runningApplications.first(where: {$0.isActive})
|
||||||
|
}
|
||||||
|
|
||||||
func flagEvents(_ ev: Int) {
|
func flagEvents(_ ev: Int) {
|
||||||
eventsLock.lock()
|
eventsLock.lock()
|
||||||
events |= ev
|
events |= ev
|
||||||
|
|
Loading…
Reference in New Issue