/** --------------------------------------------------- */ nsPrintSettingsGTK& nsPrintSettingsGTK::operator=(const nsPrintSettingsGTK& rhs) { if (this == &rhs) { return *this; } nsPrintSettings::operator=(rhs); if (mPageSetup) g_object_unref(mPageSetup); mPageSetup = gtk_page_setup_copy(rhs.mPageSetup); // NOTE: No need to re-initialize mUnwriteableMargin here (even // though mPageSetup is changing). It'll be copied correctly by // nsPrintSettings::operator=. if (mPrintSettings) g_object_unref(mPrintSettings); mPrintSettings = gtk_print_settings_copy(rhs.mPrintSettings); if (mGTKPrinter) g_object_unref(mGTKPrinter); mGTKPrinter = (GtkPrinter*) g_object_ref(rhs.mGTKPrinter); mPrintSelectionOnly = rhs.mPrintSelectionOnly; return *this; }
/** ------------------------------------------------------- * Initialize the nsDeviceContextSpecGTK * @update dc 2/15/98 * @update syd 3/2/99 */ NS_IMETHODIMP nsDeviceContextSpecGTK::Init(nsIWidget *aWidget, nsIPrintSettings* aPS, PRBool aIsPrintPreview) { DO_PR_DEBUG_LOG(("nsDeviceContextSpecGTK::Init(aPS=%p)\n", aPS)); if (gtk_major_version < 2 || (gtk_major_version == 2 && gtk_minor_version < 10)) return NS_ERROR_NOT_AVAILABLE; // I'm so sorry bz mPrintSettings = aPS; mIsPPreview = aIsPrintPreview; // This is only set by embedders PRBool toFile; aPS->GetPrintToFile(&toFile); mToPrinter = !toFile && !aIsPrintPreview; nsCOMPtr<nsPrintSettingsGTK> printSettingsGTK(do_QueryInterface(aPS)); if (!printSettingsGTK) return NS_ERROR_NO_INTERFACE; mGtkPrinter = printSettingsGTK->GetGtkPrinter(); mGtkPrintSettings = printSettingsGTK->GetGtkPrintSettings(); mGtkPageSetup = printSettingsGTK->GetGtkPageSetup(); // This is a horrible workaround for some printer driver bugs that treat custom page sizes different // to standard ones. If our paper object matches one of a standard one, use a standard paper size // object instead. See bug 414314 for more info. GtkPaperSize* geckosHackishPaperSize = gtk_page_setup_get_paper_size(mGtkPageSetup); GtkPaperSize* standardGtkPaperSize = gtk_paper_size_new(gtk_paper_size_get_name(geckosHackishPaperSize)); mGtkPageSetup = gtk_page_setup_copy(mGtkPageSetup); mGtkPrintSettings = gtk_print_settings_copy(mGtkPrintSettings); GtkPaperSize* properPaperSize; if (gtk_paper_size_is_equal(geckosHackishPaperSize, standardGtkPaperSize)) { properPaperSize = standardGtkPaperSize; } else { properPaperSize = geckosHackishPaperSize; gtk_paper_size_free(standardGtkPaperSize); } gtk_print_settings_set_paper_size(mGtkPrintSettings, properPaperSize); gtk_page_setup_set_paper_size_and_default_margins(mGtkPageSetup, properPaperSize); return NS_OK; }
/* Returns a copy */ GtkPrintSettings * _gedit_app_get_default_print_settings (GeditApp *app) { GeditAppPrivate *priv; g_return_val_if_fail (GEDIT_IS_APP (app), NULL); priv = gedit_app_get_instance_private (app); if (priv->print_settings == NULL) { load_print_settings (app); } return gtk_print_settings_copy (priv->print_settings); }
void ClientPrintHandlerGtk::OnPrintSettings( CefRefPtr<CefPrintSettings> settings, bool get_defaults) { if (get_defaults) { DCHECK(!page_setup_); DCHECK(!printer_); // |gtk_settings_| is a new copy. gtk_settings_ = gtk_print_settings_copy(GetLastUsedSettings()->settings()); page_setup_ = gtk_page_setup_new(); } else { if (!gtk_settings_) { gtk_settings_ = gtk_print_settings_copy(GetLastUsedSettings()->settings()); } GtkPrinterList* printer_list = new GtkPrinterList; printer_ = printer_list->GetPrinterWithName(settings->GetDeviceName()); if (printer_) { g_object_ref(printer_); gtk_print_settings_set_printer(gtk_settings_, gtk_printer_get_name(printer_)); if (!page_setup_) { page_setup_ = gtk_printer_get_default_page_size(printer_); } } gtk_print_settings_set_n_copies(gtk_settings_, settings->GetCopies()); gtk_print_settings_set_collate(gtk_settings_, settings->WillCollate()); std::string color_value; std::string color_setting_name; GetColorModelForMode(settings->GetColorModel(), &color_setting_name, &color_value); gtk_print_settings_set(gtk_settings_, color_setting_name.c_str(), color_value.c_str()); if (settings->GetDuplexMode() != DUPLEX_MODE_UNKNOWN) { const char* cups_duplex_mode = NULL; switch (settings->GetDuplexMode()) { case DUPLEX_MODE_LONG_EDGE: cups_duplex_mode = kDuplexNoTumble; break; case DUPLEX_MODE_SHORT_EDGE: cups_duplex_mode = kDuplexTumble; break; case DUPLEX_MODE_SIMPLEX: cups_duplex_mode = kDuplexNone; break; default: // UNKNOWN_DUPLEX_MODE NOTREACHED(); break; } gtk_print_settings_set(gtk_settings_, kCUPSDuplex, cups_duplex_mode); } if (!page_setup_) page_setup_ = gtk_page_setup_new(); gtk_print_settings_set_orientation( gtk_settings_, settings->IsLandscape() ? GTK_PAGE_ORIENTATION_LANDSCAPE : GTK_PAGE_ORIENTATION_PORTRAIT); delete printer_list; } InitPrintSettings(gtk_settings_, page_setup_, settings); }
static VALUE rg_dup(VALUE self) { return GOBJ2RVALU(gtk_print_settings_copy(_SELF(self))); }
/* void showPrintDialog (in nsIDOMWindow parent, in nsIWebBrowserPrint webBrowserPrint, in nsIPrintSettings printSettings); */ NS_IMETHODIMP GeckoPrintService::ShowPrintDialog (nsIDOMWindow *aParent, nsIWebBrowserPrint *aWebBrowserPrint, nsIPrintSettings *aSettings) { GaleonEmbedShell *shell; GeckoPrintSession *session = GeckoPrintSession::FromSettings (aSettings); NS_ENSURE_TRUE (session, NS_ERROR_INVALID_POINTER); shell = galeon_shell_get_embed_shell (galeon_shell); nsresult rv; PRBool haveSelection = PR_FALSE; rv = aSettings->GetPrintOptions(nsIPrintSettings::kEnableSelectionRB, &haveSelection); NS_ENSURE_SUCCESS (rv, rv); PRInt16 frameUI = nsIPrintSettings::kFrameEnableAll; rv = aSettings->GetHowToEnableFrameUI (&frameUI); NS_ENSURE_SUCCESS (rv, rv); GtkWindow *parent = GTK_WINDOW (GaleonUtils::FindGtkParent (aParent)); NS_ENSURE_TRUE(parent, NS_ERROR_INVALID_POINTER); GtkWidget *custom_tab = NULL, *frame_box = NULL, *print_frames_normal = NULL, *print_frames_selected = NULL, *print_frames_separately = NULL; GError *gerror = NULL; guint builder_ret; GtkBuilder *builder = gtk_builder_new (); builder_ret = gtk_builder_add_from_file (builder, SHARE_DIR "/print-tab.xml", &gerror); if (builder_ret) { /* Build the custom tab */ custom_tab = GTK_WIDGET (gtk_builder_get_object (builder, "custom_tab_container")); gul_gui_connect_checkbutton_to_gconf (GTK_WIDGET (gtk_builder_get_object (builder, "print_bg_colors_checkbutton")), CONF_PRINT_BG_COLORS); gul_gui_connect_checkbutton_to_gconf (GTK_WIDGET (gtk_builder_get_object (builder, "print_bg_images_checkbutton")), CONF_PRINT_BG_IMAGES); gul_gui_connect_checkbutton_to_gconf (GTK_WIDGET (gtk_builder_get_object (builder, "print_date_checkbutton")), CONF_PRINT_DATE); gul_gui_connect_checkbutton_to_gconf (GTK_WIDGET (gtk_builder_get_object (builder, "print_page_numbers_checkbutton")), CONF_PRINT_PAGE_NUMBERS); gul_gui_connect_checkbutton_to_gconf (GTK_WIDGET (gtk_builder_get_object (builder, "print_page_title_checkbutton")), CONF_PRINT_PAGE_TITLE); gul_gui_connect_checkbutton_to_gconf (GTK_WIDGET (gtk_builder_get_object (builder, "print_page_url_checkbutton")), CONF_PRINT_PAGE_URL); frame_box = GTK_WIDGET (gtk_builder_get_object (builder, "frame_box")); print_frames_normal = GTK_WIDGET (gtk_builder_get_object (builder, "print_frames_normal")); print_frames_selected = GTK_WIDGET (gtk_builder_get_object (builder, "print_frames_selected")); print_frames_separately = GTK_WIDGET (gtk_builder_get_object (builder, "print_frames_separately")); /* FIXME: store/load from pref */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (print_frames_normal), TRUE); if (frameUI == nsIPrintSettings::kFrameEnableAll) { /* Allow all frame options */ gtk_widget_set_sensitive (frame_box, TRUE); } else if (frameUI == nsIPrintSettings::kFrameEnableAsIsAndEach) { /* Allow all except "selected frame" */ gtk_widget_set_sensitive (frame_box, TRUE); gtk_widget_set_sensitive (print_frames_selected, FALSE); /* Preselect this one, since the default above only prints _one page_ ! */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (print_frames_separately), TRUE); } } /* FIXME: this sucks! find some way to do all of this async! */ GtkWidget *dialog = gtk_print_unix_dialog_new (NULL /* FIXME title */, GTK_WINDOW (parent)); GtkPrintUnixDialog *print_dialog = GTK_PRINT_UNIX_DIALOG (dialog); GtkPrintCapabilities capabilities = GtkPrintCapabilities (GTK_PRINT_CAPABILITY_PAGE_SET | GTK_PRINT_CAPABILITY_COPIES | GTK_PRINT_CAPABILITY_COLLATE | GTK_PRINT_CAPABILITY_REVERSE | GTK_PRINT_CAPABILITY_SCALE | GTK_PRINT_CAPABILITY_GENERATE_PS); #ifdef HAVE_GECKO_1_9 capabilities = GtkPrintCapabilities (capabilities | GTK_PRINT_CAPABILITY_GENERATE_PDF); #endif gtk_print_unix_dialog_set_manual_capabilities (print_dialog, capabilities); gtk_print_unix_dialog_set_page_setup (print_dialog, galeon_embed_shell_get_page_setup (shell)); gtk_print_unix_dialog_set_settings (print_dialog, galeon_embed_shell_get_print_settings (shell)); PRInt16 printFrames = nsIPrintSettings::kNoFrames; if (builder_ret) { g_object_ref_sink (custom_tab); gtk_print_unix_dialog_add_custom_tab (print_dialog, custom_tab, gtk_label_new (_("Options"))); /* FIXME better name! */ g_object_unref (custom_tab); g_object_unref (builder); if (frameUI != nsIPrintSettings::kFrameEnableNone) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (print_frames_normal))) { printFrames = nsIPrintSettings::kFramesAsIs; } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (print_frames_selected))) { printFrames = nsIPrintSettings::kSelectedFrame; } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (print_frames_separately))) { printFrames = nsIPrintSettings::kEachFrameSep; } } } int response = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_hide (dialog); GtkPrinter *printer = gtk_print_unix_dialog_get_selected_printer (print_dialog); if (response != GTK_RESPONSE_OK || !printer) { gtk_widget_destroy (dialog); return NS_ERROR_ABORT; } GtkPageSetup *pageSetup = gtk_print_unix_dialog_get_page_setup (print_dialog); /* no reference owned */ galeon_embed_shell_set_page_setup (shell, pageSetup); GtkPrintSettings *settings = gtk_print_unix_dialog_get_settings (print_dialog); galeon_embed_shell_set_print_settings (shell, settings); /* We copy the setup and settings so we can modify them to unset * options handled by gecko. */ GtkPageSetup *pageSetupCopy = gtk_page_setup_copy (pageSetup); pageSetup = pageSetupCopy; GtkPrintSettings *settingsCopy = gtk_print_settings_copy (settings); g_object_unref (settings); settings = settingsCopy; rv = session->SetSettings (aSettings, settings, pageSetup, printer); /* Now translate the settings to nsIPrintSettings */ if (NS_SUCCEEDED (rv)) { nsCString sourceFile; session->GetSourceFile (sourceFile); if (!sourceFile.IsEmpty ()) { rv = TranslateSettings (settings, pageSetup, printer, sourceFile, printFrames, PR_TRUE, aSettings); } else { rv = NS_ERROR_FAILURE; } } gtk_widget_destroy (dialog); g_object_unref (settings); g_object_unref (pageSetup); return rv; }