Bug 1869647 - Mark hasStorageAccess.sub.https.window.html as intermittent after wpt...
[gecko.git] / widget / gtk / nsPrintSettingsServiceGTK.cpp
blob9d0dfc9379d0be203de76817fe2ec267d5080abc
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,
14 const gchar* value,
15 gpointer aData) {
16 PrintData* data = (PrintData*)aData;
17 CStringKeyValue pair;
18 pair.key() = key;
19 pair.value() = value;
20 data->GTKPrintSettings().AppendElement(pair);
23 NS_IMETHODIMP
24 nsPrintSettingsServiceGTK::SerializeToPrintData(nsIPrintSettings* aSettings,
25 PrintData* data) {
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);
38 return NS_OK;
41 NS_IMETHODIMP
42 nsPrintSettingsServiceGTK::DeserializeToPrintSettings(
43 const PrintData& data, nsIPrintSettings* settings) {
44 nsCOMPtr<nsPrintSettingsGTK> settingsGTK(do_QueryInterface(settings));
45 NS_ENSURE_STATE(settingsGTK);
47 nsresult rv =
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(),
59 pair.value().get());
62 settingsGTK->SetGtkPrintSettings(newGtkPrintSettings);
64 // nsPrintSettingsGTK is holding a reference to newGtkPrintSettings
65 g_object_unref(newGtkPrintSettings);
66 newGtkPrintSettings = nullptr;
67 return NS_OK;
70 nsresult nsPrintSettingsServiceGTK::_CreatePrintSettings(
71 nsIPrintSettings** _retval) {
72 *_retval = nullptr;
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
79 return NS_OK;