From: Sergei Chernyadyev serg.cherniadjev@gmail.com
--- dlls/win32u/systray.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
diff --git a/dlls/win32u/systray.c b/dlls/win32u/systray.c index 12276f70497..d00afeced65 100644 --- a/dlls/win32u/systray.c +++ b/dlls/win32u/systray.c @@ -26,13 +26,37 @@ #define WIN32_NO_STATUS #include "win32u_private.h" #include "ntuser_private.h" +#ifdef SONAME_LIBDBUS_1 +#include "snidrv/snidrv.h" +#endif #include "shellapi.h" #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(systray);
+#ifdef SONAME_LIBDBUS_1 +static volatile LONG dbus_notifications_initialized = (LONG)FALSE; +#endif + LRESULT system_tray_call( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, void *data ) { +#ifdef SONAME_LIBDBUS_1 + LONG l_dbus_notifications_initialized = InterlockedCompareExchange(&dbus_notifications_initialized, (LONG)FALSE, (LONG)FALSE); + if (!l_dbus_notifications_initialized && snidrv_notification_init()) + { + InterlockedCompareExchange(&dbus_notifications_initialized, TRUE, FALSE); + l_dbus_notifications_initialized = TRUE; + } + if (l_dbus_notifications_initialized) + { + if (msg == WINE_SYSTRAY_RUN_LOOP) + return snidrv_run_loop(); + if (msg == WINE_SYSTRAY_SHOW_BALLOON) + return snidrv_show_balloon(hwnd, wparam, lparam, data); + } + +#endif + switch (msg) { case WINE_SYSTRAY_NOTIFY_ICON: