X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=inline;f=shell%2Fev-window.c;h=dc67739915faf9eba3864a8469952a3e363cebac;hb=d84ffaa16587cbaa734d85f1601d9ce4d8cba137;hp=ea2cf73a547b087f4131b69d20e07d910da46a4f;hpb=bfd77d338cda84284c5a01ac7817b0f52caae386;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index ea2cf73a..dc677399 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -61,6 +61,7 @@ #include "ev-application.h" #include "ev-stock-icons.h" #include "ev-metadata-manager.h" +#include "ev-file-helpers.h" #include @@ -152,11 +153,14 @@ static const GtkTargetEntry ev_drop_types[] = { #define GCONF_CHROME_TOOLBAR "/apps/evince/show_toolbar" #define GCONF_CHROME_SIDEBAR "/apps/evince/show_sidebar" #define GCONF_CHROME_STATUSBAR "/apps/evince/show_statusbar" - +#define GCONF_LOCKDOWN_SAVE "/desktop/gnome/lockdown/disable_save_to_disk" +#define GCONF_LOCKDOWN_PRINT "/desktop/gnome/lockdown/disable_printing" #define GCONF_SIDEBAR_SIZE "/apps/evince/sidebar_size" #define SIDEBAR_DEFAULT_SIZE 132 +#define PRINT_CONFIG_FILENAME "ev-print-config.xml" + static void ev_window_update_fullscreen_popup (EvWindow *window); static void ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar, GParamSpec *pspec, @@ -210,6 +214,7 @@ update_action_sensitivity (EvWindow *ev_window) gboolean ok_to_print = TRUE; gboolean ok_to_copy = TRUE; gboolean has_properties = TRUE; + GConfClient *client; view = EV_VIEW (ev_window->priv->view); @@ -238,6 +243,16 @@ update_action_sensitivity (EvWindow *ev_window) if (!info || info->fields_mask == 0) { has_properties = FALSE; } + + client = gconf_client_get_default (); + + if (gconf_client_get_bool (client, GCONF_LOCKDOWN_SAVE, NULL)) { + ok_to_copy = FALSE; + } + + if (gconf_client_get_bool (client, GCONF_LOCKDOWN_PRINT, NULL)) { + ok_to_print = FALSE; + } /* File menu */ /* "FileOpen": always sensitive */ @@ -256,8 +271,8 @@ update_action_sensitivity (EvWindow *ev_window) has_pages && EV_IS_DOCUMENT_FIND (document)); set_action_sensitive (ev_window, "EditFindNext", ev_view_can_find_next (view)); - set_action_sensitive (ev_window, "EditRotateLeft", has_document); - set_action_sensitive (ev_window, "EditRotateRight", has_document); + set_action_sensitive (ev_window, "EditRotateLeft", has_pages); + set_action_sensitive (ev_window, "EditRotateRight", has_pages); /* View menu */ set_action_sensitive (ev_window, "ViewContinuous", has_pages); @@ -1296,6 +1311,53 @@ using_postscript_printer (GnomePrintConfig *config) return FALSE; } +static GnomePrintConfig * +load_print_config_from_file (void) +{ + GnomePrintConfig *print_config = NULL; + char *file_name, *contents = NULL; + + file_name = g_build_filename (ev_dot_dir (), PRINT_CONFIG_FILENAME, + NULL); + + if (g_file_get_contents (file_name, &contents, NULL, NULL)) { + print_config = gnome_print_config_from_string (contents, 0); + g_free (contents); + } + + if (print_config == NULL) { + print_config = gnome_print_config_default (); + } + + g_free (file_name); + + return print_config; +} + +static void +save_print_config_to_file (GnomePrintConfig *config) +{ + char *file_name, *str; + + g_return_if_fail (config != NULL); + + str = gnome_print_config_to_string (config, 0); + if (str == NULL) return; + + file_name = g_build_filename (ev_dot_dir (), + PRINT_CONFIG_FILENAME, + NULL); + +#ifdef HAVE_G_FILE_SET_CONTENTS + g_file_set_contents (file_name, str, -1, NULL); +#else + ev_file_set_contents (file_name, str, -1, NULL); +#endif + + g_free (file_name); + g_free (str); +} + static void ev_window_print (EvWindow *window) { @@ -1332,7 +1394,7 @@ ev_window_print_range (EvWindow *ev_window, int first_page, int last_page) last_page = ev_page_cache_get_n_pages (page_cache); } - config = gnome_print_config_default (); + config = load_print_config_from_file (); job = gnome_print_job_new (config); print_dialog = gnome_print_dialog_new (job, (guchar *) _("Print"), @@ -1390,6 +1452,8 @@ ev_window_print_range (EvWindow *ev_window, int first_page, int last_page) 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, @@ -1404,6 +1468,8 @@ ev_window_print_range (EvWindow *ev_window, int first_page, int last_page) ev_print_job_print (print_job, GTK_WINDOW (ev_window)); g_object_unref (print_job); } + + g_object_unref (config); } static void @@ -1506,6 +1572,9 @@ ev_window_update_fullscreen_popup (EvWindow *window) g_return_if_fail (popup != NULL); + if (GTK_WIDGET (window)->window == NULL) + return; + toolbar = (window->priv->chrome & EV_CHROME_TOOLBAR) != 0 || (window->priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0; popup_width = popup->requisition.width; @@ -1986,7 +2055,7 @@ ev_window_cmd_edit_toolbar (GtkAction *action, EvWindow *ev_window) { GtkWidget *dialog; GtkWidget *editor; - + dialog = gtk_dialog_new_with_buttons (_("Toolbar editor"), GTK_WINDOW (ev_window), GTK_DIALOG_DESTROY_WITH_PARENT,