only connect to page layout changes for the lifetime of the dialog.
2008-02-04 Sven Neumann <sven@gimp.org> * plug-ins/print/print-page-layout.c: only connect to page layout changes for the lifetime of the dialog. * plug-ins/print/print-page-setup.[ch] * plug-ins/print/print.c: use a temporary procedure to notify the Print procedure about changes to the page setup. svn path=/trunk/; revision=24793
This commit is contained in:

committed by
Sven Neumann

parent
50ad5cfd32
commit
f17bfcef0d
@ -1,3 +1,12 @@
|
|||||||
|
2008-02-04 Sven Neumann <sven@gimp.org>
|
||||||
|
|
||||||
|
* plug-ins/print/print-page-layout.c: only connect to page layout
|
||||||
|
changes for the lifetime of the dialog.
|
||||||
|
|
||||||
|
* plug-ins/print/print-page-setup.[ch]
|
||||||
|
* plug-ins/print/print.c: use a temporary procedure to notify the
|
||||||
|
Print procedure about changes to the page setup.
|
||||||
|
|
||||||
2008-02-04 Michael Natterer <mitch@gimp.org>
|
2008-02-04 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
* app/base/gimphistogram.[ch]: add refcounting and replace free()
|
* app/base/gimphistogram.[ch]: add refcounting and replace free()
|
||||||
|
@ -198,9 +198,9 @@ print_page_layout_gui (PrintData *data)
|
|||||||
|
|
||||||
print_size_info_set_page_setup (&info);
|
print_size_info_set_page_setup (&info);
|
||||||
|
|
||||||
g_signal_connect (data->operation, "notify::default-page-setup",
|
g_signal_connect_object (data->operation, "notify::default-page-setup",
|
||||||
G_CALLBACK (print_page_setup_notify),
|
G_CALLBACK (print_page_setup_notify),
|
||||||
&info);
|
layout, 0);
|
||||||
|
|
||||||
return layout;
|
return layout;
|
||||||
}
|
}
|
||||||
|
@ -24,28 +24,26 @@
|
|||||||
#include "print-page-setup.h"
|
#include "print-page-setup.h"
|
||||||
|
|
||||||
|
|
||||||
static void print_page_setup_save (GtkPrintOperation *operation);
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
print_page_setup_dialog (GtkPrintOperation *operation)
|
print_page_setup_dialog (GtkPrintOperation *operation)
|
||||||
{
|
{
|
||||||
GtkPrintSettings *settings = gtk_print_settings_new ();
|
GtkPrintSettings *settings;
|
||||||
GtkPageSetup *setup;
|
GtkPageSetup *setup;
|
||||||
|
|
||||||
print_page_setup_load (operation);
|
g_return_if_fail (GTK_IS_PRINT_OPERATION (operation));
|
||||||
|
|
||||||
setup = gtk_print_operation_get_default_page_setup (operation);
|
setup = gtk_print_operation_get_default_page_setup (operation);
|
||||||
|
|
||||||
|
settings = gtk_print_settings_new ();
|
||||||
setup = gtk_print_run_page_setup_dialog (NULL, setup, settings);
|
setup = gtk_print_run_page_setup_dialog (NULL, setup, settings);
|
||||||
|
g_object_unref (settings);
|
||||||
|
|
||||||
gtk_print_operation_set_default_page_setup (operation, setup);
|
gtk_print_operation_set_default_page_setup (operation, setup);
|
||||||
|
|
||||||
print_page_setup_save (operation);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
print_page_setup_load (GtkPrintOperation *operation)
|
print_page_setup_load (GtkPrintOperation *operation,
|
||||||
|
gint32 image_ID)
|
||||||
{
|
{
|
||||||
GtkPageSetup *setup;
|
GtkPageSetup *setup;
|
||||||
gchar *filename;
|
gchar *filename;
|
||||||
@ -67,7 +65,7 @@ print_page_setup_load (GtkPrintOperation *operation)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
print_page_setup_save (GtkPrintOperation *operation)
|
print_page_setup_save (GtkPrintOperation *operation)
|
||||||
{
|
{
|
||||||
GtkPageSetup *setup;
|
GtkPageSetup *setup;
|
||||||
|
@ -18,5 +18,8 @@
|
|||||||
|
|
||||||
|
|
||||||
void print_page_setup_dialog (GtkPrintOperation *operation);
|
void print_page_setup_dialog (GtkPrintOperation *operation);
|
||||||
gboolean print_page_setup_load (GtkPrintOperation *operation);
|
gboolean print_page_setup_load (GtkPrintOperation *operation,
|
||||||
|
gint32 image_ID);
|
||||||
|
void print_page_setup_save (GtkPrintOperation *operation);
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,6 +68,14 @@ static void draw_page (GtkPrintOperation *print,
|
|||||||
static GtkWidget * create_custom_widget (GtkPrintOperation *operation,
|
static GtkWidget * create_custom_widget (GtkPrintOperation *operation,
|
||||||
PrintData *data);
|
PrintData *data);
|
||||||
|
|
||||||
|
static gchar * print_temp_proc_name (gint32 image_ID);
|
||||||
|
static gchar * print_temp_proc_install (gint32 image_ID);
|
||||||
|
|
||||||
|
|
||||||
|
/* Keep a reference to the current GtkPrintOperation
|
||||||
|
* for access by the temporary procedure.
|
||||||
|
*/
|
||||||
|
static GtkPrintOperation *print_operation = NULL;
|
||||||
|
|
||||||
|
|
||||||
const GimpPlugInInfo PLUG_IN_INFO =
|
const GimpPlugInInfo PLUG_IN_INFO =
|
||||||
@ -178,6 +186,7 @@ print_image (gint32 image_ID,
|
|||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
gint32 orig_image_ID = image_ID;
|
gint32 orig_image_ID = image_ID;
|
||||||
gint32 drawable_ID = gimp_image_get_active_drawable (image_ID);
|
gint32 drawable_ID = gimp_image_get_active_drawable (image_ID);
|
||||||
|
gchar *temp_proc;
|
||||||
PrintData data;
|
PrintData data;
|
||||||
GimpExportReturn export;
|
GimpExportReturn export;
|
||||||
|
|
||||||
@ -193,7 +202,7 @@ print_image (gint32 image_ID,
|
|||||||
|
|
||||||
print_operation_set_name (operation, orig_image_ID);
|
print_operation_set_name (operation, orig_image_ID);
|
||||||
|
|
||||||
print_page_setup_load (operation);
|
print_page_setup_load (operation, orig_image_ID);
|
||||||
|
|
||||||
/* fill in the PrintData struct */
|
/* fill in the PrintData struct */
|
||||||
data.num_pages = 1;
|
data.num_pages = 1;
|
||||||
@ -224,6 +233,10 @@ print_image (gint32 image_ID,
|
|||||||
G_CALLBACK (end_print),
|
G_CALLBACK (end_print),
|
||||||
&image_ID);
|
&image_ID);
|
||||||
|
|
||||||
|
print_operation = operation;
|
||||||
|
temp_proc = print_temp_proc_install (orig_image_ID);
|
||||||
|
gimp_extension_enable ();
|
||||||
|
|
||||||
if (interactive)
|
if (interactive)
|
||||||
{
|
{
|
||||||
gimp_ui_init (PLUG_IN_BINARY, FALSE);
|
gimp_ui_init (PLUG_IN_BINARY, FALSE);
|
||||||
@ -249,6 +262,10 @@ print_image (gint32 image_ID,
|
|||||||
NULL, &error);
|
NULL, &error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gimp_uninstall_temp_proc (temp_proc);
|
||||||
|
g_free (temp_proc);
|
||||||
|
print_operation = NULL;
|
||||||
|
|
||||||
g_object_unref (operation);
|
g_object_unref (operation);
|
||||||
|
|
||||||
if (gimp_image_is_valid (image_ID))
|
if (gimp_image_is_valid (image_ID))
|
||||||
@ -267,14 +284,34 @@ static GimpPDBStatusType
|
|||||||
page_setup (gint32 image_ID)
|
page_setup (gint32 image_ID)
|
||||||
{
|
{
|
||||||
GtkPrintOperation *operation;
|
GtkPrintOperation *operation;
|
||||||
|
gchar *name;
|
||||||
|
|
||||||
gimp_ui_init (PLUG_IN_BINARY, FALSE);
|
gimp_ui_init (PLUG_IN_BINARY, FALSE);
|
||||||
|
|
||||||
operation = gtk_print_operation_new ();
|
operation = gtk_print_operation_new ();
|
||||||
|
|
||||||
|
print_page_setup_load (operation, image_ID);
|
||||||
print_page_setup_dialog (operation);
|
print_page_setup_dialog (operation);
|
||||||
|
print_page_setup_save (operation);
|
||||||
|
|
||||||
g_object_unref (operation);
|
g_object_unref (operation);
|
||||||
|
|
||||||
/* FIXME: notify the print procedure about the changed page setup */
|
/* now notify a running print procedure about this change */
|
||||||
|
name = print_temp_proc_name (image_ID);
|
||||||
|
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
GimpParam *return_vals;
|
||||||
|
gint n_return_vals;
|
||||||
|
|
||||||
|
return_vals = gimp_run_procedure (name,
|
||||||
|
&n_return_vals,
|
||||||
|
GIMP_PDB_IMAGE, image_ID,
|
||||||
|
GIMP_PDB_END);
|
||||||
|
gimp_destroy_params (return_vals, n_return_vals);
|
||||||
|
|
||||||
|
g_free (name);
|
||||||
|
}
|
||||||
|
|
||||||
return GIMP_PDB_SUCCESS;
|
return GIMP_PDB_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -362,3 +399,54 @@ create_custom_widget (GtkPrintOperation *operation,
|
|||||||
{
|
{
|
||||||
return print_page_layout_gui (data);
|
return print_page_layout_gui (data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_temp_proc_run (const gchar *name,
|
||||||
|
gint nparams,
|
||||||
|
const GimpParam *param,
|
||||||
|
gint *nreturn_vals,
|
||||||
|
GimpParam **return_vals)
|
||||||
|
{
|
||||||
|
static GimpParam values[1];
|
||||||
|
|
||||||
|
values[0].type = GIMP_PDB_STATUS;
|
||||||
|
values[0].data.d_status = GIMP_PDB_SUCCESS;
|
||||||
|
|
||||||
|
*nreturn_vals = 1;
|
||||||
|
*return_vals = values;
|
||||||
|
|
||||||
|
if (print_operation && nparams == 1)
|
||||||
|
print_page_setup_load (print_operation, param[0].data.d_int32);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gchar *
|
||||||
|
print_temp_proc_name (gint32 image_ID)
|
||||||
|
{
|
||||||
|
return g_strdup_printf (PRINT_PROC_NAME "-temp-%d", image_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gchar *
|
||||||
|
print_temp_proc_install (gint32 image_ID)
|
||||||
|
{
|
||||||
|
static const GimpParamDef args[] =
|
||||||
|
{
|
||||||
|
{ GIMP_PDB_IMAGE, "image", "Image to print" }
|
||||||
|
};
|
||||||
|
|
||||||
|
gchar *name = print_temp_proc_name (image_ID);
|
||||||
|
|
||||||
|
gimp_install_temp_proc (name,
|
||||||
|
"DON'T USE THIS ONE",
|
||||||
|
"Temporary procedure to notify the Print plug-in "
|
||||||
|
"about changes to the Page Setup.",
|
||||||
|
"Sven Neumann",
|
||||||
|
"Sven Neumann",
|
||||||
|
"2008",
|
||||||
|
NULL,
|
||||||
|
"",
|
||||||
|
GIMP_TEMPORARY,
|
||||||
|
G_N_ELEMENTS (args), 0, args, NULL,
|
||||||
|
print_temp_proc_run);
|
||||||
|
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user