diff options
Diffstat (limited to 'lib/widgets')
-rw-r--r-- | lib/widgets/ephy-download-widget.c | 159 | ||||
-rw-r--r-- | lib/widgets/ephy-download-widget.h | 27 |
2 files changed, 80 insertions, 106 deletions
diff --git a/lib/widgets/ephy-download-widget.c b/lib/widgets/ephy-download-widget.c index 77cb30dd9..687212b66 100644 --- a/lib/widgets/ephy-download-widget.c +++ b/lib/widgets/ephy-download-widget.c @@ -31,13 +31,10 @@ #include <glib/gi18n.h> #include <webkit2/webkit2.h> -G_DEFINE_TYPE (EphyDownloadWidget, ephy_download_widget, GTK_TYPE_GRID) - -#define DOWNLOAD_WIDGET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), EPHY_TYPE_DOWNLOAD_WIDGET, EphyDownloadWidgetPrivate)) - -struct _EphyDownloadWidgetPrivate +struct _EphyDownloadWidget { + GtkGrid parent_instance; + EphyDownload *download; GtkWidget *filename; @@ -47,6 +44,8 @@ struct _EphyDownloadWidgetPrivate GtkWidget *action_button; }; +G_DEFINE_TYPE (EphyDownloadWidget, ephy_download_widget, GTK_TYPE_GRID) + enum { PROP_0, @@ -137,13 +136,13 @@ update_download_icon (EphyDownloadWidget *widget) GIcon *icon; const char *content_type; - content_type = ephy_download_get_content_type (widget->priv->download); + content_type = ephy_download_get_content_type (widget->download); if (content_type) icon = g_content_type_get_icon (content_type); else icon = g_icon_new_for_string ("package-x-generic", NULL); - gtk_image_set_from_gicon (GTK_IMAGE (widget->priv->icon), icon, GTK_ICON_SIZE_DIALOG); + gtk_image_set_from_gicon (GTK_IMAGE (widget->icon), icon, GTK_ICON_SIZE_DIALOG); g_object_unref (icon); } @@ -153,12 +152,12 @@ update_download_destination (EphyDownloadWidget *widget) char *dest; char *markup; - dest = get_destination_basename_from_download (widget->priv->download); + dest = get_destination_basename_from_download (widget->download); if (!dest) return; markup = g_markup_printf_escaped ("<b>%s</b>", dest); g_free (dest); - gtk_label_set_markup (GTK_LABEL (widget->priv->filename), markup); + gtk_label_set_markup (GTK_LABEL (widget->filename), markup); g_free (markup); } @@ -169,7 +168,7 @@ update_status_label (EphyDownloadWidget *widget, char *markup; markup = g_markup_printf_escaped ("<span size='small'>%s</span>", download_label); - gtk_label_set_markup (GTK_LABEL (widget->priv->status), markup); + gtk_label_set_markup (GTK_LABEL (widget->status), markup); g_free (markup); } @@ -209,11 +208,11 @@ download_progress_cb (WebKitDownload *download, g_free (total); g_free (remaining); - gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (widget->priv->progress), + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (widget->progress), progress); } else if (received_length > 0) { download_label = g_format_size (received_length); - gtk_progress_bar_pulse (GTK_PROGRESS_BAR (widget->priv->progress)); + gtk_progress_bar_pulse (GTK_PROGRESS_BAR (widget->progress)); } if (download_label) { @@ -226,9 +225,9 @@ static void download_finished_cb (EphyDownload *download, EphyDownloadWidget *widget) { - gtk_widget_hide (widget->priv->progress); + gtk_widget_hide (widget->progress); update_status_label (widget, _("Finished")); - gtk_image_set_from_icon_name (GTK_IMAGE (gtk_button_get_image (GTK_BUTTON (widget->priv->action_button))), + gtk_image_set_from_icon_name (GTK_IMAGE (gtk_button_get_image (GTK_BUTTON (widget->action_button))), "folder-open-symbolic", GTK_ICON_SIZE_MENU); } @@ -242,12 +241,12 @@ download_failed_cb (EphyDownload *download, g_signal_handlers_disconnect_by_func (download, download_progress_cb, widget); - gtk_widget_hide (widget->priv->progress); + gtk_widget_hide (widget->progress); error_msg = g_strdup_printf (_("Error downloading: %s"), error->message); update_status_label (widget, error_msg); g_free (error_msg); - gtk_image_set_from_icon_name (GTK_IMAGE (gtk_button_get_image (GTK_BUTTON (widget->priv->action_button))), + gtk_image_set_from_icon_name (GTK_IMAGE (gtk_button_get_image (GTK_BUTTON (widget->action_button))), "list-remove-symbolic", GTK_ICON_SIZE_MENU); } @@ -263,25 +262,25 @@ download_content_type_changed_cb (EphyDownload *download, static void widget_action_button_clicked_cb (EphyDownloadWidget *widget) { - if (ephy_download_is_active (widget->priv->download)) { + if (ephy_download_is_active (widget->download)) { WebKitDownload *download; - download = ephy_download_get_webkit_download (widget->priv->download); + download = ephy_download_get_webkit_download (widget->download); g_signal_handlers_disconnect_matched (download, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, widget); - g_signal_handlers_disconnect_matched (widget->priv->download, G_SIGNAL_MATCH_DATA, 0, 0, + g_signal_handlers_disconnect_matched (widget->download, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, widget); update_status_label (widget, _("Cancelling…")); - gtk_widget_set_sensitive (widget->priv->action_button, FALSE); + gtk_widget_set_sensitive (widget->action_button, FALSE); - ephy_download_cancel (widget->priv->download); - } else if (ephy_download_failed (widget->priv->download, NULL)) { + ephy_download_cancel (widget->download); + } else if (ephy_download_failed (widget->download, NULL)) { EphyDownloadsManager *manager; manager = ephy_embed_shell_get_downloads_manager (ephy_embed_shell_get_default ()); - ephy_downloads_manager_remove_download (manager, widget->priv->download); + ephy_downloads_manager_remove_download (manager, widget->download); } else { - ephy_download_do_download_action (widget->priv->download, + ephy_download_do_download_action (widget->download, EPHY_DOWNLOAD_ACTION_BROWSE_TO); } } @@ -325,7 +324,7 @@ ephy_download_widget_set_property (GObject *object, switch (property_id) { case PROP_DOWNLOAD: - widget->priv->download = g_value_dup_object (value); + widget->download = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -342,15 +341,15 @@ ephy_download_widget_dispose (GObject *object) widget = EPHY_DOWNLOAD_WIDGET (object); - if (widget->priv->download != NULL) { - WebKitDownload *download = ephy_download_get_webkit_download (widget->priv->download); + if (widget->download != NULL) { + WebKitDownload *download = ephy_download_get_webkit_download (widget->download); g_signal_handlers_disconnect_matched (download, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, widget); - g_signal_handlers_disconnect_matched (widget->priv->download, G_SIGNAL_MATCH_DATA, 0, 0, + g_signal_handlers_disconnect_matched (widget->download, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, widget); - g_object_unref (widget->priv->download); - widget->priv->download = NULL; + g_object_unref (widget->download); + widget->download = NULL; } G_OBJECT_CLASS (ephy_download_widget_parent_class)->dispose (object); @@ -360,7 +359,6 @@ static void ephy_download_widget_constructed (GObject *object) { EphyDownloadWidget *widget = EPHY_DOWNLOAD_WIDGET (object); - EphyDownloadWidgetPrivate *priv = widget->priv; WebKitDownload *download; const char *action_icon_name = NULL; GError *error = NULL; @@ -370,82 +368,82 @@ ephy_download_widget_constructed (GObject *object) gtk_widget_set_margin_start (GTK_WIDGET (widget), 5); gtk_widget_set_margin_end (GTK_WIDGET (widget), 5); - priv->icon = gtk_image_new (); - gtk_widget_set_margin_end (priv->icon, 10); + widget->icon = gtk_image_new (); + gtk_widget_set_margin_end (widget->icon, 10); update_download_icon (widget); - gtk_grid_attach (GTK_GRID (widget), priv->icon, 0, 0, 1, 3); - gtk_widget_show (priv->icon); - - priv->filename = gtk_label_new (NULL); - gtk_widget_set_valign (priv->filename, GTK_ALIGN_CENTER); - gtk_widget_set_margin_bottom (priv->filename, 6); - gtk_label_set_xalign (GTK_LABEL (priv->filename), 0); - gtk_label_set_max_width_chars (GTK_LABEL (priv->filename), 30); - gtk_label_set_ellipsize (GTK_LABEL (priv->filename), PANGO_ELLIPSIZE_END); + gtk_grid_attach (GTK_GRID (widget), widget->icon, 0, 0, 1, 3); + gtk_widget_show (widget->icon); + + widget->filename = gtk_label_new (NULL); + gtk_widget_set_valign (widget->filename, GTK_ALIGN_CENTER); + gtk_widget_set_margin_bottom (widget->filename, 6); + gtk_label_set_xalign (GTK_LABEL (widget->filename), 0); + gtk_label_set_max_width_chars (GTK_LABEL (widget->filename), 30); + gtk_label_set_ellipsize (GTK_LABEL (widget->filename), PANGO_ELLIPSIZE_END); update_download_destination (widget); - gtk_grid_attach (GTK_GRID (widget), priv->filename, 1, 0, 1, 1); - gtk_widget_show (priv->filename); - - priv->progress = gtk_progress_bar_new (); - gtk_widget_set_valign (priv->progress, GTK_ALIGN_CENTER); - gtk_widget_set_margin_start (priv->progress, 2); - gtk_widget_set_margin_bottom (priv->progress, 4); - gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (priv->progress), 0.05); - gtk_grid_attach (GTK_GRID (widget), priv->progress, 1, 1, 1, 1); - if (ephy_download_is_active (priv->download)) - gtk_widget_show (priv->progress); - - priv->status = gtk_label_new (NULL); - gtk_widget_set_valign (priv->status, GTK_ALIGN_CENTER); - gtk_label_set_xalign (GTK_LABEL (priv->status), 0); - g_object_set (priv->status, "width-request", 260, NULL); - gtk_label_set_max_width_chars (GTK_LABEL (priv->status), 30); - gtk_label_set_ellipsize (GTK_LABEL (priv->status), PANGO_ELLIPSIZE_END); - if (ephy_download_failed (priv->download, &error)) { + gtk_grid_attach (GTK_GRID (widget), widget->filename, 1, 0, 1, 1); + gtk_widget_show (widget->filename); + + widget->progress = gtk_progress_bar_new (); + gtk_widget_set_valign (widget->progress, GTK_ALIGN_CENTER); + gtk_widget_set_margin_start (widget->progress, 2); + gtk_widget_set_margin_bottom (widget->progress, 4); + gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (widget->progress), 0.05); + gtk_grid_attach (GTK_GRID (widget), widget->progress, 1, 1, 1, 1); + if (ephy_download_is_active (widget->download)) + gtk_widget_show (widget->progress); + + widget->status = gtk_label_new (NULL); + gtk_widget_set_valign (widget->status, GTK_ALIGN_CENTER); + gtk_label_set_xalign (GTK_LABEL (widget->status), 0); + g_object_set (widget->status, "width-request", 260, NULL); + gtk_label_set_max_width_chars (GTK_LABEL (widget->status), 30); + gtk_label_set_ellipsize (GTK_LABEL (widget->status), PANGO_ELLIPSIZE_END); + if (ephy_download_failed (widget->download, &error)) { char *error_msg; error_msg = g_strdup_printf (_("Error downloading: %s"), error->message); update_status_label (widget, error_msg); g_free (error_msg); - } else if (ephy_download_succeeded (priv->download)) { + } else if (ephy_download_succeeded (widget->download)) { update_status_label (widget, _("Finished")); } else { update_status_label (widget, _("Starting…")); } - gtk_grid_attach (GTK_GRID (widget), priv->status, 1, 2, 1, 1); - gtk_widget_show (priv->status); + gtk_grid_attach (GTK_GRID (widget), widget->status, 1, 2, 1, 1); + gtk_widget_show (widget->status); - if (ephy_download_succeeded (priv->download)) + if (ephy_download_succeeded (widget->download)) action_icon_name = "folder-open-symbolic"; - else if (ephy_download_failed (priv->download, NULL)) + else if (ephy_download_failed (widget->download, NULL)) action_icon_name = "list-remove-symbolic"; else action_icon_name = "window-close-symbolic"; - priv->action_button = gtk_button_new_from_icon_name (action_icon_name, GTK_ICON_SIZE_MENU); - g_signal_connect_swapped (priv->action_button, "clicked", + widget->action_button = gtk_button_new_from_icon_name (action_icon_name, GTK_ICON_SIZE_MENU); + g_signal_connect_swapped (widget->action_button, "clicked", G_CALLBACK (widget_action_button_clicked_cb), widget); - gtk_widget_set_valign (priv->action_button, GTK_ALIGN_CENTER); - gtk_widget_set_margin_start (priv->action_button, 10); - gtk_style_context_add_class (gtk_widget_get_style_context (priv->action_button), + gtk_widget_set_valign (widget->action_button, GTK_ALIGN_CENTER); + gtk_widget_set_margin_start (widget->action_button, 10); + gtk_style_context_add_class (gtk_widget_get_style_context (widget->action_button), "download-circular-button"); - gtk_grid_attach (GTK_GRID (widget), priv->action_button, 3, 0, 1, 3); - gtk_widget_show (priv->action_button); + gtk_grid_attach (GTK_GRID (widget), widget->action_button, 3, 0, 1, 3); + gtk_widget_show (widget->action_button); - download = ephy_download_get_webkit_download (priv->download); + download = ephy_download_get_webkit_download (widget->download); g_signal_connect (download, "notify::estimated-progress", G_CALLBACK (download_progress_cb), widget); g_signal_connect (download, "notify::destination", G_CALLBACK (download_destination_changed_cb), widget); - g_signal_connect (priv->download, "completed", + g_signal_connect (widget->download, "completed", G_CALLBACK (download_finished_cb), widget); - g_signal_connect (priv->download, "error", + g_signal_connect (widget->download, "error", G_CALLBACK (download_failed_cb), widget); - g_signal_connect (priv->download, "notify::content-type", + g_signal_connect (widget->download, "notify::content-type", G_CALLBACK (download_content_type_changed_cb), widget); } @@ -455,8 +453,6 @@ ephy_download_widget_class_init (EphyDownloadWidgetClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - g_type_class_add_private (klass, sizeof (EphyDownloadWidgetPrivate)); - object_class->constructed = ephy_download_widget_constructed; object_class->get_property = ephy_download_widget_get_property; object_class->set_property = ephy_download_widget_set_property; @@ -480,7 +476,6 @@ ephy_download_widget_class_init (EphyDownloadWidgetClass *klass) static void ephy_download_widget_init (EphyDownloadWidget *widget) { - widget->priv = DOWNLOAD_WIDGET_PRIVATE (widget); } /** @@ -495,7 +490,7 @@ EphyDownload * ephy_download_widget_get_download (EphyDownloadWidget *widget) { g_return_val_if_fail (EPHY_IS_DOWNLOAD_WIDGET (widget), NULL); - return widget->priv->download; + return widget->download; } /** diff --git a/lib/widgets/ephy-download-widget.h b/lib/widgets/ephy-download-widget.h index bf1335b08..0cd3a35c5 100644 --- a/lib/widgets/ephy-download-widget.h +++ b/lib/widgets/ephy-download-widget.h @@ -28,30 +28,9 @@ G_BEGIN_DECLS -#define EPHY_TYPE_DOWNLOAD_WIDGET ephy_download_widget_get_type() -#define EPHY_DOWNLOAD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EPHY_TYPE_DOWNLOAD_WIDGET, EphyDownloadWidget)) -#define EPHY_DOWNLOAD_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EPHY_TYPE_DOWNLOAD_WIDGET, EphyDownloadWidgetClass)) -#define EPHY_IS_DOWNLOAD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EPHY_TYPE_DOWNLOAD_WIDGET)) -#define EPHY_IS_DOWNLOAD_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EPHY_TYPE_DOWNLOAD_WIDGET)) -#define EPHY_DOWNLOAD_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EPHY_TYPE_DOWNLOAD_WIDGET, EphyDownloadWidgetClass)) - -typedef struct _EphyDownloadWidget EphyDownloadWidget; -typedef struct _EphyDownloadWidgetClass EphyDownloadWidgetClass; -typedef struct _EphyDownloadWidgetPrivate EphyDownloadWidgetPrivate; - -struct _EphyDownloadWidget -{ - GtkGrid parent; - - EphyDownloadWidgetPrivate *priv; -}; - -struct _EphyDownloadWidgetClass -{ - GtkGridClass parent_class; -}; - -GType ephy_download_widget_get_type (void) G_GNUC_CONST; +#define EPHY_TYPE_DOWNLOAD_WIDGET ephy_download_widget_get_type() + +G_DECLARE_FINAL_TYPE (EphyDownloadWidget, ephy_download_widget, EPHY, DOWNLOAD_WIDGET, GtkGrid) GtkWidget *ephy_download_widget_new (EphyDownload *ephy_download); |