From 25f09733ff1fdf6ff8bca061ffe1696fcf755e0d Mon Sep 17 00:00:00 2001 From: Aylur Date: Sat, 7 Oct 2023 21:44:34 +0200 Subject: [PATCH] add: widget prop setter checks --- src/widgets/box.ts | 9 ++++++--- src/widgets/centerbox.ts | 5 +---- src/widgets/circularprogress.ts | 16 ++++++++++++++-- src/widgets/label.ts | 4 ++-- src/widgets/menu.ts | 2 +- src/widgets/overlay.ts | 3 +++ src/widgets/progressbar.ts | 8 +++++++- src/widgets/revealer.ts | 2 +- src/widgets/scrollable.ts | 4 ++-- src/widgets/slider.ts | 17 ++++++++++++++++- src/widgets/stack.ts | 7 ++----- src/widgets/window.ts | 4 ++-- 12 files changed, 57 insertions(+), 24 deletions(-) diff --git a/src/widgets/box.ts b/src/widgets/box.ts index e74fd45..fcc4071 100644 --- a/src/widgets/box.ts +++ b/src/widgets/box.ts @@ -13,7 +13,7 @@ export default class AgsBox extends Gtk.Box { }, this); } - constructor({ children, ...rest }: { children?: Gtk.Widget[] | null }) { + constructor({ children, ...rest }: { children?: Gtk.Widget[] }) { super(rest); if (children) @@ -21,7 +21,7 @@ export default class AgsBox extends Gtk.Box { } get children() { return this.get_children(); } - set children(children: Gtk.Widget[] | null) { + set children(children: Gtk.Widget[]) { const newChildren = children || []; this.get_children() @@ -42,7 +42,10 @@ export default class AgsBox extends Gtk.Box { } get vertical() { return this.orientation === Gtk.Orientation.VERTICAL; } - set vertical(vertical) { + set vertical(vertical: boolean) { + if (this.vertical === vertical) + return; + this.orientation = vertical ? Gtk.Orientation.VERTICAL : Gtk.Orientation.HORIZONTAL; diff --git a/src/widgets/centerbox.ts b/src/widgets/centerbox.ts index 495b775..af1bed8 100644 --- a/src/widgets/centerbox.ts +++ b/src/widgets/centerbox.ts @@ -26,15 +26,12 @@ export default class AgsCenterBox extends AgsBox { }, this); } - set children(children: Gtk.Widget[] | null) { + set children(children: Gtk.Widget[]) { const newChildren = children || []; newChildren.filter(ch => !newChildren?.includes(ch)) .forEach(ch => ch.destroy()); - if (!children) - return; - if (children[0]) this.start_widget = children[0]; diff --git a/src/widgets/circularprogress.ts b/src/widgets/circularprogress.ts index 42bf190..8d8b54f 100644 --- a/src/widgets/circularprogress.ts +++ b/src/widgets/circularprogress.ts @@ -29,6 +29,9 @@ export default class AgsCircularProgress extends Gtk.Bin { // @ts-expect-error get rounded() { return this._rounded; } set rounded(r: boolean) { + if (this.rounded === r) + return; + // @ts-expect-error this._rounded = r; this.notify('rounded'); @@ -37,9 +40,12 @@ export default class AgsCircularProgress extends Gtk.Bin { // @ts-expect-error get inverted() { return this._inverted; } - set inverted(c: boolean) { + set inverted(inverted: boolean) { + if (this.inverted === inverted) + return; + // @ts-expect-error - this._inverted = c; + this._inverted = inverted; this.notify('inverted'); this.queue_draw(); } @@ -47,6 +53,9 @@ export default class AgsCircularProgress extends Gtk.Bin { // @ts-expect-error get start_at() { return this._startAt; } set start_at(value: number) { + if (this.start_at === value) + return; + if (value > 1) value = 1; @@ -62,6 +71,9 @@ export default class AgsCircularProgress extends Gtk.Bin { // @ts-expect-error get value() { return this._value; } set value(value: number) { + if (this.value === value) + return; + if (value > 1) value = 1; diff --git a/src/widgets/label.ts b/src/widgets/label.ts index 4f7678d..8a70594 100644 --- a/src/widgets/label.ts +++ b/src/widgets/label.ts @@ -40,7 +40,7 @@ export default class AgsLabel extends Gtk.Label { get truncate() { return truncates[this.ellipsize]; } set truncate(truncate: string) { - if (!truncate) + if (this.truncate === truncate) return; if (!truncate.includes(truncate)) { @@ -54,7 +54,7 @@ export default class AgsLabel extends Gtk.Label { get justification() { return justifications[this.justify]; } set justification(justify: string) { - if (!justify) + if (this.justification === justify) return; if (!justifications.includes(justify)) { diff --git a/src/widgets/menu.ts b/src/widgets/menu.ts index b7ff65e..2cbd6cc 100644 --- a/src/widgets/menu.ts +++ b/src/widgets/menu.ts @@ -39,7 +39,7 @@ export class AgsMenu extends Gtk.Menu { } get children() { return this.get_children(); } - set children(children: Gtk.Widget[] | null) { + set children(children: Gtk.Widget[]) { this.get_children().forEach(ch => ch.destroy()); if (!children) diff --git a/src/widgets/overlay.ts b/src/widgets/overlay.ts index aea457e..c57946b 100644 --- a/src/widgets/overlay.ts +++ b/src/widgets/overlay.ts @@ -20,6 +20,9 @@ export default class AgsOverlay extends Gtk.Overlay { } set pass_through(passthrough: boolean) { + if (this.pass_through === passthrough) + return; + this.get_children().forEach(ch => this.set_overlay_pass_through(ch, passthrough)); diff --git a/src/widgets/progressbar.ts b/src/widgets/progressbar.ts index 7d3cb05..1ff2ef9 100644 --- a/src/widgets/progressbar.ts +++ b/src/widgets/progressbar.ts @@ -15,12 +15,18 @@ export default class AgsProgressBar extends Gtk.ProgressBar { get value() { return this.fraction; } set value(value: number) { + if (this.value === value) + return; + this.fraction = value; this.notify('value'); } get vertical() { return this.orientation === Gtk.Orientation.VERTICAL; } - set vertical(vertical) { + set vertical(vertical: boolean) { + if (this.vertical === vertical) + return; + this.orientation = vertical ? Gtk.Orientation.VERTICAL : Gtk.Orientation.HORIZONTAL; diff --git a/src/widgets/revealer.ts b/src/widgets/revealer.ts index 6d8a01a..e8d9daa 100644 --- a/src/widgets/revealer.ts +++ b/src/widgets/revealer.ts @@ -20,7 +20,7 @@ export default class AgsRevealer extends Gtk.Revealer { get transition() { return transitions[this.transitionType]; } set transition(transition: string) { - if (!transition) + if (!transition || this.transition === transition) return; if (!transitions.includes(transition)) { diff --git a/src/widgets/scrollable.ts b/src/widgets/scrollable.ts index 3f928e4..62817a9 100644 --- a/src/widgets/scrollable.ts +++ b/src/widgets/scrollable.ts @@ -26,7 +26,7 @@ export default class AgsScrollable extends Gtk.ScrolledWindow { // @ts-expect-error get hscroll() { return this._hscroll; } set hscroll(hscroll: string) { - if (!hscroll) + if (!hscroll || this.hscroll === hscroll) return; if (!policy.includes(hscroll)) { @@ -43,7 +43,7 @@ export default class AgsScrollable extends Gtk.ScrolledWindow { // @ts-expect-error get vscroll() { return this._vscroll; } set vscroll(vscroll: string) { - if (!vscroll) + if (!vscroll || this.vscroll === vscroll) return; if (!policy.includes(vscroll)) { diff --git a/src/widgets/slider.ts b/src/widgets/slider.ts index 0f59f4e..12755f1 100644 --- a/src/widgets/slider.ts +++ b/src/widgets/slider.ts @@ -61,7 +61,7 @@ export default class AgsSlider extends Gtk.Scale { get value() { return this.adjustment.value; } set value(value: number) { - if (this.dragging) + if (this.dragging || this.value === value) return; this.adjustment.value = value; @@ -70,18 +70,27 @@ export default class AgsSlider extends Gtk.Scale { get min() { return this.adjustment.lower; } set min(min: number) { + if (this.min === min) + return; + this.adjustment.lower = min; this.notify('min'); } get max() { return this.adjustment.upper; } set max(max: number) { + if (this.max === max) + return; + this.adjustment.upper = max; this.notify('max'); } get step() { return this.adjustment.stepIncrement; } set step(step: number) { + if (this.step === step) + return; + this.adjustment.stepIncrement = step; this.notify('step'); } @@ -89,6 +98,9 @@ export default class AgsSlider extends Gtk.Scale { // @ts-expect-error get dragging() { return this._dragging; } set dragging(dragging: boolean) { + if (this.dragging === dragging) + return; + // @ts-expect-error this._dragging = dragging; this.notify('dragging'); @@ -96,6 +108,9 @@ export default class AgsSlider extends Gtk.Scale { get vertical() { return this.orientation === Gtk.Orientation.VERTICAL; } set vertical(vertical) { + if (this.vertical === vertical) + return; + this.orientation = vertical ? Gtk.Orientation.VERTICAL : Gtk.Orientation.HORIZONTAL; diff --git a/src/widgets/stack.ts b/src/widgets/stack.ts index 52a35e3..3f9b923 100644 --- a/src/widgets/stack.ts +++ b/src/widgets/stack.ts @@ -62,7 +62,7 @@ export default class AgsStack extends Gtk.Stack { get transition() { return transitions[this.transitionType]; } set transition(transition: string) { - if (typeof transition !== 'string') + if (this.transition === transition) return; if (!transitions.includes(transition)) { @@ -76,14 +76,11 @@ export default class AgsStack extends Gtk.Stack { get shown() { return this.visible_child_name; } set shown(name: string) { - if (name === null || !this.get_child_by_name(name)) { + if (!this.get_child_by_name(name)) { this.visible = false; return; } - if (!name) - return; - this.visible = true; this.set_visible_child_name(name); this.notify('shown'); diff --git a/src/widgets/window.ts b/src/widgets/window.ts index 0ccdd5f..c370360 100644 --- a/src/widgets/window.ts +++ b/src/widgets/window.ts @@ -167,7 +167,7 @@ export default class AgsWindow extends Gtk.Window { // @ts-expect-error get popup() { return !!this._popup; } - // this will get removed in gtk4 + // this will be removed in gtk4 set popup(popup: boolean) { if (this.popup === popup) return; @@ -187,7 +187,7 @@ export default class AgsWindow extends Gtk.Window { }); } - this.notify('notify'); + this.notify('popup'); } get focusable() {