💥 fix(control-center/tile): use ::onclicked signal for tile button instead of adding an unnecessary gesture controller

This commit is contained in:
retrozinndev
2025-07-23 22:18:50 -03:00
parent 0ec7957ab8
commit f0b86a10d2
3 changed files with 20 additions and 30 deletions
+1 -1
View File
@@ -82,4 +82,4 @@ export const TileNetwork = () => <Gtk.Box>
/>
}}
</With>
</Gtk.Box> as Gtk.Box;
</Gtk.Box>;
@@ -29,4 +29,4 @@ export const TileRecording = () =>
onToggledOn={() => Recording.getDefault().startRecording()}
toggleState={createBinding(Recording.getDefault(), "recording")}
iconSize={16}
/> as Gtk.Widget;
/>;
+18 -28
View File
@@ -1,10 +1,11 @@
import { Gdk, Gtk } from "ags/gtk4";
import { Gtk } from "ags/gtk4";
import { tr } from "../../../i18n/intl";
import { Accessor, createComputed, createState } from "ags";
import GObject from "gi://GObject?version=2.0";
import Pango from "gi://Pango?version=1.0";
import { Accessor, createComputed, createState, onCleanup } from "ags";
import { variableToBoolean } from "../../../scripts/utils";
import Pango from "gi://Pango?version=1.0";
export type TileProps = {
class?: string | Accessor<string>;
icon?: string | Accessor<string>;
@@ -14,7 +15,7 @@ export type TileProps = {
description?: string | Accessor<string>;
toggleState?: boolean | Accessor<boolean>;
enableOnClickMore?: boolean | Accessor<boolean>;
onDestroy?: () => void;
onDestroy?: (self: Gtk.Box) => void;
onToggledOn: () => void;
onToggledOff: () => void;
onClickMore?: () => void;
@@ -32,7 +33,9 @@ export function Tile(props: TileProps): Gtk.Widget {
setToggled((props.toggleState as Accessor<boolean>).get() ?? false))
);
return <Gtk.Box class={
onCleanup(() => subs.forEach(s => s()));
return <Gtk.Box hexpand visible={props.visible} onDestroy={props.onDestroy} class={
(props.class instanceof Accessor) ?
createComputed([props.class, toggled], (clss, isToggled) =>
`tile ${clss} ${isToggled ? "toggled" : ""} ${
@@ -44,29 +47,16 @@ export function Tile(props: TileProps): Gtk.Widget {
props.onClickMore ? "has-more" : ""
}`
)
} hexpand={true} visible={props.visible} onDestroy={(_) => {
subs.forEach(sub => sub());
props.onDestroy?.();
}}>
}>
<Gtk.Button class={"toggle-button"} onClicked={() => {
if(toggled.get()) {
setToggled(false);
props.onToggledOff?.();
return;
}
<Gtk.Button class={"toggle-button"} $={(self) => {
const gestureClick = Gtk.GestureClick.new();
const conns: Map<GObject.Object, number> = new Map();
self.add_controller(gestureClick);
conns.set(gestureClick, gestureClick.connect("released", (gesture) => {
if(gesture.get_current_button() === Gdk.BUTTON_PRIMARY) {
if(toggled.get()) {
setToggled(false);
props.onToggledOff?.();
return;
}
setToggled(true);
props.onToggledOn?.();
}
}));
setToggled(true);
props.onToggledOn?.();
}}>
<Gtk.Box class={"content"} hexpand={true} vexpand={true}>