From 1cdbac3cf2a07a041d090128275e76ef7195db9b Mon Sep 17 00:00:00 2001 From: Robin Lee Date: Dec 23 2019 05:53:20 +0000 Subject: Fix runtime issue with kwin 5.17 --- diff --git a/deepin-kwin.spec b/deepin-kwin.spec index f92a4ef..62cd2cd 100644 --- a/deepin-kwin.spec +++ b/deepin-kwin.spec @@ -2,11 +2,14 @@ Name: deepin-kwin Version: 0.1.0 -Release: 3%{?dist} +Release: 4%{?dist} Summary: KWin configuration for Deepin Desktop Environment License: GPLv3+ URL: https://github.com/linuxdeepin/%{repo} Source0: %{url}/archive/%{version}/%{repo}-%{version}.tar.gz +# https://git.archlinux.org/svntogit/community.git/commit/trunk?h=packages/deepin-kwin&id=aac44be15651bbaa2d4f7d100ecd9dbc4a79236a +# Fix runtime issue with kwin 5.17 +Patch0: kwin-5.17.patch BuildRequires: gcc-c++ BuildRequires: cmake BuildRequires: kwin-devel @@ -23,7 +26,7 @@ BuildRequires: qt5-qtbase-static BuildRequires: qt5-qtbase-private-devel %{?_qt5:Requires: %{_qt5}%{?_isa} = %{_qt5_version}} Requires: deepin-qt5integration%{?_isa} -Requires: kwin%{?_isa} +Requires: kwin%{?_isa} >= 5.17 # since F31 Obsoletes: deepin-wm <= 1.9.38 Obsoletes: deepin-wm-switcher <= 1.1.9 @@ -51,6 +54,7 @@ Header files and libraries for %{name}. %prep %setup -q -n %{repo}-%{version} +%patch0 -p2 sed -i 's:/lib:/%{_lib}:' plugins/kwin-xcb/lib/CMakeLists.txt sed -i 's:/usr/lib:%{_libdir}:' plugins/kwin-xcb/plugin/main.cpp sed -i 's:/usr/lib:%{_libexecdir}:' deepin-wm-dbus/deepinwmfaker.cpp @@ -90,6 +94,9 @@ chmod 755 %{buildroot}%{_bindir}/kwin_no_scale %{_includedir}/%{repo} %changelog +* Mon Dec 23 2019 Robin Lee - 0.1.0-4 +- Fix runtime issue with kwin 5.17 + * Mon Dec 09 2019 Jan Grulich - 0.1.0-3 - rebuild (qt5) diff --git a/kwin-5.17.patch b/kwin-5.17.patch new file mode 100644 index 0000000..da03b8d --- /dev/null +++ b/kwin-5.17.patch @@ -0,0 +1,64 @@ +diff --git a/dde-kwin-0.1.0/plugins/kwin-xcb/lib/kwinutils.cpp.orig b/dde-kwin-0.1.0/plugins/kwin-xcb/lib/kwinutils.cpp +index 999f23b..b618c54 100644 +--- a/dde-kwin-0.1.0/plugins/kwin-xcb/lib/kwinutils.cpp.orig ++++ b/dde-kwin-0.1.0/plugins/kwin-xcb/lib/kwinutils.cpp +@@ -129,10 +129,6 @@ class Compositor : public QObject + public: + enum SuspendReason { NoReasonSuspend = 0, UserSuspend = 1<<0, BlockRuleSuspend = 1<<1, ScriptSuspend = 1<<2, AllReasonSuspend = 0xff }; + static Compositor *s_compositor; +- +-public Q_SLOTS: +- void suspend(Compositor::SuspendReason reason); +- void resume(Compositor::SuspendReason reason); + }; + + // 光标管理 +@@ -222,6 +218,7 @@ class KWinInterface + typedef xcb_cursor_t (*X11CursorGetCursor)(Qt::CursorShape); + typedef KWin::Options::WindowOperation (*OptionsWindowOperation)(const QString &, bool); + typedef QObject *(*WorkspaceFindClient)(KWinUtils::Predicate, xcb_window_t); ++ typedef void (*CompositorToggle)(void *, KWin::Compositor::SuspendReason); + public: + KWinInterface() + { +@@ -232,6 +229,8 @@ public: + x11CursorGetCursor = (X11CursorGetCursor)KWinUtils::resolve("_ZN4KWin6Cursor12getX11CursorEN2Qt11CursorShapeE"); + optionsWindowOperation = (OptionsWindowOperation)KWinUtils::resolve("_ZN4KWin7Options15windowOperationERK7QStringb"); + findClient = (WorkspaceFindClient)KWinUtils::resolve("_ZNK4KWin9Workspace10findClientENS_9PredicateEj"); ++ compositorSuspend = (CompositorToggle)KWinUtils::resolve("_ZN4KWin13X11Compositor7suspendENS0_13SuspendReasonE"); ++ compositorResume = (CompositorToggle)KWinUtils::resolve("_ZN4KWin13X11Compositor6resumeENS0_13SuspendReasonE"); + } + + ClientMaximizeMode clientMaximizeMode; +@@ -241,6 +240,8 @@ public: + X11CursorGetCursor x11CursorGetCursor; + OptionsWindowOperation optionsWindowOperation; + WorkspaceFindClient findClient; ++ CompositorToggle compositorSuspend; ++ CompositorToggle compositorResume; + }; + + Q_GLOBAL_STATIC(KWinInterface, interface) +@@ -609,18 +610,18 @@ void KWinUtils::ShowWorkspacesView() + + void KWinUtils::ResumeCompositor(int type) + { +- if (!KWin::Compositor::s_compositor) ++ if (!KWin::Compositor::s_compositor || !interface->compositorResume) + return; + +- KWin::Compositor::s_compositor->resume(static_cast(type)); ++ interface->compositorResume(KWin::Compositor::s_compositor, static_cast(type)); + } + + void KWinUtils::SuspendCompositor(int type) + { +- if (!KWin::Compositor::s_compositor) ++ if (!KWin::Compositor::s_compositor || !interface->compositorSuspend) + return; + +- KWin::Compositor::s_compositor->suspend(static_cast(type)); ++ interface->compositorSuspend(KWin::Compositor::s_compositor, static_cast(type)); + } + + void KWinUtils::ShowAllWindowsView()