13 Commits

Author SHA1 Message Date
b964fdc77f chore: update release info to 1.0.0 2025-05-01 22:07:42 +08:00
d6d2703c93 chore: ensure could get correct locale on macOS 2025-04-28 00:51:17 +08:00
c6068ba23d fix: qmake build FTBFS 2025-04-26 17:23:56 +08:00
fbdd858fbd chore: merge Qt translations into app translations as well 2025-04-26 17:02:24 +08:00
8333f17199 chore(CI): add portable mode to qmake build
Resolve https://github.com/BLumia/pineapple-pictures/issues/148

This change is sponsored by @EdgarHartel.
2025-04-11 12:54:29 +08:00
30eb06cba7 chore: make use of the showMessageAndExit api in Qt 6.9 2025-04-09 19:24:27 +08:00
0a45cd7c22 chore: add the ability to know if it's the first loaded user media
This could make it easier to allow set “Keep Transform” mode at
start-up.

This change is sponsored by @EdgarHartel.

Related: https://github.com/BLumia/pineapple-pictures/issues/146#issuecomment-2778192785
2025-04-08 23:19:02 +08:00
fc417b30e5 chore(CI): bump msvc build AOM and libavif version 2025-04-04 17:35:59 +08:00
8568f6d4ef i18n: Translations update from Hosted Weblate (#145)
* Translated using Weblate (Dutch)

Currently translated at 100.0% (163 of 163 strings)

Translation: pineapple-pictures/Application
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/nl/

* Translated using Weblate (Italian)

Currently translated at 100.0% (163 of 163 strings)

Translation: pineapple-pictures/Application
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/it/

---------

Co-authored-by: Heimen Stoffels <vistausss@fastmail.com>
Co-authored-by: albanobattistella <albano_battistella@hotmail.com>
2025-04-04 17:16:16 +08:00
8832c2daa9 chore(CI): bump Qt version to Qt 6.9.0 2025-04-02 19:39:20 +08:00
da9d7d6989 fix: add a small delay when file watcher triggers a reload
The file might still being write by other program, thus we add a
500ms delay to reload the image.
2025-03-31 01:28:03 +08:00
317d296507 chore(CI): AppVeyor FTBFS, bump GH Action Qt version 2025-03-30 00:16:40 +08:00
f24743e381 feat: reload image when current image gets updated
This feature is sponsored by @EdgarHartel.

Issue: https://github.com/BLumia/pineapple-pictures/issues/143
2025-03-29 13:41:55 +08:00
16 changed files with 169 additions and 50 deletions

View File

@ -12,7 +12,7 @@ jobs:
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: '6.8.1'
version: '6.9.0'
modules: 'qtimageformats'
- name: Install Conan and Dependencies
id: conan

View File

@ -8,7 +8,7 @@ jobs:
strategy:
matrix:
include:
- qt_ver: '6.8.2'
- qt_ver: '6.9.0'
vs: '2022'
aqt_arch: 'win64_msvc2022_64'
msvc_arch: 'x64'
@ -44,7 +44,7 @@ jobs:
strategy:
matrix:
include:
- qt_ver: '6.8.2'
- qt_ver: '6.9.0'
vs: '2022'
aqt_arch: 'win64_msvc2022_64'
msvc_arch: 'x64'
@ -71,44 +71,52 @@ jobs:
:: ------ dep ------
set CMAKE_PREFIX_PATH=%PWD%/dependencies_bin
mkdir dependencies_src
:: ===== exiv2 =====
echo ::group::===== exiv2 =====
curl -fsSL -o exiv2_bin.zip https://github.com/Exiv2/exiv2/releases/download/v0.28.3/exiv2-0.28.3-2019msvc64.zip
7z x exiv2_bin.zip -y
ren .\exiv2-0.28.3-2019msvc64 dependencies_bin
:: ===== zlib =====
echo ::endgroup::
echo ::group::===== zlib =====
curl -fsSL -o zlib_src.zip https://zlib.net/zlib131.zip
7z x zlib_src.zip -y -o"dependencies_src"
ren .\dependencies_src\zlib-1.3.1 zlib || goto :error
cmake ./dependencies_src/zlib -Bbuild_dependencies/zlib -DCMAKE_INSTALL_PREFIX="dependencies_bin" || goto :error
cmake --build build_dependencies/zlib --config Release --target=install || goto :error
curl -fsSL -o expat_src.zip https://github.com/libexpat/libexpat/archive/R_2_6_2.zip
:: ===== AOM for libavif AVI decoding support =====
git clone -q -b v3.10.0 --depth 1 https://aomedia.googlesource.com/aom dependencies_src/aom
echo ::endgroup::
echo ::group::===== AOM for libavif AVI decoding support =====
git clone -q -b v3.12.0 --depth 1 https://aomedia.googlesource.com/aom dependencies_src/aom
cmake ./dependencies_src/aom -Bbuild_dependencies/aom -DCMAKE_INSTALL_PREFIX="dependencies_bin" -DENABLE_DOCS=OFF -DBUILD_SHARED_LIBS=ON -DAOM_TARGET_CPU=generic -DENABLE_TESTS=OFF -DENABLE_TESTDATA=OFF -DENABLE_TOOLS=OFF -DENABLE_EXAMPLES=0 || goto :error
cmake --build build_dependencies/aom --config Release --target=install || goto :error
:: ===== libavif =====
curl -fsSL -o libavif-v1_1_1.zip https://github.com/AOMediaCodec/libavif/archive/v1.1.1.zip
7z x libavif-v1_1_1.zip -y -o"dependencies_src"
ren .\dependencies_src\libavif-1.1.1 libavif || goto :error
cmake ./dependencies_src/libavif -Bbuild_dependencies/libavif -DCMAKE_INSTALL_PREFIX="dependencies_bin" -DAVIF_CODEC_AOM=ON -DAVIF_LOCAL_LIBYUV=ON
echo ::endgroup::
echo ::group::===== libavif =====
curl -fsSL -o libavif-v1_2_1.zip https://github.com/AOMediaCodec/libavif/archive/v1.2.1.zip
7z x libavif-v1_2_1.zip -y -o"dependencies_src"
ren .\dependencies_src\libavif-1.2.1 libavif || goto :error
cmake ./dependencies_src/libavif -Bbuild_dependencies/libavif -DCMAKE_INSTALL_PREFIX="dependencies_bin" -DAVIF_CODEC_AOM=ON -DAVIF_LIBYUV=LOCAL
cmake --build build_dependencies/libavif --config Release --target=install || goto :error
:: ===== expat =====
echo ::endgroup::
echo ::group::===== expat =====
7z x expat_src.zip -y -o"dependencies_src"
ren .\dependencies_src\libexpat-R_2_6_2 expat || goto :error
cmake ./dependencies_src/expat/expat -Bbuild_dependencies/expat -DCMAKE_INSTALL_PREFIX="dependencies_bin" || goto :error
cmake --build build_dependencies/expat --config Release --target=install || goto :error
:: ===== ECM =====
echo ::endgroup::
echo ::group::===== ECM =====
git clone -q https://invent.kde.org/frameworks/extra-cmake-modules.git dependencies_src/extra-cmake-modules
cmake .\dependencies_src\extra-cmake-modules -Bbuild_dependencies/extra-cmake-modules -DCMAKE_INSTALL_PREFIX="dependencies_bin" -DBUILD_TESTING=OFF || goto :error
cmake --build build_dependencies/extra-cmake-modules --config Release --target=install || goto :error
:: ===== KArchive =====
echo ::endgroup::
echo ::group::===== KArchive =====
git clone -q https://invent.kde.org/frameworks/karchive.git dependencies_src/karchive
cmake .\dependencies_src\karchive -Bbuild_dependencies/karchive -DWITH_LIBZSTD=OFF -DWITH_BZIP2=OFF -DWITH_LIBLZMA=OFF -DCMAKE_INSTALL_PREFIX="dependencies_bin" || goto :error
cmake --build build_dependencies/karchive --config Release --target=install || goto :error
:: ===== KImageFormats =====
echo ::endgroup::
echo ::group::===== KImageFormats =====
git clone -q https://invent.kde.org/frameworks/kimageformats.git dependencies_src/kimageformats
cmake .\dependencies_src\kimageformats -Bbuild_dependencies/kimageformats -DKDE_INSTALL_QTPLUGINDIR=%QT_ROOT_DIR%\plugins || goto :error
cmake --build build_dependencies/kimageformats --config Release --target=install || goto :error
echo ::endgroup::
:: ------ app ------
cmake -Bbuild . -DCMAKE_INSTALL_PREFIX="%PWD%\build\"
cmake --build build --config Release

View File

@ -4,7 +4,7 @@
cmake_minimum_required(VERSION 3.16)
project(pineapple-pictures VERSION 0.9.2) # don't forget to update NEWS file and AppStream metadata.
project(pineapple-pictures VERSION 1.0.0) # don't forget to update NEWS file and AppStream metadata.
include(GNUInstallDirs)
include(FeatureSummary)
@ -118,10 +118,16 @@ add_executable (${EXE_NAME}
)
if (${QT_VERSION_MAJOR} EQUAL "6")
set(ADD_TRANSLATIONS_ADDITIONAL_ARGS)
if (Qt6_VERSION VERSION_GREATER_EQUAL "6.9.0")
set(ADD_TRANSLATIONS_ADDITIONAL_ARGS MERGE_QT_TRANSLATIONS)
endif()
if (TRANSLATION_RESOURCE_EMBEDDING)
qt_add_translations(${EXE_NAME} TS_FILES ${PPIC_TS_FILES})
qt_add_translations(${EXE_NAME} ${ADD_TRANSLATIONS_ADDITIONAL_ARGS} TS_FILES ${PPIC_TS_FILES})
else()
qt_add_translations(${EXE_NAME} TS_FILES ${PPIC_TS_FILES} QM_FILES_OUTPUT_VARIABLE PPIC_QM_FILES)
qt_add_translations(${EXE_NAME} ${ADD_TRANSLATIONS_ADDITIONAL_ARGS} TS_FILES ${PPIC_TS_FILES} QM_FILES_OUTPUT_VARIABLE PPIC_QM_FILES)
endif()
else()
qt_create_translation(PPIC_QM_FILES ${PPIC_CPP_FILES_FOR_I18N} ${PPIC_TS_FILES})

22
NEWS
View File

@ -1,3 +1,23 @@
Version 1.0.0
~~~~~~~~~~~~~
Released: 2025-05-03
Features:
* Support enforce windowed mode on start-up
* Reload image automatically when current image gets updated
Bugfixes:
* Refer to the right exiv2 CMake module so it can be found on Linux
* Display correct text language on macOS
Miscellaneous:
* Use native text for shortcut editor's label
* Display native commandline message when possible
* Merge Qt translations into app applications as well
Contributors:
Heimen Stoffels, albanobattistella, mmahhi
Version 0.9.2
~~~~~~~~~~~~~
Released: 2025-03-05
@ -123,7 +143,7 @@ Version 0.7.1
Released: 2023-07-08
Features:
* TIF and TIFF format files in the same folder will now be automatedly added to the gallery
* TIF and TIFF format files in the same folder will now be automatically added to the gallery
* Built-in window resizing now also supports Linux desktop. (macOS might also works as well)
Bugfixes:

View File

@ -118,7 +118,7 @@ qreal GraphicsView::scaleFactor() const
void GraphicsView::resetTransform()
{
if (!m_avoidResetTransform) {
if (!shouldAvoidTransform()) {
QGraphicsView::resetTransform();
}
}
@ -196,7 +196,7 @@ void GraphicsView::fitByOrientation(Qt::Orientation ori, bool scaleDownOnly)
void GraphicsView::displayScene()
{
if (m_avoidResetTransform) {
if (shouldAvoidTransform()) {
emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), transform());
return;
}
@ -206,6 +206,7 @@ void GraphicsView::displayScene()
}
m_enableFitInView = true;
m_firstUserMediaLoaded = true;
}
bool GraphicsView::isSceneBiggerThanView() const
@ -365,3 +366,8 @@ void GraphicsView::applyTransformationModeByScaleFactor()
scene()->trySetTransformationMode(Qt::FastTransformation, this->scaleFactor());
}
}
bool GraphicsView::shouldAvoidTransform() const
{
return m_firstUserMediaLoaded && m_avoidResetTransform;
}

View File

@ -64,6 +64,8 @@ private:
void setCheckerboardEnabled(bool enabled, bool invertColor = false);
void applyTransformationModeByScaleFactor();
inline bool shouldAvoidTransform() const;
// Consider switch to 3 state for "no fit", "always fit" and "fit when view is smaller"?
// ... or even more? e.g. "fit/snap width" things...
// Currently it's "no fit" when it's false and "fit when view is smaller" when it's true.
@ -71,6 +73,7 @@ private:
bool m_avoidResetTransform = false;
bool m_checkerboardEnabled = false;
bool m_useLightCheckerboard = false;
bool m_firstUserMediaLoaded = false;
};
#endif // GRAPHICSVIEW_H

View File

@ -52,8 +52,13 @@ int main(int argc, char *argv[])
parser.process(a);
if (parser.isSet(supportedImageFormats)) {
#if QT_VERSION < QT_VERSION_CHECK(6, 9, 0)
fputs(qPrintable(MainWindow::supportedImageFormats().join(QChar('\n'))), stdout);
::exit(EXIT_SUCCESS);
#else
QCommandLineParser::showMessageAndExit(QCommandLineParser::MessageType::Information,
MainWindow::supportedImageFormats().join(QChar('\n')));
#endif
}
MainWindow w;

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2022 Gary Wang <wzc782970009@gmail.com>
// SPDX-FileCopyrightText: 2025 Gary Wang <git@blumia.net>
//
// SPDX-License-Identifier: MIT
@ -32,6 +32,7 @@
#include <QFile>
#include <QTimer>
#include <QFileDialog>
#include <QFileSystemWatcher>
#include <QStandardPaths>
#include <QStringBuilder>
#include <QProcess>
@ -47,6 +48,7 @@ MainWindow::MainWindow(QWidget *parent)
: FramelessWindow(parent)
, m_am(new ActionManager)
, m_pm(new PlaylistManager(this))
, m_fileSystemWatcher(new QFileSystemWatcher(this))
{
if (Settings::instance()->stayOnTop()) {
this->setWindowFlag(Qt::WindowStaysOnTopHint);
@ -147,6 +149,10 @@ MainWindow::MainWindow(QWidget *parent)
connect(m_pm->model(), &PlaylistModel::modelReset, this, std::bind(&MainWindow::galleryCurrent, this, false, false));
connect(m_pm, &PlaylistManager::currentIndexChanged, this, std::bind(&MainWindow::galleryCurrent, this, true, false));
connect(m_fileSystemWatcher, &QFileSystemWatcher::fileChanged, this, [this](){
QTimer::singleShot(500, this, std::bind(&MainWindow::galleryCurrent, this, false, true));
});
QShortcut * fullscreenShorucut = new QShortcut(QKeySequence(QKeySequence::FullScreen), this);
connect(fullscreenShorucut, &QShortcut::activated,
this, &MainWindow::toggleFullscreen);
@ -265,12 +271,17 @@ void MainWindow::galleryNext()
void MainWindow::galleryCurrent(bool showLoadImageHintWhenEmpty, bool reloadImage)
{
QModelIndex index = m_pm->curIndex();
bool shouldResetfileWatcher = true;
if (index.isValid()) {
if (reloadImage) m_graphicsView->showFileFromPath(m_pm->localFileByIndex(index));
const QString & localFilePath(m_pm->localFileByIndex(index));
if (reloadImage) m_graphicsView->showFileFromPath(localFilePath);
shouldResetfileWatcher = !updateFileWatcher(localFilePath);
setWindowTitle(m_pm->urlByIndex(index).fileName());
} else if (showLoadImageHintWhenEmpty && m_pm->totalCount() <= 0) {
m_graphicsView->showText(QCoreApplication::translate("GraphicsScene", "Drag image here"));
}
if (shouldResetfileWatcher) updateFileWatcher();
}
QStringList MainWindow::supportedImageFormats()
@ -904,3 +915,10 @@ void MainWindow::on_actionQuitApp_triggered()
{
quitAppAction(false);
}
bool MainWindow::updateFileWatcher(const QString &basePath)
{
m_fileSystemWatcher->removePaths(m_fileSystemWatcher->files());
if (!basePath.isEmpty()) return m_fileSystemWatcher->addPath(basePath);
return false;
}

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2022 Gary Wang <wzc782970009@gmail.com>
// SPDX-FileCopyrightText: 2025 Gary Wang <git@blumia.net>
//
// SPDX-License-Identifier: MIT
@ -20,6 +20,7 @@
QT_BEGIN_NAMESPACE
class QGraphicsOpacityEffect;
class QGraphicsView;
class QFileSystemWatcher;
QT_END_NAMESPACE
class ActionManager;
@ -111,6 +112,9 @@ private slots:
void on_actionLocateInFileManager_triggered();
void on_actionQuitApp_triggered();
private:
bool updateFileWatcher(const QString & basePath = QString());
private:
ActionManager *m_am;
PlaylistManager *m_pm;
@ -119,6 +123,7 @@ private:
QPropertyAnimation *m_fadeOutAnimation;
QPropertyAnimation *m_floatUpAnimation;
QParallelAnimationGroup *m_exitAnimationGroup;
QFileSystemWatcher *m_fileSystemWatcher;
ToolButton *m_closeButton;
ToolButton *m_prevButton;
ToolButton *m_nextButton;

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<TS version="2.1" language="en_US">
<context>
<name>AboutDialog</name>
<message>

View File

@ -789,7 +789,7 @@
<message>
<location filename="../settingsdialog.cpp" line="90"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
<translation>Finestrato</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="94"/>

View File

@ -236,17 +236,17 @@
<message>
<location filename="../mainwindow.cpp" line="754"/>
<source>Image From Clipboard</source>
<translation type="unfinished"></translation>
<translation>Afbeelding van klembord</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="772"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation type="unfinished"></translation>
<translation>Weet u zeker dat u %1 naar de prullenbak wilt verplaatsen?</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="777"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation type="unfinished"></translation>
<translation>Het bestand kan niet naar de prullenbak worden verplaatst, mogelijk door een rechtenprobleem of systeembeperking.</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="114"/>
@ -295,12 +295,12 @@
<message>
<location filename="../actionmanager.cpp" line="108"/>
<source>Pause/Resume Animation</source>
<translation type="unfinished"></translation>
<translation>Animatie pauzeren/hervatten</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="109"/>
<source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation>
<translation>Ga naar volgend animatieframe</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="111"/>
@ -310,12 +310,12 @@
<message>
<location filename="../actionmanager.cpp" line="112"/>
<source>Fit to view</source>
<translation type="unfinished"></translation>
<translation>Inpassen</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="113"/>
<source>Fit to width</source>
<translation type="unfinished"></translation>
<translation>Aanpassen aan breedte</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="116"/>
@ -350,7 +350,7 @@
<message>
<location filename="../actionmanager.cpp" line="103"/>
<source>Rotate left</source>
<translation type="unfinished"></translation>
<translation>Naar links draaien</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="105"/>
@ -366,7 +366,7 @@
<location filename="../mainwindow.cpp" line="771"/>
<location filename="../actionmanager.cpp" line="117"/>
<source>Move to Trash</source>
<translation type="unfinished"></translation>
<translation>Verplaatsen naar prullenbak</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="121"/>
@ -728,27 +728,27 @@
<message>
<location filename="../settingsdialog.cpp" line="37"/>
<source>Options</source>
<translation type="unfinished"></translation>
<translation>Opties</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="49"/>
<source>Shortcuts</source>
<translation type="unfinished"></translation>
<translation>Sneltoetsen</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="59"/>
<source>Editing shortcuts for action &quot;%1&quot;:</source>
<translation type="unfinished"></translation>
<translation>Bewerken van sneltoetsen voor actie %1:</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="68"/>
<source>Failed to set shortcuts</source>
<translation type="unfinished"></translation>
<translation>Instellen mislukt</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="69"/>
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
<translation type="unfinished"></translation>
<translation>Controleer of de gekozen sneltoetsen niet al in gebruik zijn.</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="76"/>
@ -768,7 +768,7 @@
<message>
<location filename="../settingsdialog.cpp" line="79"/>
<source>Toggle fullscreen</source>
<translation type="unfinished"></translation>
<translation>Schermvullende weergave aan/uit</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="83"/>
@ -793,7 +793,7 @@
<message>
<location filename="../settingsdialog.cpp" line="90"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
<translation>Venster</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="94"/>
@ -827,7 +827,7 @@
<message>
<location filename="../settingsdialog.cpp" line="121"/>
<source>Use light-color checkerboard</source>
<translation type="unfinished"></translation>
<translation>Licht schaakbordpatroon gebruiken</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="122"/>
@ -855,7 +855,7 @@
<message>
<location filename="../shortcutedit.cpp" line="111"/>
<source>No shortcuts</source>
<translation type="unfinished"></translation>
<translation>Geen sneltoetsen</translation>
</message>
</context>
<context>
@ -863,7 +863,7 @@
<message>
<location filename="../shortcutedit.cpp" line="77"/>
<source>Shortcut #%1</source>
<translation type="unfinished"></translation>
<translation>Sneltoets #%1</translation>
</message>
</context>
<context>
@ -876,7 +876,7 @@
<message>
<location filename="../main.cpp" line="46"/>
<source>List supported image format suffixes, and quit program.</source>
<translation type="unfinished"></translation>
<translation>Toon een lijst met ondersteunde afbeeldingsformaten en sluit af.</translation>
</message>
<message>
<location filename="../main.cpp" line="50"/>

View File

@ -98,7 +98,7 @@ build_script:
- cd karchive
- mkdir build
- cd build
- cmake .. -G "Ninja" -DWITH_LIBZSTD=OFF -DWITH_BZIP2=OFF -DWITH_LIBLZMA=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX%
- cmake .. -G "Ninja" -DWITH_LIBZSTD=OFF -DWITH_BZIP2=OFF -DWITH_LIBLZMA=OFF -DWITH_OPENSSL=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX%
- cmake --build . --config Release
- cmake --build . --config Release --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%

View File

@ -30,6 +30,28 @@
<true/>
<key>NSHumanReadableCopyright</key>
<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
<!-- FIXME: this list can't be automatically generated by Qt's CMake API, don't know why. -->
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>ca</string>
<string>de</string>
<string>es</string>
<string>fr</string>
<string>id</string>
<string>it</string>
<string>ja</string>
<string>ko</string>
<string>nb_NO</string>
<string>nl</string>
<string>pa_PK</string>
<string>ru</string>
<string>si</string>
<string>ta</string>
<string>tr</string>
<string>uk</string>
<string>zh_CN</string>
</array>
<key>CFBundleDocumentTypes</key>
<array>
<!-- JPEG -->

View File

@ -80,6 +80,28 @@
</screenshot>
</screenshots>
<releases>
<release type="stable" version="1.0.0" date="2025-05-03T00:00:00Z">
<description>
<p>This release adds the following features:</p>
<ul>
<li>Support enforce windowed mode on start-up</li>
<li>Reload image automatically when current image gets updated</li>
</ul>
<p>This release fixes the following bugs:</p>
<ul>
<li>Refer to the right exiv2 CMake module so it can be found on Linux</li>
<li>Display correct text language on macOS</li>
</ul>
<p>This release includes the following changes:</p>
<ul>
<li>Use native text for shortcut editor's label</li>
<li>Display native commandline message when possible</li>
<li>Merge Qt translations into app applications as well</li>
</ul>
<p>With contributions from:</p>
<p>Heimen Stoffels, albanobattistella, mmahhi</p>
</description>
</release>
<release type="stable" version="0.9.2" date="2025-03-05T00:00:00Z">
<description>
<p>This release fixes the following bug:</p>
@ -210,7 +232,7 @@
<description>
<p>This release adds the following features:</p>
<ul>
<li>TIF and TIFF format files in the same folder will now be automatedly added to the gallery</li>
<li>TIF and TIFF format files in the same folder will now be automatically added to the gallery</li>
<li>Built-in window resizing now also supports Linux desktop. (macOS might also works as well)</li>
</ul>
<p>This release fixes the following bugs:</p>

View File

@ -9,6 +9,10 @@ TARGET = ppic
TEMPLATE = app
DEFINES += PPIC_VERSION_STRING=\\\"x.y.z\\\"
win32 {
DEFINES += FLAG_PORTABLE_MODE_SUPPORT=1
}
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
@ -64,7 +68,7 @@ HEADERS += \
app/fileopeneventhandler.h
TRANSLATIONS = \
app/translations/PineapplePictures.ts \
app/translations/PineapplePictures_en.ts \
app/translations/PineapplePictures_zh_CN.ts \
app/translations/PineapplePictures_de.ts \
app/translations/PineapplePictures_es.ts \