mirror of
https://github.com/Theaninova/TheaninovOS.git
synced 2025-12-12 11:36:20 +00:00
175 lines
5.1 KiB
JavaScript
175 lines
5.1 KiB
JavaScript
// This is for the cool memory indicator on the sidebar
|
|
// For the right pill of the bar, see system.js
|
|
const {Gdk, Gtk} = imports.gi
|
|
const GObject = imports.gi.GObject
|
|
const Lang = imports.lang
|
|
import {App, Service, Utils, Widget} from "../imports.js"
|
|
const {exec, execAsync} = Utils
|
|
|
|
const SessionButton = (name, icon, command, props = {}) => {
|
|
const buttonDescription = Widget.Revealer({
|
|
valign: "end",
|
|
transitionDuration: 200,
|
|
transition: "slide_down",
|
|
revealChild: false,
|
|
child: Widget.Label({
|
|
className: "txt-smaller session-button-desc",
|
|
label: name,
|
|
}),
|
|
})
|
|
return Widget.Button({
|
|
onClicked: command,
|
|
className: "session-button",
|
|
child: Widget.Overlay({
|
|
className: "session-button-box",
|
|
child: Widget.Label({
|
|
vexpand: true,
|
|
className: "icon-material",
|
|
label: icon,
|
|
}),
|
|
overlays: [buttonDescription],
|
|
}),
|
|
onHover: button => {
|
|
const display = Gdk.Display.get_default()
|
|
const cursor = Gdk.Cursor.new_from_name(display, "pointer")
|
|
button.get_window().set_cursor(cursor)
|
|
buttonDescription.revealChild = true
|
|
},
|
|
onHoverLost: button => {
|
|
const display = Gdk.Display.get_default()
|
|
const cursor = Gdk.Cursor.new_from_name(display, "default")
|
|
button.get_window().set_cursor(cursor)
|
|
buttonDescription.revealChild = false
|
|
},
|
|
connections: [
|
|
[
|
|
"focus-in-event",
|
|
self => {
|
|
buttonDescription.revealChild = true
|
|
self.toggleClassName("session-button-focused", true)
|
|
},
|
|
],
|
|
[
|
|
"focus-out-event",
|
|
self => {
|
|
buttonDescription.revealChild = false
|
|
self.toggleClassName("session-button-focused", false)
|
|
},
|
|
],
|
|
],
|
|
...props,
|
|
})
|
|
}
|
|
|
|
export default () => {
|
|
// lock, logout, sleep
|
|
const lockButton = SessionButton("Lock", "lock", () => {
|
|
App.closeWindow("session")
|
|
execAsync("gtklock")
|
|
})
|
|
const logoutButton = SessionButton("Logout", "logout", () => {
|
|
App.closeWindow("session")
|
|
execAsync(["bash", "-c", "loginctl terminate-user $USER"])
|
|
})
|
|
const sleepButton = SessionButton("Sleep", "sleep", () => {
|
|
App.closeWindow("session")
|
|
execAsync("systemctl suspend")
|
|
})
|
|
// hibernate, shutdown, reboot
|
|
const hibernateButton = SessionButton("Hibernate", "downloading", () => {
|
|
App.closeWindow("session")
|
|
execAsync("systemctl hibernate")
|
|
})
|
|
const shutdownButton = SessionButton("Shutdown", "power_settings_new", () => {
|
|
App.closeWindow("session")
|
|
execAsync("systemctl poweroff")
|
|
})
|
|
const rebootButton = SessionButton("Reboot", "restart_alt", () => {
|
|
App.closeWindow("session")
|
|
execAsync("systemctl reboot")
|
|
})
|
|
const cancelButton = SessionButton("Cancel", "close", () => App.closeWindow("session"), {
|
|
className: "session-button-cancel",
|
|
})
|
|
return Widget.Box({
|
|
className: "session-bg",
|
|
style: `
|
|
min-width: ${SCREEN_WIDTH * 2}px;
|
|
min-height: ${SCREEN_HEIGHT * 2}px;
|
|
`, // Hack to draw over reserved bar space
|
|
vertical: true,
|
|
children: [
|
|
Widget.EventBox({
|
|
onPrimaryClick: () => App.closeWindow("session"),
|
|
onSecondaryClick: () => App.closeWindow("session"),
|
|
onMiddleClick: () => App.closeWindow("session"),
|
|
}),
|
|
Widget.Box({
|
|
halign: "center",
|
|
vexpand: true,
|
|
vertical: true,
|
|
children: [
|
|
Widget.Box({
|
|
valign: "center",
|
|
vertical: true,
|
|
className: "spacing-v-15",
|
|
children: [
|
|
Widget.Box({
|
|
vertical: true,
|
|
style: "margin-bottom: 0.682rem;",
|
|
children: [
|
|
Widget.Label({
|
|
className: "txt-title txt",
|
|
label: "Session",
|
|
}),
|
|
Widget.Label({
|
|
justify: Gtk.Justification.CENTER,
|
|
className: "txt-small txt",
|
|
label: "Use arrow keys to navigate.\nEnter to select, Esc to cancel.",
|
|
}),
|
|
],
|
|
}),
|
|
Widget.Box({
|
|
halign: "center",
|
|
className: "spacing-h-15",
|
|
children: [
|
|
// lock, logout, sleep
|
|
lockButton,
|
|
logoutButton,
|
|
sleepButton,
|
|
],
|
|
}),
|
|
Widget.Box({
|
|
halign: "center",
|
|
className: "spacing-h-15",
|
|
children: [
|
|
// hibernate, shutdown, reboot
|
|
hibernateButton,
|
|
shutdownButton,
|
|
rebootButton,
|
|
],
|
|
}),
|
|
Widget.Box({
|
|
halign: "center",
|
|
className: "spacing-h-15",
|
|
children: [
|
|
// hibernate, shutdown, reboot
|
|
cancelButton,
|
|
],
|
|
}),
|
|
],
|
|
}),
|
|
],
|
|
}),
|
|
],
|
|
connections: [
|
|
[
|
|
App,
|
|
(_b, name, visible) => {
|
|
if (visible) lockButton.grab_focus() // Lock is the default option
|
|
},
|
|
],
|
|
],
|
|
})
|
|
}
|