From d2af509eaf023438c8376be9e629c38a8d45e06e Mon Sep 17 00:00:00 2001
From: Lim Chee Aun <cheeaun@gmail.com>
Date: Wed, 27 Mar 2024 21:22:47 +0800
Subject: [PATCH] Hacky way to show on-screen keyboard

Doesn't work some of the time.
---
 src/components/compose-button.jsx |  2 ++
 src/utils/open-osk.jsx            | 16 ++++++++++++++++
 2 files changed, 18 insertions(+)
 create mode 100644 src/utils/open-osk.jsx

diff --git a/src/components/compose-button.jsx b/src/components/compose-button.jsx
index 3587c2f6..ef64adf7 100644
--- a/src/components/compose-button.jsx
+++ b/src/components/compose-button.jsx
@@ -1,6 +1,7 @@
 import { useHotkeys } from 'react-hotkeys-hook';
 
 import openCompose from '../utils/open-compose';
+import openOSK from '../utils/open-osk';
 import states from '../utils/states';
 
 import Icon from './icon';
@@ -14,6 +15,7 @@ export default function ComposeButton() {
         states.showCompose = true;
       }
     } else {
+      openOSK();
       states.showCompose = true;
     }
   }
diff --git a/src/utils/open-osk.jsx b/src/utils/open-osk.jsx
new file mode 100644
index 00000000..188a5e9f
--- /dev/null
+++ b/src/utils/open-osk.jsx
@@ -0,0 +1,16 @@
+const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // https://stackoverflow.com/a/23522755
+
+export default function openOSK() {
+  if (isSafari) {
+    const fauxEl = document.createElement('input');
+    fauxEl.style.position = 'absolute';
+    fauxEl.style.top = '0';
+    fauxEl.style.left = '0';
+    fauxEl.style.opacity = '0';
+    document.body.appendChild(fauxEl);
+    fauxEl.focus();
+    setTimeout(() => {
+      document.body.removeChild(fauxEl);
+    }, 500);
+  }
+}