diff --git a/CHANGELOG.md b/CHANGELOG.md index 6392f9f9..a4786d24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - DropAdminRights can now be configured per process [#2293](https://github.com/sandboxie-plus/Sandboxie/issues/2293) - added self removing boxes [#1936](https://github.com/sandboxie-plus/Sandboxie/issues/1936) - added Ctrl+F search filter to the box picker dialog, this allows quickly to find a particular box +- added menu options to edit the templates.ini and the sansboxie-plus.ini ### Changed diff --git a/SandboxiePlus/MiscHelpers/Common/Settings.h b/SandboxiePlus/MiscHelpers/Common/Settings.h index f4385f12..c7b32d5e 100644 --- a/SandboxiePlus/MiscHelpers/Common/Settings.h +++ b/SandboxiePlus/MiscHelpers/Common/Settings.h @@ -140,7 +140,7 @@ public: const bool IsWritable() {QMutexLocker Locker(&m_Mutex); return m_pConf->isWritable();} - const void Sync() {QMutexLocker Locker(&m_Mutex); m_pConf->sync();} + const void Sync() {QMutexLocker Locker(&m_Mutex); m_ValueCache.clear(); m_pConf->sync();} protected: QMutex m_Mutex; diff --git a/SandboxiePlus/SandMan/Resources/Actions/Editor2.png b/SandboxiePlus/SandMan/Resources/Actions/Editor2.png new file mode 100644 index 00000000..358f4b99 Binary files /dev/null and b/SandboxiePlus/SandMan/Resources/Actions/Editor2.png differ diff --git a/SandboxiePlus/SandMan/Resources/Actions/Editor3.png b/SandboxiePlus/SandMan/Resources/Actions/Editor3.png new file mode 100644 index 00000000..85376494 Binary files /dev/null and b/SandboxiePlus/SandMan/Resources/Actions/Editor3.png differ diff --git a/SandboxiePlus/SandMan/Resources/Actions/Editor4.png b/SandboxiePlus/SandMan/Resources/Actions/Editor4.png new file mode 100644 index 00000000..f4949d69 Binary files /dev/null and b/SandboxiePlus/SandMan/Resources/Actions/Editor4.png differ diff --git a/SandboxiePlus/SandMan/Resources/Actions/Expand.png b/SandboxiePlus/SandMan/Resources/Actions/Expand.png new file mode 100644 index 00000000..178374bd Binary files /dev/null and b/SandboxiePlus/SandMan/Resources/Actions/Expand.png differ diff --git a/SandboxiePlus/SandMan/Resources/Actions/Files.png b/SandboxiePlus/SandMan/Resources/Actions/Files.png new file mode 100644 index 00000000..95d44afb Binary files /dev/null and b/SandboxiePlus/SandMan/Resources/Actions/Files.png differ diff --git a/SandboxiePlus/SandMan/Resources/Actions/Folder.png b/SandboxiePlus/SandMan/Resources/Actions/Folder.png index 4b27381d..a5f21153 100644 Binary files a/SandboxiePlus/SandMan/Resources/Actions/Folder.png and b/SandboxiePlus/SandMan/Resources/Actions/Folder.png differ diff --git a/SandboxiePlus/SandMan/Resources/Actions/Folders.png b/SandboxiePlus/SandMan/Resources/Actions/Folders.png new file mode 100644 index 00000000..d3f47a52 Binary files /dev/null and b/SandboxiePlus/SandMan/Resources/Actions/Folders.png differ diff --git a/SandboxiePlus/SandMan/Resources/Actions/SystemShield.png b/SandboxiePlus/SandMan/Resources/Actions/SystemShield.png index d92657c5..d7f45cb5 100644 Binary files a/SandboxiePlus/SandMan/Resources/Actions/SystemShield.png and b/SandboxiePlus/SandMan/Resources/Actions/SystemShield.png differ diff --git a/SandboxiePlus/SandMan/Resources/SandMan.qrc b/SandboxiePlus/SandMan/Resources/SandMan.qrc index 33b51aef..bad28d3c 100644 --- a/SandboxiePlus/SandMan/Resources/SandMan.qrc +++ b/SandboxiePlus/SandMan/Resources/SandMan.qrc @@ -139,6 +139,11 @@ Actions/USB.png Actions/SystemShield.png Actions/AdminShield.png + Actions/Files.png + Actions/Editor4.png + Actions/Editor3.png + Actions/Editor2.png + Actions/Folders.png Boxes/sandbox-b-empty.png diff --git a/SandboxiePlus/SandMan/SandMan.cpp b/SandboxiePlus/SandMan/SandMan.cpp index d156e64f..3d88cbaf 100644 --- a/SandboxiePlus/SandMan/SandMan.cpp +++ b/SandboxiePlus/SandMan/SandMan.cpp @@ -439,16 +439,16 @@ void CSandMan::CreateHelpMenu(bool bAdvanced) { m_pMenuHelp = m_pMenuBar->addMenu(tr("&Help")); //m_pMenuHelp->addAction(tr("Support Sandboxie-Plus on Patreon"), this, SLOT(OnHelp())); - m_pSupport = m_pMenuHelp->addAction(tr("Support Sandboxie-Plus with Donations"), this, SLOT(OnHelp())); + //m_pSupport = m_pMenuHelp->addAction(tr("Support Sandboxie-Plus with Donations"), this, SLOT(OnHelp())); //if (!bAdvanced) { // m_pMenuHelp->removeAction(m_pSupport); // m_pMenuBar->addAction(m_pSupport); //} - m_pContribution = m_pMenuHelp->addAction(tr("Contribute to Sandboxie-Plus"), this, SLOT(OnHelp())); + m_pContribution = m_pMenuHelp->addAction(CSandMan::GetIcon("Support"), tr("Contribute to Sandboxie-Plus"), this, SLOT(OnHelp())); m_pManual = m_pMenuHelp->addAction(tr("Online Documentation"), this, SLOT(OnHelp())); m_pForum = m_pMenuHelp->addAction(tr("Visit Support Forum"), this, SLOT(OnHelp())); m_pMenuHelp->addSeparator(); - m_pUpdate = m_pMenuHelp->addAction(tr("Check for Updates"), this, SLOT(CheckForUpdates())); + m_pUpdate = m_pMenuHelp->addAction(CSandMan::GetIcon("Update"), tr("Check for Updates"), this, SLOT(CheckForUpdates())); m_pMenuHelp->addSeparator(); m_pAboutQt = m_pMenuHelp->addAction(tr("About the Qt Framework"), this, SLOT(OnAbout())); m_pAbout = m_pMenuHelp->addAction(CSandMan::GetIcon("IconFull", 2), tr("About Sandboxie-Plus"), this, SLOT(OnAbout())); @@ -526,7 +526,7 @@ void CSandMan::CreateMenus(bool bAdvanced) } m_pMenuView->addSeparator(); - m_pMenuBrowse = m_pMenuView->addAction(CSandMan::GetIcon("Folder"), tr("Show File Panel"), this, SLOT(OnProcView())); + m_pMenuBrowse = m_pMenuView->addAction(CSandMan::GetIcon("Explore"), tr("Show File Panel"), this, SLOT(OnProcView())); m_pMenuBrowse->setCheckable(true); m_pMenuBrowse->setShortcut(QKeySequence("Ctrl+D")); m_pMenuBrowse->setShortcutContext(Qt::WidgetWithChildrenShortcut); @@ -575,8 +575,13 @@ void CSandMan::CreateMenus(bool bAdvanced) m_pMenuResetGUI->setShortcutContext(Qt::WidgetWithChildrenShortcut); this->addAction(m_pMenuResetGUI); m_pMenuOptions->addSeparator(); - m_pEditIni = m_pMenuOptions->addAction(CSandMan::GetIcon("Editor"), tr("Edit ini file"), this, SLOT(OnEditIni())); - m_pReloadIni = m_pMenuOptions->addAction(CSandMan::GetIcon("ReloadIni"), tr("Reload ini file"), this, SLOT(OnReloadIni())); + m_pEditIni = m_pMenuOptions->addAction(CSandMan::GetIcon("Editor"), tr("Edit Sandboxie.ini"), this, SLOT(OnEditIni())); + m_pEditIni->setProperty("ini", "sbie"); + m_pEditIni2 = m_pMenuOptions->addAction(CSandMan::GetIcon("Editor2"), tr("Edit Templates.ini"), this, SLOT(OnEditIni())); + m_pEditIni2->setProperty("ini", "tmpl"); + m_pEditIni3 = m_pMenuOptions->addAction(CSandMan::GetIcon("Editor4"), tr("Edit Sandboxie-Plus.ini"), this, SLOT(OnEditIni())); + m_pEditIni3->setProperty("ini", "plus"); + m_pReloadIni = m_pMenuOptions->addAction(CSandMan::GetIcon("ReloadIni"), tr("Reload configuration"), this, SLOT(OnReloadIni())); CreateHelpMenu(bAdvanced); @@ -696,8 +701,13 @@ void CSandMan::CreateOldMenus() m_pMenuOptions->addSeparator(); QAction* m_pConfigLock = m_pMenuOptions->addAction(CSandMan::GetIcon("Lock"), tr("Lock Configuration"), this, SLOT(OnSettingsAction())); m_pConfigLock->setData(CSettingsWindow::eConfigLock); - m_pEditIni = m_pMenuOptions->addAction(CSandMan::GetIcon("Editor"), tr("Edit ini file"), this, SLOT(OnEditIni())); - m_pReloadIni = m_pMenuOptions->addAction(CSandMan::GetIcon("ReloadIni"), tr("Reload ini file"), this, SLOT(OnReloadIni())); + m_pEditIni = m_pMenuOptions->addAction(CSandMan::GetIcon("Editor"), tr("Edit Sandboxie.ini"), this, SLOT(OnEditIni())); + m_pEditIni->setProperty("ini", "sbie"); + m_pEditIni2 = m_pMenuOptions->addAction(CSandMan::GetIcon("Editor2"), tr("Edit Templates.ini"), this, SLOT(OnEditIni())); + m_pEditIni2->setProperty("ini", "tmpl"); + m_pEditIni3 = m_pMenuOptions->addAction(CSandMan::GetIcon("Editor4"), tr("Edit Sandboxie-Plus.ini"), this, SLOT(OnEditIni())); + m_pEditIni3->setProperty("ini", "plus"); + m_pReloadIni = m_pMenuOptions->addAction(CSandMan::GetIcon("ReloadIni"), tr("Reload configuration"), this, SLOT(OnReloadIni())); CreateHelpMenu(false); @@ -745,7 +755,20 @@ void CSandMan::CreateToolBar() m_pToolBar->addSeparator(); m_pToolBar->addAction(m_pMenuBrowse); m_pToolBar->addSeparator(); + + /*m_pEditButton = new QToolButton(); + m_pEditButton->setIcon(m_pEditIni->icon()); + m_pEditButton->setText(m_pEditIni->text()); + m_pEditButton->setPopupMode(QToolButton::MenuButtonPopup); + QMenu* pEditBtnMenu = new QMenu(m_pEditButton); + pEditBtnMenu->addAction(m_pEditIni2->icon(), m_pEditIni2->text(), this, SLOT(OnEditIni2())); + pEditBtnMenu->addAction(m_pEditIni3->icon(), m_pEditIni3->text(), this, SLOT(OnEditIni3())); + m_pEditButton->setMenu(pEditBtnMenu); + //QObject::connect(m_pEditButton, SIGNAL(triggered(QAction*)), , SLOT()); + QObject::connect(m_pEditButton, SIGNAL(clicked(bool)), this, SLOT(OnEditIni())); + m_pToolBar->addWidget(m_pEditButton);*/ m_pToolBar->addAction(m_pEditIni); + m_pToolBar->addSeparator(); m_pToolBar->addAction(m_pEnableMonitoring); //m_pToolBar->addSeparator(); @@ -1872,7 +1895,7 @@ void CSandMan::UpdateState() { bool isConnected = theAPI->IsConnected(); - m_pSupport->setVisible(g_Certificate.isEmpty()); + //m_pSupport->setVisible(g_Certificate.isEmpty()); m_pTrayIcon->setIcon(GetTrayIcon(isConnected)); m_pTrayIcon->setToolTip(GetTrayText(isConnected)); @@ -1893,6 +1916,7 @@ void CSandMan::UpdateState() //m_pKeepTerminated->setEnabled(isConnected); m_pEditIni->setEnabled(isConnected); + m_pEditIni2->setEnabled(isConnected); m_pReloadIni->setEnabled(isConnected); if(m_pEnableMonitoring) m_pEnableMonitoring->setEnabled(isConnected); } @@ -2670,6 +2694,7 @@ void CSandMan::OnResetMsgs() theConf->SetValue("Options/CheckForUpdates", 2); theConf->SetValue("Options/NoEditInfo", true); + theConf->SetValue("Options/NoEditWarn", true); theConf->SetValue("Options/BoxedExplorerInfo", true); theConf->SetValue("Options/ExplorerInfo", true); @@ -2721,27 +2746,53 @@ void CSandMan::OnResetGUI() void CSandMan::OnEditIni() { - if (theConf->GetBool("Options/NoEditInfo", true)) - { - bool State = false; - CCheckableMessageBox::question(this, "Sandboxie-Plus", - theConf->GetBool("Options/WatchIni", true) - ? tr("The changes will be applied automatically whenever the file gets saved.") - : tr("The changes will be applied automatically as soon as the editor is closed.") - , tr("Don't show this message again."), &State, QDialogButtonBox::Ok, QDialogButtonBox::Ok, QMessageBox::Information); - - if (State) - theConf->SetValue("Options/NoEditInfo", false); - } + QString ini = ((QAction*)sender())->property("ini").toString(); std::wstring Editor = theConf->GetString("Options/Editor", "notepad.exe").toStdWString(); - std::wstring IniPath = theAPI->GetIniPath().toStdWString(); + std::wstring IniPath; + + bool bPlus; + if (bPlus = (ini == "plus")) + { + IniPath = QString(theConf->GetConfigDir() + "/Sandboxie-Plus.ini").replace("/", "\\").toStdWString(); + } + else if (ini == "tmpl") + { + IniPath = (theAPI->GetSbiePath() + "\\Templates.ini").toStdWString(); + + if (theConf->GetBool("Options/NoEditWarn", true)) { + bool State = false; + CCheckableMessageBox::question(this, "Sandboxie-Plus", + tr("You are about to edit the Templates.ini, thsi is generally not recommeded.\n" + "This file is part of Sandboxie and all changed done to it will be reverted next time Sandboxie is updated.") + , tr("Don't show this message again."), &State, QDialogButtonBox::Ok, QDialogButtonBox::Ok, QMessageBox::Warning); + + if (State) + theConf->SetValue("Options/NoEditWarn", false); + } + } + else //if (ini == "sbie") + { + IniPath = theAPI->GetIniPath().toStdWString(); + + if (theConf->GetBool("Options/NoEditInfo", true)) { + bool State = false; + CCheckableMessageBox::question(this, "Sandboxie-Plus", + theConf->GetBool("Options/WatchIni", true) + ? tr("The changes will be applied automatically whenever the file gets saved.") + : tr("The changes will be applied automatically as soon as the editor is closed.") + , tr("Don't show this message again."), &State, QDialogButtonBox::Ok, QDialogButtonBox::Ok, QMessageBox::Information); + + if (State) + theConf->SetValue("Options/NoEditInfo", false); + } + } SHELLEXECUTEINFO si = { 0 }; si.cbSize = sizeof(SHELLEXECUTEINFO); si.fMask = SEE_MASK_NOCLOSEPROCESS; si.hwnd = NULL; - si.lpVerb = L"runas"; + si.lpVerb = bPlus ? NULL : L"runas"; // plus ini does nto require admin privileges si.lpFile = Editor.c_str(); si.lpParameters = IniPath.c_str(); si.lpDirectory = NULL; @@ -2751,15 +2802,18 @@ void CSandMan::OnEditIni() //WaitForSingleObject(si.hProcess, INFINITE); //CloseHandle(si.hProcess); - if (theConf->GetBool("Options/WatchIni", true)) + if (!bPlus && theConf->GetBool("Options/WatchIni", true)) return; // if the ini is watched don't double reload QWinEventNotifier* processFinishedNotifier = new QWinEventNotifier(si.hProcess); processFinishedNotifier->setEnabled(true); - connect(processFinishedNotifier, &QWinEventNotifier::activated, this, [processFinishedNotifier, this, si]() { + connect(processFinishedNotifier, &QWinEventNotifier::activated, this, [processFinishedNotifier, this, si, bPlus]() { processFinishedNotifier->setEnabled(false); processFinishedNotifier->deleteLater(); - this->OnReloadIni(); + if (bPlus) + theConf->Sync(); + else + this->OnReloadIni(); CloseHandle(si.hProcess); }); } @@ -3149,9 +3203,10 @@ void CSandMan::LoadLanguage(const QString& Lang, const QString& Module, int Inde void CSandMan::OnHelp() { - if (sender() == m_pSupport) - QDesktopServices::openUrl(QUrl("https://sandboxie-plus.com/go.php?to=donate")); - else if (sender() == m_pContribution) + //if (sender() == m_pSupport) + // QDesktopServices::openUrl(QUrl("https://sandboxie-plus.com/go.php?to=donate")); + //else + if (sender() == m_pContribution) QDesktopServices::openUrl(QUrl("https://sandboxie-plus.com/go.php?to=sbie-contribute")); else if (sender() == m_pManual) QDesktopServices::openUrl(QUrl("https://sandboxie-plus.com/go.php?to=sbie-docs")); diff --git a/SandboxiePlus/SandMan/SandMan.h b/SandboxiePlus/SandMan/SandMan.h index 18fc90fc..b7879c7f 100644 --- a/SandboxiePlus/SandMan/SandMan.h +++ b/SandboxiePlus/SandMan/SandMan.h @@ -326,6 +326,7 @@ private: QAction* m_pCleanUpTrace; QAction* m_pCleanUpRecovery; QToolButton* m_pCleanUpButton; + //QToolButton* m_pEditButton; QAction* m_pKeepTerminated; QAction* m_pShowAllSessions; QAction* m_pArrangeGroups; @@ -335,6 +336,8 @@ private: QAction* m_pMenuResetMsgs; QAction* m_pMenuResetGUI; QAction* m_pEditIni; + QAction* m_pEditIni2; + QAction* m_pEditIni3; QAction* m_pReloadIni; QAction* m_pEnableMonitoring; @@ -342,7 +345,7 @@ private: QLabel* m_pLabel; QMenu* m_pMenuHelp; - QAction* m_pSupport; + //QAction* m_pSupport; QAction* m_pContribution; QAction* m_pForum; QAction* m_pManual; diff --git a/SandboxiePlus/SandMan/Windows/OptionsWindow.cpp b/SandboxiePlus/SandMan/Windows/OptionsWindow.cpp index ed10c1fe..78cab075 100644 --- a/SandboxiePlus/SandMan/Windows/OptionsWindow.cpp +++ b/SandboxiePlus/SandMan/Windows/OptionsWindow.cpp @@ -272,9 +272,25 @@ COptionsWindow::COptionsWindow(const QSharedPointer& pBox, const QStri delete ui.tabsRecovery; ui.gridLayout_24->setContentsMargins(0, 0, 0, 0); + QWidget* pWidget = new QWidget(); + QGridLayout* pLayout = new QGridLayout(pWidget); + // move recovery to general - ui.tabsGeneral->insertTab(2, ui.tabs->widget(6), ui.tabs->tabText(6)); - ui.tabsGeneral->setTabIcon(2, CSandMan::GetIcon("Recover")); + //ui.tabsGeneral->insertTab(2, ui.tabs->widget(6), ui.tabs->tabText(6)); + //ui.tabsGeneral->setTabIcon(2, CSandMan::GetIcon("Recover")); + + // collect file options on a new fils tab + QTabWidget* pTabWidget = new QTabWidget(); + pLayout->addWidget(pTabWidget, 0, 0); + ui.tabs->insertTab(1, pWidget, tr("File Options")); + ui.tabs->setTabIcon(1, CSandMan::GetIcon("Folder")); + + pTabWidget->addTab(ui.tabsGeneral->widget(1), ui.tabsGeneral->tabText(1)); + pTabWidget->setTabIcon(0, CSandMan::GetIcon("Files")); + pTabWidget->addTab(ui.tabsGeneral->widget(1), ui.tabsGeneral->tabText(1)); + pTabWidget->setTabIcon(1, CSandMan::GetIcon("Move")); + pTabWidget->addTab(ui.tabs->widget(7), ui.tabs->tabText(7)); + pTabWidget->setTabIcon(2, CSandMan::GetIcon("Recover")); // move grouping to program tab ui.tabsForce->insertTab(0, ui.tabGroups, tr("Grouping"));