Skip to content

Commit 3da8fe7

Browse files
committed
log: install_message_handler takes Option<fn> + docs
This is breaking change for old code.
1 parent bc6122e commit 3da8fe7

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

qmetaobject/src/log.rs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,22 @@ impl From<Level> for QtMsgType {
123123
}
124124
}
125125

126-
/// Wrap qt's qInstallMessageHandler.
127-
/// Useful in order to forward the log to a rust logging framework
128-
pub fn install_message_handler(logger: extern "C" fn(QtMsgType, &QMessageLogContext, &QString)) {
129-
cpp!(unsafe [logger as "QtMessageHandler"] { qInstallMessageHandler(logger); })
126+
/// Wrapper for [`QtMessageHandler`][] typedef.
127+
///
128+
/// [`QtMessageHandler`]: https://doc.qt.io/qt-5/qtglobal.html#QtMessageHandler-typedef
129+
pub type QtMessageHandler = Option<extern "C" fn(QtMsgType, &QMessageLogContext, &QString)>;
130+
131+
/// Wrapper for [`qInstallMessageHandler`] function.
132+
///
133+
/// # Wrapper-specific behavior
134+
///
135+
/// To restore the message handler, call `install_message_handler(None)`.
136+
///
137+
/// [`qInstallMessageHandler`]: https://doc.qt.io/qt-5/qtglobal.html#qInstallMessageHandler
138+
pub fn install_message_handler(logger: QtMessageHandler) -> QtMessageHandler {
139+
cpp!(unsafe [logger as "QtMessageHandler"] -> QtMessageHandler as "QtMessageHandler" {
140+
return qInstallMessageHandler(logger);
141+
})
130142
}
131143

132144
// Logging middleware, pass-though, or just proxy function.
@@ -188,7 +200,7 @@ pub fn init_qt_to_rust() {
188200
// The reason it is named so complex instead of simple `init` is that
189201
// such descriptive name is future-proof. Consider if someone someday
190202
// would want to implement the opposite forwarding logger?
191-
install_message_handler(log_capture);
203+
install_message_handler(Some(log_capture));
192204
}
193205

194206
#[cfg(test)]

qmetaobject/tests/common/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ pub fn do_test<T: QObject + Sized>(obj: T, qml: &str) -> bool {
5252
let _lock = lock_for_test();
5353
QML_LOGS.lock().unwrap_or_else(|e| e.into_inner()).clear();
5454

55-
install_message_handler(log_capture);
55+
install_message_handler(Some(log_capture));
5656

5757
let qml_text = "import QtQuick 2.0\n".to_owned() + qml;
5858

@@ -69,7 +69,7 @@ pub fn do_test_error_with_url<T: QObject + Sized>(obj: T, qml: &str, url: &str)
6969
let _lock = lock_for_test();
7070
QML_LOGS.lock().unwrap_or_else(|e| e.into_inner()).clear();
7171

72-
install_message_handler(log_capture);
72+
install_message_handler(Some(log_capture));
7373

7474
let qml_text = "import QtQuick 2.0\n".to_owned() + qml;
7575

@@ -87,7 +87,7 @@ pub fn do_test_variant(obj: QVariant, qml: &str) -> bool {
8787
let _lock = lock_for_test();
8888
QML_LOGS.lock().unwrap_or_else(|e| e.into_inner()).clear();
8989

90-
install_message_handler(log_capture);
90+
install_message_handler(Some(log_capture));
9191

9292
let qml_text = "import QtQuick 2.0\n".to_owned() + qml;
9393

@@ -101,7 +101,7 @@ pub fn test_loading_logs(qml: &str, log: &str) -> bool {
101101
let _lock = TEST_MUTEX.lock().unwrap_or_else(|e| e.into_inner());
102102
QML_LOGS.lock().unwrap_or_else(|e| e.into_inner()).clear();
103103

104-
install_message_handler(log_capture);
104+
install_message_handler(Some(log_capture));
105105

106106
let qml_text = "import QtQuick 2.0\n".to_owned() + qml;
107107

0 commit comments

Comments
 (0)