mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-05 12:25:59 +01:00
69 lines
1.5 KiB
C++
69 lines
1.5 KiB
C++
|
#pragma once
|
||
|
|
||
|
#include <vector>
|
||
|
#include <memory>
|
||
|
#include "Subsurface.hpp"
|
||
|
|
||
|
struct SLayerSurface;
|
||
|
|
||
|
class CPopup {
|
||
|
public:
|
||
|
// dummy head nodes
|
||
|
CPopup(CWindow* pOwner);
|
||
|
CPopup(SLayerSurface* pOwner);
|
||
|
|
||
|
// real nodes
|
||
|
CPopup(wlr_xdg_popup* popup, CPopup* pOwner);
|
||
|
|
||
|
~CPopup();
|
||
|
|
||
|
Vector2D coordsRelativeToParent();
|
||
|
Vector2D coordsGlobal();
|
||
|
|
||
|
void onNewPopup(wlr_xdg_popup* popup);
|
||
|
void onDestroy();
|
||
|
void onMap();
|
||
|
void onUnmap();
|
||
|
void onCommit();
|
||
|
void onReposition();
|
||
|
|
||
|
void recheckTree();
|
||
|
|
||
|
CWLSurface m_sWLSurface;
|
||
|
|
||
|
private:
|
||
|
// T1 owners, each popup has to have one of these
|
||
|
CWindow* m_pWindowOwner = nullptr;
|
||
|
SLayerSurface* m_pLayerOwner = nullptr;
|
||
|
|
||
|
// T2 owners
|
||
|
CPopup* m_pParent = nullptr;
|
||
|
|
||
|
wlr_xdg_popup* m_pWLR = nullptr;
|
||
|
|
||
|
Vector2D m_vLastSize = {};
|
||
|
Vector2D m_vLastPos = {};
|
||
|
|
||
|
bool m_bRequestedReposition = false;
|
||
|
|
||
|
bool m_bInert = false;
|
||
|
|
||
|
//
|
||
|
std::vector<std::unique_ptr<CPopup>> m_vChildren;
|
||
|
std::unique_ptr<CSubsurface> m_pSubsurfaceHead;
|
||
|
|
||
|
// signals
|
||
|
DYNLISTENER(newPopup);
|
||
|
DYNLISTENER(destroyPopup);
|
||
|
DYNLISTENER(mapPopup);
|
||
|
DYNLISTENER(unmapPopup);
|
||
|
DYNLISTENER(commitPopup);
|
||
|
DYNLISTENER(repositionPopup);
|
||
|
|
||
|
void initAllSignals();
|
||
|
void unconstrain();
|
||
|
void recheckChildrenRecursive();
|
||
|
|
||
|
Vector2D localToGlobal(const Vector2D& rel);
|
||
|
Vector2D t1ParentCoords();
|
||
|
};
|