fix(dock): port dock to Qt6

main
reionwong 4 weeks ago
parent 3a9bcf3acb
commit 6df50a5887

@ -4,15 +4,18 @@ set(PROJECT_NAME cutefish-dock)
project(${PROJECT_NAME})
set(CMAKE_INCLUDE_CURRENT_DIR ON)
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/compat")
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt5 CONFIG REQUIRED Widgets DBus X11Extras Concurrent LinguistTools QuickControls2)
find_package(Qt6 CONFIG REQUIRED Widgets DBus Concurrent LinguistTools QuickControls2)
find_package(KF5WindowSystem REQUIRED)
find_package(KF6WindowSystem REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_check_modules(XCB REQUIRED IMPORTED_TARGET xcb)
set(SRCS
src/applicationitem.h
@ -36,25 +39,25 @@ set(RESOURCES
resources.qrc
)
qt5_add_dbus_adaptor(DBUS_SOURCES
qt6_add_dbus_adaptor(DBUS_SOURCES
src/com.cutefish.Dock.xml
src/mainwindow.h MainWindow)
set_source_files_properties(${DBUS_SOURCES} PROPERTIES SKIP_AUTOGEN ON)
add_executable(${PROJECT_NAME} ${SRCS} ${DBUS_SOURCES} ${RESOURCES})
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt5::Core
Qt5::Widgets
Qt5::Quick
Qt5::QuickControls2
Qt5::X11Extras
Qt5::Concurrent
Qt5::DBus
KF5::WindowSystem
Qt6::Core
Qt6::Widgets
Qt6::Quick
Qt6::QuickControls2
Qt6::Concurrent
Qt6::DBus
KF6::WindowSystem
PkgConfig::XCB
)
file(GLOB TS_FILES translations/*.ts)
qt5_add_translation(QM_FILES ${TS_FILES})
qt6_add_translation(QM_FILES ${TS_FILES})
add_custom_target(translations DEPENDS ${QM_FILES} SOURCES ${TS_FILES})
add_dependencies(${PROJECT_NAME} translations)

@ -0,0 +1,47 @@
/* Qt 6 compatibility layer for the legacy QX11Info API. */
#ifndef CUTEFISH_QX11INFO_COMPAT
#define CUTEFISH_QX11INFO_COMPAT
#include <QGuiApplication>
#include <QtGui/qguiapplication_platform.h>
#include <xcb/xcb.h>
class QX11Info
{
public:
static bool isPlatformX11()
{
return nativeInterface() != nullptr;
}
static xcb_connection_t *connection()
{
const auto native = nativeInterface();
return native ? native->connection() : nullptr;
}
static Display *display()
{
const auto native = nativeInterface();
return native ? native->display() : nullptr;
}
static xcb_window_t appRootWindow()
{
xcb_connection_t *c = connection();
if (!c)
return XCB_WINDOW_NONE;
const xcb_setup_t *setup = xcb_get_setup(c);
const xcb_screen_iterator_t iterator = xcb_setup_roots_iterator(setup);
return iterator.data ? iterator.data->root : XCB_WINDOW_NONE;
}
private:
static QNativeInterface::QX11Application *nativeInterface()
{
return qGuiApp ? qGuiApp->nativeInterface<QNativeInterface::QX11Application>() : nullptr;
}
};
#endif

@ -19,7 +19,7 @@
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
import Qt5Compat.GraphicalEffects
import Cutefish.Dock 1.0
import FishUI 1.0 as FishUI

@ -20,7 +20,7 @@
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import QtGraphicalEffects 1.0
import Qt5Compat.GraphicalEffects
import Cutefish.Dock 1.0
import FishUI 1.0 as FishUI

@ -21,7 +21,8 @@
#include "docksettings.h"
#include <NETWM>
#include <KWindowSystem>
#include <KX11Extras>
#include <KWindowInfo>
static Activity *SELF = nullptr;
@ -39,9 +40,9 @@ Activity::Activity(QObject *parent)
{
onActiveWindowChanged();
connect(KWindowSystem::self(), &KWindowSystem::activeWindowChanged, this, &Activity::onActiveWindowChanged);
connect(KWindowSystem::self(), static_cast<void (KWindowSystem::*)(WId)>(&KWindowSystem::windowChanged),
this, &Activity::onActiveWindowChanged);
connect(KX11Extras::self(), &KX11Extras::activeWindowChanged, this, &Activity::onActiveWindowChanged);
connect(KX11Extras::self(), &KX11Extras::windowChanged, this,
[this](WId, NET::Properties, NET::Properties2) { onActiveWindowChanged(); });
}
bool Activity::existsWindowMaximized() const
@ -56,7 +57,7 @@ bool Activity::launchPad() const
#include <QDebug>
void Activity::onActiveWindowChanged()
{
KWindowInfo info(KWindowSystem::activeWindow(),
KWindowInfo info(KX11Extras::activeWindow(),
NET::WMState | NET::WMVisibleName,
NET::WM2WindowClass);
@ -65,7 +66,7 @@ void Activity::onActiveWindowChanged()
if (DockSettings::self()->visibility() == DockSettings::IntellHide) {
bool existsWindowMaximized = false;
for (WId wid : KWindowSystem::windows()) {
for (WId wid : KX11Extras::windows()) {
KWindowInfo i(wid, NET::WMState, NET::WM2WindowClass);
if (i.isMinimized() || i.hasState(NET::SkipTaskbar))

@ -28,7 +28,7 @@
#include <QScreen>
#include <QTimer>
#include <KWindowSystem>
#include <KX11Extras>
// X11
#include <NETWM>
@ -86,7 +86,7 @@ bool FakeWindow::event(QEvent *e)
m_delayedMouseTimer.start();
}
} else if (e->type() == QEvent::Show) {
KWindowSystem::setState(winId(), NET::SkipTaskbar | NET::SkipPager | NET::SkipSwitcher);
KX11Extras::setState(winId(), NET::SkipTaskbar | NET::SkipPager | NET::SkipSwitcher);
}
return QQuickView::event(e);

@ -31,7 +31,7 @@
#include <QMetaEnum>
#include <NETWM>
#include <KWindowSystem>
#include <KX11Extras>
#include <KWindowEffects>
MainWindow::MainWindow(QQuickView *parent)
@ -53,8 +53,8 @@ MainWindow::MainWindow(QQuickView *parent)
setColor(Qt::transparent);
setFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
// KWindowSystem::setOnDesktop(winId(), NET::OnAllDesktops);
KWindowSystem::setType(winId(), NET::Dock);
// KX11Extras::setOnDesktop(winId(), NET::OnAllDesktops);
KX11Extras::setType(winId(), NET::Dock);
engine()->rootContext()->setContextProperty("appModel", m_appModel);
engine()->rootContext()->setContextProperty("process", new ProcessProvider);
@ -286,7 +286,7 @@ void MainWindow::initSlideWindow()
else if (m_settings->direction() == DockSettings::Bottom)
location = KWindowEffects::BottomEdge;
KWindowEffects::slideWindow(winId(), location);
KWindowEffects::slideWindow(this, location);
}
void MainWindow::updateViewStruts()

@ -110,7 +110,6 @@ void SystemAppMonitor::addApplication(const QString &filePath)
return;
QSettings desktop(filePath, QSettings::IniFormat);
desktop.setIniCodec("UTF-8");
desktop.beginGroup("Desktop Entry");
if (desktop.value("Terminal").toBool())

@ -27,7 +27,7 @@
#include <QSettings>
#include <QDebug>
#include <KWindowSystem>
#include <KX11Extras>
static Utils *INSTANCE = nullptr;

@ -27,7 +27,7 @@
#include <QScreen>
#include <KWindowEffects>
#include <KWindowSystem>
#include <KX11Extras>
#include <KWindowInfo>
// X11
@ -46,24 +46,24 @@ XWindowInterface *XWindowInterface::instance()
XWindowInterface::XWindowInterface(QObject *parent)
: QObject(parent)
{
connect(KWindowSystem::self(), &KWindowSystem::windowAdded, this, &XWindowInterface::onWindowadded);
connect(KWindowSystem::self(), &KWindowSystem::windowRemoved, this, &XWindowInterface::windowRemoved);
connect(KWindowSystem::self(), &KWindowSystem::activeWindowChanged, this, &XWindowInterface::activeChanged);
connect(KX11Extras::self(), &KX11Extras::windowAdded, this, &XWindowInterface::onWindowadded);
connect(KX11Extras::self(), &KX11Extras::windowRemoved, this, &XWindowInterface::windowRemoved);
connect(KX11Extras::self(), &KX11Extras::activeWindowChanged, this, &XWindowInterface::activeChanged);
}
void XWindowInterface::enableBlurBehind(QWindow *view, bool enable, const QRegion &region)
{
KWindowEffects::enableBlurBehind(view->winId(), enable, region);
KWindowEffects::enableBlurBehind(view, enable, region);
}
WId XWindowInterface::activeWindow()
{
return KWindowSystem::activeWindow();
return KX11Extras::activeWindow();
}
void XWindowInterface::minimizeWindow(WId win)
{
KWindowSystem::minimizeWindow(win);
KX11Extras::minimizeWindow(win);
}
void XWindowInterface::closeWindow(WId id)
@ -74,7 +74,7 @@ void XWindowInterface::closeWindow(WId id)
void XWindowInterface::forceActiveWindow(WId win)
{
KWindowSystem::forceActiveWindow(win);
KX11Extras::forceActiveWindow(win);
}
QMap<QString, QVariant> XWindowInterface::requestInfo(quint64 wid)
@ -94,7 +94,7 @@ QMap<QString, QVariant> XWindowInterface::requestInfo(quint64 wid)
const QString winClass = QString(winfo.windowClassClass());
result.insert("iconName", winClass.toLower());
result.insert("active", wid == KWindowSystem::activeWindow());
result.insert("active", wid == KX11Extras::activeWindow());
result.insert("visibleName", winfo.visibleName());
result.insert("id", winClass);
@ -179,7 +179,7 @@ void XWindowInterface::setViewStruts(QWindow *view, DockSettings::Direction dire
break;
}
KWindowSystem::setExtendedStrut(view->winId(),
KX11Extras::setExtendedStrut(view->winId(),
strut.left_width, strut.left_start, strut.left_end,
strut.right_width, strut.right_start, strut.right_end,
strut.top_width, strut.top_start, strut.top_end,
@ -189,12 +189,12 @@ void XWindowInterface::setViewStruts(QWindow *view, DockSettings::Direction dire
void XWindowInterface::clearViewStruts(QWindow *view)
{
KWindowSystem::setExtendedStrut(view->winId(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
KX11Extras::setExtendedStrut(view->winId(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
void XWindowInterface::startInitWindows()
{
for (auto wid : KWindowSystem::self()->windows()) {
for (auto wid : KX11Extras::self()->windows()) {
onWindowadded(wid);
}
}

Loading…
Cancel
Save