diff options
Diffstat (limited to 'widget/gtk/nsCUPSShim.h')
-rw-r--r-- | widget/gtk/nsCUPSShim.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/widget/gtk/nsCUPSShim.h b/widget/gtk/nsCUPSShim.h new file mode 100644 index 000000000..3e7d96f3a --- /dev/null +++ b/widget/gtk/nsCUPSShim.h @@ -0,0 +1,86 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* ex: set tabstop=8 softtabstop=4 shiftwidth=4 expandtab: */ +/* 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/. */ + +#ifndef nsCUPSShim_h___ +#define nsCUPSShim_h___ + + +/* Various CUPS data types. We don't #include cups headers to avoid + * requiring CUPS to be installed on the build host (and to avoid having + * to test for CUPS in configure). + */ +typedef struct /**** Printer Options ****/ +{ + char *name; /* Name of option */ + char *value; /* Value of option */ +} cups_option_t; + +typedef struct /**** Destination ****/ +{ + char *name, /* Printer or class name */ + *instance; /* Local instance name or nullptr */ + int is_default; /* Is this printer the default? */ + int num_options; /* Number of options */ + cups_option_t *options; /* Options */ +} cups_dest_t; + +typedef cups_dest_t* (*CupsGetDestType)(const char *printer, + const char *instance, + int num_dests, + cups_dest_t *dests); +typedef int (*CupsGetDestsType)(cups_dest_t **dests); +typedef int (*CupsFreeDestsType)(int num_dests, + cups_dest_t *dests); +typedef int (*CupsPrintFileType)(const char *printer, + const char *filename, + const char *title, + int num_options, + cups_option_t *options); +typedef int (*CupsTempFdType)(char *filename, + int length); +typedef int (*CupsAddOptionType)(const char *name, + const char *value, + int num_options, + cups_option_t **options); + +struct PRLibrary; + +/* Note: this class relies on static initialization. */ +class nsCUPSShim { + public: + /** + * Initialize this object. Attempt to load the CUPS shared + * library and find function pointers for the supported + * functions (see below). + * @return false if the shared library could not be loaded, or if + * any of the functions could not be found. + * true for successful initialization. + */ + bool Init(); + + /** + * @return true if the object was initialized successfully. + * false otherwise. + */ + bool IsInitialized() { return nullptr != mCupsLib; } + + /* Function pointers for supported functions. These are only + * valid after successful initialization. + */ + CupsAddOptionType mCupsAddOption; + CupsFreeDestsType mCupsFreeDests; + CupsGetDestType mCupsGetDest; + CupsGetDestsType mCupsGetDests; + CupsPrintFileType mCupsPrintFile; + CupsTempFdType mCupsTempFd; + + private: + PRLibrary *mCupsLib; +}; + + + +#endif /* nsCUPSShim_h___ */ |