Simplify the window title passed in from the window system

Summary:
So far KWin used the window title provided from the window directly
without any sanitizing. This could result in broken window decorations
if the title included line breaks. Those were passed to the decoration
and depending on the way how the decoration renders the title, it could
result in visual breakage.

Having line breaks in a window title doesn't make sense. Given that KWin
now simplifies the title when copying it to it's own structure. This
also ensures that the title passed to e.g. task manager does not have
any line breaks on Wayland.

BUG: 323798
FIXED-IN: 5.8.4

Test Plan: Opened the web page in a nested KWin, properly rendered now.

Reviewers: #kwin, #plasma

Subscribers: plasma-devel, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D3215
icc-effect-5.14.5
Martin Gräßlin 2016-10-31 15:56:01 +01:00
parent 3c6371390d
commit 2a15592571
4 changed files with 4 additions and 8 deletions

View File

@ -556,9 +556,7 @@ void TestShellClient::testCaptionSimplified()
shellSurface->setTitle(origTitle);
auto c = Test::renderAndWaitForShown(surface.data(), QSize(100, 50), Qt::blue);
QVERIFY(c);
QEXPECT_FAIL("", "BUG 323798", Continue);
QVERIFY(c->caption() != origTitle);
QEXPECT_FAIL("", "BUG 323798", Continue);
QCOMPARE(c->caption(), origTitle.simplified());
}

View File

@ -111,9 +111,7 @@ void X11ClientTest::testCaptionSimplified()
Client *client = windowCreatedSpy.first().first().value<Client*>();
QVERIFY(client);
QCOMPARE(client->window(), w);
QEXPECT_FAIL("", "BUG 323798", Continue);
QVERIFY(client->caption() != QString::fromUtf8(origTitle));
QEXPECT_FAIL("", "BUG 323798", Continue);
QCOMPARE(client->caption(), QString::fromUtf8(origTitle).simplified());
// and destroy the window again

View File

@ -1417,9 +1417,9 @@ void Client::fetchName()
QString Client::readName() const
{
if (info->name() && info->name()[0] != '\0')
return QString::fromUtf8(info->name());
return QString::fromUtf8(info->name()).simplified();
else
return KWindowSystem::readNameProperty(window(), XCB_ATOM_WM_NAME);
return KWindowSystem::readNameProperty(window(), XCB_ATOM_WM_NAME).simplified();
}
// The list is taken from http://www.unicode.org/reports/tr9/ (#154840)

View File

@ -90,12 +90,12 @@ ShellClient::~ShellClient() = default;
template <class T>
void ShellClient::initSurface(T *shellSurface)
{
m_caption = shellSurface->title();
m_caption = shellSurface->title().simplified();
connect(shellSurface, &T::titleChanged, this, &ShellClient::captionChanged);
connect(shellSurface, &T::destroyed, this, &ShellClient::destroyClient);
connect(shellSurface, &T::titleChanged, this,
[this] (const QString &s) {
m_caption = s;
m_caption = s.simplified();
emit captionChanged();
}
);