Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Always activate add torrent dialogs when they are requested over ipc #445

Merged
merged 1 commit into from
Jan 7, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 26 additions & 16 deletions src/ui/screens/mainwindow/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -819,27 +819,25 @@ namespace tremotesf {
}
}

void addTorrentFiles(const QStringList& files, std::optional<QByteArray>& activateFirstDialogWithToken) {
void addTorrentFiles(
const QStringList& files, bool activateWindows = false, std::optional<QByteArray> windowActivationToken = {}
) {
auto* const settings = Settings::instance();
if (settings->showAddTorrentDialog()) {
const bool setParent = settings->showMainWindowWhenAddingTorrent();
for (const QString& filePath : files) {
auto* const dialog = showAddTorrentFileDialog(filePath, setParent);
if (activateFirstDialogWithToken.has_value()) {
activateWindow(dialog, *activateFirstDialogWithToken);
activateFirstDialogWithToken.reset();
if (activateWindows) {
activateWindow(dialog, windowActivationToken);
// Can use token only once
windowActivationToken.reset();
}
}
} else {
mViewModel.addTorrentFilesWithoutDialog(files);
}
}

void addTorrentFiles(const QStringList& files) {
std::optional<QByteArray> windowActivationToken{};
addTorrentFiles(files, windowActivationToken);
}

QDialog* showAddTorrentFileDialog(const QString& filePath, bool setParent) {
auto* const dialog = new AddTorrentDialog(
mViewModel.rpc(),
Expand All @@ -852,15 +850,18 @@ namespace tremotesf {
return dialog;
}

void addTorrentLinks(const QStringList& urls, std::optional<QByteArray>& activateFirstDialogWithToken) {
void addTorrentLinks(
const QStringList& urls, bool activateWindows = false, std::optional<QByteArray> windowActivationToken = {}
) {
auto* const settings = Settings::instance();
if (settings->showAddTorrentDialog()) {
const bool setParent = settings->showMainWindowWhenAddingTorrent();
for (const QString& url : urls) {
auto* const dialog = showAddTorrentLinkDialog(url, setParent);
if (activateFirstDialogWithToken.has_value()) {
activateWindow(dialog, *activateFirstDialogWithToken);
activateFirstDialogWithToken.reset();
if (activateWindows) {
activateWindow(dialog, windowActivationToken);
// Can use token only once
windowActivationToken.reset();
}
}
} else {
Expand Down Expand Up @@ -1568,7 +1569,11 @@ namespace tremotesf {
&mViewModel,
&MainWindowViewModel::showAddTorrentDialogs,
this,
[messageWidget, this](const auto& files, const auto& urls, auto windowActivationToken) {
[messageWidget, this](
const QStringList& files,
const QStringList& urls,
std::optional<QByteArray> windowActivationToken
) {
if (messageWidget->isVisible()) {
messageWidget->animatedHide();
}
Expand All @@ -1577,8 +1582,13 @@ namespace tremotesf {
showWindowsAndActivateMainOrDialog(windowActivationToken);
windowActivationToken.reset();
}
addTorrentFiles(files, windowActivationToken);
addTorrentLinks(urls, windowActivationToken);
if (!files.isEmpty()) {
addTorrentFiles(files, true, windowActivationToken);
windowActivationToken.reset();
}
if (!urls.isEmpty()) {
addTorrentLinks(urls, true, windowActivationToken);
}
}
);

Expand Down
Loading