Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
27091ab5d1 | ||
|
|
6a6971e1cb | ||
|
|
edea4ce0d2 | ||
|
|
b431428260 | ||
|
|
aeb6c590db | ||
|
|
428e74b2d8 |
@@ -5,6 +5,7 @@ import android.view.View;
|
||||
import android.webkit.WebView;
|
||||
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
|
||||
@@ -25,13 +26,19 @@ public class MainActivity extends BridgeActivity {
|
||||
}
|
||||
});
|
||||
|
||||
// Edge-to-Edge: Bei offener Tastatur den WebView um die Tastaturhöhe verkleinern,
|
||||
// damit Terminal und Zusatztasten sichtbar bleiben
|
||||
// Edge-to-Edge: Ränder für Status- und Navigationsleiste setzt diese Ansicht. Den Platz für die Tastatur
|
||||
// schafft Android/WebView selbst – hier nur melden, ob sie offen ist (sonst würde doppelt verkleinert).
|
||||
View parent = (View) web.getParent();
|
||||
parent.setBackgroundColor(0xFF14161D);
|
||||
final boolean[] imeOpen = { false };
|
||||
ViewCompat.setOnApplyWindowInsetsListener(parent, (v, insets) -> {
|
||||
int ime = insets.getInsets(WindowInsetsCompat.Type.ime()).bottom;
|
||||
v.setPadding(0, 0, 0, ime);
|
||||
web.evaluateJavascript("window.mrtermIme && window.mrtermIme(" + (ime > 0) + ")", null);
|
||||
Insets bars = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());
|
||||
boolean open = insets.isVisible(WindowInsetsCompat.Type.ime());
|
||||
v.setPadding(bars.left, bars.top, bars.right, open ? 0 : bars.bottom);
|
||||
if (open != imeOpen[0]) {
|
||||
imeOpen[0] = open;
|
||||
web.evaluateJavascript("window.mrtermIme && window.mrtermIme(" + open + ")", null);
|
||||
}
|
||||
return insets;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ function buildWeb() {
|
||||
copy(path.join(nm, 'xterm', 'lib', 'xterm.js'), path.join(WWW, 'lib', 'xterm.js'));
|
||||
copy(path.join(nm, 'xterm', 'css', 'xterm.css'), path.join(WWW, 'lib', 'xterm.css'));
|
||||
copy(path.join(nm, 'addon-fit', 'lib', 'addon-fit.js'), path.join(WWW, 'lib', 'addon-fit.js'));
|
||||
copy(path.join(__dirname, 'node_modules', '@capacitor', 'core', 'dist', 'capacitor.js'), path.join(WWW, 'lib', 'capacitor.js'));
|
||||
copy(path.join(ROOT, 'src', 'i18n.js'), path.join(WWW, 'lib', 'i18n.js'));
|
||||
copy(path.join(ROOT, 'src', 'renderer', 'themes.js'), path.join(WWW, 'lib', 'themes.js'));
|
||||
copy(path.join(ROOT, 'src', 'renderer', 'logo.png'), path.join(WWW, 'logo.png'));
|
||||
|
||||
@@ -38,6 +38,14 @@
|
||||
<div id="layer"></div>
|
||||
<div id="toasts"></div>
|
||||
|
||||
<script>
|
||||
// Fehler beim Laden sichtbar machen statt endlos den Ladekreis zu zeigen
|
||||
window.addEventListener('error', (e) => {
|
||||
const b = document.getElementById('boot');
|
||||
if (b && !b.hidden) b.innerHTML = '<div style="color:#ff5f6d;padding:24px;text-align:center;font:14px system-ui">' + String(e.message || e.error).replace(/</g, '<') + '</div>';
|
||||
});
|
||||
</script>
|
||||
<script src="lib/capacitor.js"></script>
|
||||
<script src="lib/i18n.js"></script>
|
||||
<script src="lib/themes.js"></script>
|
||||
<script src="lib/xterm.js"></script>
|
||||
|
||||
@@ -13,8 +13,9 @@
|
||||
--orange: #ffb347;
|
||||
--radius: 14px;
|
||||
/* Capacitor setzt --safe-area-inset-* bei Edge-to-Edge; env() als Rückfall */
|
||||
--top: max(env(safe-area-inset-top, 0px), var(--safe-area-inset-top, 0px));
|
||||
--bottom: max(env(safe-area-inset-bottom, 0px), var(--safe-area-inset-bottom, 0px));
|
||||
/* Status-/Navigationsleiste und Tastatur rechnet MainActivity als Rand um den WebView heraus */
|
||||
--top: 0px;
|
||||
--bottom: 0px;
|
||||
color-scheme: dark;
|
||||
}
|
||||
* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "mrterm",
|
||||
"version": "0.11.1",
|
||||
"version": "0.11.4",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "mrterm",
|
||||
"version": "0.11.1",
|
||||
"version": "0.11.4",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@xterm/addon-fit": "^0.11.0",
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "mrterm",
|
||||
"productName": "MrTerm",
|
||||
"version": "0.11.1",
|
||||
"version": "0.11.4",
|
||||
"description": "Moderner SSH-, SFTP- und RDP-Client",
|
||||
"main": "src/main/main.js",
|
||||
"author": "MrBlake",
|
||||
|
||||
Reference in New Issue
Block a user