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()