💥 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> </With>
</Gtk.Box> as Gtk.Box; </Gtk.Box>;
@@ -29,4 +29,4 @@ export const TileRecording = () =>
onToggledOn={() => Recording.getDefault().startRecording()} onToggledOn={() => Recording.getDefault().startRecording()}
toggleState={createBinding(Recording.getDefault(), "recording")} toggleState={createBinding(Recording.getDefault(), "recording")}
iconSize={16} 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 { tr } from "../../../i18n/intl";
import { Accessor, createComputed, createState } from "ags"; import { Accessor, createComputed, createState, onCleanup } from "ags";
import GObject from "gi://GObject?version=2.0";
import Pango from "gi://Pango?version=1.0";
import { variableToBoolean } from "../../../scripts/utils"; import { variableToBoolean } from "../../../scripts/utils";
import Pango from "gi://Pango?version=1.0";
export type TileProps = { export type TileProps = {
class?: string | Accessor<string>; class?: string | Accessor<string>;
icon?: string | Accessor<string>; icon?: string | Accessor<string>;
@@ -14,7 +15,7 @@ export type TileProps = {
description?: string | Accessor<string>; description?: string | Accessor<string>;
toggleState?: boolean | Accessor<boolean>; toggleState?: boolean | Accessor<boolean>;
enableOnClickMore?: boolean | Accessor<boolean>; enableOnClickMore?: boolean | Accessor<boolean>;
onDestroy?: () => void; onDestroy?: (self: Gtk.Box) => void;
onToggledOn: () => void; onToggledOn: () => void;
onToggledOff: () => void; onToggledOff: () => void;
onClickMore?: () => void; onClickMore?: () => void;
@@ -32,7 +33,9 @@ export function Tile(props: TileProps): Gtk.Widget {
setToggled((props.toggleState as Accessor<boolean>).get() ?? false)) 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) ? (props.class instanceof Accessor) ?
createComputed([props.class, toggled], (clss, isToggled) => createComputed([props.class, toggled], (clss, isToggled) =>
`tile ${clss} ${isToggled ? "toggled" : ""} ${ `tile ${clss} ${isToggled ? "toggled" : ""} ${
@@ -44,29 +47,16 @@ export function Tile(props: TileProps): Gtk.Widget {
props.onClickMore ? "has-more" : "" props.onClickMore ? "has-more" : ""
}` }`
) )
} hexpand={true} visible={props.visible} onDestroy={(_) => { }>
subs.forEach(sub => sub()); <Gtk.Button class={"toggle-button"} onClicked={() => {
props.onDestroy?.(); if(toggled.get()) {
}}> setToggled(false);
props.onToggledOff?.();
return;
}
<Gtk.Button class={"toggle-button"} $={(self) => { setToggled(true);
const gestureClick = Gtk.GestureClick.new(); props.onToggledOn?.();
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?.();
}
}));
}}> }}>
<Gtk.Box class={"content"} hexpand={true} vexpand={true}> <Gtk.Box class={"content"} hexpand={true} vexpand={true}>