mirror of https://github.com/GNOME/gimp.git
app, libgimp, pdb: add a parent_window parameter to gimp_*_popup() PDB calls.
Brush, font, gradient, palette and pattern choices are currently chosen through a dialog created by the core, which then returns the user choice to the calling plug-in. This has the unfortunate consequence of having a pile of likely at least 3 windows (main GIMP window by core process, plug-in window by plug-in process, then the choice popup by the core process) shared in 2 processes, which often end up under each other and that's messy. Even more as the choice popup is kinda expected to be like a sub-part of the plug-in dialog. So anyway, now the plug-in can send its window handle to the core so that the resource choice dialog ends up always above the plug-in dialog. Of course, it will always work only on platforms where we have working inter-process transient support.
This commit is contained in:
parent
d6a2deb305
commit
6aeb456e17
|
@ -404,6 +404,7 @@ gimp_pdb_dialog_new (Gimp *gimp,
|
|||
GimpContext *context,
|
||||
GimpProgress *progress,
|
||||
GimpContainer *container,
|
||||
GBytes *parent_handle,
|
||||
const gchar *title,
|
||||
const gchar *callback_name,
|
||||
const gchar *object_name,
|
||||
|
@ -425,7 +426,7 @@ gimp_pdb_dialog_new (Gimp *gimp,
|
|||
va_start (args, object_name);
|
||||
|
||||
retval = gimp->gui.pdb_dialog_new (gimp, context, progress,
|
||||
container, title,
|
||||
container, parent_handle, title,
|
||||
callback_name, object_name,
|
||||
args);
|
||||
|
||||
|
|
|
@ -74,6 +74,7 @@ struct _GimpGui
|
|||
GimpContext *context,
|
||||
GimpProgress *progress,
|
||||
GimpContainer *container,
|
||||
GBytes *parent_handle,
|
||||
const gchar *title,
|
||||
const gchar *callback_name,
|
||||
const gchar *object_name,
|
||||
|
@ -172,6 +173,7 @@ gboolean gimp_pdb_dialog_new (Gimp *gimp,
|
|||
GimpContext *context,
|
||||
GimpProgress *progress,
|
||||
GimpContainer *container,
|
||||
GBytes *parent_handle,
|
||||
const gchar *title,
|
||||
const gchar *callback_name,
|
||||
const gchar *object_name,
|
||||
|
|
|
@ -153,6 +153,7 @@ static gboolean gui_pdb_dialog_new (Gimp *gimp,
|
|||
GimpContext *context,
|
||||
GimpProgress *progress,
|
||||
GimpContainer *container,
|
||||
GBytes *parent_handle,
|
||||
const gchar *title,
|
||||
const gchar *callback_name,
|
||||
const gchar *object_name,
|
||||
|
@ -611,6 +612,7 @@ gui_pdb_dialog_new (Gimp *gimp,
|
|||
GimpContext *context,
|
||||
GimpProgress *progress,
|
||||
GimpContainer *container,
|
||||
GBytes *parent_handle,
|
||||
const gchar *title,
|
||||
const gchar *callback_name,
|
||||
const gchar *object_name,
|
||||
|
@ -706,17 +708,20 @@ gui_pdb_dialog_new (Gimp *gimp,
|
|||
gtk_widget_show (dialog);
|
||||
|
||||
/* workaround for bug #360106 */
|
||||
{
|
||||
GSource *source = g_timeout_source_new (100);
|
||||
GClosure *closure;
|
||||
{
|
||||
GSource *source = g_timeout_source_new (100);
|
||||
GClosure *closure;
|
||||
|
||||
closure = g_cclosure_new_object (G_CALLBACK (gui_pdb_dialog_present),
|
||||
G_OBJECT (dialog));
|
||||
closure = g_cclosure_new_object (G_CALLBACK (gui_pdb_dialog_present),
|
||||
G_OBJECT (dialog));
|
||||
|
||||
g_source_set_closure (source, closure);
|
||||
g_source_attach (source, NULL);
|
||||
g_source_unref (source);
|
||||
}
|
||||
g_source_set_closure (source, closure);
|
||||
g_source_attach (source, NULL);
|
||||
g_source_unref (source);
|
||||
}
|
||||
|
||||
if (parent_handle != NULL)
|
||||
gimp_window_set_transient_for_handle (GTK_WINDOW (dialog), parent_handle);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -50,10 +50,12 @@ brushes_popup_invoker (GimpProcedure *procedure,
|
|||
const gchar *brush_callback;
|
||||
const gchar *popup_title;
|
||||
const gchar *initial_brush_name;
|
||||
GBytes *parent_window;
|
||||
|
||||
brush_callback = g_value_get_string (gimp_value_array_index (args, 0));
|
||||
popup_title = g_value_get_string (gimp_value_array_index (args, 1));
|
||||
initial_brush_name = g_value_get_string (gimp_value_array_index (args, 2));
|
||||
parent_window = g_value_get_boxed (gimp_value_array_index (args, 3));
|
||||
|
||||
if (success)
|
||||
{
|
||||
|
@ -61,6 +63,7 @@ brushes_popup_invoker (GimpProcedure *procedure,
|
|||
! gimp_pdb_lookup_procedure (gimp->pdb, brush_callback) ||
|
||||
! gimp_pdb_dialog_new (gimp, context, progress,
|
||||
gimp_data_factory_get_container (gimp->brush_factory),
|
||||
parent_window,
|
||||
popup_title, brush_callback, initial_brush_name,
|
||||
NULL))
|
||||
success = FALSE;
|
||||
|
@ -165,6 +168,12 @@ register_brush_select_procs (GimpPDB *pdb)
|
|||
FALSE, TRUE, FALSE,
|
||||
NULL,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_procedure_add_argument (procedure,
|
||||
g_param_spec_boxed ("parent-window",
|
||||
"parent window",
|
||||
"An optional parent window handle for the popup to be set transient to",
|
||||
G_TYPE_BYTES,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_pdb_register_procedure (pdb, procedure);
|
||||
g_object_unref (procedure);
|
||||
|
||||
|
|
|
@ -50,10 +50,12 @@ fonts_popup_invoker (GimpProcedure *procedure,
|
|||
const gchar *font_callback;
|
||||
const gchar *popup_title;
|
||||
const gchar *initial_font_name;
|
||||
GBytes *parent_window;
|
||||
|
||||
font_callback = g_value_get_string (gimp_value_array_index (args, 0));
|
||||
popup_title = g_value_get_string (gimp_value_array_index (args, 1));
|
||||
initial_font_name = g_value_get_string (gimp_value_array_index (args, 2));
|
||||
parent_window = g_value_get_boxed (gimp_value_array_index (args, 3));
|
||||
|
||||
if (success)
|
||||
{
|
||||
|
@ -62,6 +64,7 @@ fonts_popup_invoker (GimpProcedure *procedure,
|
|||
! gimp_data_factory_data_wait (gimp->font_factory) ||
|
||||
! gimp_pdb_dialog_new (gimp, context, progress,
|
||||
gimp_data_factory_get_container (gimp->font_factory),
|
||||
parent_window,
|
||||
popup_title, font_callback, initial_font_name,
|
||||
NULL))
|
||||
success = FALSE;
|
||||
|
@ -169,6 +172,12 @@ register_font_select_procs (GimpPDB *pdb)
|
|||
FALSE, TRUE, FALSE,
|
||||
NULL,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_procedure_add_argument (procedure,
|
||||
g_param_spec_boxed ("parent-window",
|
||||
"parent window",
|
||||
"An optional parent window handle for the popup to be set transient to",
|
||||
G_TYPE_BYTES,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_pdb_register_procedure (pdb, procedure);
|
||||
g_object_unref (procedure);
|
||||
|
||||
|
|
|
@ -51,10 +51,12 @@ gradients_popup_invoker (GimpProcedure *procedure,
|
|||
const gchar *gradient_callback;
|
||||
const gchar *popup_title;
|
||||
const gchar *initial_gradient_name;
|
||||
GBytes *parent_window;
|
||||
|
||||
gradient_callback = g_value_get_string (gimp_value_array_index (args, 0));
|
||||
popup_title = g_value_get_string (gimp_value_array_index (args, 1));
|
||||
initial_gradient_name = g_value_get_string (gimp_value_array_index (args, 2));
|
||||
parent_window = g_value_get_boxed (gimp_value_array_index (args, 3));
|
||||
|
||||
if (success)
|
||||
{
|
||||
|
@ -68,6 +70,7 @@ gradients_popup_invoker (GimpProcedure *procedure,
|
|||
! gimp_pdb_lookup_procedure (gimp->pdb, gradient_callback) ||
|
||||
! gimp_pdb_dialog_new (gimp, context, progress,
|
||||
gimp_data_factory_get_container (gimp->gradient_factory),
|
||||
parent_window,
|
||||
popup_title, gradient_callback, initial_gradient_name,
|
||||
NULL))
|
||||
success = FALSE;
|
||||
|
@ -172,6 +175,12 @@ register_gradient_select_procs (GimpPDB *pdb)
|
|||
FALSE, TRUE, FALSE,
|
||||
NULL,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_procedure_add_argument (procedure,
|
||||
g_param_spec_boxed ("parent-window",
|
||||
"parent window",
|
||||
"An optional parent window handle for the popup to be set transient to",
|
||||
G_TYPE_BYTES,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_pdb_register_procedure (pdb, procedure);
|
||||
g_object_unref (procedure);
|
||||
|
||||
|
|
|
@ -50,10 +50,12 @@ palettes_popup_invoker (GimpProcedure *procedure,
|
|||
const gchar *palette_callback;
|
||||
const gchar *popup_title;
|
||||
const gchar *initial_palette_name;
|
||||
GBytes *parent_window;
|
||||
|
||||
palette_callback = g_value_get_string (gimp_value_array_index (args, 0));
|
||||
popup_title = g_value_get_string (gimp_value_array_index (args, 1));
|
||||
initial_palette_name = g_value_get_string (gimp_value_array_index (args, 2));
|
||||
parent_window = g_value_get_boxed (gimp_value_array_index (args, 3));
|
||||
|
||||
if (success)
|
||||
{
|
||||
|
@ -61,6 +63,7 @@ palettes_popup_invoker (GimpProcedure *procedure,
|
|||
! gimp_pdb_lookup_procedure (gimp->pdb, palette_callback) ||
|
||||
! gimp_pdb_dialog_new (gimp, context, progress,
|
||||
gimp_data_factory_get_container (gimp->palette_factory),
|
||||
parent_window,
|
||||
popup_title, palette_callback, initial_palette_name,
|
||||
NULL))
|
||||
success = FALSE;
|
||||
|
@ -165,6 +168,12 @@ register_palette_select_procs (GimpPDB *pdb)
|
|||
FALSE, TRUE, FALSE,
|
||||
NULL,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_procedure_add_argument (procedure,
|
||||
g_param_spec_boxed ("parent-window",
|
||||
"parent window",
|
||||
"An optional parent window handle for the popup to be set transient to",
|
||||
G_TYPE_BYTES,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_pdb_register_procedure (pdb, procedure);
|
||||
g_object_unref (procedure);
|
||||
|
||||
|
|
|
@ -50,10 +50,12 @@ patterns_popup_invoker (GimpProcedure *procedure,
|
|||
const gchar *pattern_callback;
|
||||
const gchar *popup_title;
|
||||
const gchar *initial_pattern_name;
|
||||
GBytes *parent_window;
|
||||
|
||||
pattern_callback = g_value_get_string (gimp_value_array_index (args, 0));
|
||||
popup_title = g_value_get_string (gimp_value_array_index (args, 1));
|
||||
initial_pattern_name = g_value_get_string (gimp_value_array_index (args, 2));
|
||||
parent_window = g_value_get_boxed (gimp_value_array_index (args, 3));
|
||||
|
||||
if (success)
|
||||
{
|
||||
|
@ -61,6 +63,7 @@ patterns_popup_invoker (GimpProcedure *procedure,
|
|||
! gimp_pdb_lookup_procedure (gimp->pdb, pattern_callback) ||
|
||||
! gimp_pdb_dialog_new (gimp, context, progress,
|
||||
gimp_data_factory_get_container (gimp->pattern_factory),
|
||||
parent_window,
|
||||
popup_title, pattern_callback, initial_pattern_name,
|
||||
NULL))
|
||||
success = FALSE;
|
||||
|
@ -165,6 +168,12 @@ register_pattern_select_procs (GimpPDB *pdb)
|
|||
FALSE, TRUE, FALSE,
|
||||
NULL,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_procedure_add_argument (procedure,
|
||||
g_param_spec_boxed ("parent-window",
|
||||
"parent window",
|
||||
"An optional parent window handle for the popup to be set transient to",
|
||||
G_TYPE_BYTES,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_pdb_register_procedure (pdb, procedure);
|
||||
g_object_unref (procedure);
|
||||
|
||||
|
|
|
@ -97,6 +97,9 @@ static void gimp_blink_free_script (GList *blink_sce
|
|||
static gboolean gimp_window_transient_on_mapped (GtkWidget *widget,
|
||||
GdkEventAny *event,
|
||||
GimpProgress *progress);
|
||||
static void gimp_window_set_transient_cb (GtkWidget *window,
|
||||
GdkEventAny *event,
|
||||
GBytes *handle);
|
||||
|
||||
|
||||
GtkWidget *
|
||||
|
@ -940,6 +943,23 @@ gimp_window_set_transient_for (GtkWindow *window,
|
|||
gimp_window_transient_on_mapped (GTK_WIDGET (window), NULL, parent);
|
||||
}
|
||||
|
||||
void
|
||||
gimp_window_set_transient_for_handle (GtkWindow *window,
|
||||
GBytes *handle)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_WINDOW (window));
|
||||
g_return_if_fail (handle != NULL);
|
||||
|
||||
g_signal_connect_data (window, "map-event",
|
||||
G_CALLBACK (gimp_window_set_transient_cb),
|
||||
g_bytes_ref (handle),
|
||||
(GClosureNotify) g_bytes_unref,
|
||||
G_CONNECT_AFTER);
|
||||
|
||||
if (gtk_widget_get_mapped (GTK_WIDGET (window)))
|
||||
gimp_window_set_transient_cb (GTK_WIDGET (window), NULL, handle);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_widget_accels_changed (GimpAction *action,
|
||||
const gchar **accels,
|
||||
|
@ -2507,17 +2527,32 @@ gimp_utils_are_menu_path_identical (const gchar *path1,
|
|||
|
||||
static gboolean
|
||||
gimp_window_transient_on_mapped (GtkWidget *window,
|
||||
GdkEventAny *event,
|
||||
GdkEventAny *event G_GNUC_UNUSED,
|
||||
GimpProgress *progress)
|
||||
{
|
||||
GBytes *handle;
|
||||
gboolean transient_set = FALSE;
|
||||
GBytes *handle;
|
||||
|
||||
handle = gimp_progress_get_window_id (progress);
|
||||
|
||||
if (handle == NULL)
|
||||
return FALSE;
|
||||
|
||||
gimp_window_set_transient_cb (window, NULL, handle);
|
||||
|
||||
g_bytes_unref (handle);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_window_set_transient_cb (GtkWidget *window,
|
||||
GdkEventAny *event G_GNUC_UNUSED,
|
||||
GBytes *handle)
|
||||
{
|
||||
gboolean transient_set = FALSE;
|
||||
|
||||
g_return_if_fail (handle != NULL);
|
||||
|
||||
#ifdef GDK_WINDOWING_WAYLAND
|
||||
if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ()))
|
||||
{
|
||||
|
@ -2539,7 +2574,7 @@ gimp_window_transient_on_mapped (GtkWidget *window,
|
|||
gsize handle_size;
|
||||
|
||||
handle_data = (Window *) g_bytes_get_data (handle, &handle_size);
|
||||
g_return_val_if_fail (handle_size == sizeof (Window), FALSE);
|
||||
g_return_if_fail (handle_size == sizeof (Window));
|
||||
parent_ID = *handle_data;
|
||||
|
||||
parent = gimp_get_foreign_window ((gpointer) parent_ID);
|
||||
|
@ -2559,7 +2594,7 @@ gimp_window_transient_on_mapped (GtkWidget *window,
|
|||
gsize handle_size;
|
||||
|
||||
handle_data = (HANDLE *) g_bytes_get_data (handle, &handle_size);
|
||||
g_return_val_if_fail (handle_size == sizeof (HANDLE), FALSE);
|
||||
g_return_if_fail (handle_size == sizeof (HANDLE));
|
||||
parent_ID = *handle_data;
|
||||
|
||||
parent = gimp_get_foreign_window ((gpointer) parent_ID);
|
||||
|
@ -2570,8 +2605,4 @@ gimp_window_transient_on_mapped (GtkWidget *window,
|
|||
transient_set = TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
g_bytes_unref (handle);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -73,6 +73,8 @@ void gimp_window_set_hint (GtkWindow *window
|
|||
GimpWindowHint hint);
|
||||
void gimp_window_set_transient_for (GtkWindow *window,
|
||||
GimpProgress *progress);
|
||||
void gimp_window_set_transient_for_handle (GtkWindow *window,
|
||||
GBytes *handle);
|
||||
void gimp_widget_set_accel_help (GtkWidget *widget,
|
||||
GimpAction *action);
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
* @brush_callback: The callback PDB proc to call when user chooses a brush.
|
||||
* @popup_title: Title of the brush selection dialog.
|
||||
* @initial_brush_name: The name of the brush to set as the initial choice.
|
||||
* @parent_window: An optional parent window handle for the popup to be set transient to.
|
||||
*
|
||||
* Invokes the GIMP brush selection dialog.
|
||||
*
|
||||
|
@ -52,7 +53,8 @@
|
|||
gboolean
|
||||
gimp_brushes_popup (const gchar *brush_callback,
|
||||
const gchar *popup_title,
|
||||
const gchar *initial_brush_name)
|
||||
const gchar *initial_brush_name,
|
||||
GBytes *parent_window)
|
||||
{
|
||||
GimpValueArray *args;
|
||||
GimpValueArray *return_vals;
|
||||
|
@ -62,6 +64,7 @@ gimp_brushes_popup (const gchar *brush_callback,
|
|||
G_TYPE_STRING, brush_callback,
|
||||
G_TYPE_STRING, popup_title,
|
||||
G_TYPE_STRING, initial_brush_name,
|
||||
G_TYPE_BYTES, parent_window,
|
||||
G_TYPE_NONE);
|
||||
|
||||
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
||||
|
|
|
@ -34,7 +34,8 @@ G_BEGIN_DECLS
|
|||
|
||||
gboolean gimp_brushes_popup (const gchar *brush_callback,
|
||||
const gchar *popup_title,
|
||||
const gchar *initial_brush_name);
|
||||
const gchar *initial_brush_name,
|
||||
GBytes *parent_window);
|
||||
gboolean gimp_brushes_close_popup (const gchar *brush_callback);
|
||||
gboolean gimp_brushes_set_popup (const gchar *brush_callback,
|
||||
const gchar *brush_name);
|
||||
|
|
|
@ -420,6 +420,8 @@ gimp_brush_select_button_open_popup (GimpBrushSelectButton *self,
|
|||
mask,
|
||||
mask.width);
|
||||
g_free (mask.mask_data);
|
||||
gdk_window_set_transient_for (gtk_widget_get_window (self->popup),
|
||||
gtk_widget_get_window (gtk_widget_get_toplevel (GTK_WIDGET (self))));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -50,6 +50,7 @@
|
|||
* @font_callback: The callback PDB proc to call when user chooses a font.
|
||||
* @popup_title: Title of the font selection dialog.
|
||||
* @initial_font_name: The name of the initial font choice.
|
||||
* @parent_window: An optional parent window handle for the popup to be set transient to.
|
||||
*
|
||||
* Invokes the Gimp font selection dialog.
|
||||
*
|
||||
|
@ -60,7 +61,8 @@
|
|||
gboolean
|
||||
gimp_fonts_popup (const gchar *font_callback,
|
||||
const gchar *popup_title,
|
||||
const gchar *initial_font_name)
|
||||
const gchar *initial_font_name,
|
||||
GBytes *parent_window)
|
||||
{
|
||||
GimpValueArray *args;
|
||||
GimpValueArray *return_vals;
|
||||
|
@ -70,6 +72,7 @@ gimp_fonts_popup (const gchar *font_callback,
|
|||
G_TYPE_STRING, font_callback,
|
||||
G_TYPE_STRING, popup_title,
|
||||
G_TYPE_STRING, initial_font_name,
|
||||
G_TYPE_BYTES, parent_window,
|
||||
G_TYPE_NONE);
|
||||
|
||||
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
||||
|
|
|
@ -34,7 +34,8 @@ G_BEGIN_DECLS
|
|||
|
||||
gboolean gimp_fonts_popup (const gchar *font_callback,
|
||||
const gchar *popup_title,
|
||||
const gchar *initial_font_name);
|
||||
const gchar *initial_font_name,
|
||||
GBytes *parent_window);
|
||||
gboolean gimp_fonts_close_popup (const gchar *font_callback);
|
||||
gboolean gimp_fonts_set_popup (const gchar *font_callback,
|
||||
const gchar *font_name);
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
* @gradient_callback: The callback PDB proc to call when user chooses a gradient.
|
||||
* @popup_title: Title of the gradient selection dialog.
|
||||
* @initial_gradient_name: The name of the initial gradient choice.
|
||||
* @parent_window: An optional parent window handle for the popup to be set transient to.
|
||||
*
|
||||
* Invokes the Gimp gradients selection dialog.
|
||||
*
|
||||
|
@ -52,7 +53,8 @@
|
|||
gboolean
|
||||
gimp_gradients_popup (const gchar *gradient_callback,
|
||||
const gchar *popup_title,
|
||||
const gchar *initial_gradient_name)
|
||||
const gchar *initial_gradient_name,
|
||||
GBytes *parent_window)
|
||||
{
|
||||
GimpValueArray *args;
|
||||
GimpValueArray *return_vals;
|
||||
|
@ -62,6 +64,7 @@ gimp_gradients_popup (const gchar *gradient_callback,
|
|||
G_TYPE_STRING, gradient_callback,
|
||||
G_TYPE_STRING, popup_title,
|
||||
G_TYPE_STRING, initial_gradient_name,
|
||||
G_TYPE_BYTES, parent_window,
|
||||
G_TYPE_NONE);
|
||||
|
||||
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
||||
|
|
|
@ -34,7 +34,8 @@ G_BEGIN_DECLS
|
|||
|
||||
gboolean gimp_gradients_popup (const gchar *gradient_callback,
|
||||
const gchar *popup_title,
|
||||
const gchar *initial_gradient_name);
|
||||
const gchar *initial_gradient_name,
|
||||
GBytes *parent_window);
|
||||
gboolean gimp_gradients_close_popup (const gchar *gradient_callback);
|
||||
gboolean gimp_gradients_set_popup (const gchar *gradient_callback,
|
||||
const gchar *gradient_name);
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
* @palette_callback: The callback PDB proc to call when user chooses a palette.
|
||||
* @popup_title: Title of the palette selection dialog.
|
||||
* @initial_palette_name: The name of the palette to set as the initial choice.
|
||||
* @parent_window: An optional parent window handle for the popup to be set transient to.
|
||||
*
|
||||
* Invokes the Gimp palette selection dialog.
|
||||
*
|
||||
|
@ -52,7 +53,8 @@
|
|||
gboolean
|
||||
gimp_palettes_popup (const gchar *palette_callback,
|
||||
const gchar *popup_title,
|
||||
const gchar *initial_palette_name)
|
||||
const gchar *initial_palette_name,
|
||||
GBytes *parent_window)
|
||||
{
|
||||
GimpValueArray *args;
|
||||
GimpValueArray *return_vals;
|
||||
|
@ -62,6 +64,7 @@ gimp_palettes_popup (const gchar *palette_callback,
|
|||
G_TYPE_STRING, palette_callback,
|
||||
G_TYPE_STRING, popup_title,
|
||||
G_TYPE_STRING, initial_palette_name,
|
||||
G_TYPE_BYTES, parent_window,
|
||||
G_TYPE_NONE);
|
||||
|
||||
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
||||
|
|
|
@ -34,7 +34,8 @@ G_BEGIN_DECLS
|
|||
|
||||
gboolean gimp_palettes_popup (const gchar *palette_callback,
|
||||
const gchar *popup_title,
|
||||
const gchar *initial_palette_name);
|
||||
const gchar *initial_palette_name,
|
||||
GBytes *parent_window);
|
||||
gboolean gimp_palettes_close_popup (const gchar *palette_callback);
|
||||
gboolean gimp_palettes_set_popup (const gchar *palette_callback,
|
||||
const gchar *palette_name);
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
* @pattern_callback: The callback PDB proc to call when the user chooses a pattern.
|
||||
* @popup_title: Title of the pattern selection dialog.
|
||||
* @initial_pattern_name: The name of the pattern to set as the initial choice.
|
||||
* @parent_window: An optional parent window handle for the popup to be set transient to.
|
||||
*
|
||||
* Invokes the Gimp pattern selection.
|
||||
*
|
||||
|
@ -52,7 +53,8 @@
|
|||
gboolean
|
||||
gimp_patterns_popup (const gchar *pattern_callback,
|
||||
const gchar *popup_title,
|
||||
const gchar *initial_pattern_name)
|
||||
const gchar *initial_pattern_name,
|
||||
GBytes *parent_window)
|
||||
{
|
||||
GimpValueArray *args;
|
||||
GimpValueArray *return_vals;
|
||||
|
@ -62,6 +64,7 @@ gimp_patterns_popup (const gchar *pattern_callback,
|
|||
G_TYPE_STRING, pattern_callback,
|
||||
G_TYPE_STRING, popup_title,
|
||||
G_TYPE_STRING, initial_pattern_name,
|
||||
G_TYPE_BYTES, parent_window,
|
||||
G_TYPE_NONE);
|
||||
|
||||
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
||||
|
|
|
@ -34,7 +34,8 @@ G_BEGIN_DECLS
|
|||
|
||||
gboolean gimp_patterns_popup (const gchar *pattern_callback,
|
||||
const gchar *popup_title,
|
||||
const gchar *initial_pattern_name);
|
||||
const gchar *initial_pattern_name,
|
||||
GBytes *parent_window);
|
||||
gboolean gimp_patterns_close_popup (const gchar *pattern_callback);
|
||||
gboolean gimp_patterns_set_popup (const gchar *pattern_callback,
|
||||
const gchar *pattern_name);
|
||||
|
|
|
@ -245,6 +245,7 @@ create_callback_PDB_procedure_params (GimpProcedure *procedure,
|
|||
*/
|
||||
static gboolean
|
||||
popup_remote_chooser (const gchar *title,
|
||||
GBytes *parent_handle,
|
||||
GimpResource *resource,
|
||||
gchar *temp_PDB_callback_name,
|
||||
GType resource_type)
|
||||
|
@ -257,23 +258,23 @@ popup_remote_chooser (const gchar *title,
|
|||
|
||||
if (g_type_is_a (resource_type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
result = gimp_brushes_popup (temp_PDB_callback_name, title, resource_name);
|
||||
result = gimp_brushes_popup (temp_PDB_callback_name, title, resource_name, parent_handle);
|
||||
}
|
||||
else if (g_type_is_a (resource_type, GIMP_TYPE_FONT))
|
||||
{
|
||||
result = gimp_fonts_popup (temp_PDB_callback_name, title, resource_name);
|
||||
result = gimp_fonts_popup (temp_PDB_callback_name, title, resource_name, parent_handle);
|
||||
}
|
||||
else if (g_type_is_a (resource_type, GIMP_TYPE_GRADIENT))
|
||||
{
|
||||
result = gimp_gradients_popup (temp_PDB_callback_name, title, resource_name);
|
||||
result = gimp_gradients_popup (temp_PDB_callback_name, title, resource_name, parent_handle);
|
||||
}
|
||||
else if (g_type_is_a (resource_type, GIMP_TYPE_PALETTE))
|
||||
{
|
||||
result = gimp_palettes_popup (temp_PDB_callback_name, title, resource_name);
|
||||
result = gimp_palettes_popup (temp_PDB_callback_name, title, resource_name, parent_handle);
|
||||
}
|
||||
else if (g_type_is_a (resource_type, GIMP_TYPE_PATTERN))
|
||||
{
|
||||
result = gimp_patterns_popup (temp_PDB_callback_name, title, resource_name);
|
||||
result = gimp_patterns_popup (temp_PDB_callback_name, title, resource_name, parent_handle);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -336,6 +337,7 @@ close_remote_chooser (gchar *temp_PDB_callback_name,
|
|||
**/
|
||||
const gchar *
|
||||
gimp_resource_select_new (const gchar *title,
|
||||
GBytes *parent_handle,
|
||||
GimpResource *resource,
|
||||
GType resource_type,
|
||||
GimpResourceChoosedCallback callback,
|
||||
|
@ -377,8 +379,7 @@ gimp_resource_select_new (const gchar *title,
|
|||
gimp_plug_in_add_temp_procedure (plug_in, procedure);
|
||||
g_object_unref (procedure);
|
||||
|
||||
if (popup_remote_chooser (title, resource, temp_PDB_callback_name,
|
||||
resource_type))
|
||||
if (popup_remote_chooser (title, parent_handle, resource, temp_PDB_callback_name, resource_type))
|
||||
{
|
||||
/* Allow callbacks to be watched */
|
||||
gimp_plug_in_extension_enable (plug_in);
|
||||
|
|
|
@ -38,6 +38,7 @@ typedef void (* GimpResourceChoosedCallback) (GimpResource *resource,
|
|||
gpointer owner_data);
|
||||
|
||||
const gchar * gimp_resource_select_new (const gchar *title,
|
||||
GBytes *parent_handle,
|
||||
GimpResource *resource,
|
||||
GType resource_type,
|
||||
GimpResourceChoosedCallback callback,
|
||||
|
|
|
@ -506,9 +506,16 @@ gimp_resource_select_button_clicked (GimpResourceSelectButton *self)
|
|||
}
|
||||
else
|
||||
{
|
||||
GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (self));
|
||||
GBytes *handle = NULL;
|
||||
|
||||
if (GIMP_IS_DIALOG (toplevel))
|
||||
handle = gimp_dialog_get_native_handle (GIMP_DIALOG (toplevel));
|
||||
|
||||
/* Call GimpResourceSelect which dispatches on resource_type. */
|
||||
priv->temp_callback_from_remote_dialog =
|
||||
gimp_resource_select_new (priv->title,
|
||||
handle,
|
||||
priv->resource,
|
||||
klass->resource_type,
|
||||
gimp_resource_select_button_callback,
|
||||
|
|
|
@ -28,7 +28,9 @@ sub brushes_popup {
|
|||
{ name => 'popup_title', type => 'string',
|
||||
desc => 'Title of the brush selection dialog' },
|
||||
{ name => 'initial_brush_name', type => 'string', null_ok => 1,
|
||||
desc => 'The name of the brush to set as the initial choice' }
|
||||
desc => 'The name of the brush to set as the initial choice' },
|
||||
{ name => 'parent_window', type => 'bytes', null_ok => 1,
|
||||
desc => 'An optional parent window handle for the popup to be set transient to' }
|
||||
);
|
||||
|
||||
%invoke = (
|
||||
|
@ -38,6 +40,7 @@ sub brushes_popup {
|
|||
! gimp_pdb_lookup_procedure (gimp->pdb, brush_callback) ||
|
||||
! gimp_pdb_dialog_new (gimp, context, progress,
|
||||
gimp_data_factory_get_container (gimp->brush_factory),
|
||||
parent_window,
|
||||
popup_title, brush_callback, initial_brush_name,
|
||||
NULL))
|
||||
success = FALSE;
|
||||
|
|
|
@ -29,7 +29,9 @@ sub fonts_popup {
|
|||
{ name => 'popup_title', type => 'string',
|
||||
desc => 'Title of the font selection dialog' },
|
||||
{ name => 'initial_font_name', type => 'string', null_ok => 1,
|
||||
desc => 'The name of the initial font choice.' }
|
||||
desc => 'The name of the initial font choice.' },
|
||||
{ name => 'parent_window', type => 'bytes', null_ok => 1,
|
||||
desc => 'An optional parent window handle for the popup to be set transient to' }
|
||||
);
|
||||
|
||||
%invoke = (
|
||||
|
@ -40,6 +42,7 @@ sub fonts_popup {
|
|||
! gimp_data_factory_data_wait (gimp->font_factory) ||
|
||||
! gimp_pdb_dialog_new (gimp, context, progress,
|
||||
gimp_data_factory_get_container (gimp->font_factory),
|
||||
parent_window,
|
||||
popup_title, font_callback, initial_font_name,
|
||||
NULL))
|
||||
success = FALSE;
|
||||
|
|
|
@ -29,7 +29,9 @@ sub gradients_popup {
|
|||
{ name => 'popup_title', type => 'string',
|
||||
desc => 'Title of the gradient selection dialog' },
|
||||
{ name => 'initial_gradient_name', type => 'string', null_ok => 1,
|
||||
desc => 'The name of the initial gradient choice' }
|
||||
desc => 'The name of the initial gradient choice' },
|
||||
{ name => 'parent_window', type => 'bytes', null_ok => 1,
|
||||
desc => 'An optional parent window handle for the popup to be set transient to' }
|
||||
);
|
||||
|
||||
%invoke = (
|
||||
|
@ -45,6 +47,7 @@ sub gradients_popup {
|
|||
! gimp_pdb_lookup_procedure (gimp->pdb, gradient_callback) ||
|
||||
! gimp_pdb_dialog_new (gimp, context, progress,
|
||||
gimp_data_factory_get_container (gimp->gradient_factory),
|
||||
parent_window,
|
||||
popup_title, gradient_callback, initial_gradient_name,
|
||||
NULL))
|
||||
success = FALSE;
|
||||
|
|
|
@ -28,7 +28,9 @@ sub palettes_popup {
|
|||
{ name => 'popup_title', type => 'string',
|
||||
desc => 'Title of the palette selection dialog' },
|
||||
{ name => 'initial_palette_name', type => 'string', null_ok => 1,
|
||||
desc => 'The name of the palette to set as the initial choice.' }
|
||||
desc => 'The name of the palette to set as the initial choice.' },
|
||||
{ name => 'parent_window', type => 'bytes', null_ok => 1,
|
||||
desc => 'An optional parent window handle for the popup to be set transient to' }
|
||||
);
|
||||
|
||||
%invoke = (
|
||||
|
@ -38,6 +40,7 @@ sub palettes_popup {
|
|||
! gimp_pdb_lookup_procedure (gimp->pdb, palette_callback) ||
|
||||
! gimp_pdb_dialog_new (gimp, context, progress,
|
||||
gimp_data_factory_get_container (gimp->palette_factory),
|
||||
parent_window,
|
||||
popup_title, palette_callback, initial_palette_name,
|
||||
NULL))
|
||||
success = FALSE;
|
||||
|
|
|
@ -28,7 +28,9 @@ sub patterns_popup {
|
|||
{ name => 'popup_title', type => 'string',
|
||||
desc => 'Title of the pattern selection dialog' },
|
||||
{ name => 'initial_pattern_name', type => 'string', null_ok => 1,
|
||||
desc => 'The name of the pattern to set as the initial choice' }
|
||||
desc => 'The name of the pattern to set as the initial choice' },
|
||||
{ name => 'parent_window', type => 'bytes', null_ok => 1,
|
||||
desc => 'An optional parent window handle for the popup to be set transient to' }
|
||||
);
|
||||
|
||||
%invoke = (
|
||||
|
@ -38,6 +40,7 @@ sub patterns_popup {
|
|||
! gimp_pdb_lookup_procedure (gimp->pdb, pattern_callback) ||
|
||||
! gimp_pdb_dialog_new (gimp, context, progress,
|
||||
gimp_data_factory_get_container (gimp->pattern_factory),
|
||||
parent_window,
|
||||
popup_title, pattern_callback, initial_pattern_name,
|
||||
NULL))
|
||||
success = FALSE;
|
||||
|
|
Loading…
Reference in New Issue