Blame gtk/gtkprintbackend.c

Packit Service fb6fa5
/* GTK - The GIMP Toolkit
Packit Service fb6fa5
 * gtkprintbackend.h: Abstract printer backend interfaces
Packit Service fb6fa5
 * Copyright (C) 2003, Red Hat, Inc.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is free software; you can redistribute it and/or
Packit Service fb6fa5
 * modify it under the terms of the GNU Lesser General Public
Packit Service fb6fa5
 * License as published by the Free Software Foundation; either
Packit Service fb6fa5
 * version 2 of the License, or (at your option) any later version.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is distributed in the hope that it will be useful,
Packit Service fb6fa5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fb6fa5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service fb6fa5
 * Lesser General Public License for more details.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * You should have received a copy of the GNU Lesser General Public
Packit Service fb6fa5
 * License along with this library; if not, write to the
Packit Service fb6fa5
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit Service fb6fa5
 * Boston, MA 02111-1307, USA.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
#include "config.h"
Packit Service fb6fa5
#include <string.h>
Packit Service fb6fa5
Packit Service fb6fa5
#include <gmodule.h>
Packit Service fb6fa5
Packit Service fb6fa5
#include "gtkintl.h"
Packit Service fb6fa5
#include "gtkmodules.h"
Packit Service fb6fa5
#include "gtkmarshalers.h"
Packit Service fb6fa5
#include "gtkprivate.h"
Packit Service fb6fa5
#include "gtkprintbackend.h"
Packit Service fb6fa5
#include "gtkalias.h"
Packit Service fb6fa5
Packit Service fb6fa5
#define GTK_PRINT_BACKEND_GET_PRIVATE(o)  \
Packit Service fb6fa5
   (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_PRINT_BACKEND, GtkPrintBackendPrivate))
Packit Service fb6fa5
Packit Service fb6fa5
static void gtk_print_backend_dispose      (GObject      *object);
Packit Service fb6fa5
static void gtk_print_backend_set_property (GObject      *object,
Packit Service fb6fa5
                                            guint         prop_id,
Packit Service fb6fa5
                                            const GValue *value,
Packit Service fb6fa5
                                            GParamSpec   *pspec);
Packit Service fb6fa5
static void gtk_print_backend_get_property (GObject      *object,
Packit Service fb6fa5
                                            guint         prop_id,
Packit Service fb6fa5
                                            GValue       *value,
Packit Service fb6fa5
                                            GParamSpec   *pspec);
Packit Service fb6fa5
Packit Service fb6fa5
struct _GtkPrintBackendPrivate
Packit Service fb6fa5
{
Packit Service fb6fa5
  GHashTable *printers;
Packit Service fb6fa5
  guint printer_list_requested : 1;
Packit Service fb6fa5
  guint printer_list_done : 1;
Packit Service fb6fa5
  GtkPrintBackendStatus status;
Packit Service fb6fa5
  char **auth_info_required;
Packit Service fb6fa5
  char **auth_info;
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
enum {
Packit Service fb6fa5
  PRINTER_LIST_CHANGED,
Packit Service fb6fa5
  PRINTER_LIST_DONE,
Packit Service fb6fa5
  PRINTER_ADDED,
Packit Service fb6fa5
  PRINTER_REMOVED,
Packit Service fb6fa5
  PRINTER_STATUS_CHANGED,
Packit Service fb6fa5
  REQUEST_PASSWORD,
Packit Service fb6fa5
  LAST_SIGNAL
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
static guint signals[LAST_SIGNAL] = { 0 };
Packit Service fb6fa5
Packit Service fb6fa5
enum 
Packit Service fb6fa5
{ 
Packit Service fb6fa5
  PROP_ZERO,
Packit Service fb6fa5
  PROP_STATUS
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
static GObjectClass *backend_parent_class;
Packit Service fb6fa5
Packit Service fb6fa5
GQuark
Packit Service fb6fa5
gtk_print_backend_error_quark (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  static GQuark quark = 0;
Packit Service fb6fa5
  if (quark == 0)
Packit Service fb6fa5
    quark = g_quark_from_static_string ("gtk-print-backend-error-quark");
Packit Service fb6fa5
  return quark;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/*****************************************
Packit Service fb6fa5
 *     GtkPrintBackendModule modules     *
Packit Service fb6fa5
 *****************************************/
Packit Service fb6fa5
Packit Service fb6fa5
typedef struct _GtkPrintBackendModule GtkPrintBackendModule;
Packit Service fb6fa5
typedef struct _GtkPrintBackendModuleClass GtkPrintBackendModuleClass;
Packit Service fb6fa5
Packit Service fb6fa5
struct _GtkPrintBackendModule
Packit Service fb6fa5
{
Packit Service fb6fa5
  GTypeModule parent_instance;
Packit Service fb6fa5
  
Packit Service fb6fa5
  GModule *library;
Packit Service fb6fa5
Packit Service fb6fa5
  void             (*init)     (GTypeModule    *module);
Packit Service fb6fa5
  void             (*exit)     (void);
Packit Service fb6fa5
  GtkPrintBackend* (*create)   (void);
Packit Service fb6fa5
Packit Service fb6fa5
  gchar *path;
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
struct _GtkPrintBackendModuleClass
Packit Service fb6fa5
{
Packit Service fb6fa5
  GTypeModuleClass parent_class;
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
G_DEFINE_TYPE (GtkPrintBackendModule, _gtk_print_backend_module, G_TYPE_TYPE_MODULE)
Packit Service fb6fa5
#define GTK_TYPE_PRINT_BACKEND_MODULE      (_gtk_print_backend_module_get_type ())
Packit Service fb6fa5
#define GTK_PRINT_BACKEND_MODULE(module)   (G_TYPE_CHECK_INSTANCE_CAST ((module), GTK_TYPE_PRINT_BACKEND_MODULE, GtkPrintBackendModule))
Packit Service fb6fa5
Packit Service fb6fa5
static GSList *loaded_backends;
Packit Service fb6fa5
Packit Service fb6fa5
static gboolean
Packit Service fb6fa5
gtk_print_backend_module_load (GTypeModule *module)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackendModule *pb_module = GTK_PRINT_BACKEND_MODULE (module); 
Packit Service fb6fa5
  gpointer initp, exitp, createp;
Packit Service fb6fa5
 
Packit Service fb6fa5
  pb_module->library = g_module_open (pb_module->path, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
Packit Service fb6fa5
  if (!pb_module->library)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_warning ("%s", g_module_error());
Packit Service fb6fa5
      return FALSE;
Packit Service fb6fa5
    }
Packit Service fb6fa5
  
Packit Service fb6fa5
  /* extract symbols from the lib */
Packit Service fb6fa5
  if (!g_module_symbol (pb_module->library, "pb_module_init",
Packit Service fb6fa5
			&initp) ||
Packit Service fb6fa5
      !g_module_symbol (pb_module->library, "pb_module_exit", 
Packit Service fb6fa5
			&exitp) ||
Packit Service fb6fa5
      !g_module_symbol (pb_module->library, "pb_module_create", 
Packit Service fb6fa5
			&createp))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_warning ("%s", g_module_error());
Packit Service fb6fa5
      g_module_close (pb_module->library);
Packit Service fb6fa5
      
Packit Service fb6fa5
      return FALSE;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  pb_module->init = initp;
Packit Service fb6fa5
  pb_module->exit = exitp;
Packit Service fb6fa5
  pb_module->create = createp;
Packit Service fb6fa5
Packit Service fb6fa5
  /* call the printbackend's init function to let it */
Packit Service fb6fa5
  /* setup anything it needs to set up. */
Packit Service fb6fa5
  pb_module->init (module);
Packit Service fb6fa5
Packit Service fb6fa5
  return TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_print_backend_module_unload (GTypeModule *module)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackendModule *pb_module = GTK_PRINT_BACKEND_MODULE (module);
Packit Service fb6fa5
  
Packit Service fb6fa5
  pb_module->exit();
Packit Service fb6fa5
Packit Service fb6fa5
  g_module_close (pb_module->library);
Packit Service fb6fa5
  pb_module->library = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
  pb_module->init = NULL;
Packit Service fb6fa5
  pb_module->exit = NULL;
Packit Service fb6fa5
  pb_module->create = NULL;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/* This only will ever be called if an error occurs during
Packit Service fb6fa5
 * initialization
Packit Service fb6fa5
 */
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_print_backend_module_finalize (GObject *object)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackendModule *module = GTK_PRINT_BACKEND_MODULE (object);
Packit Service fb6fa5
Packit Service fb6fa5
  g_free (module->path);
Packit Service fb6fa5
Packit Service fb6fa5
  G_OBJECT_CLASS (_gtk_print_backend_module_parent_class)->finalize (object);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
_gtk_print_backend_module_class_init (GtkPrintBackendModuleClass *class)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GTypeModuleClass *module_class = G_TYPE_MODULE_CLASS (class);
Packit Service fb6fa5
  GObjectClass *gobject_class = G_OBJECT_CLASS (class);
Packit Service fb6fa5
Packit Service fb6fa5
  module_class->load = gtk_print_backend_module_load;
Packit Service fb6fa5
  module_class->unload = gtk_print_backend_module_unload;
Packit Service fb6fa5
Packit Service fb6fa5
  gobject_class->finalize = gtk_print_backend_module_finalize;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void 
Packit Service fb6fa5
gtk_print_backend_set_property (GObject      *object,
Packit Service fb6fa5
                                guint         prop_id,
Packit Service fb6fa5
                                const GValue *value,
Packit Service fb6fa5
                                GParamSpec   *pspec)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackend *backend = GTK_PRINT_BACKEND (object);
Packit Service fb6fa5
  GtkPrintBackendPrivate *priv;
Packit Service fb6fa5
Packit Service fb6fa5
  priv = backend->priv = GTK_PRINT_BACKEND_GET_PRIVATE (backend); 
Packit Service fb6fa5
Packit Service fb6fa5
  switch (prop_id)
Packit Service fb6fa5
    {
Packit Service fb6fa5
    case PROP_STATUS:
Packit Service fb6fa5
      priv->status = g_value_get_int (value);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    default:
Packit Service fb6fa5
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void 
Packit Service fb6fa5
gtk_print_backend_get_property (GObject    *object,
Packit Service fb6fa5
                                guint       prop_id,
Packit Service fb6fa5
                                GValue     *value,
Packit Service fb6fa5
                                GParamSpec *pspec)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackend *backend = GTK_PRINT_BACKEND (object);
Packit Service fb6fa5
  GtkPrintBackendPrivate *priv;
Packit Service fb6fa5
Packit Service fb6fa5
  priv = backend->priv = GTK_PRINT_BACKEND_GET_PRIVATE (backend); 
Packit Service fb6fa5
Packit Service fb6fa5
  switch (prop_id)
Packit Service fb6fa5
    {
Packit Service fb6fa5
    case PROP_STATUS:
Packit Service fb6fa5
      g_value_set_int (value, priv->status);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    default:
Packit Service fb6fa5
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
_gtk_print_backend_module_init (GtkPrintBackendModule *pb_module)
Packit Service fb6fa5
{
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GtkPrintBackend *
Packit Service fb6fa5
_gtk_print_backend_module_create (GtkPrintBackendModule *pb_module)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackend *pb;
Packit Service fb6fa5
  
Packit Service fb6fa5
  if (g_type_module_use (G_TYPE_MODULE (pb_module)))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      pb = pb_module->create ();
Packit Service fb6fa5
      g_type_module_unuse (G_TYPE_MODULE (pb_module));
Packit Service fb6fa5
      return pb;
Packit Service fb6fa5
    }
Packit Service fb6fa5
  return NULL;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GtkPrintBackend *
Packit Service fb6fa5
_gtk_print_backend_create (const gchar *backend_name)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GSList *l;
Packit Service fb6fa5
  gchar *module_path;
Packit Service fb6fa5
  gchar *full_name;
Packit Service fb6fa5
  GtkPrintBackendModule *pb_module;
Packit Service fb6fa5
  GtkPrintBackend *pb;
Packit Service fb6fa5
Packit Service fb6fa5
  for (l = loaded_backends; l != NULL; l = l->next)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      pb_module = l->data;
Packit Service fb6fa5
      
Packit Service fb6fa5
      if (strcmp (G_TYPE_MODULE (pb_module)->name, backend_name) == 0)
Packit Service fb6fa5
	return _gtk_print_backend_module_create (pb_module);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  pb = NULL;
Packit Service fb6fa5
  if (g_module_supported ())
Packit Service fb6fa5
    {
Packit Service fb6fa5
      full_name = g_strconcat ("printbackend-", backend_name, NULL);
Packit Service fb6fa5
      module_path = _gtk_find_module (full_name, "printbackends");
Packit Service fb6fa5
      g_free (full_name);
Packit Service fb6fa5
Packit Service fb6fa5
      if (module_path)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  pb_module = g_object_new (GTK_TYPE_PRINT_BACKEND_MODULE, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
	  g_type_module_set_name (G_TYPE_MODULE (pb_module), backend_name);
Packit Service fb6fa5
	  pb_module->path = g_strdup (module_path);
Packit Service fb6fa5
Packit Service fb6fa5
	  loaded_backends = g_slist_prepend (loaded_backends,
Packit Service fb6fa5
		   		             pb_module);
Packit Service fb6fa5
Packit Service fb6fa5
	  pb = _gtk_print_backend_module_create (pb_module);
Packit Service fb6fa5
Packit Service fb6fa5
	  /* Increase use-count so that we don't unload print backends.
Packit Service fb6fa5
	   * There is a problem with module unloading in the cups module,
Packit Service fb6fa5
	   * see cups_dispatch_watch_finalize for details. 
Packit Service fb6fa5
	   */
Packit Service fb6fa5
	  g_type_module_use (G_TYPE_MODULE (pb_module));
Packit Service fb6fa5
	}
Packit Service fb6fa5
      
Packit Service fb6fa5
      g_free (module_path);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  return pb;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_printer_backend_load_modules:
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Return value: (element-type GtkPrintBackend) (transfer container):
Packit Service fb6fa5
 */
Packit Service fb6fa5
GList *
Packit Service fb6fa5
gtk_print_backend_load_modules (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GList *result;
Packit Service fb6fa5
  GtkPrintBackend *backend;
Packit Service fb6fa5
  gchar *setting;
Packit Service fb6fa5
  gchar **backends;
Packit Service fb6fa5
  gint i;
Packit Service fb6fa5
  GtkSettings *settings;
Packit Service fb6fa5
Packit Service fb6fa5
  result = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
  settings = gtk_settings_get_default ();
Packit Service fb6fa5
  if (settings)
Packit Service fb6fa5
    g_object_get (settings, "gtk-print-backends", &setting, NULL);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    setting = g_strdup (GTK_PRINT_BACKENDS);
Packit Service fb6fa5
Packit Service fb6fa5
  backends = g_strsplit (setting, ",", -1);
Packit Service fb6fa5
Packit Service fb6fa5
  for (i = 0; backends[i]; i++)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_strchug (backends[i]);
Packit Service fb6fa5
      g_strchomp (backends[i]);
Packit Service fb6fa5
      backend = _gtk_print_backend_create (backends[i]);
Packit Service fb6fa5
      
Packit Service fb6fa5
      if (backend)
Packit Service fb6fa5
        result = g_list_append (result, backend);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  g_strfreev (backends);
Packit Service fb6fa5
  g_free (setting);
Packit Service fb6fa5
Packit Service fb6fa5
  return result;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/*****************************************
Packit Service fb6fa5
 *             GtkPrintBackend           *
Packit Service fb6fa5
 *****************************************/
Packit Service fb6fa5
Packit Service fb6fa5
G_DEFINE_TYPE (GtkPrintBackend, gtk_print_backend, G_TYPE_OBJECT)
Packit Service fb6fa5
Packit Service fb6fa5
static void                 fallback_printer_request_details       (GtkPrinter          *printer);
Packit Service fb6fa5
static gboolean             fallback_printer_mark_conflicts        (GtkPrinter          *printer,
Packit Service fb6fa5
								    GtkPrinterOptionSet *options);
Packit Service fb6fa5
static gboolean             fallback_printer_get_hard_margins      (GtkPrinter          *printer,
Packit Service fb6fa5
                                                                    gdouble             *top,
Packit Service fb6fa5
                                                                    gdouble             *bottom,
Packit Service fb6fa5
                                                                    gdouble             *left,
Packit Service fb6fa5
                                                                    gdouble             *right);
Packit Service fb6fa5
static GList *              fallback_printer_list_papers           (GtkPrinter          *printer);
Packit Service fb6fa5
static GtkPageSetup *       fallback_printer_get_default_page_size (GtkPrinter          *printer);
Packit Service fb6fa5
static GtkPrintCapabilities fallback_printer_get_capabilities      (GtkPrinter          *printer);
Packit Service fb6fa5
static void                 request_password                       (GtkPrintBackend     *backend,
Packit Service fb6fa5
                                                                    gpointer             auth_info_required,
Packit Service fb6fa5
                                                                    gpointer             auth_info_default,
Packit Service fb6fa5
                                                                    gpointer             auth_info_display,
Packit Service fb6fa5
                                                                    gpointer             auth_info_visible,
Packit Service fb6fa5
                                                                    const gchar         *prompt);
Packit Service fb6fa5
  
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_print_backend_class_init (GtkPrintBackendClass *class)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GObjectClass *object_class;
Packit Service fb6fa5
  object_class = (GObjectClass *) class;
Packit Service fb6fa5
Packit Service fb6fa5
  backend_parent_class = g_type_class_peek_parent (class);
Packit Service fb6fa5
  
Packit Service fb6fa5
  object_class->dispose = gtk_print_backend_dispose;
Packit Service fb6fa5
  object_class->set_property = gtk_print_backend_set_property;
Packit Service fb6fa5
  object_class->get_property = gtk_print_backend_get_property;
Packit Service fb6fa5
Packit Service fb6fa5
  class->printer_request_details = fallback_printer_request_details;
Packit Service fb6fa5
  class->printer_mark_conflicts = fallback_printer_mark_conflicts;
Packit Service fb6fa5
  class->printer_get_hard_margins = fallback_printer_get_hard_margins;
Packit Service fb6fa5
  class->printer_list_papers = fallback_printer_list_papers;
Packit Service fb6fa5
  class->printer_get_default_page_size = fallback_printer_get_default_page_size;
Packit Service fb6fa5
  class->printer_get_capabilities = fallback_printer_get_capabilities;
Packit Service fb6fa5
  class->request_password = request_password;
Packit Service fb6fa5
  
Packit Service fb6fa5
  g_object_class_install_property (object_class, 
Packit Service fb6fa5
                                   PROP_STATUS,
Packit Service fb6fa5
                                   g_param_spec_int ("status",
Packit Service fb6fa5
                                                     "Status",
Packit Service fb6fa5
                                                     "The status of the print backend",
Packit Service fb6fa5
                                                     GTK_PRINT_BACKEND_STATUS_UNKNOWN,
Packit Service fb6fa5
                                                     GTK_PRINT_BACKEND_STATUS_UNAVAILABLE,
Packit Service fb6fa5
                                                     GTK_PRINT_BACKEND_STATUS_UNKNOWN,
Packit Service fb6fa5
                                                     GTK_PARAM_READWRITE)); 
Packit Service fb6fa5
Packit Service fb6fa5
  g_type_class_add_private (class, sizeof (GtkPrintBackendPrivate));
Packit Service fb6fa5
  
Packit Service fb6fa5
  signals[PRINTER_LIST_CHANGED] =
Packit Service fb6fa5
    g_signal_new (I_("printer-list-changed"),
Packit Service fb6fa5
		  G_TYPE_FROM_CLASS (class),
Packit Service fb6fa5
		  G_SIGNAL_RUN_LAST,
Packit Service fb6fa5
		  G_STRUCT_OFFSET (GtkPrintBackendClass, printer_list_changed),
Packit Service fb6fa5
		  NULL, NULL,
Packit Service fb6fa5
		  g_cclosure_marshal_VOID__VOID,
Packit Service fb6fa5
		  G_TYPE_NONE, 0);
Packit Service fb6fa5
  signals[PRINTER_LIST_DONE] =
Packit Service fb6fa5
    g_signal_new (I_("printer-list-done"),
Packit Service fb6fa5
		    G_TYPE_FROM_CLASS (class),
Packit Service fb6fa5
		    G_SIGNAL_RUN_LAST,
Packit Service fb6fa5
		    G_STRUCT_OFFSET (GtkPrintBackendClass, printer_list_done),
Packit Service fb6fa5
		    NULL, NULL,
Packit Service fb6fa5
		    g_cclosure_marshal_VOID__VOID,
Packit Service fb6fa5
		    G_TYPE_NONE, 0);
Packit Service fb6fa5
  signals[PRINTER_ADDED] =
Packit Service fb6fa5
    g_signal_new (I_("printer-added"),
Packit Service fb6fa5
		  G_TYPE_FROM_CLASS (class),
Packit Service fb6fa5
		  G_SIGNAL_RUN_LAST,
Packit Service fb6fa5
		  G_STRUCT_OFFSET (GtkPrintBackendClass, printer_added),
Packit Service fb6fa5
		  NULL, NULL,
Packit Service fb6fa5
		  g_cclosure_marshal_VOID__OBJECT,
Packit Service fb6fa5
		  G_TYPE_NONE, 1, GTK_TYPE_PRINTER);
Packit Service fb6fa5
  signals[PRINTER_REMOVED] =
Packit Service fb6fa5
    g_signal_new (I_("printer-removed"),
Packit Service fb6fa5
		  G_TYPE_FROM_CLASS (class),
Packit Service fb6fa5
		  G_SIGNAL_RUN_LAST,
Packit Service fb6fa5
		  G_STRUCT_OFFSET (GtkPrintBackendClass, printer_removed),
Packit Service fb6fa5
		  NULL, NULL,
Packit Service fb6fa5
		  g_cclosure_marshal_VOID__OBJECT,
Packit Service fb6fa5
		  G_TYPE_NONE, 1, GTK_TYPE_PRINTER);
Packit Service fb6fa5
  signals[PRINTER_STATUS_CHANGED] =
Packit Service fb6fa5
    g_signal_new (I_("printer-status-changed"),
Packit Service fb6fa5
		  G_TYPE_FROM_CLASS (class),
Packit Service fb6fa5
		  G_SIGNAL_RUN_LAST,
Packit Service fb6fa5
		  G_STRUCT_OFFSET (GtkPrintBackendClass, printer_status_changed),
Packit Service fb6fa5
		  NULL, NULL,
Packit Service fb6fa5
		  g_cclosure_marshal_VOID__OBJECT,
Packit Service fb6fa5
		  G_TYPE_NONE, 1, GTK_TYPE_PRINTER);
Packit Service fb6fa5
  signals[REQUEST_PASSWORD] =
Packit Service fb6fa5
    g_signal_new (I_("request-password"),
Packit Service fb6fa5
		  G_TYPE_FROM_CLASS (class),
Packit Service fb6fa5
		  G_SIGNAL_RUN_LAST,
Packit Service fb6fa5
		  G_STRUCT_OFFSET (GtkPrintBackendClass, request_password),
Packit Service fb6fa5
		  NULL, NULL,
Packit Service fb6fa5
		  _gtk_marshal_VOID__POINTER_POINTER_POINTER_POINTER_STRING,
Packit Service fb6fa5
		  G_TYPE_NONE, 5, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_STRING);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_print_backend_init (GtkPrintBackend *backend)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackendPrivate *priv;
Packit Service fb6fa5
Packit Service fb6fa5
  priv = backend->priv = GTK_PRINT_BACKEND_GET_PRIVATE (backend); 
Packit Service fb6fa5
Packit Service fb6fa5
  priv->printers = g_hash_table_new_full (g_str_hash, g_str_equal, 
Packit Service fb6fa5
					  (GDestroyNotify) g_free,
Packit Service fb6fa5
					  (GDestroyNotify) g_object_unref);
Packit Service fb6fa5
  priv->auth_info_required = NULL;
Packit Service fb6fa5
  priv->auth_info = NULL;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_print_backend_dispose (GObject *object)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackend *backend;
Packit Service fb6fa5
  GtkPrintBackendPrivate *priv;
Packit Service fb6fa5
Packit Service fb6fa5
  backend = GTK_PRINT_BACKEND (object);
Packit Service fb6fa5
  priv = backend->priv;
Packit Service fb6fa5
Packit Service fb6fa5
  /* We unref the printers in dispose, not in finalize so that
Packit Service fb6fa5
   * we can break refcount cycles with gtk_print_backend_destroy 
Packit Service fb6fa5
   */
Packit Service fb6fa5
  if (priv->printers)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_hash_table_destroy (priv->printers);
Packit Service fb6fa5
      priv->printers = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  backend_parent_class->dispose (object);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
fallback_printer_request_details (GtkPrinter *printer)
Packit Service fb6fa5
{
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gboolean
Packit Service fb6fa5
fallback_printer_mark_conflicts (GtkPrinter          *printer,
Packit Service fb6fa5
				 GtkPrinterOptionSet *options)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return FALSE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gboolean
Packit Service fb6fa5
fallback_printer_get_hard_margins (GtkPrinter *printer,
Packit Service fb6fa5
				   gdouble    *top,
Packit Service fb6fa5
				   gdouble    *bottom,
Packit Service fb6fa5
				   gdouble    *left,
Packit Service fb6fa5
				   gdouble    *right)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return FALSE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GList *
Packit Service fb6fa5
fallback_printer_list_papers (GtkPrinter *printer)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return NULL;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GtkPageSetup *
Packit Service fb6fa5
fallback_printer_get_default_page_size (GtkPrinter *printer)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return NULL;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GtkPrintCapabilities
Packit Service fb6fa5
fallback_printer_get_capabilities (GtkPrinter *printer)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return 0;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
printer_hash_to_sorted_active_list (const gchar  *key,
Packit Service fb6fa5
                                    gpointer      value,
Packit Service fb6fa5
                                    GList       **out_list)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrinter *printer;
Packit Service fb6fa5
Packit Service fb6fa5
  printer = GTK_PRINTER (value);
Packit Service fb6fa5
Packit Service fb6fa5
  if (gtk_printer_get_name (printer) == NULL)
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!gtk_printer_is_active (printer))
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  *out_list = g_list_insert_sorted (*out_list, value, (GCompareFunc) gtk_printer_compare);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
gtk_print_backend_add_printer (GtkPrintBackend *backend,
Packit Service fb6fa5
			       GtkPrinter      *printer)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackendPrivate *priv;
Packit Service fb6fa5
  
Packit Service fb6fa5
  g_return_if_fail (GTK_IS_PRINT_BACKEND (backend));
Packit Service fb6fa5
Packit Service fb6fa5
  priv = backend->priv;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!priv->printers)
Packit Service fb6fa5
    return;
Packit Service fb6fa5
  
Packit Service fb6fa5
  g_hash_table_insert (priv->printers,
Packit Service fb6fa5
		       g_strdup (gtk_printer_get_name (printer)), 
Packit Service fb6fa5
		       g_object_ref (printer));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
gtk_print_backend_remove_printer (GtkPrintBackend *backend,
Packit Service fb6fa5
				  GtkPrinter      *printer)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackendPrivate *priv;
Packit Service fb6fa5
  
Packit Service fb6fa5
  g_return_if_fail (GTK_IS_PRINT_BACKEND (backend));
Packit Service fb6fa5
  priv = backend->priv;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!priv->printers)
Packit Service fb6fa5
    return;
Packit Service fb6fa5
  
Packit Service fb6fa5
  g_hash_table_remove (priv->printers,
Packit Service fb6fa5
		       gtk_printer_get_name (printer));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
gtk_print_backend_set_list_done (GtkPrintBackend *backend)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (!backend->priv->printer_list_done)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      backend->priv->printer_list_done = TRUE;
Packit Service fb6fa5
      g_signal_emit (backend, signals[PRINTER_LIST_DONE], 0);
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_backend_get_printer_list:
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Return value: (element-type GtkPrinter) (transfer container):
Packit Service fb6fa5
 */
Packit Service fb6fa5
GList *
Packit Service fb6fa5
gtk_print_backend_get_printer_list (GtkPrintBackend *backend)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackendPrivate *priv;
Packit Service fb6fa5
  GList *result;
Packit Service fb6fa5
  
Packit Service fb6fa5
  g_return_val_if_fail (GTK_IS_PRINT_BACKEND (backend), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  priv = backend->priv;
Packit Service fb6fa5
Packit Service fb6fa5
  result = NULL;
Packit Service fb6fa5
  if (priv->printers != NULL)
Packit Service fb6fa5
    g_hash_table_foreach (priv->printers,
Packit Service fb6fa5
                          (GHFunc) printer_hash_to_sorted_active_list,
Packit Service fb6fa5
                          &result);
Packit Service fb6fa5
Packit Service fb6fa5
  if (!priv->printer_list_requested && priv->printers != NULL)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (GTK_PRINT_BACKEND_GET_CLASS (backend)->request_printer_list)
Packit Service fb6fa5
	GTK_PRINT_BACKEND_GET_CLASS (backend)->request_printer_list (backend);
Packit Service fb6fa5
      priv->printer_list_requested = TRUE;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  return result;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gboolean
Packit Service fb6fa5
gtk_print_backend_printer_list_is_done (GtkPrintBackend *print_backend)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GTK_IS_PRINT_BACKEND (print_backend), TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
  return print_backend->priv->printer_list_done;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
GtkPrinter *
Packit Service fb6fa5
gtk_print_backend_find_printer (GtkPrintBackend *backend,
Packit Service fb6fa5
                                const gchar     *printer_name)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackendPrivate *priv;
Packit Service fb6fa5
  GtkPrinter *printer;
Packit Service fb6fa5
  
Packit Service fb6fa5
  g_return_val_if_fail (GTK_IS_PRINT_BACKEND (backend), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  priv = backend->priv;
Packit Service fb6fa5
Packit Service fb6fa5
  if (priv->printers)
Packit Service fb6fa5
    printer = g_hash_table_lookup (priv->printers, printer_name);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    printer = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
  return printer;  
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
gtk_print_backend_print_stream (GtkPrintBackend        *backend,
Packit Service fb6fa5
                                GtkPrintJob            *job,
Packit Service fb6fa5
                                GIOChannel             *data_io,
Packit Service fb6fa5
                                GtkPrintJobCompleteFunc callback,
Packit Service fb6fa5
                                gpointer                user_data,
Packit Service fb6fa5
				GDestroyNotify          dnotify)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GTK_IS_PRINT_BACKEND (backend));
Packit Service fb6fa5
Packit Service fb6fa5
  GTK_PRINT_BACKEND_GET_CLASS (backend)->print_stream (backend,
Packit Service fb6fa5
						       job,
Packit Service fb6fa5
						       data_io,
Packit Service fb6fa5
						       callback,
Packit Service fb6fa5
						       user_data,
Packit Service fb6fa5
						       dnotify);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void 
Packit Service fb6fa5
gtk_print_backend_set_password (GtkPrintBackend  *backend,
Packit Service fb6fa5
                                gchar           **auth_info_required,
Packit Service fb6fa5
                                gchar           **auth_info)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GTK_IS_PRINT_BACKEND (backend));
Packit Service fb6fa5
Packit Service fb6fa5
  if (GTK_PRINT_BACKEND_GET_CLASS (backend)->set_password)
Packit Service fb6fa5
    GTK_PRINT_BACKEND_GET_CLASS (backend)->set_password (backend, auth_info_required, auth_info);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
store_entry (GtkEntry  *entry,
Packit Service fb6fa5
             gpointer   user_data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gchar **data = (gchar **) user_data;
Packit Service fb6fa5
Packit Service fb6fa5
  if (*data != NULL)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      memset (*data, 0, strlen (*data));
Packit Service fb6fa5
      g_free (*data);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  *data = g_strdup (gtk_entry_get_text (entry));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
password_dialog_response (GtkWidget       *dialog,
Packit Service fb6fa5
                          gint             response_id,
Packit Service fb6fa5
                          GtkPrintBackend *backend)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackendPrivate *priv = backend->priv;
Packit Service fb6fa5
  gint i;
Packit Service fb6fa5
Packit Service fb6fa5
  if (response_id == GTK_RESPONSE_OK)
Packit Service fb6fa5
    gtk_print_backend_set_password (backend, priv->auth_info_required, priv->auth_info);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    gtk_print_backend_set_password (backend, priv->auth_info_required, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  for (i = 0; i < g_strv_length (priv->auth_info_required); i++)
Packit Service fb6fa5
    if (priv->auth_info[i] != NULL)
Packit Service fb6fa5
      {
Packit Service fb6fa5
        memset (priv->auth_info[i], 0, strlen (priv->auth_info[i]));
Packit Service fb6fa5
        g_free (priv->auth_info[i]);
Packit Service fb6fa5
        priv->auth_info[i] = NULL;
Packit Service fb6fa5
      }
Packit Service fb6fa5
  g_free (priv->auth_info);
Packit Service fb6fa5
  priv->auth_info = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
  g_strfreev (priv->auth_info_required);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_widget_destroy (dialog);
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_unref (backend);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
request_password (GtkPrintBackend  *backend,
Packit Service fb6fa5
                  gpointer          auth_info_required,
Packit Service fb6fa5
                  gpointer          auth_info_default,
Packit Service fb6fa5
                  gpointer          auth_info_display,
Packit Service fb6fa5
                  gpointer          auth_info_visible,
Packit Service fb6fa5
                  const gchar      *prompt)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintBackendPrivate *priv = backend->priv;
Packit Service fb6fa5
  GtkWidget *dialog, *box, *main_box, *label, *icon, *vbox, *entry;
Packit Service fb6fa5
  GtkWidget *focus = NULL;
Packit Service fb6fa5
  gchar     *markup;
Packit Service fb6fa5
  gint       length;
Packit Service fb6fa5
  gint       i;
Packit Service fb6fa5
  gchar    **ai_required = (gchar **) auth_info_required;
Packit Service fb6fa5
  gchar    **ai_default = (gchar **) auth_info_default;
Packit Service fb6fa5
  gchar    **ai_display = (gchar **) auth_info_display;
Packit Service fb6fa5
  gboolean  *ai_visible = (gboolean *) auth_info_visible;
Packit Service fb6fa5
Packit Service fb6fa5
  priv->auth_info_required = g_strdupv (ai_required);
Packit Service fb6fa5
  length = g_strv_length (ai_required);
Packit Service fb6fa5
  priv->auth_info = g_new0 (gchar *, length + 1);
Packit Service fb6fa5
Packit Service fb6fa5
  dialog = gtk_dialog_new_with_buttons ( _("Authentication"), NULL, GTK_DIALOG_MODAL, 
Packit Service fb6fa5
                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
Packit Service fb6fa5
                                         GTK_STOCK_OK, GTK_RESPONSE_OK,
Packit Service fb6fa5
                                         NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
Packit Service fb6fa5
  gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
  main_box = gtk_hbox_new (FALSE, 0);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Left */
Packit Service fb6fa5
  icon = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION, GTK_ICON_SIZE_DIALOG);
Packit Service fb6fa5
  gtk_misc_set_alignment (GTK_MISC (icon), 0.5, 0.0);
Packit Service fb6fa5
  gtk_misc_set_padding (GTK_MISC (icon), 6, 6);
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
  /* Right */
Packit Service fb6fa5
  vbox = gtk_vbox_new (FALSE, 0);
Packit Service fb6fa5
  gtk_widget_set_size_request (GTK_WIDGET (vbox), 320, -1);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Right - 1. */
Packit Service fb6fa5
  label = gtk_label_new (NULL);
Packit Service fb6fa5
  markup = g_markup_printf_escaped ("%s", prompt);
Packit Service fb6fa5
  gtk_label_set_markup (GTK_LABEL (label), markup);
Packit Service fb6fa5
  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
Packit Service fb6fa5
  gtk_widget_set_size_request (GTK_WIDGET (label), 320, -1);
Packit Service fb6fa5
  g_free (markup);
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
  /* Packing */
Packit Service fb6fa5
  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), main_box, TRUE, FALSE, 0);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_box_pack_start (GTK_BOX (main_box), icon, FALSE, FALSE, 6);
Packit Service fb6fa5
  gtk_box_pack_start (GTK_BOX (main_box), vbox, FALSE, FALSE, 6);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 6);
Packit Service fb6fa5
  
Packit Service fb6fa5
  /* Right - 2. */
Packit Service fb6fa5
  for (i = 0; i < length; i++)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      priv->auth_info[i] = g_strdup (ai_default[i]);
Packit Service fb6fa5
      if (ai_display[i] != NULL)
Packit Service fb6fa5
        {
Packit Service fb6fa5
          box = gtk_hbox_new (TRUE, 0);
Packit Service fb6fa5
Packit Service fb6fa5
          label = gtk_label_new (ai_display[i]);
Packit Service fb6fa5
          gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
Packit Service fb6fa5
Packit Service fb6fa5
          entry = gtk_entry_new ();
Packit Service fb6fa5
          focus = entry;
Packit Service fb6fa5
Packit Service fb6fa5
          if (ai_default[i] != NULL)
Packit Service fb6fa5
            gtk_entry_set_text (GTK_ENTRY (entry), ai_default[i]);
Packit Service fb6fa5
Packit Service fb6fa5
          gtk_entry_set_visibility (GTK_ENTRY (entry), ai_visible[i]);
Packit Service fb6fa5
          gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
          gtk_box_pack_start (GTK_BOX (vbox), box, FALSE, TRUE, 6);
Packit Service fb6fa5
Packit Service fb6fa5
          gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0);
Packit Service fb6fa5
          gtk_box_pack_start (GTK_BOX (box), entry, TRUE, TRUE, 0);
Packit Service fb6fa5
Packit Service fb6fa5
          g_signal_connect (entry, "changed",
Packit Service fb6fa5
                            G_CALLBACK (store_entry), &(priv->auth_info[i]));
Packit Service fb6fa5
        }
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (focus != NULL)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_widget_grab_focus (focus);
Packit Service fb6fa5
      focus = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_ref (backend);
Packit Service fb6fa5
  g_signal_connect (G_OBJECT (dialog), "response",
Packit Service fb6fa5
                    G_CALLBACK (password_dialog_response), backend);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_widget_show_all (dialog);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
gtk_print_backend_destroy (GtkPrintBackend *print_backend)
Packit Service fb6fa5
{
Packit Service fb6fa5
  /* The lifecycle of print backends and printers are tied, such that
Packit Service fb6fa5
   * the backend owns the printers, but the printers also ref the backend.
Packit Service fb6fa5
   * This is so that if the app has a reference to a printer its backend
Packit Service fb6fa5
   * will be around. However, this results in a cycle, which we break
Packit Service fb6fa5
   * with this call, which causes the print backend to release its printers.
Packit Service fb6fa5
   */
Packit Service fb6fa5
  g_object_run_dispose (G_OBJECT (print_backend));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
#define __GTK_PRINT_BACKEND_C__
Packit Service fb6fa5
#include "gtkaliasdef.c"