diff --git a/subprojects/extensions-app/data/css/style.css b/subprojects/extensions-app/data/css/style.css
index f9fafa717..8564ba501 100644
--- a/subprojects/extensions-app/data/css/style.css
+++ b/subprojects/extensions-app/data/css/style.css
@@ -1,18 +1,16 @@
-row.extension>box {
- margin: 12px;
+.details-popover contents {
+ padding: 12px;
}
-row.extension>box,
-row.extension box.header {
- border-spacing: 12px;
-}
-
-row.extension box.actions,
-row.extension box.actions>box {
+.details-popover .information {
border-spacing: 6px;
}
-row.extension box.information,
-row.extension box.status {
- border-spacing: 3px;
+.details-popover .actions {
+ margin-top: 6px;
+ border-spacing: 12px;
+}
+
+.details-popover .actions button {
+ padding: 12px;
}
diff --git a/subprojects/extensions-app/data/icons/scalable/actions/remove-symbolic.svg b/subprojects/extensions-app/data/icons/scalable/actions/remove-symbolic.svg
new file mode 100644
index 000000000..b6f8bd1db
--- /dev/null
+++ b/subprojects/extensions-app/data/icons/scalable/actions/remove-symbolic.svg
@@ -0,0 +1,10 @@
+
+
diff --git a/subprojects/extensions-app/data/icons/scalable/actions/settings-symbolic.svg b/subprojects/extensions-app/data/icons/scalable/actions/settings-symbolic.svg
new file mode 100644
index 000000000..4ac785e2e
--- /dev/null
+++ b/subprojects/extensions-app/data/icons/scalable/actions/settings-symbolic.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/subprojects/extensions-app/data/icons/scalable/actions/website-symbolic.svg b/subprojects/extensions-app/data/icons/scalable/actions/website-symbolic.svg
new file mode 100644
index 000000000..1a5b3c9e7
--- /dev/null
+++ b/subprojects/extensions-app/data/icons/scalable/actions/website-symbolic.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/subprojects/extensions-app/data/org.gnome.Extensions.data.gresource.xml.in b/subprojects/extensions-app/data/org.gnome.Extensions.data.gresource.xml.in
index 47aaf8cd8..fe9cbad08 100644
--- a/subprojects/extensions-app/data/org.gnome.Extensions.data.gresource.xml.in
+++ b/subprojects/extensions-app/data/org.gnome.Extensions.data.gresource.xml.in
@@ -4,6 +4,9 @@
css/style.css
icons/scalable/actions/info-symbolic.svg
+ icons/scalable/actions/remove-symbolic.svg
+ icons/scalable/actions/settings-symbolic.svg
+ icons/scalable/actions/website-symbolic.svg
ui/help-overlay.ui
diff --git a/subprojects/extensions-app/data/ui/extension-row.ui b/subprojects/extensions-app/data/ui/extension-row.ui
index 38c374ab1..5208a9aa6 100644
--- a/subprojects/extensions-app/data/ui/extension-row.ui
+++ b/subprojects/extensions-app/data/ui/extension-row.ui
@@ -1,173 +1,227 @@
-
-
-
-
+
+
+
+
+ true
+ row.uninstall
+
+
+ vertical
+
+
+ remove-symbolic
+ presentation
+
+
+
+
+ true
+ _Remove…
+
+
+
+
-
-
-
- 0
- end
-
-
-
+
-
-
-
- center
- row.enabled
-
-
+
-
-
-
-
-
-
-
-
- Website
- row.show-url
-
-
-
-
-
- Settings
- row.show-prefs
-
-
-
-
-
-
-
- Remove…
- row.uninstall
-
-
-
-
+
diff --git a/subprojects/extensions-app/js/main.js b/subprojects/extensions-app/js/main.js
index 0388eb693..e9a3183d2 100644
--- a/subprojects/extensions-app/js/main.js
+++ b/subprojects/extensions-app/js/main.js
@@ -357,7 +357,7 @@ var ExtensionRow = GObject.registerClass({
GTypeName: 'ExtensionRow',
Template: 'resource:///org/gnome/Extensions/ui/extension-row.ui',
InternalChildren: [
- 'nameLabel',
+ 'detailsPopover',
'descriptionLabel',
'versionLabel',
'errorLabel',
@@ -366,7 +366,7 @@ var ExtensionRow = GObject.registerClass({
'switch',
'actionsBox',
],
-}, class ExtensionRow extends Gtk.ListBoxRow {
+}, class ExtensionRow extends Adw.ActionRow {
_init(extension) {
super._init();
@@ -384,7 +384,10 @@ var ExtensionRow = GObject.registerClass({
name: 'show-prefs',
enabled: this.hasPrefs,
});
- action.connect('activate', () => this.get_root().openPrefs(this.uuid));
+ action.connect('activate', () => {
+ this._detailsPopover.popdown();
+ this.get_root().openPrefs(this.uuid);
+ });
this._actionGroup.add_action(action);
action = new Gio.SimpleAction({
@@ -392,6 +395,7 @@ var ExtensionRow = GObject.registerClass({
enabled: this.url !== '',
});
action.connect('activate', () => {
+ this._detailsPopover.popdown();
Gio.AppInfo.launch_default_for_uri(
this.url, this.get_display().get_app_launch_context());
});
@@ -401,7 +405,10 @@ var ExtensionRow = GObject.registerClass({
name: 'uninstall',
enabled: this.type === ExtensionType.PER_USER,
});
- action.connect('activate', () => this.get_root().uninstall(this.uuid));
+ action.connect('activate', () => {
+ this._detailsPopover.popdown();
+ this.get_root().uninstall(this.uuid);
+ });
this._actionGroup.add_action(action);
action = new Gio.SimpleAction({
@@ -417,7 +424,7 @@ var ExtensionRow = GObject.registerClass({
});
this._actionGroup.add_action(action);
- this._nameLabel.label = this.name;
+ this.title = this.name;
const desc = this._extension.metadata.description.split('\n')[0];
this._descriptionLabel.label = desc;
@@ -436,10 +443,6 @@ var ExtensionRow = GObject.registerClass({
this._updateState();
}
- vfunc_activate() {
- this._switch.mnemonic_activate(false);
- }
-
get uuid() {
return this._extension.uuid;
}
@@ -520,7 +523,7 @@ var ExtensionRow = GObject.registerClass({
this._errorButton.visible = this.hasError;
this._errorLabel.label = this.error;
- this._versionLabel.label = this.version.toString();
+ this._versionLabel.label = _('Version %s').format(this.version.toString());
this._versionLabel.visible = this.version !== '';
}