Skip to content

Commit

Permalink
sync: from linuxdeepin/dtkgui
Browse files Browse the repository at this point in the history
Synchronize source files from linuxdeepin/dtkgui.

Source-pull-request: linuxdeepin/dtkgui#272
  • Loading branch information
deepin-ci-robot committed Nov 18, 2024
1 parent 43f2897 commit b7208e4
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 16 deletions.
2 changes: 1 addition & 1 deletion src/kernel/dplatformhandle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,7 @@ class Q_DECL_HIDDEN CreatorWindowEventFilter : public QObject {
initWindowRadius(window);

#ifndef DTK_DISABLE_TREELAND
if (DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::IsWaylandPlatform)) {
if (DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::IsWaylandPlatform) && PersonalizationManager::instance()->isSupported()) {
PersonalizationManager::instance()->setEnableTitleBar(window, false);
}
#endif
Expand Down
49 changes: 34 additions & 15 deletions src/wayland/personalizationwaylandclientextension.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,23 @@ class PersonalizationManager_: public PersonalizationManager {};
Q_GLOBAL_STATIC(PersonalizationManager_, personalizationManager)

PersonalizationManager::PersonalizationManager()
: QWaylandClientExtensionTemplate<PersonalizationManager>(1)
: QWaylandClientExtensionTemplate<PersonalizationManager>(treeland_personalization_manager_v1_interface.version)
, m_isSupported(false)
{
if (QGuiApplication::platformName() == QLatin1String("wayland")) {
QtWaylandClient::QWaylandIntegration *waylandIntegration = static_cast<QtWaylandClient::QWaylandIntegration *>(QGuiApplicationPrivate::platformIntegration());
if (!waylandIntegration) {
qWarning() << "waylandIntegration is nullptr!!!";
return;
}
m_waylandDisplay = waylandIntegration->display();
if (!m_waylandDisplay) {
qWarning() << "waylandDisplay is nullptr!!!";
return;
}
addListener();
QtWaylandClient::QWaylandIntegration *waylandIntegration = static_cast<QtWaylandClient::QWaylandIntegration *>(QGuiApplicationPrivate::platformIntegration());
if (!waylandIntegration) {
qWarning() << "waylandIntegration is nullptr!!!";
return;
}
m_waylandDisplay = waylandIntegration->display();
if (!m_waylandDisplay) {
qWarning() << "waylandDisplay is nullptr!!!";
return;
}
addListener();
m_isSupported = m_waylandDisplay->hasRegistryGlobal(QString::fromUtf8(treeland_personalization_manager_v1_interface.name));
if (!m_isSupported) {
qWarning() << "PersonalizationManager is not support";
}
}

Expand All @@ -46,8 +49,16 @@ PersonalizationManager *PersonalizationManager::instance()
return personalizationManager;
}

bool PersonalizationManager::isSupported() const
{
return m_isSupported;
}

PersonalizationWindowContext *PersonalizationManager::getWindowContext(QWindow *window)
{
if (!m_isSupported) {
return nullptr;
}
if (!window) {
qWarning() << "window is nullptr!!!";
return nullptr;
Expand All @@ -73,8 +84,16 @@ PersonalizationWindowContext *PersonalizationManager::getWindowContext(QWindow *
qWarning() << "waylandSurface is nullptr!!!";
return nullptr;
}

// FIXME: Before calling get_window_context, it was not determined whether PersonalizationManager was isActive
auto context = new PersonalizationWindowContext(get_window_context(surface));
connect(window, &QWindow::destroy, context, &PersonalizationWindowContext::deleteLater);
connect(window, &QWindow::visibleChanged, context, [this, context, window](bool visible){
if (!visible) {
context->deleteLater();
m_windowContexts.remove(window);
}
});

m_windowContexts.insert(window, context);
return context;
}
Expand Down Expand Up @@ -121,7 +140,7 @@ void PersonalizationManager::setEnableTitleBar(QWindow *window, bool enable)
}

PersonalizationWindowContext::PersonalizationWindowContext(struct ::treeland_personalization_window_context_v1 *context)
: QWaylandClientExtensionTemplate<PersonalizationWindowContext>(1)
: QWaylandClientExtensionTemplate<PersonalizationWindowContext>(treeland_personalization_window_context_v1_interface.version)
, QtWayland::treeland_personalization_window_context_v1(context)
{
}
Expand Down
2 changes: 2 additions & 0 deletions src/wayland/personalizationwaylandclientextension.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class PersonalizationManager: public QWaylandClientExtensionTemplate<Personaliza
~PersonalizationManager();

void setEnableTitleBar(QWindow *window, bool enable);
bool isSupported() const;

protected:
explicit PersonalizationManager();
Expand All @@ -38,6 +39,7 @@ class PersonalizationManager: public QWaylandClientExtensionTemplate<Personaliza
private:
QHash<QWindow *, PersonalizationWindowContext *> m_windowContexts;
QtWaylandClient::QWaylandDisplay *m_waylandDisplay = nullptr;
bool m_isSupported;
};

class PersonalizationWindowContext : public QWaylandClientExtensionTemplate<PersonalizationWindowContext>,

Check warning on line 45 in src/wayland/personalizationwaylandclientextension.h

View workflow job for this annotation

GitHub Actions / cppcheck

The one definition rule is violated, different classes/structs have the same name 'PersonalizationWindowContext'
Expand Down

0 comments on commit b7208e4

Please sign in to comment.