diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index f6d86bb39ed3d7b3356febdceab94264e742339d..682172bf8bf374e149f4c54a793d5ca821b31ee6 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -385,12 +385,6 @@ void QWaylandDisplay::setLastInputDevice(QWaylandInputDevice *device, uint32_t s
     mLastInputWindow = win;
 }
 
-bool QWaylandDisplay::shellManagesActiveState() const
-{
-    //TODO: This should be part of a shell interface used by the shell protocol implementations
-    return mShellXdg;
-}
-
 void QWaylandDisplay::handleWindowActivated(QWaylandWindow *window)
 {
     if (mActiveWindows.contains(window))
@@ -414,7 +408,7 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic
 {
     QWaylandWindow *keyboardFocus = inputDevice->keyboardFocus();
 
-    if (!shellManagesActiveState() && mLastKeyboardFocus != keyboardFocus) {
+    if (!keyboardFocus->shellSurface()->shellManagesActiveState() && mLastKeyboardFocus != keyboardFocus) {
         if (keyboardFocus)
             handleWindowActivated(keyboardFocus);
         if (mLastKeyboardFocus)
diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h
index 237be5b783f2128023976bcd85c2db9064ab03b9..3f5538ec22eaca0909b4b87501a2dbda41423288 100644
--- a/src/client/qwaylanddisplay_p.h
+++ b/src/client/qwaylanddisplay_p.h
@@ -169,7 +169,6 @@ public:
     QWaylandWindow *lastInputWindow() const;
     void setLastInputDevice(QWaylandInputDevice *device, uint32_t serial, QWaylandWindow *window);
 
-    bool shellManagesActiveState() const;
     void handleWindowActivated(QWaylandWindow *window);
     void handleWindowDeactivated(QWaylandWindow *window);
     void handleKeyboardFocusChanged(QWaylandInputDevice *inputDevice);
diff --git a/src/client/qwaylandshellsurface_p.h b/src/client/qwaylandshellsurface_p.h
index 726d103f9dde851affca7d1fd7278853fba1219f..c99e586d58a2588484188e6e8c82e53732ced1a4 100644
--- a/src/client/qwaylandshellsurface_p.h
+++ b/src/client/qwaylandshellsurface_p.h
@@ -85,6 +85,7 @@ public:
     virtual void setContentOrientationMask(Qt::ScreenOrientations orientation) { Q_UNUSED(orientation) }
 
     virtual void sendProperty(const QString &name, const QVariant &value);
+    virtual bool shellManagesActiveState() const { return false; }
 
     inline QWaylandWindow *window() { return m_window; }
 
diff --git a/src/client/qwaylandxdgsurface_p.h b/src/client/qwaylandxdgsurface_p.h
index e367980b7fc382503d97c9f70f5d86c014649768..bc72820a144552e1e92baa84a236815e47c6cc7b 100644
--- a/src/client/qwaylandxdgsurface_p.h
+++ b/src/client/qwaylandxdgsurface_p.h
@@ -89,6 +89,8 @@ public:
     void setWindowFlags(Qt::WindowFlags flags) Q_DECL_OVERRIDE;
     void sendProperty(const QString &name, const QVariant &value) Q_DECL_OVERRIDE;
 
+    bool shellManagesActiveState() const Q_DECL_OVERRIDE { return true; }
+
     bool isFullscreen() const { return m_fullscreen; }
     bool isMaximized() const { return m_maximized; }