mirror of
https://github.com/zoriya/noctalia-shell.git
synced 2026-08-15 18:43:59 +00:00
LockScreen: more sizing tweaks
This commit is contained in:
@@ -1415,7 +1415,9 @@
|
||||
"failed-gpu": "gpu-screen-recorder unerwartet beendet.",
|
||||
"failed-general": "Der Rekorder wurde mit einem Fehler beendet.",
|
||||
"no-portals": "Desktop-Portale laufen nicht",
|
||||
"no-portals-desc": "Starten Sie xdg-desktop-portal und ein Compositor-Portal (wlr/hyprland/gnome/kde)."
|
||||
"no-portals-desc": "Starten Sie xdg-desktop-portal und ein Compositor-Portal (wlr/hyprland/gnome/kde).",
|
||||
"not-installed": "gpu-screen-recorder nicht installiert",
|
||||
"not-installed-desc": "Bitte installieren Sie gpu-screen-recorder, um Bildschirmaufnahme-Funktionen zu nutzen."
|
||||
},
|
||||
"clipboard": {
|
||||
"unavailable": "Zwischenablage-Verlauf nicht verfügbar",
|
||||
|
||||
@@ -1386,7 +1386,9 @@
|
||||
"failed-gpu": "gpu-screen-recorder exited unexpectedly.",
|
||||
"failed-general": "The recorder exited with an error.",
|
||||
"no-portals": "Desktop portals not running",
|
||||
"no-portals-desc": "Start xdg-desktop-portal and a compositor portal (wlr/hyprland/gnome/kde)."
|
||||
"no-portals-desc": "Start xdg-desktop-portal and a compositor portal (wlr/hyprland/gnome/kde).",
|
||||
"not-installed": "gpu-screen-recorder not installed",
|
||||
"not-installed-desc": "Please install gpu-screen-recorder to use screen recording features."
|
||||
},
|
||||
"clipboard": {
|
||||
"unavailable": "Clipboard history unavailable",
|
||||
|
||||
@@ -1383,7 +1383,9 @@
|
||||
"failed-gpu": "gpu-screen-recorder se cerró inesperadamente.",
|
||||
"failed-general": "La grabadora se cerró con un error.",
|
||||
"no-portals": "Los portales de escritorio no están en ejecución",
|
||||
"no-portals-desc": "Inicia xdg-desktop-portal y un portal de compositor (wlr/hyprland/gnome/kde)."
|
||||
"no-portals-desc": "Inicia xdg-desktop-portal y un portal de compositor (wlr/hyprland/gnome/kde).",
|
||||
"not-installed": "gpu-screen-recorder no instalado",
|
||||
"not-installed-desc": "Por favor instala gpu-screen-recorder para usar las funciones de grabación de pantalla."
|
||||
},
|
||||
"clipboard": {
|
||||
"unavailable": "Historial del portapapeles no disponible",
|
||||
|
||||
@@ -1383,7 +1383,9 @@
|
||||
"failed-gpu": "gpu-screen-recorder s'est arrêté de manière inattendue.",
|
||||
"failed-general": "L'enregistreur s'est arrêté avec une erreur.",
|
||||
"no-portals": "Les portails de bureau ne sont pas en cours d'exécution",
|
||||
"no-portals-desc": "Démarrez xdg-desktop-portal et un portail de compositeur (wlr/hyprland/gnome/kde)."
|
||||
"no-portals-desc": "Démarrez xdg-desktop-portal et un portail de compositeur (wlr/hyprland/gnome/kde).",
|
||||
"not-installed": "gpu-screen-recorder non installé",
|
||||
"not-installed-desc": "Veuillez installer gpu-screen-recorder pour utiliser les fonctionnalités d'enregistrement d'écran."
|
||||
},
|
||||
"clipboard": {
|
||||
"unavailable": "Historique du presse-papiers indisponible",
|
||||
|
||||
@@ -1383,7 +1383,9 @@
|
||||
"failed-gpu": "gpu-screen-recorder encerrou inesperadamente.",
|
||||
"failed-general": "O gravador encerrou com um erro.",
|
||||
"no-portals": "Portais de desktop não estão em execução",
|
||||
"no-portals-desc": "Inicie o xdg-desktop-portal e um portal de compositor (wlr/hyprland/gnome/kde)."
|
||||
"no-portals-desc": "Inicie o xdg-desktop-portal e um portal de compositor (wlr/hyprland/gnome/kde).",
|
||||
"not-installed": "gpu-screen-recorder não instalado",
|
||||
"not-installed-desc": "Por favor instale o gpu-screen-recorder para usar as funcionalidades de gravação de tela."
|
||||
},
|
||||
"clipboard": {
|
||||
"unavailable": "Histórico da área de transferência indisponível",
|
||||
|
||||
@@ -1383,7 +1383,9 @@
|
||||
"failed-gpu": "gpu-screen-recorder 意外退出。",
|
||||
"failed-general": "录制器因错误退出。",
|
||||
"no-portals": "桌面门户未运行",
|
||||
"no-portals-desc": "请启动 xdg-desktop-portal 和一个合成器门户 (wlr/hyprland/gnome/kde)。"
|
||||
"no-portals-desc": "请启动 xdg-desktop-portal 和一个合成器门户 (wlr/hyprland/gnome/kde)。",
|
||||
"not-installed": "gpu-screen-recorder 未安装",
|
||||
"not-installed-desc": "请安装 gpu-screen-recorder 以使用屏幕录制功能。"
|
||||
},
|
||||
"clipboard": {
|
||||
"unavailable": "剪贴板历史记录不可用",
|
||||
|
||||
@@ -18,5 +18,14 @@ NIconButton {
|
||||
colorFg: ScreenRecorderService.isRecording ? Color.mOnPrimary : Color.mOnSurface
|
||||
colorBorder: Color.transparent
|
||||
colorBorderHover: Color.transparent
|
||||
onClicked: ScreenRecorderService.toggleRecording()
|
||||
|
||||
function handleClick() {
|
||||
if (!ScreenRecorderService.isAvailable) {
|
||||
ToastService.showError(I18n.tr("toast.recording.not-installed"), I18n.tr("toast.recording.not-installed-desc"), 7000)
|
||||
return
|
||||
}
|
||||
ScreenRecorderService.toggleRecording()
|
||||
}
|
||||
|
||||
onClicked: handleClick()
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ Loader {
|
||||
id: timeText
|
||||
text: lockScreen.formatTime()
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
pointSize: 80 * scaling
|
||||
pointSize: 72 * scaling
|
||||
font.weight: Font.Medium
|
||||
color: Color.mOnSurface
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
@@ -159,8 +159,8 @@ Loader {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
Rectangle {
|
||||
Layout.preferredWidth: 160 * scaling
|
||||
Layout.preferredHeight: 160 * scaling
|
||||
Layout.preferredWidth: 140 * scaling
|
||||
Layout.preferredHeight: 140 * scaling
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
radius: width * 0.5
|
||||
color: Color.transparent
|
||||
@@ -189,8 +189,8 @@ Loader {
|
||||
|
||||
NImageCircled {
|
||||
anchors.centerIn: parent
|
||||
width: 150 * scaling
|
||||
height: 150 * scaling
|
||||
width: 130 * scaling
|
||||
height: 130 * scaling
|
||||
imagePath: Settings.data.general.avatarImage
|
||||
fallbackIcon: "person"
|
||||
|
||||
@@ -223,7 +223,7 @@ Loader {
|
||||
NText {
|
||||
text: Quickshell.env("USER")
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
pointSize: Style.fontSizeXXXL * scaling * 1.2
|
||||
pointSize: Style.fontSizeXXXL * scaling
|
||||
font.weight: Font.Medium
|
||||
color: Color.mOnSurface
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
@@ -274,26 +274,26 @@ Loader {
|
||||
|
||||
// Bottom container with weather, password input and controls
|
||||
Rectangle {
|
||||
width: 800 * scaling
|
||||
height: 240 * scaling
|
||||
width: 750 * scaling
|
||||
height: 220 * scaling
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: 100 * scaling
|
||||
radius: 35 * scaling
|
||||
radius: 32 * scaling
|
||||
color: Qt.alpha(Color.mSurfaceContainerHighest, 0.9)
|
||||
border.color: Qt.alpha(Color.mOutline, 0.2)
|
||||
border.width: 1
|
||||
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
anchors.margins: 16 * scaling
|
||||
spacing: 16 * scaling
|
||||
anchors.margins: 14 * scaling
|
||||
spacing: 14 * scaling
|
||||
|
||||
// Weather section
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 70 * scaling
|
||||
spacing: 20 * scaling
|
||||
Layout.preferredHeight: 65 * scaling
|
||||
spacing: 18 * scaling
|
||||
visible: LocationService.coordinatesReady && LocationService.data.weather !== null
|
||||
|
||||
// Media widget with visualizer
|
||||
@@ -555,17 +555,17 @@ Loader {
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 52 * scaling
|
||||
radius: 26 * scaling
|
||||
Layout.preferredHeight: 48 * scaling
|
||||
radius: 24 * scaling
|
||||
color: Qt.alpha(Color.mSurfaceContainerHighest, 0.6)
|
||||
border.color: passwordInput.activeFocus ? Color.mPrimary : Qt.alpha(Color.mOutline, 0.3)
|
||||
border.width: passwordInput.activeFocus ? 2 : 1
|
||||
|
||||
Row {
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 20 * scaling
|
||||
anchors.leftMargin: 18 * scaling
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: 16 * scaling
|
||||
spacing: 14 * scaling
|
||||
|
||||
NIcon {
|
||||
icon: "lock"
|
||||
@@ -654,10 +654,10 @@ Loader {
|
||||
|
||||
Rectangle {
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 10 * scaling
|
||||
anchors.rightMargin: 8 * scaling
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: 38 * scaling
|
||||
height: 38 * scaling
|
||||
width: 36 * scaling
|
||||
height: 36 * scaling
|
||||
radius: width * 0.5
|
||||
color: submitButtonArea.containsMouse ? Color.mPrimary : Qt.alpha(Color.mPrimary, 0.8)
|
||||
border.color: Color.mPrimary
|
||||
@@ -695,8 +695,8 @@ Loader {
|
||||
// System control buttons
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 52 * scaling
|
||||
spacing: 12 * scaling
|
||||
Layout.preferredHeight: 48 * scaling
|
||||
spacing: 10 * scaling
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: Style.marginM * scaling
|
||||
@@ -704,24 +704,24 @@ Loader {
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 52 * scaling
|
||||
radius: 26 * scaling
|
||||
Layout.preferredHeight: 48 * scaling
|
||||
radius: 24 * scaling
|
||||
color: logoutButtonArea.containsMouse ? Color.mTertiary : "transparent"
|
||||
|
||||
RowLayout {
|
||||
anchors.centerIn: parent
|
||||
spacing: 8 * scaling
|
||||
spacing: 6 * scaling
|
||||
|
||||
NIcon {
|
||||
icon: "logout"
|
||||
pointSize: Style.fontSizeXL * scaling
|
||||
pointSize: Style.fontSizeL * scaling
|
||||
color: logoutButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurfaceVariant
|
||||
}
|
||||
|
||||
NText {
|
||||
text: I18n.tr("session-menu.logout")
|
||||
color: logoutButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurfaceVariant
|
||||
pointSize: Style.fontSizeL * scaling
|
||||
pointSize: Style.fontSizeM * scaling
|
||||
font.weight: Font.Medium
|
||||
}
|
||||
}
|
||||
@@ -743,24 +743,24 @@ Loader {
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 52 * scaling
|
||||
radius: 26 * scaling
|
||||
Layout.preferredHeight: 48 * scaling
|
||||
radius: 24 * scaling
|
||||
color: rebootButtonArea.containsMouse ? Color.mTertiary : "transparent"
|
||||
|
||||
RowLayout {
|
||||
anchors.centerIn: parent
|
||||
spacing: 8 * scaling
|
||||
spacing: 6 * scaling
|
||||
|
||||
NIcon {
|
||||
icon: "reboot"
|
||||
pointSize: Style.fontSizeXL * scaling
|
||||
pointSize: Style.fontSizeL * scaling
|
||||
color: rebootButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurfaceVariant
|
||||
}
|
||||
|
||||
NText {
|
||||
text: I18n.tr("session-menu.reboot")
|
||||
color: rebootButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurfaceVariant
|
||||
pointSize: Style.fontSizeL * scaling
|
||||
pointSize: Style.fontSizeM * scaling
|
||||
font.weight: Font.Medium
|
||||
}
|
||||
}
|
||||
@@ -782,26 +782,26 @@ Loader {
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 52 * scaling
|
||||
radius: 26 * scaling
|
||||
Layout.preferredHeight: 48 * scaling
|
||||
radius: 24 * scaling
|
||||
color: shutdownButtonArea.containsMouse ? Color.mError : "transparent"
|
||||
border.color: shutdownButtonArea.containsMouse ? Color.mError : Color.transparent
|
||||
border.width: 1
|
||||
|
||||
RowLayout {
|
||||
anchors.centerIn: parent
|
||||
spacing: 8 * scaling
|
||||
spacing: 6 * scaling
|
||||
|
||||
NIcon {
|
||||
icon: "shutdown"
|
||||
pointSize: Style.fontSizeXL * scaling
|
||||
pointSize: Style.fontSizeL * scaling
|
||||
color: shutdownButtonArea.containsMouse ? Color.mOnError : Color.mOnSurfaceVariant
|
||||
}
|
||||
|
||||
NText {
|
||||
text: I18n.tr("session-menu.shutdown")
|
||||
color: shutdownButtonArea.containsMouse ? Color.mOnError : Color.mOnSurfaceVariant
|
||||
pointSize: Style.fontSizeL * scaling
|
||||
pointSize: Style.fontSizeM * scaling
|
||||
font.weight: Font.Medium
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ Singleton {
|
||||
elif command -v flatpak >/dev/null 2>&1 && _gpuscreenrecorder_flatpak_installed; then
|
||||
flatpak run --command=gpu-screen-recorder --file-forwarding com.dec05eba.gpu_screen_recorder ${flags}
|
||||
else
|
||||
notify-send "gpu-screen-recorder not installed!" -u critical
|
||||
echo "GPU_SCREEN_RECORDER_NOT_INSTALLED"
|
||||
fi`
|
||||
|
||||
// Use Process instead of execDetached so we can monitor it and read stderr
|
||||
@@ -109,6 +109,14 @@ Singleton {
|
||||
// Process ended while we were pending - likely cancelled or error
|
||||
isPending = false
|
||||
pendingTimer.running = false
|
||||
|
||||
// Check if gpu-screen-recorder is not installed
|
||||
const stdout = String(stdout.text || "").trim()
|
||||
if (stdout === "GPU_SCREEN_RECORDER_NOT_INSTALLED") {
|
||||
ToastService.showError(I18n.tr("toast.recording.not-installed"), I18n.tr("toast.recording.not-installed-desc"), 7000)
|
||||
return
|
||||
}
|
||||
|
||||
// If it failed to start, show a clear error toast with stderr
|
||||
if (exitCode !== 0) {
|
||||
const err = String(stderr.text || "").trim()
|
||||
|
||||
Reference in New Issue
Block a user