/* gtkprintercloudprint.c: Google Cloud Print -specific Printer class, * GtkPrinterCloudprint * Copyright (C) 2014, Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . */ #include "config.h" #include #include #include "gtkprintercloudprint.h" #include "gtkcloudprintaccount.h" typedef struct _GtkPrinterCloudprintClass GtkPrinterCloudprintClass; #define GTK_PRINTER_CLOUDPRINT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_PRINTER_CLOUDPRINT, GtkPrinterCloudprintClass)) #define GTK_IS_PRINTER_CLOUDPRINT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PRINTER_CLOUDPRINT)) #define GTK_PRINTER_CLOUDPRINT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PRINTER_CLOUDPRINT, GtkPrinterCloudprintClass)) static GtkPrinterClass *gtk_printer_cloudprint_parent_class; static GType printer_cloudprint_type = 0; struct _GtkPrinterCloudprintClass { GtkPrinterClass parent_class; }; struct _GtkPrinterCloudprint { GtkPrinter parent_instance; GtkCloudprintAccount *account; gchar *id; }; enum { PROP_0, PROP_CLOUDPRINT_ACCOUNT, PROP_PRINTER_ID }; static void gtk_printer_cloudprint_class_init (GtkPrinterCloudprintClass *class); static void gtk_printer_cloudprint_init (GtkPrinterCloudprint *impl); static void gtk_printer_cloudprint_finalize (GObject *object); static void gtk_printer_cloudprint_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void gtk_printer_cloudprint_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); void gtk_printer_cloudprint_register_type (GTypeModule *module) { const GTypeInfo printer_cloudprint_info = { sizeof (GtkPrinterCloudprintClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) gtk_printer_cloudprint_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkPrinterCloudprint), 0, /* n_preallocs */ (GInstanceInitFunc) gtk_printer_cloudprint_init, }; printer_cloudprint_type = g_type_module_register_type (module, GTK_TYPE_PRINTER, "GtkPrinterCloudprint", &printer_cloudprint_info, 0); } /* * GtkPrinterCloudprint */ GType gtk_printer_cloudprint_get_type (void) { return printer_cloudprint_type; } /** * gtk_printer_cloudprint_new: * * Creates a new #GtkPrinterCloudprint object. #GtkPrinterCloudprint * implements the #GtkPrinter interface and stores a reference to the * #GtkCloudprintAccount object and the printer-id to use * * Returns: the new #GtkPrinterCloudprint object **/ GtkPrinterCloudprint * gtk_printer_cloudprint_new (const char *name, gboolean is_virtual, GtkPrintBackend *backend, GtkCloudprintAccount *account, const gchar *id) { return g_object_new (GTK_TYPE_PRINTER_CLOUDPRINT, "name", name, "backend", backend, "is-virtual", is_virtual, "accepts-pdf", TRUE, "cloudprint-account", account, "printer-id", id, NULL); } static void gtk_printer_cloudprint_class_init (GtkPrinterCloudprintClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gtk_printer_cloudprint_parent_class = g_type_class_peek_parent (klass); gobject_class->finalize = gtk_printer_cloudprint_finalize; gobject_class->set_property = gtk_printer_cloudprint_set_property; gobject_class->get_property = gtk_printer_cloudprint_get_property; g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_CLOUDPRINT_ACCOUNT, g_param_spec_object ("cloudprint-account", P_("Cloud Print account"), P_("GtkCloudprintAccount instance"), GTK_TYPE_CLOUDPRINT_ACCOUNT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PRINTER_ID, g_param_spec_string ("printer-id", P_("Printer ID"), P_("Cloud Print printer ID"), "", G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY)); } static void gtk_printer_cloudprint_init (GtkPrinterCloudprint *printer) { printer->account = NULL; printer->id = NULL; GTK_NOTE (PRINTING, g_print ("Cloud Print Backend: +GtkPrinterCloudprint(%p)\n", printer)); } static void gtk_printer_cloudprint_finalize (GObject *object) { GtkPrinterCloudprint *printer; printer = GTK_PRINTER_CLOUDPRINT (object); GTK_NOTE (PRINTING, g_print ("Cloud Print Backend: -GtkPrinterCloudprint(%p)\n", printer)); if (printer->account != NULL) g_object_unref (printer->account); g_free (printer->id); G_OBJECT_CLASS (gtk_printer_cloudprint_parent_class)->finalize (object); } static void gtk_printer_cloudprint_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GtkPrinterCloudprint *printer = GTK_PRINTER_CLOUDPRINT (object); switch (prop_id) { case PROP_CLOUDPRINT_ACCOUNT: printer->account = g_value_dup_object (value); break; case PROP_PRINTER_ID: printer->id = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void gtk_printer_cloudprint_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GtkPrinterCloudprint *printer = GTK_PRINTER_CLOUDPRINT (object); switch (prop_id) { case PROP_CLOUDPRINT_ACCOUNT: g_value_set_object (value, printer->account); break; case PROP_PRINTER_ID: g_value_set_string (value, printer->id); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }