mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-08-04 06:12:04 +00:00
Some checks failed
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
build / client-tests (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client-tests (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client-tests (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client-tests (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client-tests (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client-tests (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client-tests (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client-tests (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
libdecor_decorate() already creates an xdg_surface and xdg_toplevel
internally for the frame. Calling xdg_surface_get_toplevel() again on
that same xdg_surface just to fetch the toplevel for icon handling
assigns the xdg_toplevel role to the underlying wl_surface a second
time, which is a protocol violation.
On GNOME Shell 50 (mutter) this is no longer tolerated: mutter
terminates the Wayland connection ("WL: error in client
communication"), and since libdecor_shellInit() waits for the initial
configure with a blocking, error-less libdecor_dispatch(-1) loop, the
client hangs forever with no window and no diagnostic output. This
made -DENABLE_LIBDECOR=ON (the default when libdecor-0 is present)
appear completely broken on current GNOME/Wayland.
Use libdecor_frame_get_xdg_toplevel() instead, which returns the
xdg_toplevel libdecor already owns, without requesting a second role
assignment.
Require libdecor-0 >= 0.1.1, which is available in Debian oldstable,
so the new accessor is guaranteed by the build dependency.
59 lines
1.8 KiB
CMake
59 lines
1.8 KiB
CMake
cmake_minimum_required(VERSION 3.10)
|
|
project(wayland_desktops LANGUAGES C)
|
|
|
|
set(DESKTOP_H "${CMAKE_BINARY_DIR}/include/dynamic/wayland_desktops.h")
|
|
set(DESKTOP_C "${CMAKE_BINARY_DIR}/src/wayland_desktops.c")
|
|
|
|
file(WRITE ${DESKTOP_H} "#include \"interface/desktop.h\"\n\n")
|
|
file(APPEND ${DESKTOP_H} "extern struct WL_DesktopOps * WL_Desktops[];\n\n")
|
|
|
|
file(WRITE ${DESKTOP_C} "#include \"interface/desktop.h\"\n\n")
|
|
file(APPEND ${DESKTOP_C} "#include <stddef.h>\n\n")
|
|
|
|
set(DESKTOPS "_")
|
|
set(DESKTOPS_LINK "_")
|
|
function(add_desktop name)
|
|
set(DESKTOPS "${DESKTOPS};${name}" PARENT_SCOPE)
|
|
set(DESKTOPS_LINK "${DESKTOPS_LINK};wayland_desktop_${name}" PARENT_SCOPE)
|
|
add_subdirectory(${name})
|
|
endfunction()
|
|
|
|
# Add/remove desktops here!
|
|
|
|
# the first entry here is the default
|
|
add_desktop(xdg)
|
|
|
|
pkg_check_modules(LIBDECOR IMPORTED_TARGET libdecor-0>=0.1.1)
|
|
if(LIBDECOR_FOUND)
|
|
option(ENABLE_LIBDECOR "Build with libdecor support" ON)
|
|
else()
|
|
option(ENABLE_LIBDECOR "Build with libdecor support" OFF)
|
|
endif()
|
|
add_feature_info(ENABLE_LIBDECOR ENABLE_LIBDECOR "libdecor support.")
|
|
if (ENABLE_LIBDECOR)
|
|
add_desktop(libdecor)
|
|
endif()
|
|
|
|
list(REMOVE_AT DESKTOPS 0)
|
|
list(REMOVE_AT DESKTOPS_LINK 0)
|
|
|
|
list(LENGTH DESKTOPS DESKTOP_COUNT)
|
|
file(APPEND ${DESKTOP_H} "#define WL_DESKTOP_COUNT ${DESKTOP_COUNT}\n")
|
|
|
|
foreach(desktop ${DESKTOPS})
|
|
file(APPEND ${DESKTOP_C} "extern struct WL_DesktopOps WLD_${desktop};\n")
|
|
endforeach()
|
|
|
|
file(APPEND ${DESKTOP_C} "\nconst struct WL_DesktopOps * WL_Desktops[] =\n{\n")
|
|
foreach(desktop ${DESKTOPS})
|
|
file(APPEND ${DESKTOP_C} " &WLD_${desktop},\n")
|
|
endforeach()
|
|
file(APPEND ${DESKTOP_C} " NULL\n};")
|
|
|
|
add_library(wayland_desktops STATIC ${DESKTOP_C})
|
|
target_link_libraries(wayland_desktops ${DESKTOPS_LINK})
|
|
target_include_directories(wayland_desktops
|
|
PRIVATE
|
|
../
|
|
)
|