Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorNickolay V. Shmyrev <nshmyrev@yandex.ru>2006-10-02 23:44:17 (GMT)
committer Nickolay V. Shmyrev <nshmyrev@src.gnome.org>2006-10-02 23:44:17 (GMT)
commitc01789f75f6281541b22917c801fdbf94281b795 (patch)
tree715f206a7909aea8e8d57fc7f2ef19d674959487 /shell
parent01252ea37a0ea367bfd8e82d9cf6f7af8360f4e3 (diff)
Set size according to the document size/page size ratio. That should
2006-10-03 Nickolay V. Shmyrev <nshmyrev@yandex.ru> * shell/ev-metadata-manager.c: (save_values): * shell/ev-window.c: (setup_size_from_metadata), (setup_view_from_metadata), (ev_window_setup_document), (ev_window_xfer_job_cb), (window_configure_event_cb): Set size according to the document size/page size ratio. That should correct rather wierd behaviour of the previous commit.
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-metadata-manager.c8
-rw-r--r--shell/ev-window.c123
2 files changed, 90 insertions, 41 deletions
diff --git a/shell/ev-metadata-manager.c b/shell/ev-metadata-manager.c
index e6c5202..c3fc422 100644
--- a/shell/ev-metadata-manager.c
+++ b/shell/ev-metadata-manager.c
@@ -539,8 +539,12 @@ save_values (const gchar *key, GValue *value, xmlNodePtr parent)
string_value = g_strdup_printf ("%d", g_value_get_int (value));
break;
case G_TYPE_DOUBLE:
- string_value = g_strdup_printf ("%f", g_value_get_double (value));
- break;
+ {
+ gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
+ g_ascii_dtostr (buf, G_ASCII_DTOSTR_BUF_SIZE, g_value_get_double (value));
+ string_value = g_strdup_printf ("%s", buf);
+ }
+ break;
case G_TYPE_BOOLEAN:
string_value = g_strdup_printf ("%d", g_value_get_boolean (value));
break;
diff --git a/shell/ev-window.c b/shell/ev-window.c
index b938eb8..868a56e 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -680,48 +680,28 @@ setup_sidebar_from_metadata (EvWindow *window, EvDocument *document)
}
static void
-setup_view_from_metadata (EvWindow *window)
+setup_size_from_metadata (EvWindow *window)
{
- EvView *view = EV_VIEW (window->priv->view);
char *uri = window->priv->uri;
- GEnumValue *enum_value;
GValue width = { 0, };
GValue height = { 0, };
+ GValue width_ratio = { 0, };
+ GValue height_ratio = { 0, };
GValue maximized = { 0, };
GValue x = { 0, };
GValue y = { 0, };
- GValue sizing_mode = { 0, };
- GValue zoom = { 0, };
- GValue continuous = { 0, };
- GValue dual_page = { 0, };
- GValue presentation = { 0, };
- GValue fullscreen = { 0, };
- GValue rotation = { 0, };
- gboolean restore_size = TRUE;
-
- /* Window size */
if (ev_metadata_manager_get (uri, "window_maximized", &maximized, FALSE)) {
if (g_value_get_boolean (&maximized)) {
gtk_window_maximize (GTK_WINDOW (window));
- restore_size = FALSE;
+ return;
} else {
gtk_window_unmaximize (GTK_WINDOW (window));
}
g_value_unset (&maximized);
}
- if (restore_size &&
- ev_metadata_manager_get (uri, "window_width", &width, FALSE) &&
- ev_metadata_manager_get (uri, "window_height", &height, FALSE)) {
- gtk_window_resize (GTK_WINDOW (window),
- g_value_get_int (&width),
- g_value_get_int (&height));
- g_value_unset (&width);
- g_value_unset (&height);
- }
- if (restore_size &&
- ev_metadata_manager_get (uri, "window_x", &x, TRUE) &&
+ if (ev_metadata_manager_get (uri, "window_x", &x, TRUE) &&
ev_metadata_manager_get (uri, "window_y", &y, TRUE)) {
gtk_window_move (GTK_WINDOW (window), g_value_get_int (&x),
g_value_get_int (&y));
@@ -729,6 +709,63 @@ setup_view_from_metadata (EvWindow *window)
g_value_unset (&y);
}
+ if (ev_metadata_manager_get (uri, "window_width", &width, TRUE) &&
+ ev_metadata_manager_get (uri, "window_height", &height, TRUE)) {
+ gtk_window_resize (GTK_WINDOW (window),
+ g_value_get_int (&width),
+ g_value_get_int (&height));
+ g_value_unset (&width);
+ g_value_unset (&height);
+ return;
+ }
+
+ if (window->priv->page_cache &&
+ ev_metadata_manager_get (uri, "window_width_ratio", &width_ratio, FALSE) &&
+ ev_metadata_manager_get (uri, "window_height_ratio", &height_ratio, FALSE)) {
+ gint document_width;
+ gint document_height;
+
+ ev_page_cache_get_max_width (window->priv->page_cache,
+ 0, 1.0,
+ &document_width);
+ ev_page_cache_get_max_height (window->priv->page_cache,
+ 0, 1.0,
+ &document_height);
+
+ gtk_window_resize (GTK_WINDOW (window),
+ g_value_get_double (&width_ratio) * document_width,
+ g_value_get_double (&height_ratio) * document_height);
+ g_value_unset (&width_ratio);
+ g_value_unset (&height_ratio);
+ }
+
+}
+
+static void
+setup_view_from_metadata (EvWindow *window)
+{
+ EvView *view = EV_VIEW (window->priv->view);
+ char *uri = window->priv->uri;
+ GEnumValue *enum_value;
+ GValue sizing_mode = { 0, };
+ GValue zoom = { 0, };
+ GValue continuous = { 0, };
+ GValue dual_page = { 0, };
+ GValue presentation = { 0, };
+ GValue fullscreen = { 0, };
+ GValue rotation = { 0, };
+ GValue maximized = { 0, };
+
+ /* Maximized */
+ if (ev_metadata_manager_get (uri, "window_maximized", &maximized, FALSE)) {
+ if (g_value_get_boolean (&maximized)) {
+ gtk_window_maximize (GTK_WINDOW (window));
+ } else {
+ gtk_window_unmaximize (GTK_WINDOW (window));
+ }
+ g_value_unset (&maximized);
+ }
+
/* Sizing mode */
if (ev_metadata_manager_get (uri, "sizing_mode", &sizing_mode, FALSE)) {
enum_value = g_enum_get_value_by_nick
@@ -832,6 +869,7 @@ ev_window_setup_document (EvWindow *ev_window)
ev_window->priv->document);
}
+ setup_size_from_metadata (ev_window);
setup_document_from_metadata (ev_window);
setup_sidebar_from_metadata (ev_window, document);
@@ -954,22 +992,22 @@ ev_window_xfer_job_cb (EvJobXfer *job,
/* Success! */
if (job->error == NULL) {
- g_free (ev_window->priv->uri);
+ if (ev_window->priv->uri)
+ g_free (ev_window->priv->uri);
ev_window->priv->uri = g_strdup (job->uri);
- setup_view_from_metadata (ev_window);
- if (job->local_uri) {
- ev_window->priv->local_uri = g_strdup (job->local_uri);
- } else {
- ev_window->priv->local_uri = NULL;
- }
+ if (ev_window->priv->local_uri)
+ g_free (ev_window->priv->local_uri);
+ ev_window->priv->local_uri =
+ job->local_uri ? g_strdup (job->local_uri) : NULL;
if (ev_window->priv->document)
g_object_unref (ev_window->priv->document);
ev_window->priv->document = g_object_ref (document);
+ setup_view_from_metadata (ev_window);
ev_window_setup_document (ev_window);
- ev_window_add_recent (ev_window, ev_window->priv->uri);
+ ev_window_add_recent (ev_window, ev_window->priv->uri);
if (job->dest)
ev_window_goto_dest (ev_window, job->dest);
@@ -1000,7 +1038,6 @@ ev_window_xfer_job_cb (EvJobXfer *job,
ev_window->priv->uri = g_strdup (job->uri);
setup_view_from_metadata (ev_window);
-
file_name = gnome_vfs_format_uri_for_display (job->uri);
base_name = g_path_get_basename (file_name);
ev_password_view_set_file_name (EV_PASSWORD_VIEW (ev_window->priv->password_view),
@@ -1008,7 +1045,7 @@ ev_window_xfer_job_cb (EvJobXfer *job,
g_free (file_name);
g_free (base_name);
ev_window_set_page_mode (ev_window, PAGE_MODE_PASSWORD);
-
+
ev_window_popup_password_dialog (ev_window);
} else {
ev_window_error_dialog (GTK_WINDOW (ev_window),
@@ -3770,7 +3807,7 @@ window_configure_event_cb (EvWindow *window, GdkEventConfigure *event, gpointer
{
char *uri = window->priv->uri;
GdkWindowState state;
- int x, y, width, height;
+ int x, y, width, height, document_width, document_height;
state = gdk_window_get_state (GTK_WIDGET (window)->window);
@@ -3778,11 +3815,19 @@ window_configure_event_cb (EvWindow *window, GdkEventConfigure *event, gpointer
gtk_window_get_position (GTK_WINDOW (window), &x, &y);
gtk_window_get_size (GTK_WINDOW (window), &width, &height);
- if (!ev_window_is_empty (window)) {
+ if (!ev_window_is_empty (window) && window->priv->page_cache) {
+ ev_page_cache_get_max_width (window->priv->page_cache,
+ 0, 1.0,
+ &document_width);
+ ev_page_cache_get_max_height (window->priv->page_cache,
+ 0, 1.0,
+ &document_height);
ev_metadata_manager_set_int (uri, "window_x", x);
ev_metadata_manager_set_int (uri, "window_y", y);
- ev_metadata_manager_set_int (uri, "window_width", width);
- ev_metadata_manager_set_int (uri, "window_height", height);
+ ev_metadata_manager_set_double (uri, "window_width_ratio",
+ (double)width/document_width);
+ ev_metadata_manager_set_double (uri, "window_height_ratio",
+ (double)height/document_height);
}
}