Simplify XErrorHandlerRestorer API

This commit is contained in:
Ilya Fedin 2020-12-10 06:32:30 +04:00 committed by John Preston
parent 3297bdadb5
commit 05147016b0
3 changed files with 13 additions and 17 deletions

View file

@ -17,6 +17,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "main/main_domain.h"
#include "mainwindow.h"
using Platform::internal::XErrorHandlerRestorer;
namespace Platform {
namespace Libs {
namespace {
@ -123,8 +125,7 @@ bool setupGtkBase(QLibrary &lib_gtk) {
// gtk_init will reset the Xlib error handler, and that causes
// Qt applications to quit on X errors. Therefore, we need to manually restore it.
internal::XErrorHandlerRestorer handlerRestorer;
handlerRestorer.save();
XErrorHandlerRestorer handlerRestorer;
DEBUG_LOG(("Library gtk functions loaded!"));
gtkTriedToInit = true;
@ -135,8 +136,6 @@ bool setupGtkBase(QLibrary &lib_gtk) {
}
DEBUG_LOG(("Checked gtk with gtk_init_check!"));
handlerRestorer.restore();
// Use our custom log handler.
g_log_set_handler("Gtk", G_LOG_LEVEL_MESSAGE, gtkMessageHandler, nullptr);

View file

@ -17,8 +17,16 @@ namespace internal {
class XErrorHandlerRestorer::Private {
public:
Private() {}
int (*oldErrorHandler)(Display *, XErrorEvent *);
Private()
: _oldErrorHandler(XSetErrorHandler(nullptr)) {
}
~Private() {
XSetErrorHandler(_oldErrorHandler);
}
private:
int (*_oldErrorHandler)(Display *, XErrorEvent *);
};
XErrorHandlerRestorer::XErrorHandlerRestorer()
@ -27,14 +35,6 @@ XErrorHandlerRestorer::XErrorHandlerRestorer()
XErrorHandlerRestorer::~XErrorHandlerRestorer() = default;
void XErrorHandlerRestorer::save() {
_private->oldErrorHandler = XSetErrorHandler(nullptr);
}
void XErrorHandlerRestorer::restore() {
XSetErrorHandler(_private->oldErrorHandler);
}
} // namespace internal
} // namespace Platform
#endif // !TDESKTOP_DISABLE_GTK_INTEGRATION

View file

@ -16,9 +16,6 @@ public:
XErrorHandlerRestorer();
~XErrorHandlerRestorer();
void save();
void restore();
private:
class Private;
const std::unique_ptr<Private> _private;