This commit is contained in:
DavidXanatos 2023-08-03 20:17:52 +02:00
parent b3ca34adf4
commit 7fcdebca8b
4 changed files with 38 additions and 25 deletions

View File

@ -84,8 +84,8 @@ bool CBoxObject::MakeShortcut(const QString& Target, const QVariantMap& Options)
location = QStandardPaths::ApplicationsLocation;
else if (Location.compare("documents", Qt::CaseInsensitive) == 0)
location = QStandardPaths::DocumentsLocation;
QString Name = Options["name"].toString();
if (location != -1) {
QString Name = Options["name"].toString();
QString Path = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation).replace("/", "\\");
if (Target == "default_browser")
Path += "\\" + CSettingsWindow::tr("Sandboxed Web Browser") + ".lnk";
@ -96,7 +96,7 @@ bool CBoxObject::MakeShortcut(const QString& Target, const QVariantMap& Options)
QString StartExe = theAPI->GetSbiePath() + "\\SandMan.exe";
return CSbieUtils::CreateShortcut(StartExe, Path, "", getName(), Target);
}
return CSbieView::CreateShortcut(Target, getName(), Options["iconPath"].toString(), Options["iconIndex"].toInt(), Options["workDir"].toString());
return CSbieView::CreateShortcutEx(Target, getName(), Name, Options["iconPath"].toString(), Options["iconIndex"].toInt(), Options["workDir"].toString());
}
void CSBoxObject::ApplyChanges(bool bApply)

View File

@ -1470,7 +1470,7 @@ void CSbieView::OnSandBoxAction(QAction* Action, const QList<CSandBoxPtr>& SandB
if (!CSbieUtils::GetStartMenuShortcut(theAPI, BoxName, LinkPath, IconPath, IconIndex, WorkDir))
return;
CreateShortcut(LinkPath, BoxName, IconPath, IconIndex, WorkDir);
CreateShortcutEx(LinkPath, BoxName, "", IconPath, IconIndex, WorkDir);
}
else // custom run menu command
{
@ -1487,19 +1487,20 @@ void CSbieView::OnSandBoxAction(QAction* Action, const QList<CSandBoxPtr>& SandB
theGUI->CheckResults(Results, this);
}
bool CSbieView::CreateShortcut(const QString& LinkPath, const QString& BoxName, const QString &IconPath, int IconIndex, const QString &WorkDir)
bool CSbieView::CreateShortcutEx(const QString& LinkPath, const QString& BoxName, QString LinkName, const QString &IconPath, int IconIndex, const QString &WorkDir)
{
QString LinkName;
int pos = LinkPath.lastIndexOf(L'\\');
if (pos == -1)
return false;
if (pos == 2 && LinkPath.length() == 3)
LinkName = QObject::tr("Drive %1").arg(LinkPath.left(1));
else {
LinkName = LinkPath.mid(pos + 1);
pos = LinkName.indexOf(QRegularExpression("[" + QRegularExpression::escape("\":;,*?.") + "]"));
if (pos != -1)
LinkName = LinkName.left(pos);
if (LinkName.isEmpty()) {
int pos = LinkPath.lastIndexOf(L'\\');
if (pos == -1)
return false;
if (pos == 2 && LinkPath.length() == 3)
LinkName = QObject::tr("Drive %1").arg(LinkPath.left(1));
else {
LinkName = LinkPath.mid(pos + 1);
pos = LinkName.indexOf(QRegularExpression("[" + QRegularExpression::escape("\":;,*?.") + "]"));
if (pos != -1)
LinkName = LinkName.left(pos);
}
}
QString Path = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation).replace("/", "\\");
@ -1822,6 +1823,7 @@ void CSbieView::OnMenuContextMenu(const QPoint& point)
m_pCtxPinToRun->setData(FoundPin);
m_pCtxMkLink->setData(pBoxPlus->GetFullCommand(LinkTarget));
m_pCtxMkLink->setProperty("Name", pAction->text());
m_pCtxMkLink->setProperty("Icon", pBoxPlus->GetFullCommand(pAction->property("Icon").toString()));
m_pCtxMkLink->setProperty("IconIndex", pAction->property("IconIndex"));
m_pCtxMkLink->setProperty("WorkingDir", pBoxPlus->GetFullCommand(pAction->property("WorkingDir").toString()));
@ -1849,12 +1851,13 @@ void CSbieView::OnMenuContextAction()
else if (pAction == m_pCtxMkLink)
{
QString LinkTarget = m_pCtxMkLink->data().toString();
QString LinkName = m_pCtxMkLink->property("Name").toString();
QString Icon = m_pCtxMkLink->property("Icon").toString();
int IconIndex = m_pCtxMkLink->property("IconIndex").toInt();
QString WorkingDir = m_pCtxMkLink->property("WorkingDir").toString();
QString BoxName = pBoxPlus->GetName();
CreateShortcut(LinkTarget, BoxName, Icon, IconIndex, WorkingDir);
CreateShortcutEx(LinkTarget, BoxName, LinkName, Icon, IconIndex, WorkingDir);
}
}
@ -1904,16 +1907,26 @@ void CSbieView::UpdateRunMenu(const CSandBoxPtr& pBox)
} else
pMenu = GetMenuFolder(FolderName.first.replace("\\", "/"), m_pMenuRun, m_RunFolders);
StrPair IconIndex = Split2(Entry["Icon"].toString(), ",", true);
StrPair FileIndex = Split2(Entry["Icon"].toString(), ",", true);
QString IconFile;
int IconIndex = 0;
if (FileIndex.first.isEmpty())
IconFile = pBoxEx->GetCommandFile(Entry["Command"].toString());
else if (FileIndex.second.isEmpty()) {
IconFile = pBoxEx->GetCommandFile(Entry["Command"].toString());
IconIndex = FileIndex.first.toInt();
}
else {
IconFile = FileIndex.first.replace("%BoxRoot%", pBoxEx->GetFileRoot(), Qt::CaseInsensitive);
IconIndex = FileIndex.second.toInt();
}
QAction* pAction = pMenu->addAction(FolderName.second, this, SLOT(OnSandBoxAction()));
if (IconIndex.first.isEmpty())
pAction->setIcon(m_IconProvider.icon(QFileInfo(pBoxEx->GetCommandFile(Entry["Command"].toString()))));
else if(IconIndex.second.isEmpty())
pAction->setIcon(LoadWindowsIcon(pBoxEx->GetCommandFile(Entry["Command"].toString()), IconIndex.first.toInt()));
else
pAction->setIcon(LoadWindowsIcon(IconIndex.first.replace("%BoxRoot%", pBoxEx->GetFileRoot(), Qt::CaseInsensitive), IconIndex.second.toInt()));
pAction->setIcon(LoadWindowsIcon(IconFile, IconIndex));
pAction->setData(Entry["Command"].toString());
pAction->setProperty("Icon", IconFile);
pAction->setProperty("IconIndex", IconIndex);
pAction->setProperty("WorkingDir", Entry["WorkingDir"]);
}

View File

@ -65,7 +65,7 @@ public:
QMap<QString, QStringList> GetGroups() { return m_Groups; }
static bool CreateShortcut(const QString& LinkPath, const QString& BoxName, const QString& IconPath = QString(), int IconIndex = 0, const QString& WorkDir = QString());
static bool CreateShortcutEx(const QString& LinkPath, const QString& BoxName, QString LinkName = QString(), const QString& IconPath = QString(), int IconIndex = 0, const QString& WorkDir = QString());
signals:
void BoxSelected();

View File

@ -3,7 +3,7 @@
#define VERSION_MJR 1
#define VERSION_MIN 10
#define VERSION_REV 2
#define VERSION_UPD 4
#define VERSION_UPD 5
#ifndef STR
#define STR2(X) #X