diff --git a/x11-wm/plasma5-kwin/Makefile b/x11-wm/plasma5-kwin/Makefile index d861a43bc8c0..fceab4c12ef4 100644 --- a/x11-wm/plasma5-kwin/Makefile +++ b/x11-wm/plasma5-kwin/Makefile @@ -1,53 +1,53 @@ PORTNAME= kwin DISTVERSION= ${KDE_PLASMA_VERSION} -PORTREVISION= 1 +PORTREVISION= 4 CATEGORIES= x11-wm kde kde-plasma MAINTAINER= kde@FreeBSD.org COMMENT= Plasma5 window manager LICENSE= GPLv2 LIB_DEPENDS= libXcursor.so:x11/libXcursor \ libdrm.so:graphics/libdrm \ libepoxy.so:graphics/libepoxy \ libepoll-shim.so:devel/libepoll-shim \ libfontconfig.so:x11-fonts/fontconfig \ libfreetype.so:print/freetype2 \ libinput.so:x11/libinput \ libudev.so:devel/libudev-devd \ liblcms2.so:graphics/lcms2 \ libwayland-cursor.so:graphics/wayland \ libxcb-cursor.so:x11/xcb-util-cursor \ libxcb-icccm.so:x11/xcb-util-wm \ libxcb-image.so:x11/xcb-util-image \ libxcb-keysyms.so:x11/xcb-util-keysyms \ libxkbcommon.so:x11/libxkbcommon BUILD_DEPENDS= ${LOCALBASE}/include/linux/input.h:devel/evdev-proto \ - xwayland-devel>0:x11-servers/xwayland-devel -RUN_DEPENDS= xwayland-devel>0:x11-servers/xwayland-devel + xwayland-devel>0:x11-servers/xwayland-devel \ + ${kde-kwayland-protocols_LIB}:${kde-kwayland-protocols_PORT} +RUN_DEPENDS= xwayland-devel>0:x11-servers/xwayland-devel \ + ${kde-kwayland-protocols_LIB}:${kde-kwayland-protocols_PORT} USES= cmake compiler:c++11-lib cpe gettext gl gnome kde:5 pkgconfig python:3.5+,run \ qt:5 shebangfix tar:xz xorg USE_GL= egl USE_GNOME= glib20 USE_KDE= activities activities attica auth breeze codecs \ completion config configwidgets coreaddons crash decoration \ - doctools_build globalaccel i18n iconthemes idletime init \ - jobwidgets kcmutils kdeclarative kio kwayland-server kscreenlocker \ + globalaccel i18n iconthemes idletime init \ + jobwidgets kcmutils kdeclarative kio kscreenlocker \ newstuff notifications package plasma-framework runner service sonnet \ - textwidgets wayland widgetsaddons windowsystem xmlgui + textwidgets widgetsaddons windowsystem xmlgui \ + kwayland-integration kwayland-server wayland \ + doctools_build USE_LDCONFIG= yes USE_QT= concurrent core dbus declarative gui multimedia network script \ sensors testlib uiplugin uitools widgets x11extras xml \ buildtools_build qmake_build \ quickcontrols2_run virtualkeyboard_run USE_XORG= ice sm x11 xcb xext xi SHEBANG_FILES= kconf_update/*.py \ kconf_update/*.pl -post-patch: - ${REINPLACE_CMD} '/sysmacros.h/d' \ - ${PATCH_WRKSRC}/logind.cpp - .include diff --git a/x11-wm/plasma5-kwin/files/patch-git-e940f73963 b/x11-wm/plasma5-kwin/files/patch-git-e940f73963 new file mode 100644 index 000000000000..4f00660e6bc9 --- /dev/null +++ b/x11-wm/plasma5-kwin/files/patch-git-e940f73963 @@ -0,0 +1,104 @@ +diff --git libinput/context.cpp libinput/context.cpp +index 00aa98490..f239c8967 100644 +--- libinput/context.cpp ++++ libinput/context.cpp +@@ -63,6 +63,13 @@ bool Context::assignSeat(const char *seat) + if (!isValid()) { + return false; + } ++#if defined(Q_OS_FREEBSD) ++ // On FreeBSD, seat-assignment does work; when assigning ++ // to a different seat, no input devices are ever reported. ++ // Using the default seat **does** return devices, so ++ // use that instead. ++ seat = "seat0"; ++#endif + return libinput_udev_assign_seat(m_libinput, seat) == 0; + } + +diff --git logind.cpp logind.cpp +index cf5266b68..da77a3a59 100644 +--- logind.cpp ++++ logind.cpp +@@ -356,6 +356,11 @@ void LogindIntegration::releaseControl() + emit hasSessionControlChanged(false); + } + ++static QVariantList fromRDev(const dev_t rdev) ++{ ++ return QVariantList({quint32(major(rdev)), quint32(minor(rdev))}); ++} ++ + int LogindIntegration::takeDevice(const char *path) + { + struct stat st; +@@ -367,7 +372,7 @@ int LogindIntegration::takeDevice(const char *path) + m_sessionPath, + m_sessionControllerSessionInterface, + QStringLiteral("TakeDevice")); +- message.setArguments(QVariantList({QVariant(major(st.st_rdev)), QVariant(minor(st.st_rdev))})); ++ message.setArguments(fromRDev(st.st_rdev)); + // intended to be a blocking call + QDBusMessage reply = m_bus.call(message); + if (reply.type() == QDBusMessage::ErrorMessage) { +@@ -389,7 +394,7 @@ void LogindIntegration::releaseDevice(int fd) + m_sessionPath, + m_sessionControllerSessionInterface, + QStringLiteral("ReleaseDevice")); +- message.setArguments(QVariantList({QVariant(major(st.st_rdev)), QVariant(minor(st.st_rdev))})); ++ message.setArguments(fromRDev(st.st_rdev)); + m_bus.asyncCall(message); + } + close(fd); +diff --git main_wayland.cpp main_wayland.cpp +index b73ed09c9..a59dba849 100644 +--- main_wayland.cpp ++++ main_wayland.cpp +@@ -776,6 +776,15 @@ int main(int argc, char * argv[]) + a.platform()->setInitialOutputCount(outputCount); + + QObject::connect(&a, &KWin::Application::workspaceCreated, server, &KWin::WaylandServer::initWorkspace); ++ ++ // If startup doesn't complete within 20 seconds, exit rather than hanging ++ // around forever (e.g. if workspace creation can't happen due to DBus errors) ++ QTimer* startupTimeout = new QTimer; ++ QObject::connect(startupTimeout, &QTimer::timeout, [&](){ a.exit(2); }); ++ QObject::connect(&a, &KWin::Application::workspaceCreated, [&](){ startupTimeout->stop(); delete startupTimeout; }); ++ startupTimeout->setSingleShot(true); ++ startupTimeout->start(std::chrono::seconds(20)); ++ + if (!server->socketName().isEmpty()) { + environment.insert(QStringLiteral("WAYLAND_DISPLAY"), server->socketName()); + } +diff --git plugins/platforms/drm/drm_backend.cpp plugins/platforms/drm/drm_backend.cpp +index cdf4bf689..0eb6d45d3 100644 +--- plugins/platforms/drm/drm_backend.cpp ++++ plugins/platforms/drm/drm_backend.cpp +@@ -244,7 +244,7 @@ void DrmBackend::pageFlipHandler(int fd, unsigned int frame, unsigned int sec, u + + std::chrono::nanoseconds timestamp = convertTimestamp(gpu->presentationClock(), + CLOCK_MONOTONIC, +- { sec, usec * 1000 }); ++ { static_cast(sec), static_cast(usec * 1000) }); + if (timestamp == std::chrono::nanoseconds::zero()) { + qCDebug(KWIN_DRM, "Got invalid timestamp (sec: %u, usec: %u) on output %s", + sec, usec, qPrintable(output->name())); +diff --git tabletmodemanager.cpp tabletmodemanager.cpp +index e23d91ec0..3b20cc4b2 100644 +--- tabletmodemanager.cpp ++++ tabletmodemanager.cpp +@@ -60,9 +60,11 @@ public: + : QObject(parent) + , m_parent(parent) + { +- auto c = LibInput::Connection::self(); +- connect(c, &LibInput::Connection::deviceAdded, this, &TabletModeTouchpadRemovedSpy::refresh); +- connect(c, &LibInput::Connection::deviceRemoved, this, &TabletModeTouchpadRemovedSpy::refresh); ++ auto c = LibInput::Connection::self(); // May be nullptr ++ if (c) { ++ connect(c, &LibInput::Connection::deviceAdded, this, &TabletModeTouchpadRemovedSpy::refresh); ++ connect(c, &LibInput::Connection::deviceRemoved, this, &TabletModeTouchpadRemovedSpy::refresh); ++ } + + check(); + }