Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package plasma6-keyboard for
openSUSE:Factory checked in at 2026-04-10 17:52:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/plasma6-keyboard (Old)
and /work/SRC/openSUSE:Factory/.plasma6-keyboard.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "plasma6-keyboard"
Fri Apr 10 17:52:01 2026 rev:5 rq:1345635 version:6.6.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/plasma6-keyboard/plasma6-keyboard.changes
2026-03-19 17:38:36.812882686 +0100
+++
/work/SRC/openSUSE:Factory/.plasma6-keyboard.new.21863/plasma6-keyboard.changes
2026-04-10 17:59:31.541977227 +0200
@@ -1,0 +2,14 @@
+Tue Apr 7 14:59:48 UTC 2026 - Fabian Vogt <[email protected]>
+
+- Update to 6.6.4:
+ * New bugfix release
+ * For more details see https://kde.org/announcements/plasma/6/6.6.4
+- Changes since 6.6.3:
+ * Update version for new release 6.6.4
+ * inputlisteneritem: Always disable predictive text (kde#516511)
+ * inputlisteneritem: Add bytes bound check and deactivate signal handling
(kde#517087)
+ * vkbd: Fix various lengths not being bytes (UTF8), and CJK attributes
+ * inputlisteneritem: Don't let Qt VKBD communicate to KWin when not visible
(kde#516511)
+ * fix(qwaylandinputpanelsurface): Handle nullptrs when configuring
+
+-------------------------------------------------------------------
Old:
----
plasma-keyboard-6.6.3.tar.xz
plasma-keyboard-6.6.3.tar.xz.sig
New:
----
plasma-keyboard-6.6.4.tar.xz
plasma-keyboard-6.6.4.tar.xz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ plasma6-keyboard.spec ++++++
--- /var/tmp/diff_new_pack.ub1GVK/_old 2026-04-10 17:59:32.110000708 +0200
+++ /var/tmp/diff_new_pack.ub1GVK/_new 2026-04-10 17:59:32.114000872 +0200
@@ -15,6 +15,8 @@
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
+
+
%global kf6_version 6.5.0
%global qt6_version 6.8.0
@@ -28,7 +30,7 @@
%{!?_plasma6_version: %define _plasma6_version %(echo %{_plasma6_bugfix} | awk
-F. '{print $1"."$2}')}
%bcond_without released
Name: plasma6-keyboard
-Version: 6.6.3
+Version: 6.6.4
Release: 0
Summary: Virtual Keyboard for Qt based desktops
License: GPL-2.0-or-later AND GPL-3.0-only
++++++ plasma-keyboard-6.6.3.tar.xz -> plasma-keyboard-6.6.4.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/CMakeLists.txt
new/plasma-keyboard-6.6.4/CMakeLists.txt
--- old/plasma-keyboard-6.6.3/CMakeLists.txt 2026-03-17 12:06:28.000000000
+0100
+++ new/plasma-keyboard-6.6.4/CMakeLists.txt 2026-04-07 09:57:49.000000000
+0200
@@ -3,7 +3,7 @@
cmake_minimum_required(VERSION 3.16)
-set(PROJECT_VERSION "6.6.3")
+set(PROJECT_VERSION "6.6.4")
project(plasma-keyboard VERSION ${PROJECT_VERSION})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/kcm/kcm_plasmakeyboard.json
new/plasma-keyboard-6.6.4/kcm/kcm_plasmakeyboard.json
--- old/plasma-keyboard-6.6.3/kcm/kcm_plasmakeyboard.json 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/kcm/kcm_plasmakeyboard.json 2026-04-07
09:57:49.000000000 +0200
@@ -7,6 +7,7 @@
"Name[bg]": "Devin Lin",
"Name[ca@valencia]": "Devin Lin",
"Name[ca]": "Devin Lin",
+ "Name[cs]": "Devin Lin",
"Name[de]": "Devin Lin",
"Name[es]": "Devin Lin",
"Name[eu]": "Devin Lin",
@@ -39,6 +40,7 @@
"Description[bg]": "Настройване на екранна клавиатура на Plasma",
"Description[ca@valencia]": "Configureu el teclat de Plasma",
"Description[ca]": "Configuració del teclat del Plasma",
+ "Description[cs]": "Nastavení klávesnice Plasma",
"Description[de]": "Einrichtung für Plasma-Tastatur",
"Description[es]": "Configuración del teclado de Plasma",
"Description[eu]": "Plasma teklatuaren konfigurazioa",
@@ -77,6 +79,7 @@
"Name[bg]": "Екранна клавиатура",
"Name[ca@valencia]": "Teclat en pantalla",
"Name[ca]": "Teclat en pantalla",
+ "Name[cs]": "Klávesnice na obrazovce",
"Name[de]": "Bildschirmtastatur",
"Name[es]": "Teclado en pantalla",
"Name[eu]": "Pantailako teklatua",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/po/cs/kcm_plasmakeyboard.po
new/plasma-keyboard-6.6.4/po/cs/kcm_plasmakeyboard.po
--- old/plasma-keyboard-6.6.3/po/cs/kcm_plasmakeyboard.po 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/po/cs/kcm_plasmakeyboard.po 2026-04-07
09:57:49.000000000 +0200
@@ -1,6 +1,6 @@
# Copyright (C) 2025 This file is copyright:
# This file is distributed under the same license as the plasma-keyboard
package.
-# SPDX-FileCopyrightText: 2025 Vit Pelcak <[email protected]>
+# SPDX-FileCopyrightText: 2025, 2026 Vit Pelcak <[email protected]>
#
# SPDX-FileCopyrightText: 2026 Jan Papez (honyczek)
msgid ""
@@ -10,13 +10,13 @@
"POT-Creation-Date: 2025-11-17 11:54+0000\n"
"PO-Revision-Date: 2026-01-27 18:30+0100\n"
"Last-Translator: Jan Papez (honyczek) <[email protected]>\n"
-"Language-Team: Czech <[email protected]>\n"
+"Language-Team: Czech <[email protected]>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Lokalize 25.12.1\n"
+"X-Generator: Lokalize 25.12.3\n"
#: ui/LocaleSelectorListView.qml:68
msgid "Filter languages…"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/po/cs/plasma-keyboard.po
new/plasma-keyboard-6.6.4/po/cs/plasma-keyboard.po
--- old/plasma-keyboard-6.6.3/po/cs/plasma-keyboard.po 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/po/cs/plasma-keyboard.po 2026-04-07
09:57:49.000000000 +0200
@@ -1,31 +1,31 @@
# Copyright (C) 2025 This file is copyright:
# This file is distributed under the same license as the plasma-keyboard
package.
-# SPDX-FileCopyrightText: 2025 Vit Pelcak <[email protected]>
+# SPDX-FileCopyrightText: 2025, 2026 Vit Pelcak <[email protected]>
#
msgid ""
msgstr ""
"Project-Id-Version: plasma-keyboard\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-03-15 02:43+0000\n"
-"PO-Revision-Date: 2025-12-02 11:55+0100\n"
-"Last-Translator: Vit Pelcak <[email protected]>\n"
+"PO-Revision-Date: 2026-03-30 11:50+0200\n"
+"Last-Translator: Vít Pelčák <[email protected]>\n"
"Language-Team: Czech <[email protected]>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Lokalize 25.08.3\n"
+"X-Generator: Lokalize 25.12.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
-msgstr "Vít Pelčák"
+msgstr "Vít Pelčák,Libor Filípek"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
-msgstr "[email protected]"
+msgstr "[email protected],[email protected]"
#: main.cpp:84
#, kde-format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/po/eu/kcm_plasmakeyboard.po
new/plasma-keyboard-6.6.4/po/eu/kcm_plasmakeyboard.po
--- old/plasma-keyboard-6.6.3/po/eu/kcm_plasmakeyboard.po 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/po/eu/kcm_plasmakeyboard.po 2026-04-07
09:57:49.000000000 +0200
@@ -1,10 +1,10 @@
# Translation for kcm_plasmakeyboard.po to Euskara/Basque (eu).
-# Copyright (C) 2025 This file is copyright:
+# Copyright (C) 2025-2026 This file is copyright:
# This file is distributed under the same license as the plasma-keyboard
package.
# SPDX-FileCopyrightText: 2025 KDE euskaratzeko proiektuaren arduraduna
<[email protected]>
#
# Translators:
-# SPDX-FileCopyrightText: 2025 Iñigo Salvador Azurmendi <[email protected]>
+# SPDX-FileCopyrightText: Iñigo Salvador Azurmendi <[email protected]>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: plasma-keyboard\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/po/eu/plasma-keyboard.po
new/plasma-keyboard-6.6.4/po/eu/plasma-keyboard.po
--- old/plasma-keyboard-6.6.3/po/eu/plasma-keyboard.po 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/po/eu/plasma-keyboard.po 2026-04-07
09:57:49.000000000 +0200
@@ -1,10 +1,10 @@
# Translation for plasma-keyboard.po to Euskara/Basque (eu).
-# Copyright (C) 2025 This file is copyright:
+# Copyright (C) 2025-2026 This file is copyright:
# This file is distributed under the same license as the plasma-keyboard
package.
# SPDX-FileCopyrightText: 2025 KDE euskaratzeko proiektuaren arduraduna
<[email protected]>
#
# Translators:
-# SPDX-FileCopyrightText: 2025 Iñigo Salvador Azurmendi <[email protected]>
+# SPDX-FileCopyrightText: Iñigo Salvador Azurmendi <[email protected]>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: plasma-keyboard\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/po/it/kcm_plasmakeyboard.po
new/plasma-keyboard-6.6.4/po/it/kcm_plasmakeyboard.po
--- old/plasma-keyboard-6.6.3/po/it/kcm_plasmakeyboard.po 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/po/it/kcm_plasmakeyboard.po 2026-04-07
09:57:49.000000000 +0200
@@ -1,6 +1,6 @@
# Copyright (C) 2025 This file is copyright:
# This file is distributed under the same license as the plasma-keyboard
package.
-# SPDX-FileCopyrightText: 2025 Paolo Zamponi <[email protected]>
+# SPDX-FileCopyrightText: 2025, 2026 Paolo Zamponi <[email protected]>
#
msgid ""
msgstr ""
@@ -15,7 +15,7 @@
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 25.08.0\n"
+"X-Generator: Lokalize 25.12.3\n"
#: ui/LocaleSelectorListView.qml:68
msgid "Filter languages…"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/po/it/plasma-keyboard.po
new/plasma-keyboard-6.6.4/po/it/plasma-keyboard.po
--- old/plasma-keyboard-6.6.3/po/it/plasma-keyboard.po 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/po/it/plasma-keyboard.po 2026-04-07
09:57:49.000000000 +0200
@@ -1,6 +1,6 @@
# Copyright (C) 2025 This file is copyright:
# This file is distributed under the same license as the plasma-keyboard
package.
-# SPDX-FileCopyrightText: 2025 Vincenzo Reale <[email protected]>
+# SPDX-FileCopyrightText: 2025, 2026 Vincenzo Reale <[email protected]>
#
msgid ""
msgstr ""
@@ -15,7 +15,7 @@
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 25.08.3\n"
+"X-Generator: Lokalize 25.12.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/po/pl/plasma-keyboard.po
new/plasma-keyboard-6.6.4/po/pl/plasma-keyboard.po
--- old/plasma-keyboard-6.6.3/po/pl/plasma-keyboard.po 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/po/pl/plasma-keyboard.po 2026-04-07
09:57:49.000000000 +0200
@@ -1,6 +1,6 @@
# Copyright (C) 2025 This file is copyright:
# This file is distributed under the same license as the plasma-keyboard
package.
-# SPDX-FileCopyrightText: 2025 Łukasz Wojniłowicz
<[email protected]>
+# SPDX-FileCopyrightText: 2025, 2026 Łukasz Wojniłowicz
<[email protected]>
#
msgid ""
msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/po/ro/kcm_plasmakeyboard.po
new/plasma-keyboard-6.6.4/po/ro/kcm_plasmakeyboard.po
--- old/plasma-keyboard-6.6.3/po/ro/kcm_plasmakeyboard.po 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/po/ro/kcm_plasmakeyboard.po 2026-04-07
09:57:49.000000000 +0200
@@ -16,7 +16,7 @@
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
-"X-Generator: Lokalize 25.08.1\n"
+"X-Generator: Lokalize 25.12.3\n"
#: ui/LocaleSelectorListView.qml:68
msgid "Filter languages…"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/po/ro/plasma-keyboard.po
new/plasma-keyboard-6.6.4/po/ro/plasma-keyboard.po
--- old/plasma-keyboard-6.6.3/po/ro/plasma-keyboard.po 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/po/ro/plasma-keyboard.po 2026-04-07
09:57:49.000000000 +0200
@@ -16,7 +16,7 @@
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
-"X-Generator: Lokalize 25.08.1\n"
+"X-Generator: Lokalize 25.12.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/src/inputlisteneritem.cpp
new/plasma-keyboard-6.6.4/src/inputlisteneritem.cpp
--- old/plasma-keyboard-6.6.3/src/inputlisteneritem.cpp 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/src/inputlisteneritem.cpp 2026-04-07
09:57:49.000000000 +0200
@@ -53,14 +53,22 @@
}
});
connect(&m_input, &InputPlugin::surroundingTextChanged, this, [this] {
- QGuiApplication::inputMethod()->update(Qt::ImSurroundingText);
-
if (m_input.hasContext()) {
// Re-activate when text input activates, and there is context
- QGuiApplication::inputMethod()->setVisible(true);
- window()->setVisible(true);
+ if (!window()->isVisible()) {
+ QGuiApplication::inputMethod()->setVisible(true);
+ }
+
+ // Update vkbd input method only if the virtual keyboard panel is
shown
+ if (window()->isExposed()) {
+ QGuiApplication::inputMethod()->update(Qt::ImSurroundingText);
+ }
}
});
+ connect(&m_input, &InputPlugin::deactivate, this, [this] {
+ QGuiApplication::inputMethod()->setVisible(false);
+ QGuiApplication::inputMethod()->reset();
+ });
connect(&m_input, &InputPlugin::resetRequested, this, [] {
QGuiApplication::inputMethod()->reset();
});
@@ -144,6 +152,9 @@
QVariant InputListenerItem::inputMethodQuery(Qt::InputMethodQuery query) const
{
if (!m_input.hasContext()) {
+ if (query == Qt::ImEnabled) {
+ return false;
+ }
return {};
}
@@ -156,14 +167,16 @@
const auto imHints = m_input.contentHint();
Qt::InputMethodHints qtHints;
+ // Disable Qt VirtualKeyboard's hunspell plugin
+ // It deals poorly with current external cursor position change
+ // logic, and causes problems when selecting text with a mouse.
+ qtHints |= Qt::ImhNoPredictiveText;
+
// if (imHints & InputPlugin::content_hint_default) { }
if (imHints & InputPlugin::content_hint_password) {
qtHints |= Qt::ImhSensitiveData;
}
- if ((imHints & InputPlugin::content_hint_auto_completion) == 0) {
- qtHints |= Qt::ImhNoPredictiveText;
- }
- if ((imHints & InputPlugin::content_hint_auto_correction) == 0 ||
(imHints & InputPlugin::content_hint_auto_capitalization) == 0) {
+ if ((imHints & InputPlugin::content_hint_auto_capitalization)) {
qtHints |= Qt::ImhNoAutoUppercase;
}
// if (imHints & InputPlugin::content_hint_titlecase) { }
@@ -228,21 +241,32 @@
case Qt::ImCurrentSelection: {
// cursorPos and anchorPos are in bytes, we need to convert QString to
QByteArray for index operations
QByteArray surroundingText = m_input.surroundingText().toUtf8();
- return QString::fromUtf8(surroundingText.mid(m_input.cursorPos(),
m_input.anchorPos()));
+ int start = qMin(m_input.cursorPos(), m_input.anchorPos());
+ int end = qMax(m_input.cursorPos(), m_input.anchorPos());
+ return QString::fromUtf8(surroundingText.mid(start, end - start));
+ }
+ case Qt::ImAnchorPosition: {
+ // anchorPos is in bytes, we need to convert QString to QByteArray for
index operations
+ QByteArray surroundingText = m_input.surroundingText().toUtf8();
+ int anchorBytes = qBound(0, int(m_input.anchorPos()),
surroundingText.size());
+ return QString::fromUtf8(surroundingText.first(anchorBytes)).length();
+ }
+ case Qt::ImCursorPosition: {
+ // cursorPos is in bytes, we need to convert QString to QByteArray for
index operations
+ QByteArray surroundingText = m_input.surroundingText().toUtf8();
+ int cursorBytes = qBound(0, int(m_input.cursorPos()),
surroundingText.size());
+ return QString::fromUtf8(surroundingText.first(cursorBytes)).length();
}
- case Qt::ImAnchorPosition:
- return m_input.anchorPos();
- case Qt::ImCursorPosition:
- return m_input.cursorPos();
case Qt::ImTextBeforeCursor: {
// cursorPos is in bytes, we need to convert QString to QByteArray for
index operations
QByteArray surroundingText = m_input.surroundingText().toUtf8();
- return QString::fromUtf8(surroundingText.first(m_input.cursorPos()));
+ int cursorBytes = qBound(0, int(m_input.cursorPos()),
surroundingText.size());
+ return QString::fromUtf8(surroundingText.first(cursorBytes));
}
case Qt::ImTextAfterCursor: {
// cursorPos is in bytes, we need to convert QString to QByteArray for
index operations
QByteArray surroundingText = m_input.surroundingText().toUtf8();
- return QString::fromUtf8(surroundingText.mid(m_input.cursorPos() + 1));
+ return QString::fromUtf8(surroundingText.mid(m_input.cursorPos()));
}
case Qt::ImCursorRectangle:
case Qt::ImFont:
@@ -298,28 +322,68 @@
void InputListenerItem::inputMethodEvent(QInputMethodEvent *event)
{
+ // Don't forward events from Qt VKBD to KWin if the keyboard window isn't
open
+ // This avoids the possibility of Qt VKBD causing text changes from
receiving
+ // events (ex. cursor movement) done by its input engine (for features
like text prediction).
+ if (!window()->isExposed()) {
+ return;
+ }
+
+ QString commit = event->commitString();
+ QString preedit = event->preeditString();
+ bool needsReplacement = event->replacementStart() != 0 ||
event->replacementLength() != 0;
+
// Delete characters that are supposed to be replaced
- if (event->replacementLength() > 0) {
- m_input.deleteSurroundingText(event->replacementStart(),
event->replacementLength());
+ if (needsReplacement) {
+ // The positions we send to need to be in bytes (to support UTF8)
+ QString surroundingText = m_input.surroundingText();
+ QByteArray surroundingUtf8 = surroundingText.toUtf8();
+ int boundedCursorBytes = qBound(0, int(m_input.cursorPos()),
surroundingUtf8.size());
+ int cursorChars =
QString::fromUtf8(surroundingUtf8.first(boundedCursorBytes)).size();
+ int startChars = qBound(0, cursorChars + event->replacementStart(),
surroundingText.size());
+ int endChars = qBound(startChars, startChars +
event->replacementLength(), surroundingText.size());
+
+ int startBytes = surroundingText.first(startChars).toUtf8().size();
+ int endBytes = surroundingText.first(endChars).toUtf8().size();
+
+ if (endBytes > startBytes) {
+ m_input.deleteSurroundingText(startBytes - boundedCursorBytes,
endBytes - startBytes);
+ }
}
- const auto attributes = event->attributes();
- for (const auto &x : attributes) {
+ // Commit string if there is something to commit, or we did a replacement
+ if (needsReplacement || !commit.isEmpty()) {
+ m_input.commit(commit);
+ }
+
+ // Set attributes for style (ex. needed for CJK)
+ for (const auto &x : event->attributes()) {
if (x.type == QInputMethodEvent::TextFormat) {
- m_input.setPreEditStyle(x.start, x.length,
x.value.value<QTextFormat>().type());
+ int startBytes = preedit.first(qBound(0, x.start,
preedit.size())).toUtf8().size();
+ int endBytes = preedit.first(qBound(0, x.start + x.length,
preedit.size())).toUtf8().size();
+ m_input.setPreEditStyle(startBytes, endBytes - startBytes,
x.value.value<QTextFormat>().type());
}
}
- // Send cursor position (must be before predit string)
- m_input.setPreEditCursor(event->preeditString().size());
-
- // Send currently being edited string
- m_input.setPreEditString(event->preeditString());
+ // Send cursor position (must be before preedit string)
+ int preEditCursorPos = preedit.toUtf8().size();
+ for (const auto &attribute : event->attributes()) {
+ if (attribute.type != QInputMethodEvent::Cursor) {
+ continue;
+ }
- // Commit string if we have a finished string
- if (const auto commit = event->commitString(); !commit.isEmpty()) {
- m_input.commit(commit);
+ // Set special attribute preedit cursor position (ex. needed for CJK)
+ if (!attribute.value.isValid() || !attribute.value.toBool()) {
+ preEditCursorPos = -1;
+ } else {
+ preEditCursorPos = preedit.first(qBound(0, attribute.start,
preedit.size())).toUtf8().size();
+ }
+ break;
}
+ m_input.setPreEditCursor(preEditCursorPos);
+
+ // Send currently being edited string
+ m_input.setPreEditString(preedit);
}
#include "moc_inputlisteneritem.cpp"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/src/inputplugin.cpp
new/plasma-keyboard-6.6.4/src/inputplugin.cpp
--- old/plasma-keyboard-6.6.3/src/inputplugin.cpp 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/src/inputplugin.cpp 2026-04-07
09:57:49.000000000 +0200
@@ -10,6 +10,7 @@
InputPlugin::InputPlugin(InputMethod *inputMethod)
{
+ connect(inputMethod, &InputMethod::deactivate, this,
&InputPlugin::deactivate);
connect(inputMethod, &InputMethod::activityChanged, this, [this,
inputMethod]() {
if (m_context) {
disconnect(m_context.get(), nullptr, this, nullptr);
@@ -26,6 +27,7 @@
connect(m_context.get(), &InputMethodContext::surroundingTextChanged,
this, &InputPlugin::surroundingTextChanged);
connect(m_context.get(), &InputMethodContext::contentTypeChanged,
this, &InputPlugin::contentTypeChanged);
connect(m_context.get(), &InputMethodContext::reset, this,
&InputPlugin::resetRequested);
+ connect(m_context.get(),
&InputMethodContext::preferredLanguageChanged, this,
&InputPlugin::preferredLanguageChanged);
if (m_grabbing) {
setGrabbingInternal();
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plasma-keyboard-6.6.3/src/inputplugin.h
new/plasma-keyboard-6.6.4/src/inputplugin.h
--- old/plasma-keyboard-6.6.3/src/inputplugin.h 2026-03-17 12:06:28.000000000
+0100
+++ new/plasma-keyboard-6.6.4/src/inputplugin.h 2026-04-07 09:57:49.000000000
+0200
@@ -94,6 +94,8 @@
void contentTypeChanged();
void receivedCommit();
void resetRequested();
+ void deactivate();
+ void preferredLanguageChanged(const QString &language);
/**
* A key has been pressed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plasma-keyboard-6.6.3/src/org.kde.plasma.keyboard.desktop
new/plasma-keyboard-6.6.4/src/org.kde.plasma.keyboard.desktop
--- old/plasma-keyboard-6.6.3/src/org.kde.plasma.keyboard.desktop
2026-03-17 12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/src/org.kde.plasma.keyboard.desktop
2026-04-07 09:57:49.000000000 +0200
@@ -7,6 +7,7 @@
Name[bg]=Клавиатура на Plasma
Name[ca]=Teclat del Plasma
Name[ca@valencia]=Teclat de Plasma
+Name[cs]=Klávesnice Plasma
Name[de]=Plasma-Tastatur
Name[es]=Teclado de Plasma
Name[eu]=Plasma teklatua
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plasma-keyboard-6.6.3/src/org.kde.plasma.keyboard.metainfo.xml
new/plasma-keyboard-6.6.4/src/org.kde.plasma.keyboard.metainfo.xml
--- old/plasma-keyboard-6.6.3/src/org.kde.plasma.keyboard.metainfo.xml
2026-03-17 12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/src/org.kde.plasma.keyboard.metainfo.xml
2026-04-07 09:57:49.000000000 +0200
@@ -10,6 +10,7 @@
<name xml:lang="bg">Клавиатура на Plasma</name>
<name xml:lang="ca">Teclat del Plasma</name>
<name xml:lang="ca-valencia">Teclat de Plasma</name>
+ <name xml:lang="cs">Klávesnice Plasma</name>
<name xml:lang="de">Plasma-Tastatur</name>
<name xml:lang="es">Teclado de Plasma</name>
<name xml:lang="eu">Plasma Teklatua</name>
@@ -40,6 +41,7 @@
<summary xml:lang="bg">Екранна клавиатура за Plasma</summary>
<summary xml:lang="ca">Teclat en pantalla per al Plasma</summary>
<summary xml:lang="ca-valencia">Teclat en pantalla per a Plasma</summary>
+ <summary xml:lang="cs">Klávesnice na obrazovku pro Plasma</summary>
<summary xml:lang="de">Bildschirmtastatur für Plasma</summary>
<summary xml:lang="es">Teclado en pantalla para Plasma</summary>
<summary xml:lang="eu">Plasmarako pantailako teklatu bat</summary>
@@ -72,10 +74,11 @@
Plasma Keyboard provides a virtual, on-screen keyboard for touchscreens,
tablets, convertible devices,
phones, and traditional computers without a physical keyboard.
</p>
- <p xml:lang="ar">توفر لوحة مفاتيح بلازما لوحة مفاتيح افتراضية على الشاشة
لأجهزة اللمس والأجهزة اللوحية والأجهزة القابلة للتحويل والهواتف وأجهزة
الكمبيوتر التقليدية التي لا تحتوي على لوحة مفاتيح فعلية.</p>
+ <p xml:lang="ar">توفر لوحة مفاتيح بلازما لوحة مفاتيح افتراضية على الشاشة
لأجهزة اللمس والأجهزة اللوحية والأجهزة القابلة للتحويل والهواتف وأجهزة الحاسوب
التقليدية التي لا تحتوي على لوحة مفاتيح فعلية.</p>
<p xml:lang="bg">Клавиатура на Plasma предоставя виртуална екранна
клавиатура за сензорни екрани, таблети, конвертируеми устройства, телефони и
традиционни компютри без физическа клавиатура.</p>
<p xml:lang="ca">El Teclat del Plasma proporciona un teclat virtual en
pantalla per a pantalles tàctils, tauletes, dispositius convertibles, telèfons
i ordinadors tradicionals sense teclat físic.</p>
<p xml:lang="ca-valencia">El Teclat de Plasma proporciona un teclat
virtual en pantalla per a pantalles tàctils, tauletes, dispositius
convertibles, telèfons i ordinadors tradicionals sense teclat físic.</p>
+ <p xml:lang="cs">Aplikace Klávesnice Plasma poskytuje virtuální klávesnici
na obrazovce pro dotykové displeje, tablety, konvertibilní zařízení, telefony a
klasické počítače bez fyzické klávesnice.</p>
<p xml:lang="de">Plasma-Tastatur bietet eine virtuelle Bildschirmtastatur
für Touchscreens, Tablets, 2-in-1-Geräte (Convertibles), Smartphones und
herkömmliche Computer ohne physische Tastatur.</p>
<p xml:lang="es">El «Teclado de Plasma» proporciona un teclado virtual en
pantalla para pantallas táctiles, tabletas, dispositivos convertibles,
teléfonos y equipos tradicionales que carecen de teclado físico.</p>
<p xml:lang="eu">Plasma Teklatuak pantailan agertzen den alegiazko teklatu
bat eskaintzen du, teklaturik gabeko ukimen-pantaila, tableta, gailu
bihurgarri, telefono, eta ohiko ordenagailuetarako.</p>
@@ -106,7 +109,8 @@
<li xml:lang="bg">Гладка интеграция с работното пространство и
приложенията на Plasma</li>
<li xml:lang="ca">Integració perfecta amb l'espai de treball i les
aplicacions del Plasma</li>
<li xml:lang="ca-valencia">Integració perfecta amb l'espai de treball i
les aplicacions de Plasma</li>
- <li xml:lang="de">Nahtlose Integration mit der Plasma-Arbeitsumgebung
und Anwendungen</li>
+ <li xml:lang="cs">Hladká integrace s pracovním prostředím Plasma a
aplikacemi</li>
+ <li xml:lang="de">Nahtlose Integration mit der Plasma-Arbeitsumgebung
und deren Anwendungen</li>
<li xml:lang="es">Integración perfecta con el espacio de trabajo y las
aplicaciones de Plasma</li>
<li xml:lang="eu">Plasma langunea eta aplikazioekin bateratze ezin
hobea</li>
<li xml:lang="fi">Saumaton eheytys Plasma-työtilan ja -sovellusten
kanssa</li>
@@ -135,6 +139,7 @@
<li xml:lang="bg">Автоматично появяване, когато е необходимо въвеждане
на текст</li>
<li xml:lang="ca">Apareix automàticament quan es necessita l'entrada de
text</li>
<li xml:lang="ca-valencia">Apareix automàticament quan es necessita
l'entrada de text</li>
+ <li xml:lang="cs">Automatické zobrazení při potřebě zadání textu</li>
<li xml:lang="de">Automatisches Erscheinen, wenn Texteingabe
erforderlich ist</li>
<li xml:lang="es">Aparece automáticamente cuando se necesita entrada de
texto</li>
<li xml:lang="eu">Testua sartu behar denean automatikoki agertzea</li>
@@ -164,6 +169,7 @@
<li xml:lang="bg">Поддръжка на множество подредби и езици</li>
<li xml:lang="ca">Permet múltiples disposicions i llengües</li>
<li xml:lang="ca-valencia">Permet múltiples disposicions i llengües</li>
+ <li xml:lang="cs">Podpora mnoha rozvržení a jazyků</li>
<li xml:lang="de">Unterstützung mehrerer Layouts und Sprachen</li>
<li xml:lang="es">Compatible con muchas distribuciones de teclado e
idiomas</li>
<li xml:lang="eu">Antolaera eta hizkuntza anitzetarako euskarria</li>
@@ -193,6 +199,7 @@
<li xml:lang="bg">Адаптиращ се размер и поведение за различни по размери
устройства</li>
<li xml:lang="ca">Mida i comportament configurables per a factors de
forma diferents</li>
<li xml:lang="ca-valencia">Mida i comportament configurables per a
factors de forma diferents</li>
+ <li xml:lang="cs">Nastavitelná velikost a chování pro různé formáty</li>
<li xml:lang="de">An verschiedene Einsatzbereiche anpassbare Größe und
Verhalten</li>
<li xml:lang="es">Se puede modificar su tamaño y su comportamiento para
distintos factores de forma</li>
<li xml:lang="eu">Forma-faktore ezberdinetarako neurri eta jokabide
konfiguragarria</li>
@@ -235,9 +242,9 @@
<binary>plasma-keyboard</binary>
</provides>
<releases>
+ <release version="6.6.4" date="2026-04-06"/>
<release version="6.6.3" date="2026-03-17"/>
<release version="6.6.2" date="2026-03-03"/>
<release version="6.6.1" date="2026-02-24"/>
- <release version="6.6.0" date="2026-02-17"/>
</releases>
</component>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plasma-keyboard-6.6.3/src/qwaylandinputpanelsurface.cpp
new/plasma-keyboard-6.6.4/src/qwaylandinputpanelsurface.cpp
--- old/plasma-keyboard-6.6.3/src/qwaylandinputpanelsurface.cpp 2026-03-17
12:06:28.000000000 +0100
+++ new/plasma-keyboard-6.6.4/src/qwaylandinputpanelsurface.cpp 2026-04-07
09:57:49.000000000 +0200
@@ -29,10 +29,17 @@
void QWaylandInputPanelSurface::applyConfigure()
{
static const bool preferTopLevel =
qEnvironmentVariableIntValue("QT_WAYLAND_INPUT_PANEL_TOPLEVEL");
- if (preferTopLevel)
- set_toplevel(window()->waylandScreen()->output(),
position_center_bottom);
- else
+ if (preferTopLevel) {
+ QtWaylandClient::QWaylandScreen *screen = window()->waylandScreen();
+ if (!screen) {
+ qCWarning(qLcQpaShellIntegration) << "No Wayland screen available,
cannot configure input panel surface";
+ return;
+ }
+
+ set_toplevel(screen->output(), position_center_bottom);
+ } else {
set_overlay_panel();
+ }
window()->display()->handleWindowActivated(window());
}