workbenchdev / Workbench

Code playground for GNOME 🛠️
https://apps.gnome.org/Workbench
GNU General Public License v3.0
698 stars 90 forks source link

Add hints / guards against silent or unclear failures #218

Open sonnyp opened 1 year ago

sonnyp commented 1 year ago

Some things fail (or crash even) silently—we should add measures to inform users and possibly prevent the rendering.

https://floss.social/@sonny/109975391706946091

I discussed with James if this belongs in Blueprint or Workbench, no clear winner. Let's start/iterate in Workbench and possibly transfer to Blueprint later.

No child allowed

crash: no priority: high

Passing children to objects that don't accept any such as Label will not provide any feedback. It is confusing to beginners as the children don't get rendered but no explanation is given.

We should emit an error.

Label {
  label: "Hello";
  Button {
    label: "World";
  }
}

Single child allowed

crash: no priority: high

Some widgets like AdwStatusPage, Adw.Clamp, ScrolledWindow, ... allow only one child. It doesn't error but only the last child will be rendered. It's confusing and makes the user think they did something wrong.

OK

Adw.StatusPage {
  Button {
    label: "a";
  }
}

KO

Adw.StatusPage {
  Button {
    label: "a";
  }

  Button {
    label: "b";
  }
}

Order of properties on Gtk.Adjustment

crash: no priority: medium

OK:

      Scale one {
        width-request: 130;
        adjustment: Gtk.Adjustment {
          lower: 0;
          upper: 100;
          value: 50;
        };
      }

KO:

      Scale one {
        width-request: 130;
        adjustment: Gtk.Adjustment {
          lower: 0;
          value: 50;
          upper: 100;
        };
      }

https://matrix.to/#/!aUhETchlgthwWVQzhi:matrix.org/$16780187509362SfqjZ:gnome.org?via=gnome.org&via=matrix.org&via=libera.chat

ToggleButton grouped to each others

Grouping ToggleButtons to each others will render fine but will cause Workbench to freeze when clicking on one of them.

crash: yes priority: low

KO

using Gtk 4.0;
using Adw 1;

Box {
  halign: center;
  valign: center;
  orientation: horizontal;

  ToggleButton button_first {
    label: "Toggle On";
    group: button_second;
  }

  ToggleButton button_second {
    label: "Toggle Off";
    group: button_first;
  }
}

OK:

using Gtk 4.0;
using Adw 1;

Box {
  halign: center;
  valign: center;
  orientation: horizontal;

  ToggleButton button_first {
    label: "Toggle On";
  }

  ToggleButton button_second {
    label: "Toggle Off";
    group: button_first;
  }
}

icon not found

crash: no priority: low

https://matrix.to/#/!kDBZrVKCdhrVuWxbGe:matrix.org/$GI0tPROepvgJBYCqjapML5GqxIXxS6bHukuFrj9RttQ?via=gnome.org&via=matrix.org&via=catgirl.cloud

some references does'nt show up and are replaced by a corrupted icon which looks odd

If we detect an icon as not fund - we could show a hint to lookup the icon library in the menu

andyholmes commented 1 year ago

Order of properties on Gtk.Adjustment

This one may actually be higher up the stack. I've also seen this happen with action-name and action-target properties, where the action-target must be set first, otherwise setting the action-name complains if the GAction has a non-null parameter signature.

sonnyp commented 1 year ago

@andyholmes this thread explains why it behaves like that https://matrix.to/#/!aUhETchlgthwWVQzhi:matrix.org/$16780187509362SfqjZ:gnome.org?via=gnome.org&via=matrix.org&via=libera.chat

I personally think it's a huge pitfall that needs to be fixed at some point.

Until then, we can warn users.

sonnyp commented 1 year ago

Some crash hints were added in https://github.com/sonnyp/Workbench/pull/220

Maybe we can share the mechanism for this ticket.

sonnyp commented 1 year ago

Blueprint issue about adding a linter https://gitlab.gnome.org/jwestman/blueprint-compiler/-/issues/124

sonnyp commented 1 year ago

https://floss.social/@sonny/111114764808789906