X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=a3a4457d8e8ed7b0488b19aa93fcb3e68f56c469;hb=d2ac321bceb0da7a82ed651273d0fa7bfc028886;hp=70cc0439f919cdaf16248f012a0fdede3e1dabe0;hpb=90a8680bba08da4ae9aa5f0f5382c625eef2f86c;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index 70cc0439..a3a4457d 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -107,15 +107,15 @@ struct _EvWindowPrivate { GtkWidget *sidebar_thumbs; GtkWidget *sidebar_links; - EvWindowTitle *title; - /* Dialogs */ GtkWidget *properties; + GtkWidget *print_dialog; + GtkWidget *password_dialog; /* UI Builders */ GtkActionGroup *action_group; GtkActionGroup *popups_action_group; - GtkUIManager *ui_manager; + GtkUIManager *ui_manager; /* Fullscreen mode */ GtkWidget *fullscreen_toolbar; @@ -129,23 +129,18 @@ struct _EvWindowPrivate { /* Document */ char *uri; char *local_uri; - char *loaded_uri; EvDocument *document; + EvDocument *password_document; EvPageCache *page_cache; - EvWindowPageMode page_mode; - - /* These members are used temporarily when in PAGE_MODE_PASSWORD */ - EvDocument *password_document; - GtkWidget *password_dialog; - char *password_uri; + EvWindowTitle *title; + EggRecentViewUIManager *recent_view; /* Job used to load document */ EvJob *xfer_job; EvJob *load_job; - - EggRecentViewUIManager *recent_view; + GnomePrintJob *print_job; }; static const GtkTargetEntry ev_drop_types[] = { @@ -598,7 +593,8 @@ page_changed_cb (EvPageCache *page_cache, EvWindow *ev_window) { update_action_sensitivity (ev_window); - ev_metadata_manager_set_int (ev_window->priv->loaded_uri, "page", page); + if (!ev_window_is_empty (ev_window)) + ev_metadata_manager_set_int (ev_window->priv->uri, "page", page); } static void @@ -629,11 +625,12 @@ setup_document_from_metadata (EvWindow *window) { char *uri = window->priv->uri; GValue page = { 0, }; + gint new_page; - /* Page */ if (uri && ev_metadata_manager_get (uri, "page", &page, TRUE)) { + new_page = CLAMP (g_value_get_int (&page), 0, ev_page_cache_get_n_pages (window->priv->page_cache) - 1); ev_page_cache_set_current_page (window->priv->page_cache, - g_value_get_int (&page)); + new_page); } } @@ -754,14 +751,14 @@ setup_view_from_metadata (EvWindow *window) /* Presentation */ if (ev_metadata_manager_get (uri, "presentation", &presentation, FALSE)) { - if (g_value_get_boolean (&presentation)) { + if (g_value_get_boolean (&presentation) && uri) { ev_window_run_presentation (window); } } /* Fullscreen */ if (ev_metadata_manager_get (uri, "fullscreen", &fullscreen, FALSE)) { - if (g_value_get_boolean (&fullscreen)) { + if (g_value_get_boolean (&fullscreen) && uri) { ev_window_run_fullscreen (window); } } @@ -806,12 +803,12 @@ ev_window_setup_document (EvWindow *ev_window) ev_window, 0); } - ev_window_set_page_mode (ev_window, PAGE_MODE_DOCUMENT); ev_sidebar_set_document (sidebar, document); if (ev_page_cache_get_n_pages (ev_window->priv->page_cache) > 0) { ev_view_set_document (view, document); } + ev_window_set_page_mode (ev_window, PAGE_MODE_DOCUMENT); ev_window_title_set_document (ev_window->priv->title, document); ev_window_title_set_uri (ev_window->priv->title, ev_window->priv->uri); @@ -840,8 +837,6 @@ password_dialog_response (GtkWidget *password_dialog, char *password; if (response_id == GTK_RESPONSE_OK) { - EvDocument *document; - gchar *uri; password = ev_password_dialog_get_password (EV_PASSWORD_DIALOG (password_dialog)); if (password) { @@ -854,21 +849,14 @@ password_dialog_response (GtkWidget *password_dialog, ev_password_dialog_save_password (EV_PASSWORD_DIALOG (password_dialog)); - document = ev_window->priv->password_document; - uri = ev_window->priv->password_uri; - + g_object_unref (ev_window->priv->password_document); ev_window->priv->password_document = NULL; - ev_window->priv->password_uri = NULL; ev_window_title_set_type (ev_window->priv->title, EV_WINDOW_TITLE_DOCUMENT); - ev_job_queue_add_job (ev_window->priv->load_job, EV_JOB_PRIORITY_HIGH); gtk_widget_destroy (password_dialog); - g_object_unref (document); - g_free (uri); - return; } @@ -884,16 +872,15 @@ static void ev_window_popup_password_dialog (EvWindow *ev_window) { g_assert (ev_window->priv->password_document); - g_assert (ev_window->priv->password_uri); gtk_widget_set_sensitive (ev_window->priv->password_view, FALSE); - ev_window_title_set_uri (ev_window->priv->title, ev_window->priv->password_uri); + ev_window_title_set_uri (ev_window->priv->title, ev_window->priv->uri); ev_window_title_set_type (ev_window->priv->title, EV_WINDOW_TITLE_PASSWORD); if (ev_window->priv->password_dialog == NULL) { ev_window->priv->password_dialog = - g_object_new (EV_TYPE_PASSWORD_DIALOG, "uri", ev_window->priv->password_uri, NULL); + g_object_new (EV_TYPE_PASSWORD_DIALOG, "uri", ev_window->priv->uri, NULL); gtk_window_set_transient_for (GTK_WINDOW (ev_window->priv->password_dialog), GTK_WINDOW (ev_window)); g_object_add_weak_pointer (G_OBJECT (ev_window->priv->password_dialog), @@ -972,24 +959,16 @@ ev_window_load_job_cb (EvJobLoad *job, g_object_unref (ev_window->priv->password_document); ev_window->priv->password_document = NULL; } - if (ev_window->priv->password_uri) { - g_free (ev_window->priv->password_uri); - ev_window->priv->password_uri = NULL; - } /* Success! */ if (job->error == NULL) { + if (ev_window->priv->document) g_object_unref (ev_window->priv->document); ev_window->priv->document = g_object_ref (document); - ev_window_setup_document (ev_window); - - ev_window_add_recent (ev_window, ev_window->priv->uri); - - if (ev_window->priv->loaded_uri) - g_free (ev_window->priv->loaded_uri); - ev_window->priv->loaded_uri = g_strdup (ev_window->priv->uri); + ev_window_setup_document (ev_window); + ev_window_add_recent (ev_window, ev_window->priv->uri); ev_window_clear_jobs (ev_window); return; @@ -1000,7 +979,6 @@ ev_window_load_job_cb (EvJobLoad *job, gchar *base_name, *file_name; ev_window->priv->password_document = g_object_ref (document); - ev_window->priv->password_uri = g_strdup (job->uri); file_name = gnome_vfs_format_uri_for_display (job->uri); base_name = g_path_get_basename (file_name); @@ -1054,17 +1032,41 @@ ev_window_xfer_job_cb (EvJobXfer *job, } } -void -ev_window_open_uri (EvWindow *ev_window, const char *uri) +const char * +ev_window_get_uri (EvWindow *ev_window) +{ + return ev_window->priv->uri; +} + +static void +ev_window_close_dialogs (EvWindow *ev_window) { if (ev_window->priv->password_dialog) gtk_widget_destroy (ev_window->priv->password_dialog); + ev_window->priv->password_dialog = NULL; + + if (ev_window->priv->print_dialog) { + gtk_widget_destroy (ev_window->priv->print_dialog); + g_object_unref (ev_window->priv->print_job); + } + ev_window->priv->print_dialog = NULL; + ev_window->priv->print_job = NULL; + + if (ev_window->priv->properties) + gtk_widget_destroy (ev_window->priv->properties); + ev_window->priv->properties = NULL; +} + +void +ev_window_open_uri (EvWindow *ev_window, const char *uri) +{ g_free (ev_window->priv->uri); ev_window->priv->uri = g_strdup (uri); setup_view_from_metadata (ev_window); + ev_window_close_dialogs (ev_window); ev_window_clear_jobs (ev_window); ev_window_clear_local_uri (ev_window); @@ -1091,6 +1093,8 @@ file_open_dialog_response_cb (GtkWidget *chooser, g_slist_foreach (uris, (GFunc)g_free, NULL); g_slist_free (uris); } + ev_application_set_chooser_uri (EV_APP, + gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (chooser))); gtk_widget_destroy (chooser); } @@ -1111,7 +1115,10 @@ ev_window_cmd_file_open (GtkAction *action, EvWindow *window) ev_document_types_add_filters (chooser, NULL); gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (chooser), TRUE); gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), FALSE); - + if (ev_application_get_chooser_uri (EV_APP) != NULL) + gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (chooser), + ev_application_get_chooser_uri (EV_APP)); + g_signal_connect (chooser, "response", G_CALLBACK (file_open_dialog_response_cb), window); @@ -1251,113 +1258,114 @@ ev_window_print (EvWindow *window) page_cache = ev_page_cache_get (window->priv->document); last_page = ev_page_cache_get_n_pages (page_cache); - ev_window_print_range (window, 1, -1); + ev_window_print_range (window, 1, last_page); } -const char * -ev_window_get_uri (EvWindow *ev_window) + +static gboolean +ev_window_print_dialog_response_cb (GtkDialog *print_dialog, gint response, gpointer data) { - return ev_window->priv->uri; + EvWindow *ev_window = EV_WINDOW (data); + EvPrintJob *print_job; + GnomePrintConfig *config; + + if (response != GNOME_PRINT_DIALOG_RESPONSE_PRINT) { + gtk_widget_destroy (GTK_WIDGET (print_dialog)); + ev_window->priv->print_dialog = NULL; + g_object_unref (ev_window->priv->print_job); + ev_window->priv->print_job = NULL; + return FALSE; + } + + config = gnome_print_dialog_get_config (GNOME_PRINT_DIALOG (print_dialog)); + + /* FIXME: Change this when we have the first backend + * that can print more than postscript + */ + if (using_pdf_printer (config)) { + GtkWidget *dialog; + dialog = gtk_message_dialog_new (GTK_WINDOW (print_dialog), GTK_DIALOG_MODAL, + GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, + _("Generating PDF is not supported")); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + return FALSE; + } else if (!using_postscript_printer (config)) { + GtkWidget *dialog; + + dialog = gtk_message_dialog_new (GTK_WINDOW (print_dialog), GTK_DIALOG_MODAL, + GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, + _("Printing is not supported on this printer.")); + gtk_message_dialog_format_secondary_text ( + GTK_MESSAGE_DIALOG (dialog), + _("You were trying to print to a printer using the \"%s\" driver. This program requires a PostScript printer driver."), + gnome_print_config_get (config, (guchar *)"Settings.Engine.Backend.Driver")); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + return FALSE; + } + + save_print_config_to_file (config); + + print_job = g_object_new (EV_TYPE_PRINT_JOB, + "gnome_print_job", ev_window->priv->print_job, + "document", ev_window->priv->document, + "print_dialog", print_dialog, + NULL); + + if (print_job != NULL) { + ev_print_job_print (print_job, GTK_WINDOW (ev_window)); + g_object_unref (print_job); + } + + g_object_unref (config); + + gtk_widget_destroy (GTK_WIDGET (print_dialog)); + ev_window->priv->print_dialog = NULL; + g_object_unref (ev_window->priv->print_job); + ev_window->priv->print_job = NULL; + + return FALSE; } void ev_window_print_range (EvWindow *ev_window, int first_page, int last_page) { GnomePrintConfig *config; - GnomePrintJob *job; - GtkWidget *print_dialog; gchar *pages_label; - EvPrintJob *print_job = NULL; - EvPageCache *page_cache; g_return_if_fail (EV_IS_WINDOW (ev_window)); g_return_if_fail (ev_window->priv->document != NULL); - page_cache = ev_page_cache_get (ev_window->priv->document); - if (last_page == -1) { - last_page = ev_page_cache_get_n_pages (page_cache); - } - config = load_print_config_from_file (); - job = gnome_print_job_new (config); - print_dialog = gnome_print_dialog_new (job, (guchar *) _("Print"), - (GNOME_PRINT_DIALOG_RANGE | - GNOME_PRINT_DIALOG_COPIES)); + if (ev_window->priv->print_job == NULL) + ev_window->priv->print_job = gnome_print_job_new (config); + + if (ev_window->priv->print_dialog == NULL) + ev_window->priv->print_dialog = gnome_print_dialog_new (ev_window->priv->print_job, (guchar *) _("Print"), + (GNOME_PRINT_DIALOG_RANGE | + GNOME_PRINT_DIALOG_COPIES)); + gtk_window_set_transient_for (GTK_WINDOW (ev_window->priv->print_dialog), GTK_WINDOW (ev_window)); + g_object_unref (config); pages_label = g_strconcat (_("Pages"), " ", NULL); - gnome_print_dialog_construct_range_page (GNOME_PRINT_DIALOG (print_dialog), + gnome_print_dialog_construct_range_page (GNOME_PRINT_DIALOG (ev_window->priv->print_dialog), GNOME_PRINT_RANGE_ALL | GNOME_PRINT_RANGE_RANGE, first_page, last_page, NULL, (const guchar *)pages_label); g_free (pages_label); - gtk_dialog_set_response_sensitive (GTK_DIALOG (print_dialog), + gtk_dialog_set_response_sensitive (GTK_DIALOG (ev_window->priv->print_dialog), GNOME_PRINT_DIALOG_RESPONSE_PREVIEW, FALSE); - while (TRUE) { - int response; - response = gtk_dialog_run (GTK_DIALOG (print_dialog)); - - if (response != GNOME_PRINT_DIALOG_RESPONSE_PRINT) - break; - - /* FIXME: Change this when we have the first backend - * that can print more than postscript - */ - if (using_pdf_printer (config)) { - GtkWidget *dialog; - - dialog = gtk_message_dialog_new ( - GTK_WINDOW (print_dialog), GTK_DIALOG_MODAL, - GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, - _("Generating PDF is not supported")); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); - - continue; - } else if (!using_postscript_printer (config)) { - GtkWidget *dialog; - - dialog = gtk_message_dialog_new ( - GTK_WINDOW (print_dialog), GTK_DIALOG_MODAL, - GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, - _("Printing is not supported on this printer.")); - gtk_message_dialog_format_secondary_text ( - GTK_MESSAGE_DIALOG (dialog), - _("You were trying to print to a printer using the \"%s\" driver. This program requires a PostScript printer driver."), - gnome_print_config_get ( - config, (guchar *)"Settings.Engine.Backend.Driver")); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); - - continue; - } - - save_print_config_to_file (config); - - print_job = g_object_new (EV_TYPE_PRINT_JOB, - "gnome_print_job", job, - "document", ev_window->priv->document, - "print_dialog", print_dialog, - NULL); - break; - } - - g_object_unref (job); - - gtk_widget_destroy (print_dialog); - - if (print_job != NULL) { - ev_print_job_print (print_job, GTK_WINDOW (ev_window)); - g_object_unref (print_job); - } - - g_object_unref (config); + g_signal_connect (G_OBJECT (ev_window->priv->print_dialog), "response", G_CALLBACK (ev_window_print_dialog_response_cb), ev_window); + gtk_widget_show (ev_window->priv->print_dialog); + return; } - + static void ev_window_cmd_file_print (GtkAction *action, EvWindow *ev_window) { @@ -1506,8 +1514,9 @@ static void ev_window_sidebar_position_change_cb (GObject *object, GParamSpec *pspec, EvWindow *ev_window) { - ev_metadata_manager_set_int (ev_window->priv->loaded_uri, "sidebar_size", - gtk_paned_get_position (GTK_PANED (object))); + if (!ev_window_is_empty (ev_window)) + ev_metadata_manager_set_int (ev_window->priv->uri, "sidebar_size", + gtk_paned_get_position (GTK_PANED (object))); } static void @@ -1724,7 +1733,8 @@ ev_window_run_fullscreen (EvWindow *window) gtk_window_fullscreen (GTK_WINDOW (window)); ev_window_update_fullscreen_popup (window); - ev_metadata_manager_set_boolean (window->priv->loaded_uri, "fullscreen", TRUE); + if (!ev_window_is_empty (window)) + ev_metadata_manager_set_boolean (window->priv->uri, "fullscreen", TRUE); } static void @@ -1753,7 +1763,8 @@ ev_window_stop_fullscreen (EvWindow *window) update_chrome_visibility (window); update_sidebar_visibility (window); - ev_metadata_manager_set_boolean (window->priv->loaded_uri, "fullscreen", FALSE); + if (!ev_window_is_empty (window)) + ev_metadata_manager_set_boolean (window->priv->uri, "fullscreen", FALSE); } static void @@ -1800,7 +1811,8 @@ ev_window_run_presentation (EvWindow *window) update_chrome_visibility (window); gtk_widget_hide (window->priv->sidebar); - ev_metadata_manager_set_boolean (window->priv->loaded_uri, "presentation", TRUE); + if (!ev_window_is_empty (window)) + ev_metadata_manager_set_boolean (window->priv->uri, "presentation", TRUE); } static void @@ -1818,7 +1830,8 @@ ev_window_stop_presentation (EvWindow *window) update_chrome_visibility (window); update_sidebar_visibility (window); - ev_metadata_manager_set_boolean (window->priv->loaded_uri, "presentation", FALSE); + if (!ev_window_is_empty (window)) + ev_metadata_manager_set_boolean (window->priv->uri, "presentation", FALSE); } static void @@ -2082,7 +2095,7 @@ ev_window_cmd_view_reload (GtkAction *action, EvWindow *ev_window) ev_window_open_uri (ev_window, uri); /* In case the number of pages in the document has changed. */ - page = CLAMP (page, 0, ev_page_cache_get_n_pages (ev_window->priv->page_cache)); + page = CLAMP (page, 0, ev_page_cache_get_n_pages (ev_window->priv->page_cache) - 1); ev_page_cache_set_current_page (ev_window->priv->page_cache, page); @@ -2179,8 +2192,9 @@ save_sizing_mode (EvWindow *window) mode = ev_view_get_sizing_mode (EV_VIEW (window->priv->view)); enum_value = g_enum_get_value (EV_SIZING_MODE_CLASS, mode); - ev_metadata_manager_set_string (window->priv->loaded_uri, "sizing_mode", - enum_value->value_nick); + if (!ev_window_is_empty (window)) + ev_metadata_manager_set_string (window->priv->uri, "sizing_mode", + enum_value->value_nick); } static void @@ -2237,8 +2251,8 @@ ev_window_zoom_changed_cb (EvView *view, GParamSpec *pspec, EvWindow *ev_window) { update_action_sensitivity (ev_window); - if (ev_view_get_sizing_mode (view) == EV_SIZING_FREE) { - ev_metadata_manager_set_double (ev_window->priv->loaded_uri, "zoom", + if (ev_view_get_sizing_mode (view) == EV_SIZING_FREE && !ev_window_is_empty (ev_window)) { + ev_metadata_manager_set_double (ev_window->priv->uri, "zoom", ev_view_get_zoom (view)); } } @@ -2275,8 +2289,10 @@ static void ev_window_continuous_changed_cb (EvView *view, GParamSpec *pspec, EvWindow *ev_window) { ev_window_update_continuous_action (ev_window); - ev_metadata_manager_set_boolean (ev_window->priv->loaded_uri, "continuous", - ev_view_get_continuous (EV_VIEW (ev_window->priv->view))); + + if (!ev_window_is_empty (ev_window)) + ev_metadata_manager_set_boolean (ev_window->priv->uri, "continuous", + ev_view_get_continuous (EV_VIEW (ev_window->priv->view))); } static void @@ -2286,8 +2302,9 @@ ev_window_rotation_changed_cb (EvView *view, GParamSpec *pspec, EvWindow *window rotation = ev_view_get_rotation (EV_VIEW (window->priv->view)); - ev_metadata_manager_set_int (window->priv->loaded_uri, "rotation", - rotation); + if (!ev_window_is_empty (window)) + ev_metadata_manager_set_int (window->priv->uri, "rotation", + rotation); ev_sidebar_thumbnails_refresh (EV_SIDEBAR_THUMBNAILS (window->priv->sidebar_thumbs), rotation); @@ -2303,8 +2320,10 @@ static void ev_window_dual_mode_changed_cb (EvView *view, GParamSpec *pspec, EvWindow *ev_window) { ev_window_update_dual_page_action (ev_window); - ev_metadata_manager_set_boolean (ev_window->priv->loaded_uri, "dual-page", - ev_view_get_dual_page (EV_VIEW (ev_window->priv->view))); + + if (!ev_window_is_empty (ev_window)) + ev_metadata_manager_set_boolean (ev_window->priv->uri, "dual-page", + ev_view_get_dual_page (EV_VIEW (ev_window->priv->view))); } static char * @@ -2435,7 +2454,9 @@ ev_window_sidebar_current_page_changed_cb (EvSidebar *ev_sidebar, } g_object_unref (current_page); - ev_metadata_manager_set_string (ev_window->priv->loaded_uri, "sidebar_page", id); + + if (!ev_window_is_empty (ev_window)) + ev_metadata_manager_set_string (ev_window->priv->uri, "sidebar_page", id); } static void @@ -2455,8 +2476,9 @@ ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar, GParamSpec *pspe (action, G_CALLBACK (ev_window_view_sidebar_cb), ev_window); if (!ev_view_get_presentation (view) && - !ev_view_get_fullscreen (view)) { - ev_metadata_manager_set_boolean (ev_window->priv->loaded_uri, "sidebar_visibility", + !ev_view_get_fullscreen (view) && + !ev_window_is_empty (ev_window)) { + ev_metadata_manager_set_boolean (ev_window->priv->uri, "sidebar_visibility", GTK_WIDGET_VISIBLE (ev_sidebar)); } } @@ -2470,6 +2492,9 @@ view_menu_popup_cb (EvView *view, gboolean show_external = FALSE; gboolean show_internal = FALSE; GtkAction *action; + + if (ev_view_get_presentation (EV_VIEW (ev_window->priv->view))) + return FALSE; if (ev_window->priv->link) g_object_unref (ev_window->priv->link); @@ -2513,7 +2538,7 @@ view_menu_popup_cb (EvView *view, gtk_menu_popup (GTK_MENU (popup), NULL, NULL, NULL, NULL, 3, gtk_get_current_event_time ()); - return TRUE; + return FALSE; } static void @@ -2698,14 +2723,7 @@ ev_window_dispose (GObject *object) priv->password_document = NULL; } - if (priv->password_uri) { - g_free (priv->password_uri); - priv->password_uri = NULL; - } - - if (priv->password_dialog) { - gtk_widget_destroy (priv->password_dialog); - } + ev_window_close_dialogs (window); if (priv->link) { g_object_unref (priv->link); @@ -2720,11 +2738,6 @@ ev_window_dispose (GObject *object) priv->find_bar = NULL; } - if (priv->loaded_uri) { - g_free (priv->loaded_uri); - priv->loaded_uri = NULL; - } - if (priv->uri) { g_free (priv->uri); priv->uri = NULL; @@ -3138,7 +3151,8 @@ window_state_event_cb (EvWindow *window, GdkEventWindowState *event, gpointer du gboolean maximized; maximized = event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED; - ev_metadata_manager_set_boolean (window->priv->loaded_uri, "window_maximized", maximized); + if (!ev_window_is_empty (window)) + ev_metadata_manager_set_boolean (window->priv->uri, "window_maximized", maximized); } return FALSE; @@ -3147,7 +3161,7 @@ window_state_event_cb (EvWindow *window, GdkEventWindowState *event, gpointer du static gboolean window_configure_event_cb (EvWindow *window, GdkEventConfigure *event, gpointer dummy) { - char *uri = window->priv->loaded_uri; + char *uri = window->priv->uri; GdkWindowState state; int x, y, width, height; @@ -3157,10 +3171,12 @@ 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); - 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); + if (!ev_window_is_empty (window)) { + 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); + } } return FALSE;