added new function gimp_dialog_factory_add_foreign() which adds a dialog

2003-05-02  Michael Natterer  <mitch@gimp.org>

	* app/widgets/gimpdialogfactory.[ch]: added new function
	gimp_dialog_factory_add_foreign() which adds a dialog that was not
	created by the factory itself. Its identifier however must be
	registered with the factory. Connect to all toplevel dialogs'
	"configure_event" and remember the resulting window geometry so we
	get session management for *all* dialogs, not only for those which
	were open on exit.

	* app/gui/dialogs.c: added the "File New" dialog. Added foreign
	entries (without constructor) for all dialogs opened by tools.

	* app/gui/dialogs-constructors.[ch]: added a constructor for
	the file_new dialog.

	* app/gui/file-new-dialog.[ch]: renamed file_new_dialog_create()
	to file_new_dialog_new() and removed the gimage and template
	paramaters. Adder new function file_new_dialog_set() to set
	gimage and template after creation.

	* app/gui/file-commands.c
	* app/gui/templates-commands.c: changed accordingly.

	* app/tools/gimpimagemaptool.[ch]
	* app/tools/gimptransformtool.[ch]: added
	"const gchar *shell_identifier" to the tool structs. Register the
	tool dialogs using gimp_dialog_factory_add_foreign().

	* app/tools/gimpbrightnesscontrasttool.c
	* app/tools/gimpcolorbalancetool.c
	* app/tools/gimpcurvestool.c
	* app/tools/gimphuesaturationtool.c
	* app/tools/gimplevelstool.c
	* app/tools/gimpperspectivetool.c
	* app/tools/gimpposterizetool.c
	* app/tools/gimprotatetool.c
	* app/tools/gimpscaletool.c
	* app/tools/gimpsheartool.c
	* app/tools/gimpthresholdtool.c: set "shell_identifier" so the
	dialogs become session managed. Fixes bug #61091.

	* app/tools/gimpcroptool.c: register the crop dialog with the
	dialog factory. Fixes bug #52849.

	* app/tools/gimpcolorpickertool.c: ditto.

	Unrelated:

	* app/tools/gimptool.c: no need to cast the return value of
	g_object_new().
This commit is contained in:
Michael Natterer 2003-05-02 18:43:15 +00:00 committed by Michael Natterer
parent a115c7b5ab
commit fefaf61b28
35 changed files with 508 additions and 121 deletions

View File

@ -1,3 +1,55 @@
2003-05-02 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpdialogfactory.[ch]: added new function
gimp_dialog_factory_add_foreign() which adds a dialog that was not
created by the factory itself. Its identifier however must be
registered with the factory. Connect to all toplevel dialogs'
"configure_event" and remember the resulting window geometry so we
get session management for *all* dialogs, not only for those which
were open on exit.
* app/gui/dialogs.c: added the "File New" dialog. Added foreign
entries (without constructor) for all dialogs opened by tools.
* app/gui/dialogs-constructors.[ch]: added a constructor for
the file_new dialog.
* app/gui/file-new-dialog.[ch]: renamed file_new_dialog_create()
to file_new_dialog_new() and removed the gimage and template
paramaters. Adder new function file_new_dialog_set() to set
gimage and template after creation.
* app/gui/file-commands.c
* app/gui/templates-commands.c: changed accordingly.
* app/tools/gimpimagemaptool.[ch]
* app/tools/gimptransformtool.[ch]: added
"const gchar *shell_identifier" to the tool structs. Register the
tool dialogs using gimp_dialog_factory_add_foreign().
* app/tools/gimpbrightnesscontrasttool.c
* app/tools/gimpcolorbalancetool.c
* app/tools/gimpcurvestool.c
* app/tools/gimphuesaturationtool.c
* app/tools/gimplevelstool.c
* app/tools/gimpperspectivetool.c
* app/tools/gimpposterizetool.c
* app/tools/gimprotatetool.c
* app/tools/gimpscaletool.c
* app/tools/gimpsheartool.c
* app/tools/gimpthresholdtool.c: set "shell_identifier" so the
dialogs become session managed. Fixes bug #61091.
* app/tools/gimpcroptool.c: register the crop dialog with the
dialog factory. Fixes bug #52849.
* app/tools/gimpcolorpickertool.c: ditto.
Unrelated:
* app/tools/gimptool.c: no need to cast the return value of
g_object_new().
2003-05-02 Pedro Gimeno <pggimeno@wanadoo.es>
* app/paint/gimppaintcore-stroke.c (gimp_paint_core_stroke,

View File

@ -40,10 +40,13 @@
#include "file/file-save.h"
#include "file/file-utils.h"
#include "widgets/gimpdialogfactory.h"
#include "display/gimpdisplay.h"
#include "display/gimpdisplay-foreach.h"
#include "display/gimpdisplayshell.h"
#include "dialogs.h"
#include "file-commands.h"
#include "file-new-dialog.h"
#include "file-open-dialog.h"
@ -97,6 +100,7 @@ file_new_cmd_callback (GtkWidget *widget,
{
Gimp *gimp;
GimpImage *gimage;
GtkWidget *dialog;
return_if_no_gimp (gimp, data);
/* if called from the image menu */
@ -105,7 +109,11 @@ file_new_cmd_callback (GtkWidget *widget,
else
gimage = NULL;
file_new_dialog_create (gimp, gimage, NULL);
dialog = gimp_dialog_factory_dialog_new (global_dialog_factory,
"gimp-file-new-dialog", -1);
if (dialog)
file_new_dialog_set (dialog, gimage, NULL);
}
void

View File

@ -31,10 +31,12 @@
#include "core/gimplist.h"
#include "core/gimptemplate.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimptemplateeditor.h"
#include "widgets/gimptemplateview.h"
#include "widgets/gimpviewabledialog.h"
#include "dialogs.h"
#include "file-new-dialog.h"
#include "templates-commands.h"
@ -235,5 +237,11 @@ void
templates_file_new_dialog (Gimp *gimp,
GimpTemplate *template)
{
file_new_dialog_create (gimp, NULL, template);
GtkWidget *dialog;
dialog = gimp_dialog_factory_dialog_new (global_dialog_factory,
"gimp-file-new-dialog", -1);
if (dialog)
file_new_dialog_set (dialog, NULL, template);
}

View File

@ -80,6 +80,7 @@
#include "dialogs-constructors.h"
#include "error-console-dialog.h"
#include "file-commands.h"
#include "file-new-dialog.h"
#include "layers-commands.h"
#include "module-browser.h"
#include "paths-dialog.h"
@ -155,6 +156,14 @@ static void dialogs_navigation_display_changed (GimpContext *context
/* toplevel dialogs */
/**********************/
GtkWidget *
dialogs_file_new_new (GimpDialogFactory *factory,
GimpContext *context,
gint preview_size)
{
return file_new_dialog_new (context->gimp);
}
GtkWidget *
dialogs_device_status_get (GimpDialogFactory *factory,
GimpContext *context,

View File

@ -22,6 +22,9 @@
/* toplevel dialogs */
GtkWidget * dialogs_file_new_new (GimpDialogFactory *factory,
GimpContext *context,
gint preview_size);
GtkWidget * dialogs_device_status_get (GimpDialogFactory *factory,
GimpContext *context,
gint preview_size);

View File

@ -40,27 +40,62 @@ GimpDialogFactory *global_toolbox_factory = NULL;
static const GimpDialogFactoryEntry toplevel_entries[] =
{
/* foreign toplevels without constructor */
{ "gimp-brightness-contrast-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-color-picker-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-crop-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-curves-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-color-balance-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-hue-saturation-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-levels-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-posterize-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-rotate-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-scale-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-shear-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-threshold-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-perspective-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
/* ordinary toplevels */
{ "gimp-file-new-dialog", dialogs_file_new_new,
0, FALSE, TRUE, FALSE, FALSE },
/* singleton toplevels */
{ "gimp-device-status-dialog", dialogs_device_status_get,
0, TRUE, TRUE, FALSE, TRUE },
{ "gimp-preferences-dialog", dialogs_preferences_get,
0, TRUE, FALSE, FALSE, TRUE },
0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-module-browser-dialog", dialogs_module_browser_get,
0, TRUE, FALSE, FALSE, TRUE },
0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-display-filters-dialog", dialogs_display_filters_get,
0, FALSE, FALSE, FALSE, TRUE },
0, FALSE, TRUE, FALSE, FALSE },
{ "gimp-tips-dialog", dialogs_tips_get,
0, TRUE, FALSE, FALSE, TRUE },
0, TRUE, FALSE, FALSE, FALSE },
{ "gimp-about-dialog", dialogs_about_get,
0, TRUE, FALSE, FALSE, TRUE }
0, TRUE, FALSE, FALSE, FALSE }
};
static const GimpDialogFactoryEntry dock_entries[] =
{
/* singleton dockables */
{ "gimp-tool-options", dialogs_tool_options_get,
0, TRUE, FALSE, FALSE, TRUE },
{ "gimp-error-console", dialogs_error_console_get,
0, TRUE, FALSE, FALSE, TRUE },
/* list views */
{ "gimp-image-list", dialogs_image_list_view_new,
GIMP_PREVIEW_SIZE_MEDIUM, FALSE, FALSE, FALSE, TRUE },
{ "gimp-brush-list", dialogs_brush_list_view_new,
@ -77,7 +112,12 @@ static const GimpDialogFactoryEntry dock_entries[] =
GIMP_PREVIEW_SIZE_SMALL, FALSE, FALSE, FALSE, TRUE },
{ "gimp-buffer-list", dialogs_buffer_list_view_new,
GIMP_PREVIEW_SIZE_MEDIUM, FALSE, FALSE, FALSE, TRUE },
{ "gimp-document-list", dialogs_document_list_new,
GIMP_PREVIEW_SIZE_LARGE, FALSE, FALSE, FALSE, TRUE },
{ "gimp-template-list", dialogs_template_list_new,
GIMP_PREVIEW_SIZE_SMALL, FALSE, FALSE, FALSE, TRUE },
/* grid views */
{ "gimp-image-grid", dialogs_image_grid_view_new,
GIMP_PREVIEW_SIZE_MEDIUM, FALSE, FALSE, FALSE, TRUE },
{ "gimp-brush-grid", dialogs_brush_grid_view_new,
@ -94,7 +134,10 @@ static const GimpDialogFactoryEntry dock_entries[] =
GIMP_PREVIEW_SIZE_SMALL, FALSE, FALSE, FALSE, TRUE },
{ "gimp-buffer-grid", dialogs_buffer_grid_view_new,
GIMP_PREVIEW_SIZE_MEDIUM, FALSE, FALSE, FALSE, TRUE },
{ "gimp-document-grid", dialogs_document_grid_new,
GIMP_PREVIEW_SIZE_LARGE, FALSE, FALSE, FALSE, TRUE },
/* image related */
{ "gimp-layer-list", dialogs_layer_list_view_new,
0, FALSE, FALSE, FALSE, TRUE },
{ "gimp-channel-list", dialogs_channel_list_view_new,
@ -110,26 +153,21 @@ static const GimpDialogFactoryEntry dock_entries[] =
{ "gimp-undo-history", dialogs_undo_history_new,
0, FALSE, FALSE, FALSE, TRUE },
/* display related */
{ "gimp-navigation-view", dialogs_navigation_view_new,
0, FALSE, FALSE, FALSE, TRUE },
/* editors */
{ "gimp-color-editor", dialogs_color_editor_new,
0, FALSE, FALSE, FALSE, TRUE },
{ "gimp-document-list", dialogs_document_list_new,
GIMP_PREVIEW_SIZE_LARGE, FALSE, FALSE, FALSE, TRUE },
{ "gimp-document-grid", dialogs_document_grid_new,
GIMP_PREVIEW_SIZE_LARGE, FALSE, FALSE, FALSE, TRUE },
{ "gimp-template-list", dialogs_template_list_new,
GIMP_PREVIEW_SIZE_SMALL, FALSE, FALSE, FALSE, TRUE },
/* singleton editors */
{ "gimp-brush-editor", dialogs_brush_editor_get,
0, TRUE, FALSE, FALSE, TRUE },
{ "gimp-gradient-editor", dialogs_gradient_editor_get,
0, TRUE, FALSE, FALSE, TRUE },
{ "gimp-palette-editor", dialogs_palette_editor_get,
0, TRUE, FALSE, FALSE, TRUE },
{ "gimp-navigation-view", dialogs_navigation_view_new,
0, FALSE, FALSE, FALSE, TRUE }
};

View File

@ -76,19 +76,15 @@ static void file_new_create_image (FileNewDialog *dialog);
/* public functions */
void
file_new_dialog_create (Gimp *gimp,
GimpImage *gimage,
GimpTemplate *template)
GtkWidget *
file_new_dialog_new (Gimp *gimp)
{
FileNewDialog *dialog;
GtkWidget *main_vbox;
GtkWidget *table;
GtkWidget *optionmenu;
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (gimage == NULL || GIMP_IS_IMAGE (gimage));
g_return_if_fail (template == NULL || GIMP_IS_TEMPLATE (template));
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
dialog = g_new0 (FileNewDialog, 1);
@ -114,6 +110,10 @@ file_new_dialog_create (Gimp *gimp,
NULL);
g_object_set_data_full (G_OBJECT (dialog->dialog),
"gimp-file-new-dialog", dialog,
(GDestroyNotify) g_free);
gtk_window_set_resizable (GTK_WINDOW (dialog->dialog), FALSE);
/* vbox holding the rest of the dialog */
@ -154,6 +154,26 @@ file_new_dialog_create (Gimp *gimp,
G_CALLBACK (file_new_template_notify),
dialog);
gimp_size_entry_grab_focus (GIMP_SIZE_ENTRY (GIMP_TEMPLATE_EDITOR (dialog->editor)->size_se));
return dialog->dialog;
}
void
file_new_dialog_set (GtkWidget *widget,
GimpImage *gimage,
GimpTemplate *template)
{
FileNewDialog *dialog;
g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (gimage == NULL || GIMP_IS_IMAGE (gimage));
g_return_if_fail (template == NULL || GIMP_IS_TEMPLATE (template));
dialog = g_object_get_data (G_OBJECT (widget), "gimp-file-new-dialog");
g_return_if_fail (dialog != NULL);
if (template)
{
gimp_container_menu_select_item (GIMP_CONTAINER_MENU (dialog->template_menu),
@ -161,15 +181,11 @@ file_new_dialog_create (Gimp *gimp,
}
else
{
template = gimp_image_new_get_last_template (gimp, gimage);
template = gimp_image_new_get_last_template (dialog->gimp, gimage);
gimp_template_editor_set_template (GIMP_TEMPLATE_EDITOR (dialog->editor),
template);
g_object_unref (template);
}
gimp_size_entry_grab_focus (GIMP_SIZE_ENTRY (GIMP_TEMPLATE_EDITOR (dialog->editor)->size_se));
gtk_widget_show (dialog->dialog);
}
@ -191,7 +207,6 @@ file_new_cancel_callback (GtkWidget *widget,
FileNewDialog *dialog)
{
gtk_widget_destroy (dialog->dialog);
g_free (dialog);
}
static void
@ -299,15 +314,16 @@ static void
file_new_create_image (FileNewDialog *dialog)
{
GimpTemplate *template;
Gimp *gimp;
template =
gimp_template_editor_get_template (GIMP_TEMPLATE_EDITOR (dialog->editor));
gimp = dialog->gimp;
gtk_widget_destroy (dialog->dialog);
gimp_template_create_image (dialog->gimp, template);
gimp_image_new_set_last_template (dialog->gimp, template);
gimp_template_create_image (gimp, template);
gimp_image_new_set_last_template (gimp, template);
g_object_unref (template);
g_free (dialog);
}

View File

@ -20,9 +20,11 @@
#define __FILE_NEW_DIALOG_H__
void file_new_dialog_create (Gimp *gimp,
GimpImage *gimage,
GimpTemplate *template);
GtkWidget * file_new_dialog_new (Gimp *gimp);
void file_new_dialog_set (GtkWidget *widget,
GimpImage *gimage,
GimpTemplate *template);
#endif /* __FILE_NEW_DIALOG_H__ */

View File

@ -80,6 +80,7 @@
#include "dialogs-constructors.h"
#include "error-console-dialog.h"
#include "file-commands.h"
#include "file-new-dialog.h"
#include "layers-commands.h"
#include "module-browser.h"
#include "paths-dialog.h"
@ -155,6 +156,14 @@ static void dialogs_navigation_display_changed (GimpContext *context
/* toplevel dialogs */
/**********************/
GtkWidget *
dialogs_file_new_new (GimpDialogFactory *factory,
GimpContext *context,
gint preview_size)
{
return file_new_dialog_new (context->gimp);
}
GtkWidget *
dialogs_device_status_get (GimpDialogFactory *factory,
GimpContext *context,

View File

@ -22,6 +22,9 @@
/* toplevel dialogs */
GtkWidget * dialogs_file_new_new (GimpDialogFactory *factory,
GimpContext *context,
gint preview_size);
GtkWidget * dialogs_device_status_get (GimpDialogFactory *factory,
GimpContext *context,
gint preview_size);

View File

@ -40,27 +40,62 @@ GimpDialogFactory *global_toolbox_factory = NULL;
static const GimpDialogFactoryEntry toplevel_entries[] =
{
/* foreign toplevels without constructor */
{ "gimp-brightness-contrast-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-color-picker-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-crop-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-curves-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-color-balance-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-hue-saturation-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-levels-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-posterize-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-rotate-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-scale-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-shear-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-threshold-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-perspective-tool-dialog",
NULL, 0, TRUE, TRUE, FALSE, FALSE },
/* ordinary toplevels */
{ "gimp-file-new-dialog", dialogs_file_new_new,
0, FALSE, TRUE, FALSE, FALSE },
/* singleton toplevels */
{ "gimp-device-status-dialog", dialogs_device_status_get,
0, TRUE, TRUE, FALSE, TRUE },
{ "gimp-preferences-dialog", dialogs_preferences_get,
0, TRUE, FALSE, FALSE, TRUE },
0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-module-browser-dialog", dialogs_module_browser_get,
0, TRUE, FALSE, FALSE, TRUE },
0, TRUE, TRUE, FALSE, FALSE },
{ "gimp-display-filters-dialog", dialogs_display_filters_get,
0, FALSE, FALSE, FALSE, TRUE },
0, FALSE, TRUE, FALSE, FALSE },
{ "gimp-tips-dialog", dialogs_tips_get,
0, TRUE, FALSE, FALSE, TRUE },
0, TRUE, FALSE, FALSE, FALSE },
{ "gimp-about-dialog", dialogs_about_get,
0, TRUE, FALSE, FALSE, TRUE }
0, TRUE, FALSE, FALSE, FALSE }
};
static const GimpDialogFactoryEntry dock_entries[] =
{
/* singleton dockables */
{ "gimp-tool-options", dialogs_tool_options_get,
0, TRUE, FALSE, FALSE, TRUE },
{ "gimp-error-console", dialogs_error_console_get,
0, TRUE, FALSE, FALSE, TRUE },
/* list views */
{ "gimp-image-list", dialogs_image_list_view_new,
GIMP_PREVIEW_SIZE_MEDIUM, FALSE, FALSE, FALSE, TRUE },
{ "gimp-brush-list", dialogs_brush_list_view_new,
@ -77,7 +112,12 @@ static const GimpDialogFactoryEntry dock_entries[] =
GIMP_PREVIEW_SIZE_SMALL, FALSE, FALSE, FALSE, TRUE },
{ "gimp-buffer-list", dialogs_buffer_list_view_new,
GIMP_PREVIEW_SIZE_MEDIUM, FALSE, FALSE, FALSE, TRUE },
{ "gimp-document-list", dialogs_document_list_new,
GIMP_PREVIEW_SIZE_LARGE, FALSE, FALSE, FALSE, TRUE },
{ "gimp-template-list", dialogs_template_list_new,
GIMP_PREVIEW_SIZE_SMALL, FALSE, FALSE, FALSE, TRUE },
/* grid views */
{ "gimp-image-grid", dialogs_image_grid_view_new,
GIMP_PREVIEW_SIZE_MEDIUM, FALSE, FALSE, FALSE, TRUE },
{ "gimp-brush-grid", dialogs_brush_grid_view_new,
@ -94,7 +134,10 @@ static const GimpDialogFactoryEntry dock_entries[] =
GIMP_PREVIEW_SIZE_SMALL, FALSE, FALSE, FALSE, TRUE },
{ "gimp-buffer-grid", dialogs_buffer_grid_view_new,
GIMP_PREVIEW_SIZE_MEDIUM, FALSE, FALSE, FALSE, TRUE },
{ "gimp-document-grid", dialogs_document_grid_new,
GIMP_PREVIEW_SIZE_LARGE, FALSE, FALSE, FALSE, TRUE },
/* image related */
{ "gimp-layer-list", dialogs_layer_list_view_new,
0, FALSE, FALSE, FALSE, TRUE },
{ "gimp-channel-list", dialogs_channel_list_view_new,
@ -110,26 +153,21 @@ static const GimpDialogFactoryEntry dock_entries[] =
{ "gimp-undo-history", dialogs_undo_history_new,
0, FALSE, FALSE, FALSE, TRUE },
/* display related */
{ "gimp-navigation-view", dialogs_navigation_view_new,
0, FALSE, FALSE, FALSE, TRUE },
/* editors */
{ "gimp-color-editor", dialogs_color_editor_new,
0, FALSE, FALSE, FALSE, TRUE },
{ "gimp-document-list", dialogs_document_list_new,
GIMP_PREVIEW_SIZE_LARGE, FALSE, FALSE, FALSE, TRUE },
{ "gimp-document-grid", dialogs_document_grid_new,
GIMP_PREVIEW_SIZE_LARGE, FALSE, FALSE, FALSE, TRUE },
{ "gimp-template-list", dialogs_template_list_new,
GIMP_PREVIEW_SIZE_SMALL, FALSE, FALSE, FALSE, TRUE },
/* singleton editors */
{ "gimp-brush-editor", dialogs_brush_editor_get,
0, TRUE, FALSE, FALSE, TRUE },
{ "gimp-gradient-editor", dialogs_gradient_editor_get,
0, TRUE, FALSE, FALSE, TRUE },
{ "gimp-palette-editor", dialogs_palette_editor_get,
0, TRUE, FALSE, FALSE, TRUE },
{ "gimp-navigation-view", dialogs_navigation_view_new,
0, FALSE, FALSE, FALSE, TRUE }
};

View File

@ -40,10 +40,13 @@
#include "file/file-save.h"
#include "file/file-utils.h"
#include "widgets/gimpdialogfactory.h"
#include "display/gimpdisplay.h"
#include "display/gimpdisplay-foreach.h"
#include "display/gimpdisplayshell.h"
#include "dialogs.h"
#include "file-commands.h"
#include "file-new-dialog.h"
#include "file-open-dialog.h"
@ -97,6 +100,7 @@ file_new_cmd_callback (GtkWidget *widget,
{
Gimp *gimp;
GimpImage *gimage;
GtkWidget *dialog;
return_if_no_gimp (gimp, data);
/* if called from the image menu */
@ -105,7 +109,11 @@ file_new_cmd_callback (GtkWidget *widget,
else
gimage = NULL;
file_new_dialog_create (gimp, gimage, NULL);
dialog = gimp_dialog_factory_dialog_new (global_dialog_factory,
"gimp-file-new-dialog", -1);
if (dialog)
file_new_dialog_set (dialog, gimage, NULL);
}
void

View File

@ -76,19 +76,15 @@ static void file_new_create_image (FileNewDialog *dialog);
/* public functions */
void
file_new_dialog_create (Gimp *gimp,
GimpImage *gimage,
GimpTemplate *template)
GtkWidget *
file_new_dialog_new (Gimp *gimp)
{
FileNewDialog *dialog;
GtkWidget *main_vbox;
GtkWidget *table;
GtkWidget *optionmenu;
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (gimage == NULL || GIMP_IS_IMAGE (gimage));
g_return_if_fail (template == NULL || GIMP_IS_TEMPLATE (template));
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
dialog = g_new0 (FileNewDialog, 1);
@ -114,6 +110,10 @@ file_new_dialog_create (Gimp *gimp,
NULL);
g_object_set_data_full (G_OBJECT (dialog->dialog),
"gimp-file-new-dialog", dialog,
(GDestroyNotify) g_free);
gtk_window_set_resizable (GTK_WINDOW (dialog->dialog), FALSE);
/* vbox holding the rest of the dialog */
@ -154,6 +154,26 @@ file_new_dialog_create (Gimp *gimp,
G_CALLBACK (file_new_template_notify),
dialog);
gimp_size_entry_grab_focus (GIMP_SIZE_ENTRY (GIMP_TEMPLATE_EDITOR (dialog->editor)->size_se));
return dialog->dialog;
}
void
file_new_dialog_set (GtkWidget *widget,
GimpImage *gimage,
GimpTemplate *template)
{
FileNewDialog *dialog;
g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (gimage == NULL || GIMP_IS_IMAGE (gimage));
g_return_if_fail (template == NULL || GIMP_IS_TEMPLATE (template));
dialog = g_object_get_data (G_OBJECT (widget), "gimp-file-new-dialog");
g_return_if_fail (dialog != NULL);
if (template)
{
gimp_container_menu_select_item (GIMP_CONTAINER_MENU (dialog->template_menu),
@ -161,15 +181,11 @@ file_new_dialog_create (Gimp *gimp,
}
else
{
template = gimp_image_new_get_last_template (gimp, gimage);
template = gimp_image_new_get_last_template (dialog->gimp, gimage);
gimp_template_editor_set_template (GIMP_TEMPLATE_EDITOR (dialog->editor),
template);
g_object_unref (template);
}
gimp_size_entry_grab_focus (GIMP_SIZE_ENTRY (GIMP_TEMPLATE_EDITOR (dialog->editor)->size_se));
gtk_widget_show (dialog->dialog);
}
@ -191,7 +207,6 @@ file_new_cancel_callback (GtkWidget *widget,
FileNewDialog *dialog)
{
gtk_widget_destroy (dialog->dialog);
g_free (dialog);
}
static void
@ -299,15 +314,16 @@ static void
file_new_create_image (FileNewDialog *dialog)
{
GimpTemplate *template;
Gimp *gimp;
template =
gimp_template_editor_get_template (GIMP_TEMPLATE_EDITOR (dialog->editor));
gimp = dialog->gimp;
gtk_widget_destroy (dialog->dialog);
gimp_template_create_image (dialog->gimp, template);
gimp_image_new_set_last_template (dialog->gimp, template);
gimp_template_create_image (gimp, template);
gimp_image_new_set_last_template (gimp, template);
g_object_unref (template);
g_free (dialog);
}

View File

@ -20,9 +20,11 @@
#define __FILE_NEW_DIALOG_H__
void file_new_dialog_create (Gimp *gimp,
GimpImage *gimage,
GimpTemplate *template);
GtkWidget * file_new_dialog_new (Gimp *gimp);
void file_new_dialog_set (GtkWidget *widget,
GimpImage *gimage,
GimpTemplate *template);
#endif /* __FILE_NEW_DIALOG_H__ */

View File

@ -31,10 +31,12 @@
#include "core/gimplist.h"
#include "core/gimptemplate.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimptemplateeditor.h"
#include "widgets/gimptemplateview.h"
#include "widgets/gimpviewabledialog.h"
#include "dialogs.h"
#include "file-new-dialog.h"
#include "templates-commands.h"
@ -235,5 +237,11 @@ void
templates_file_new_dialog (Gimp *gimp,
GimpTemplate *template)
{
file_new_dialog_create (gimp, NULL, template);
GtkWidget *dialog;
dialog = gimp_dialog_factory_dialog_new (global_dialog_factory,
"gimp-file-new-dialog", -1);
if (dialog)
file_new_dialog_set (dialog, NULL, template);
}

View File

@ -145,11 +145,12 @@ gimp_brightness_contrast_tool_init (GimpBrightnessContrastTool *bc_tool)
image_map_tool = GIMP_IMAGE_MAP_TOOL (bc_tool);
image_map_tool->shell_desc = _("Adjust Brightness and Contrast");
image_map_tool->shell_identifier = "gimp-brightness-contrast-tool-dialog";
image_map_tool->shell_desc = _("Adjust Brightness and Contrast");
bc_tool->brightness = 0.0;
bc_tool->contrast = 0.0;
bc_tool->lut = gimp_lut_new ();
bc_tool->brightness = 0.0;
bc_tool->contrast = 0.0;
bc_tool->lut = gimp_lut_new ();
}
static void

View File

@ -157,10 +157,11 @@ gimp_color_balance_tool_init (GimpColorBalanceTool *cb_tool)
image_map_tool = GIMP_IMAGE_MAP_TOOL (cb_tool);
image_map_tool->shell_desc = _("Adjust Color Balance");
image_map_tool->shell_identifier = "gimp-color-balance-tool-dialog";
image_map_tool->shell_desc = _("Adjust Color Balance");
cb_tool->color_balance = g_new0 (ColorBalance, 1);
cb_tool->transfer_mode = GIMP_MIDTONES;
cb_tool->color_balance = g_new0 (ColorBalance, 1);
cb_tool->transfer_mode = GIMP_MIDTONES;
color_balance_init (cb_tool->color_balance);
}

View File

@ -36,12 +36,14 @@
#include "core/gimpimage-pick-color.h"
#include "core/gimptoolinfo.h"
#include "display/gimpdisplay.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimppaletteeditor.h"
#include "widgets/gimptoolbox-color-area.h"
#include "widgets/gimpviewabledialog.h"
#include "display/gimpdisplay.h"
#include "gui/dialogs.h"
#include "gui/info-dialog.h"
#include "gimpcolorpickeroptions.h"
@ -556,6 +558,10 @@ gimp_color_picker_tool_info_create (GimpDrawable *drawable)
gtk_widget_show (color_area);
gtk_widget_show (frame);
gimp_dialog_factory_add_foreign (global_dialog_factory,
"gimp-color-picker-tool-dialog",
info_dialog->shell);
return info_dialog;
}

View File

@ -27,6 +27,11 @@
#include "tools-types.h"
#ifdef __GNUC__
#warning FIXME #include "gui/gui-types.h"
#endif
#include "gui/gui-types.h"
#include "core/gimpdrawable.h"
#include "core/gimpimage.h"
#include "core/gimpimage-crop.h"
@ -38,12 +43,14 @@
#include "display/gimpdisplayshell.h"
#include "display/gimpdisplayshell-transform.h"
#include "gui/info-dialog.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpenummenu.h"
#include "widgets/gimpviewabledialog.h"
#include "widgets/gimpwidgets-utils.h"
#include "gui/dialogs.h"
#include "gui/info-dialog.h"
#include "gimpcropoptions.h"
#include "gimpcroptool.h"
#include "gimptoolcontrol.h"
@ -1073,6 +1080,10 @@ crop_info_create (GimpCropTool *crop)
gtk_box_pack_start (GTK_BOX (crop->crop_info->vbox), bbox, FALSE, FALSE, 0);
gtk_widget_show (bbox);
gimp_dialog_factory_add_foreign (global_dialog_factory,
"gimp-crop-tool-dialog",
crop->crop_info->shell);
}
static void

View File

@ -240,7 +240,8 @@ gimp_curves_tool_init (GimpCurvesTool *c_tool)
image_map_tool = GIMP_IMAGE_MAP_TOOL (c_tool);
image_map_tool->shell_desc = _("Adjust Color Curves");
image_map_tool->shell_identifier = "gimp-curves-tool-dialog";
image_map_tool->shell_desc = _("Adjust Color Curves");
c_tool->curves = g_new0 (Curves, 1);
c_tool->lut = gimp_lut_new ();

View File

@ -173,10 +173,11 @@ gimp_hue_saturation_tool_init (GimpHueSaturationTool *hs_tool)
image_map_tool = GIMP_IMAGE_MAP_TOOL (hs_tool);
image_map_tool->shell_desc = _("Adjust Hue / Lightness / Saturation");
image_map_tool->shell_identifier = "gimp-hue-saturation-tool-dialog";
image_map_tool->shell_desc = _("Adjust Hue / Lightness / Saturation");
hs_tool->hue_saturation = g_new0 (HueSaturation, 1);
hs_tool->hue_partition = GIMP_ALL_HUES;
hs_tool->hue_saturation = g_new0 (HueSaturation, 1);
hs_tool->hue_partition = GIMP_ALL_HUES;
hue_saturation_init (hs_tool->hue_saturation);
}

View File

@ -24,17 +24,25 @@
#include "tools-types.h"
#ifdef __GNUC__
#warning FIXME #include "gui/gui-types.h"
#endif
#include "gui/gui-types.h"
#include "core/gimpdrawable.h"
#include "core/gimpimage.h"
#include "core/gimpimagemap.h"
#include "core/gimptoolinfo.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpitemfactory.h"
#include "widgets/gimpviewabledialog.h"
#include "display/gimpdisplay.h"
#include "display/gimpdisplayshell.h"
#include "gui/dialogs.h"
#include "gimpimagemaptool.h"
#include "gimptoolcontrol.h"
#include "tool_manager.h"
@ -134,13 +142,14 @@ gimp_image_map_tool_init (GimpImageMapTool *image_map_tool)
gimp_tool_control_set_scroll_lock (tool->control, TRUE);
gimp_tool_control_set_preserve (tool->control, FALSE);
image_map_tool->drawable = NULL;
image_map_tool->image_map = NULL;
image_map_tool->preview = TRUE;
image_map_tool->drawable = NULL;
image_map_tool->image_map = NULL;
image_map_tool->preview = TRUE;
image_map_tool->shell_desc = NULL;
image_map_tool->shell = NULL;
image_map_tool->main_vbox = NULL;
image_map_tool->shell_identifier = NULL;
image_map_tool->shell_desc = NULL;
image_map_tool->shell = NULL;
image_map_tool->main_vbox = NULL;
}
void
@ -245,6 +254,12 @@ gimp_image_map_tool_initialize (GimpTool *tool,
gimp_image_map_tool_dialog (image_map_tool);
gtk_widget_show (vbox);
if (image_map_tool->shell_identifier)
gimp_dialog_factory_add_foreign (global_dialog_factory,
image_map_tool->shell_identifier,
image_map_tool->shell);
}
drawable = gimp_image_active_drawable (gdisp->gimage);

View File

@ -44,6 +44,7 @@ struct _GimpImageMapTool
gboolean preview;
/* the dialog */
const gchar *shell_identifier;
const gchar *shell_desc;
GtkWidget *shell;

View File

@ -241,7 +241,8 @@ gimp_levels_tool_init (GimpLevelsTool *l_tool)
image_map_tool = GIMP_IMAGE_MAP_TOOL (l_tool);
image_map_tool->shell_desc = _("Adjust Color Levels");
image_map_tool->shell_identifier = "gimp-levels-tool-dialog";
image_map_tool->shell_desc = _("Adjust Color Levels");
l_tool->lut = gimp_lut_new ();
l_tool->levels = g_new0 (Levels, 1);

View File

@ -142,8 +142,9 @@ gimp_perspective_tool_init (GimpPerspectiveTool *perspective_tool)
gimp_tool_control_set_tool_cursor (tool->control,
GIMP_PERSPECTIVE_TOOL_CURSOR);
tr_tool->shell_desc = _("Perspective Transform Information");
tr_tool->progress_text = _("Perspective...");
tr_tool->shell_identifier = "gimp-perspective-tool-dialog";
tr_tool->shell_desc = _("Perspective Transform Information");
tr_tool->progress_text = _("Perspective...");
}
static void

View File

@ -138,10 +138,11 @@ gimp_posterize_tool_init (GimpPosterizeTool *posterize_tool)
image_map_tool = GIMP_IMAGE_MAP_TOOL (posterize_tool);
image_map_tool->shell_desc = _("Posterize (Reduce Number of Colors)");
image_map_tool->shell_identifier = "gimp-posterize-tool-dialog";
image_map_tool->shell_desc = _("Posterize (Reduce Number of Colors)");
posterize_tool->levels = POSTERIZE_DEFAULT_LEVELS;
posterize_tool->lut = gimp_lut_new ();
posterize_tool->levels = POSTERIZE_DEFAULT_LEVELS;
posterize_tool->lut = gimp_lut_new ();
}
static void

View File

@ -166,8 +166,9 @@ gimp_rotate_tool_init (GimpRotateTool *rotate_tool)
gimp_tool_control_set_tool_cursor (tool->control, GIMP_ROTATE_TOOL_CURSOR);
tr_tool->shell_desc = _("Rotation Information");
tr_tool->progress_text = _("Rotating...");
tr_tool->shell_identifier = "gimp-rotate-tool-dialog";
tr_tool->shell_desc = _("Rotation Information");
tr_tool->progress_text = _("Rotating...");
}
static void

View File

@ -159,8 +159,9 @@ gimp_scale_tool_init (GimpScaleTool *scale_tool)
gimp_tool_control_set_tool_cursor (tool->control, GIMP_RESIZE_TOOL_CURSOR);
tr_tool->shell_desc = _("Scaling Information");
tr_tool->progress_text = _("Scaling...");
tr_tool->shell_identifier = "gimp-scale-tool-dialog";
tr_tool->shell_desc = _("Scaling Information");
tr_tool->progress_text = _("Scaling...");
}
static void

View File

@ -158,9 +158,10 @@ gimp_shear_tool_init (GimpShearTool *shear_tool)
gimp_tool_control_set_tool_cursor (tool->control, GIMP_SHEAR_TOOL_CURSOR);
tr_tool->use_center = FALSE;
tr_tool->shell_desc = _("Shearing Information");
tr_tool->progress_text = _("Shearing...");
tr_tool->use_center = FALSE;
tr_tool->shell_identifier = "gimp-shear-tool-dialog";
tr_tool->shell_desc = _("Shearing Information");
tr_tool->progress_text = _("Shearing...");
}
static void

View File

@ -154,7 +154,8 @@ gimp_threshold_tool_init (GimpThresholdTool *t_tool)
image_map_tool = GIMP_IMAGE_MAP_TOOL (t_tool);
image_map_tool->shell_desc = _("Apply Threshold");
image_map_tool->shell_identifier = "gimp-threshold-tool-dialog";
image_map_tool->shell_desc = _("Apply Threshold");
t_tool->threshold = g_new0 (Threshold, 1);
t_tool->hist = NULL;

View File

@ -133,11 +133,11 @@ gimp_tool_class_init (GimpToolClass *klass)
static void
gimp_tool_init (GimpTool *tool)
{
tool->ID = global_tool_ID++;
tool->control = GIMP_TOOL_CONTROL (g_object_new (GIMP_TYPE_TOOL_CONTROL,
NULL));
tool->gdisp = NULL;
tool->drawable = NULL;
tool->tool_info = NULL;
tool->ID = global_tool_ID++;
tool->control = g_object_new (GIMP_TYPE_TOOL_CONTROL, NULL);
tool->gdisp = NULL;
tool->drawable = NULL;
}
static void

View File

@ -46,14 +46,16 @@
#include "core/gimpmarshal.h"
#include "core/gimptoolinfo.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpviewabledialog.h"
#include "gui/info-dialog.h"
#include "display/gimpdisplay.h"
#include "display/gimpdisplay-foreach.h"
#include "display/gimpprogress.h"
#include "gui/dialogs.h"
#include "gui/info-dialog.h"
#include "gimptoolcontrol.h"
#include "gimptransformoptions.h"
#include "gimptransformtool.h"
@ -1131,6 +1133,12 @@ gimp_transform_tool_dialog (GimpTransformTool *tr_tool)
NULL);
GIMP_TRANSFORM_TOOL_GET_CLASS (tr_tool)->dialog (tr_tool);
if (tr_tool->shell_identifier)
gimp_dialog_factory_add_foreign (global_dialog_factory,
tr_tool->shell_identifier,
tr_tool->info_dialog->shell);
}
}

View File

@ -93,6 +93,7 @@ struct _GimpTransformTool
gboolean show_path;
/* transform info dialog */
const gchar *shell_identifier;
const gchar *shell_desc;
const gchar *progress_text;

View File

@ -75,6 +75,9 @@ static void gimp_dialog_factory_init (GimpDialogFactory *factory);
static void gimp_dialog_factory_dispose (GObject *object);
static void gimp_dialog_factory_finalize (GObject *object);
static gboolean gimp_dialog_factory_dialog_configure (GtkWidget *dialog,
GdkEventConfigure *cevent,
GimpDialogFactory *factory);
static void gimp_dialog_factories_save_foreach (gchar *name,
GimpDialogFactory *factory,
GimpConfigWriter *writer);
@ -743,9 +746,7 @@ gimp_dialog_factory_add_dialog (GimpDialogFactory *factory,
entry->identifier));
if (entry->session_managed)
{
gimp_dialog_factory_set_window_geometry (info->widget, info);
}
gimp_dialog_factory_set_window_geometry (info->widget, info);
break;
}
@ -816,6 +817,64 @@ gimp_dialog_factory_add_dialog (GimpDialogFactory *factory,
G_CALLBACK (gimp_dialog_factory_remove_dialog),
factory,
G_CONNECT_SWAPPED);
if (entry &&
entry->session_managed &&
GTK_WIDGET_TOPLEVEL (dialog))
{
g_signal_connect_object (dialog, "configure_event",
G_CALLBACK (gimp_dialog_factory_dialog_configure),
factory,
0);
}
}
void
gimp_dialog_factory_add_foreign (GimpDialogFactory *factory,
const gchar *identifier,
GtkWidget *dialog)
{
GimpDialogFactory *dialog_factory;
GimpDialogFactoryEntry *entry;
g_return_if_fail (GIMP_IS_DIALOG_FACTORY (factory));
g_return_if_fail (identifier != NULL);
g_return_if_fail (GTK_IS_WIDGET (dialog));
g_return_if_fail (GTK_WIDGET_TOPLEVEL (dialog));
dialog_factory = g_object_get_data (G_OBJECT (dialog),
"gimp-dialog-factory");
entry = g_object_get_data (G_OBJECT (dialog), "gimp-dialog-factory-entry");
if (dialog_factory || entry)
{
g_warning ("%s: dialog was created by a GimpDialogFactory",
G_GNUC_FUNCTION);
return;
}
entry = gimp_dialog_factory_find_entry (factory, identifier);
if (! entry)
{
g_warning ("%s: no entry registered for \"%s\"",
G_GNUC_FUNCTION, identifier);
return;
}
if (entry->new_func)
{
g_warning ("%s: entry for \"%s\" has a constructor (is not foreign)",
G_GNUC_FUNCTION, identifier);
return;
}
g_object_set_data (G_OBJECT (dialog), "gimp-dialog-factory",
factory);
g_object_set_data (G_OBJECT (dialog), "gimp-dialog-factory-entry",
entry);
gimp_dialog_factory_add_dialog (factory, dialog);
}
void
@ -998,6 +1057,58 @@ gimp_dialog_factories_unidle (void)
/* private functions */
static gboolean
gimp_dialog_factory_dialog_configure (GtkWidget *dialog,
GdkEventConfigure *cevent,
GimpDialogFactory *factory)
{
GimpDialogFactory *dialog_factory;
GimpDialogFactoryEntry *entry;
GimpSessionInfo *session_info;
GList *list;
if (! g_list_find (factory->open_dialogs, dialog))
{
g_warning ("%s: dialog not registered", G_GNUC_FUNCTION);
return FALSE;
}
dialog_factory = g_object_get_data (G_OBJECT (dialog),
"gimp-dialog-factory");
entry = g_object_get_data (G_OBJECT (dialog), "gimp-dialog-factory-entry");
if (! dialog_factory || ! entry)
{
g_warning ("%s: dialog was not created by a GimpDialogFactory",
G_GNUC_FUNCTION);
return FALSE;
}
if (dialog_factory != factory)
{
g_warning ("%s: dialog was created by a different GimpDialogFactory",
G_GNUC_FUNCTION);
return FALSE;
}
for (list = factory->session_infos; list; list = g_list_next (list))
{
session_info = (GimpSessionInfo *) list->data;
if (session_info->widget == dialog)
{
D (g_print ("%s: updating session info for \"%s\"\n",
G_GNUC_FUNCTION, entry->identifier));
gimp_dialog_factory_get_window_info (dialog, session_info);
break;
}
}
return FALSE;
}
static void
gimp_dialog_factories_save_foreach (gchar *name,
GimpDialogFactory *factory,

View File

@ -140,6 +140,9 @@ GtkWidget * gimp_dialog_factory_dock_new (GimpDialogFactory *factory);
void gimp_dialog_factory_add_dialog (GimpDialogFactory *factory,
GtkWidget *dialog);
void gimp_dialog_factory_add_foreign (GimpDialogFactory *factory,
const gchar *identifier,
GtkWidget *dialog);
void gimp_dialog_factory_remove_dialog (GimpDialogFactory *factory,
GtkWidget *dialog);