GHOST/Wayland: Add a build time option for DBUS, disable by default

Add WITH_GHOST_WAYLAND_DBUS option, so Blender can be built without
DBUS support. Currently it's only used to access the cursor theme.
Without this the "default" cursors are used instead.

Disabling this since it adds an additional dependency for a minor gain
in functionality, with the benefit of removing a library requirement.

There is also a problem where Blender hangs on startup for ~5 seconds
when DBUS isn't running. Eventually it would be good to be able to avoid
this problem without a build option.
This commit is contained in:
Campbell Barton 2022-06-27 16:33:58 +10:00
parent 2b6c633b63
commit 3a8fa77c1f
4 changed files with 34 additions and 4 deletions

View File

@ -226,6 +226,9 @@ if(UNIX AND NOT (APPLE OR HAIKU))
if (WITH_GHOST_WAYLAND)
option(WITH_GHOST_WAYLAND_LIBDECOR "Optionally build with LibDecor window decorations" OFF)
mark_as_advanced(WITH_GHOST_WAYLAND_LIBDECOR)
option(WITH_GHOST_WAYLAND_DBUS "Optionally build with DBUS support (used for Cursor themes). May hang on startup systems where DBUS is not used." OFF)
mark_as_advanced(WITH_GHOST_WAYLAND_DBUS)
endif()
endif()

View File

@ -613,7 +613,10 @@ if(WITH_GHOST_WAYLAND)
pkg_check_modules(wayland-scanner REQUIRED wayland-scanner)
pkg_check_modules(xkbcommon REQUIRED xkbcommon)
pkg_check_modules(wayland-cursor REQUIRED wayland-cursor)
pkg_check_modules(dbus REQUIRED dbus-1)
if(WITH_GHOST_WAYLAND_DBUS)
pkg_check_modules(dbus REQUIRED dbus-1)
endif()
if(WITH_GHOST_WAYLAND_LIBDECOR)
pkg_check_modules(libdecor REQUIRED libdecor-0>=0.1)
@ -626,9 +629,15 @@ if(WITH_GHOST_WAYLAND)
${wayland-egl_LINK_LIBRARIES}
${xkbcommon_LINK_LIBRARIES}
${wayland-cursor_LINK_LIBRARIES}
${dbus_LINK_LIBRARIES}
)
if(WITH_GHOST_WAYLAND_DBUS)
list(APPEND PLATFORM_LINKLIBS
${dbus_LINK_LIBRARIES}
)
add_definitions(-DWITH_GHOST_WAYLAND_DBUS)
endif()
if(WITH_GHOST_WAYLAND_LIBDECOR)
list(APPEND PLATFORM_LINKLIBS
${libdecor_LIBRARIES}

View File

@ -268,9 +268,14 @@ elseif(WITH_GHOST_X11 OR WITH_GHOST_WAYLAND)
${wayland-egl_INCLUDE_DIRS}
${xkbcommon_INCLUDE_DIRS}
${wayland-cursor_INCLUDE_DIRS}
${dbus_INCLUDE_DIRS}
)
if(WITH_GHOST_WAYLAND_DBUS)
list(APPEND INC_SYS
${dbus_INCLUDE_DIRS}
)
endif()
if(WITH_GHOST_WAYLAND_LIBDECOR)
list(APPEND INC_SYS
${libdecor_INCLUDE_DIRS}

View File

@ -5,9 +5,13 @@
*/
#pragma once
#include <dbus/dbus.h>
#include <string>
#ifdef WITH_GHOST_WAYLAND_DBUS
# include <dbus/dbus.h>
#endif
#ifdef WITH_GHOST_WAYLAND_DBUS
static DBusMessage *get_setting_sync(DBusConnection *const connection,
const char *key,
const char *value)
@ -66,9 +70,11 @@ static bool parse_type(DBusMessage *const reply, const int type, void *value)
return true;
}
#endif /* WITH_GHOST_WAYLAND_DBUS */
static bool get_cursor_settings(std::string &theme, int &size)
{
#ifdef WITH_GHOST_WAYLAND_DBUS
static const char name[] = "org.gnome.desktop.interface";
static const char key_theme[] = "cursor-theme";
static const char key_size[] = "cursor-size";
@ -113,4 +119,11 @@ static bool get_cursor_settings(std::string &theme, int &size)
dbus_message_unref(reply);
return true;
#else
/* NOTE: eventually we could have alternative ways to access the theme,
* this uses the "default" theme which is functional (instead of a user-defined theme). */
(void)theme;
(void)size;
return false;
#endif /* !WITH_GHOST_WAYLAND_DBUS */
}