diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f61e82a1..abe568511 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Support for `QMessageLogContext` and sending log messages to the Qt message handler. - Serde support for further types: `QByteArray`, `QSet`, `QStringList`, `QVector`, `QUrl` +#### Changed + +- The static methods of `QCoreApplication`, `QGuiApplication`, and `QApplication` no longer use a `self` parameter. + ### Removed - CXX-Qt-build: Interface no longer includes compiler definitions () diff --git a/crates/cxx-qt-lib-extras/include/gui/qapplication.h b/crates/cxx-qt-lib-extras/include/gui/qapplication.h index ec457569a..a6ba714bb 100644 --- a/crates/cxx-qt-lib-extras/include/gui/qapplication.h +++ b/crates/cxx-qt-lib-extras/include/gui/qapplication.h @@ -20,10 +20,55 @@ ::std::unique_ptr qapplicationNew(const QVector& args); void -qapplicationSetFont(QApplication& app, const QFont& font); +qapplicationAddLibraryPath(const QString& path); + +QString +qapplicationApplicationName(); + +QString +qapplicationApplicationVersion(); + +::std::int32_t +qapplicationExec(); + +QStringList +qapplicationLibraryPaths(); + +QString +qapplicationOrganizationDomain(); + +QString +qapplicationOrganizationName(); + +void +qapplicationSetApplicationName(const QString& name); + +void +qapplicationSetApplicationVersion(const QString& version); + +void +qapplicationSetLibraryPaths(const QStringList& paths); + +void +qapplicationSetOrganizationDomain(const QString& domain); + +void +qapplicationSetOrganizationName(const QString& name); + +void +qapplicationRemoveLibraryPath(const QString& path); + +void +qapplicationSetFont(const QFont& font); QFont -qapplicationFont(const QApplication& app); +qapplicationFont(); + +void +qapplicationSetDesktopFileName(const QString& name); + +QString +qapplicationDesktopFileName(); } } diff --git a/crates/cxx-qt-lib-extras/src/gui/qapplication.cpp b/crates/cxx-qt-lib-extras/src/gui/qapplication.cpp index 6a64ad836..d82fbbc06 100644 --- a/crates/cxx-qt-lib-extras/src/gui/qapplication.cpp +++ b/crates/cxx-qt-lib-extras/src/gui/qapplication.cpp @@ -29,15 +29,105 @@ qapplicationNew(const QVector& args) } void -qapplicationSetFont(QApplication& app, const QFont& font) +qapplicationAddLibraryPath(const QString& path) { - app.setFont(font); + QApplication::addLibraryPath(path); +} + +QString +qapplicationApplicationName() +{ + return QApplication::applicationName(); +} + +QString +qapplicationApplicationVersion() +{ + return QApplication::applicationVersion(); +} + +::std::int32_t +qapplicationExec() +{ + return static_cast<::std::int32_t>(QApplication::exec()); +} + +QStringList +qapplicationLibraryPaths() +{ + return QApplication::libraryPaths(); +} + +QString +qapplicationOrganizationDomain() +{ + return QApplication::organizationDomain(); +} + +QString +qapplicationOrganizationName() +{ + return QApplication::organizationName(); +} + +void +qapplicationSetApplicationName(const QString& name) +{ + QApplication::setApplicationName(name); +} + +void +qapplicationSetApplicationVersion(const QString& version) +{ + QApplication::setApplicationVersion(version); +} + +void +qapplicationSetLibraryPaths(const QStringList& paths) +{ + QApplication::setLibraryPaths(paths); +} + +void +qapplicationSetOrganizationDomain(const QString& domain) +{ + QApplication::setOrganizationDomain(domain); +} + +void +qapplicationSetOrganizationName(const QString& name) +{ + QApplication::setOrganizationName(name); +} + +void +qapplicationRemoveLibraryPath(const QString& path) +{ + QApplication::removeLibraryPath(path); +} + +void +qapplicationSetFont(const QFont& font) +{ + QApplication::setFont(font); } QFont -qapplicationFont(const QApplication& app) +qapplicationFont() +{ + return QApplication::font(); +} + +void +qapplicationSetDesktopFileName(const QString& name) +{ + QApplication::setDesktopFileName(name); +} + +QString +qapplicationDesktopFileName() { - return app.font(); + return QApplication::desktopFileName(); } } diff --git a/crates/cxx-qt-lib-extras/src/gui/qapplication.rs b/crates/cxx-qt-lib-extras/src/gui/qapplication.rs index 3cc9a9f7b..1205b26c9 100644 --- a/crates/cxx-qt-lib-extras/src/gui/qapplication.rs +++ b/crates/cxx-qt-lib-extras/src/gui/qapplication.rs @@ -3,7 +3,8 @@ // // SPDX-License-Identifier: MIT OR Apache-2.0 -use core::pin::Pin; +use std::pin::Pin; + use cxx_qt_lib::{QByteArray, QFont, QString, QStringList, QVector}; #[cxx::bridge] @@ -39,49 +40,49 @@ mod ffi { #[doc(hidden)] #[rust_name = "qapplication_add_library_path"] - fn qapplicationAddLibraryPath(app: Pin<&mut QApplication>, path: &QString); + fn qapplicationAddLibraryPath(path: &QString); #[doc(hidden)] #[rust_name = "qapplication_application_name"] - fn qapplicationApplicationName(app: &QApplication) -> QString; + fn qapplicationApplicationName() -> QString; #[doc(hidden)] #[rust_name = "qapplication_remove_library_path"] - fn qapplicationRemoveLibraryPath(app: &QApplication, path: &QString); + fn qapplicationRemoveLibraryPath(path: &QString); #[doc(hidden)] #[rust_name = "qapplication_application_version"] - fn qapplicationApplicationVersion(app: &QApplication) -> QString; + fn qapplicationApplicationVersion() -> QString; #[doc(hidden)] #[rust_name = "qapplication_exec"] - fn qapplicationExec(app: Pin<&mut QApplication>) -> i32; + fn qapplicationExec() -> i32; #[doc(hidden)] #[rust_name = "qapplication_library_paths"] - fn qapplicationLibraryPaths(app: &QApplication) -> QStringList; + fn qapplicationLibraryPaths() -> QStringList; #[doc(hidden)] #[rust_name = "qapplication_organization_domain"] - fn qapplicationOrganizationDomain(app: &QApplication) -> QString; + fn qapplicationOrganizationDomain() -> QString; #[doc(hidden)] #[rust_name = "qapplication_organization_name"] - fn qapplicationOrganizationName(app: &QApplication) -> QString; + fn qapplicationOrganizationName() -> QString; #[doc(hidden)] #[rust_name = "qapplication_set_application_name"] - fn qapplicationSetApplicationName(app: Pin<&mut QApplication>, name: &QString); + fn qapplicationSetApplicationName(name: &QString); #[doc(hidden)] #[rust_name = "qapplication_set_application_version"] - fn qapplicationSetApplicationVersion(app: Pin<&mut QApplication>, version: &QString); + fn qapplicationSetApplicationVersion(version: &QString); #[doc(hidden)] #[rust_name = "qapplication_set_font"] - fn qapplicationSetFont(app: Pin<&mut QApplication>, font: &QFont); + fn qapplicationSetFont(font: &QFont); #[doc(hidden)] #[rust_name = "qapplication_font"] - fn qapplicationFont(app: &QApplication) -> QFont; + fn qapplicationFont() -> QFont; #[doc(hidden)] #[rust_name = "qapplication_set_library_paths"] - fn qapplicationSetLibraryPaths(app: Pin<&mut QApplication>, paths: &QStringList); + fn qapplicationSetLibraryPaths(paths: &QStringList); #[doc(hidden)] #[rust_name = "qapplication_set_organization_domain"] - fn qapplicationSetOrganizationDomain(app: Pin<&mut QApplication>, domain: &QString); + fn qapplicationSetOrganizationDomain(domain: &QString); #[doc(hidden)] #[rust_name = "qapplication_set_organization_name"] - fn qapplicationSetOrganizationName(app: Pin<&mut QApplication>, name: &QString); + fn qapplicationSetOrganizationName(name: &QString); } // QApplication is not a trivial to CXX and is not relocatable in Qt @@ -97,34 +98,37 @@ impl QApplication { /// Prepends path to the beginning of the library path list, /// ensuring that it is searched for libraries first. /// If path is empty or already in the path list, the path list is not changed. - pub fn add_library_path(self: Pin<&mut Self>, path: &QString) { - ffi::qapplication_add_library_path(self, path); + pub fn add_library_path(path: &QString) { + // Locked by Qt's `libraryPathMutex`. + ffi::qapplication_add_library_path(path); } /// The name of this application pub fn application_name(&self) -> QString { - ffi::qapplication_application_name(self) + ffi::qapplication_application_name() } /// The version of this application pub fn application_version(&self) -> QString { - ffi::qapplication_application_version(self) + ffi::qapplication_application_version() } /// Enters the main event loop and waits until exit() is called, /// and then returns the value that was set to exit() (which is 0 if exit() is called via quit()). - pub fn exec(self: Pin<&mut Self>) -> i32 { - ffi::qapplication_exec(self) + pub fn exec(&self) -> i32 { + ffi::qapplication_exec() } /// Returns the default application font. - pub fn font(&self) -> QFont { - ffi::qapplication_font(self) + pub fn font() -> QFont { + // Locked by Qt's `applicationFontMutex`. + ffi::qapplication_font() } /// Returns a list of paths that the application will search when dynamically loading libraries. - pub fn library_paths(&self) -> QStringList { - ffi::qapplication_library_paths(self) + pub fn library_paths() -> QStringList { + // Locked by Qt's `libraryPathMutex`. + ffi::qapplication_library_paths() } /// Initializes the window system and constructs an application object. @@ -154,47 +158,50 @@ impl QApplication { /// The Internet domain of the organization that wrote this application pub fn organization_domain(&self) -> QString { - ffi::qapplication_organization_domain(self) + ffi::qapplication_organization_domain() } /// The name of the organization that wrote this application pub fn organization_name(&self) -> QString { - ffi::qapplication_organization_name(self) + ffi::qapplication_organization_name() } /// Set the name of this application pub fn set_application_name(self: Pin<&mut Self>, name: &QString) { - ffi::qapplication_set_application_name(self, name); + ffi::qapplication_set_application_name(name); } /// Removes path from the library path list. If path is empty or not in the path list, the list is not changed. - pub fn remove_library_path(&self, path: &QString) { - ffi::qapplication_remove_library_path(self, path) + pub fn remove_library_path(path: &QString) { + // Locked by Qt's `libraryPathMutex`. + ffi::qapplication_remove_library_path(path) } /// Set the version of this application pub fn set_application_version(self: Pin<&mut Self>, version: &QString) { - ffi::qapplication_set_application_version(self, version); + ffi::qapplication_set_application_version(version); } /// Changes the default application font to font. - pub fn set_application_font(self: Pin<&mut Self>, font: &QFont) { - ffi::qapplication_set_font(self, font); + pub fn set_application_font(font: &QFont) { + // Locked by Qt's `applicationFontMutex`. + ffi::qapplication_set_font(font); } /// Sets the list of directories to search when loading plugins with QLibrary to paths. /// All existing paths will be deleted and the path list will consist of the paths given in paths and the path to the application. - pub fn set_library_paths(self: Pin<&mut Self>, paths: &QStringList) { - ffi::qapplication_set_library_paths(self, paths); + pub fn set_library_paths(paths: &QStringList) { + // Locked by Qt's `libraryPathMutex`. + ffi::qapplication_set_library_paths(paths); } /// Sets the Internet domain of the organization that wrote this application pub fn set_organization_domain(self: Pin<&mut Self>, domain: &QString) { - ffi::qapplication_set_organization_domain(self, domain); + ffi::qapplication_set_organization_domain(domain); } /// Sets the name of the organization that wrote this application pub fn set_organization_name(self: Pin<&mut Self>, name: &QString) { - ffi::qapplication_set_organization_name(self, name); + ffi::qapplication_set_organization_name(name); } } diff --git a/crates/cxx-qt-lib/include/core/qcoreapplication.h b/crates/cxx-qt-lib/include/core/qcoreapplication.h index f6bd612b8..75007d410 100644 --- a/crates/cxx-qt-lib/include/core/qcoreapplication.h +++ b/crates/cxx-qt-lib/include/core/qcoreapplication.h @@ -36,96 +36,44 @@ class ApplicationArgsData : public QObject ::std::unique_ptr qcoreapplicationNew(const QVector& args); -template void -qapplicationAddLibraryPath(T& app, const QString& path) -{ - app.addLibraryPath(path); -} +qcoreapplicationAddLibraryPath(const QString& path); -template QString -qapplicationApplicationName(const T& app) -{ - return app.applicationName(); -} +qcoreapplicationApplicationName(); -template QString -qapplicationApplicationVersion(const T& app) -{ - return app.applicationVersion(); -} +qcoreapplicationApplicationVersion(); -template ::std::int32_t -qapplicationExec(T& app) -{ - return static_cast<::std::int32_t>(app.exec()); -} +qcoreapplicationExec(); -template QStringList -qapplicationLibraryPaths(const T& app) -{ - return app.libraryPaths(); -} +qcoreapplicationLibraryPaths(); -template QString -qapplicationOrganizationDomain(const T& app) -{ - return app.organizationDomain(); -} +qcoreapplicationOrganizationDomain(); -template QString -qapplicationOrganizationName(const T& app) -{ - return app.organizationName(); -} +qcoreapplicationOrganizationName(); -template void -qapplicationSetApplicationName(T& app, const QString& name) -{ - app.setApplicationName(name); -} +qcoreapplicationSetApplicationName(const QString& name); -template void -qapplicationSetApplicationVersion(T& app, const QString& version) -{ - app.setApplicationVersion(version); -} +qcoreapplicationSetApplicationVersion(const QString& version); -template void -qapplicationSetLibraryPaths(T& app, const QStringList& paths) -{ - app.setLibraryPaths(paths); -} +qcoreapplicationSetLibraryPaths(const QStringList& paths); -template void -qapplicationSetOrganizationDomain(T& app, const QString& domain) -{ - app.setOrganizationDomain(domain); -} +qcoreapplicationSetOrganizationDomain(const QString& domain); -template void -qapplicationSetOrganizationName(T& app, const QString& name) -{ - app.setOrganizationName(name); -} +qcoreapplicationSetOrganizationName(const QString& name); -template void -qapplicationRemoveLibraryPath(T& app, const QString& path) -{ - app.removeLibraryPath(path); -} +qcoreapplicationRemoveLibraryPath(const QString& path); } } diff --git a/crates/cxx-qt-lib/include/gui/qguiapplication.h b/crates/cxx-qt-lib/include/gui/qguiapplication.h index 81ac81a86..415950c07 100644 --- a/crates/cxx-qt-lib/include/gui/qguiapplication.h +++ b/crates/cxx-qt-lib/include/gui/qguiapplication.h @@ -20,10 +20,49 @@ ::std::unique_ptr qguiapplicationNew(const QVector& args); void -qguiapplicationSetFont(QGuiApplication& app, const QFont& font); +qguiapplicationAddLibraryPath(const QString& path); + +QString +qguiapplicationApplicationName(); + +QString +qguiapplicationApplicationVersion(); + +::std::int32_t +qguiapplicationExec(); + +QStringList +qguiapplicationLibraryPaths(); + +QString +qguiapplicationOrganizationDomain(); + +QString +qguiapplicationOrganizationName(); + +void +qguiapplicationSetApplicationName(const QString& name); + +void +qguiapplicationSetApplicationVersion(const QString& version); + +void +qguiapplicationSetLibraryPaths(const QStringList& paths); + +void +qguiapplicationSetOrganizationDomain(const QString& domain); + +void +qguiapplicationSetOrganizationName(const QString& name); + +void +qguiapplicationRemoveLibraryPath(const QString& path); + +void +qguiapplicationSetFont(const QFont& font); QFont -qguiapplicationFont(const QGuiApplication& app); +qguiapplicationFont(); void qguiapplicationSetDesktopFileName(const QString& name); diff --git a/crates/cxx-qt-lib/src/core/qcoreapplication.cpp b/crates/cxx-qt-lib/src/core/qcoreapplication.cpp index d8ca75ffd..f5bf5c0d9 100644 --- a/crates/cxx-qt-lib/src/core/qcoreapplication.cpp +++ b/crates/cxx-qt-lib/src/core/qcoreapplication.cpp @@ -50,5 +50,83 @@ qcoreapplicationNew(const QVector& args) return ptr; } +void +qcoreapplicationAddLibraryPath(const QString& path) +{ + QCoreApplication::addLibraryPath(path); +} + +QString +qcoreapplicationApplicationName() +{ + return QCoreApplication::applicationName(); +} + +QString +qcoreapplicationApplicationVersion() +{ + return QCoreApplication::applicationVersion(); +} + +::std::int32_t +qcoreapplicationExec() +{ + return static_cast<::std::int32_t>(QCoreApplication::exec()); +} + +QStringList +qcoreapplicationLibraryPaths() +{ + return QCoreApplication::libraryPaths(); +} + +QString +qcoreapplicationOrganizationDomain() +{ + return QCoreApplication::organizationDomain(); +} + +QString +qcoreapplicationOrganizationName() +{ + return QCoreApplication::organizationName(); +} + +void +qcoreapplicationSetApplicationName(const QString& name) +{ + QCoreApplication::setApplicationName(name); +} + +void +qcoreapplicationSetApplicationVersion(const QString& version) +{ + QCoreApplication::setApplicationVersion(version); +} + +void +qcoreapplicationSetLibraryPaths(const QStringList& paths) +{ + QCoreApplication::setLibraryPaths(paths); +} + +void +qcoreapplicationSetOrganizationDomain(const QString& domain) +{ + QCoreApplication::setOrganizationDomain(domain); +} + +void +qcoreapplicationSetOrganizationName(const QString& name) +{ + QCoreApplication::setOrganizationName(name); +} + +void +qcoreapplicationRemoveLibraryPath(const QString& path) +{ + QCoreApplication::removeLibraryPath(path); +} + } } diff --git a/crates/cxx-qt-lib/src/core/qcoreapplication.rs b/crates/cxx-qt-lib/src/core/qcoreapplication.rs index 45f144614..d6c8b9271 100644 --- a/crates/cxx-qt-lib/src/core/qcoreapplication.rs +++ b/crates/cxx-qt-lib/src/core/qcoreapplication.rs @@ -4,8 +4,9 @@ // // SPDX-License-Identifier: MIT OR Apache-2.0 +use std::pin::Pin; + use crate::{QByteArray, QString, QStringList, QVector}; -use core::pin::Pin; #[cxx_qt::bridge] mod ffi { @@ -42,43 +43,43 @@ mod ffi { unsafe extern "C++" { #[doc(hidden)] #[rust_name = "qcoreapplication_add_library_path"] - fn qapplicationAddLibraryPath(app: Pin<&mut QCoreApplication>, path: &QString); + fn qcoreapplicationAddLibraryPath(path: &QString); #[doc(hidden)] #[rust_name = "qcoreapplication_application_name"] - fn qapplicationApplicationName(app: &QCoreApplication) -> QString; + fn qcoreapplicationApplicationName() -> QString; #[doc(hidden)] #[rust_name = "qcoreapplication_application_version"] - fn qapplicationApplicationVersion(app: &QCoreApplication) -> QString; + fn qcoreapplicationApplicationVersion() -> QString; #[doc(hidden)] #[rust_name = "qcoreapplication_exec"] - fn qapplicationExec(app: Pin<&mut QCoreApplication>) -> i32; + fn qcoreapplicationExec() -> i32; #[doc(hidden)] #[rust_name = "qcoreapplication_library_paths"] - fn qapplicationLibraryPaths(app: &QCoreApplication) -> QStringList; + fn qcoreapplicationLibraryPaths() -> QStringList; #[doc(hidden)] #[rust_name = "qcoreapplication_organization_domain"] - fn qapplicationOrganizationDomain(app: &QCoreApplication) -> QString; + fn qcoreapplicationOrganizationDomain() -> QString; #[doc(hidden)] #[rust_name = "qcoreapplication_organization_name"] - fn qapplicationOrganizationName(app: &QCoreApplication) -> QString; + fn qcoreapplicationOrganizationName() -> QString; #[doc(hidden)] #[rust_name = "qcoreapplication_remove_library_path"] - fn qapplicationRemoveLibraryPath(app: &QCoreApplication, path: &QString); + fn qcoreapplicationRemoveLibraryPath(path: &QString); #[doc(hidden)] #[rust_name = "qcoreapplication_set_application_name"] - fn qapplicationSetApplicationName(app: Pin<&mut QCoreApplication>, name: &QString); + fn qcoreapplicationSetApplicationName(name: &QString); #[doc(hidden)] #[rust_name = "qcoreapplication_set_application_version"] - fn qapplicationSetApplicationVersion(app: Pin<&mut QCoreApplication>, version: &QString); + fn qcoreapplicationSetApplicationVersion(version: &QString); #[doc(hidden)] #[rust_name = "qcoreapplication_set_library_paths"] - fn qapplicationSetLibraryPaths(app: Pin<&mut QCoreApplication>, paths: &QStringList); + fn qcoreapplicationSetLibraryPaths(paths: &QStringList); #[doc(hidden)] #[rust_name = "qcoreapplication_set_organization_domain"] - fn qapplicationSetOrganizationDomain(app: Pin<&mut QCoreApplication>, domain: &QString); + fn qcoreapplicationSetOrganizationDomain(domain: &QString); #[doc(hidden)] #[rust_name = "qcoreapplication_set_organization_name"] - fn qapplicationSetOrganizationName(app: Pin<&mut QCoreApplication>, name: &QString); + fn qcoreapplicationSetOrganizationName(name: &QString); } // QCoreApplication is not a trivial to CXX and is not relocatable in Qt @@ -94,29 +95,31 @@ impl QCoreApplication { /// Prepends path to the beginning of the library path list, /// ensuring that it is searched for libraries first. /// If path is empty or already in the path list, the path list is not changed. - pub fn add_library_path(self: Pin<&mut Self>, path: &QString) { - ffi::qcoreapplication_add_library_path(self, path); + pub fn add_library_path(path: &QString) { + // Locked by Qt's `libraryPathMutex`. + ffi::qcoreapplication_add_library_path(path); } /// The name of this application pub fn application_name(&self) -> QString { - ffi::qcoreapplication_application_name(self) + ffi::qcoreapplication_application_name() } /// The version of this application pub fn application_version(&self) -> QString { - ffi::qcoreapplication_application_version(self) + ffi::qcoreapplication_application_version() } /// Enters the main event loop and waits until exit() is called, /// and then returns the value that was set to exit() (which is 0 if exit() is called via quit()). - pub fn exec(self: Pin<&mut Self>) -> i32 { - ffi::qcoreapplication_exec(self) + pub fn exec(&self) -> i32 { + ffi::qcoreapplication_exec() } /// Returns a list of paths that the application will search when dynamically loading libraries. - pub fn library_paths(&self) -> QStringList { - ffi::qcoreapplication_library_paths(self) + pub fn library_paths() -> QStringList { + // Locked by Qt's `libraryPathMutex`. + ffi::qcoreapplication_library_paths() } /// Initializes the window system and constructs an application object with command line arguments in args. @@ -145,42 +148,44 @@ impl QCoreApplication { /// The Internet domain of the organization that wrote this application pub fn organization_domain(&self) -> QString { - ffi::qcoreapplication_organization_domain(self) + ffi::qcoreapplication_organization_domain() } /// The name of the organization that wrote this application pub fn organization_name(&self) -> QString { - ffi::qcoreapplication_organization_name(self) + ffi::qcoreapplication_organization_name() } /// Removes path from the library path list. If path is empty or not in the path list, the list is not changed. - pub fn remove_library_path(&self, path: &QString) { - ffi::qcoreapplication_remove_library_path(self, path) + pub fn remove_library_path(path: &QString) { + // Locked by Qt's `libraryPathMutex`. + ffi::qcoreapplication_remove_library_path(path) } /// Set the name of this application pub fn set_application_name(self: Pin<&mut Self>, name: &QString) { - ffi::qcoreapplication_set_application_name(self, name); + ffi::qcoreapplication_set_application_name(name); } /// Set the version of this application pub fn set_application_version(self: Pin<&mut Self>, version: &QString) { - ffi::qcoreapplication_set_application_version(self, version); + ffi::qcoreapplication_set_application_version(version); } /// Sets the list of directories to search when loading plugins with QLibrary to paths. /// All existing paths will be deleted and the path list will consist of the paths given in paths and the path to the application. - pub fn set_library_paths(self: Pin<&mut Self>, paths: &QStringList) { - ffi::qcoreapplication_set_library_paths(self, paths); + pub fn set_library_paths(paths: &QStringList) { + // Locked by Qt's `libraryPathMutex`. + ffi::qcoreapplication_set_library_paths(paths); } /// Sets the Internet domain of the organization that wrote this application pub fn set_organization_domain(self: Pin<&mut Self>, domain: &QString) { - ffi::qcoreapplication_set_organization_domain(self, domain); + ffi::qcoreapplication_set_organization_domain(domain); } /// Sets the name of the organization that wrote this application pub fn set_organization_name(self: Pin<&mut Self>, name: &QString) { - ffi::qcoreapplication_set_organization_name(self, name); + ffi::qcoreapplication_set_organization_name(name); } } diff --git a/crates/cxx-qt-lib/src/gui/qguiapplication.cpp b/crates/cxx-qt-lib/src/gui/qguiapplication.cpp index 961bc9da9..c4314b023 100644 --- a/crates/cxx-qt-lib/src/gui/qguiapplication.cpp +++ b/crates/cxx-qt-lib/src/gui/qguiapplication.cpp @@ -30,15 +30,93 @@ qguiapplicationNew(const QVector& args) } void -qguiapplicationSetFont(QGuiApplication& app, const QFont& font) +qguiapplicationAddLibraryPath(const QString& path) { - app.setFont(font); + QGuiApplication::addLibraryPath(path); +} + +QString +qguiapplicationApplicationName() +{ + return QGuiApplication::applicationName(); +} + +QString +qguiapplicationApplicationVersion() +{ + return QGuiApplication::applicationVersion(); +} + +::std::int32_t +qguiapplicationExec() +{ + return static_cast<::std::int32_t>(QGuiApplication::exec()); +} + +QStringList +qguiapplicationLibraryPaths() +{ + return QGuiApplication::libraryPaths(); +} + +QString +qguiapplicationOrganizationDomain() +{ + return QGuiApplication::organizationDomain(); +} + +QString +qguiapplicationOrganizationName() +{ + return QGuiApplication::organizationName(); +} + +void +qguiapplicationSetApplicationName(const QString& name) +{ + QGuiApplication::setApplicationName(name); +} + +void +qguiapplicationSetApplicationVersion(const QString& version) +{ + QGuiApplication::setApplicationVersion(version); +} + +void +qguiapplicationSetLibraryPaths(const QStringList& paths) +{ + QGuiApplication::setLibraryPaths(paths); +} + +void +qguiapplicationSetOrganizationDomain(const QString& domain) +{ + QGuiApplication::setOrganizationDomain(domain); +} + +void +qguiapplicationSetOrganizationName(const QString& name) +{ + QGuiApplication::setOrganizationName(name); +} + +void +qguiapplicationRemoveLibraryPath(const QString& path) +{ + QGuiApplication::removeLibraryPath(path); +} + +void +qguiapplicationSetFont(const QFont& font) +{ + QGuiApplication::setFont(font); } QFont -qguiapplicationFont(const QGuiApplication& app) +qguiapplicationFont() { - return app.font(); + return QGuiApplication::font(); } void diff --git a/crates/cxx-qt-lib/src/gui/qguiapplication.rs b/crates/cxx-qt-lib/src/gui/qguiapplication.rs index 531a8eee0..963493a1b 100644 --- a/crates/cxx-qt-lib/src/gui/qguiapplication.rs +++ b/crates/cxx-qt-lib/src/gui/qguiapplication.rs @@ -53,49 +53,49 @@ mod ffi { #[doc(hidden)] #[rust_name = "qguiapplication_add_library_path"] - fn qapplicationAddLibraryPath(app: Pin<&mut QGuiApplication>, path: &QString); + fn qguiapplicationAddLibraryPath(path: &QString); #[doc(hidden)] #[rust_name = "qguiapplication_application_name"] - fn qapplicationApplicationName(app: &QGuiApplication) -> QString; + fn qguiapplicationApplicationName() -> QString; #[doc(hidden)] #[rust_name = "qguiapplication_remove_library_path"] - fn qapplicationRemoveLibraryPath(app: &QGuiApplication, path: &QString); + fn qguiapplicationRemoveLibraryPath(path: &QString); #[doc(hidden)] #[rust_name = "qguiapplication_application_version"] - fn qapplicationApplicationVersion(app: &QGuiApplication) -> QString; + fn qguiapplicationApplicationVersion() -> QString; #[doc(hidden)] #[rust_name = "qguiapplication_exec"] - fn qapplicationExec(app: Pin<&mut QGuiApplication>) -> i32; + fn qguiapplicationExec() -> i32; #[doc(hidden)] #[rust_name = "qguiapplication_library_paths"] - fn qapplicationLibraryPaths(app: &QGuiApplication) -> QStringList; + fn qguiapplicationLibraryPaths() -> QStringList; #[doc(hidden)] #[rust_name = "qguiapplication_organization_domain"] - fn qapplicationOrganizationDomain(app: &QGuiApplication) -> QString; + fn qguiapplicationOrganizationDomain() -> QString; #[doc(hidden)] #[rust_name = "qguiapplication_organization_name"] - fn qapplicationOrganizationName(app: &QGuiApplication) -> QString; + fn qguiapplicationOrganizationName() -> QString; #[doc(hidden)] #[rust_name = "qguiapplication_set_application_name"] - fn qapplicationSetApplicationName(app: Pin<&mut QGuiApplication>, name: &QString); + fn qguiapplicationSetApplicationName(name: &QString); #[doc(hidden)] #[rust_name = "qguiapplication_set_application_version"] - fn qapplicationSetApplicationVersion(app: Pin<&mut QGuiApplication>, version: &QString); + fn qguiapplicationSetApplicationVersion(version: &QString); #[doc(hidden)] #[rust_name = "qguiapplication_set_font"] - fn qguiapplicationSetFont(app: Pin<&mut QGuiApplication>, font: &QFont); + fn qguiapplicationSetFont(font: &QFont); #[doc(hidden)] #[rust_name = "qguiapplication_font"] - fn qguiapplicationFont(app: &QGuiApplication) -> QFont; + fn qguiapplicationFont() -> QFont; #[doc(hidden)] #[rust_name = "qguiapplication_set_library_paths"] - fn qapplicationSetLibraryPaths(app: Pin<&mut QGuiApplication>, paths: &QStringList); + fn qguiapplicationSetLibraryPaths(paths: &QStringList); #[doc(hidden)] #[rust_name = "qguiapplication_set_organization_domain"] - fn qapplicationSetOrganizationDomain(app: Pin<&mut QGuiApplication>, domain: &QString); + fn qguiapplicationSetOrganizationDomain(domain: &QString); #[doc(hidden)] #[rust_name = "qguiapplication_set_organization_name"] - fn qapplicationSetOrganizationName(app: Pin<&mut QGuiApplication>, name: &QString); + fn qguiapplicationSetOrganizationName(name: &QString); #[doc(hidden)] #[rust_name = "qguiapplication_set_desktop_file_name"] fn qguiapplicationSetDesktopFileName(name: &QString); @@ -126,34 +126,37 @@ impl QGuiApplication { /// Prepends path to the beginning of the library path list, /// ensuring that it is searched for libraries first. /// If path is empty or already in the path list, the path list is not changed. - pub fn add_library_path(self: Pin<&mut Self>, path: &QString) { - ffi::qguiapplication_add_library_path(self, path); + pub fn add_library_path(path: &QString) { + // Locked by Qt's `libraryPathMutex`. + ffi::qguiapplication_add_library_path(path); } /// The name of this application pub fn application_name(&self) -> QString { - ffi::qguiapplication_application_name(self) + ffi::qguiapplication_application_name() } /// The version of this application pub fn application_version(&self) -> QString { - ffi::qguiapplication_application_version(self) + ffi::qguiapplication_application_version() } /// Enters the main event loop and waits until exit() is called, /// and then returns the value that was set to exit() (which is 0 if exit() is called via quit()). - pub fn exec(self: Pin<&mut Self>) -> i32 { - ffi::qguiapplication_exec(self) + pub fn exec(&self) -> i32 { + ffi::qguiapplication_exec() } /// Returns the default application font. - pub fn font(&self) -> QFont { - ffi::qguiapplication_font(self) + pub fn font() -> QFont { + // Locked by Qt's `applicationFontMutex`. + ffi::qguiapplication_font() } /// Returns a list of paths that the application will search when dynamically loading libraries. - pub fn library_paths(&self) -> QStringList { - ffi::qguiapplication_library_paths(self) + pub fn library_paths() -> QStringList { + // Locked by Qt's `libraryPathMutex`. + ffi::qguiapplication_library_paths() } /// Initializes the window system and constructs an application object. @@ -183,57 +186,60 @@ impl QGuiApplication { /// The Internet domain of the organization that wrote this application pub fn organization_domain(&self) -> QString { - ffi::qguiapplication_organization_domain(self) + ffi::qguiapplication_organization_domain() } /// The name of the organization that wrote this application pub fn organization_name(&self) -> QString { - ffi::qguiapplication_organization_name(self) + ffi::qguiapplication_organization_name() } /// Set the name of this application pub fn set_application_name(self: Pin<&mut Self>, name: &QString) { - ffi::qguiapplication_set_application_name(self, name); + ffi::qguiapplication_set_application_name(name); } /// Removes path from the library path list. If path is empty or not in the path list, the list is not changed. - pub fn remove_library_path(&self, path: &QString) { - ffi::qguiapplication_remove_library_path(self, path) + pub fn remove_library_path(path: &QString) { + // Locked by Qt's `libraryPathMutex`. + ffi::qguiapplication_remove_library_path(path) } /// Set the version of this application pub fn set_application_version(self: Pin<&mut Self>, version: &QString) { - ffi::qguiapplication_set_application_version(self, version); + ffi::qguiapplication_set_application_version(version); } /// Changes the default application font to font. - pub fn set_application_font(self: Pin<&mut Self>, font: &QFont) { - ffi::qguiapplication_set_font(self, font); + pub fn set_application_font(font: &QFont) { + // Locked by Qt's `applicationFontMutex`. + ffi::qguiapplication_set_font(font); } /// Sets the list of directories to search when loading plugins with QLibrary to paths. /// All existing paths will be deleted and the path list will consist of the paths given in paths and the path to the application. - pub fn set_library_paths(self: Pin<&mut Self>, paths: &QStringList) { - ffi::qguiapplication_set_library_paths(self, paths); + pub fn set_library_paths(paths: &QStringList) { + // Locked by Qt's `libraryPathMutex`. + ffi::qguiapplication_set_library_paths(paths); } /// Sets the Internet domain of the organization that wrote this application pub fn set_organization_domain(self: Pin<&mut Self>, domain: &QString) { - ffi::qguiapplication_set_organization_domain(self, domain); + ffi::qguiapplication_set_organization_domain(domain); } /// Sets the name of the organization that wrote this application pub fn set_organization_name(self: Pin<&mut Self>, name: &QString) { - ffi::qguiapplication_set_organization_name(self, name); + ffi::qguiapplication_set_organization_name(name); } /// Changes the desktop file name to name. - pub fn set_desktop_file_name(name: &QString) { + pub fn set_desktop_file_name(self: Pin<&mut Self>, name: &QString) { ffi::qguiapplication_set_desktop_file_name(name); } /// Returns the application desktop file name. - pub fn desktop_file_name() -> QString { + pub fn desktop_file_name(&self) -> QString { ffi::qguiapplication_desktop_file_name() } diff --git a/examples/cargo_without_cmake/src/main.rs b/examples/cargo_without_cmake/src/main.rs index 12bab6719..009bbe39e 100644 --- a/examples/cargo_without_cmake/src/main.rs +++ b/examples/cargo_without_cmake/src/main.rs @@ -21,7 +21,7 @@ use cxx_qt_lib::{QGuiApplication, QQmlApplicationEngine, QUrl}; // ANCHOR: book_cargo_rust_main fn main() { // Create the application and engine - let mut app = QGuiApplication::new(); + let app = QGuiApplication::new(); let mut engine = QQmlApplicationEngine::new(); // Load the QML path into the engine @@ -39,9 +39,6 @@ fn main() { .release(); } - // Start the app - if let Some(app) = app.as_mut() { - app.exec(); - } + app.exec(); } // ANCHOR_END: book_cargo_rust_main diff --git a/examples/qml_basics/src/main.rs b/examples/qml_basics/src/main.rs index 01c86c096..a32ff7ddb 100644 --- a/examples/qml_basics/src/main.rs +++ b/examples/qml_basics/src/main.rs @@ -77,14 +77,12 @@ impl qobject::Greeter { fn main() { use cxx_qt_lib::{QGuiApplication, QQmlApplicationEngine, QUrl}; - let mut app = QGuiApplication::new(); + let app = QGuiApplication::new(); let mut engine = QQmlApplicationEngine::new(); if let Some(engine) = engine.as_mut() { engine.load(&QUrl::from("qrc:/qt/qml/com/kdab/tutorial/qml/main.qml")); } - if let Some(app) = app.as_mut() { - app.exec(); - } + app.exec(); } diff --git a/examples/qml_multi_crates/rust/main/src/main.rs b/examples/qml_multi_crates/rust/main/src/main.rs index d39cd93c3..32832fa4e 100644 --- a/examples/qml_multi_crates/rust/main/src/main.rs +++ b/examples/qml_multi_crates/rust/main/src/main.rs @@ -12,7 +12,7 @@ fn main() { cxx_qt::init_crate!(qml_multi_crates); // Create the application and engine - let mut app = QGuiApplication::new(); + let app = QGuiApplication::new(); let mut engine = QQmlApplicationEngine::new(); // Load the QML path into the engine @@ -30,10 +30,7 @@ fn main() { .release(); } - // Start the app - if let Some(app) = app.as_mut() { - app.exec(); - } + app.exec(); } #[cfg(test)] diff --git a/examples/todo_app/src/main.rs b/examples/todo_app/src/main.rs index d83de6320..407112759 100644 --- a/examples/todo_app/src/main.rs +++ b/examples/todo_app/src/main.rs @@ -8,14 +8,12 @@ mod todo_list; use cxx_qt_lib::{QGuiApplication, QQmlApplicationEngine, QUrl}; fn main() { - let mut app = QGuiApplication::new(); + let app = QGuiApplication::new(); let mut engine = QQmlApplicationEngine::new(); if let Some(engine) = engine.as_mut() { engine.load(&QUrl::from("qrc:/qt/qml/com/kdab/todo/qml/main.qml")); } - if let Some(app) = app.as_mut() { - app.exec(); - } + app.exec(); }