From 4280a25c2d3797577447cc32ae1da581f07b36b6 Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Thu, 6 Mar 2025 12:34:41 -0800 Subject: [PATCH 1/6] cxx-qt-lib: remove self parameter from QCoreApplication static methods --- CHANGELOG.md | 4 + .../include/core/qcoreapplication.h | 78 +++--------------- .../cxx-qt-lib/src/core/qcoreapplication.cpp | 78 ++++++++++++++++++ .../cxx-qt-lib/src/core/qcoreapplication.rs | 79 +++++++++---------- 4 files changed, 134 insertions(+), 105 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a87b13c08..da70649f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add wrappers for up and down casting, for all types which inherit from QObject, available for &T, &mut T and Pin<&mut T> - Support for `QMessageLogContext` and sending log messages to the Qt message handler. +#### 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/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/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 99b888577..6615f6677 100644 --- a/crates/cxx-qt-lib/src/core/qcoreapplication.rs +++ b/crates/cxx-qt-lib/src/core/qcoreapplication.rs @@ -5,7 +5,6 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 use crate::{QByteArray, QString, QStringList, QVector}; -use core::pin::Pin; #[cxx::bridge] mod ffi { @@ -35,43 +34,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 @@ -87,29 +86,29 @@ 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) { + ffi::qcoreapplication_add_library_path(path); } /// The name of this application - pub fn application_name(&self) -> QString { - ffi::qcoreapplication_application_name(self) + pub fn application_name() -> QString { + ffi::qcoreapplication_application_name() } /// The version of this application - pub fn application_version(&self) -> QString { - ffi::qcoreapplication_application_version(self) + pub fn application_version() -> QString { + 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() -> 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 { + ffi::qcoreapplication_library_paths() } /// Initializes the window system and constructs an application object with command line arguments in args. @@ -137,43 +136,43 @@ impl QCoreApplication { } /// The Internet domain of the organization that wrote this application - pub fn organization_domain(&self) -> QString { - ffi::qcoreapplication_organization_domain(self) + pub fn organization_domain() -> QString { + ffi::qcoreapplication_organization_domain() } /// The name of the organization that wrote this application - pub fn organization_name(&self) -> QString { - ffi::qcoreapplication_organization_name(self) + pub fn organization_name() -> QString { + 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) { + 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); + pub fn set_application_name(name: &QString) { + 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); + pub fn set_application_version(version: &QString) { + 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) { + 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); + pub fn set_organization_domain(domain: &QString) { + 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); + pub fn set_organization_name(name: &QString) { + ffi::qcoreapplication_set_organization_name(name); } } From 895e0e4857a0255049e7cb852f9b9d530429ace3 Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Thu, 6 Mar 2025 12:34:48 -0800 Subject: [PATCH 2/6] cxx-qt-lib: remove self parameter from QGuiApplication static methods --- .../cxx-qt-lib/include/gui/qguiapplication.h | 43 ++++++++- crates/cxx-qt-lib/src/gui/qguiapplication.cpp | 86 +++++++++++++++++- crates/cxx-qt-lib/src/gui/qguiapplication.rs | 91 +++++++++---------- 3 files changed, 168 insertions(+), 52 deletions(-) diff --git a/crates/cxx-qt-lib/include/gui/qguiapplication.h b/crates/cxx-qt-lib/include/gui/qguiapplication.h index 7eb58e731..088cfc759 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/gui/qguiapplication.cpp b/crates/cxx-qt-lib/src/gui/qguiapplication.cpp index 1dc45679f..aeaa10da7 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 f23abe12f..d0731d3c7 100644 --- a/crates/cxx-qt-lib/src/gui/qguiapplication.rs +++ b/crates/cxx-qt-lib/src/gui/qguiapplication.rs @@ -5,7 +5,6 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 use crate::{QByteArray, QFont, QString, QStringList, QVector}; -use core::pin::Pin; use cxx_qt::Upcast; #[cxx::bridge] @@ -58,49 +57,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); @@ -134,34 +133,34 @@ 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) { + ffi::qguiapplication_add_library_path(path); } /// The name of this application - pub fn application_name(&self) -> QString { - ffi::qguiapplication_application_name(self) + pub fn application_name() -> QString { + ffi::qguiapplication_application_name() } /// The version of this application - pub fn application_version(&self) -> QString { - ffi::qguiapplication_application_version(self) + pub fn application_version() -> QString { + 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() -> i32 { + ffi::qguiapplication_exec() } /// Returns the default application font. - pub fn font(&self) -> QFont { - ffi::qguiapplication_font(self) + pub fn font() -> QFont { + 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 { + ffi::qguiapplication_library_paths() } /// Initializes the window system and constructs an application object. @@ -190,49 +189,49 @@ impl QGuiApplication { } /// The Internet domain of the organization that wrote this application - pub fn organization_domain(&self) -> QString { - ffi::qguiapplication_organization_domain(self) + pub fn organization_domain() -> QString { + ffi::qguiapplication_organization_domain() } /// The name of the organization that wrote this application - pub fn organization_name(&self) -> QString { - ffi::qguiapplication_organization_name(self) + pub fn organization_name() -> QString { + 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); + pub fn set_application_name(name: &QString) { + 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) { + 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); + pub fn set_application_version(version: &QString) { + 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) { + 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) { + 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); + pub fn set_organization_domain(domain: &QString) { + 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); + pub fn set_organization_name(name: &QString) { + ffi::qguiapplication_set_organization_name(name); } /// Changes the desktop file name to name. From ba41d92ec3ac561243fb7053464cf3d8fec6b4d5 Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Thu, 6 Mar 2025 12:34:58 -0800 Subject: [PATCH 3/6] cxx-qt-lib-extras: remove self parameter from QApplication static methods --- .../include/gui/qapplication.h | 49 +++++++++- .../src/gui/qapplication.cpp | 98 ++++++++++++++++++- .../cxx-qt-lib-extras/src/gui/qapplication.rs | 91 +++++++++-------- 3 files changed, 186 insertions(+), 52 deletions(-) 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..4913f9e75 100644 --- a/crates/cxx-qt-lib-extras/src/gui/qapplication.rs +++ b/crates/cxx-qt-lib-extras/src/gui/qapplication.rs @@ -3,7 +3,6 @@ // // SPDX-License-Identifier: MIT OR Apache-2.0 -use core::pin::Pin; use cxx_qt_lib::{QByteArray, QFont, QString, QStringList, QVector}; #[cxx::bridge] @@ -39,49 +38,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 +96,34 @@ 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) { + ffi::qapplication_add_library_path(path); } /// The name of this application - pub fn application_name(&self) -> QString { - ffi::qapplication_application_name(self) + pub fn application_name() -> QString { + ffi::qapplication_application_name() } /// The version of this application - pub fn application_version(&self) -> QString { - ffi::qapplication_application_version(self) + pub fn application_version() -> QString { + 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() -> i32 { + ffi::qapplication_exec() } /// Returns the default application font. - pub fn font(&self) -> QFont { - ffi::qapplication_font(self) + pub fn font() -> QFont { + 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 { + ffi::qapplication_library_paths() } /// Initializes the window system and constructs an application object. @@ -153,48 +152,48 @@ impl QApplication { } /// The Internet domain of the organization that wrote this application - pub fn organization_domain(&self) -> QString { - ffi::qapplication_organization_domain(self) + pub fn organization_domain() -> QString { + ffi::qapplication_organization_domain() } /// The name of the organization that wrote this application - pub fn organization_name(&self) -> QString { - ffi::qapplication_organization_name(self) + pub fn organization_name() -> QString { + 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); + pub fn set_application_name(name: &QString) { + 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) { + 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); + pub fn set_application_version(version: &QString) { + 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) { + 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) { + 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); + pub fn set_organization_domain(domain: &QString) { + 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); + pub fn set_organization_name(name: &QString) { + ffi::qapplication_set_organization_name(name); } } From bc1a526662e2b7a6b2669f9e661bda32f63b4e9a Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Thu, 6 Mar 2025 14:59:41 -0800 Subject: [PATCH 4/6] cxx-qt-lib: update tests for Q*Application --- tests/qt_types_standalone/rust/src/qcoreapplication.rs | 4 ++-- tests/qt_types_standalone/rust/src/qguiapplication.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/qt_types_standalone/rust/src/qcoreapplication.rs b/tests/qt_types_standalone/rust/src/qcoreapplication.rs index 7add143fe..348bbb714 100644 --- a/tests/qt_types_standalone/rust/src/qcoreapplication.rs +++ b/tests/qt_types_standalone/rust/src/qcoreapplication.rs @@ -21,11 +21,11 @@ mod qcoreapplication_cxx { fn construct_qcoreapplication() -> cxx::UniquePtr { let mut app = QCoreApplication::new(); if let Some(app) = app.as_mut() { - app.set_application_name(&QString::from("kdab")); + QCoreApplication::set_application_name(&QString::from("kdab")); } app } fn read_qcoreapplication(app: &QCoreApplication) -> bool { - app.application_name().to_string() == "kdab" + QCoreApplication::application_name().to_string() == "kdab" } diff --git a/tests/qt_types_standalone/rust/src/qguiapplication.rs b/tests/qt_types_standalone/rust/src/qguiapplication.rs index 677123bd5..ca4cdf05b 100644 --- a/tests/qt_types_standalone/rust/src/qguiapplication.rs +++ b/tests/qt_types_standalone/rust/src/qguiapplication.rs @@ -21,11 +21,11 @@ mod qguiapplication_cxx { fn construct_qguiapplication() -> cxx::UniquePtr { let mut app = QGuiApplication::new(); if let Some(app) = app.as_mut() { - app.set_application_name(&QString::from("kdab")); + QGuiApplication::set_application_name(&QString::from("kdab")); } app } fn read_qguiapplication(app: &QGuiApplication) -> bool { - app.application_name().to_string() == "kdab" + QGuiApplication::application_name().to_string() == "kdab" } From 58d5b3f85aba99b28e0e0be08e9eed4fc3b98c81 Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Thu, 6 Mar 2025 17:44:34 -0800 Subject: [PATCH 5/6] cxx-qt-lib: add &self parameter to ::exec() --- crates/cxx-qt-lib-extras/src/gui/qapplication.rs | 2 +- crates/cxx-qt-lib/src/core/qcoreapplication.rs | 2 +- crates/cxx-qt-lib/src/gui/qguiapplication.rs | 2 +- examples/cargo_without_cmake/src/main.rs | 7 ++----- examples/qml_basics/src/main.rs | 6 ++---- examples/qml_multi_crates/rust/main/src/main.rs | 7 ++----- examples/todo_app/src/main.rs | 6 ++---- tests/qt_types_standalone/rust/src/qcoreapplication.rs | 8 +++----- tests/qt_types_standalone/rust/src/qguiapplication.rs | 8 +++----- 9 files changed, 17 insertions(+), 31 deletions(-) diff --git a/crates/cxx-qt-lib-extras/src/gui/qapplication.rs b/crates/cxx-qt-lib-extras/src/gui/qapplication.rs index 4913f9e75..fd5147f1e 100644 --- a/crates/cxx-qt-lib-extras/src/gui/qapplication.rs +++ b/crates/cxx-qt-lib-extras/src/gui/qapplication.rs @@ -112,7 +112,7 @@ impl QApplication { /// 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() -> i32 { + pub fn exec(&self) -> i32 { ffi::qapplication_exec() } diff --git a/crates/cxx-qt-lib/src/core/qcoreapplication.rs b/crates/cxx-qt-lib/src/core/qcoreapplication.rs index 6615f6677..1626a3a96 100644 --- a/crates/cxx-qt-lib/src/core/qcoreapplication.rs +++ b/crates/cxx-qt-lib/src/core/qcoreapplication.rs @@ -102,7 +102,7 @@ impl QCoreApplication { /// 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() -> i32 { + pub fn exec(&self) -> i32 { ffi::qcoreapplication_exec() } diff --git a/crates/cxx-qt-lib/src/gui/qguiapplication.rs b/crates/cxx-qt-lib/src/gui/qguiapplication.rs index d0731d3c7..52e2ce2b8 100644 --- a/crates/cxx-qt-lib/src/gui/qguiapplication.rs +++ b/crates/cxx-qt-lib/src/gui/qguiapplication.rs @@ -149,7 +149,7 @@ impl QGuiApplication { /// 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() -> i32 { + pub fn exec(&self) -> i32 { ffi::qguiapplication_exec() } 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(); } diff --git a/tests/qt_types_standalone/rust/src/qcoreapplication.rs b/tests/qt_types_standalone/rust/src/qcoreapplication.rs index 348bbb714..6b63cea9e 100644 --- a/tests/qt_types_standalone/rust/src/qcoreapplication.rs +++ b/tests/qt_types_standalone/rust/src/qcoreapplication.rs @@ -19,13 +19,11 @@ mod qcoreapplication_cxx { } fn construct_qcoreapplication() -> cxx::UniquePtr { - let mut app = QCoreApplication::new(); - if let Some(app) = app.as_mut() { - QCoreApplication::set_application_name(&QString::from("kdab")); - } + let app = QCoreApplication::new(); + QCoreApplication::set_application_name(&QString::from("kdab")); app } -fn read_qcoreapplication(app: &QCoreApplication) -> bool { +fn read_qcoreapplication(_app: &QCoreApplication) -> bool { QCoreApplication::application_name().to_string() == "kdab" } diff --git a/tests/qt_types_standalone/rust/src/qguiapplication.rs b/tests/qt_types_standalone/rust/src/qguiapplication.rs index ca4cdf05b..f4b3844df 100644 --- a/tests/qt_types_standalone/rust/src/qguiapplication.rs +++ b/tests/qt_types_standalone/rust/src/qguiapplication.rs @@ -19,13 +19,11 @@ mod qguiapplication_cxx { } fn construct_qguiapplication() -> cxx::UniquePtr { - let mut app = QGuiApplication::new(); - if let Some(app) = app.as_mut() { - QGuiApplication::set_application_name(&QString::from("kdab")); - } + let app = QGuiApplication::new(); + QGuiApplication::set_application_name(&QString::from("kdab")); app } -fn read_qguiapplication(app: &QGuiApplication) -> bool { +fn read_qguiapplication(_app: &QGuiApplication) -> bool { QGuiApplication::application_name().to_string() == "kdab" } From 0f05332307335a8c9dae655965e7c42a94ce0bdb Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Sat, 29 Mar 2025 10:34:54 -0700 Subject: [PATCH 6/6] cxx-qt-lib: add self parameters back to Q*Application methods w/o mutex --- .../cxx-qt-lib-extras/src/gui/qapplication.rs | 24 ++++++++++------ .../cxx-qt-lib/src/core/qcoreapplication.rs | 22 +++++++++------ crates/cxx-qt-lib/src/gui/qguiapplication.rs | 28 ++++++++++++------- .../rust/src/qcoreapplication.rs | 10 ++++--- .../rust/src/qguiapplication.rs | 10 ++++--- 5 files changed, 60 insertions(+), 34 deletions(-) diff --git a/crates/cxx-qt-lib-extras/src/gui/qapplication.rs b/crates/cxx-qt-lib-extras/src/gui/qapplication.rs index fd5147f1e..1205b26c9 100644 --- a/crates/cxx-qt-lib-extras/src/gui/qapplication.rs +++ b/crates/cxx-qt-lib-extras/src/gui/qapplication.rs @@ -3,6 +3,8 @@ // // SPDX-License-Identifier: MIT OR Apache-2.0 +use std::pin::Pin; + use cxx_qt_lib::{QByteArray, QFont, QString, QStringList, QVector}; #[cxx::bridge] @@ -97,16 +99,17 @@ impl QApplication { /// 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(path: &QString) { + // Locked by Qt's `libraryPathMutex`. ffi::qapplication_add_library_path(path); } /// The name of this application - pub fn application_name() -> QString { + pub fn application_name(&self) -> QString { ffi::qapplication_application_name() } /// The version of this application - pub fn application_version() -> QString { + pub fn application_version(&self) -> QString { ffi::qapplication_application_version() } @@ -118,11 +121,13 @@ impl QApplication { /// Returns the default application font. 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() -> QStringList { + // Locked by Qt's `libraryPathMutex`. ffi::qapplication_library_paths() } @@ -152,48 +157,51 @@ impl QApplication { } /// The Internet domain of the organization that wrote this application - pub fn organization_domain() -> QString { + pub fn organization_domain(&self) -> QString { ffi::qapplication_organization_domain() } /// The name of the organization that wrote this application - pub fn organization_name() -> QString { + pub fn organization_name(&self) -> QString { ffi::qapplication_organization_name() } /// Set the name of this application - pub fn set_application_name(name: &QString) { + pub fn set_application_name(self: Pin<&mut Self>, name: &QString) { 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(path: &QString) { + // Locked by Qt's `libraryPathMutex`. ffi::qapplication_remove_library_path(path) } /// Set the version of this application - pub fn set_application_version(version: &QString) { + pub fn set_application_version(self: Pin<&mut Self>, version: &QString) { ffi::qapplication_set_application_version(version); } /// Changes the default application font to 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(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(domain: &QString) { + pub fn set_organization_domain(self: Pin<&mut Self>, domain: &QString) { ffi::qapplication_set_organization_domain(domain); } /// Sets the name of the organization that wrote this application - pub fn set_organization_name(name: &QString) { + pub fn set_organization_name(self: Pin<&mut Self>, name: &QString) { ffi::qapplication_set_organization_name(name); } } diff --git a/crates/cxx-qt-lib/src/core/qcoreapplication.rs b/crates/cxx-qt-lib/src/core/qcoreapplication.rs index 355284665..151586967 100644 --- a/crates/cxx-qt-lib/src/core/qcoreapplication.rs +++ b/crates/cxx-qt-lib/src/core/qcoreapplication.rs @@ -4,6 +4,8 @@ // // SPDX-License-Identifier: MIT OR Apache-2.0 +use std::pin::Pin; + use crate::{QByteArray, QString, QStringList, QVector}; #[cxx_qt::bridge] @@ -94,16 +96,17 @@ impl QCoreApplication { /// 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(path: &QString) { + // Locked by Qt's `libraryPathMutex`. ffi::qcoreapplication_add_library_path(path); } /// The name of this application - pub fn application_name() -> QString { + pub fn application_name(&self) -> QString { ffi::qcoreapplication_application_name() } /// The version of this application - pub fn application_version() -> QString { + pub fn application_version(&self) -> QString { ffi::qcoreapplication_application_version() } @@ -115,6 +118,7 @@ impl QCoreApplication { /// Returns a list of paths that the application will search when dynamically loading libraries. pub fn library_paths() -> QStringList { + // Locked by Qt's `libraryPathMutex`. ffi::qcoreapplication_library_paths() } @@ -143,43 +147,45 @@ impl QCoreApplication { } /// The Internet domain of the organization that wrote this application - pub fn organization_domain() -> QString { + pub fn organization_domain(&self) -> QString { ffi::qcoreapplication_organization_domain() } /// The name of the organization that wrote this application - pub fn organization_name() -> QString { + pub fn organization_name(&self) -> QString { 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(path: &QString) { + // Locked by Qt's `libraryPathMutex`. ffi::qcoreapplication_remove_library_path(path) } /// Set the name of this application - pub fn set_application_name(name: &QString) { + pub fn set_application_name(self: Pin<&mut Self>, name: &QString) { ffi::qcoreapplication_set_application_name(name); } /// Set the version of this application - pub fn set_application_version(version: &QString) { + pub fn set_application_version(self: Pin<&mut Self>, version: &QString) { 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(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(domain: &QString) { + pub fn set_organization_domain(self: Pin<&mut Self>, domain: &QString) { ffi::qcoreapplication_set_organization_domain(domain); } /// Sets the name of the organization that wrote this application - pub fn set_organization_name(name: &QString) { + pub fn set_organization_name(self: Pin<&mut Self>, name: &QString) { ffi::qcoreapplication_set_organization_name(name); } } diff --git a/crates/cxx-qt-lib/src/gui/qguiapplication.rs b/crates/cxx-qt-lib/src/gui/qguiapplication.rs index 142495503..42eee45e0 100644 --- a/crates/cxx-qt-lib/src/gui/qguiapplication.rs +++ b/crates/cxx-qt-lib/src/gui/qguiapplication.rs @@ -4,6 +4,8 @@ // // SPDX-License-Identifier: MIT OR Apache-2.0 +use std::pin::Pin; + use crate::{QByteArray, QFont, QString, QStringList, QVector}; #[cxx_qt::bridge] @@ -111,16 +113,17 @@ impl QGuiApplication { /// 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(path: &QString) { + // Locked by Qt's `libraryPathMutex`. ffi::qguiapplication_add_library_path(path); } /// The name of this application - pub fn application_name() -> QString { + pub fn application_name(&self) -> QString { ffi::qguiapplication_application_name() } /// The version of this application - pub fn application_version() -> QString { + pub fn application_version(&self) -> QString { ffi::qguiapplication_application_version() } @@ -132,11 +135,13 @@ impl QGuiApplication { /// Returns the default application font. 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() -> QStringList { + // Locked by Qt's `libraryPathMutex`. ffi::qguiapplication_library_paths() } @@ -166,58 +171,61 @@ impl QGuiApplication { } /// The Internet domain of the organization that wrote this application - pub fn organization_domain() -> QString { + pub fn organization_domain(&self) -> QString { ffi::qguiapplication_organization_domain() } /// The name of the organization that wrote this application - pub fn organization_name() -> QString { + pub fn organization_name(&self) -> QString { ffi::qguiapplication_organization_name() } /// Set the name of this application - pub fn set_application_name(name: &QString) { + pub fn set_application_name(self: Pin<&mut Self>, name: &QString) { 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(path: &QString) { + // Locked by Qt's `libraryPathMutex`. ffi::qguiapplication_remove_library_path(path) } /// Set the version of this application - pub fn set_application_version(version: &QString) { + pub fn set_application_version(self: Pin<&mut Self>, version: &QString) { ffi::qguiapplication_set_application_version(version); } /// Changes the default application font to 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(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(domain: &QString) { + pub fn set_organization_domain(self: Pin<&mut Self>, domain: &QString) { ffi::qguiapplication_set_organization_domain(domain); } /// Sets the name of the organization that wrote this application - pub fn set_organization_name(name: &QString) { + pub fn set_organization_name(self: Pin<&mut Self>, name: &QString) { 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/tests/qt_types_standalone/rust/src/qcoreapplication.rs b/tests/qt_types_standalone/rust/src/qcoreapplication.rs index 6b63cea9e..7add143fe 100644 --- a/tests/qt_types_standalone/rust/src/qcoreapplication.rs +++ b/tests/qt_types_standalone/rust/src/qcoreapplication.rs @@ -19,11 +19,13 @@ mod qcoreapplication_cxx { } fn construct_qcoreapplication() -> cxx::UniquePtr { - let app = QCoreApplication::new(); - QCoreApplication::set_application_name(&QString::from("kdab")); + let mut app = QCoreApplication::new(); + if let Some(app) = app.as_mut() { + app.set_application_name(&QString::from("kdab")); + } app } -fn read_qcoreapplication(_app: &QCoreApplication) -> bool { - QCoreApplication::application_name().to_string() == "kdab" +fn read_qcoreapplication(app: &QCoreApplication) -> bool { + app.application_name().to_string() == "kdab" } diff --git a/tests/qt_types_standalone/rust/src/qguiapplication.rs b/tests/qt_types_standalone/rust/src/qguiapplication.rs index f4b3844df..677123bd5 100644 --- a/tests/qt_types_standalone/rust/src/qguiapplication.rs +++ b/tests/qt_types_standalone/rust/src/qguiapplication.rs @@ -19,11 +19,13 @@ mod qguiapplication_cxx { } fn construct_qguiapplication() -> cxx::UniquePtr { - let app = QGuiApplication::new(); - QGuiApplication::set_application_name(&QString::from("kdab")); + let mut app = QGuiApplication::new(); + if let Some(app) = app.as_mut() { + app.set_application_name(&QString::from("kdab")); + } app } -fn read_qguiapplication(_app: &QGuiApplication) -> bool { - QGuiApplication::application_name().to_string() == "kdab" +fn read_qguiapplication(app: &QGuiApplication) -> bool { + app.application_name().to_string() == "kdab" }