From bf09a70a09a0ff064d889938408c2babe67dc4f2 Mon Sep 17 00:00:00 2001 From: Tim Cooper Date: Mon, 20 Dec 2021 08:26:27 -0600 Subject: [PATCH] UI: resolve .url, .lnk shortcuts during drag-and-drop On applies to Windows. Suggested here: https://ideas.obsproject.com/posts/1636 --- UI/window-basic-main-dropfiles.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/UI/window-basic-main-dropfiles.cpp b/UI/window-basic-main-dropfiles.cpp index dd2823517..ddb339fa5 100644 --- a/UI/window-basic-main-dropfiles.cpp +++ b/UI/window-basic-main-dropfiles.cpp @@ -5,6 +5,9 @@ #include #include #include +#ifdef _WIN32 +#include +#endif #include #include "window-basic-main.hpp" @@ -58,6 +61,15 @@ static string GenerateSourceName(const char *base) } } +#ifdef _WIN32 +static QString ReadWindowsURLFile(const QString &file) +{ + QSettings iniFile(file, QSettings::IniFormat); + QVariant url = iniFile.value("InternetShortcut/URL"); + return url.toString(); +} +#endif + void OBSBasic::AddDropURL(const char *url, QString &name, obs_data_t *settings, const obs_video_info &ovi) { @@ -247,6 +259,23 @@ void OBSBasic::dropEvent(QDropEvent *event) continue; } +#ifdef _WIN32 + if (fileInfo.suffix().compare( + "url", Qt::CaseInsensitive) == 0) { + QString urlTarget = ReadWindowsURLFile(file); + if (!urlTarget.isEmpty()) { + ConfirmDropUrl(urlTarget); + } + continue; + } else if (fileInfo.isShortcut()) { + file = fileInfo.symLinkTarget(); + fileInfo = QFileInfo(file); + if (!fileInfo.exists()) { + continue; + } + } +#endif + QString suffixQStr = fileInfo.suffix(); QByteArray suffixArray = suffixQStr.toUtf8(); const char *suffix = suffixArray.constData();