dde-dock/frame/taskmanager/windowinfox.h
tsic404 9de057e2cc refactor: add taskmanager from dde-application-manager
1. taskmanager used to identify which entry should map to window
  in x11 environmrnt, listen to xevent in anohter thread, and handle those event
when window create, destory, changed. use some way to identify which entry(desktopfile)
should mapped to changed window.
  in wayland, connected plsamawindow signal(window created destoried.
2. use taskmanager instead of dbus in old dock code

log: as title
2023-07-18 07:35:19 +00:00

99 lines
2.7 KiB
C++

// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later
#ifndef WINDOWINFOX_H
#define WINDOWINFOX_H
#include "windowinfobase.h"
#include "xcbutils.h"
#include <QVector>
#include <qobject.h>
#include <qobjectdefs.h>
class AppInfo;
// X11下窗口信息 在明确X11环境下使用
class WindowInfoX: public WindowInfoBase
{
Q_OBJECT
public:
WindowInfoX(XWindow _xid = 0, QObject *parent = nullptr);
virtual ~WindowInfoX() override;
virtual bool shouldSkip() override;
virtual QString getIcon() override;
virtual QString getTitle() override;
virtual bool isDemandingAttention() override;
virtual void close(uint32_t timestamp) override;
virtual void activate() override;
virtual void minimize() override;
virtual bool isMinimized() override;
virtual int64_t getCreatedTime() override;
virtual QString getDisplayName() override;
virtual QString getWindowType() override;
virtual bool allowClose() override;
virtual void update() override;
virtual void killClient() override;
virtual QString uuid() override;
QString genInnerId(WindowInfoX *winInfo);
QString getGtkAppId();
QString getFlatpakAppId();
QString getWmRole();
WMClass getWMClass();
QString getWMName();
void updateProcessInfo();
bool getUpdateCalled();
void setInnerId(QString _innerId);
ConfigureEvent *getLastConfigureEvent();
void setLastConfigureEvent(ConfigureEvent *event);
bool isGeometryChanged(int _x, int _y, int _width, int _height);
void setGtkAppId(QString _gtkAppId);
/************************更新XCB窗口属性*********************/
void updateWmWindowType();
void updateWmAllowedActions();
void updateWmState();
void updateWmClass();
void updateMotifWmHints();
void updateWmName();
void updateIcon();
void updateHasXEmbedInfo();
void updateHasWmTransientFor();
private:
QString getIconFromWindow();
bool isActionMinimizeAllowed();
bool hasWmStateDemandsAttention();
bool hasWmStateSkipTaskBar();
bool hasWmStateModal();
bool isValidModal();
bool shouldSkipWithWMClass();
private:
int16_t m_x;
int16_t m_y;
uint16_t m_width;
uint16_t m_height;
QVector<XCBAtom> m_wmState;
QVector<XCBAtom> m_wmWindowType;
QVector<XCBAtom> m_wmAllowedActions;
bool m_hasWMTransientFor;
WMClass m_wmClass;
QString m_wmName;
bool m_hasXEmbedInfo;
// 自定义atom属性
QString m_gtkAppId;
QString m_flatpakAppId;
QString m_wmRole;
MotifWMHints m_motifWmHints;
bool m_updateCalled;
ConfigureEvent *m_lastConfigureNotifyEvent;
};
#endif // WINDOWINFOX_H