diff -Naur a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt	2023-11-05 18:30:13.000000000 +0600
+++ b/CMakeLists.txt	2023-11-06 15:00:50.533464058 +0600
@@ -15,7 +15,7 @@
 option(UPDATE_TRANSLATIONS "Update source translation translations/*.ts files" OFF)
 
 # Minimum Versions
-set(KF5_MINIMUM_VERSION "5.101.0")
+set(KF5_MINIMUM_VERSION "5.96.0")
 set(QT_MINIMUM_VERSION "5.15.0")
 set(QTXDG_MINIMUM_VERSION "3.12.0")
 
diff -Naur a/src/core/core.cpp b/src/core/core.cpp
--- a/src/core/core.cpp	2023-11-05 18:30:13.000000000 +0600
+++ b/src/core/core.cpp	2023-11-06 15:02:17.791947696 +0600
@@ -32,8 +32,7 @@
 #include <XdgMimeApps>
 #include <qt5xdg/XdgDesktopFile>
 
-#include <KWindowSystem/KWindowSystem>
-#include <KWindowSystem/KX11Extras>
+#include <KF5/KWindowSystem/KWindowSystem>
 #include <xcb/xfixes.h>
 
 #ifdef X11_XCB_FOUND
@@ -269,15 +268,15 @@
     if (screen == nullptr)
         screen = QGuiApplication::screens().at(0);
 
-    WId wnd = KX11Extras::activeWindow();
+    WId wnd = KWindowSystem::activeWindow();
 
     // this window screenshot will be invalid
     // if there's no active window or the active window is ours
-    bool invalid(!wnd || !KX11Extras::hasWId(wnd) || (_wnd && _wnd->winId() == wnd));
+    bool invalid(!wnd || !KWindowSystem::hasWId(wnd) || (_wnd && _wnd->winId() == wnd));
     if (!invalid)
     { // or if it isn't on the current desktop
         KWindowInfo info(wnd, NET::WMDesktop);
-        invalid = info.valid() && !info.isOnDesktop(KX11Extras::currentDesktop());
+        invalid = info.valid() && !info.isOnDesktop(KWindowSystem::currentDesktop());
         if (!invalid)
         { // or if it is a desktop or panel/dock
             info = KWindowInfo(wnd, NET::WMWindowType);
