From a82a9eb5cf4d1fb9f47ea6436cfb6b51989bd5ce Mon Sep 17 00:00:00 2001 From: jan Anja Date: Mon, 31 Jan 2022 23:11:46 +0500 Subject: [PATCH 1/4] Change Q_OS_LINUX to Q_OS_UNIX (#616) * change Q_OS_LINUX to Q_OS_UNIX This is needed for BSD operating systems: https://cgit.freebsd.org/ports/tree/net/rssguard/Makefile?id=865fc1ddb58052d38fc0f353ce70da4c7d643b79 https://github.com/DragonFlyBSD/DPorts/blob/8767b251da05a489f1a98a8e5fe800fff54aa287/net/rssguard/Makefile * Update CMakeLists.txt * Update Documentation.md Co-authored-by: martinrotter --- CMakeLists.txt | 6 +++--- resources/docs/Documentation.md | 1 + src/librssguard/definitions/definitions.h | 12 ++++++++++-- src/librssguard/gui/settings/settingsbrowsermail.cpp | 4 ++-- src/librssguard/gui/settings/settingsgui.cpp | 2 +- src/librssguard/miscellaneous/application.cpp | 6 +++--- src/librssguard/miscellaneous/iconfactory.cpp | 4 ++-- src/librssguard/miscellaneous/settings.cpp | 4 ++-- src/librssguard/miscellaneous/systemfactory.cpp | 8 ++++---- src/librssguard/miscellaneous/systemfactory.h | 2 +- src/librssguard/network-web/webfactory.cpp | 2 +- src/rssguard/main.cpp | 2 +- 12 files changed, 31 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35c5b0323..27efe9ed0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,7 @@ # {FEEDLY,GMAIL,INOREADER}_CLIENT_SECRET - preconfigured OAuth cliend SECRET. # # Other information: -# - supports Windows, Linux, macOS, OS/2, Android, +# - supports Windows, Linux, *BSD, macOS, OS/2, Android, # - Qt 5.9.0 or newer is required, # - cmake 3.9.0 or newer is required, # - if you wish to make packages for Windows, then you must initialize all submodules within repository before compilation, @@ -38,13 +38,13 @@ # your OS/2 distro is up-to-date and you have all dependencies installed: os2-base, all gcc-* packages, # libc and libcx up-to-date, kbuild-make, ash, binutils, all relevant qt5-* packages. # -# After your dependecies are installed, then you can compile via standard `qmake -> make -> make install` steps +# After your dependecies are installed, then you can compile via standard `cmake -> make -> make install` steps # and package with: 7z.exe a -t7z -mmt -mx9 "rssguard.7z" "homeFolder(), //: File filter for external browser selection dialog. -#if defined(Q_OS_LINUX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) tr("Executables (*)")); #else tr("Executables (*.*)")); @@ -126,7 +126,7 @@ void SettingsBrowserMail::selectEmailExecutable() { qApp->homeFolder(), //: File filter for external e-mail selection dialog. -#if defined(Q_OS_LINUX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) tr("Executables (*)")); #else tr("Executables (*.*)")); diff --git a/src/librssguard/gui/settings/settingsgui.cpp b/src/librssguard/gui/settings/settingsgui.cpp index cab1230a2..7a9963a29 100644 --- a/src/librssguard/gui/settings/settingsgui.cpp +++ b/src/librssguard/gui/settings/settingsgui.cpp @@ -132,7 +132,7 @@ void SettingsGui::loadSettings() { if (icon_theme_name == QSL(APP_NO_THEME)) { // Add just "no theme" on other systems. //: Label for disabling icon theme. -#if defined(Q_OS_LINUX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) m_ui->m_cmbIconTheme->addItem(tr("system icon theme"), APP_NO_THEME); #else m_ui->m_cmbIconTheme->addItem(tr("no icon theme"), APP_NO_THEME); diff --git a/src/librssguard/miscellaneous/application.cpp b/src/librssguard/miscellaneous/application.cpp index b4a10a292..4b67cabd5 100644 --- a/src/librssguard/miscellaneous/application.cpp +++ b/src/librssguard/miscellaneous/application.cpp @@ -31,7 +31,7 @@ #include #include -#if defined(Q_OS_LINUX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) #include #include #endif @@ -91,7 +91,7 @@ Application::Application(const QString& id, int& argc, char** argv) connect(this, &Application::commitDataRequest, this, &Application::onCommitData); connect(this, &Application::saveStateRequest, this, &Application::onSaveState); -#if defined(Q_OS_LINUX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) QString app_dir = QString::fromLocal8Bit(qgetenv("APPDIR")); if (!app_dir.isEmpty()) { @@ -623,7 +623,7 @@ void Application::showMessagesNumber(int unread_messages, bool any_feed_has_unre m_trayIcon->setNumber(unread_messages, any_feed_has_unread_messages); } -#if defined(Q_OS_LINUX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) QDBusMessage signal = QDBusMessage::createSignal(QSL("/"), QSL("com.canonical.Unity.LauncherEntry"), QSL("Update")); diff --git a/src/librssguard/miscellaneous/iconfactory.cpp b/src/librssguard/miscellaneous/iconfactory.cpp index 8b0190437..5cbda1d49 100644 --- a/src/librssguard/miscellaneous/iconfactory.cpp +++ b/src/librssguard/miscellaneous/iconfactory.cpp @@ -92,7 +92,7 @@ void IconFactory::loadCurrentIconTheme() { if (installed_themes.contains(theme_name_from_settings)) { // Desired icon theme is installed and can be loaded. -#if defined(Q_OS_LINUX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) if (theme_name_from_settings.isEmpty()) { qDebugNN << LOGSEC_GUI << "Loading default system icon theme."; } @@ -108,7 +108,7 @@ void IconFactory::loadCurrentIconTheme() { else { // Desired icon theme is not currently available. // Activate "default" or "no" icon theme instead. -#if defined(Q_OS_LINUX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) qWarningNN << "Icon theme" << QUOTE_W_SPACE(theme_name_from_settings) << "cannot be loaded because it is not installed. Activating \"no\" icon theme."; diff --git a/src/librssguard/miscellaneous/settings.cpp b/src/librssguard/miscellaneous/settings.cpp index b1e5935e8..787947879 100644 --- a/src/librssguard/miscellaneous/settings.cpp +++ b/src/librssguard/miscellaneous/settings.cpp @@ -491,8 +491,8 @@ SettingsProperties Settings::determineProperties() { else { // We will use PORTABLE settings only and only if it is available and NON-PORTABLE // settings was not initialized before. -#if defined(Q_OS_LINUX) || defined (Q_OS_ANDROID) || defined (Q_OS_MACOSOS) - // DO NOT use portable settings for Linux, it is really not used on that platform. +#if defined(Q_OS_UNIX) + // DO NOT use portable settings for *nix, it is really not used on that platform. const bool will_we_use_portable_settings = false; #else const QString exe_path = qApp->applicationDirPath(); diff --git a/src/librssguard/miscellaneous/systemfactory.cpp b/src/librssguard/miscellaneous/systemfactory.cpp index 6f4598a77..db2321b5d 100644 --- a/src/librssguard/miscellaneous/systemfactory.cpp +++ b/src/librssguard/miscellaneous/systemfactory.cpp @@ -58,8 +58,8 @@ SystemFactory::AutoStartStatus SystemFactory::autoStartStatus() const { else { return AutoStartStatus::Disabled; } -#elif defined(Q_OS_LINUX) - // Use proper freedesktop.org way to auto-start the application on Linux. +#elif defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) + // Use proper freedesktop.org way to auto-start the application. // INFO: http://standards.freedesktop.org/autostart-spec/latest/ const QString desktop_file_location = autostartDesktopFileLocation(); @@ -86,7 +86,7 @@ SystemFactory::AutoStartStatus SystemFactory::autoStartStatus() const { #endif } -#if defined(Q_OS_LINUX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) QString SystemFactory::autostartDesktopFileLocation() const { const QString xdg_config_path(qgetenv("XDG_CONFIG_HOME")); QString desktop_file_location; @@ -136,7 +136,7 @@ bool SystemFactory::setAutoStartStatus(AutoStartStatus new_status) { default: return false; } -#elif defined(Q_OS_LINUX) +#elif defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) // Note that we expect here that no other program uses // "rssguard.desktop" desktop file. const QString destination_file = autostartDesktopFileLocation(); diff --git a/src/librssguard/miscellaneous/systemfactory.h b/src/librssguard/miscellaneous/systemfactory.h index e32b4af6c..3048e6705 100644 --- a/src/librssguard/miscellaneous/systemfactory.h +++ b/src/librssguard/miscellaneous/systemfactory.h @@ -55,7 +55,7 @@ class SystemFactory : public QObject { // new status failed. bool setAutoStartStatus(AutoStartStatus new_status); -#if defined(Q_OS_LINUX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) // Returns standard location where auto-start .desktop files // should be placed. QString autostartDesktopFileLocation() const; diff --git a/src/librssguard/network-web/webfactory.cpp b/src/librssguard/network-web/webfactory.cpp index ee08d7f59..c26dbabea 100644 --- a/src/librssguard/network-web/webfactory.cpp +++ b/src/librssguard/network-web/webfactory.cpp @@ -306,7 +306,7 @@ void WebFactory::createMenu(QMenu* menu) { actions << createEngineSettingsAction(tr("Plugins enabled"), QWebEngineSettings::WebAttribute::PluginsEnabled); actions << createEngineSettingsAction(tr("Fullscreen enabled"), QWebEngineSettings::WebAttribute::FullScreenSupportEnabled); -#if !defined(Q_OS_LINUX) +#if !defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) actions << createEngineSettingsAction(tr("Screen capture enabled"), QWebEngineSettings::WebAttribute::ScreenCaptureEnabled); actions << createEngineSettingsAction(tr("WebGL enabled"), QWebEngineSettings::WebAttribute::WebGLEnabled); actions << createEngineSettingsAction(tr("Accelerate 2D canvas"), QWebEngineSettings::WebAttribute::Accelerated2dCanvasEnabled); diff --git a/src/rssguard/main.cpp b/src/rssguard/main.cpp index 740b58fdc..55cff7c7e 100644 --- a/src/rssguard/main.cpp +++ b/src/rssguard/main.cpp @@ -33,7 +33,7 @@ int main(int argc, char* argv[]) { QApplication::setAttribute(Qt::ApplicationAttribute::AA_EnableHighDpiScaling); #endif -#if defined(Q_OS_LINUX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) QApplication::setDesktopFileName(APP_DESKTOP_ENTRY_FILE); #endif From cfcdeef031d11ab74cb9d36072e996605c706cf8 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Mon, 31 Jan 2022 19:22:54 +0100 Subject: [PATCH 2/4] some UX --- src/librssguard/gui/reusable/helpspoiler.cpp | 15 ++++++++------- src/librssguard/gui/reusable/helpspoiler.h | 2 ++ .../services/standard/gui/standardfeeddetails.ui | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/librssguard/gui/reusable/helpspoiler.cpp b/src/librssguard/gui/reusable/helpspoiler.cpp index d1339bc16..b7c3bd9a1 100644 --- a/src/librssguard/gui/reusable/helpspoiler.cpp +++ b/src/librssguard/gui/reusable/helpspoiler.cpp @@ -17,7 +17,7 @@ HelpSpoiler::HelpSpoiler(QWidget* parent) : QWidget(parent), m_btnToggle(new QToolButton(this)), m_content(new QScrollArea(this)), m_animation(new QParallelAnimationGroup(this)), - m_layout(new QGridLayout(this)), m_text(new QLabel(this)) { + m_layout(new QGridLayout(this)), m_text(new QLabel(this)), m_btnHelp(new PlainToolButton(this)) { m_btnToggle->setStyleSheet(QSL("QToolButton { border: none; }")); m_btnToggle->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon); @@ -29,6 +29,7 @@ HelpSpoiler::HelpSpoiler(QWidget* parent) : QWidget(parent), m_content->setSizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Fixed); m_content->setMaximumHeight(0); m_content->setMinimumHeight(0); + m_content->setContentsMargins({ 0, 0, 0, 0 }); m_animation->addAnimation(new QPropertyAnimation(this, QSL("minimumHeight").toLocal8Bit())); m_animation->addAnimation(new QPropertyAnimation(this, QSL("maximumHeight").toLocal8Bit())); @@ -39,12 +40,9 @@ HelpSpoiler::HelpSpoiler(QWidget* parent) : QWidget(parent), m_layout->setVerticalSpacing(0); m_layout->setContentsMargins(0, 0, 0, 0); - PlainToolButton* btn_help = new PlainToolButton(this); + m_btnHelp->setPadding(0); - btn_help->setPadding(0); - btn_help->setIcon(qApp->icons()->fromTheme(QSL("dialog-question"))); - - m_layout->addWidget(btn_help, 0, 0); + m_layout->addWidget(m_btnHelp, 0, 0); m_layout->addWidget(m_btnToggle, 0, 1, 1, 1, Qt::AlignmentFlag::AlignLeft); m_layout->addWidget(m_content, 1, 0, 1, 2); @@ -79,6 +77,7 @@ HelpSpoiler::HelpSpoiler(QWidget* parent) : QWidget(parent), m_animation->start(); }); + m_text->setMargin(0); m_text->setWordWrap(true); auto* content_layout = new QVBoxLayout(m_content); @@ -93,5 +92,7 @@ void HelpSpoiler::setHelpText(const QString& title, const QString& text, bool is void HelpSpoiler::setHelpText(const QString& text, bool is_warning) { m_text->setText(text); - GuiUtilities::setLabelAsNotice(*m_text, is_warning, false); + m_btnHelp->setIcon(is_warning + ? qApp->icons()->fromTheme(QSL("dialog-warning")) + : qApp->icons()->fromTheme(QSL("dialog-question"))); } diff --git a/src/librssguard/gui/reusable/helpspoiler.h b/src/librssguard/gui/reusable/helpspoiler.h index 5790ae43b..9014ed6fb 100644 --- a/src/librssguard/gui/reusable/helpspoiler.h +++ b/src/librssguard/gui/reusable/helpspoiler.h @@ -10,6 +10,7 @@ class QGridLayout; class QToolButton; class QParallelAnimationGroup; class QScrollArea; +class PlainToolButton; class HelpSpoiler : public QWidget { Q_OBJECT @@ -26,6 +27,7 @@ class HelpSpoiler : public QWidget { QParallelAnimationGroup* m_animation; QGridLayout* m_layout; QLabel* m_text; + PlainToolButton* m_btnHelp; }; #endif // HELPSPOILER_H diff --git a/src/librssguard/services/standard/gui/standardfeeddetails.ui b/src/librssguard/services/standard/gui/standardfeeddetails.ui index e01acfc1b..bb815e0b6 100644 --- a/src/librssguard/services/standard/gui/standardfeeddetails.ui +++ b/src/librssguard/services/standard/gui/standardfeeddetails.ui @@ -112,7 +112,7 @@ 0 - 70 + 50 @@ -138,7 +138,7 @@ 0 - 70 + 50 From ba0bccd34361178fb4a7482d3bc00db9d7f740fa Mon Sep 17 00:00:00 2001 From: jan Anja Date: Mon, 31 Jan 2022 23:39:07 +0500 Subject: [PATCH 3/4] add compatibility macros for qt cmake functions (#617) --- CMakeLists.txt | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 27efe9ed0..1e38f14f3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,6 +99,7 @@ if(${FORCE_COLORED_OUTPUT}) endif() # Global compilation switches. +option(BUILD_WITH_QT6 "Build application with Qt 6" OFF) option(USE_WEBENGINE "Use QtWebEngine for embedded web browser" ON) option(UPDATE_TRANSLATIONS "Call lupdate to update translation files from source" OFF) option(FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GCC/Clang only)" OFF) @@ -114,8 +115,7 @@ set(INOREADER_CLIENT_ID "" CACHE STRING "Inoreader client ID") set(INOREADER_CLIENT_SECRET "" CACHE STRING "Inoreader client secret") # Import Qt libraries. -find_package(QT NAMES Qt6 Qt5 REQUIRED) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS +set(QT_COMPONENTS Core Gui LinguistTools @@ -126,26 +126,49 @@ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Xml ) -if(QT_VERSION_MAJOR EQUAL 6) - find_package(Qt6 COMPONENTS Core5Compat REQUIRED) +if(NOT OS2) + list(APPEND QT_COMPONENTS Multimedia) endif() if(USE_WEBENGINE) - find_package(Qt${QT_VERSION_MAJOR} COMPONENTS WebEngineWidgets REQUIRED) + list(APPEND QT_COMPONENTS WebEngineWidgets) add_compile_definitions(USE_WEBENGINE) endif() +if(UNIX AND NOT APPLE AND NOT ANDROID) + list(APPEND QT_COMPONENTS DBus) +endif() + +if(BUILD_WITH_QT6) + find_package(QT NAMES Qt6) + find_package(Qt6 COMPONENTS ${QT_COMPONENTS} Core5Compat REQUIRED) +else() + find_package(QT NAMES Qt5) + find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED) + + if(Qt5Core_VERSION VERSION_LESS 5.15.0) + # Compatibility macros. + macro(qt_add_resources) + qt5_add_resources(${ARGN}) + endmacro() + macro(qt_add_big_resources) + qt5_add_big_resources(${ARGN}) + endmacro() + macro(qt_create_translation) + qt5_create_translation(${ARGN}) + endmacro() + macro(qt_add_translation) + qt5_add_translation(${ARGN}) + endmacro() + endif() +endif() + if(NOT OS2) - find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Multimedia REQUIRED) macro(qt_add_resources) qt_add_big_resources(${ARGN}) endmacro() endif() -if(UNIX AND NOT APPLE AND NOT ANDROID) - find_package(Qt${QT_VERSION_MAJOR} COMPONENTS DBus REQUIRED) -endif() - # Process oauth service secrets. if(NOT FEEDLY_CLIENT_ID STREQUAL "" AND NOT FEEDLY_CLIENT_SECRET STREQUAL "") add_compile_definitions( From da0c7556c2305b78458256ccbb2fe77ec1c67aeb Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Mon, 31 Jan 2022 19:48:10 +0100 Subject: [PATCH 4/4] include uncrustify in project, some minor fixups --- CMakeLists.txt | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e38f14f3..df75297e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,6 +98,9 @@ if(${FORCE_COLORED_OUTPUT}) endif() endif() +# Aux files not used for build but include in project. +add_custom_target(AuxFiles SOURCES "resources/scripts/uncrustify/uncrustify.cfg") + # Global compilation switches. option(BUILD_WITH_QT6 "Build application with Qt 6" OFF) option(USE_WEBENGINE "Use QtWebEngine for embedded web browser" ON) @@ -149,25 +152,28 @@ else() if(Qt5Core_VERSION VERSION_LESS 5.15.0) # Compatibility macros. macro(qt_add_resources) - qt5_add_resources(${ARGN}) + qt5_add_resources(${ARGN}) endmacro() + macro(qt_add_big_resources) - qt5_add_big_resources(${ARGN}) + qt5_add_big_resources(${ARGN}) endmacro() + macro(qt_create_translation) - qt5_create_translation(${ARGN}) + qt5_create_translation(${ARGN}) endmacro() + macro(qt_add_translation) - qt5_add_translation(${ARGN}) + qt5_add_translation(${ARGN}) endmacro() endif() endif() -if(NOT OS2) - macro(qt_add_resources) - qt_add_big_resources(${ARGN}) - endmacro() -endif() +#if(NOT OS2) +# macro(qt_add_resources) +# qt_add_big_resources(${ARGN}) +# endmacro() +#endif() # Process oauth service secrets. if(NOT FEEDLY_CLIENT_ID STREQUAL "" AND NOT FEEDLY_CLIENT_SECRET STREQUAL "")