commit 5a6f7cb18cdfdbe221b8a4237d59830447f24fbd Author: Jonathan Riddell Date: Tue May 23 12:24:08 2017 +0100 Update version number for 5.8.7 GIT_SILENT diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c3f0d068..7e5aa5821 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ project(KWIN) -set(PROJECT_VERSION "5.8.6") +set(PROJECT_VERSION "5.8.7") set(PROJECT_VERSION_MAJOR 5) cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) commit 55f169d1c34491f0d97c8b7a162f4ba60f6849e2 Author: Luboš Luňák Date: Fri Mar 17 16:32:34 2017 +0100 fix occassional crash caused by needlessly delayed signals (bko#363224) As pointed out by the Valgrind trace in #363224, delaying the signal causes the EffectWindow* argument to become invalid before the connected slot is called (this is because Qt discards only delayed signal->slot calls where the receiver gets deleted meanwhile, not the sender and definitely not a random argument. If the supposed glitches really happen, they should get fixed correctly, and for all cases (I doubt only desktop number would be involved but not e.g. shaded or minimized states). https://phabricator.kde.org/D5164 CCBUG: 363224 diff --git a/effects.cpp b/effects.cpp index e6e636c99..ec9f5016c 100644 --- a/effects.cpp +++ b/effects.cpp @@ -141,11 +141,7 @@ EffectsHandlerImpl::EffectsHandlerImpl(Compositor *compositor, Scene *scene) if (!c->effectWindow()) { return; } - // the visibility update hasn't happed yet, thus the signal is delayed to prevent glitches, see also BUG 347490 - QMetaObject::invokeMethod(this, "desktopPresenceChanged", Qt::QueuedConnection, - Q_ARG(KWin::EffectWindow*, c->effectWindow()), - Q_ARG(int, old), - Q_ARG(int, c->desktop())); + emit desktopPresenceChanged(c->effectWindow(), old, c->desktop()); } ); connect(ws, &Workspace::clientAdded, this, commit 32939fa7b5225fc5883b9888cbc6e6ddd8d6aee9 Author: Martin Flöser Date: Sat May 6 19:52:41 2017 +0200 Fix regression for timestamp handling for Xwayland windows Summary: Change 0bec9ad7337536e319c17c5684d97e1156399fdb introduced a regrssion on Wayland. On Wayland getTimestamp always returns 0, thus the X11 timestamp gets reset again and again. This results in broken interaction for Xwayland windows as the broken unit tests show. This change addresses the regression by ignoring a value of 0. It means the addressed bug is still present on Wayland for X11 windows as the timestamp doesn't get updated properly. This requires further changes. Test Plan: TestShade works again, testX11TimestampUpdate still works Reviewers: #kwin, #plasma Subscribers: plasma-devel, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D5731 diff --git a/main.h b/main.h index 6706c0faf..cdbabec95 100644 --- a/main.h +++ b/main.h @@ -109,7 +109,7 @@ public: Always }; void setX11Time(xcb_timestamp_t timestamp, TimestampUpdate force = TimestampUpdate::OnlyIfLarger) { - if (timestamp > m_x11Time || force == TimestampUpdate::Always) { + if ((timestamp > m_x11Time || force == TimestampUpdate::Always) && timestamp != 0) { m_x11Time = timestamp; } } commit 0bec9ad7337536e319c17c5684d97e1156399fdb Author: Martin Gräßlin Date: Wed May 3 21:17:25 2017 +0200 Improve the x11 timestamp handling Summary: So far KWin only updated the x11 timestamp if the new timestamp is larger than the existing one. While this is a useful thing it creates problems when the 32 bit msec based time stamp wraps around which happens after running an X server for 49 days. After the timestamp wrapped around KWin would not update the timestamp any more and thus some calls might fail. Most prominent victims are keyboard and pointer grab which fails as the timestamp is either larger than the server timestamp or smaller than the last grab timestamp. Another problem related to timestamp handling is KWin getting broken by wrong timestamps sent by applications. A prominent example is clusterssh which used to send a timestamp as unix time which is larger than the x timestamp and thus our timestamp gets too large. This change addresses these problems by allowing to reset the timestamp. This is only used from updateXTime (which is normally invoked before we do things like grabKeyboard). Thus we make QX11Info::getTimestamp the ultimate trusted source for timestamps. BUG: 377901 BUG: 348569 FIXED-IN: 5.8.7 Test Plan: As I cannot wait 50 days: unit tests for the two conditions added. Reviewers: #kwin, #plasma Subscribers: plasma-devel, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D5704 diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt index 2974d9664..d4fdc79ff 100644 --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -310,3 +310,14 @@ target_link_libraries(testScreenEdges add_test(kwin_testScreenEdges testScreenEdges) ecm_mark_as_test(testScreenEdges) + +######################################################## +# Test X11 TimestampUpdate +######################################################## +add_executable(testX11TimestampUpdate test_x11_timestamp_update.cpp) +target_link_libraries(testX11TimestampUpdate + Qt5::Test + kwin +) +add_test(kwin-testX11TimestampUpdate testX11TimestampUpdate) +ecm_mark_as_test(testX11TimestampUpdate) diff --git a/autotests/test_x11_timestamp_update.cpp b/autotests/test_x11_timestamp_update.cpp new file mode 100644 index 000000000..50ba151d3 --- /dev/null +++ b/autotests/test_x11_timestamp_update.cpp @@ -0,0 +1,123 @@ +/******************************************************************** +KWin - the KDE window manager +This file is part of the KDE project. + +Copyright (C) 2017 Martin Gräßlin + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*********************************************************************/ + +#include +#include + +#include "main.h" +#include "utils.h" + +namespace KWin +{ + +class X11TestApplication : public Application +{ + Q_OBJECT +public: + X11TestApplication(int &argc, char **argv); + virtual ~X11TestApplication(); + +protected: + void performStartup() override; + +}; + +X11TestApplication::X11TestApplication(int &argc, char **argv) + : Application(OperationModeX11, argc, argv) +{ + setX11Connection(QX11Info::connection()); + setX11RootWindow(QX11Info::appRootWindow()); +} + +X11TestApplication::~X11TestApplication() +{ +} + +void X11TestApplication::performStartup() +{ +} + +} + +class X11TimestampUpdateTest : public QObject +{ + Q_OBJECT +private Q_SLOTS: + void testGrabAfterServerTime(); + void testBeforeLastGrabTime(); +}; + +void X11TimestampUpdateTest::testGrabAfterServerTime() +{ + // this test tries to grab the X keyboard with a timestamp in future + // that should fail, but after updating the X11 timestamp, it should + // work again + KWin::updateXTime(); + QCOMPARE(KWin::grabXKeyboard(), true); + KWin::ungrabXKeyboard(); + + // now let's change the timestamp + KWin::kwinApp()->setX11Time(KWin::xTime() + 5 * 60 * 1000); + + // now grab keyboard should fail + QCOMPARE(KWin::grabXKeyboard(), false); + + // let's update timestamp, now it should work again + KWin::updateXTime(); + QCOMPARE(KWin::grabXKeyboard(), true); + KWin::ungrabXKeyboard(); +} + +void X11TimestampUpdateTest::testBeforeLastGrabTime() +{ + // this test tries to grab the X keyboard with a timestamp before the + // last grab time on the server. That should fail, but after updating the X11 + // timestamp it should work again + + // first set the grab timestamp + KWin::updateXTime(); + QCOMPARE(KWin::grabXKeyboard(), true); + KWin::ungrabXKeyboard(); + + // now go to past + const auto timestamp = KWin::xTime(); + KWin::kwinApp()->setX11Time(KWin::xTime() - 5 * 60 * 1000, KWin::Application::TimestampUpdate::Always); + QCOMPARE(KWin::xTime(), timestamp - 5 * 60 * 1000); + + // now grab keyboard should fail + QCOMPARE(KWin::grabXKeyboard(), false); + + // let's update timestamp, now it should work again + KWin::updateXTime(); + QVERIFY(KWin::xTime() >= timestamp); + QCOMPARE(KWin::grabXKeyboard(), true); + KWin::ungrabXKeyboard(); +} + +int main(int argc, char *argv[]) +{ + setenv("QT_QPA_PLATFORM", "xcb", true); + KWin::X11TestApplication app(argc, argv); + app.setAttribute(Qt::AA_Use96Dpi, true); + X11TimestampUpdateTest tc; + return QTest::qExec(&tc, argc, argv); +} + +#include "test_x11_timestamp_update.moc" diff --git a/main.h b/main.h index a7dd47dd6..6706c0faf 100644 --- a/main.h +++ b/main.h @@ -104,8 +104,12 @@ public: xcb_timestamp_t x11Time() const { return m_x11Time; } - void setX11Time(xcb_timestamp_t timestamp) { - if (timestamp > m_x11Time) { + enum class TimestampUpdate { + OnlyIfLarger, + Always + }; + void setX11Time(xcb_timestamp_t timestamp, TimestampUpdate force = TimestampUpdate::OnlyIfLarger) { + if (timestamp > m_x11Time || force == TimestampUpdate::Always) { m_x11Time = timestamp; } } diff --git a/utils.cpp b/utils.cpp index ad45406e5..8d3f2ffbe 100644 --- a/utils.cpp +++ b/utils.cpp @@ -84,7 +84,7 @@ void updateXTime() // NOTE: QX11Info::getTimestamp does not yet search the event queue as the old // solution did. This means there might be regressions currently. See the // documentation above on how it should be done properly. - kwinApp()->setX11Time(QX11Info::getTimestamp()); + kwinApp()->setX11Time(QX11Info::getTimestamp(), Application::TimestampUpdate::Always); } static int server_grab_count = 0; diff --git a/utils.h b/utils.h index e9fa91232..06980fd64 100644 --- a/utils.h +++ b/utils.h @@ -143,12 +143,12 @@ MaximizeMode operator^(MaximizeMode m1, MaximizeMode m2) template using ScopedCPointer = QScopedPointer; -void updateXTime(); +void KWIN_EXPORT updateXTime(); void grabXServer(); void ungrabXServer(); bool grabbedXServer(); -bool grabXKeyboard(xcb_window_t w = rootWindow()); -void ungrabXKeyboard(); +bool KWIN_EXPORT grabXKeyboard(xcb_window_t w = rootWindow()); +void KWIN_EXPORT ungrabXKeyboard(); /** * Small helper class which performs @link grabXServer in the ctor and commit f5a43877a9ea6ddad9eaa8d7498c8ea518c29c81 Author: David Edmundson Date: Thu Apr 13 11:54:44 2017 +0100 Sort the themes in decoration KCM Summary: Even though we're using a QSortFilterProxy model, by default it doesn't actually sort anything until instructed to. This patch turns sorting on. Test Plan: Opened the KCM Looked at it Reviewers: #plasma, mart Reviewed By: mart Subscribers: plasma-devel, kwin, #kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D5407 diff --git a/kcmkwin/kwindecoration/kcm.cpp b/kcmkwin/kwindecoration/kcm.cpp index 3afffb1d7..0baec7630 100644 --- a/kcmkwin/kwindecoration/kcm.cpp +++ b/kcmkwin/kwindecoration/kcm.cpp @@ -83,6 +83,8 @@ ConfigurationModule::ConfigurationModule(QWidget *parent, const QVariantList &ar { m_proxyModel->setSourceModel(m_model); m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive); + m_proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); + m_proxyModel->sort(0); connect(m_ui->filter, &QLineEdit::textChanged, m_proxyModel, &QSortFilterProxyModel::setFilterFixedString); m_quickView = new QQuickView(0); commit 3709996f8a884e80139f14ed4c334b1b1c758bf1 Author: David Edmundson Date: Thu Apr 13 11:54:39 2017 +0100 Fix KWin decoration KCM showing correct index at startup Summary: The KCM has a context property of the currently set theme index. This is set before the decorations model is populated, so it is currently always -1. This model is populated after the constructor but before KCModule::load(). KCModule::load is called from KCModule::showEvent so before QQuickGridView will start doing anything with delegates. This fixes the problem simply and also avoid parsing the config file multiple times. This bug was introduced in 5.9.4: Someone made a (tested) change to make sure the view scrolled to the right place on startup. I then made a (tested) commit fixing the crash on exit The author then updated his patch to my changes, but now in a way that didn't work. Test Plan: Opened system settings module with a million decorations. The correct entry was visible and highlighted. Reviewers: #plasma, graesslin Reviewed By: #plasma, graesslin Subscribers: plasma-devel, kwin, #kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D5401 diff --git a/kcmkwin/kwindecoration/kcm.cpp b/kcmkwin/kwindecoration/kcm.cpp index 3a3c64d80..3afffb1d7 100644 --- a/kcmkwin/kwindecoration/kcm.cpp +++ b/kcmkwin/kwindecoration/kcm.cpp @@ -99,7 +99,6 @@ ConfigurationModule::ConfigurationModule(QWidget *parent, const QVariantList &ar m_quickView->rootContext()->setContextProperty(QStringLiteral("decorationsModel"), m_proxyModel); updateColors(); - m_quickView->rootContext()->setContextProperty("savedIndex", savedIndex()); m_quickView->rootContext()->setContextProperty("_borderSizesIndex", 3); // 3 is normal m_quickView->rootContext()->setContextProperty("leftButtons", m_leftButtons); m_quickView->rootContext()->setContextProperty("rightButtons", m_rightButtons); @@ -300,14 +299,6 @@ QVector< KDecoration2::DecorationButtonType > readDecorationButtons(const KConfi return buttonsFromString(config.readEntry(key, buttonsToString(defaultValue))); } -int ConfigurationModule::savedIndex() const -{ - const KConfigGroup config = KSharedConfig::openConfig("kwinrc")->group(s_pluginName); - const QString plugin = config.readEntry("library", s_defaultPlugin); - const QString theme = config.readEntry("theme", s_defaultTheme); - return m_proxyModel->mapFromSource(m_model->findDecoration(plugin, theme)).row(); -} - void ConfigurationModule::load() { s_loading = true; @@ -318,6 +309,9 @@ void ConfigurationModule::load() const QVariant border = QVariant::fromValue(stringToSize(config.readEntry("BorderSize", s_borderSizeNormal))); m_ui->borderSizesCombo->setCurrentIndex(m_ui->borderSizesCombo->findData(border)); + int themeIndex = m_proxyModel->mapFromSource(m_model->findDecoration(plugin, theme)).row(); + m_quickView->rootContext()->setContextProperty("savedIndex", themeIndex); + // buttons const auto &left = readDecorationButtons(config, "ButtonsOnLeft", QVector{ KDecoration2::DecorationButtonType::Menu, diff --git a/kcmkwin/kwindecoration/kcm.h b/kcmkwin/kwindecoration/kcm.h index 2a955fee2..99fa43114 100644 --- a/kcmkwin/kwindecoration/kcm.h +++ b/kcmkwin/kwindecoration/kcm.h @@ -57,8 +57,6 @@ public Q_SLOTS: void defaults() override; void load() override; void save() override; - //what index is in the model the theme saved as current? needed to move the view at the proper index right at startup - int savedIndex() const; protected: void showEvent(QShowEvent *ev) override; diff --git a/kcmkwin/kwindecoration/qml/Previews.qml b/kcmkwin/kwindecoration/qml/Previews.qml index fa16ff2d3..cfb417236 100644 --- a/kcmkwin/kwindecoration/qml/Previews.qml +++ b/kcmkwin/kwindecoration/qml/Previews.qml @@ -33,7 +33,9 @@ ScrollView { cellWidth: 20 * units.gridUnit cellHeight: cellWidth / 1.6 onContentHeightChanged: { - gridView.currentIndex = savedIndex; + if (gridView.currentIndex == -1) { + gridView.currentIndex = savedIndex; + } gridView.positionViewAtIndex(gridView.currentIndex, GridView.Visible); } commit 819c64586341cf769409e4df0a1cc960257bb4be Author: l10n daemon script Date: Thu Apr 13 05:26:57 2017 +0200 SVN_SILENT made messages (.desktop file) - always resolve ours In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop" diff --git a/plugins/platforms/drm/drm.json b/plugins/platforms/drm/drm.json index 4e977602f..910d8baa1 100644 --- a/plugins/platforms/drm/drm.json +++ b/plugins/platforms/drm/drm.json @@ -1,47 +1,47 @@ { "KPlugin": { - "Description": "Render through drm node.", - "Description[ca@valencia]": "Renderitza mitjançant el node del DRM.", - "Description[ca]": "Renderitza mitjançant el node del DRM.", - "Description[da]": "Render igennem drm-knude.", - "Description[de]": "In DRM-Knoten rendern.", - "Description[el]": "Αποτύπωση μέσω λειτουργίας drm.", - "Description[es]": "Renderizar a través del nodo DRM.", - "Description[et]": "Renderdamine drm režiimis.", - "Description[fi]": "Renderöi DRM-noden läpi.", - "Description[fr]": "Rendre par le biais d'un nœud de rendu « DRM ».", - "Description[gl]": "Renderizar a través dun nodo de DRM.", - "Description[it]": "Resa tramite nodo drm.", - "Description[ko]": "DRM 노드로 렌더링합니다.", - "Description[nl]": "Via drm-node renderen.", - "Description[nn]": "Teikn opp gjennom drm-node.", - "Description[pl]": "Wyświetlaj przez węzeł drm.", - "Description[pt]": "Desenhar através de um nó DRM.", - "Description[pt_BR]": "Renderizar pelo nó de DRM.", - "Description[ru]": "Отрисовка через DRM", - "Description[sk]": "Renderovať cez režim drm.", - "Description[sl]": "Izriši preko vozlišča drm.", - "Description[sr@ijekavian]": "Рендеровање кроз ДРМ чвор.", - "Description[sr@ijekavianlatin]": "Renderovanje kroz DRM čvor.", - "Description[sr@latin]": "Renderovanje kroz DRM čvor.", - "Description[sr]": "Рендеровање кроз ДРМ чвор.", - "Description[sv]": "Återge via DRM-nod.", - "Description[uk]": "Обробляти через вузол DRM.", - "Description[x-test]": "xxRender through drm node.xx", - "Description[zh_CN]": "通过 drm 结点渲染。", - "Description[zh_TW]": "透過 drm 節點成像。", - "Id": "KWinWaylandDrmBackend", - "Name": "drm", - "Name[ca@valencia]": "DRM", - "Name[ca]": "DRM", - "Name[de]": "DRM", - "Name[pt]": "DRM", - "Name[sr@ijekavian]": "ДРМ", - "Name[sr@ijekavianlatin]": "DRM", - "Name[sr@latin]": "DRM", - "Name[sr]": "ДРМ", - "Name[sv]": "DRM", + "Description": "Render through drm node.", + "Description[ca@valencia]": "Renderitza mitjançant el node del DRM.", + "Description[ca]": "Renderitza mitjançant el node del DRM.", + "Description[da]": "Render igennem drm-knude.", + "Description[de]": "In DRM-Knoten rendern.", + "Description[el]": "Αποτύπωση μέσω λειτουργίας drm.", + "Description[es]": "Renderizar a través del nodo DRM.", + "Description[et]": "Renderdamine drm režiimis.", + "Description[fi]": "Renderöi DRM-noden läpi.", + "Description[fr]": "Rendre par le biais d'un nœud de rendu « DRM ».", + "Description[gl]": "Renderizar a través dun nodo de DRM.", + "Description[it]": "Resa tramite nodo drm.", + "Description[ko]": "DRM 노드로 렌더링합니다.", + "Description[nl]": "Via drm-node renderen.", + "Description[nn]": "Teikn opp gjennom drm-node.", + "Description[pl]": "Wyświetlaj przez węzeł drm.", + "Description[pt]": "Desenhar através de um nó DRM.", + "Description[pt_BR]": "Renderizar pelo nó de DRM.", + "Description[ru]": "Отрисовка через DRM", + "Description[sk]": "Renderovať cez režim drm.", + "Description[sl]": "Izriši preko vozlišča drm.", + "Description[sr@ijekavian]": "Рендеровање кроз ДРМ чвор.", + "Description[sr@ijekavianlatin]": "Renderovanje kroz DRM čvor.", + "Description[sr@latin]": "Renderovanje kroz DRM čvor.", + "Description[sr]": "Рендеровање кроз ДРМ чвор.", + "Description[sv]": "Återge via DRM-nod.", + "Description[uk]": "Обробляти через вузол DRM.", + "Description[x-test]": "xxRender through drm node.xx", + "Description[zh_CN]": "通过 drm 结点渲染。", + "Description[zh_TW]": "透過 drm 節點成像。", + "Id": "KWinWaylandDrmBackend", + "Name": "drm", + "Name[ca@valencia]": "DRM", + "Name[ca]": "DRM", + "Name[de]": "DRM", + "Name[pt]": "DRM", + "Name[sr@ijekavian]": "ДРМ", + "Name[sr@ijekavianlatin]": "DRM", + "Name[sr@latin]": "DRM", + "Name[sr]": "ДРМ", + "Name[sv]": "DRM", "Name[x-test]": "xxdrmxx" - }, + }, "input": false } diff --git a/plugins/platforms/fbdev/fbdev.json b/plugins/platforms/fbdev/fbdev.json index 275f25216..87108e3ad 100644 --- a/plugins/platforms/fbdev/fbdev.json +++ b/plugins/platforms/fbdev/fbdev.json @@ -1,52 +1,52 @@ { "KPlugin": { - "Description": "Render to framebuffer.", - "Description[ca@valencia]": "Renderitza al «framebuffer».", - "Description[ca]": "Renderitza al «framebuffer».", - "Description[da]": "Render til framebuffer.", - "Description[de]": "In Framebuffer rendern.", - "Description[el]": "Αποτύπωση σε ενδιάμεση μνήμη πλαισίων.", - "Description[es]": "Renderizar en el «framebuffer».", - "Description[et]": "Renderdamine kaadripuhvris.", - "Description[fi]": "Renderöi framebufferiin.", - "Description[fr]": "Rendre sur le « framebuffer ».", - "Description[gl]": "Renderizar no búfer de fotogramas.", - "Description[it]": "Resa su framebuffer.", - "Description[ko]": "프레임버퍼에 렌더링합니다.", - "Description[nl]": "Naar framebuffer renderen.", - "Description[nn]": "Teikn opp til biletbuffer.", - "Description[pl]": "Wyświetlaj w buforze klatek.", - "Description[pt]": "Desenhar no 'framebuffer'.", - "Description[pt_BR]": "Renderizar no framebuffer.", - "Description[ru]": "Отрисовка во фреймбуфер", - "Description[sk]": "Renderovať do framebuffera.", - "Description[sl]": "Izriši v medpomnilnik sličic.", - "Description[sr@ijekavian]": "Рендеровање у кадробафер.", - "Description[sr@ijekavianlatin]": "Renderovanje u kadrobafer.", - "Description[sr@latin]": "Renderovanje u kadrobafer.", - "Description[sr]": "Рендеровање у кадробафер.", - "Description[sv]": "Återge i rambuffer.", - "Description[uk]": "Обробляти до буфера кадрів.", - "Description[x-test]": "xxRender to framebuffer.xx", - "Description[zh_CN]": "渲染到帧缓冲。", - "Description[zh_TW]": "成像至 framebuffer。", - "Id": "KWinWaylandFbdevBackend", - "Name": "framebuffer", - "Name[ca@valencia]": "Framebuffer", - "Name[ca]": "Framebuffer", - "Name[de]": "Framebuffer", - "Name[el]": "ενδιάμεση μνήμη πλαισίων", - "Name[nn]": "biletbuffer", - "Name[pl]": "bufor klatek", - "Name[pt]": "'Framebuffer'", - "Name[sl]": "medpomnilnik sličic", - "Name[sr@ijekavian]": "Кадробафер", - "Name[sr@ijekavianlatin]": "Kadrobafer", - "Name[sr@latin]": "Kadrobafer", - "Name[sr]": "Кадробафер", - "Name[sv]": "rambuffer", - "Name[x-test]": "xxframebufferxx", + "Description": "Render to framebuffer.", + "Description[ca@valencia]": "Renderitza al «framebuffer».", + "Description[ca]": "Renderitza al «framebuffer».", + "Description[da]": "Render til framebuffer.", + "Description[de]": "In Framebuffer rendern.", + "Description[el]": "Αποτύπωση σε ενδιάμεση μνήμη πλαισίων.", + "Description[es]": "Renderizar en el «framebuffer».", + "Description[et]": "Renderdamine kaadripuhvris.", + "Description[fi]": "Renderöi framebufferiin.", + "Description[fr]": "Rendre sur le « framebuffer ».", + "Description[gl]": "Renderizar no búfer de fotogramas.", + "Description[it]": "Resa su framebuffer.", + "Description[ko]": "프레임버퍼에 렌더링합니다.", + "Description[nl]": "Naar framebuffer renderen.", + "Description[nn]": "Teikn opp til biletbuffer.", + "Description[pl]": "Wyświetlaj w buforze klatek.", + "Description[pt]": "Desenhar no 'framebuffer'.", + "Description[pt_BR]": "Renderizar no framebuffer.", + "Description[ru]": "Отрисовка во фреймбуфер", + "Description[sk]": "Renderovať do framebuffera.", + "Description[sl]": "Izriši v medpomnilnik sličic.", + "Description[sr@ijekavian]": "Рендеровање у кадробафер.", + "Description[sr@ijekavianlatin]": "Renderovanje u kadrobafer.", + "Description[sr@latin]": "Renderovanje u kadrobafer.", + "Description[sr]": "Рендеровање у кадробафер.", + "Description[sv]": "Återge i rambuffer.", + "Description[uk]": "Обробляти до буфера кадрів.", + "Description[x-test]": "xxRender to framebuffer.xx", + "Description[zh_CN]": "渲染到帧缓冲。", + "Description[zh_TW]": "成像至 framebuffer。", + "Id": "KWinWaylandFbdevBackend", + "Name": "framebuffer", + "Name[ca@valencia]": "Framebuffer", + "Name[ca]": "Framebuffer", + "Name[de]": "Framebuffer", + "Name[el]": "ενδιάμεση μνήμη πλαισίων", + "Name[nn]": "biletbuffer", + "Name[pl]": "bufor klatek", + "Name[pt]": "'Framebuffer'", + "Name[sl]": "medpomnilnik sličic", + "Name[sr@ijekavian]": "Кадробафер", + "Name[sr@ijekavianlatin]": "Kadrobafer", + "Name[sr@latin]": "Kadrobafer", + "Name[sr]": "Кадробафер", + "Name[sv]": "rambuffer", + "Name[x-test]": "xxframebufferxx", "Name[zh_TW]": "影格緩衝區(framebuffer)" - }, + }, "input": false } diff --git a/plugins/platforms/hwcomposer/hwcomposer.json b/plugins/platforms/hwcomposer/hwcomposer.json index 5c6a5eb6e..9c95c943d 100644 --- a/plugins/platforms/hwcomposer/hwcomposer.json +++ b/plugins/platforms/hwcomposer/hwcomposer.json @@ -1,44 +1,44 @@ { "KPlugin": { - "Description": "Render through hwcomposer through libhybris.", - "Description[ca@valencia]": "Renderitza mitjançant el «hwcomposer» mitjançant «libhybris».", - "Description[ca]": "Renderitza mitjançant el «hwcomposer» mitjançant «libhybris».", - "Description[da]": "Rendér igennem hwcomposer igennem libhybris.", - "Description[de]": "In hwcomposer mit libhybris rendern.", - "Description[el]": "Αποτύπωση μέσω hwcomposer μέσω libhybris.", - "Description[es]": "Renderizar a través «hwcomposer» mediante «libhybris».", - "Description[et]": "Renderdamine hwcomposeris libhybrise abil.", - "Description[fi]": "Renderöi hwcomposerin läpi käyttäen libhybristä.", - "Description[fr]": "Rendre par le biais de « hwcomposer » via « libhybris ».", - "Description[gl]": "Renderizar a través de hwcomposer a través de libhybris.", - "Description[it]": "Resa tramite hwcomposer attraverso libhybris.", - "Description[ko]": "libhybris를 통하여 hwcomposer로 렌더링합니다.", - "Description[nl]": "Render via hwcomposer via libhybris.", - "Description[nn]": "Teikn opp via hwcomposer gjennom libhybris.", - "Description[pl]": "Wyświetlaj przez sprzętowy kompozytor przez libhybris.", - "Description[pt]": "Desenhar através do Hwcomposer, usando a libhybris.", - "Description[pt_BR]": "Renderizar através do hwcomposer e libhybris.", - "Description[sk]": "Renderovať cez hwcomposer cez libhybris.", - "Description[sl]": "Izriši preko hwcomposer-ja in libhybris.", - "Description[sr@ijekavian]": "Рендеровање кроз ХВ‑композер кроз libhybris.", - "Description[sr@ijekavianlatin]": "Renderovanje kroz HWcomposer kroz libhybris.", - "Description[sr@latin]": "Renderovanje kroz HWcomposer kroz libhybris.", - "Description[sr]": "Рендеровање кроз ХВ‑композер кроз libhybris.", - "Description[sv]": "Återge via på hårdvarusammansättare via libhybris.", - "Description[uk]": "Обробляти за допомогою апаратного засобу композиції через libhybris.", - "Description[x-test]": "xxRender through hwcomposer through libhybris.xx", - "Description[zh_CN]": "使用 libhybris 通过 hwcomposer 渲染。", - "Description[zh_TW]": "透過 libhybris 成像到 hwcomposer。", - "Id": "KWinWaylandHwcomposerBackend", - "Name": "hwcomposer", - "Name[pl]": "sprzętowy kompozytor", - "Name[pt]": "Hwcomposer", - "Name[sr@ijekavian]": "ХВ‑композер", - "Name[sr@ijekavianlatin]": "HWcomposer", - "Name[sr@latin]": "HWcomposer", - "Name[sr]": "ХВ‑композер", - "Name[sv]": "hårdvarusammansättare", + "Description": "Render through hwcomposer through libhybris.", + "Description[ca@valencia]": "Renderitza mitjançant el «hwcomposer» mitjançant «libhybris».", + "Description[ca]": "Renderitza mitjançant el «hwcomposer» mitjançant «libhybris».", + "Description[da]": "Rendér igennem hwcomposer igennem libhybris.", + "Description[de]": "In hwcomposer mit libhybris rendern.", + "Description[el]": "Αποτύπωση μέσω hwcomposer μέσω libhybris.", + "Description[es]": "Renderizar a través «hwcomposer» mediante «libhybris».", + "Description[et]": "Renderdamine hwcomposeris libhybrise abil.", + "Description[fi]": "Renderöi hwcomposerin läpi käyttäen libhybristä.", + "Description[fr]": "Rendre par le biais de « hwcomposer » via « libhybris ».", + "Description[gl]": "Renderizar a través de hwcomposer a través de libhybris.", + "Description[it]": "Resa tramite hwcomposer attraverso libhybris.", + "Description[ko]": "libhybris를 통하여 hwcomposer로 렌더링합니다.", + "Description[nl]": "Render via hwcomposer via libhybris.", + "Description[nn]": "Teikn opp via hwcomposer gjennom libhybris.", + "Description[pl]": "Wyświetlaj przez sprzętowy kompozytor przez libhybris.", + "Description[pt]": "Desenhar através do Hwcomposer, usando a libhybris.", + "Description[pt_BR]": "Renderizar através do hwcomposer e libhybris.", + "Description[sk]": "Renderovať cez hwcomposer cez libhybris.", + "Description[sl]": "Izriši preko hwcomposer-ja in libhybris.", + "Description[sr@ijekavian]": "Рендеровање кроз ХВ‑композер кроз libhybris.", + "Description[sr@ijekavianlatin]": "Renderovanje kroz HWcomposer kroz libhybris.", + "Description[sr@latin]": "Renderovanje kroz HWcomposer kroz libhybris.", + "Description[sr]": "Рендеровање кроз ХВ‑композер кроз libhybris.", + "Description[sv]": "Återge via på hårdvarusammansättare via libhybris.", + "Description[uk]": "Обробляти за допомогою апаратного засобу композиції через libhybris.", + "Description[x-test]": "xxRender through hwcomposer through libhybris.xx", + "Description[zh_CN]": "使用 libhybris 通过 hwcomposer 渲染。", + "Description[zh_TW]": "透過 libhybris 成像到 hwcomposer。", + "Id": "KWinWaylandHwcomposerBackend", + "Name": "hwcomposer", + "Name[pl]": "sprzętowy kompozytor", + "Name[pt]": "Hwcomposer", + "Name[sr@ijekavian]": "ХВ‑композер", + "Name[sr@ijekavianlatin]": "HWcomposer", + "Name[sr@latin]": "HWcomposer", + "Name[sr]": "ХВ‑композер", + "Name[sv]": "hårdvarusammansättare", "Name[x-test]": "xxhwcomposerxx" - }, + }, "input": false } diff --git a/plugins/platforms/virtual/virtual.json b/plugins/platforms/virtual/virtual.json index 7589c8f46..ef05f46fb 100644 --- a/plugins/platforms/virtual/virtual.json +++ b/plugins/platforms/virtual/virtual.json @@ -1,53 +1,53 @@ { "KPlugin": { - "Description": "Render to a virtual framebuffer.", - "Description[ca@valencia]": "Renderitza a un «framebuffer» virtual.", - "Description[ca]": "Renderitza a un «framebuffer» virtual.", - "Description[da]": "Rendér til en virtuel framebuffer.", - "Description[de]": "In virtuellen Framebuffer rendern.", - "Description[el]": "Αποτύπωση σε εικονική ενδιάμεση μνήμη πλαισίων.", - "Description[es]": "Renderizar en un «framebuffer» virtual.", - "Description[et]": "Renderdamine virtuaalses kaadripuhvris.", - "Description[fi]": "Renderöi virtuaaliseen framebufferiin.", - "Description[fr]": "Rendre sur un « framebuffer » factice.", - "Description[gl]": "Renderizar nun búfer de fotogramas virtual.", - "Description[it]": "Resa su un framebuffer virtuale.", - "Description[ko]": "가상 프레임버퍼에 렌더링합니다.", - "Description[nl]": "Naar een virtuele framebuffer renderen.", - "Description[nn]": "Teikn opp til virtuell biletbuffer.", - "Description[pl]": "Wyświetlaj w wirtualnym buforze klatek.", - "Description[pt]": "Desenhar num 'framebuffer' virtual.", - "Description[pt_BR]": "Renderizar no framebuffer virtual.", - "Description[ru]": "Отрисовка в виртуальный фреймбуфер", - "Description[sk]": "Renderovať na virtuálny framebuffer.", - "Description[sl]": "Izriši v navidezni medpomnilnik sličic.", - "Description[sr@ijekavian]": "Рендеровање у виртуелни кадробафер.", - "Description[sr@ijekavianlatin]": "Renderovanje u virtuelni kadrobafer.", - "Description[sr@latin]": "Renderovanje u virtuelni kadrobafer.", - "Description[sr]": "Рендеровање у виртуелни кадробафер.", - "Description[sv]": "Återge i en virtuell rambuffer.", - "Description[uk]": "Обробляти до віртуального буфера кадрів.", - "Description[x-test]": "xxRender to a virtual framebuffer.xx", - "Description[zh_CN]": "渲染到虚拟帧缓冲。", - "Description[zh_TW]": "成像到虛擬影格緩衝區。", - "Id": "KWinWaylandVirtualBackend", - "Name": "virtual", - "Name[ca@valencia]": "Virtual", - "Name[ca]": "Virtual", - "Name[da]": "virtuel", - "Name[de]": "Virtuell", - "Name[el]": "εικονικό", - "Name[nl]": "virtueel", - "Name[nn]": "virtuell", - "Name[pl]": "wirtualne", - "Name[sl]": "navidezno", - "Name[sr@ijekavian]": "Виртуелно", - "Name[sr@ijekavianlatin]": "Virtuelno", - "Name[sr@latin]": "Virtuelno", - "Name[sr]": "Виртуелно", - "Name[sv]": "virtuell", - "Name[x-test]": "xxvirtualxx", + "Description": "Render to a virtual framebuffer.", + "Description[ca@valencia]": "Renderitza a un «framebuffer» virtual.", + "Description[ca]": "Renderitza a un «framebuffer» virtual.", + "Description[da]": "Rendér til en virtuel framebuffer.", + "Description[de]": "In virtuellen Framebuffer rendern.", + "Description[el]": "Αποτύπωση σε εικονική ενδιάμεση μνήμη πλαισίων.", + "Description[es]": "Renderizar en un «framebuffer» virtual.", + "Description[et]": "Renderdamine virtuaalses kaadripuhvris.", + "Description[fi]": "Renderöi virtuaaliseen framebufferiin.", + "Description[fr]": "Rendre sur un « framebuffer » factice.", + "Description[gl]": "Renderizar nun búfer de fotogramas virtual.", + "Description[it]": "Resa su un framebuffer virtuale.", + "Description[ko]": "가상 프레임버퍼에 렌더링합니다.", + "Description[nl]": "Naar een virtuele framebuffer renderen.", + "Description[nn]": "Teikn opp til virtuell biletbuffer.", + "Description[pl]": "Wyświetlaj w wirtualnym buforze klatek.", + "Description[pt]": "Desenhar num 'framebuffer' virtual.", + "Description[pt_BR]": "Renderizar no framebuffer virtual.", + "Description[ru]": "Отрисовка в виртуальный фреймбуфер", + "Description[sk]": "Renderovať na virtuálny framebuffer.", + "Description[sl]": "Izriši v navidezni medpomnilnik sličic.", + "Description[sr@ijekavian]": "Рендеровање у виртуелни кадробафер.", + "Description[sr@ijekavianlatin]": "Renderovanje u virtuelni kadrobafer.", + "Description[sr@latin]": "Renderovanje u virtuelni kadrobafer.", + "Description[sr]": "Рендеровање у виртуелни кадробафер.", + "Description[sv]": "Återge i en virtuell rambuffer.", + "Description[uk]": "Обробляти до віртуального буфера кадрів.", + "Description[x-test]": "xxRender to a virtual framebuffer.xx", + "Description[zh_CN]": "渲染到虚拟帧缓冲。", + "Description[zh_TW]": "成像到虛擬影格緩衝區。", + "Id": "KWinWaylandVirtualBackend", + "Name": "virtual", + "Name[ca@valencia]": "Virtual", + "Name[ca]": "Virtual", + "Name[da]": "virtuel", + "Name[de]": "Virtuell", + "Name[el]": "εικονικό", + "Name[nl]": "virtueel", + "Name[nn]": "virtuell", + "Name[pl]": "wirtualne", + "Name[sl]": "navidezno", + "Name[sr@ijekavian]": "Виртуелно", + "Name[sr@ijekavianlatin]": "Virtuelno", + "Name[sr@latin]": "Virtuelno", + "Name[sr]": "Виртуелно", + "Name[sv]": "virtuell", + "Name[x-test]": "xxvirtualxx", "Name[zh_TW]": "虛擬" - }, + }, "input": true } diff --git a/plugins/platforms/wayland/wayland.json b/plugins/platforms/wayland/wayland.json index 8a4b3f497..ca7a30abf 100644 --- a/plugins/platforms/wayland/wayland.json +++ b/plugins/platforms/wayland/wayland.json @@ -1,46 +1,46 @@ { "KPlugin": { - "Description": "Render to a nested window on running Wayland compositor.", - "Description[ca@valencia]": "Renderitza a una finestra imbricada en un compositor Wayland en execució.", - "Description[ca]": "Renderitza a una finestra imbricada en un compositor Wayland en execució.", - "Description[da]": "Rendér til et indlejret vindue på kørende Wayland-compositor.", - "Description[de]": "In ein eingebettetes Fenster auf dem laufenden Wayland-Kompositor rendern.", - "Description[el]": "Αποτύπωση σε εμφωλευμένο παράθυρο κατά την εκτέλεση του συνθέτη Wayland.", - "Description[es]": "Renderizar en una ventana anidada en el compositor Wayland en ejecución.", - "Description[et]": "Renderdamine töötava Waylandi komposiitori pesastatud aknas.", - "Description[fi]": "Renderöi sisäkkäiseen ikkunaan, jota hallitsee Wayland-koostin.", - "Description[fr]": "Rendre sur une fenêtre imbriquée sur un compositeur Wayland en cours de fonctionnement.", - "Description[gl]": "Renderizar unha xanela aniñada no compositor de Wayland en execución.", - "Description[it]": "Resa in una finestra nidificata su compositore Wayland in esecuzione.", - "Description[ko]": "Wayland 컴포지터에서 실행 중인 창에 렌더링합니다.", - "Description[nl]": "Render naar een genest venster in een werkende Wayland-compositor.", - "Description[nn]": "Teikn opp til innebygd vindauge på køyrande Wayland-samansetjar.", - "Description[pl]": "Wyświetlaj w zagnieżdżonym oknie w kompozytorze Wayland.", - "Description[pt]": "Desenhar numa janela encadeada no compositor de Wayland em execução.", - "Description[pt_BR]": "Renderizar uma janela encadeada no compositor Wayland em execução.", - "Description[sk]": "Renderovať na vnorené okno na bežiaci kompozítor Wayland.", - "Description[sl]": "Izriši v gnezdeno okno na upravljalniku skladnje Wayland.", - "Description[sr@ijekavian]": "Рендеровање у угнежђени прозор на вејланд слагачу.", - "Description[sr@ijekavianlatin]": "Renderovanje u ugnežđeni prozor na Wayland slagaču.", - "Description[sr@latin]": "Renderovanje u ugnežđeni prozor na Wayland slagaču.", - "Description[sr]": "Рендеровање у угнежђени прозор на вејланд слагачу.", - "Description[sv]": "Återge till ett nästlat fönster på Wayland-sammansättare som kör.", - "Description[uk]": "Обробляти у вкладене вікно запущеного засобу композиції Wayland.", - "Description[x-test]": "xxRender to a nested window on running Wayland compositor.xx", - "Description[zh_CN]": "渲染到 Wayland 混成器上的嵌套窗口中", - "Description[zh_TW]": "成像到執行中的 Wayland 的巢狀視窗。", - "Id": "KWinWaylandWaylandBackend", - "Name": "wayland", - "Name[ca@valencia]": "Wayland", - "Name[ca]": "Wayland", - "Name[de]": "Wayland", - "Name[pt]": "Wayland", - "Name[sr@ijekavian]": "Вејланд", - "Name[sr@ijekavianlatin]": "Wayland", - "Name[sr@latin]": "Wayland", - "Name[sr]": "Вејланд", - "Name[sv]": "Wayland", + "Description": "Render to a nested window on running Wayland compositor.", + "Description[ca@valencia]": "Renderitza a una finestra imbricada en un compositor Wayland en execució.", + "Description[ca]": "Renderitza a una finestra imbricada en un compositor Wayland en execució.", + "Description[da]": "Rendér til et indlejret vindue på kørende Wayland-compositor.", + "Description[de]": "In ein eingebettetes Fenster auf dem laufenden Wayland-Kompositor rendern.", + "Description[el]": "Αποτύπωση σε εμφωλευμένο παράθυρο κατά την εκτέλεση του συνθέτη Wayland.", + "Description[es]": "Renderizar en una ventana anidada en el compositor Wayland en ejecución.", + "Description[et]": "Renderdamine töötava Waylandi komposiitori pesastatud aknas.", + "Description[fi]": "Renderöi sisäkkäiseen ikkunaan, jota hallitsee Wayland-koostin.", + "Description[fr]": "Rendre sur une fenêtre imbriquée sur un compositeur Wayland en cours de fonctionnement.", + "Description[gl]": "Renderizar unha xanela aniñada no compositor de Wayland en execución.", + "Description[it]": "Resa in una finestra nidificata su compositore Wayland in esecuzione.", + "Description[ko]": "Wayland 컴포지터에서 실행 중인 창에 렌더링합니다.", + "Description[nl]": "Render naar een genest venster in een werkende Wayland-compositor.", + "Description[nn]": "Teikn opp til innebygd vindauge på køyrande Wayland-samansetjar.", + "Description[pl]": "Wyświetlaj w zagnieżdżonym oknie w kompozytorze Wayland.", + "Description[pt]": "Desenhar numa janela encadeada no compositor de Wayland em execução.", + "Description[pt_BR]": "Renderizar uma janela encadeada no compositor Wayland em execução.", + "Description[sk]": "Renderovať na vnorené okno na bežiaci kompozítor Wayland.", + "Description[sl]": "Izriši v gnezdeno okno na upravljalniku skladnje Wayland.", + "Description[sr@ijekavian]": "Рендеровање у угнежђени прозор на вејланд слагачу.", + "Description[sr@ijekavianlatin]": "Renderovanje u ugnežđeni prozor na Wayland slagaču.", + "Description[sr@latin]": "Renderovanje u ugnežđeni prozor na Wayland slagaču.", + "Description[sr]": "Рендеровање у угнежђени прозор на вејланд слагачу.", + "Description[sv]": "Återge till ett nästlat fönster på Wayland-sammansättare som kör.", + "Description[uk]": "Обробляти у вкладене вікно запущеного засобу композиції Wayland.", + "Description[x-test]": "xxRender to a nested window on running Wayland compositor.xx", + "Description[zh_CN]": "渲染到 Wayland 混成器上的嵌套窗口中", + "Description[zh_TW]": "成像到執行中的 Wayland 的巢狀視窗。", + "Id": "KWinWaylandWaylandBackend", + "Name": "wayland", + "Name[ca@valencia]": "Wayland", + "Name[ca]": "Wayland", + "Name[de]": "Wayland", + "Name[pt]": "Wayland", + "Name[sr@ijekavian]": "Вејланд", + "Name[sr@ijekavianlatin]": "Wayland", + "Name[sr@latin]": "Wayland", + "Name[sr]": "Вејланд", + "Name[sv]": "Wayland", "Name[x-test]": "xxwaylandxx" - }, + }, "input": true } diff --git a/plugins/platforms/x11/standalone/x11.json b/plugins/platforms/x11/standalone/x11.json index 98f09d1d4..4c50af2fd 100644 --- a/plugins/platforms/x11/standalone/x11.json +++ b/plugins/platforms/x11/standalone/x11.json @@ -1,55 +1,55 @@ { "KPlugin": { - "Description": "Platform plugin for standalone x11 in kwin_x11.", - "Description[ca@valencia]": "Connector de plataforma per una X11 autònoma en el kwin_x11.", - "Description[ca]": "Connector de plataforma per una X11 autònoma en el kwin_x11.", - "Description[da]": "Platform-plugin til standalone x11 i kwin_x11.", - "Description[de]": "Plattform-Modul für ein selbstständiges X11 in kwin_x11.", - "Description[el]": "Πρόσθετο πλατφόρμας για αυτόνομο x11 και kwin_x11.", - "Description[es]": "Complemento de Platform para X11 autónomo en kwin_x11.", - "Description[et]": "Autonoomse x11 platvormi plugin kwin_x11-s", - "Description[fi]": "Alustaliitännäinen itsenäiselle x11:lle kwin_x11:ssä.", - "Description[fr]": "Module de plate-forme pour x11 autonomes, au sein de kwin_x11", - "Description[gl]": "Complemento de plataforma para x11 independente en kwin_x11.", - "Description[it]": "Estensione di piattaforma per x11 autonomo in kwin_x11.", - "Description[ko]": "kwin_x11의 단독 X11 플러그인입니다.", - "Description[nl]": "Platform plug-in voor alleenstaande x11 in kwin_x11.", - "Description[nn]": "Plattformtillegg for frittståande X11 i kwin_x11.", - "Description[pl]": "Wtyczka platformy dla wolnostojącego x11 w kwin_x11.", - "Description[pt]": "'Plugin' de plataformas para um X11 autónomo no X11 do KWin.", - "Description[pt_BR]": "Plugin de plataforma para um x11 independente no kwin_x11.", - "Description[sk]": "Platformový plugin pre standalone x11 v kwin_x11.", - "Description[sl]": "Okoljski vstavek za samostojni x11 v kwin_x11.", - "Description[sr@ijekavian]": "Платформски прикључак за самостални Икс11 у К‑вину.", - "Description[sr@ijekavianlatin]": "Platformski priključak za samostalni X11 u KWinu.", - "Description[sr@latin]": "Platformski priključak za samostalni X11 u KWinu.", - "Description[sr]": "Платформски прикључак за самостални Икс11 у К‑вину.", - "Description[sv]": "Plattforminsticksprogram för fristående X11 i kwin_x11", - "Description[uk]": "Додаток платформи для окремого x11 у kwin_x11.", - "Description[x-test]": "xxPlatform plugin for standalone x11 in kwin_x11.xx", - "Description[zh_CN]": "kwin_x11 中的独立 x11 的平台插件", - "Description[zh_TW]": "在 kwin_x11 中供 standalone 的 x11 使用的平臺外掛程式。", - "Id": "KWinX11Platform", - "Name": "x11-standalone", - "Name[ca@valencia]": "X11-autònoma", - "Name[ca]": "X11-autònoma", - "Name[de]": "Selbständiges-x11", - "Name[el]": "x11-αυτόνομος", - "Name[es]": "x11-autónomo", - "Name[gl]": "x11-independente", - "Name[it]": "X11-alone", - "Name[nl]": "x11-alleenstaand", - "Name[nn]": "X11 frittståande", - "Name[pl]": "x11-wolnostojący", - "Name[pt]": "x11-autónomo", - "Name[sl]": "x11-samostojno", - "Name[sr@ijekavian]": "Икс11 самостални", - "Name[sr@ijekavianlatin]": "X11 samostalni", - "Name[sr@latin]": "X11 samostalni", - "Name[sr]": "Икс11 самостални", - "Name[sv]": "Fristående X11", - "Name[uk]": "x11-окремий", + "Description": "Platform plugin for standalone x11 in kwin_x11.", + "Description[ca@valencia]": "Connector de plataforma per una X11 autònoma en el kwin_x11.", + "Description[ca]": "Connector de plataforma per una X11 autònoma en el kwin_x11.", + "Description[da]": "Platform-plugin til standalone x11 i kwin_x11.", + "Description[de]": "Plattform-Modul für ein selbstständiges X11 in kwin_x11.", + "Description[el]": "Πρόσθετο πλατφόρμας για αυτόνομο x11 και kwin_x11.", + "Description[es]": "Complemento de Platform para X11 autónomo en kwin_x11.", + "Description[et]": "Autonoomse x11 platvormi plugin kwin_x11-s", + "Description[fi]": "Alustaliitännäinen itsenäiselle x11:lle kwin_x11:ssä.", + "Description[fr]": "Module de plate-forme pour x11 autonomes, au sein de kwin_x11", + "Description[gl]": "Complemento de plataforma para x11 independente en kwin_x11.", + "Description[it]": "Estensione di piattaforma per x11 autonomo in kwin_x11.", + "Description[ko]": "kwin_x11의 단독 X11 플러그인입니다.", + "Description[nl]": "Platform plug-in voor alleenstaande x11 in kwin_x11.", + "Description[nn]": "Plattformtillegg for frittståande X11 i kwin_x11.", + "Description[pl]": "Wtyczka platformy dla wolnostojącego x11 w kwin_x11.", + "Description[pt]": "'Plugin' de plataformas para um X11 autónomo no X11 do KWin.", + "Description[pt_BR]": "Plugin de plataforma para um x11 independente no kwin_x11.", + "Description[sk]": "Platformový plugin pre standalone x11 v kwin_x11.", + "Description[sl]": "Okoljski vstavek za samostojni x11 v kwin_x11.", + "Description[sr@ijekavian]": "Платформски прикључак за самостални Икс11 у К‑вину.", + "Description[sr@ijekavianlatin]": "Platformski priključak za samostalni X11 u KWinu.", + "Description[sr@latin]": "Platformski priključak za samostalni X11 u KWinu.", + "Description[sr]": "Платформски прикључак за самостални Икс11 у К‑вину.", + "Description[sv]": "Plattforminsticksprogram för fristående X11 i kwin_x11", + "Description[uk]": "Додаток платформи для окремого x11 у kwin_x11.", + "Description[x-test]": "xxPlatform plugin for standalone x11 in kwin_x11.xx", + "Description[zh_CN]": "kwin_x11 中的独立 x11 的平台插件", + "Description[zh_TW]": "在 kwin_x11 中供 standalone 的 x11 使用的平臺外掛程式。", + "Id": "KWinX11Platform", + "Name": "x11-standalone", + "Name[ca@valencia]": "X11-autònoma", + "Name[ca]": "X11-autònoma", + "Name[de]": "Selbständiges-x11", + "Name[el]": "x11-αυτόνομος", + "Name[es]": "x11-autónomo", + "Name[gl]": "x11-independente", + "Name[it]": "X11-alone", + "Name[nl]": "x11-alleenstaand", + "Name[nn]": "X11 frittståande", + "Name[pl]": "x11-wolnostojący", + "Name[pt]": "x11-autónomo", + "Name[sl]": "x11-samostojno", + "Name[sr@ijekavian]": "Икс11 самостални", + "Name[sr@ijekavianlatin]": "X11 samostalni", + "Name[sr@latin]": "X11 samostalni", + "Name[sr]": "Икс11 самостални", + "Name[sv]": "Fristående X11", + "Name[uk]": "x11-окремий", "Name[x-test]": "xxx11-standalonexx" - }, + }, "input": true } diff --git a/plugins/platforms/x11/windowed/x11.json b/plugins/platforms/x11/windowed/x11.json index 84ac0a055..1b4338bd5 100644 --- a/plugins/platforms/x11/windowed/x11.json +++ b/plugins/platforms/x11/windowed/x11.json @@ -1,48 +1,48 @@ { "KPlugin": { - "Description": "Render to a nested window on X11 windowing system.", - "Description[ca@valencia]": "Renderitza a una finestra imbricada en el sistema de finestres X11.", - "Description[ca]": "Renderitza a una finestra imbricada en el sistema de finestres X11.", - "Description[da]": "Rendér til et indlejret vindue på X11-vinduessystemet.", - "Description[de]": "In ein eingebettetes Fenster auf X11-Fenstersystemen rendern.", - "Description[el]": "Αποτύπωση σε εμφωλευμένο παράθυρο σε παραθυρικό σύστημα X11.", - "Description[es]": "Renderizar en una ventana anidada en el sistema de ventanas X11.", - "Description[et]": "Pesastatud akna renderdamine X11 aknasüsteemis.", - "Description[fi]": "Renderöi sisäkkäiseen ikkunaan, joka on X11-ikkunointijärjestelmässä.", - "Description[fr]": "Rendre sur une fenêtre imbriquée sur le système de fenêtrage X11.", - "Description[gl]": "Renderizar unha xanela aniñada no sistema de xanelas X11.", - "Description[it]": "Resa in una finestra nidificata su sistema di finestre X11.", - "Description[ko]": "X11 창 시스템에서 실행 중인 창에 렌더링합니다.", - "Description[nl]": "Render naar een genest venster in het X11 windowingsysteem.", - "Description[nn]": "Teikn opp til innebygd vindauge på køyrande X11-system.", - "Description[pl]": "Wyświetlaj w zagnieżdżonym oknie w systemie okien X11.", - "Description[pt]": "Desenhar numa janela encadeada no sistema de janelas X11.", - "Description[pt_BR]": "Renderizar uma janela encadeada no sistema de janelas X11.", - "Description[ru]": "Отрисовка во вложенном окне оконной системы X11.", - "Description[sk]": "Renderovať na vnorené okno na systém okien X11.", - "Description[sl]": "Izriši v gnezdeno okno na okenskem sistemu X11.", - "Description[sr@ijekavian]": "Рендеровање у угнежђени прозор на прозорском систему Икс11.", - "Description[sr@ijekavianlatin]": "Renderovanje u ugnežđeni prozor na prozorskom sistemu X11.", - "Description[sr@latin]": "Renderovanje u ugnežđeni prozor na prozorskom sistemu X11.", - "Description[sr]": "Рендеровање у угнежђени прозор на прозорском систему Икс11.", - "Description[sv]": "Återge till ett nästlat fönster på X11-fönstersystem.", - "Description[uk]": "Обробляти у вкладене вікно системи керування вікнами X11.", - "Description[x-test]": "xxRender to a nested window on X11 windowing system.xx", - "Description[zh_CN]": "渲染到 X11 窗口系统上的嵌套窗口中", - "Description[zh_TW]": "成像到 X11 視窗系統的巢狀視窗。", - "Id": "KWinWaylandX11Backend", - "Name": "x11", - "Name[ca@valencia]": "X11", - "Name[ca]": "X11", - "Name[de]": "X11", - "Name[ia]": "x", - "Name[pt]": "X11", - "Name[sr@ijekavian]": "Икс11", - "Name[sr@ijekavianlatin]": "X11", - "Name[sr@latin]": "X11", - "Name[sr]": "Икс11", - "Name[sv]": "X11", + "Description": "Render to a nested window on X11 windowing system.", + "Description[ca@valencia]": "Renderitza a una finestra imbricada en el sistema de finestres X11.", + "Description[ca]": "Renderitza a una finestra imbricada en el sistema de finestres X11.", + "Description[da]": "Rendér til et indlejret vindue på X11-vinduessystemet.", + "Description[de]": "In ein eingebettetes Fenster auf X11-Fenstersystemen rendern.", + "Description[el]": "Αποτύπωση σε εμφωλευμένο παράθυρο σε παραθυρικό σύστημα X11.", + "Description[es]": "Renderizar en una ventana anidada en el sistema de ventanas X11.", + "Description[et]": "Pesastatud akna renderdamine X11 aknasüsteemis.", + "Description[fi]": "Renderöi sisäkkäiseen ikkunaan, joka on X11-ikkunointijärjestelmässä.", + "Description[fr]": "Rendre sur une fenêtre imbriquée sur le système de fenêtrage X11.", + "Description[gl]": "Renderizar unha xanela aniñada no sistema de xanelas X11.", + "Description[it]": "Resa in una finestra nidificata su sistema di finestre X11.", + "Description[ko]": "X11 창 시스템에서 실행 중인 창에 렌더링합니다.", + "Description[nl]": "Render naar een genest venster in het X11 windowingsysteem.", + "Description[nn]": "Teikn opp til innebygd vindauge på køyrande X11-system.", + "Description[pl]": "Wyświetlaj w zagnieżdżonym oknie w systemie okien X11.", + "Description[pt]": "Desenhar numa janela encadeada no sistema de janelas X11.", + "Description[pt_BR]": "Renderizar uma janela encadeada no sistema de janelas X11.", + "Description[ru]": "Отрисовка во вложенном окне оконной системы X11.", + "Description[sk]": "Renderovať na vnorené okno na systém okien X11.", + "Description[sl]": "Izriši v gnezdeno okno na okenskem sistemu X11.", + "Description[sr@ijekavian]": "Рендеровање у угнежђени прозор на прозорском систему Икс11.", + "Description[sr@ijekavianlatin]": "Renderovanje u ugnežđeni prozor na prozorskom sistemu X11.", + "Description[sr@latin]": "Renderovanje u ugnežđeni prozor na prozorskom sistemu X11.", + "Description[sr]": "Рендеровање у угнежђени прозор на прозорском систему Икс11.", + "Description[sv]": "Återge till ett nästlat fönster på X11-fönstersystem.", + "Description[uk]": "Обробляти у вкладене вікно системи керування вікнами X11.", + "Description[x-test]": "xxRender to a nested window on X11 windowing system.xx", + "Description[zh_CN]": "渲染到 X11 窗口系统上的嵌套窗口中", + "Description[zh_TW]": "成像到 X11 視窗系統的巢狀視窗。", + "Id": "KWinWaylandX11Backend", + "Name": "x11", + "Name[ca@valencia]": "X11", + "Name[ca]": "X11", + "Name[de]": "X11", + "Name[ia]": "x", + "Name[pt]": "X11", + "Name[sr@ijekavian]": "Икс11", + "Name[sr@ijekavianlatin]": "X11", + "Name[sr@latin]": "X11", + "Name[sr]": "Икс11", + "Name[sv]": "X11", "Name[x-test]": "xxx11xx" - }, + }, "input": true } commit 4ca3d0d94370002430b5131520a11c06b23bdcaa Author: Martin Gräßlin Date: Mon Apr 10 06:52:44 2017 +0200 [platforms/drm] Explicitly request event context version 2 Summary: Libdrm 2.4.78 introduces a version 2 and if KWin gets built against it our code would break. Given that this change is for Plasma/5.8 branch. Closes T5839 Reviewers: #kwin, #plasma Subscribers: plasma-devel, kwin Tags: #kwin Maniphest Tasks: T5839 Differential Revision: https://phabricator.kde.org/D5380 diff --git a/plugins/platforms/drm/drm_backend.cpp b/plugins/platforms/drm/drm_backend.cpp index dc2b79696..9e9cb60e1 100644 --- a/plugins/platforms/drm/drm_backend.cpp +++ b/plugins/platforms/drm/drm_backend.cpp @@ -61,6 +61,8 @@ along with this program. If not, see . #define DRM_CAP_CURSOR_HEIGHT 0x9 #endif +#define KWIN_DRM_EVENT_CONTEXT_VERSION 2 + namespace KWin { @@ -240,7 +242,7 @@ void DrmBackend::openDrm() } drmEventContext e; memset(&e, 0, sizeof e); - e.version = DRM_EVENT_CONTEXT_VERSION; + e.version = KWIN_DRM_EVENT_CONTEXT_VERSION; e.page_flip_handler = pageFlipHandler; drmHandleEvent(m_fd, &e); } commit 1bfe1164f41dc328d54f7dc6ed13b2fabfde09f6 Author: Vladyslav Tronko Date: Fri Mar 24 16:57:43 2017 +0100 Fix crash on dragging titlebar buttons in System Settings Summary: Currently, if user tries to move one of buttons to the left, ending up dragging one button onto another, crash occurs. In addition, this patch replaces verbose replacement(remove/insert) with more elegant QVector::move(int, int) BUG: 374153 FIXED-IN: 5.8.7 Reviewers: graesslin, #kwin Reviewed By: graesslin, #kwin Subscribers: kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D5117 diff --git a/kcmkwin/kwindecoration/declarative-plugin/buttonsmodel.cpp b/kcmkwin/kwindecoration/declarative-plugin/buttonsmodel.cpp index b2ac124ed..8053c80b3 100644 --- a/kcmkwin/kwindecoration/declarative-plugin/buttonsmodel.cpp +++ b/kcmkwin/kwindecoration/declarative-plugin/buttonsmodel.cpp @@ -162,8 +162,18 @@ void ButtonsModel::move(int sourceIndex, int targetIndex) if (sourceIndex == qMax(0, targetIndex)) { return; } - beginMoveRows(QModelIndex(), sourceIndex, sourceIndex, QModelIndex(), targetIndex + 1); - m_buttons.insert(qMax(0, targetIndex), m_buttons.takeAt(sourceIndex)); + + /* When moving an item down, the destination index needs to be incremented + by one, as explained in the documentation: + http://doc.qt.nokia.com/qabstractitemmodel.html#beginMoveRows */ + if (targetIndex > sourceIndex) { + // Row will be moved down + beginMoveRows(QModelIndex(), sourceIndex, sourceIndex, QModelIndex(), targetIndex + 1); + } else { + beginMoveRows(QModelIndex(), sourceIndex, sourceIndex, QModelIndex(), qMax(0, targetIndex)); + } + + m_buttons.move(sourceIndex, qMax(0, targetIndex)); endMoveRows(); } commit c3362fe866dd6368855905b8fbc6e828197cb538 Author: Anthony Fieroni Date: Tue Mar 21 20:56:25 2017 +0200 [kcm_kwindecoration] Respect theme colors in buttons https://phabricator.kde.org/D5116 Signed-off-by: Anthony Fieroni diff --git a/kcmkwin/kwindecoration/qml/Buttons.qml b/kcmkwin/kwindecoration/qml/Buttons.qml index 64ab0f9be..d8ca4258d 100644 --- a/kcmkwin/kwindecoration/qml/Buttons.qml +++ b/kcmkwin/kwindecoration/qml/Buttons.qml @@ -39,7 +39,7 @@ Item { anchors.fill: parent anchors.topMargin: units.gridUnit / 2 border.width: Math.ceil(units.gridUnit / 16.0) - color: SystemPalette.base; + color: backgroundColor; border.color: highlightColor; ColumnLayout { id: layout @@ -51,7 +51,7 @@ Item { Layout.fillWidth: true border.width: Math.ceil(units.gridUnit / 16.0) border.color: highlightColor - color: SystemPalette.base; + color: backgroundColor; RowLayout { id: buttonPreviewRow anchors.top: parent.top; @@ -194,7 +194,7 @@ Item { id: dragHint visible: !(leftButtonsView.dragging || rightButtonsView.dragging || availableGrid.dragging) Layout.fillWidth: true - color: SystemPalette.text; + color: backgroundColor; opacity: 0.66 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignTop commit 892f398b10abd5bc1c3105e4b917cc2c7b396990 Author: Marco Martin Date: Thu Feb 23 16:40:04 2017 +0100 move the view at the correct index at startup Summary: using the same trick as elsewhere, set the currentIndex and move the view to currentIndex right at startup the only way to be sure is onContentHeightChanged as there are no signals for when "the view has been populated and settled up" Test Plan: the view is at the right state since the first frame shown, no more jumping around effect Reviewers: #plasma, davidedmundson Reviewed By: #plasma, davidedmundson Subscribers: davidedmundson, plasma-devel, kwin, #kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D4703 diff --git a/kcmkwin/kwindecoration/kcm.cpp b/kcmkwin/kwindecoration/kcm.cpp index 231b3e6a8..3a3c64d80 100644 --- a/kcmkwin/kwindecoration/kcm.cpp +++ b/kcmkwin/kwindecoration/kcm.cpp @@ -99,6 +99,7 @@ ConfigurationModule::ConfigurationModule(QWidget *parent, const QVariantList &ar m_quickView->rootContext()->setContextProperty(QStringLiteral("decorationsModel"), m_proxyModel); updateColors(); + m_quickView->rootContext()->setContextProperty("savedIndex", savedIndex()); m_quickView->rootContext()->setContextProperty("_borderSizesIndex", 3); // 3 is normal m_quickView->rootContext()->setContextProperty("leftButtons", m_leftButtons); m_quickView->rootContext()->setContextProperty("rightButtons", m_rightButtons); @@ -299,16 +300,20 @@ QVector< KDecoration2::DecorationButtonType > readDecorationButtons(const KConfi return buttonsFromString(config.readEntry(key, buttonsToString(defaultValue))); } +int ConfigurationModule::savedIndex() const +{ + const KConfigGroup config = KSharedConfig::openConfig("kwinrc")->group(s_pluginName); + const QString plugin = config.readEntry("library", s_defaultPlugin); + const QString theme = config.readEntry("theme", s_defaultTheme); + return m_proxyModel->mapFromSource(m_model->findDecoration(plugin, theme)).row(); +} + void ConfigurationModule::load() { s_loading = true; const KConfigGroup config = KSharedConfig::openConfig("kwinrc")->group(s_pluginName); const QString plugin = config.readEntry("library", s_defaultPlugin); const QString theme = config.readEntry("theme", s_defaultTheme); - const QModelIndex index = m_proxyModel->mapFromSource(m_model->findDecoration(plugin, theme)); - if (auto listView = m_quickView->rootObject()->findChild("listView")) { - listView->setProperty("currentIndex", index.isValid() ? index.row() : -1); - } m_ui->closeWindowsDoubleClick->setChecked(config.readEntry("CloseOnDoubleClickOnMenu", false)); const QVariant border = QVariant::fromValue(stringToSize(config.readEntry("BorderSize", s_borderSizeNormal))); m_ui->borderSizesCombo->setCurrentIndex(m_ui->borderSizesCombo->findData(border)); diff --git a/kcmkwin/kwindecoration/kcm.h b/kcmkwin/kwindecoration/kcm.h index 99fa43114..2a955fee2 100644 --- a/kcmkwin/kwindecoration/kcm.h +++ b/kcmkwin/kwindecoration/kcm.h @@ -57,6 +57,8 @@ public Q_SLOTS: void defaults() override; void load() override; void save() override; + //what index is in the model the theme saved as current? needed to move the view at the proper index right at startup + int savedIndex() const; protected: void showEvent(QShowEvent *ev) override; diff --git a/kcmkwin/kwindecoration/qml/Previews.qml b/kcmkwin/kwindecoration/qml/Previews.qml index be8036c32..fa16ff2d3 100644 --- a/kcmkwin/kwindecoration/qml/Previews.qml +++ b/kcmkwin/kwindecoration/qml/Previews.qml @@ -32,6 +32,11 @@ ScrollView { model: decorationsModel cellWidth: 20 * units.gridUnit cellHeight: cellWidth / 1.6 + onContentHeightChanged: { + gridView.currentIndex = savedIndex; + gridView.positionViewAtIndex(gridView.currentIndex, GridView.Visible); + } + Rectangle { z: -1 anchors.fill: parent commit 6a77b8a1eb187bfa54408ed5cc6b27ce08b5d47d Author: l10n daemon script Date: Thu Feb 23 08:49:40 2017 +0100 SVN_SILENT made messages (.desktop file) - always resolve ours In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop" diff --git a/effects/eyeonscreen/package/metadata.desktop b/effects/eyeonscreen/package/metadata.desktop index e09d55a22..69fb3e623 100644 --- a/effects/eyeonscreen/package/metadata.desktop +++ b/effects/eyeonscreen/package/metadata.desktop @@ -38,7 +38,7 @@ Name[zh_TW]=螢幕之眼 Icon=preferences-system-windows-effect-eyeonscreen Comment=Suck windows into desktop to show the latter. This might remind you of something. Comment[ca]=Enganxa les finestres a l'escriptori per a mostrar la darrera. Això podria recordar-vos quelcom. -Comment[ca@valencia]=Enganxa les finestres a l'escriptori per a mostrar la darrera. Això podria recordar-vos quelcom. +Comment[ca@valencia]=Enganxa les finestres a l'escriptori per a mostrar la darrera. Això podria recordar-vos alguna cosa. Comment[da]=Sug vinduer ind i skrivebordet for at vise dette. Måske minder det dig om noget. Comment[de]=Saugt Fenster in die Arbeitsfläche, um sie anzuzeigen. Comment[en_GB]=Suck windows into desktop to show the latter. This might remind you of something.