add crypto
This commit is contained in:
parent
90cbe489f6
commit
af6a3bce3e
120 changed files with 24616 additions and 462 deletions
143
modules/home/services/quickshell/qml/Widgets/Panel/TopPanel.qml
Normal file
143
modules/home/services/quickshell/qml/Widgets/Panel/TopPanel.qml
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Effects
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import "root:/Data" as Data
|
||||
import "root:/Core/" as Core
|
||||
import "./modules" as Modules
|
||||
|
||||
// Top panel wrapper with recording
|
||||
Item {
|
||||
id: topPanelRoot
|
||||
required property var shell
|
||||
|
||||
visible: true
|
||||
|
||||
property bool isRecording: false
|
||||
property var recordingProcess: null
|
||||
property string lastError: ""
|
||||
property bool wallpaperSelectorVisible: false
|
||||
|
||||
signal slideBarVisibilityChanged(bool visible)
|
||||
|
||||
function triggerTopPanel() {
|
||||
panel.show()
|
||||
}
|
||||
|
||||
// Auto-trigger panel
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
triggerTopPanel()
|
||||
}
|
||||
}
|
||||
|
||||
// Main panel instance
|
||||
Modules.Panel {
|
||||
id: panel
|
||||
shell: topPanelRoot.shell
|
||||
isRecording: topPanelRoot.isRecording
|
||||
|
||||
anchors.top: topPanelRoot.top
|
||||
anchors.right: topPanelRoot.right
|
||||
anchors.topMargin: 8
|
||||
anchors.rightMargin: 8
|
||||
|
||||
onVisibleChanged: slideBarVisibilityChanged(visible)
|
||||
|
||||
onRecordingRequested: startRecording()
|
||||
onStopRecordingRequested: {
|
||||
stopRecording()
|
||||
// Hide entire TopPanel after stop recording
|
||||
if (topPanelRoot.parent && topPanelRoot.parent.hide) {
|
||||
topPanelRoot.parent.hide()
|
||||
}
|
||||
}
|
||||
onSystemActionRequested: function(action) {
|
||||
performSystemAction(action)
|
||||
// Hide entire TopPanel after system action
|
||||
if (topPanelRoot.parent && topPanelRoot.parent.hide) {
|
||||
topPanelRoot.parent.hide()
|
||||
}
|
||||
}
|
||||
onPerformanceActionRequested: function(action) {
|
||||
performPerformanceAction(action)
|
||||
// Hide entire TopPanel after performance action
|
||||
if (topPanelRoot.parent && topPanelRoot.parent.hide) {
|
||||
topPanelRoot.parent.hide()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Start screen recording
|
||||
function startRecording() {
|
||||
var currentDate = new Date()
|
||||
var hours = String(currentDate.getHours()).padStart(2, '0')
|
||||
var minutes = String(currentDate.getMinutes()).padStart(2, '0')
|
||||
var day = String(currentDate.getDate()).padStart(2, '0')
|
||||
var month = String(currentDate.getMonth() + 1).padStart(2, '0')
|
||||
var year = currentDate.getFullYear()
|
||||
|
||||
var filename = hours + "-" + minutes + "-" + day + "-" + month + "-" + year + ".mp4"
|
||||
var outputPath = Data.Settings.videoPath + filename
|
||||
var command = "gpu-screen-recorder -w portal -f 60 -a default_output -o " + outputPath
|
||||
|
||||
var qmlString = 'import Quickshell.Io; Process { command: ["sh", "-c", "' + command + '"]; running: true }'
|
||||
|
||||
recordingProcess = Qt.createQmlObject(qmlString, topPanelRoot)
|
||||
isRecording = true
|
||||
}
|
||||
|
||||
// Stop recording with cleanup
|
||||
function stopRecording() {
|
||||
if (recordingProcess && isRecording) {
|
||||
var stopQmlString = 'import Quickshell.Io; Process { command: ["sh", "-c", "pkill -SIGINT -f \'gpu-screen-recorder.*portal\'"]; running: true; onExited: function() { destroy() } }'
|
||||
|
||||
var stopProcess = Qt.createQmlObject(stopQmlString, topPanelRoot)
|
||||
|
||||
var cleanupTimer = Qt.createQmlObject('import QtQuick; Timer { interval: 3000; running: true; repeat: false }', topPanelRoot)
|
||||
cleanupTimer.triggered.connect(function() {
|
||||
if (recordingProcess) {
|
||||
recordingProcess.running = false
|
||||
recordingProcess.destroy()
|
||||
recordingProcess = null
|
||||
}
|
||||
|
||||
var forceKillQml = 'import Quickshell.Io; Process { command: ["sh", "-c", "pkill -9 -f \'gpu-screen-recorder.*portal\' 2>/dev/null || true"]; running: true; onExited: function() { destroy() } }'
|
||||
var forceKillProcess = Qt.createQmlObject(forceKillQml, topPanelRoot)
|
||||
|
||||
cleanupTimer.destroy()
|
||||
})
|
||||
}
|
||||
isRecording = false
|
||||
}
|
||||
|
||||
// System action router (lock, reboot, shutdown)
|
||||
function performSystemAction(action) {
|
||||
switch(action) {
|
||||
case "lock":
|
||||
Core.ProcessManager.lock()
|
||||
break
|
||||
case "reboot":
|
||||
Core.ProcessManager.reboot()
|
||||
break
|
||||
case "shutdown":
|
||||
Core.ProcessManager.shutdown()
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
function performPerformanceAction(action) {
|
||||
// Performance actions handled silently
|
||||
}
|
||||
|
||||
// Clean up processes on destruction
|
||||
Component.onDestruction: {
|
||||
if (recordingProcess) {
|
||||
recordingProcess.running = false
|
||||
recordingProcess.destroy()
|
||||
recordingProcess = null
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue