Add a Toplevel *Workspace::findInternal(QWindow *w) const
This method is able to match a QWindow created by KWin to a Toplevel. On X11 by matching winId against Unmanaged, on Wayland by matching to internal window of ShellClient. Finding the internal window is a commonly needed feature to e.g. elevate the TabBox window.
This commit is contained in:
parent
9c78d28327
commit
59e3b96812
2 changed files with 21 additions and 0 deletions
|
@ -1693,5 +1693,17 @@ void Workspace::forEachAbstractClient(std::function< void (AbstractClient*) > fu
|
||||||
std::for_each(desktops.constBegin(), desktops.constEnd(), func);
|
std::for_each(desktops.constBegin(), desktops.constEnd(), func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Toplevel *Workspace::findInternal(QWindow *w) const
|
||||||
|
{
|
||||||
|
if (!w) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
if (kwinApp()->operationMode() == Application::OperationModeX11) {
|
||||||
|
return findUnmanaged(w->winId());
|
||||||
|
} else {
|
||||||
|
return waylandServer()->findClient(w);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|
|
@ -127,6 +127,15 @@ public:
|
||||||
Unmanaged *findUnmanaged(xcb_window_t w) const;
|
Unmanaged *findUnmanaged(xcb_window_t w) const;
|
||||||
void forEachUnmanaged(std::function<void (Unmanaged*)> func);
|
void forEachUnmanaged(std::function<void (Unmanaged*)> func);
|
||||||
Toplevel *findToplevel(std::function<bool (const Toplevel*)> func) const;
|
Toplevel *findToplevel(std::function<bool (const Toplevel*)> func) const;
|
||||||
|
/**
|
||||||
|
* @brief Finds a Toplevel for the internal window @p w.
|
||||||
|
*
|
||||||
|
* Internal window means a window created by KWin itself. On X11 this is an Unmanaged
|
||||||
|
* and mapped by the window id, on Wayland a ShellClient mapped on the internal window id.
|
||||||
|
*
|
||||||
|
* @returns Toplevel
|
||||||
|
**/
|
||||||
|
Toplevel *findInternal(QWindow *w) const;
|
||||||
|
|
||||||
QRect clientArea(clientAreaOption, const QPoint& p, int desktop) const;
|
QRect clientArea(clientAreaOption, const QPoint& p, int desktop) const;
|
||||||
QRect clientArea(clientAreaOption, const AbstractClient* c) const;
|
QRect clientArea(clientAreaOption, const AbstractClient* c) const;
|
||||||
|
|
Loading…
Reference in a new issue