[evince] properties: Add document size in the file properties window



commit c69275293b94f1c183df7e7a89e108c9d2cad6ad
Author: Tobias Westergaard Kjeldsen <tobias wkjeldsen dk>
Date:   Sat Jan 17 16:32:27 2015 +0100

    properties: Add document size in the file properties window
    
    https://bugzilla.gnome.org/show_bug.cgi?id=741057

 libdocument/ev-document.c       |   39 +++++++++++++++++++++++++++++++++++++++
 libdocument/ev-document.h       |    1 +
 properties/ev-properties-main.c |    2 +-
 properties/ev-properties-view.c |   17 +++++++++++++----
 properties/ev-properties-view.h |    2 +-
 shell/ev-properties-dialog.c    |    2 +-
 6 files changed, 56 insertions(+), 7 deletions(-)
---
diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c
index 244365e..6c2f1b9 100644
--- a/libdocument/ev-document.c
+++ b/libdocument/ev-document.c
@@ -39,6 +39,7 @@ typedef struct _EvPageSize
 struct _EvDocumentPrivate
 {
        gchar          *uri;
+       guint64         file_size;
 
        gint            n_pages;
 
@@ -59,6 +60,8 @@ struct _EvDocumentPrivate
        synctex_scanner_t synctex_scanner;
 };
 
+static guint64         _ev_document_get_size_gfile  (GFile      *file);
+static guint64         _ev_document_get_size        (const char *uri);
 static gint            _ev_document_get_n_pages     (EvDocument *document);
 static void            _ev_document_get_page_size   (EvDocument *document,
                                                     EvPage     *page,
@@ -329,6 +332,7 @@ ev_document_load (EvDocument  *document,
        } else {
                 ev_document_setup_cache (document);
                document->priv->uri = g_strdup (uri);
+               document->priv->file_size = _ev_document_get_size (uri);
                ev_document_initialize_synctex (document, uri);
         }
 
@@ -420,6 +424,7 @@ ev_document_load_gfile (EvDocument         *document,
 
         ev_document_setup_cache (document);
        document->priv->uri = g_file_get_uri (file);
+       document->priv->file_size = _ev_document_get_size_gfile (file);
        ev_document_initialize_synctex (document, document->priv->uri);
 
         return TRUE;
@@ -574,6 +579,32 @@ ev_document_synctex_forward_search (EvDocument   *document,
         return result;
 }
 
+static guint64
+_ev_document_get_size_gfile (GFile *file)
+{
+       goffset    size = 0;
+       GFileInfo *info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_SIZE,
+                                             G_FILE_QUERY_INFO_NONE, NULL, NULL);
+       if (info) {
+               size = g_file_info_get_size (info);
+
+               g_object_unref (info);
+       }
+
+       return size;
+}
+
+static guint64
+_ev_document_get_size (const char  *uri)
+{
+       GFile  *file = g_file_new_for_uri (uri);
+       guint64 size = _ev_document_get_size_gfile (file);
+
+       g_object_unref (file);
+
+       return size;
+}
+
 static gint
 _ev_document_get_n_pages (EvDocument  *document)
 {
@@ -802,6 +833,14 @@ ev_document_check_dimensions (EvDocument *document)
        return (document->priv->max_width > 0 && document->priv->max_height > 0);
 }
 
+guint64
+ev_document_get_size (EvDocument *document)
+{
+       g_return_val_if_fail (EV_IS_DOCUMENT (document), 0);
+
+       return document->priv->file_size;
+}
+
 gint
 ev_document_get_max_label_len (EvDocument *document)
 {
diff --git a/libdocument/ev-document.h b/libdocument/ev-document.h
index 2ffc130..3daa9fd 100644
--- a/libdocument/ev-document.h
+++ b/libdocument/ev-document.h
@@ -181,6 +181,7 @@ GdkPixbuf       *ev_document_get_thumbnail        (EvDocument      *document,
                                                   EvRenderContext *rc);
 cairo_surface_t *ev_document_get_thumbnail_surface (EvDocument      *document,
                                                    EvRenderContext *rc);
+guint64          ev_document_get_size             (EvDocument      *document);
 const gchar     *ev_document_get_uri              (EvDocument      *document);
 const gchar     *ev_document_get_title            (EvDocument      *document);
 gboolean         ev_document_is_page_size_uniform (EvDocument      *document);
diff --git a/properties/ev-properties-main.c b/properties/ev-properties-main.c
index 8ac0222..0832c59 100644
--- a/properties/ev-properties-main.c
+++ b/properties/ev-properties-main.c
@@ -114,7 +114,7 @@ ev_properties_get_pages (NautilusPropertyPageProvider *provider,
        }
        
        label = gtk_label_new (_("Document"));
-       page = ev_properties_view_new (uri);
+       page = ev_properties_view_new (document);
        ev_properties_view_set_info (EV_PROPERTIES_VIEW (page),
                                     ev_document_get_info (document));
        gtk_widget_show (page);
diff --git a/properties/ev-properties-view.c b/properties/ev-properties-view.c
index b6cbe08..aa91538 100644
--- a/properties/ev-properties-view.c
+++ b/properties/ev-properties-view.c
@@ -48,7 +48,8 @@ typedef enum {
        FORMAT_PROPERTY,
        SECURITY_PROPERTY,
        PAPER_SIZE_PROPERTY,
-       N_PROPERTIES
+       FILE_SIZE_PROPERTY,
+       N_PROPERTIES,
 } Property;
 
 typedef struct {
@@ -70,7 +71,8 @@ static const PropertyInfo properties_info[] = {
        { LINEARIZED_PROPERTY,    N_("Optimized:") },
        { FORMAT_PROPERTY,        N_("Format:") },
        { SECURITY_PROPERTY,      N_("Security:") },
-       { PAPER_SIZE_PROPERTY,    N_("Paper Size:") }
+       { PAPER_SIZE_PROPERTY,    N_("Paper Size:") },
+       { FILE_SIZE_PROPERTY,     N_("Size:") }
 };
 
 struct _EvPropertiesView {
@@ -79,6 +81,7 @@ struct _EvPropertiesView {
        GtkWidget *grid;
        GtkWidget *labels[N_PROPERTIES];
        gchar     *uri;
+       guint64    file_size;
 };
 
 struct _EvPropertiesViewClass {
@@ -370,6 +373,11 @@ ev_properties_view_set_info (EvPropertiesView *properties, const EvDocumentInfo
                set_property (properties, GTK_GRID (grid), PAPER_SIZE_PROPERTY, text, &row);
                g_free (text);
        }
+       if (properties->file_size) {
+               text = g_format_size (properties->file_size);
+               set_property (properties, GTK_GRID (grid), FILE_SIZE_PROPERTY, text, &row);
+               g_free (text);
+       }
 }
 
 static void
@@ -390,14 +398,15 @@ ev_properties_view_register_type (GTypeModule *module)
 }
 
 GtkWidget *
-ev_properties_view_new (const gchar *uri)
+ev_properties_view_new (EvDocument *document)
 {
        EvPropertiesView *properties;
 
        properties = g_object_new (EV_TYPE_PROPERTIES,
                                   "orientation", GTK_ORIENTATION_VERTICAL,
                                   NULL);
-       properties->uri = g_uri_unescape_string (uri, NULL);
+       properties->uri = g_uri_unescape_string (ev_document_get_uri (document), NULL);
+       properties->file_size = ev_document_get_size (document);
 
        return GTK_WIDGET (properties);
 }
diff --git a/properties/ev-properties-view.h b/properties/ev-properties-view.h
index 221a6ef..ca2a371 100644
--- a/properties/ev-properties-view.h
+++ b/properties/ev-properties-view.h
@@ -41,7 +41,7 @@ typedef struct _EvPropertiesViewPrivate EvPropertiesViewPrivate;
 GType          ev_properties_view_get_type             (void);
 void           ev_properties_view_register_type        (GTypeModule *module);
 
-GtkWidget      *ev_properties_view_new                 (const gchar          *uri);
+GtkWidget      *ev_properties_view_new                 (EvDocument           *document);
 void           ev_properties_view_set_info             (EvPropertiesView     *properties,
                                                         const EvDocumentInfo *info);
 
diff --git a/shell/ev-properties-dialog.c b/shell/ev-properties-dialog.c
index 772ee1c..e8ddf5b 100644
--- a/shell/ev-properties-dialog.c
+++ b/shell/ev-properties-dialog.c
@@ -83,7 +83,7 @@ ev_properties_dialog_set_document (EvPropertiesDialog *properties,
 
        if (properties->general_page == NULL) {
                label = gtk_label_new (_("General"));
-               properties->general_page = ev_properties_view_new (uri);
+               properties->general_page = ev_properties_view_new (document);
                gtk_notebook_append_page (GTK_NOTEBOOK (properties->notebook),
                                          properties->general_page, label);
                gtk_widget_show (properties->general_page);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]