feat: 增加窗口的UUID的信息

wayland下的拖动窗口实现分屏的功能需要UUID,在此处新增wayland的UUID的返回接口

Log: 增加窗口的返回的UUID信息
Influence: wayland下,拖动任务栏的图标查看是否支持分屏
Bug: https://pms.uniontech.com/bug-view-147657.html
Change-Id: If97699b74707cbf3fe3395a65f72f8bd58de3894
This commit is contained in:
donghualin 2022-07-22 05:11:00 +00:00
parent 8b89bc9092
commit 2a226a1016
9 changed files with 66 additions and 111 deletions

View File

@ -48,176 +48,132 @@ public Q_SLOTS: // METHODS
return asyncCallWithArgumentList(QStringLiteral("AppId"), argumentList);
}
inline QDBusPendingReply<DockRect> Geometry()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("Geometry"), argumentList);
}
inline QDBusPendingReply<QString> Icon()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("Icon"), argumentList);
}
inline QDBusPendingReply<uint> InternalId()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("InternalId"), argumentList);
}
inline QDBusPendingReply<bool> IsActive()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsActive"), argumentList);
}
inline QDBusPendingReply<bool> IsCloseable()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsCloseable"), argumentList);
}
inline QDBusPendingReply<bool> IsDemandingAttention()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsDemandingAttention"), argumentList);
}
inline QDBusPendingReply<bool> IsFullscreen()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsFullscreen"), argumentList);
}
inline QDBusPendingReply<bool> IsFullscreenable()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsFullscreenable"), argumentList);
}
inline QDBusPendingReply<bool> IsKeepAbove()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsKeepAbove"), argumentList);
}
inline QDBusPendingReply<bool> IsMaximizeable()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsMaximizeable"), argumentList);
}
inline QDBusPendingReply<bool> IsMaximized()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsMaximized"), argumentList);
}
inline QDBusPendingReply<bool> IsMinimizeable()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsMinimizeable"), argumentList);
}
inline QDBusPendingReply<bool> IsMinimized()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsMinimized"), argumentList);
}
inline QDBusPendingReply<bool> IsMovable()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsMovable"), argumentList);
}
inline QDBusPendingReply<bool> IsOnAllDesktops()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsOnAllDesktops"), argumentList);
}
inline QDBusPendingReply<bool> IsResizable()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsResizable"), argumentList);
}
inline QDBusPendingReply<bool> IsShadeable()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsShadeable"), argumentList);
}
inline QDBusPendingReply<bool> IsShaded()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsShaded"), argumentList);
}
inline QDBusPendingReply<bool> IsValid()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsValid"), argumentList);
}
inline QDBusPendingReply<bool> IsVirtualDesktopChangeable()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("IsVirtualDesktopChangeable"), argumentList);
}
inline QDBusPendingReply<uint> Pid()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("Pid"), argumentList);
}
inline QDBusPendingReply<> RequestActivate()
{
QList<QVariant> argumentList;
@ -231,7 +187,6 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestActivate"), argumentList);
}
inline QDBusPendingReply<> RequestClose()
{
QList<QVariant> argumentList;
@ -245,7 +200,6 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestClose"), argumentList);
}
inline QDBusPendingReply<> RequestEnterNewVirtualDesktop()
{
QList<QVariant> argumentList;
@ -259,7 +213,6 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestEnterNewVirtualDesktop"), argumentList);
}
inline QDBusPendingReply<> RequestEnterVirtualDesktop(const QString &argin0)
{
QList<QVariant> argumentList;
@ -275,7 +228,6 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestEnterVirtualDesktop"), argumentList);
}
inline QDBusPendingReply<> RequestLeaveVirtualDesktop(const QString &argin0)
{
QList<QVariant> argumentList;
@ -291,7 +243,6 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestLeaveVirtualDesktop"), argumentList);
}
inline QDBusPendingReply<> RequestMove()
{
QList<QVariant> argumentList;
@ -305,7 +256,6 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestMove"), argumentList);
}
inline QDBusPendingReply<> RequestResize()
{
QList<QVariant> argumentList;
@ -319,7 +269,6 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestResize"), argumentList);
}
inline QDBusPendingReply<> RequestToggleKeepAbove()
{
QList<QVariant> argumentList;
@ -333,7 +282,6 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestToggleKeepAbove"), argumentList);
}
inline QDBusPendingReply<> RequestToggleKeepBelow()
{
QList<QVariant> argumentList;
@ -347,7 +295,6 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestToggleKeepBelow"), argumentList);
}
inline QDBusPendingReply<> RequestToggleMaximized()
{
QList<QVariant> argumentList;
@ -361,7 +308,6 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestToggleMaximized"), argumentList);
}
inline QDBusPendingReply<> RequestToggleMinimized()
{
QList<QVariant> argumentList;
@ -375,7 +321,6 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestToggleMinimized"), argumentList);
}
inline QDBusPendingReply<> RequestToggleShaded()
{
QList<QVariant> argumentList;
@ -389,7 +334,6 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestToggleShaded"), argumentList);
}
inline QDBusPendingReply<> RequestVirtualDesktop(uint argin0)
{
QList<QVariant> argumentList;
@ -405,47 +349,41 @@ public Q_SLOTS: // METHODS
CallQueued(QStringLiteral("RequestVirtualDesktop"), argumentList);
}
inline QDBusPendingReply<bool> SkipSwitcher()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("SkipSwitcher"), argumentList);
}
inline QDBusPendingReply<bool> SkipTaskbar()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("SkipTaskbar"), argumentList);
}
inline QDBusPendingReply<QString> Title()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("Title"), argumentList);
}
inline QDBusPendingReply<uint> VirtualDesktop()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("VirtualDesktop"), argumentList);
}
inline QDBusPendingReply<uint> WindowId()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("WindowId"), argumentList);
}
inline QDBusPendingReply<QByteArray> Uuid()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("uuid"), argumentList);;
}
Q_SIGNALS: // SIGNALS
void ActiveChanged();

View File

@ -18,7 +18,7 @@ void registerWindowInfoMetaType()
QDebug operator<<(QDebug argument, const WindowInfo &info)
{
argument << '(' << info.title << ',' << info.attention << ')';
argument << '(' << info.title << ',' << info.attention << info.uuid << ')';
return argument;
}
@ -26,7 +26,7 @@ QDebug operator<<(QDebug argument, const WindowInfo &info)
QDBusArgument &operator<<(QDBusArgument &argument, const WindowInfo &info)
{
argument.beginStructure();
argument << info.title << info.attention;
argument << info.title << info.attention << info.uuid;
argument.endStructure();
return argument;
@ -35,7 +35,7 @@ QDBusArgument &operator<<(QDBusArgument &argument, const WindowInfo &info)
const QDBusArgument &operator>>(const QDBusArgument &argument, WindowInfo &info)
{
argument.beginStructure();
argument >> info.title >> info.attention;
argument >> info.title >> info.attention >> info.uuid;
argument.endStructure();
return argument;
@ -44,5 +44,6 @@ const QDBusArgument &operator>>(const QDBusArgument &argument, WindowInfo &info)
bool WindowInfo::operator==(const WindowInfo &rhs) const
{
return attention == rhs.attention &&
title == rhs.title;
title == rhs.title &&
uuid == rhs.uuid;
}

View File

@ -17,6 +17,7 @@ public:
public:
bool attention;
QString title;
QString uuid;
};
Q_DECLARE_METATYPE(WindowInfo)

View File

@ -422,6 +422,7 @@ void Entry::updateExportWindowInfos()
XWindow xid = info->getXid();
winInfo.title = info->getTitle();
winInfo.attention = info->isDemandingAttention();
winInfo.uuid = info->uuid();
infos[xid] = winInfo;
}
@ -431,7 +432,8 @@ void Entry::updateExportWindowInfos()
for (auto iter = infos.begin(); iter != infos.end(); iter++) {
XWindow xid = iter.key();
if (infos[xid].title != m_exportWindowInfos[xid].title ||
infos[xid].attention != m_exportWindowInfos[xid].attention) {
infos[xid].attention != m_exportWindowInfos[xid].attention ||
infos[xid].uuid != m_exportWindowInfos[xid].uuid) {
changed = true;
break;
}

View File

@ -55,6 +55,7 @@ public:
virtual bool allowClose() = 0;
virtual void update() = 0;
virtual void killClient() = 0;
virtual QString uuid() = 0;
XWindow getXid() {return xid;}
void setEntry(Entry *value) {entry = value;}

View File

@ -28,12 +28,12 @@
WindowInfoK::WindowInfoK(PlasmaWindow *window, XWindow _xid)
: WindowInfoBase ()
, updateCalled(false)
, internalId(0)
, demaningAttention(false)
, closeable(true)
, minimized(true)
, plasmaWindow(window)
, m_updateCalled(false)
, m_internalId(0)
, m_demaningAttention(false)
, m_closeable(true)
, m_minimized(true)
, m_plasmaWindow(window)
{
xid = _xid;
createdTime = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::system_clock::now().time_since_epoch()).count(); // 获取当前时间,精确到纳秒
@ -46,23 +46,23 @@ WindowInfoK::~WindowInfoK()
bool WindowInfoK::shouldSkip()
{
if (!updateCalled) {
if (!m_updateCalled) {
update();
updateCalled = true;
m_updateCalled = true;
}
bool skip = plasmaWindow->SkipTaskbar();
bool skip = m_plasmaWindow->SkipTaskbar();
// 添加窗口能否最小化判断, 如果窗口不能最小化则隐藏任务栏图标
bool canMinimize = false;
canMinimize = plasmaWindow->IsMinimizeable();
canMinimize = m_plasmaWindow->IsMinimizeable();
if (!canMinimize)
skip = true;
if (skip) {
// 白名单, 过滤类似“欢迎应用”, 没有最小化窗口但是需要在任务栏显示图标
QStringList list { "dde-introduction"};
if (list.indexOf(appId) != -1)
if (list.indexOf(m_appId) != -1)
skip = false;
}
@ -81,42 +81,42 @@ QString WindowInfoK::getTitle()
bool WindowInfoK::isDemandingAttention()
{
return demaningAttention;
return m_demaningAttention;
}
bool WindowInfoK::allowClose()
{
return closeable;
return m_closeable;
}
void WindowInfoK::close(uint32_t timestamp)
{
plasmaWindow->RequestClose();
m_plasmaWindow->RequestClose();
}
QString WindowInfoK::getAppId()
{
return appId;
return m_appId;
}
void WindowInfoK::setAppId(QString _appId)
{
appId = _appId;
m_appId = _appId;
}
void WindowInfoK::activate()
{
plasmaWindow->RequestActivate();
m_plasmaWindow->RequestActivate();
}
void WindowInfoK::minimize()
{
plasmaWindow->RequestToggleMinimized();
m_plasmaWindow->RequestToggleMinimized();
}
bool WindowInfoK::isMinimized()
{
return minimized;
return m_minimized;
}
bool WindowInfoK::changeXid(XWindow _xid)
@ -127,52 +127,52 @@ bool WindowInfoK::changeXid(XWindow _xid)
PlasmaWindow *WindowInfoK::getPlasmaWindow()
{
return plasmaWindow;
return m_plasmaWindow;
}
bool WindowInfoK::updateGeometry()
{
DockRect rect = plasmaWindow->Geometry();
if (geometry == rect)
DockRect rect = m_plasmaWindow->Geometry();
if (m_geometry == rect)
return false;
geometry = rect;
m_geometry = rect;
return true;
}
void WindowInfoK::updateTitle()
{
title = plasmaWindow->Title();
title = m_plasmaWindow->Title();
}
void WindowInfoK::updateDemandingAttention()
{
demaningAttention = plasmaWindow->IsDemandingAttention();
m_demaningAttention = m_plasmaWindow->IsDemandingAttention();
}
void WindowInfoK::updateIcon()
{
icon = plasmaWindow->Icon();
icon = m_plasmaWindow->Icon();
}
void WindowInfoK::updateAppId()
{
appId = plasmaWindow->AppId();
m_appId = m_plasmaWindow->AppId();
}
void WindowInfoK::updateInternalId()
{
internalId = plasmaWindow->InternalId();
m_internalId = m_plasmaWindow->InternalId();
}
void WindowInfoK::updateCloseable()
{
closeable = plasmaWindow->IsCloseable();
m_closeable = m_plasmaWindow->IsCloseable();
}
void WindowInfoK::updateProcessInfo()
{
pid = plasmaWindow->Pid();
pid = m_plasmaWindow->Pid();
processInfo = new ProcessInfo(pid);
}
@ -182,7 +182,7 @@ void WindowInfoK::updateProcessInfo()
*/
DockRect WindowInfoK::getGeometry()
{
return geometry;
return m_geometry;
}
int64_t WindowInfoK::getCreatedTime()
@ -217,3 +217,8 @@ void WindowInfoK::killClient()
{
}
QString WindowInfoK::uuid()
{
return QString(m_plasmaWindow->Uuid());
}

View File

@ -51,6 +51,7 @@ public:
virtual QString getWindowType() override;
virtual void update() override;
virtual void killClient() override;
virtual QString uuid() override;
QString getAppId();
void setAppId(QString _appId);
@ -67,14 +68,14 @@ public:
DockRect getGeometry();
private:
bool updateCalled;
QString appId;
uint32_t internalId;
bool demaningAttention;
bool closeable;
bool minimized;
PlasmaWindow *plasmaWindow;
DockRect geometry;
bool m_updateCalled;
QString m_appId;
uint32_t m_internalId;
bool m_demaningAttention;
bool m_closeable;
bool m_minimized;
PlasmaWindow *m_plasmaWindow;
DockRect m_geometry;
};
#endif // WINDOWINFOK_H

View File

@ -189,6 +189,11 @@ void WindowInfoX::killClient()
XCB->killClientChecked(xid);
}
QString WindowInfoX::uuid()
{
return QString();
}
QString WindowInfoX::getGtkAppId()
{
return gtkAppId;

View File

@ -50,6 +50,7 @@ public:
virtual bool allowClose() override;
virtual void update() override;
virtual void killClient() override;
virtual QString uuid() override;
QString genInnerId(WindowInfoX *winInfo);
QString getGtkAppId();