История изменений
Исправление hateyoufeel, (текущая версия) :
... #include <KWindowSystem> ... KWindowSystem::setStrut(mPanelWId, leftStrut, rightStrut, topStrut, bottomStrut); ... this->connect(KWindowSystem::self(), &KWindowSystem::currentDesktopChanged, this, [this]() { KWindowSystem::setOnDesktop(mPanelWId, KWindowSystem::currentDesktop()); });
KWindowSystem::setStrut и KX11Extras::setStrut аналогичны. Первый вариант считается deprecated, но проверял оба - не работают. Оставлял его ради поддержки в Debian 11, где KX11Extras еще в принципе не было в пакете libkf5windowsystem.
Интересно другое. В чистом проекте оба этих вызова работают нормально.
Я сейчас проверил код Latte Dock, там setStrut используется только для удаления панельки. Код вот здесь:
https://invent.kde.org/plasma/latte-dock/-/blob/master/app/wm/xwindowinterface.cpp
Для установки там вот это:
KWindowSystem::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,
strut.bottom_width, strut.bottom_start, strut.bottom_end
);
Плюс, посмотри функцию XWindowInterface::setViewExtraFlags
в том же файле, там устанавливаются флаги типа того что ты хочешь. Есть подозрение, что тебе надо добавить KWindowSystem::setType(winId, NET::Dock);
и KWindowSystem::setOnAllDesktops(winId, true);
в свой код.
Исправление hateyoufeel, :
... #include <KWindowSystem> ... KWindowSystem::setStrut(mPanelWId, leftStrut, rightStrut, topStrut, bottomStrut); ... this->connect(KWindowSystem::self(), &KWindowSystem::currentDesktopChanged, this, [this]() { KWindowSystem::setOnDesktop(mPanelWId, KWindowSystem::currentDesktop()); });
KWindowSystem::setStrut и KX11Extras::setStrut аналогичны. Первый вариант считается deprecated, но проверял оба - не работают. Оставлял его ради поддержки в Debian 11, где KX11Extras еще в принципе не было в пакете libkf5windowsystem.
Интересно другое. В чистом проекте оба этих вызова работают нормально.
Я сейчас проверил код Latte Dock, там setStrut используется только для удаления панельки. Код вот здесь:
https://invent.kde.org/plasma/latte-dock/-/blob/master/app/wm/xwindowinterface.cpp
Для установки там вот это:
KWindowSystem::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,
strut.bottom_width, strut.bottom_start, strut.bottom_end
);
Плюс, посмотри функцию XWindowInterface::setViewExtraFlags
в том же файле, там устанавливаются флаги типа того что ты хочешь. Есть подозрение, что тебе надо добавить KWindowSystem::setType(winId, NET::Dock);
в свой код.
Исправление hateyoufeel, :
... #include <KWindowSystem> ... KWindowSystem::setStrut(mPanelWId, leftStrut, rightStrut, topStrut, bottomStrut); ... this->connect(KWindowSystem::self(), &KWindowSystem::currentDesktopChanged, this, [this]() { KWindowSystem::setOnDesktop(mPanelWId, KWindowSystem::currentDesktop()); });
KWindowSystem::setStrut и KX11Extras::setStrut аналогичны. Первый вариант считается deprecated, но проверял оба - не работают. Оставлял его ради поддержки в Debian 11, где KX11Extras еще в принципе не было в пакете libkf5windowsystem.
Интересно другое. В чистом проекте оба этих вызова работают нормально.
Я сейчас проверил код Latte Dock, там setStrut используется только для удаления панельки. Код вот здесь:
https://invent.kde.org/plasma/latte-dock/-/blob/master/app/wm/xwindowinterface.cpp
Для установки там вот это:
KWindowSystem::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,
strut.bottom_width, strut.bottom_start, strut.bottom_end
);
Плюс, посмотри функцию XWindowInterface::setViewExtraFlags
в том же файле, там устанавливаются флаги типа того что ты хочешь.
Исправление hateyoufeel, :
... #include <KWindowSystem> ... KWindowSystem::setStrut(mPanelWId, leftStrut, rightStrut, topStrut, bottomStrut); ... this->connect(KWindowSystem::self(), &KWindowSystem::currentDesktopChanged, this, [this]() { KWindowSystem::setOnDesktop(mPanelWId, KWindowSystem::currentDesktop()); });
KWindowSystem::setStrut и KX11Extras::setStrut аналогичны. Первый вариант считается deprecated, но проверял оба - не работают. Оставлял его ради поддержки в Debian 11, где KX11Extras еще в принципе не было в пакете libkf5windowsystem.
Интересно другое. В чистом проекте оба этих вызова работают нормально.
Я сейчас проверил код Latte Dock, там setStrut используется только для удаления панельки. Код вот здесь:
https://invent.kde.org/plasma/latte-dock/-/blob/master/app/wm/xwindowinterface.cpp
Для установки там вот это:
KWindowSystem::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,
strut.bottom_width, strut.bottom_start, strut.bottom_end
);
Исправление hateyoufeel, :
... #include <KWindowSystem> ... KWindowSystem::setStrut(mPanelWId, leftStrut, rightStrut, topStrut, bottomStrut); ... this->connect(KWindowSystem::self(), &KWindowSystem::currentDesktopChanged, this, [this]() { KWindowSystem::setOnDesktop(mPanelWId, KWindowSystem::currentDesktop()); });
KWindowSystem::setStrut и KX11Extras::setStrut аналогичны. Первый вариант считается deprecated, но проверял оба - не работают. Оставлял его ради поддержки в Debian 11, где KX11Extras еще в принципе не было в пакете libkf5windowsystem.
Интересно другое. В чистом проекте оба этих вызова работают нормально.
Я сейчас проверил код Latte Dock, там setStrut используется только для удаления панельки. Код вот здесь:
https://invent.kde.org/plasma/latte-dock/-/blob/master/app/wm/xwindowinterface.cpp
Ищи строчку:
KWindowSystem::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,
strut.bottom_width, strut.bottom_start, strut.bottom_end
);
Исходная версия hateyoufeel, :
... #include <KWindowSystem> ... KWindowSystem::setStrut(mPanelWId, leftStrut, rightStrut, topStrut, bottomStrut); ... this->connect(KWindowSystem::self(), &KWindowSystem::currentDesktopChanged, this, [this]() { KWindowSystem::setOnDesktop(mPanelWId, KWindowSystem::currentDesktop()); });
KWindowSystem::setStrut и KX11Extras::setStrut аналогичны. Первый вариант считается deprecated, но проверял оба - не работают. Оставлял его ради поддержки в Debian 11, где KX11Extras еще в принципе не было в пакете libkf5windowsystem.
Интересно другое. В чистом проекте оба этих вызова работают нормально.
Я сейчас проверил код Latte Dock, там setStrut используется только для удаления панельки. Код вот здесь:
https://invent.kde.org/plasma/latte-dock/-/blob/master/app/wm/xwindowinterface.cpp