Compare commits

..

No commits in common. "c5859fa87bbc8c03b98c789e8717455e344810ed" and "11f5eecbc2d01acfe62c2bb02a32a8289be3583c" have entirely different histories.

12 changed files with 211 additions and 219 deletions

View file

@ -3,7 +3,6 @@ import { Box, Icon, Label } from 'resource:///com/github/Aylur/ags/widget.js';
const DEFAULT_KB = 'at-translated-set-2-keyboard'; const DEFAULT_KB = 'at-translated-set-2-keyboard';
export default () => Box({ export default () => Box({
className: 'toggle-off', className: 'toggle-off',
css: 'padding: 0 10px;', css: 'padding: 0 10px;',

View file

@ -2,6 +2,9 @@ import Mpris from 'resource:///com/github/Aylur/ags/service/mpris.js';
import { Button, Icon, Label, Stack, Slider, CenterBox, Box } from 'resource:///com/github/Aylur/ags/widget.js'; import { Button, Icon, Label, Stack, Slider, CenterBox, Box } from 'resource:///com/github/Aylur/ags/widget.js';
import { execAsync, lookUpIcon, readFileAsync } from 'resource:///com/github/Aylur/ags/utils.js'; import { execAsync, lookUpIcon, readFileAsync } from 'resource:///com/github/Aylur/ags/utils.js';
import Gdk from 'gi://Gdk';
const display = Gdk.Display.get_default();
import Separator from '../misc/separator.js'; import Separator from '../misc/separator.js';
import EventBox from '../misc/cursorbox.js'; import EventBox from '../misc/cursorbox.js';
@ -145,18 +148,24 @@ export const PlayerIcon = (player, { symbolic = true, ...props } = {}) => {
}); });
}; };
export const PositionSlider = (player, props) => Slider({ export const PositionSlider = (player, props) => EventBox({
child: Slider({
...props, ...props,
className: 'position-slider', className: 'position-slider',
cursor: 'pointer',
vpack: 'center',
hexpand: true, hexpand: true,
drawValue: false, drawValue: false,
onChange: ({ value }) => { onChange: ({ value }) => {
player.position = player.length * value; player.position = player.length * value;
}, },
properties: [['update', slider => { properties: [['update', slider => {
if (!slider.dragging) { if (slider.dragging) {
slider.get_parent().window.set_cursor(Gdk.Cursor
.new_from_name(display, 'grabbing'));
}
else {
slider.get_parent()?.window?.set_cursor(Gdk.Cursor
.new_from_name(display, 'pointer'));
slider.visible = player.length > 0; slider.visible = player.length > 0;
if (player.length > 0) if (player.length > 0)
slider.value = player.position / player.length; slider.value = player.position / player.length;
@ -176,19 +185,17 @@ export const PositionSlider = (player, props) => Slider({
`); `);
} }
}], }],
['button-press-event', s => { s.cursor = 'grabbing'; }],
['button-release-event', s => { s.cursor = 'pointer'; }],
], ],
}),
}); });
const PlayerButton = ({ player, items, onClick, prop }) => EventBox({ const PlayerButton = ({ player, items, onClick, prop }) => Button({
child: Button({
child: Stack({ items }), child: Stack({ items }),
onPrimaryClickRelease: () => player[onClick](), onPrimaryClickRelease: () => player[onClick](),
properties: [['hovered', false]], properties: [['hovered', false]],
onHover: self => { onHover: self => {
self._hovered = true; self._hovered = true;
self.window.set_cursor(Gdk.Cursor.new_from_name(display, 'pointer'));
if (prop == 'playBackStatus') { if (prop == 'playBackStatus') {
items.forEach(item => { items.forEach(item => {
@ -205,6 +212,7 @@ const PlayerButton = ({ player, items, onClick, prop }) => EventBox({
}, },
onHoverLost: self => { onHoverLost: self => {
self._hovered = false; self._hovered = false;
self.window.set_cursor(null);
if (prop == 'playBackStatus') { if (prop == 'playBackStatus') {
items.forEach(item => { items.forEach(item => {
item[1].setCss(` item[1].setCss(`
@ -258,7 +266,6 @@ const PlayerButton = ({ player, items, onClick, prop }) => EventBox({
} }
}], }],
], ],
}),
}); });
export const ShuffleButton = player => PlayerButton({ export const ShuffleButton = player => PlayerButton({

View file

@ -1,55 +1,49 @@
import Variable from 'resource:///com/github/Aylur/ags/variable.js';
import { Button, EventBox } from 'resource:///com/github/Aylur/ags/widget.js'; import { Button, EventBox } from 'resource:///com/github/Aylur/ags/widget.js';
import Gtk from 'gi://Gtk'; import Gdk from 'gi://Gdk';
const display = Gdk.Display.get_default();
// TODO: wrap in another EventBox for disabled cursor
export default ({ export default ({
isButton = false, isButton = false,
onPrimaryClickRelease = () => {}, reset = true,
onHover = () => {},
onHoverLost = () => {},
...props ...props
}) => { }) => {
// Make this variable to know if the function should if (!isButton) {
// be executed depending on where the click is released return EventBox({
const CanRun = Variable(true);
const properties = {
...props, ...props,
cursor: 'pointer', onHover: self => {
onPrimaryClickRelease: self => { if (!self.child.sensitive || !self.sensitive)
// Every click, do a one shot connect to self.window.set_cursor(Gdk.Cursor.new_from_name(display, 'not-allowed'));
// CanRun to wait for location of click
const id = CanRun.connect('changed', () => {
if (CanRun.value)
onPrimaryClickRelease(self);
CanRun.disconnect(id);
});
},
};
let widget;
if (!isButton)
widget = EventBox(properties);
else else
widget = Button(properties); self.window.set_cursor(Gdk.Cursor.new_from_name(display, 'pointer'));
const gesture = Gtk.GestureLongPress.new(widget); onHover(self);
},
onHoverLost: self => {
if (reset)
self.window.set_cursor(null);
widget.connectTo(gesture, () => { onHoverLost(self);
const pointer = gesture.get_point(null); },
const x = pointer[1]; });
const y = pointer[2]; }
else {
if ((!x || !y) || x === 0 && y === 0) return Button({
return; ...props,
onHover: self => {
CanRun.value = !( if (!self.child.sensitive || !self.sensitive)
x > widget.get_allocated_width() || self.window.set_cursor(Gdk.Cursor.new_from_name(display, 'not-allowed'));
y > widget.get_allocated_height() else
); self.window.set_cursor(Gdk.Cursor.new_from_name(display, 'pointer'));
}, 'end'); },
onHoverLost: self => {
return widget; if (reset)
self.window.set_cursor(null);
},
});
}
}; };

View file

@ -179,6 +179,7 @@ export const Notification = ({
label: setTime(notif.time), label: setTime(notif.time),
}), }),
EventBox({ EventBox({
reset: false,
child: Button({ child: Button({
className: 'close-button', className: 'close-button',
vpack: 'start', vpack: 'start',

View file

@ -5,6 +5,8 @@ import { timeout } from 'resource:///com/github/Aylur/ags/utils.js';
import { HasNotifs } from './base.js'; import { HasNotifs } from './base.js';
import Gtk from 'gi://Gtk'; import Gtk from 'gi://Gtk';
import Gdk from 'gi://Gdk';
const display = Gdk.Display.get_default();
export default ({ export default ({
@ -18,12 +20,13 @@ export default ({
}) => { }) => {
const widget = EventBox({ const widget = EventBox({
...props, ...props,
cursor: 'grab',
onHover: self => { onHover: self => {
self.window.set_cursor(Gdk.Cursor.new_from_name(display, 'grab'));
if (!self._hovered) if (!self._hovered)
self._hovered = true; self._hovered = true;
}, },
onHoverLost: self => { onHoverLost: self => {
self.window.set_cursor(null);
if (self._hovered) if (self._hovered)
self._hovered = false; self._hovered = false;
}, },
@ -82,11 +85,9 @@ export default ({
// When dragging // When dragging
[gesture, self => { [gesture, self => {
var offset = gesture.get_offset()[1]; var offset = gesture.get_offset()[1];
if (offset === 0)
return;
// Slide right // Slide right
if (offset > 0) { if (offset >= 0) {
self.setCss(` self.setCss(`
margin-top: 0px; margin-bottom: 0px; opacity: 1; transition: none; margin-top: 0px; margin-bottom: 0px; opacity: 1; transition: none;
margin-left: ${Number(offset + startMargin)}px; margin-left: ${Number(offset + startMargin)}px;
@ -106,7 +107,7 @@ export default ({
// Put a threshold on if a click is actually dragging // Put a threshold on if a click is actually dragging
widget._dragging = Math.abs(offset) > 10; widget._dragging = Math.abs(offset) > 10;
widget.cursor = 'grabbing'; widget.window?.set_cursor(Gdk.Cursor.new_from_name(display, 'grabbing'));
}, 'drag-update'], }, 'drag-update'],
@ -136,7 +137,8 @@ export default ({
} }
else { else {
self.setCss(defaultStyle); self.setCss(defaultStyle);
widget.cursor = 'grab', widget.window?.set_cursor(Gdk.Cursor.new_from_name(display, 'grab'));
widget._dragging = false; widget._dragging = false;
} }
}, 'drag-end'], }, 'drag-end'],

View file

@ -233,7 +233,7 @@ const SecondRow = () => Row({
GridButton({ GridButton({
command: () => { command: () => {
execAsync(['pactl', 'set-sink-mute', '@DEFAULT_SINK@', 'toggle']) execAsync(['pactl', 'set-source-mute', '@DEFAULT_SOURCE@', 'toggle'])
.catch(print); .catch(print);
}, },

View file

@ -7,13 +7,7 @@ import PopupWindow from '../misc/popup.js';
import ToggleButton from './toggle-button.js'; import ToggleButton from './toggle-button.js';
const QuickSettingsWidget = () => { const QuickSettingsWidget = () => Box({
const rev = Revealer({
transition: 'slide_down',
child: Player(),
});
return Box({
className: 'qs-container', className: 'qs-container',
vertical: true, vertical: true,
children: [ children: [
@ -37,16 +31,18 @@ const QuickSettingsWidget = () => {
SliderBox(), SliderBox(),
ToggleButton(rev), ToggleButton(),
], ],
}), }),
rev, Revealer({
transition: 'slide_down',
child: Player(),
}),
], ],
}); });
};
export default () => PopupWindow({ export default () => PopupWindow({
name: 'quick-settings', name: 'quick-settings',

View file

@ -1,5 +1,5 @@
import Audio from 'resource:///com/github/Aylur/ags/service/audio.js'; import Audio from 'resource:///com/github/Aylur/ags/service/audio.js';
import { Box, Slider, Icon } from 'resource:///com/github/Aylur/ags/widget.js'; import { Box, Slider, Icon, EventBox } from 'resource:///com/github/Aylur/ags/widget.js';
import { SpeakerIcon } from '../misc/audio-icons.js'; import { SpeakerIcon } from '../misc/audio-icons.js';
@ -22,16 +22,10 @@ export default () => Box({
}), }),
Slider({ Slider({
cursor: 'pointer', connections: [[Audio, slider => {
vpack: 'center', if (Audio.speaker)
connections: [ slider.value = Audio.speaker.volume;
[Audio, slider => { }, 'speaker-changed']],
slider.value = Audio.speaker?.volume;
}, 'speaker-changed'],
['button-press-event', s => { s.cursor = 'grabbing'; }],
['button-release-event', s => { s.cursor = 'pointer'; }],
],
onChange: ({ value }) => Audio.speaker.volume = value, onChange: ({ value }) => Audio.speaker.volume = value,
max: 0.999, max: 0.999,
draw_value: false, draw_value: false,
@ -49,20 +43,23 @@ export default () => Box({
icon: 'display-brightness-symbolic', icon: 'display-brightness-symbolic',
}), }),
Slider({ EventBox({
cursor: 'pointer', onHover: box => box.child._canChange = false,
vpack: 'center', onHoverLost: box => box.child._canChange = true,
onChange: ({ value }) => Brightness.screen = value, child: Slider({
connections: [ properties: [
[Brightness, slider => { ['canChange', true],
slider.value = Brightness.screen;
}, 'screen'],
['button-press-event', s => { s.cursor = 'grabbing'; }],
['button-release-event', s => { s.cursor = 'pointer'; }],
], ],
onChange: ({ value }) => {
Brightness.screen = value;
},
connections: [[Brightness, slider => {
if (slider._canChange)
slider.value = Brightness.screen;
}, 'screen']],
draw_value: false, draw_value: false,
}), }),
}),
], ],
}), }),

View file

@ -1,11 +1,12 @@
import App from 'resource:///com/github/Aylur/ags/app.js'; import App from 'resource:///com/github/Aylur/ags/app.js';
import Mpris from 'resource:///com/github/Aylur/ags/service/mpris.js'; import Mpris from 'resource:///com/github/Aylur/ags/service/mpris.js';
import { CenterBox, Icon, ToggleButton } from 'resource:///com/github/Aylur/ags/widget.js'; import { Icon, ToggleButton } from 'resource:///com/github/Aylur/ags/widget.js';
import EventBox from '../misc/cursorbox.js';
export default rev => CenterBox({ export default () => EventBox({
center_widget: ToggleButton({ child: ToggleButton({
cursor: 'pointer',
setup: self => { setup: self => {
// Open at startup if there are players // Open at startup if there are players
const id = Mpris.connect('changed', () => { const id = Mpris.connect('changed', () => {
@ -15,6 +16,8 @@ export default rev => CenterBox({
}, },
connections: [['toggled', self => { connections: [['toggled', self => {
const rev = self.get_parent().get_parent().get_parent().children[1];
if (self.get_active()) { if (self.get_active()) {
self.get_children()[0] self.get_children()[0]
.setCss('-gtk-icon-transform: rotate(0deg);'); .setCss('-gtk-icon-transform: rotate(0deg);');
@ -33,6 +36,4 @@ export default rev => CenterBox({
css: '-gtk-icon-transform: rotate(180deg);', css: '-gtk-icon-transform: rotate(180deg);',
}), }),
}), }),
start_widget: null,
end_widget: null,
}); });

View file

@ -132,10 +132,8 @@
margin-right: -20px; margin-right: -20px;
} }
.slider {
min-height: 55px;
scale { scale {
min-height: 55px;
min-width: 400px; min-width: 400px;
margin-left: 18px; margin-left: 18px;
margin-right: 20px; margin-right: 20px;
@ -165,5 +163,4 @@
transition: background-color 0.5s ease-in-out; transition: background-color 0.5s ease-in-out;
} }
} }
}
} }

View file

@ -30,9 +30,7 @@ exec-once = gnome-keyring-daemon --start --components=secrets
exec-once = squeekboard exec-once = squeekboard
exec-once = bash -c "sleep 3; ags -t applauncher" exec-once = bash -c "sleep 3; ags -t applauncher"
layerrule = blur, overview layerrule = blur, overview
layerrule = ignorealpha[0.97], overview ## don't blur corners
exec-once = wl-paste --watch cliphist store exec-once = wl-paste --watch cliphist store

Binary file not shown.