1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "nsPrintSettingsServiceGTK.h"
8 #include "mozilla/embedding/PPrintingTypes.h"
9 #include "nsPrintSettingsGTK.h"
11 using namespace mozilla::embedding
;
13 static void serialize_gtk_printsettings_to_printdata(const gchar
* key
,
16 PrintData
* data
= (PrintData
*)aData
;
20 data
->GTKPrintSettings().AppendElement(pair
);
24 nsPrintSettingsServiceGTK::SerializeToPrintData(nsIPrintSettings
* aSettings
,
26 nsresult rv
= nsPrintSettingsService::SerializeToPrintData(aSettings
, data
);
27 NS_ENSURE_SUCCESS(rv
, rv
);
29 nsCOMPtr
<nsPrintSettingsGTK
> settingsGTK(do_QueryInterface(aSettings
));
30 NS_ENSURE_STATE(settingsGTK
);
32 GtkPrintSettings
* gtkPrintSettings
= settingsGTK
->GetGtkPrintSettings();
33 NS_ENSURE_STATE(gtkPrintSettings
);
35 gtk_print_settings_foreach(gtkPrintSettings
,
36 serialize_gtk_printsettings_to_printdata
, data
);
42 nsPrintSettingsServiceGTK::DeserializeToPrintSettings(
43 const PrintData
& data
, nsIPrintSettings
* settings
) {
44 nsCOMPtr
<nsPrintSettingsGTK
> settingsGTK(do_QueryInterface(settings
));
45 NS_ENSURE_STATE(settingsGTK
);
48 nsPrintSettingsService::DeserializeToPrintSettings(data
, settings
);
49 NS_ENSURE_SUCCESS(rv
, rv
);
51 // Instead of re-using the GtkPrintSettings that nsIPrintSettings is
52 // wrapping, we'll create a new one to deserialize to and replace it
53 // within nsIPrintSettings.
54 GtkPrintSettings
* newGtkPrintSettings
= gtk_print_settings_new();
56 for (uint32_t i
= 0; i
< data
.GTKPrintSettings().Length(); ++i
) {
57 CStringKeyValue pair
= data
.GTKPrintSettings()[i
];
58 gtk_print_settings_set(newGtkPrintSettings
, pair
.key().get(),
62 settingsGTK
->SetGtkPrintSettings(newGtkPrintSettings
);
64 // nsPrintSettingsGTK is holding a reference to newGtkPrintSettings
65 g_object_unref(newGtkPrintSettings
);
66 newGtkPrintSettings
= nullptr;
70 nsresult
nsPrintSettingsServiceGTK::_CreatePrintSettings(
71 nsIPrintSettings
** _retval
) {
73 nsPrintSettingsGTK
* printSettings
=
74 new nsPrintSettingsGTK(); // does not initially ref count
75 NS_ENSURE_TRUE(printSettings
, NS_ERROR_OUT_OF_MEMORY
);
77 NS_ADDREF(*_retval
= printSettings
); // ref count