diff --git a/devices/wim/config/ags/js/bar/buttons/keyboard-layout.js b/devices/wim/config/ags/js/bar/buttons/keyboard-layout.js index 8182b6a0..08a1b571 100644 --- a/devices/wim/config/ags/js/bar/buttons/keyboard-layout.js +++ b/devices/wim/config/ags/js/bar/buttons/keyboard-layout.js @@ -3,6 +3,7 @@ import { Box, Icon, Label } from 'resource:///com/github/Aylur/ags/widget.js'; const DEFAULT_KB = 'at-translated-set-2-keyboard'; + export default () => Box({ className: 'toggle-off', css: 'padding: 0 10px;', diff --git a/devices/wim/config/ags/js/misc/cursorbox.js b/devices/wim/config/ags/js/misc/cursorbox.js index edeb9580..c67f908b 100644 --- a/devices/wim/config/ags/js/misc/cursorbox.js +++ b/devices/wim/config/ags/js/misc/cursorbox.js @@ -1,49 +1,74 @@ +import Variable from 'resource:///com/github/Aylur/ags/variable.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 ({ isButton = false, reset = true, onHover = () => {}, onHoverLost = () => {}, + onPrimaryClickRelease = () => {}, ...props }) => { - if (!isButton) { - return EventBox({ - ...props, - onHover: self => { - if (!self.child.sensitive || !self.sensitive) - self.window.set_cursor(Gdk.Cursor.new_from_name(display, 'not-allowed')); + // Make this variable to know if the function should + // be executed depending on where the click is released + const CanRun = Variable(true); - else - self.window.set_cursor(Gdk.Cursor.new_from_name(display, 'pointer')); + const properties = { + ...props, + onPrimaryClickRelease: self => { + // Every click, do a one shot connect to + // CanRun to wait for location of click + const id = CanRun.connect('changed', () => { + if (CanRun.value) + onPrimaryClickRelease(self); - onHover(self); - }, - onHoverLost: self => { - if (reset) - self.window.set_cursor(null); + CanRun.disconnect(id); + }); + }, + onHover: self => { + if (!self.child.sensitive || !self.sensitive) + self.window.set_cursor(Gdk.Cursor.new_from_name(display, 'not-allowed')); - onHoverLost(self); - }, - }); - } - else { - return Button({ - ...props, - onHover: self => { - if (!self.child.sensitive || !self.sensitive) - self.window.set_cursor(Gdk.Cursor.new_from_name(display, 'not-allowed')); - else - self.window.set_cursor(Gdk.Cursor.new_from_name(display, 'pointer')); - }, - onHoverLost: self => { - if (reset) - self.window.set_cursor(null); - }, - }); - } + else + self.window.set_cursor(Gdk.Cursor.new_from_name(display, 'pointer')); + + onHover(self); + }, + onHoverLost: self => { + if (reset) + self.window.set_cursor(null); + + onHoverLost(self); + }, + }; + + let widget; + if (!isButton) + widget = EventBox(properties); + else + widget = Button(properties); + + const gesture = Gtk.GestureLongPress.new(widget); + + widget.connectTo(gesture, () => { + const pointer = gesture.get_point(null); + const x = pointer[1]; + const y = pointer[2]; + + if ((!x || !y) || x === 0 && y === 0) + return; + + CanRun.value = !( + x > widget.get_allocated_width() || + y > widget.get_allocated_height() + ); + }, 'end'); + + return widget; };