diff --git a/data/gnome-shell-osk-layouts.gresource.xml b/data/gnome-shell-osk-layouts.gresource.xml
index efaf47491..57ad33547 100644
--- a/data/gnome-shell-osk-layouts.gresource.xml
+++ b/data/gnome-shell-osk-layouts.gresource.xml
@@ -44,7 +44,9 @@
my.json
nl.json
no.json
+ number.json
ph.json
+ phone.json
pl.json
pt.json
ro.json
diff --git a/data/osk-layouts/number.json b/data/osk-layouts/number.json
new file mode 100644
index 000000000..db82fb753
--- /dev/null
+++ b/data/osk-layouts/number.json
@@ -0,0 +1,95 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "7"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic"
+ }
+ ],
+ [
+ {
+ "strings": [
+ "4"
+ ]
+ },
+ {
+ "strings": [
+ "5"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "height": 2
+ }
+ ],
+ [
+ {
+ "strings": [
+ "1"
+ ]
+ },
+ {
+ "strings": [
+ "2"
+ ]
+ },
+ {
+ "strings": [
+ "3"
+ ]
+ }
+ ],
+ [
+ {
+ "strings": [
+ "-",
+ "+",
+ "E"
+ ]
+ },
+ {
+ "strings": [
+ "0"
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ ","
+ ]
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "name": "Numeric Keyboard"
+}
diff --git a/data/osk-layouts/phone.json b/data/osk-layouts/phone.json
new file mode 100644
index 000000000..0708d6790
--- /dev/null
+++ b/data/osk-layouts/phone.json
@@ -0,0 +1,93 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "7"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic"
+ }
+ ],
+ [
+ {
+ "strings": [
+ "4"
+ ]
+ },
+ {
+ "strings": [
+ "5"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "height": 2
+ }
+ ],
+ [
+ {
+ "strings": [
+ "1"
+ ]
+ },
+ {
+ "strings": [
+ "2"
+ ]
+ },
+ {
+ "strings": [
+ "3"
+ ]
+ }
+ ],
+ [
+ {
+ "strings": [
+ "*"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "+"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "name": "Phone"
+}
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index 8f460bb52..f6b01c294 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -1391,10 +1391,12 @@ export const Keyboard = GObject.registerClass({
y_expand: true,
});
- if (purpose === Clutter.InputContentPurpose.DIGITS ||
- purpose === Clutter.InputContentPurpose.NUMBER ||
- purpose === Clutter.InputContentPurpose.PHONE) {
+ if (purpose === Clutter.InputContentPurpose.DIGITS) {
keyboardModel = new KeyboardModel('digits');
+ } else if (purpose === Clutter.InputContentPurpose.NUMBER) {
+ keyboardModel = new KeyboardModel('number');
+ } else if (purpose === Clutter.InputContentPurpose.PHONE) {
+ keyboardModel = new KeyboardModel('phone');
} else {
let groups = [groupName];
if (groupName.includes('+'))