summaryrefslogtreecommitdiffstats
path: root/widget/gtk/nsCUPSShim.h
diff options
context:
space:
mode:
Diffstat (limited to 'widget/gtk/nsCUPSShim.h')
-rw-r--r--widget/gtk/nsCUPSShim.h86
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___ */