LINUX.ORG.RU

История изменений

Исправление 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