[evince] properties: Add document size in the file properties window
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] properties: Add document size in the file properties window
- Date: Sun, 18 Jan 2015 08:46:22 +0000 (UTC)
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]