summaryrefslogtreecommitdiff
path: root/src/ephy-web-extension-dialog.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ephy-web-extension-dialog.c')
-rw-r--r--src/ephy-web-extension-dialog.c46
1 files changed, 37 insertions, 9 deletions
diff --git a/src/ephy-web-extension-dialog.c b/src/ephy-web-extension-dialog.c
index 5da67a530..2496766f3 100644
--- a/src/ephy-web-extension-dialog.c
+++ b/src/ephy-web-extension-dialog.c
@@ -34,8 +34,7 @@ struct _EphyWebExtensionDialog {
EphyWebExtensionManager *web_extension_manager;
GtkWidget *listbox;
- GtkWidget *add_button;
- GtkWidget *remove_button;
+ GtkStack *stack;
};
G_DEFINE_TYPE (EphyWebExtensionDialog, ephy_web_extension_dialog, HDY_TYPE_WINDOW)
@@ -63,7 +62,7 @@ on_remove_button_clicked (GtkButton *button,
GtkWidget *widget;
gint res;
- row = gtk_list_box_get_selected_row (GTK_LIST_BOX (self->listbox));
+ row = g_object_get_data (G_OBJECT (button), "row");
if (!row)
return;
@@ -104,6 +103,23 @@ toggle_state_set_cb (GtkSwitch *widget,
ephy_web_extension_manager_set_active (manager, web_extension, state);
}
+static void
+homepage_activated_cb (HdyActionRow *row,
+ gpointer user_data)
+{
+ EphyWebExtensionDialog *self = EPHY_WEB_EXTENSION_DIALOG (user_data);
+ EphyWebExtension *web_extension = g_object_get_data (G_OBJECT (row), "web_extension");
+ g_autoptr (GError) error = NULL;
+
+ gtk_show_uri_on_window (GTK_WINDOW (self),
+ ephy_web_extension_get_homepage_url (web_extension),
+ GDK_CURRENT_TIME,
+ &error);
+
+ if (error)
+ g_critical ("Couldn't to open homepage: %s", error->message);
+}
+
static GtkWidget *
create_row (EphyWebExtensionDialog *self,
EphyWebExtension *web_extension)
@@ -113,7 +129,7 @@ create_row (EphyWebExtensionDialog *self,
GtkWidget *image;
GtkWidget *toggle;
GtkWidget *button;
- GtkWidget *homepage;
+ GtkWidget *homepage_icon;
GtkWidget *author;
GtkWidget *version;
g_autoptr (GdkPixbuf) icon = NULL;
@@ -126,8 +142,9 @@ create_row (EphyWebExtensionDialog *self,
gtk_widget_set_tooltip_text (GTK_WIDGET (row), ephy_web_extension_get_name (web_extension));
/* Icon */
- icon = ephy_web_extension_get_icon (web_extension, 48);
- image = icon ? gtk_image_new_from_pixbuf (icon) : gtk_image_new_from_icon_name ("application-x-addon-symbolic", GTK_ICON_SIZE_DIALOG);
+ icon = ephy_web_extension_get_icon (web_extension, 32);
+ image = icon ? gtk_image_new_from_pixbuf (icon) : gtk_image_new_from_icon_name ("application-x-addon-symbolic", GTK_ICON_SIZE_DND);
+ gtk_image_set_pixel_size (GTK_IMAGE (image), 32);
hdy_expander_row_add_prefix (HDY_EXPANDER_ROW (row), image);
/* Titles */
@@ -156,6 +173,7 @@ create_row (EphyWebExtensionDialog *self,
gtk_container_add (GTK_CONTAINER (row), sub_row);
hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (sub_row), _("Version"));
version = gtk_label_new (ephy_web_extension_get_version (web_extension));
+ dzl_gtk_widget_add_style_class (version, "dim-label");
gtk_container_add (GTK_CONTAINER (sub_row), version);
/* Homepage url */
@@ -163,20 +181,25 @@ create_row (EphyWebExtensionDialog *self,
sub_row = hdy_action_row_new ();
gtk_container_add (GTK_CONTAINER (row), sub_row);
hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (sub_row), _("Homepage"));
- homepage = gtk_link_button_new_with_label (ephy_web_extension_get_homepage_url (web_extension), _("Open"));
- gtk_container_add (GTK_CONTAINER (sub_row), homepage);
+ gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (sub_row), TRUE);
+ g_signal_connect (sub_row, "activated", G_CALLBACK (homepage_activated_cb), self);
+ homepage_icon = gtk_image_new_from_icon_name ("ephy-open-link-symbolic", GTK_ICON_SIZE_BUTTON);
+ dzl_gtk_widget_add_style_class (homepage_icon, "dim-label");
+ gtk_container_add (GTK_CONTAINER (sub_row), homepage_icon);
+ g_object_set_data (G_OBJECT (sub_row), "web_extension", web_extension);
}
/* Remove button */
sub_row = hdy_action_row_new ();
gtk_container_add (GTK_CONTAINER (row), sub_row);
- button = gtk_button_new_with_label (_("Remove"));
+ button = gtk_button_new_with_mnemonic (_("_Remove"));
gtk_widget_set_valign (GTK_WIDGET (button), GTK_ALIGN_CENTER);
dzl_gtk_widget_add_style_class (button, GTK_STYLE_CLASS_DESTRUCTIVE_ACTION);
g_signal_connect (button, "clicked", G_CALLBACK (on_remove_button_clicked), self);
gtk_widget_set_tooltip_text (button, _("Remove selected WebExtension"));
gtk_container_add (GTK_CONTAINER (sub_row), button);
+ g_object_set_data (G_OBJECT (button), "row", row);
gtk_widget_show_all (GTK_WIDGET (row));
@@ -187,6 +210,7 @@ static void
ephy_web_extension_dialog_refresh_listbox (EphyWebExtensionDialog *self)
{
GList *extensions = ephy_web_extension_manager_get_web_extensions (self->web_extension_manager);
+ gboolean empty = TRUE;
clear_listbox (self->listbox);
@@ -196,7 +220,10 @@ ephy_web_extension_dialog_refresh_listbox (EphyWebExtensionDialog *self)
row = create_row (self, web_extension);
gtk_list_box_insert (GTK_LIST_BOX (self->listbox), row, -1);
+ empty = FALSE;
}
+
+ gtk_stack_set_visible_child_name (self->stack, empty ? "empty" : "list");
}
static void
@@ -262,6 +289,7 @@ ephy_web_extension_dialog_class_init (EphyWebExtensionDialogClass *klass)
"/org/gnome/epiphany/gtk/web-extensions-dialog.ui");
gtk_widget_class_bind_template_child (widget_class, EphyWebExtensionDialog, listbox);
+ gtk_widget_class_bind_template_child (widget_class, EphyWebExtensionDialog, stack);
gtk_widget_class_bind_template_callback (widget_class, on_add_button_clicked);
}