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());
 }

Reply via email to