Blob Blame History Raw
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<KWin::Compositor::SuspendReason>(type));
+    interface->compositorResume(KWin::Compositor::s_compositor, static_cast<KWin::Compositor::SuspendReason>(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<KWin::Compositor::SuspendReason>(type));
+    interface->compositorSuspend(KWin::Compositor::s_compositor, static_cast<KWin::Compositor::SuspendReason>(type));
 }
 
 void KWinUtils::ShowAllWindowsView()