#include <string.h>
#include <unistd.h>
+#if !GLIB_CHECK_VERSION (2, 13, 3)
char *xdg_user_dir_lookup (char *type);
+#endif
typedef enum {
PAGE_MODE_DOCUMENT,
#define GCONF_LOCKDOWN_SAVE "/desktop/gnome/lockdown/disable_save_to_disk"
#define GCONF_LOCKDOWN_PRINT "/desktop/gnome/lockdown/disable_printing"
-#define PRESENTATION_TIMEOUT 5 * 1000
+#define PRESENTATION_TIMEOUT 5
#define SIDEBAR_DEFAULT_SIZE 132
#define LINKS_SIDEBAR_ID "links"
fullscreen_toolbar = ((priv->chrome & EV_CHROME_FULLSCREEN_TOOLBAR) != 0 ||
(priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0) && fullscreen;
findbar = (priv->chrome & EV_CHROME_FINDBAR) != 0;
- sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && !fullscreen_mode;
+ sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && !presentation;
preview_toolbar = (priv->chrome& EV_CHROME_PREVIEW_TOOLBAR);
set_widget_visibility (priv->menubar, menubar);
gint response_id,
EvWindow *ev_window)
{
+ gchar *uri;
+
if (response_id == GTK_RESPONSE_OK) {
GSList *uris;
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)));
+
+ uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (chooser));
+ ev_application_set_chooser_uri (EV_APP, uri);
+ g_free (uri);
gtk_widget_destroy (chooser);
}
gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (chooser),
window->priv->uri);
} else {
+#if GLIB_CHECK_VERSION (2, 13, 3)
+ const gchar *folder;
+
+ folder = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS);
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser),
+ folder ? folder : g_get_home_dir ());
+#else
char *folder;
folder = xdg_user_dir_lookup ("DOCUMENTS");
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser),
folder);
free (folder);
+#endif
}
g_signal_connect (chooser, "response",
GtkWidget *fc;
gchar *base_name;
gchar *file_name;
+#if GLIB_CHECK_VERSION (2, 13, 3)
+ const gchar *folder;
+#else
gchar *folder;
+#endif
fc = gtk_file_chooser_dialog_new (
_("Save a Copy"),
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (fc), TRUE);
file_name = gnome_vfs_format_uri_for_display (ev_window->priv->uri);
base_name = g_path_get_basename (file_name);
- folder = xdg_user_dir_lookup ("DOCUMENTS");
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (fc), base_name);
+
+#if GLIB_CHECK_VERSION (2, 13, 3)
+ folder = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS);
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fc),
+ folder ? folder : g_get_home_dir ());
+#else
+ folder = xdg_user_dir_lookup ("DOCUMENTS");
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fc), folder);
+ free (folder);
+#endif
+
g_free (file_name);
g_free (base_name);
- free (folder);
g_signal_connect (fc, "response",
G_CALLBACK (file_save_dialog_response_cb),
gtk_print_settings_set_collate (settings, FALSE);
if (capabilities & EV_FILE_EXPORTER_CAN_REVERSE)
gtk_print_settings_set_reverse (settings, FALSE);
+ if (capabilities & EV_FILE_EXPORTER_CAN_NUMBER_UP) {
+ gtk_print_settings_set_number_up (settings, 1);
+ gtk_print_settings_set_int (settings, "cups-"GTK_PRINT_SETTINGS_NUMBER_UP, 1);
+ }
if (window->priv->print_preview) {
gchar *uri;
EvPrintPageSet page_set;
gint n_ranges = 0;
gint copies;
+ gint pages_per_sheet;
gboolean collate;
gboolean reverse;
gdouble scale;
height *= scale;
}
+ pages_per_sheet = gtk_print_settings_get_number_up (window->priv->print_settings);
+
copies = gtk_print_settings_get_n_copies (window->priv->print_settings);
collate = gtk_print_settings_get_collate (window->priv->print_settings);
reverse = gtk_print_settings_get_reverse (window->priv->print_settings);
width, height,
ranges, n_ranges,
page_set,
+ pages_per_sheet,
copies, collate,
reverse);
if (window->priv->presentation_timeout_id > 0) {
g_source_remove (window->priv->presentation_timeout_id);
}
-
+
+#if GLIB_CHECK_VERSION (2, 13, 0)
+ window->priv->presentation_timeout_id =
+ g_timeout_add_seconds (PRESENTATION_TIMEOUT,
+ (GSourceFunc)presentation_timeout_cb, window);
+#else
window->priv->presentation_timeout_id =
- g_timeout_add (PRESENTATION_TIMEOUT, (GSourceFunc)presentation_timeout_cb, window);
+ g_timeout_add (PRESENTATION_TIMEOUT * 1000,
+ (GSourceFunc)presentation_timeout_cb, window);
+#endif
ev_view_show_cursor (EV_VIEW (window->priv->view));
}
if (screen == old_screen)
return;
-#ifdef HAVE_GTK_RECENT
- if (old_screen) {
- g_signal_handlers_disconnect_by_func (
- gtk_recent_manager_get_for_screen (old_screen),
- G_CALLBACK (ev_window_setup_recent), window);
- }
-
- priv->recent_manager = gtk_recent_manager_get_for_screen (screen);
- g_signal_connect_swapped (priv->recent_manager,
- "changed",
- G_CALLBACK (ev_window_setup_recent),
- window);
-#endif
-
- ev_view_set_screen_dpi (EV_VIEW (window->priv->view),
+ ev_view_set_screen_dpi (EV_VIEW (priv->view),
get_screen_dpi (GTK_WINDOW (window)));
if (GTK_WIDGET_CLASS (ev_window_parent_class)->screen_changed) {
}
#ifdef WITH_GTK_PRINT
+static void ev_window_do_preview_print (EvWindow *window);
+
static gboolean
-lookup_printer_from_name (GtkPrinter *printer,
- EvWindow *window)
+ev_window_enumerate_printer_cb (GtkPrinter *printer,
+ EvWindow *window)
{
+ EvWindowPrivate *priv = window->priv;
const gchar *printer_name;
- printer_name = gtk_print_settings_get_printer (window->priv->print_settings);
-
+ printer_name = gtk_print_settings_get_printer (priv->print_settings);
if ((printer_name
- && g_ascii_strcasecmp (printer_name, gtk_printer_get_name (printer)) == 0) ||
+ && strcmp (printer_name, gtk_printer_get_name (printer)) == 0) ||
(!printer_name && gtk_printer_is_default (printer))) {
- if (window->priv->printer)
- g_object_unref (window->priv->printer);
- window->priv->printer = g_object_ref (printer);
+ if (priv->printer)
+ g_object_unref (priv->printer);
+ priv->printer = g_object_ref (printer);
- return TRUE;
+ /* Now that we have the printer, we'll start the print */
+ ev_window_do_preview_print (window);
+
+ return TRUE; /* we're done */
}
- return FALSE;
+ return FALSE; /* continue the enumeration */
}
static void
g_object_unref (print_job);
gtk_widget_destroy (GTK_WIDGET (window));
}
-#endif /* WITH_GTK_PRINT */
static void
-ev_window_cmd_preview_print (GtkAction *action, EvWindow *window)
+ev_window_do_preview_print (EvWindow *window)
{
-#ifdef WITH_GTK_PRINT
- GtkPrintSettings *print_settings = NULL;
+ EvWindowPrivate *priv = window->priv;
GtkPageSetup *page_setup;
GtkPrintJob *job;
gchar *filename;
GError *error = NULL;
-#if GTK_CHECK_VERSION (2, 11, 0)
- const gchar *print_settings_file = window->priv->print_settings_file;
- if (print_settings_file) {
- if (g_file_test (print_settings_file, G_FILE_TEST_IS_REGULAR)) {
- GError *error = NULL;
+ g_assert (priv->print_settings != NULL);
+ g_assert (priv->printer != NULL);
- print_settings = gtk_print_settings_new_from_file (print_settings_file,
- &error);
-
- if (error) {
- g_warning (error->message);
- g_error_free (error);
- print_settings = NULL;
- }
- }
- }
-#endif /* GTK 2.11.0 */
-
- if (!print_settings)
- print_settings = gtk_print_settings_new ();
-
- if (window->priv->print_settings)
- g_object_unref (window->priv->print_settings);
- window->priv->print_settings = print_settings;
-
- gtk_enumerate_printers ((GtkPrinterFunc) lookup_printer_from_name,
- window, NULL, TRUE);
- g_assert (GTK_IS_PRINTER (window->priv->printer));
-
page_setup = gtk_page_setup_new ();
job = gtk_print_job_new ("evince-print",
- window->priv->printer,
- window->priv->print_settings,
+ priv->printer,
+ priv->print_settings,
page_setup);
- g_object_unref (window->priv->print_settings);
- window->priv->print_settings = NULL;
- g_object_unref (window->priv->printer);
- window->priv->printer = NULL;
+ g_object_unref (priv->print_settings);
+ priv->print_settings = NULL;
+ g_object_unref (priv->printer);
+ priv->printer = NULL;
g_object_unref (page_setup);
- filename = g_filename_from_uri (window->priv->local_uri ?
- window->priv->local_uri : window->priv->uri,
+ filename = g_filename_from_uri (priv->local_uri ?
+ priv->local_uri : priv->uri,
NULL, NULL);
if (gtk_print_job_set_source_file (job, filename, &error)) {
g_free (filename);
gtk_widget_hide (GTK_WIDGET (window));
+}
+
+#endif /* WITH_GTK_PRINT */
+
+static void
+ev_window_cmd_preview_print (GtkAction *action, EvWindow *window)
+{
+#ifdef WITH_GTK_PRINT
+ EvWindowPrivate *priv = window->priv;
+ GtkPrintSettings *print_settings = NULL;
+#if GTK_CHECK_VERSION (2, 11, 0)
+ const gchar *print_settings_file = priv->print_settings_file;
+
+ if (print_settings_file) {
+ if (g_file_test (print_settings_file, G_FILE_TEST_IS_REGULAR)) {
+ GError *error = NULL;
+
+ print_settings = gtk_print_settings_new_from_file (print_settings_file,
+ &error);
+
+ if (error) {
+ g_warning (error->message);
+ g_error_free (error);
+ print_settings = NULL;
+ }
+ }
+ }
+#endif /* GTK 2.11.0 */
+
+ if (!print_settings)
+ print_settings = gtk_print_settings_new ();
+
+ if (priv->print_settings)
+ g_object_unref (priv->print_settings);
+ priv->print_settings = print_settings;
+
+ gtk_enumerate_printers ((GtkPrinterFunc) ev_window_enumerate_printer_cb,
+ window, NULL, FALSE);
#endif /* WITH_GTK_PRINT */
}
g_signal_handlers_disconnect_by_func (ev_window->priv->view, ev_view_update_view_size, scrolled_window);
if (sizing_mode != EV_SIZING_FREE)
- ev_view_update_view_size (ev_window->priv->view, GTK_SCROLLED_WINDOW (scrolled_window));
+ ev_view_update_view_size (EV_VIEW (ev_window->priv->view),
+ GTK_SCROLLED_WINDOW (scrolled_window));
switch (sizing_mode) {
case EV_SIZING_BEST_FIT:
action = gtk_action_group_get_action (ev_window->priv->action_group, "ViewSidebar");
- if (!ev_view_get_presentation (view) &&
- !ev_view_get_fullscreen (view)) {
-
+ if (!ev_view_get_presentation (view)) {
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
GTK_WIDGET_VISIBLE (ev_sidebar));
}
#ifdef HAVE_GTK_RECENT
+#if GTK_CHECK_VERSION(2,11,4)
+ ev_window->priv->recent_manager = gtk_recent_manager_get_default ();
+#else
+ /* It's fine to just use the one of the default screen here */
ev_window->priv->recent_manager = gtk_recent_manager_get_for_screen (
- gtk_widget_get_screen (GTK_WIDGET (ev_window)));
+ gdk_screen_get_default ());
+#endif
ev_window->priv->recent_action_group = NULL;
ev_window->priv->recent_ui_id = 0;
g_signal_connect_swapped (ev_window->priv->recent_manager,