diff --git a/applets/manage-inputmethod/contents/ui/manage-inputmethod.qml b/applets/manage-inputmethod/contents/ui/manage-inputmethod.qml index 88a806aab..533c53182 100644 --- a/applets/manage-inputmethod/contents/ui/manage-inputmethod.qml +++ b/applets/manage-inputmethod/contents/ui/manage-inputmethod.qml @@ -19,12 +19,16 @@ Item { id: root property var overlays: [] - Plasmoid.onActivated: if (!Keyboards.KWinVirtualKeyboard.available) { - root.action_settings() - } else if (Keyboards.KWinVirtualKeyboard.visible) { - Keyboards.KWinVirtualKeyboard.active = false - } else { - Keyboards.KWinVirtualKeyboard.enabled = !Keyboards.KWinVirtualKeyboard.enabled + Plasmoid.onActivated: { + if (!Keyboards.KWinVirtualKeyboard.available) { + root.action_settings() + } else if (unsupportedState.when) { + Keyboards.KWinVirtualKeyboard.forceActivate() + } else if (Keyboards.KWinVirtualKeyboard.visible) { + Keyboards.KWinVirtualKeyboard.active = false + } else { + Keyboards.KWinVirtualKeyboard.enabled = !Keyboards.KWinVirtualKeyboard.enabled + } } Plasmoid.preferredRepresentation: Plasmoid.compactRepresentation Plasmoid.fullRepresentation: Plasmoid.compactRepresentation @@ -67,7 +71,7 @@ Item { states: [ State { - name: "available" + name: "unavailable" when: !Keyboards.KWinVirtualKeyboard.available PropertyChanges { target: Plasmoid.self @@ -88,6 +92,20 @@ Item { } PropertyChanges { target: root; overlays: [] } }, + State { + id: unsupportedState + name: "unsupported" + when: Keyboards.KWinVirtualKeyboard.available && !Keyboards.KWinVirtualKeyboard.activeClientSupportsTextInput + // When the current client doesn't support input methods, we can force + // the display of the virtual keyboard so it emulates a hardware keyboard instead + PropertyChanges { + target: Plasmoid.self + icon: "arrow-up" + toolTipSubText: i18n("Show Virtual Keyboard") + status: Kirigami.Settings.tabletMode ? PlasmaCore.Types.ActiveStatus : PlasmaCore.Types.PassiveStatus + } + PropertyChanges { target: root; overlays: [] } + }, State { name: "visible" when: Keyboards.KWinVirtualKeyboard.available && Keyboards.KWinVirtualKeyboard.visible diff --git a/components/keyboardlayout/virtualkeyboard.h b/components/keyboardlayout/virtualkeyboard.h index a3abbe6dc..c42f278f5 100644 --- a/components/keyboardlayout/virtualkeyboard.h +++ b/components/keyboardlayout/virtualkeyboard.h @@ -15,6 +15,7 @@ class KwinVirtualKeyboardInterface : public OrgKdeKwinVirtualKeyboardInterface Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged) Q_PROPERTY(bool visible READ visible NOTIFY visibleChanged) Q_PROPERTY(bool available READ available NOTIFY availableChanged) + Q_PROPERTY(bool activeClientSupportsTextInput READ activeClientSupportsTextInput NOTIFY activeClientSupportsTextInputChanged) public: KwinVirtualKeyboardInterface(); };