mirror of https://github.com/mpv-player/mpv
mac: add support for drag-and-drop option
This commit is contained in:
parent
8ceaec1742
commit
c661435648
|
@ -3172,7 +3172,6 @@ Window
|
|||
(Windows only) Snap the player window to screen edges.
|
||||
|
||||
``--drag-and-drop=<no|auto|replace|append>``
|
||||
(X11, Wayland and Windows only)
|
||||
Controls the default behavior of drag and drop on platforms that support this.
|
||||
``auto`` will obey what the underlying os/platform gives mpv. Typically, holding
|
||||
shift during the drag and drop will append the item to the playlist. Otherwise,
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "options/m_config.h"
|
||||
#include "player/core.h"
|
||||
#include "input/input.h"
|
||||
#include "input/event.h"
|
||||
#include "video/out/win_state.h"
|
||||
|
||||
#include "osdep/macosx_application_objc.h"
|
||||
|
|
|
@ -75,6 +75,20 @@ class MPVHelper {
|
|||
return m_config_cache_get_next_changed(optsCachePtr, &property)
|
||||
}
|
||||
|
||||
func open(files: [String]) {
|
||||
if opts.drag_and_drop == -2 { return }
|
||||
|
||||
var action = NSEvent.modifierFlags.contains(.shift) ? DND_APPEND : DND_REPLACE
|
||||
if opts.drag_and_drop >= 0 {
|
||||
action = mp_dnd_action(UInt32(opts.drag_and_drop))
|
||||
}
|
||||
|
||||
let filesClean = files.map{ $0.hasPrefix("file:///.file/id=") ? (URL(string: $0)?.path ?? $0) : $0 }
|
||||
var filesPtr = filesClean.map { UnsafeMutablePointer<CChar>(strdup($0)) }
|
||||
mp_event_drop_files(input, Int32(files.count), &filesPtr, action)
|
||||
for charPtr in filesPtr { free(UnsafeMutablePointer(mutating: charPtr)) }
|
||||
}
|
||||
|
||||
func setOption(fullscreen: Bool) {
|
||||
optsPtr.pointee.fullscreen = fullscreen
|
||||
_ = withUnsafeMutableBytes(of: &optsPtr.pointee.fullscreen) { (ptr: UnsafeMutableRawBufferPointer) in
|
||||
|
|
|
@ -81,7 +81,7 @@ class View: NSView {
|
|||
if types.contains(.fileURL) || types.contains(.URL) {
|
||||
if let urls = pb.readObjects(forClasses: [NSURL.self]) as? [URL] {
|
||||
let files = urls.map { $0.absoluteString }
|
||||
EventsResponder.sharedInstance().handleFilesArray(files)
|
||||
mpv?.open(files: files)
|
||||
return true
|
||||
}
|
||||
} else if types.contains(.string) {
|
||||
|
@ -97,7 +97,7 @@ class View: NSView {
|
|||
filesArray.append(path)
|
||||
}
|
||||
}
|
||||
EventsResponder.sharedInstance().handleFilesArray(filesArray)
|
||||
mpv?.open(files: filesArray)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
|
Loading…
Reference in New Issue