forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			102 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | 
						|
/* This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
						|
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | 
						|
 | 
						|
#include "nsPrintOptionsGTK.h"
 | 
						|
#include "nsPrintSettingsGTK.h"
 | 
						|
 | 
						|
using namespace mozilla::embedding;
 | 
						|
 | 
						|
/** ---------------------------------------------------
 | 
						|
 *  See documentation in nsPrintOptionsWin.h
 | 
						|
 *	@update 6/21/00 dwc
 | 
						|
 */
 | 
						|
nsPrintOptionsGTK::nsPrintOptionsGTK()
 | 
						|
{
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/** ---------------------------------------------------
 | 
						|
 *  See documentation in nsPrintOptionsImpl.h
 | 
						|
 *	@update 6/21/00 dwc
 | 
						|
 */
 | 
						|
nsPrintOptionsGTK::~nsPrintOptionsGTK()
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
serialize_gtk_printsettings_to_printdata(const gchar *key,
 | 
						|
                                         const gchar *value,
 | 
						|
                                         gpointer aData)
 | 
						|
{
 | 
						|
  PrintData* data = (PrintData*)aData;
 | 
						|
  CStringKeyValue pair;
 | 
						|
  pair.key() = key;
 | 
						|
  pair.value() = value;
 | 
						|
  data->GTKPrintSettings().AppendElement(pair);
 | 
						|
}
 | 
						|
 | 
						|
NS_IMETHODIMP
 | 
						|
nsPrintOptionsGTK::SerializeToPrintData(nsIPrintSettings* aSettings,
 | 
						|
                                        nsIWebBrowserPrint* aWBP,
 | 
						|
                                        PrintData* data)
 | 
						|
{
 | 
						|
  nsresult rv = nsPrintOptions::SerializeToPrintData(aSettings, aWBP, data);
 | 
						|
  NS_ENSURE_SUCCESS(rv, rv);
 | 
						|
 | 
						|
  nsCOMPtr<nsPrintSettingsGTK> settingsGTK(do_QueryInterface(aSettings));
 | 
						|
  NS_ENSURE_STATE(settingsGTK);
 | 
						|
 | 
						|
  GtkPrintSettings* gtkPrintSettings = settingsGTK->GetGtkPrintSettings();
 | 
						|
  NS_ENSURE_STATE(gtkPrintSettings);
 | 
						|
 | 
						|
  gtk_print_settings_foreach(
 | 
						|
    gtkPrintSettings,
 | 
						|
    serialize_gtk_printsettings_to_printdata,
 | 
						|
    data);
 | 
						|
 | 
						|
  return NS_OK;
 | 
						|
}
 | 
						|
 | 
						|
NS_IMETHODIMP
 | 
						|
nsPrintOptionsGTK::DeserializeToPrintSettings(const PrintData& data,
 | 
						|
                                              nsIPrintSettings* settings)
 | 
						|
{
 | 
						|
  nsCOMPtr<nsPrintSettingsGTK> settingsGTK(do_QueryInterface(settings));
 | 
						|
  NS_ENSURE_STATE(settingsGTK);
 | 
						|
 | 
						|
  nsresult rv = nsPrintOptions::DeserializeToPrintSettings(data, settings);
 | 
						|
  NS_ENSURE_SUCCESS(rv, rv);
 | 
						|
 | 
						|
  // Instead of re-using the GtkPrintSettings that nsIPrintSettings is
 | 
						|
  // wrapping, we'll create a new one to deserialize to and replace it
 | 
						|
  // within nsIPrintSettings.
 | 
						|
  GtkPrintSettings* newGtkPrintSettings = gtk_print_settings_new();
 | 
						|
 | 
						|
  for (uint32_t i = 0; i < data.GTKPrintSettings().Length(); ++i) {
 | 
						|
    CStringKeyValue pair = data.GTKPrintSettings()[i];
 | 
						|
    gtk_print_settings_set(newGtkPrintSettings,
 | 
						|
                           pair.key().get(),
 | 
						|
                           pair.value().get());
 | 
						|
  }
 | 
						|
 | 
						|
  settingsGTK->SetGtkPrintSettings(newGtkPrintSettings);
 | 
						|
 | 
						|
  // nsPrintSettingsGTK is holding a reference to newGtkPrintSettings
 | 
						|
  g_object_unref(newGtkPrintSettings);
 | 
						|
  newGtkPrintSettings = nullptr;
 | 
						|
  return NS_OK;
 | 
						|
}
 | 
						|
 | 
						|
nsresult nsPrintOptionsGTK::_CreatePrintSettings(nsIPrintSettings **_retval)
 | 
						|
{
 | 
						|
  *_retval = nullptr;
 | 
						|
  nsPrintSettingsGTK* printSettings = new nsPrintSettingsGTK(); // does not initially ref count
 | 
						|
  NS_ENSURE_TRUE(printSettings, NS_ERROR_OUT_OF_MEMORY);
 | 
						|
 | 
						|
  NS_ADDREF(*_retval = printSettings); // ref count
 | 
						|
 | 
						|
  return NS_OK;
 | 
						|
}
 | 
						|
 |