Toplevel::windowRole becomes virtual and is copied to Deleted

Toplevel::windowRole accesses WinInfo unconditionally causing crashes
if we have a Toplevel subclass which doesn't use WinInfo. So let's
make it virtual and copy to Deleted.
master
Martin Gräßlin 10 years ago
parent fec2b63102
commit 8fad5830f1

@ -81,6 +81,7 @@ void Deleted::copyToDeleted(Toplevel* c)
m_frame = c->frameId();
m_opacity = c->opacity();
m_type = c->windowType(true);
m_windowRole = c->windowRole();
if (WinInfo* cinfo = dynamic_cast< WinInfo* >(info))
cinfo->disable();
Client* client = dynamic_cast<Client*>(c);
@ -189,6 +190,11 @@ double Deleted::opacity() const
return m_opacity;
}
QByteArray Deleted::windowRole() const
{
return m_windowRole;
}
} // namespace
#include "deleted.moc"

@ -72,6 +72,7 @@ public:
return m_wasClient;
}
double opacity() const override;
QByteArray windowRole() const override;
const Decoration::Renderer *decorationRenderer() const {
return m_decorationRenderer;
@ -106,6 +107,7 @@ private:
Decoration::Renderer *m_decorationRenderer;
double m_opacity;
NET::WindowType m_type = NET::Unknown;
QByteArray m_windowRole;
};
inline void Deleted::refWindow()

@ -470,6 +470,11 @@ void Toplevel::addDamage(const QRegion &damage)
}
}
QByteArray Toplevel::windowRole() const
{
return QByteArray(info->windowRole());
}
} // namespace
#include "toplevel.moc"

@ -254,7 +254,7 @@ public:
bool isOnAllDesktops() const;
bool isOnAllActivities() const;
QByteArray windowRole() const;
virtual QByteArray windowRole() const;
QByteArray sessionId() const;
QByteArray resourceName() const;
QByteArray resourceClass() const;
@ -709,11 +709,6 @@ inline QByteArray Toplevel::resourceClass() const
return resource_class; // it is always lowercase
}
inline QByteArray Toplevel::windowRole() const
{
return QByteArray(info->windowRole());
}
inline bool Toplevel::unredirected() const
{
return unredirect;

Loading…
Cancel
Save