Merge pull request #9438 from shuffle2/add-shortcut-to-desktop
DolphinQT: Gives option to add desktop shortcut
This commit is contained in:
commit
6dc0f0dfe6
|
@ -53,6 +53,20 @@
|
||||||
|
|
||||||
#include "UICommon/GameFile.h"
|
#include "UICommon/GameFile.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <shlobj.h>
|
||||||
|
#include <wil/com.h>
|
||||||
|
|
||||||
|
// This file uses some identifiers which are defined as macros in Windows headers.
|
||||||
|
// Undefine them for the intellisense parser to solve some red squiggles.
|
||||||
|
#ifdef __INTELLISENSE__
|
||||||
|
#ifdef DeleteFile
|
||||||
|
#undef DeleteFile
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
GameList::GameList(QWidget* parent) : QStackedWidget(parent), m_model(this)
|
GameList::GameList(QWidget* parent) : QStackedWidget(parent), m_model(this)
|
||||||
{
|
{
|
||||||
m_list_proxy = new ListProxyModel(this);
|
m_list_proxy = new ListProxyModel(this);
|
||||||
|
@ -382,6 +396,15 @@ void GameList::ShowContextMenu(const QPoint&)
|
||||||
|
|
||||||
menu->addAction(tr("Open &Containing Folder"), this, &GameList::OpenContainingFolder);
|
menu->addAction(tr("Open &Containing Folder"), this, &GameList::OpenContainingFolder);
|
||||||
menu->addAction(tr("Delete File..."), this, &GameList::DeleteFile);
|
menu->addAction(tr("Delete File..."), this, &GameList::DeleteFile);
|
||||||
|
#ifdef _WIN32
|
||||||
|
menu->addAction(tr("Add Shortcut to Desktop"), this, [this] {
|
||||||
|
if (!AddShortcutToDesktop())
|
||||||
|
{
|
||||||
|
ModalMessageBox::critical(this, tr("Add Shortcut to Desktop"),
|
||||||
|
tr("There was an issue adding a shortcut to the desktop"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
#endif
|
||||||
|
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
|
|
||||||
|
@ -631,6 +654,41 @@ void GameList::OpenGCSaveFolder()
|
||||||
ModalMessageBox::information(this, tr("Information"), tr("No save data found."));
|
ModalMessageBox::information(this, tr("Information"), tr("No save data found."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
bool GameList::AddShortcutToDesktop()
|
||||||
|
{
|
||||||
|
auto init = wil::CoInitializeEx_failfast(COINIT_APARTMENTTHREADED);
|
||||||
|
auto shell_link = wil::CoCreateInstanceNoThrow<ShellLink, IShellLink>();
|
||||||
|
if (!shell_link)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
std::wstring dolphin_path = QCoreApplication::applicationFilePath().toStdWString();
|
||||||
|
if (FAILED(shell_link->SetPath(dolphin_path.c_str())))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
const auto game = GetSelectedGame();
|
||||||
|
const auto& file_path = game->GetFilePath();
|
||||||
|
std::wstring args = UTF8ToTStr("-e \"" + file_path + "\"");
|
||||||
|
if (FAILED(shell_link->SetArguments(args.c_str())))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
wil::unique_cotaskmem_string desktop;
|
||||||
|
if (FAILED(SHGetKnownFolderPath(FOLDERID_Desktop, KF_FLAG_NO_ALIAS, nullptr, &desktop)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
const auto& game_name = game->GetLongName();
|
||||||
|
std::wstring desktop_path = std::wstring(desktop.get()) + UTF8ToTStr("\\" + game_name + ".lnk");
|
||||||
|
auto persist_file = shell_link.try_query<IPersistFile>();
|
||||||
|
if (!persist_file)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (FAILED(persist_file->Save(desktop_path.c_str(), TRUE)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void GameList::DeleteFile()
|
void GameList::DeleteFile()
|
||||||
{
|
{
|
||||||
ModalMessageBox confirm_dialog(this);
|
ModalMessageBox confirm_dialog(this);
|
||||||
|
|
|
@ -65,6 +65,9 @@ private:
|
||||||
void OpenWiki();
|
void OpenWiki();
|
||||||
void SetDefaultISO();
|
void SetDefaultISO();
|
||||||
void DeleteFile();
|
void DeleteFile();
|
||||||
|
#ifdef _WIN32
|
||||||
|
bool AddShortcutToDesktop();
|
||||||
|
#endif
|
||||||
void InstallWAD();
|
void InstallWAD();
|
||||||
void UninstallWAD();
|
void UninstallWAD();
|
||||||
void ExportWiiSave();
|
void ExportWiiSave();
|
||||||
|
|
Loading…
Reference in New Issue