61 lines
1.5 KiB
JavaScript
61 lines
1.5 KiB
JavaScript
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';
|
|
|
|
|
|
// TODO: wrap in another EventBox for disabled cursor
|
|
export default ({
|
|
isButton = false,
|
|
onPrimaryClickRelease = () => { /**/ },
|
|
...props
|
|
}) => {
|
|
// Make this variable to know if the function should
|
|
// be executed depending on where the click is released
|
|
const CanRun = Variable(true);
|
|
|
|
const properties = {
|
|
...props,
|
|
cursor: 'pointer',
|
|
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);
|
|
}
|
|
|
|
CanRun.disconnect(id);
|
|
});
|
|
},
|
|
};
|
|
|
|
let widget;
|
|
|
|
if (isButton) {
|
|
widget = Button(properties);
|
|
}
|
|
else {
|
|
widget = EventBox(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;
|
|
};
|