3131#ifdef USE_DBUS
3232// https://wiki.ubuntu.com/NotificationDevelopmentGuidelines recommends at least 128
3333const int FREEDESKTOP_NOTIFICATION_ICON_SIZE = 128 ;
34+
35+ void DBusInitThread::run () {
36+ auto interface = new QDBusInterface (" org.freedesktop.Notifications" , " /org/freedesktop/Notifications" , " org.freedesktop.Notifications" );
37+ if (!interface->isValid ()) {
38+ delete interface;
39+ return ;
40+ }
41+ interface->moveToThread (m_notificator.thread ());
42+ m_notificator.interface = interface;
43+ m_notificator.mode = Notificator::Freedesktop;
44+ }
45+
3446#endif
3547
3648Notificator::Notificator (const QString &programName, QSystemTrayIcon *trayicon, QWidget *parent) :
@@ -48,12 +60,8 @@ Notificator::Notificator(const QString &programName, QSystemTrayIcon *trayicon,
4860 mode = QSystemTray;
4961 }
5062#ifdef USE_DBUS
51- interface = new QDBusInterface (" org.freedesktop.Notifications" ,
52- " /org/freedesktop/Notifications" , " org.freedesktop.Notifications" );
53- if (interface->isValid ())
54- {
55- mode = Freedesktop;
56- }
63+ m_dbus_init_thread = new DBusInitThread (*this );
64+ m_dbus_init_thread->start ();
5765#endif
5866#ifdef Q_OS_MAC
5967 // check if users OS has support for NSUserNotification
@@ -82,6 +90,8 @@ Notificator::Notificator(const QString &programName, QSystemTrayIcon *trayicon,
8290Notificator::~Notificator ()
8391{
8492#ifdef USE_DBUS
93+ m_dbus_init_thread->wait ();
94+ delete m_dbus_init_thread;
8595 delete interface;
8696#endif
8797}
0 commit comments