diff --git a/.github/workflows/Windows-pack.yml b/.github/workflows/Windows-pack.yml index d6eba157e0..97adaf44d8 100644 --- a/.github/workflows/Windows-pack.yml +++ b/.github/workflows/Windows-pack.yml @@ -26,7 +26,7 @@ env: jobs: windows-pack: name: VS 2022 ${{ matrix.config.arch }}-${{ matrix.type }} - runs-on: windows-2025 + runs-on: windows-2022 env: VCINSTALLDIR: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC # 2025.02.14 diff --git a/data/appdata/org.flameshot.Flameshot.metainfo.xml b/data/appdata/org.flameshot.Flameshot.metainfo.xml index 31d439ec3e..6b52bcadb5 100644 --- a/data/appdata/org.flameshot.Flameshot.metainfo.xml +++ b/data/appdata/org.flameshot.Flameshot.metainfo.xml @@ -91,9 +91,7 @@ SPDX-License-Identifier: CC0-1.0 - - - + diff --git a/packaging/debian/changelog b/packaging/debian/changelog index df5c1bcfe2..d781313a86 100644 --- a/packaging/debian/changelog +++ b/packaging/debian/changelog @@ -1,3 +1,10 @@ +flameshot (14.0.rc3-1) unstable; urgency=medium + + * Release for v14.0.0 + + -- Jeremy Borgman Mon, 08 Jun 2026 18:58:50 -0500 + + flameshot (14.0.rc3-1) unstable; urgency=medium * Release for v14.0.rc3 diff --git a/packaging/flatpak/org.flameshot.Flameshot.yml b/packaging/flatpak/org.flameshot.Flameshot.yml index 42823374d5..a3c77d04eb 100644 --- a/packaging/flatpak/org.flameshot.Flameshot.yml +++ b/packaging/flatpak/org.flameshot.Flameshot.yml @@ -45,4 +45,4 @@ modules: cleanup: - /share/bash-completion - /share/man - - /share/zsh \ No newline at end of file + - /share/zsh diff --git a/packaging/rpm/flameshot.spec b/packaging/rpm/flameshot.spec index 9d0394b061..191997d626 100644 --- a/packaging/rpm/flameshot.spec +++ b/packaging/rpm/flameshot.spec @@ -1,5 +1,5 @@ Name: flameshot -Version: 14.0.rc3 +Version: 14.0.0 Release: 1%{?dist} Summary: Powerful yet simple to use screenshot software diff --git a/snapcraft.yaml b/snapcraft.yaml index edcc0160ae..eea0d46a3f 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -1,5 +1,5 @@ name: flameshot -version: '14.0.rc3' +version: '14.0.0' base: core24 summary: Powerful yet simple to use screenshot software description: | diff --git a/src/tools/launcher/applauncherwidget.cpp b/src/tools/launcher/applauncherwidget.cpp index 1c69e681d7..e0b6e92cc1 100644 --- a/src/tools/launcher/applauncherwidget.cpp +++ b/src/tools/launcher/applauncherwidget.cpp @@ -22,6 +22,7 @@ #include #include #include +#include namespace { #if defined(Q_OS_WIN) @@ -108,10 +109,21 @@ AppLauncherWidget::AppLauncherWidget(const QPixmap& p, QWidget* parent) void AppLauncherWidget::launch(const QModelIndex& index) { - if (!QFileInfo(m_tempFile).isReadable()) { - m_tempFile = - FileNameHandler().properScreenshotPath(QDir::tempPath(), "png"); - bool ok = m_pixmap.save(m_tempFile); + if (!m_tempFile || !QFileInfo(m_tempFile->fileName()).isReadable()) { + delete m_tempFile; + // _XXXXXX is how Qt temporary files are mocked before substitution + m_tempFile = new QTemporaryFile(QDir::tempPath() + "/" + + FileNameHandler().parsedPattern() + + "_XXXXXX.png", + this); + m_tempFile->setAutoRemove(false); + if (!m_tempFile->open()) { + QMessageBox::about( + this, tr("Error"), tr("Unable to write in") + QDir::tempPath()); + return; + } + m_tempFile->close(); + bool ok = m_pixmap.save(m_tempFile->fileName()); if (!ok) { QMessageBox::about( this, tr("Error"), tr("Unable to write in") + QDir::tempPath()); @@ -121,6 +133,7 @@ void AppLauncherWidget::launch(const QModelIndex& index) // Heuristically, if there is a % in the command we assume it is the file // name slot QString command = index.data(Qt::UserRole).toString(); + const QString tempFilePath = m_tempFile->fileName(); #if defined(Q_OS_WIN) // Do not split on Windows, since file path can contain spaces // and % is not used in lnk files @@ -135,11 +148,11 @@ void AppLauncherWidget::launch(const QModelIndex& index) // but that means we need to substitute IN the array not the string! for (auto& i : prog_args) { if (i.contains("%")) - i.replace(regexp, m_tempFile); + i.replace(regexp, tempFilePath); } } else { // we really should append the file name if there - prog_args.append(m_tempFile); // were no replacements + prog_args.append(tempFilePath); // were no replacements } QString app_name = prog_args.at(0); bool inTerminal = @@ -151,7 +164,7 @@ void AppLauncherWidget::launch(const QModelIndex& index) this, tr("Error"), tr("Unable to launch in terminal.")); } } else { - QFileInfo fi(m_tempFile); + QFileInfo fi(tempFilePath); QString workingDir = fi.absolutePath(); prog_args.removeAt(0); // strip program name out QProcess::startDetached(app_name, prog_args, workingDir); diff --git a/src/tools/launcher/applauncherwidget.h b/src/tools/launcher/applauncherwidget.h index 63ad177841..ef65a8f257 100644 --- a/src/tools/launcher/applauncherwidget.h +++ b/src/tools/launcher/applauncherwidget.h @@ -13,6 +13,7 @@ #endif #include +#include #include class QTabWidget; @@ -46,7 +47,7 @@ private slots: DesktopFileParser m_parser; #endif QPixmap m_pixmap; - QString m_tempFile; + QTemporaryFile* m_tempFile = nullptr; bool m_keepOpen; QMap> m_appsMap; QCheckBox* m_keepOpenCheckbox;