Skip to content

Commit

Permalink
Qt 6 and ECM
Browse files Browse the repository at this point in the history
  • Loading branch information
plfiorini committed Dec 31, 2023
1 parent 0d9de59 commit 88b4d43
Show file tree
Hide file tree
Showing 70 changed files with 537 additions and 456 deletions.
54 changes: 37 additions & 17 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,35 +1,55 @@
cmake_minimum_required(VERSION 3.10.0)
cmake_minimum_required(VERSION 3.19)

project("Settings"
VERSION "0.9.0"
DESCRIPTION "Settings application"
LANGUAGES CXX C
)

## Shared macros and functions:
if(NOT LIRI_LOCAL_ECM)
find_package(LiriCMakeShared "2.0.0" REQUIRED NO_MODULE)
list(APPEND CMAKE_MODULE_PATH "${LCS_MODULE_PATH}")
## Only build on the appropriate platforms.
if(NOT (UNIX OR NOT CMAKE_SYSTEM_NAME MATCHES "Android"))
message(NOTICE "Skipping the build as the condition \"UNIX OR NOT Android\" is not met.")
return()
endif()

## Set minimum versions required:
set(QT_MIN_VERSION "5.10.0")

## Add some paths to check for CMake modules:
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

## Liri specific setup common for all modules:
include(LiriSetup)
## Macros and functions:
include(LiriAddSettingsModule)

## Only build on the appropriate platforms.
if(NOT UNIX OR ANDROID)
message(NOTICE "Skipping the build as the condition \"UNIX OR ANDROID\" is not met.")
return()
## ECM:
find_package(ECM 5.245.0 REQUIRED NO_MODULE)
list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH})

## Installation directories:
include(KDEInstallDirs)

## Compiler settings:
set(KDE_SKIP_NULLPTR_WARNINGS_SETTINGS TRUE)
include(KDECompilerSettings NO_POLICY_SCOPE)

## Enable keywords such as emit:
# TODO: Replace keywords such as emit with Q_EMIT
remove_definitions(-DQT_NO_KEYWORDS)

## CMake settings:
include(KDECMakeSettings)

## QML module:
include(ECMQmlModule)

## Disable use of C++ API deprecated in Qt 5.15
add_compile_definitions(QT_DISABLE_DEPRECATED_UP_TO=0x050F00)

## QML import path:
if(NOT QML_IMPORT_PATH)
set(QML_IMPORT_PATH ${CMAKE_SOURCE_DIR}/bin CACHE STRING "" FORCE)
endif()

## Find Qt 5:
find_package(Qt5 "${QT_MIN_VERSION}"
CONFIG REQUIRED
## Find Qt:
find_package(Qt6 "6.6.0"
REQUIRED
COMPONENTS
Core
Concurrent
Expand Down
10 changes: 4 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,20 @@ Settings application and modules for Liri desktop.

## Dependencies

Qt >= 5.10.0 with at least the following modules is required:
Qt >= 6.6.0 with at least the following modules is required:

* [qtbase](http://code.qt.io/cgit/qt/qtbase.git)
* [qtdeclarative](http://code.qt.io/cgit/qt/qtdeclarative.git)
* [qtquickcontrols2](http://code.qt.io/cgit/qt/qtquickcontrols2.git)
* [qttools](http://code.qt.io/cgit/qt/qttools.git)

The following modules and their dependencies are required:

* [cmake](https://gitlab.kitware.com/cmake/cmake) >= 3.10.0
* [cmake](https://gitlab.kitware.com/cmake/cmake) >= 3.19.0
* [cmake-shared](https://github.com/lirios/cmake-shared.git) >= 1.0.0
* [qtaccountsservice](https://github.com/lirios/qtaccountsservice.git) >= 1.2.0
* [qtgsettings](https://github.com/lirios/qtgsettings) >= 1.1.0
* [qtaccountsservice](https://github.com/lirios/qtaccountsservice.git) >= 2.0.0
* [qtgsettings](https://github.com/lirios/qtgsettings) >= 2.0.0
* [fluid](https://github.com/lirios/fluid.git) >= 1.0.0
* [libliri](https://github.com/lirios/libliri.git)
* [liri-wayland](https://github.com/lirios/wayland)
* [polkit](https://cgit.freedesktop.org/polkit/)
* [xkeyboard-config](https://cgit.freedesktop.org/xkeyboard-config)

Expand Down
65 changes: 65 additions & 0 deletions cmake/LiriAddSettingsModule.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# SPDX-FileCopyrightText: 2018-2024 Pier Luigi Fiorini <[email protected]>
# SPDX-License-Identifier: BSD-3-Clause

# ECM
find_package(ECM 5.245.0 REQUIRED NO_MODULE)
list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
include(KDEInstallDirs)

function(liri_add_settings_module name)
# Parse arguments
cmake_parse_arguments(
_arg
""
"METADATA;TRANSLATIONS_PATH"
"CONTENTS"
${ARGN}
)
if(DEFINED _arg_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unknown arguments were passed to liri_add_settings_module (${_arg_UNPARSED_ARGUMENTS}).")
endif()

# Find packages we need
find_package(Qt6 "6.0" CONFIG REQUIRED COMPONENTS Core LinguistTools)

string(TOLOWER "${name}" name_lower)

# Assume a default value if metadata is not specified
if(NOT _arg_METADATA)
set(_arg_METADATA "${CMAKE_CURRENT_SOURCE_DIR}/metadata.desktop")
endif()

# Translation directory
if(DEFINED _arg_TRANSLATIONS_PATH)
set(_translations_path "${_arg_TRANSLATIONS_PATH}")
else()
set(_translations_path "${CMAKE_CURRENT_SOURCE_DIR}/translations")
endif()
get_filename_component(_translations_path "${_translations_path}" ABSOLUTE)

# Translations
file(GLOB _translations "${_translations_path}/*_*.ts")
qt6_add_translation(_qm_FILES ${_translations})

# Sources
set(_sources ${_arg_CONTENTS} ${_arg_METADATA} ${_qm_FILES})

# Target
set(target "${name}Settings")
add_custom_target("${target}" ALL SOURCES ${_sources})
set_target_properties("${target}" PROPERTIES LIRI_TARGET_TYPE "settings")

# Install
install(
FILES ${_arg_METADATA}
DESTINATION "${KDE_INSTALL_DATADIR}/liri-settings/modules/${name_lower}"
)
install(
FILES ${_arg_CONTENTS}
DESTINATION "${KDE_INSTALL_DATADIR}/liri-settings/modules/${name_lower}"
)
install(
FILES ${_qm_FILES}
DESTINATION "${KDE_INSTALL_DATADIR}/liri-settings/translations/modules"
)
endfunction()
66 changes: 32 additions & 34 deletions src/app/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,51 +4,49 @@ endif()

# Translations
file(GLOB LiriSettings_TRANSLATIONS "${CMAKE_SOURCE_DIR}/translations/app/*_*.ts")
qt5_add_translation(LiriSettings_QM_FILES ${LiriSettings_TRANSLATIONS})
qt6_add_translation(LiriSettings_QM_FILES ${LiriSettings_TRANSLATIONS})
install(FILES ${LiriSettings_QM_FILES}
DESTINATION "${INSTALL_DATADIR}/liri-settings/translations")

liri_add_executable(LiriSettings
OUTPUT_NAME
"liri-settings"
SOURCES
main.cpp
settingsapp.cpp
settingsapp.h
DESTINATION "${KDE_INSTALL_DATADIR}/liri-settings/translations")

set(_sources
main.cpp
settingsapp.cpp settingsapp.h
io.liri.Settings.desktop
${LiriSettings_QM_FILES}
)

add_executable(LiriSettings ${_sources})

qt6_add_qml_module(LiriSettings
URI settings
QML_FILES
qml/ErrorPage.qml
qml/ErrorView.qml
qml/main.qml
qml/SettingsPage.qml
qml/SettingsListItem.qml
${LiriSettings_QM_FILES}
DEFINES
QT_NO_CAST_FROM_ASCII
QT_NO_FOREACH
LIRISETTINGS_VERSION="${PROJECT_VERSION}"
DESKTOP
"${CMAKE_CURRENT_SOURCE_DIR}/io.liri.Settings.desktop"
RESOURCES
"settings.qrc"
LIBRARIES
Qt5::Core
Qt5::Gui
Qt5::Widgets
Qt5::Qml
Qt5::Quick
Qt5::QuickControls2
)

set_target_properties(LiriSettings PROPERTIES OUTPUT_NAME liri-settings)

target_compile_definitions(LiriSettings PRIVATE -DLIRISETTINGS_VERSION="${PROJECT_VERSION}")

target_link_libraries(LiriSettings
PRIVATE
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Qml
Qt6::Quick
Qt6::QuickControls2
Liri::DBusService
QTQUICK_COMPILER
)

liri_finalize_executable(LiriSettings)
install(TARGETS LiriSettings ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})

if(IS_ABSOLUTE "${INSTALL_BINDIR}")
set(BINDIR "${INSTALL_BINDIR}")
else()
set(BINDIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR}")
endif()
set(BINDIR "${KDE_INSTALL_FULL_BINDIR}")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/io.liri.Settings.service.in"
"${CMAKE_CURRENT_BINARY_DIR}/io.liri.Settings.service"
@ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/io.liri.Settings.service"
DESTINATION "${INSTALL_DATADIR}/dbus-1/services")
DESTINATION "${KDE_INSTALL_DATADIR}/dbus-1/services")
8 changes: 4 additions & 4 deletions src/app/qml/ErrorPage.qml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@
* $END_LICENSE$
***************************************************************************/

import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Controls.Material 2.0
import Fluid.Controls 1.0 as FluidControls
import QtQuick
import QtQuick.Controls
import QtQuick.Controls.Material
import Fluid.Controls as FluidControls

FluidControls.Page {
property alias message: errorView.message
Expand Down
10 changes: 5 additions & 5 deletions src/app/qml/ErrorView.qml
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@
* $END_LICENSE$
***************************************************************************/

import QtQuick 2.2
import QtQuick.Layouts 1.0
import QtQuick.Controls 2.0
import QtQuick.Controls.Material 2.0
import Fluid.Controls 1.0 as FluidControls
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import QtQuick.Controls.Material
import Fluid.Controls as FluidControls

Item {
property string moduleTitle
Expand Down
4 changes: 2 additions & 2 deletions src/app/qml/SettingsListItem.qml
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
* $END_LICENSE$
***************************************************************************/

import QtQuick 2.2
import Fluid.Controls 1.0 as FluidControls
import QtQuick
import Fluid.Controls as FluidControls

FluidControls.ListItem {
text: title
Expand Down
6 changes: 3 additions & 3 deletions src/app/qml/SettingsPage.qml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
* $END_LICENSE$
***************************************************************************/

import QtQuick 2.0
import QtQuick.Controls 2.2
import Liri.Settings 1.0
import QtQuick
import QtQuick.Controls
import Liri.Settings

ModulePage {
id: page
Expand Down
14 changes: 7 additions & 7 deletions src/app/qml/main.qml
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@
* $END_LICENSE$
***************************************************************************/

import QtQuick 2.0
import QtQuick.Window 2.0
import QtQuick.Controls 2.0
import QtQuick.Controls.Material 2.0
import Fluid.Core 1.0 as FluidCore
import Fluid.Controls 1.0 as FluidControls
import Liri.Settings 1.0
import QtQuick
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Controls.Material
import Fluid.Core as FluidCore
import Fluid.Controls as FluidControls
import Liri.Settings

FluidControls.ApplicationWindow {
id: window
Expand Down
9 changes: 0 additions & 9 deletions src/app/settings.qrc

This file was deleted.

2 changes: 1 addition & 1 deletion src/app/settingsapp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ void SettingsApp::load(const QString &moduleName)
Q_ARG(QVariant, moduleName));
});

engine->load(QUrl(QLatin1String("qrc:/qml/main.qml")));
engine->load(QUrl(QLatin1String("qrc:/qt/qml/settings/qml/main.qml")));
}

void SettingsApp::handleActivationRequested(const QVariantMap &data)
Expand Down
Loading

0 comments on commit 88b4d43

Please sign in to comment.