mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1090448 - Add GTK-specific PrintData fields and serialization / deserialization. r=karlt.
This commit is contained in:
parent
7f2c899657
commit
b250d71ce7
@ -6,6 +6,11 @@
|
||||
namespace mozilla {
|
||||
namespace embedding {
|
||||
|
||||
struct CStringKeyValue {
|
||||
nsCString key;
|
||||
nsCString value;
|
||||
};
|
||||
|
||||
struct PrintData {
|
||||
int32_t startPageRange;
|
||||
int32_t endPageRange;
|
||||
@ -76,7 +81,17 @@ struct PrintData {
|
||||
bool isIFrameSelected;
|
||||
bool isRangeSelection;
|
||||
|
||||
/* TODO: OS X specific things - specifically, an array of names for the
|
||||
/**
|
||||
* GTK-specific things. Some of these might look like dupes of the
|
||||
* information we're already passing, but the generalized settings that
|
||||
* we hold in nsIPrintSettings don't map perfectly to GTK's GtkPrintSettings,
|
||||
* so there are some nuances. GtkPrintSettings, for example, stores both an
|
||||
* internal name for paper size, as well as the display name.
|
||||
*/
|
||||
CStringKeyValue[] GTKPrintSettings;
|
||||
|
||||
/**
|
||||
* TODO: OS X specific things - specifically, an array of names for the
|
||||
* document to be supplied by nsIWebBrowserPrint::enumerateDocumentNames
|
||||
*/
|
||||
};
|
||||
|
@ -2,6 +2,7 @@
|
||||
/* 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"
|
||||
|
||||
@ -24,6 +25,18 @@ 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,
|
||||
@ -32,6 +45,17 @@ nsPrintOptionsGTK::SerializeToPrintData(nsIPrintSettings* aSettings,
|
||||
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;
|
||||
}
|
||||
|
||||
@ -39,9 +63,29 @@ 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;
|
||||
}
|
||||
|
||||
@ -57,4 +101,3 @@ nsresult nsPrintOptionsGTK::_CreatePrintSettings(nsIPrintSettings **_retval)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
|
@ -33,7 +33,6 @@ public:
|
||||
nsIPrintSettings* settings);
|
||||
|
||||
virtual nsresult _CreatePrintSettings(nsIPrintSettings **_retval);
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -758,9 +758,11 @@ nsPrintSettingsGTK::SetResolution(int32_t aResolution)
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsGTK::GetDuplex(int32_t *aDuplex)
|
||||
{
|
||||
if (!gtk_print_settings_has_key(mPrintSettings, GTK_PRINT_SETTINGS_DUPLEX))
|
||||
return NS_ERROR_FAILURE;
|
||||
*aDuplex = gtk_print_settings_get_duplex(mPrintSettings);
|
||||
if (!gtk_print_settings_has_key(mPrintSettings, GTK_PRINT_SETTINGS_DUPLEX)) {
|
||||
*aDuplex = GTK_PRINT_DUPLEX_SIMPLEX;
|
||||
} else {
|
||||
*aDuplex = gtk_print_settings_get_duplex(mPrintSettings);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user