Florian Müllner ed3394a953 extensions-app: Make error/update icon interactive
Both icons are not immediately obvious, and the context provided
by the tooltip can be hard to discover.

Address this by making the icons interactive, and provide further
information in a popover.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3051>
2023-12-21 15:06:11 +00:00

177 lines
8.4 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class="ExtensionRow" parent="GtkListBoxRow">
<style>
<class name="extension"/>
</style>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="hexpand">true</property>
<style>
<class name="information"/>
</style>
<child>
<object class="GtkBox">
<style>
<class name="header"/>
</style>
<child>
<object class="GtkLabel" id="nameLabel">
<property name="xalign">0</property>
<style>
<class name="title"/>
</style>
</object>
</child>
<child>
<object class="GtkLabel" id="versionLabel">
<property name="visible">false</property>
<property name="xalign">0</property>
<property name="yalign">1</property>
<style>
<class name="caption"/>
<class name="dim-label"/>
</style>
</object>
</child>
<child>
<object class="GtkBox">
<style>
<class name="status"/>
</style>
<child>
<object class="GtkMenuButton" id="errorButton">
<property name="visible">false</property>
<property name="valign">center</property>
<property name="has-frame">false</property>
<property name="icon-name">dialog-error-symbolic</property>
<property name="tooltip-text" translatable="yes">The extension had an error</property>
<accessibility>
<property name="label" translatable="yes">Error Details</property>
</accessibility>
<property name="popover">
<object class="GtkPopover" id="errorPopover">
<property name="child">
<object class="AdwClamp">
<property name="maximum-size">300</property>
<property name="tightening-threshold">300</property>
<property name="child">
<object class="GtkLabel" id="errorLabel">
<!-- Hack to make the screen reader read the label -->
<property name="selectable"
bind-source="errorPopover"
bind-property="visible"
bind-flags="invert-boolean|sync-create"/>
<property name="wrap">true</property>
</object>
</property>
</object>
</property>
</object>
</property>
</object>
</child>
<child>
<object class="GtkMenuButton" id="updatesButton">
<property name="visible">false</property>
<property name="valign">center</property>
<property name="has-frame">false</property>
<property name="icon-name">software-update-available-symbolic</property>
<property name="tooltip-text" translatable="yes">The extension can be updated</property>
<accessibility>
<property name="label" translatable="yes">Updates Details</property>
</accessibility>
<property name="popover">
<object class="GtkPopover" id="updatesPopover">
<property name="child">
<object class="AdwClamp">
<property name="maximum-size">200</property>
<property name="tightening-threshold">200</property>
<property name="child">
<object class="GtkLabel">
<property name="label" translatable="yes">A new version of this extension is ready and will be loaded on next login.</property>
<!-- Hack to make the screen reader read the label -->
<property name="selectable"
bind-source="updatesPopover"
bind-property="visible"
bind-flags="invert-boolean|sync-create"/>
<property name="wrap">true</property>
</object>
</property>
</object>
</property>
</object>
</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="descriptionLabel">
<property name="xalign">0</property>
<property name="ellipsize">end</property>
<style>
<class name="subtitle"/>
</style>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSwitch" id="switch">
<property name="valign">center</property>
<property name="action-name">row.enabled</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkCenterBox" id="actionsBox">
<style>
<class name="actions"/>
</style>
<child type="start">
<object class="GtkBox">
<child>
<object class="GtkButton" id="websiteButton">
<property name="label" translatable="yes">Website</property>
<property name="action-name">row.show-url</property>
</object>
</child>
<child>
<object class="GtkButton" id="prefsButton">
<property name="visible"
bind-source="prefsButton"
bind-property="sensitive"
bind-flags="sync-create"/>
<property name="label" translatable="yes">Settings</property>
<property name="action-name">row.show-prefs</property>
</object>
</child>
</object>
</child>
<child type="end">
<object class="GtkButton" id="removeButton">
<property name="visible"
bind-source="removeButton"
bind-property="sensitive"
bind-flags="sync-create"/>
<property name="label" translatable="yes">Remove…</property>
<property name="action-name">row.uninstall</property>
</object>
</child>
</object>
</child>
</object>
</child>
</template>
</interface>