First attempt to get the docks session managed:

2001-04-16  Michael Natterer  <mitch@gimp.org>

	First attempt to get the docks session managed:

	* app/gimprc.c: new gimprc type "new-session-info" which will soon
	replace the original one.

	* app/menus.c
	* app/gui/dialogs.c: s/_/-/g in all dialog identifier strings.

	* app/session.[ch]: call the dialog factory's session functions.

	* app/test_commands.c: use the dialog factory to create the tabs.

	* app/gui/dialogs-commands.c
	* app/gui/dialogs-constructors.[ch]: the constructors return widgets,
	not dockables now.

	* app/widgets/gimpdialogfactory.[ch]: maintain a list of dialog
	factories in the class struct. Added ugly code to do the GimpDock
	session management.

	* app/gui/gui.c
	* app/widgets/gimpdock.c: changed accordingly.
This commit is contained in:
Michael Natterer 2001-04-16 18:49:29 +00:00 committed by Michael Natterer
parent f0d16f693d
commit 059e7773ee
24 changed files with 890 additions and 634 deletions

View file

@ -1,3 +1,28 @@
2001-04-16 Michael Natterer <mitch@gimp.org>
First attempt to get the docks session managed:
* app/gimprc.c: new gimprc type "new-session-info" which will soon
replace the original one.
* app/menus.c
* app/gui/dialogs.c: s/_/-/g in all dialog identifier strings.
* app/session.[ch]: call the dialog factory's session functions.
* app/test_commands.c: use the dialog factory to create the tabs.
* app/gui/dialogs-commands.c
* app/gui/dialogs-constructors.[ch]: the constructors return widgets,
not dockables now.
* app/widgets/gimpdialogfactory.[ch]: maintain a list of dialog
factories in the class struct. Added ugly code to do the GimpDock
session management.
* app/gui/gui.c
* app/widgets/gimpdock.c: changed accordingly.
2001-04-15 Michael Natterer <mitch@gimp.org>
* app/gui/Makefile.am: new files:

View file

@ -24,6 +24,7 @@
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpdock.h"
#include "widgets/gimpdockable.h"
#include "widgets/gimpdockbook.h"
#include "dialogs-commands.h"
@ -40,13 +41,13 @@ dialogs_add_tab_cmd_callback (GtkWidget *widget,
if (dockbook && action)
{
GimpDockable *dockable;
GtkWidget *dockable;
dockable = gimp_dialog_factory_dialog_new (dockbook->dock->factory,
GUINT_TO_POINTER (action));
if (dockable)
gimp_dockbook_add (dockbook, dockable, -1);
gimp_dockbook_add (dockbook, GIMP_DOCKABLE (dockable), -1);
}
}

View file

@ -46,28 +46,28 @@
#include "libgimp/gimpintl.h"
static GtkWidget * dialogs_brush_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_pattern_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_gradient_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_palette_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_brush_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_pattern_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_gradient_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_palette_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GimpDockable * dialogs_dockable_new (GtkWidget *widget,
const gchar *name,
const gchar *short_name,
GimpDockableGetTabFunc get_tab_func);
static GtkWidget * dialogs_dockable_new (GtkWidget *widget,
const gchar *name,
const gchar *short_name,
GimpDockableGetTabFunc get_tab_func);
/* public functions */
GimpDockable *
GtkWidget *
dialogs_image_list_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -82,7 +82,7 @@ dialogs_image_list_view_new (GimpDialogFactory *factory)
NULL);
}
GimpDockable *
GtkWidget *
dialogs_brush_list_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -99,7 +99,7 @@ dialogs_brush_list_view_new (GimpDialogFactory *factory)
dialogs_brush_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_pattern_list_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -116,7 +116,7 @@ dialogs_pattern_list_view_new (GimpDialogFactory *factory)
dialogs_pattern_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_gradient_list_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -133,7 +133,7 @@ dialogs_gradient_list_view_new (GimpDialogFactory *factory)
dialogs_gradient_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_palette_list_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -150,7 +150,7 @@ dialogs_palette_list_view_new (GimpDialogFactory *factory)
dialogs_palette_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_tool_list_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -168,7 +168,7 @@ dialogs_tool_list_view_new (GimpDialogFactory *factory)
/* grid views */
GimpDockable *
GtkWidget *
dialogs_image_grid_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -183,7 +183,7 @@ dialogs_image_grid_view_new (GimpDialogFactory *factory)
NULL);
}
GimpDockable *
GtkWidget *
dialogs_brush_grid_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -200,7 +200,7 @@ dialogs_brush_grid_view_new (GimpDialogFactory *factory)
dialogs_brush_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_pattern_grid_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -217,7 +217,7 @@ dialogs_pattern_grid_view_new (GimpDialogFactory *factory)
dialogs_pattern_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_gradient_grid_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -234,7 +234,7 @@ dialogs_gradient_grid_view_new (GimpDialogFactory *factory)
dialogs_gradient_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_palette_grid_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -251,7 +251,7 @@ dialogs_palette_grid_view_new (GimpDialogFactory *factory)
dialogs_palette_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_tool_grid_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -365,7 +365,7 @@ dialogs_palette_tab_func (GimpDockable *dockable,
return preview;
}
GimpDockable *
GtkWidget *
dialogs_dockable_new (GtkWidget *widget,
const gchar *name,
const gchar *short_name,
@ -380,5 +380,5 @@ dialogs_dockable_new (GtkWidget *widget,
gtk_container_add (GTK_CONTAINER (dockable), widget);
gtk_widget_show (widget);
return GIMP_DOCKABLE (dockable);
return dockable;
}

View file

@ -20,19 +20,19 @@
#define __DIALOGS_CONSTRUCTORS_H__
GimpDockable * dialogs_image_list_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_brush_list_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_pattern_list_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_gradient_list_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_palette_list_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_tool_list_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_image_list_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_brush_list_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_pattern_list_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_gradient_list_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_palette_list_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_tool_list_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_image_grid_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_brush_grid_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_pattern_grid_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_gradient_grid_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_palette_grid_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_tool_grid_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_image_grid_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_brush_grid_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_pattern_grid_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_gradient_grid_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_palette_grid_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_tool_grid_view_new (GimpDialogFactory *factory);
#endif /* __DIALOGS_CONSTRUCTORS_H__ */

View file

@ -31,54 +31,76 @@
#include "gimpcontext.h"
GimpDialogFactory *global_dialog_factory = NULL;
GimpDialogFactory *global_dialog_factory = NULL;
GimpDialogFactory *global_dock_factory = NULL;
GimpDialogFactory *global_image_dock_factory = NULL;
void
dialogs_register (void)
dialogs_init (void)
{
GtkItemFactory *item_factory;
global_dialog_factory =
gimp_dialog_factory_new ("toplevel",
gimp_context_get_user (),
NULL);
item_factory = menus_get_dialogs_factory ();
global_dock_factory =
gimp_dialog_factory_new ("dock",
gimp_context_get_user (),
menus_get_dialogs_factory ());
global_dialog_factory = gimp_dialog_factory_new (gimp_context_get_user (),
item_factory);
global_image_dock_factory =
gimp_dialog_factory_new ("image-dock",
gimp_context_get_user (),
NULL);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:image_list",
gimp_dialog_factory_register (global_dock_factory,
"gimp:image-list",
dialogs_image_list_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:brush_list",
gimp_dialog_factory_register (global_dock_factory,
"gimp:brush-list",
dialogs_brush_list_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:pattern_list",
gimp_dialog_factory_register (global_dock_factory,
"gimp:pattern-list",
dialogs_pattern_list_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:gradient_list",
gimp_dialog_factory_register (global_dock_factory,
"gimp:gradient-list",
dialogs_gradient_list_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:palette_list",
gimp_dialog_factory_register (global_dock_factory,
"gimp:palette-list",
dialogs_palette_list_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:tool_list",
gimp_dialog_factory_register (global_dock_factory,
"gimp:tool-list",
dialogs_tool_list_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:image_grid",
gimp_dialog_factory_register (global_dock_factory,
"gimp:image-grid",
dialogs_image_grid_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:brush_grid",
gimp_dialog_factory_register (global_dock_factory,
"gimp:brush-grid",
dialogs_brush_grid_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:pattern_grid",
gimp_dialog_factory_register (global_dock_factory,
"gimp:pattern-grid",
dialogs_pattern_grid_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:gradient_grid",
gimp_dialog_factory_register (global_dock_factory,
"gimp:gradient-grid",
dialogs_gradient_grid_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:palette_grid",
gimp_dialog_factory_register (global_dock_factory,
"gimp:palette-grid",
dialogs_palette_grid_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:tool_grid",
gimp_dialog_factory_register (global_dock_factory,
"gimp:tool-grid",
dialogs_tool_grid_view_new);
}
void
dialogs_exit (void)
{
gtk_object_unref (GTK_OBJECT (global_dialog_factory));
gtk_object_unref (GTK_OBJECT (global_dock_factory));
gtk_object_unref (GTK_OBJECT (global_image_dock_factory));
global_dialog_factory = NULL;
global_dock_factory = NULL;
global_image_dock_factory = NULL;
}

View file

@ -21,9 +21,12 @@
extern GimpDialogFactory *global_dialog_factory;
extern GimpDialogFactory *global_dock_factory;
extern GimpDialogFactory *global_image_dock_factory;
void dialogs_register (void);
void dialogs_init (void);
void dialogs_exit (void);
#endif /* __DIALOGS_H__ */

View file

@ -40,6 +40,8 @@
#include "tools/gimptool.h"
#include "tools/gimptoolinfo.h"
#include "widgets/gimpdialogfactory.h"
#include "app_procs.h"
#include "appenv.h"
#include "color_notebook.h"
@ -92,6 +94,7 @@ typedef enum
TT_XMENUPATH,
TT_XDEVICE,
TT_XSESSIONINFO,
TT_XNEWSESSIONINFO,
TT_XCOLORHISTORY,
TT_XUNITINFO,
TT_XPARASITE,
@ -143,6 +146,7 @@ static gint parse_plug_in_def (gpointer val1p, gpointer val2p)
static gint parse_device (gpointer val1p, gpointer val2p);
static gint parse_menu_path (gpointer val1p, gpointer val2p);
static gint parse_session_info (gpointer val1p, gpointer val2p);
static gint parse_new_session_info (gpointer val1p, gpointer val2p);
static gint parse_unit_info (gpointer val1p, gpointer val2p);
static gint parse_parasite (gpointer val1p, gpointer val2p);
static gint parse_help_browser (gpointer val1p, gpointer val2p);
@ -327,6 +331,7 @@ static ParseFunc funcs[] =
{ "menu-path", TT_XMENUPATH, NULL, NULL },
{ "device", TT_XDEVICE, NULL, NULL },
{ "session-info", TT_XSESSIONINFO, NULL, NULL },
{ "new-session-info", TT_XNEWSESSIONINFO, NULL, NULL },
{ "color-history", TT_XCOLORHISTORY, NULL, NULL },
{ "unit-info", TT_XUNITINFO, NULL, NULL },
{ "monitor-xresolution", TT_DOUBLE, &monitor_xres, NULL },
@ -357,24 +362,6 @@ static gint n_funcs = (sizeof (funcs) /
sizeof (funcs[0]));
static SessionInfo *session_infos[] =
{
&toolbox_session_info,
&lc_dialog_session_info,
&info_dialog_session_info,
&tool_options_session_info,
&palette_session_info,
&brush_select_session_info,
&pattern_select_session_info,
&gradient_select_session_info,
&device_status_session_info,
&error_console_session_info,
&document_index_session_info
};
static gint n_session_infos = (sizeof (session_infos) /
sizeof (session_infos[0]));
static ParseInfo parse_info = { NULL };
static GList *unknown_tokens = NULL;
@ -907,6 +894,8 @@ parse_statement (void)
return parse_device (funcs[i].val1p, funcs[i].val2p);
case TT_XSESSIONINFO:
return parse_session_info (funcs[i].val1p, funcs[i].val2p);
case TT_XNEWSESSIONINFO:
return parse_new_session_info (funcs[i].val1p, funcs[i].val2p);
case TT_XCOLORHISTORY:
return parse_color_history (funcs[i].val1p, funcs[i].val2p);
case TT_XUNITINFO:
@ -2336,6 +2325,24 @@ parse_session_info (gpointer val1p,
gint token;
SessionInfo *info = NULL;
static SessionInfo *session_infos[] =
{
&toolbox_session_info,
&lc_dialog_session_info,
&info_dialog_session_info,
&tool_options_session_info,
&palette_session_info,
&brush_select_session_info,
&pattern_select_session_info,
&gradient_select_session_info,
&device_status_session_info,
&error_console_session_info,
&document_index_session_info
};
static gint n_session_infos = (sizeof (session_infos) /
sizeof (session_infos[0]));
token = peek_next_token ();
if (!token || (token != TOKEN_STRING))
return ERROR;
@ -2409,6 +2416,124 @@ parse_session_info (gpointer val1p,
return OK;
}
static gint
parse_new_session_info (gpointer val1p,
gpointer val2p)
{
gint token;
GimpDialogFactory *factory;
GimpSessionInfo *info = NULL;
token = peek_next_token ();
if (!token || (token != TOKEN_STRING))
goto error;
token = get_next_token ();
factory = gimp_dialog_factory_from_name (token_str);
if (! factory)
goto error;
token = peek_next_token ();
if (!token || (token != TOKEN_STRING))
goto error;
token = get_next_token ();
info = g_new0 (GimpSessionInfo, 1);
/* Parse options for session info */
while (peek_next_token () == TOKEN_LEFT_PAREN)
{
token = get_next_token ();
token = peek_next_token ();
if (!token || (token != TOKEN_SYMBOL))
goto error;
token = get_next_token ();
if (!strcmp ("position", token_sym))
{
token = peek_next_token ();
if (!token || (token != TOKEN_NUMBER))
goto error;
token = get_next_token ();
info->x = token_int;
token = peek_next_token ();
if (!token || (token != TOKEN_NUMBER))
goto error;
token = get_next_token ();
info->y = token_int;
}
else if (!strcmp ("size", token_sym))
{
token = peek_next_token ();
if (!token || (token != TOKEN_NUMBER))
goto error;
token = get_next_token ();
info->width = token_int;
token = peek_next_token ();
if (!token || (token != TOKEN_NUMBER))
goto error;
token = get_next_token ();
info->height = token_int;
}
else if (!strcmp ("open-on-exit", token_sym))
{
info->open = TRUE;
}
else if (!strcmp ("dock", token_sym))
{
while (peek_next_token () == TOKEN_LEFT_PAREN)
{
token = get_next_token ();
info->sub_dialogs = g_list_prepend (info->sub_dialogs, NULL);
while (peek_next_token () == TOKEN_STRING)
{
token = get_next_token ();
info->sub_dialogs->data =
g_list_append (info->sub_dialogs->data,
g_strdup (token_str));
}
token = peek_next_token ();
if (!token || (token != TOKEN_RIGHT_PAREN))
goto error;
token = get_next_token ();
}
info->sub_dialogs = g_list_reverse (info->sub_dialogs);
}
else
{
goto error;
}
token = peek_next_token ();
if (!token || (token != TOKEN_RIGHT_PAREN))
goto error;
token = get_next_token ();
}
if (!token || (token != TOKEN_RIGHT_PAREN))
goto error;
token = get_next_token ();
factory->session_infos = g_list_append (factory->session_infos, info);
return OK;
error:
g_free (info);
return ERROR;
}
static gint
parse_color_history (gpointer val1p,
gpointer val2p)
@ -2750,6 +2875,7 @@ value_to_str (gchar *name)
case TT_XMENUPATH:
case TT_XDEVICE:
case TT_XSESSIONINFO:
case TT_XNEWSESSIONINFO:
case TT_XCOLORHISTORY:
case TT_XUNITINFO:
case TT_XPARASITE:

View file

@ -24,6 +24,7 @@
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpdock.h"
#include "widgets/gimpdockable.h"
#include "widgets/gimpdockbook.h"
#include "dialogs-commands.h"
@ -40,13 +41,13 @@ dialogs_add_tab_cmd_callback (GtkWidget *widget,
if (dockbook && action)
{
GimpDockable *dockable;
GtkWidget *dockable;
dockable = gimp_dialog_factory_dialog_new (dockbook->dock->factory,
GUINT_TO_POINTER (action));
if (dockable)
gimp_dockbook_add (dockbook, dockable, -1);
gimp_dockbook_add (dockbook, GIMP_DOCKABLE (dockable), -1);
}
}

View file

@ -46,28 +46,28 @@
#include "libgimp/gimpintl.h"
static GtkWidget * dialogs_brush_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_pattern_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_gradient_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_palette_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_brush_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_pattern_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_gradient_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GtkWidget * dialogs_palette_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size);
static GimpDockable * dialogs_dockable_new (GtkWidget *widget,
const gchar *name,
const gchar *short_name,
GimpDockableGetTabFunc get_tab_func);
static GtkWidget * dialogs_dockable_new (GtkWidget *widget,
const gchar *name,
const gchar *short_name,
GimpDockableGetTabFunc get_tab_func);
/* public functions */
GimpDockable *
GtkWidget *
dialogs_image_list_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -82,7 +82,7 @@ dialogs_image_list_view_new (GimpDialogFactory *factory)
NULL);
}
GimpDockable *
GtkWidget *
dialogs_brush_list_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -99,7 +99,7 @@ dialogs_brush_list_view_new (GimpDialogFactory *factory)
dialogs_brush_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_pattern_list_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -116,7 +116,7 @@ dialogs_pattern_list_view_new (GimpDialogFactory *factory)
dialogs_pattern_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_gradient_list_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -133,7 +133,7 @@ dialogs_gradient_list_view_new (GimpDialogFactory *factory)
dialogs_gradient_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_palette_list_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -150,7 +150,7 @@ dialogs_palette_list_view_new (GimpDialogFactory *factory)
dialogs_palette_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_tool_list_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -168,7 +168,7 @@ dialogs_tool_list_view_new (GimpDialogFactory *factory)
/* grid views */
GimpDockable *
GtkWidget *
dialogs_image_grid_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -183,7 +183,7 @@ dialogs_image_grid_view_new (GimpDialogFactory *factory)
NULL);
}
GimpDockable *
GtkWidget *
dialogs_brush_grid_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -200,7 +200,7 @@ dialogs_brush_grid_view_new (GimpDialogFactory *factory)
dialogs_brush_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_pattern_grid_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -217,7 +217,7 @@ dialogs_pattern_grid_view_new (GimpDialogFactory *factory)
dialogs_pattern_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_gradient_grid_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -234,7 +234,7 @@ dialogs_gradient_grid_view_new (GimpDialogFactory *factory)
dialogs_gradient_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_palette_grid_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -251,7 +251,7 @@ dialogs_palette_grid_view_new (GimpDialogFactory *factory)
dialogs_palette_tab_func);
}
GimpDockable *
GtkWidget *
dialogs_tool_grid_view_new (GimpDialogFactory *factory)
{
GtkWidget *view;
@ -365,7 +365,7 @@ dialogs_palette_tab_func (GimpDockable *dockable,
return preview;
}
GimpDockable *
GtkWidget *
dialogs_dockable_new (GtkWidget *widget,
const gchar *name,
const gchar *short_name,
@ -380,5 +380,5 @@ dialogs_dockable_new (GtkWidget *widget,
gtk_container_add (GTK_CONTAINER (dockable), widget);
gtk_widget_show (widget);
return GIMP_DOCKABLE (dockable);
return dockable;
}

View file

@ -20,19 +20,19 @@
#define __DIALOGS_CONSTRUCTORS_H__
GimpDockable * dialogs_image_list_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_brush_list_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_pattern_list_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_gradient_list_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_palette_list_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_tool_list_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_image_list_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_brush_list_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_pattern_list_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_gradient_list_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_palette_list_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_tool_list_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_image_grid_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_brush_grid_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_pattern_grid_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_gradient_grid_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_palette_grid_view_new (GimpDialogFactory *factory);
GimpDockable * dialogs_tool_grid_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_image_grid_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_brush_grid_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_pattern_grid_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_gradient_grid_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_palette_grid_view_new (GimpDialogFactory *factory);
GtkWidget * dialogs_tool_grid_view_new (GimpDialogFactory *factory);
#endif /* __DIALOGS_CONSTRUCTORS_H__ */

View file

@ -31,54 +31,76 @@
#include "gimpcontext.h"
GimpDialogFactory *global_dialog_factory = NULL;
GimpDialogFactory *global_dialog_factory = NULL;
GimpDialogFactory *global_dock_factory = NULL;
GimpDialogFactory *global_image_dock_factory = NULL;
void
dialogs_register (void)
dialogs_init (void)
{
GtkItemFactory *item_factory;
global_dialog_factory =
gimp_dialog_factory_new ("toplevel",
gimp_context_get_user (),
NULL);
item_factory = menus_get_dialogs_factory ();
global_dock_factory =
gimp_dialog_factory_new ("dock",
gimp_context_get_user (),
menus_get_dialogs_factory ());
global_dialog_factory = gimp_dialog_factory_new (gimp_context_get_user (),
item_factory);
global_image_dock_factory =
gimp_dialog_factory_new ("image-dock",
gimp_context_get_user (),
NULL);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:image_list",
gimp_dialog_factory_register (global_dock_factory,
"gimp:image-list",
dialogs_image_list_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:brush_list",
gimp_dialog_factory_register (global_dock_factory,
"gimp:brush-list",
dialogs_brush_list_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:pattern_list",
gimp_dialog_factory_register (global_dock_factory,
"gimp:pattern-list",
dialogs_pattern_list_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:gradient_list",
gimp_dialog_factory_register (global_dock_factory,
"gimp:gradient-list",
dialogs_gradient_list_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:palette_list",
gimp_dialog_factory_register (global_dock_factory,
"gimp:palette-list",
dialogs_palette_list_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:tool_list",
gimp_dialog_factory_register (global_dock_factory,
"gimp:tool-list",
dialogs_tool_list_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:image_grid",
gimp_dialog_factory_register (global_dock_factory,
"gimp:image-grid",
dialogs_image_grid_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:brush_grid",
gimp_dialog_factory_register (global_dock_factory,
"gimp:brush-grid",
dialogs_brush_grid_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:pattern_grid",
gimp_dialog_factory_register (global_dock_factory,
"gimp:pattern-grid",
dialogs_pattern_grid_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:gradient_grid",
gimp_dialog_factory_register (global_dock_factory,
"gimp:gradient-grid",
dialogs_gradient_grid_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:palette_grid",
gimp_dialog_factory_register (global_dock_factory,
"gimp:palette-grid",
dialogs_palette_grid_view_new);
gimp_dialog_factory_register (global_dialog_factory,
"gimp:tool_grid",
gimp_dialog_factory_register (global_dock_factory,
"gimp:tool-grid",
dialogs_tool_grid_view_new);
}
void
dialogs_exit (void)
{
gtk_object_unref (GTK_OBJECT (global_dialog_factory));
gtk_object_unref (GTK_OBJECT (global_dock_factory));
gtk_object_unref (GTK_OBJECT (global_image_dock_factory));
global_dialog_factory = NULL;
global_dock_factory = NULL;
global_image_dock_factory = NULL;
}

View file

@ -21,9 +21,12 @@
extern GimpDialogFactory *global_dialog_factory;
extern GimpDialogFactory *global_dock_factory;
extern GimpDialogFactory *global_image_dock_factory;
void dialogs_register (void);
void dialogs_init (void);
void dialogs_exit (void);
#endif /* __DIALOGS_H__ */

View file

@ -59,7 +59,7 @@ gui_init (void)
gximage_init ();
render_setup (transparency_type, transparency_size);
dialogs_register ();
dialogs_init ();
devices_init ();
session_init ();
@ -120,6 +120,7 @@ gui_exit (void)
render_free ();
tool_options_dialog_free ();
save_sessionrc ();
dialogs_exit ();
}
void

View file

@ -834,44 +834,44 @@ static GimpItemFactoryEntry dialogs_entries[] =
NULL, NULL },
{ { N_("/Add Tab/Image List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:image_list") },
GPOINTER_TO_UINT ("gimp:image-list") },
NULL, NULL },
{ { N_("/Add Tab/Brush List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:brush_list") },
GPOINTER_TO_UINT ("gimp:brush-list") },
NULL, NULL },
{ { N_("/Add Tab/Pattern List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:pattern_list") },
GPOINTER_TO_UINT ("gimp:pattern-list") },
NULL, NULL },
{ { N_("/Add Tab/Gradient List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:gradient_list") },
GPOINTER_TO_UINT ("gimp:gradient-list") },
NULL, NULL },
{ { N_("/Add Tab/Palette List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:palette_list") },
GPOINTER_TO_UINT ("gimp:palette-list") },
NULL, NULL },
{ { N_("/Add Tab/Tool List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:tool_list") },
GPOINTER_TO_UINT ("gimp:tool-list") },
NULL, NULL },
{ { "/Add Tab/---", NULL, NULL, 0, "<Separator>" },
NULL, NULL },
{ { N_("/Add Tab/Image Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:image_grid") },
GPOINTER_TO_UINT ("gimp:image-grid") },
NULL, NULL },
{ { N_("/Add Tab/Brush Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:brush_grid") },
GPOINTER_TO_UINT ("gimp:brush-grid") },
NULL, NULL },
{ { N_("/Add Tab/Pattern Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:pattern_grid") },
GPOINTER_TO_UINT ("gimp:pattern-grid") },
NULL, NULL },
{ { N_("/Add Tab/Gradient Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:gradient_grid") },
GPOINTER_TO_UINT ("gimp:gradient-grid") },
NULL, NULL },
{ { N_("/Add Tab/Palette Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:palette_grid") },
GPOINTER_TO_UINT ("gimp:palette-grid") },
NULL, NULL },
{ { N_("/Add Tab/Tool Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:tool_grid") },
GPOINTER_TO_UINT ("gimp:tool-grid") },
NULL, NULL },
};
static guint n_dialogs_entries = (sizeof (dialogs_entries) /

View file

@ -49,6 +49,8 @@
#include "apptypes.h"
#include "widgets/gimpdialogfactory.h"
#include "app_procs.h"
#include "appenv.h"
#include "color_notebook.h"
@ -73,6 +75,7 @@ GList *session_info_updates = NULL;
/* global session variables */
SessionInfo toolbox_session_info =
{
"toolbox",
@ -262,6 +265,8 @@ save_sessionrc (void)
/* save window geometries */
g_list_foreach (session_info_updates, (GFunc) sessionrc_write_info, fp);
gimp_dialog_factories_session_save (fp);
/* save last tip shown */
fprintf (fp, "(last-tip-shown %d)\n\n", last_tip + 1);
@ -299,16 +304,20 @@ session_init (void)
void
session_restore (void)
{
{
/* open dialogs */
if (restore_session)
g_list_foreach (session_info_updates, (GFunc)session_open_dialog, NULL);
/* reset the open state in the session_infos */
g_list_foreach (session_info_updates, (GFunc)session_reset_open_state, NULL);
gimp_dialog_factories_session_restore ();
}
/* internal function */
/* private functions */
static void
sessionrc_write_info (SessionInfo *info,
FILE *fp)

View file

@ -32,6 +32,7 @@
#include "widgets/gimpcontainerlistview.h"
#include "widgets/gimpcontainergridview.h"
#include "widgets/gimpdatafactoryview.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpdock.h"
#include "widgets/gimpdockable.h"
#include "widgets/gimpdockbook.h"
@ -597,204 +598,47 @@ test_channel_list_cmd_callback (GtkWidget *widget,
gimp_context_get_user ());
}
static GtkWidget *
test_brush_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size)
{
GimpContext *context;
GtkWidget *preview;
context = gimp_context_get_user ();
preview =
gimp_preview_new_full (GIMP_VIEWABLE (gimp_context_get_brush (context)),
size, size, 1,
FALSE, FALSE, FALSE);
gtk_signal_connect_object_while_alive
(GTK_OBJECT (context),
"brush_changed",
GTK_SIGNAL_FUNC (gimp_preview_set_viewable),
GTK_OBJECT (preview));
return preview;
}
static GtkWidget *
test_pattern_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size)
{
GimpContext *context;
GtkWidget *preview;
context = gimp_context_get_user ();
preview =
gimp_preview_new_full (GIMP_VIEWABLE (gimp_context_get_pattern (context)),
size, size, 1,
FALSE, FALSE, FALSE);
gtk_signal_connect_object_while_alive
(GTK_OBJECT (context),
"pattern_changed",
GTK_SIGNAL_FUNC (gimp_preview_set_viewable),
GTK_OBJECT (preview));
return preview;
}
static GtkWidget *
test_gradient_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size)
{
GimpContext *context;
GtkWidget *preview;
context = gimp_context_get_user ();
preview =
gimp_preview_new_full (GIMP_VIEWABLE (gimp_context_get_gradient (context)),
size, size, 1,
FALSE, FALSE, FALSE);
gtk_signal_connect_object_while_alive
(GTK_OBJECT (context),
"gradient_changed",
GTK_SIGNAL_FUNC (gimp_preview_set_viewable),
GTK_OBJECT (preview));
return preview;
}
static GtkWidget *
test_palette_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size)
{
GimpContext *context;
GtkWidget *preview;
context = gimp_context_get_user ();
preview =
gimp_preview_new_full (GIMP_VIEWABLE (gimp_context_get_palette (context)),
size, size, 1,
FALSE, FALSE, FALSE);
gtk_signal_connect_object_while_alive
(GTK_OBJECT (context),
"palette_changed",
GTK_SIGNAL_FUNC (gimp_preview_set_viewable),
GTK_OBJECT (preview));
return preview;
}
void
test_dock_new (GimpViewType view_type,
GimpContext *context)
static void
test_dock_new (GimpViewType view_type)
{
GtkWidget *dock;
GtkWidget *dockbook;
GtkWidget *dockable;
GtkWidget *view;
dock = gimp_dock_new (global_dialog_factory);
dock = gimp_dock_new (global_dock_factory);
dockbook = gimp_dockbook_new ();
gimp_dock_add_book (GIMP_DOCK (dock), GIMP_DOCKBOOK (dockbook), 0);
dockable = gimp_dockable_new (view_type == GIMP_VIEW_TYPE_LIST ?
"Brush List" : "Brush Grid",
"Brushes",
test_brush_tab_func);
view = gimp_data_factory_view_new (view_type,
global_brush_factory,
NULL,
context,
32,
5, 3);
gtk_container_add (GTK_CONTAINER (dockable), view);
gtk_widget_show (view);
dockable = gimp_dialog_factory_dialog_new (global_dock_factory,
view_type == GIMP_VIEW_TYPE_LIST ?
"gimp:brush-list" :
"gimp:brush-grid");
gimp_dock_add (GIMP_DOCK (dock), GIMP_DOCKABLE (dockable), -1, -1);
dockable = gimp_dockable_new (view_type == GIMP_VIEW_TYPE_LIST ?
"Pattern List" : "Pattern Grid",
"Patterns",
test_pattern_tab_func);
view = gimp_data_factory_view_new (view_type,
global_pattern_factory,
NULL,
context,
32,
5, 3);
gtk_container_add (GTK_CONTAINER (dockable), view);
gtk_widget_show (view);
dockable = gimp_dialog_factory_dialog_new (global_dock_factory,
view_type == GIMP_VIEW_TYPE_LIST ?
"gimp:pattern-list" :
"gimp:pattern-grid");
gimp_dock_add (GIMP_DOCK (dock), GIMP_DOCKABLE (dockable), -1, -1);
dockable = gimp_dockable_new (view_type == GIMP_VIEW_TYPE_LIST ?
"Gradient List" : "Gradient Grid",
"Gradients",
test_gradient_tab_func);
view = gimp_data_factory_view_new (view_type,
global_gradient_factory,
NULL,
context,
32,
5, 3);
gtk_container_add (GTK_CONTAINER (dockable), view);
gtk_widget_show (view);
dockable = gimp_dialog_factory_dialog_new (global_dock_factory,
view_type == GIMP_VIEW_TYPE_LIST ?
"gimp:gradient-list" :
"gimp:gradient-grid");
gimp_dock_add (GIMP_DOCK (dock), GIMP_DOCKABLE (dockable), -1, -1);
dockable = gimp_dockable_new (view_type == GIMP_VIEW_TYPE_LIST ?
"Palette List" : "Palette Grid",
"Palettes",
test_palette_tab_func);
view = gimp_data_factory_view_new (view_type,
global_palette_factory,
NULL,
context,
32,
5, 3);
gtk_container_add (GTK_CONTAINER (dockable), view);
gtk_widget_show (view);
dockable = gimp_dialog_factory_dialog_new (global_dock_factory,
view_type == GIMP_VIEW_TYPE_LIST ?
"gimp:palette-list" :
"gimp:palette-grid");
gimp_dock_add (GIMP_DOCK (dock), GIMP_DOCKABLE (dockable), -1, -1);
switch (view_type)
{
case GIMP_VIEW_TYPE_LIST:
dockable = gimp_dockable_new ("Tool List", "Tools",
NULL);
view = gimp_container_list_view_new (global_tool_info_list,
context,
22,
5, 3);
break;
case GIMP_VIEW_TYPE_GRID:
dockable = gimp_dockable_new ("Tool Grid", "Tools",
NULL);
view = gimp_container_grid_view_new (global_tool_info_list,
context,
22,
5, 3);
break;
default:
g_assert_not_reached ();
}
gtk_container_add (GTK_CONTAINER (dockable), view);
gtk_widget_show (view);
dockable = gimp_dialog_factory_dialog_new (global_dock_factory,
view_type == GIMP_VIEW_TYPE_LIST ?
"gimp:tool-list" :
"gimp:tool-grid");
gimp_dock_add (GIMP_DOCK (dock), GIMP_DOCKABLE (dockable), -1, -1);
gtk_widget_show (dock);
@ -804,14 +648,12 @@ void
test_list_dock_cmd_callback (GtkWidget *widget,
gpointer client_data)
{
test_dock_new (GIMP_VIEW_TYPE_LIST,
gimp_context_get_user ());
test_dock_new (GIMP_VIEW_TYPE_LIST);
}
void
test_grid_dock_cmd_callback (GtkWidget *widget,
gpointer client_data)
{
test_dock_new (GIMP_VIEW_TYPE_GRID,
gimp_context_get_user ());
test_dock_new (GIMP_VIEW_TYPE_GRID);
}

View file

@ -834,44 +834,44 @@ static GimpItemFactoryEntry dialogs_entries[] =
NULL, NULL },
{ { N_("/Add Tab/Image List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:image_list") },
GPOINTER_TO_UINT ("gimp:image-list") },
NULL, NULL },
{ { N_("/Add Tab/Brush List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:brush_list") },
GPOINTER_TO_UINT ("gimp:brush-list") },
NULL, NULL },
{ { N_("/Add Tab/Pattern List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:pattern_list") },
GPOINTER_TO_UINT ("gimp:pattern-list") },
NULL, NULL },
{ { N_("/Add Tab/Gradient List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:gradient_list") },
GPOINTER_TO_UINT ("gimp:gradient-list") },
NULL, NULL },
{ { N_("/Add Tab/Palette List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:palette_list") },
GPOINTER_TO_UINT ("gimp:palette-list") },
NULL, NULL },
{ { N_("/Add Tab/Tool List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:tool_list") },
GPOINTER_TO_UINT ("gimp:tool-list") },
NULL, NULL },
{ { "/Add Tab/---", NULL, NULL, 0, "<Separator>" },
NULL, NULL },
{ { N_("/Add Tab/Image Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:image_grid") },
GPOINTER_TO_UINT ("gimp:image-grid") },
NULL, NULL },
{ { N_("/Add Tab/Brush Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:brush_grid") },
GPOINTER_TO_UINT ("gimp:brush-grid") },
NULL, NULL },
{ { N_("/Add Tab/Pattern Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:pattern_grid") },
GPOINTER_TO_UINT ("gimp:pattern-grid") },
NULL, NULL },
{ { N_("/Add Tab/Gradient Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:gradient_grid") },
GPOINTER_TO_UINT ("gimp:gradient-grid") },
NULL, NULL },
{ { N_("/Add Tab/Palette Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:palette_grid") },
GPOINTER_TO_UINT ("gimp:palette-grid") },
NULL, NULL },
{ { N_("/Add Tab/Tool Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:tool_grid") },
GPOINTER_TO_UINT ("gimp:tool-grid") },
NULL, NULL },
};
static guint n_dialogs_entries = (sizeof (dialogs_entries) /

View file

@ -834,44 +834,44 @@ static GimpItemFactoryEntry dialogs_entries[] =
NULL, NULL },
{ { N_("/Add Tab/Image List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:image_list") },
GPOINTER_TO_UINT ("gimp:image-list") },
NULL, NULL },
{ { N_("/Add Tab/Brush List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:brush_list") },
GPOINTER_TO_UINT ("gimp:brush-list") },
NULL, NULL },
{ { N_("/Add Tab/Pattern List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:pattern_list") },
GPOINTER_TO_UINT ("gimp:pattern-list") },
NULL, NULL },
{ { N_("/Add Tab/Gradient List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:gradient_list") },
GPOINTER_TO_UINT ("gimp:gradient-list") },
NULL, NULL },
{ { N_("/Add Tab/Palette List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:palette_list") },
GPOINTER_TO_UINT ("gimp:palette-list") },
NULL, NULL },
{ { N_("/Add Tab/Tool List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:tool_list") },
GPOINTER_TO_UINT ("gimp:tool-list") },
NULL, NULL },
{ { "/Add Tab/---", NULL, NULL, 0, "<Separator>" },
NULL, NULL },
{ { N_("/Add Tab/Image Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:image_grid") },
GPOINTER_TO_UINT ("gimp:image-grid") },
NULL, NULL },
{ { N_("/Add Tab/Brush Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:brush_grid") },
GPOINTER_TO_UINT ("gimp:brush-grid") },
NULL, NULL },
{ { N_("/Add Tab/Pattern Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:pattern_grid") },
GPOINTER_TO_UINT ("gimp:pattern-grid") },
NULL, NULL },
{ { N_("/Add Tab/Gradient Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:gradient_grid") },
GPOINTER_TO_UINT ("gimp:gradient-grid") },
NULL, NULL },
{ { N_("/Add Tab/Palette Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:palette_grid") },
GPOINTER_TO_UINT ("gimp:palette-grid") },
NULL, NULL },
{ { N_("/Add Tab/Tool Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:tool_grid") },
GPOINTER_TO_UINT ("gimp:tool-grid") },
NULL, NULL },
};
static guint n_dialogs_entries = (sizeof (dialogs_entries) /

View file

@ -49,6 +49,8 @@
#include "apptypes.h"
#include "widgets/gimpdialogfactory.h"
#include "app_procs.h"
#include "appenv.h"
#include "color_notebook.h"
@ -73,6 +75,7 @@ GList *session_info_updates = NULL;
/* global session variables */
SessionInfo toolbox_session_info =
{
"toolbox",
@ -262,6 +265,8 @@ save_sessionrc (void)
/* save window geometries */
g_list_foreach (session_info_updates, (GFunc) sessionrc_write_info, fp);
gimp_dialog_factories_session_save (fp);
/* save last tip shown */
fprintf (fp, "(last-tip-shown %d)\n\n", last_tip + 1);
@ -299,16 +304,20 @@ session_init (void)
void
session_restore (void)
{
{
/* open dialogs */
if (restore_session)
g_list_foreach (session_info_updates, (GFunc)session_open_dialog, NULL);
/* reset the open state in the session_infos */
g_list_foreach (session_info_updates, (GFunc)session_reset_open_state, NULL);
gimp_dialog_factories_session_restore ();
}
/* internal function */
/* private functions */
static void
sessionrc_write_info (SessionInfo *info,
FILE *fp)

View file

@ -32,6 +32,7 @@
#include "widgets/gimpcontainerlistview.h"
#include "widgets/gimpcontainergridview.h"
#include "widgets/gimpdatafactoryview.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpdock.h"
#include "widgets/gimpdockable.h"
#include "widgets/gimpdockbook.h"
@ -597,204 +598,47 @@ test_channel_list_cmd_callback (GtkWidget *widget,
gimp_context_get_user ());
}
static GtkWidget *
test_brush_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size)
{
GimpContext *context;
GtkWidget *preview;
context = gimp_context_get_user ();
preview =
gimp_preview_new_full (GIMP_VIEWABLE (gimp_context_get_brush (context)),
size, size, 1,
FALSE, FALSE, FALSE);
gtk_signal_connect_object_while_alive
(GTK_OBJECT (context),
"brush_changed",
GTK_SIGNAL_FUNC (gimp_preview_set_viewable),
GTK_OBJECT (preview));
return preview;
}
static GtkWidget *
test_pattern_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size)
{
GimpContext *context;
GtkWidget *preview;
context = gimp_context_get_user ();
preview =
gimp_preview_new_full (GIMP_VIEWABLE (gimp_context_get_pattern (context)),
size, size, 1,
FALSE, FALSE, FALSE);
gtk_signal_connect_object_while_alive
(GTK_OBJECT (context),
"pattern_changed",
GTK_SIGNAL_FUNC (gimp_preview_set_viewable),
GTK_OBJECT (preview));
return preview;
}
static GtkWidget *
test_gradient_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size)
{
GimpContext *context;
GtkWidget *preview;
context = gimp_context_get_user ();
preview =
gimp_preview_new_full (GIMP_VIEWABLE (gimp_context_get_gradient (context)),
size, size, 1,
FALSE, FALSE, FALSE);
gtk_signal_connect_object_while_alive
(GTK_OBJECT (context),
"gradient_changed",
GTK_SIGNAL_FUNC (gimp_preview_set_viewable),
GTK_OBJECT (preview));
return preview;
}
static GtkWidget *
test_palette_tab_func (GimpDockable *dockable,
GimpDockbook *dockbook,
gint size)
{
GimpContext *context;
GtkWidget *preview;
context = gimp_context_get_user ();
preview =
gimp_preview_new_full (GIMP_VIEWABLE (gimp_context_get_palette (context)),
size, size, 1,
FALSE, FALSE, FALSE);
gtk_signal_connect_object_while_alive
(GTK_OBJECT (context),
"palette_changed",
GTK_SIGNAL_FUNC (gimp_preview_set_viewable),
GTK_OBJECT (preview));
return preview;
}
void
test_dock_new (GimpViewType view_type,
GimpContext *context)
static void
test_dock_new (GimpViewType view_type)
{
GtkWidget *dock;
GtkWidget *dockbook;
GtkWidget *dockable;
GtkWidget *view;
dock = gimp_dock_new (global_dialog_factory);
dock = gimp_dock_new (global_dock_factory);
dockbook = gimp_dockbook_new ();
gimp_dock_add_book (GIMP_DOCK (dock), GIMP_DOCKBOOK (dockbook), 0);
dockable = gimp_dockable_new (view_type == GIMP_VIEW_TYPE_LIST ?
"Brush List" : "Brush Grid",
"Brushes",
test_brush_tab_func);
view = gimp_data_factory_view_new (view_type,
global_brush_factory,
NULL,
context,
32,
5, 3);
gtk_container_add (GTK_CONTAINER (dockable), view);
gtk_widget_show (view);
dockable = gimp_dialog_factory_dialog_new (global_dock_factory,
view_type == GIMP_VIEW_TYPE_LIST ?
"gimp:brush-list" :
"gimp:brush-grid");
gimp_dock_add (GIMP_DOCK (dock), GIMP_DOCKABLE (dockable), -1, -1);
dockable = gimp_dockable_new (view_type == GIMP_VIEW_TYPE_LIST ?
"Pattern List" : "Pattern Grid",
"Patterns",
test_pattern_tab_func);
view = gimp_data_factory_view_new (view_type,
global_pattern_factory,
NULL,
context,
32,
5, 3);
gtk_container_add (GTK_CONTAINER (dockable), view);
gtk_widget_show (view);
dockable = gimp_dialog_factory_dialog_new (global_dock_factory,
view_type == GIMP_VIEW_TYPE_LIST ?
"gimp:pattern-list" :
"gimp:pattern-grid");
gimp_dock_add (GIMP_DOCK (dock), GIMP_DOCKABLE (dockable), -1, -1);
dockable = gimp_dockable_new (view_type == GIMP_VIEW_TYPE_LIST ?
"Gradient List" : "Gradient Grid",
"Gradients",
test_gradient_tab_func);
view = gimp_data_factory_view_new (view_type,
global_gradient_factory,
NULL,
context,
32,
5, 3);
gtk_container_add (GTK_CONTAINER (dockable), view);
gtk_widget_show (view);
dockable = gimp_dialog_factory_dialog_new (global_dock_factory,
view_type == GIMP_VIEW_TYPE_LIST ?
"gimp:gradient-list" :
"gimp:gradient-grid");
gimp_dock_add (GIMP_DOCK (dock), GIMP_DOCKABLE (dockable), -1, -1);
dockable = gimp_dockable_new (view_type == GIMP_VIEW_TYPE_LIST ?
"Palette List" : "Palette Grid",
"Palettes",
test_palette_tab_func);
view = gimp_data_factory_view_new (view_type,
global_palette_factory,
NULL,
context,
32,
5, 3);
gtk_container_add (GTK_CONTAINER (dockable), view);
gtk_widget_show (view);
dockable = gimp_dialog_factory_dialog_new (global_dock_factory,
view_type == GIMP_VIEW_TYPE_LIST ?
"gimp:palette-list" :
"gimp:palette-grid");
gimp_dock_add (GIMP_DOCK (dock), GIMP_DOCKABLE (dockable), -1, -1);
switch (view_type)
{
case GIMP_VIEW_TYPE_LIST:
dockable = gimp_dockable_new ("Tool List", "Tools",
NULL);
view = gimp_container_list_view_new (global_tool_info_list,
context,
22,
5, 3);
break;
case GIMP_VIEW_TYPE_GRID:
dockable = gimp_dockable_new ("Tool Grid", "Tools",
NULL);
view = gimp_container_grid_view_new (global_tool_info_list,
context,
22,
5, 3);
break;
default:
g_assert_not_reached ();
}
gtk_container_add (GTK_CONTAINER (dockable), view);
gtk_widget_show (view);
dockable = gimp_dialog_factory_dialog_new (global_dock_factory,
view_type == GIMP_VIEW_TYPE_LIST ?
"gimp:tool-list" :
"gimp:tool-grid");
gimp_dock_add (GIMP_DOCK (dock), GIMP_DOCKABLE (dockable), -1, -1);
gtk_widget_show (dock);
@ -804,14 +648,12 @@ void
test_list_dock_cmd_callback (GtkWidget *widget,
gpointer client_data)
{
test_dock_new (GIMP_VIEW_TYPE_LIST,
gimp_context_get_user ());
test_dock_new (GIMP_VIEW_TYPE_LIST);
}
void
test_grid_dock_cmd_callback (GtkWidget *widget,
gpointer client_data)
{
test_dock_new (GIMP_VIEW_TYPE_GRID,
gimp_context_get_user ());
test_dock_new (GIMP_VIEW_TYPE_GRID);
}

View file

@ -26,19 +26,12 @@
#include "gimpdialogfactory.h"
#include "gimpdock.h"
#include "gimpdockbook.h"
#include "gimpdockable.h"
#include "gimpcontext.h"
typedef struct _GimpDialogFactoryEntry GimpDialogFactoryEntry;
struct _GimpDialogFactoryEntry
{
gchar *identifier;
GimpDialogNewFunc new_func;
};
static void gimp_dialog_factory_class_init (GimpDialogFactoryClass *klass);
static void gimp_dialog_factory_init (GimpDialogFactory *factory);
@ -80,9 +73,11 @@ gimp_dialog_factory_class_init (GimpDialogFactoryClass *klass)
object_class = (GtkObjectClass *) klass;
parent_class = gtk_type_class (GTK_TYPE_VBOX);
parent_class = gtk_type_class (GIMP_TYPE_OBJECT);
object_class->destroy = gimp_dialog_factory_destroy;
klass->factories = g_hash_table_new (g_str_hash, g_str_equal);
}
static void
@ -90,7 +85,7 @@ gimp_dialog_factory_init (GimpDialogFactory *factory)
{
factory->item_factory = NULL;
factory->registered_dialogs = NULL;
factory->open_docks = NULL;
factory->open_dialogs = NULL;
}
static void
@ -101,6 +96,9 @@ gimp_dialog_factory_destroy (GtkObject *object)
factory = GIMP_DIALOG_FACTORY (object);
g_hash_table_remove (GIMP_DIALOG_FACTORY_CLASS (object->klass)->factories,
GIMP_OBJECT (factory)->name);
for (list = factory->registered_dialogs; list; list = g_list_next (list))
{
GimpDialogFactoryEntry *entry;
@ -112,32 +110,68 @@ gimp_dialog_factory_destroy (GtkObject *object)
}
g_list_free (factory->registered_dialogs);
g_list_free (factory->open_docks);
g_list_free (factory->open_dialogs);
if (GTK_OBJECT_CLASS (parent_class)->destroy)
GTK_OBJECT_CLASS (parent_class)->destroy (object);
}
GimpDialogFactory *
gimp_dialog_factory_new (GimpContext *context,
gimp_dialog_factory_new (const gchar *name,
GimpContext *context,
GtkItemFactory *item_factory)
{
GimpDialogFactory *factory;
GimpDialogFactoryClass *factory_class;
GimpDialogFactory *factory;
g_return_val_if_fail (name != NULL, NULL);
g_return_val_if_fail (context != NULL, NULL);
g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL);
g_return_val_if_fail (item_factory != NULL, NULL);
g_return_val_if_fail (GTK_IS_ITEM_FACTORY (item_factory), NULL);
g_return_val_if_fail (! item_factory || GTK_IS_ITEM_FACTORY (item_factory),
NULL);
factory_class =
GIMP_DIALOG_FACTORY_CLASS (gtk_type_class (GIMP_TYPE_DIALOG_FACTORY));
if (g_hash_table_lookup (factory_class->factories, name))
{
g_warning ("%s(): dialog factory \"%s\" already exists",
G_GNUC_FUNCTION, name);
return NULL;
}
factory = gtk_type_new (GIMP_TYPE_DIALOG_FACTORY);
gimp_object_set_name (GIMP_OBJECT (factory), name);
g_hash_table_insert (factory_class->factories,
GIMP_OBJECT (factory)->name, factory);
factory->context = context;
factory->item_factory = item_factory;
return factory;
}
GimpDialogFactory *
gimp_dialog_factory_from_name (const gchar *name)
{
GimpDialogFactoryClass *factory_class;
GimpDialogFactory *factory;
g_return_val_if_fail (name != NULL, NULL);
factory_class =
GIMP_DIALOG_FACTORY_CLASS (gtk_type_class (GIMP_TYPE_DIALOG_FACTORY));
factory = (GimpDialogFactory *)
g_hash_table_lookup (factory_class->factories, name);
return factory;
}
void
gimp_dialog_factory_register (GimpDialogFactory *factory,
const gchar *identifier,
@ -159,7 +193,7 @@ gimp_dialog_factory_register (GimpDialogFactory *factory,
entry);
}
GimpDockable *
GtkWidget *
gimp_dialog_factory_dialog_new (GimpDialogFactory *factory,
const gchar *identifier)
{
@ -177,7 +211,16 @@ gimp_dialog_factory_dialog_new (GimpDialogFactory *factory,
if (! strcmp (identifier, entry->identifier))
{
return entry->new_func (factory);
GtkWidget *dialog;
dialog = entry->new_func (factory);
gtk_object_set_data (GTK_OBJECT (dialog), "gimp-dialog-factory",
factory);
gtk_object_set_data (GTK_OBJECT (dialog), "gimp-dialog-factory-entry",
entry);
return dialog;
}
}
@ -185,37 +228,306 @@ gimp_dialog_factory_dialog_new (GimpDialogFactory *factory,
}
void
gimp_dialog_factory_add_dock (GimpDialogFactory *factory,
GimpDock *dock)
gimp_dialog_factory_add_toplevel (GimpDialogFactory *factory,
GtkWidget *toplevel)
{
GimpDialogFactory *toplevel_factory;
GimpDialogFactoryEntry *entry;
GimpSessionInfo *info;
GList *list;
g_return_if_fail (factory != NULL);
g_return_if_fail (GIMP_IS_DIALOG_FACTORY (factory));
g_return_if_fail (dock != NULL);
g_return_if_fail (GIMP_IS_DOCK (dock));
g_return_if_fail (toplevel != NULL);
g_return_if_fail (GTK_IS_WIDGET (toplevel));
if (g_list_find (factory->open_docks, dock))
if (g_list_find (factory->open_dialogs, toplevel))
{
g_warning ("%s(): dock already registered", G_GNUC_FUNCTION);
g_warning ("%s(): dialog already registered", G_GNUC_FUNCTION);
return;
}
factory->open_docks = g_list_prepend (factory->open_docks, dock);
toplevel_factory = gtk_object_get_data (GTK_OBJECT (toplevel),
"gimp-dialog-factory");
if (toplevel_factory && toplevel_factory != factory)
{
g_warning ("%s(): dialog was created by a different GimpDialogFactory",
G_GNUC_FUNCTION);
return;
}
entry = gtk_object_get_data (GTK_OBJECT (toplevel),
"gimp-dialog-factory-entry");
if (entry) /* toplevel was created by this factory */
{
for (list = factory->session_infos; list; list = g_list_next (list))
{
info = (GimpSessionInfo *) list->data;
if (info->toplevel_entry == entry)
{
info->open = TRUE;
info->widget = toplevel;
break;
}
}
if (! list) /* didn't find a session info */
{
info = g_new0 (GimpSessionInfo, 1);
info->open = TRUE;
info->widget = toplevel;
info->toplevel_entry = entry;
factory->session_infos = g_list_append (factory->session_infos, info);
}
}
else /* toplevel is a dock */
{
for (list = factory->session_infos; list; list = g_list_next (list))
{
info = (GimpSessionInfo *) list->data;
if (! info->widget) /* take the first empty slot */
{
info->open = TRUE;
info->widget = toplevel;
info->x = CLAMP (info->x, 0, gdk_screen_width () - 32);
info->y = CLAMP (info->y, 0, gdk_screen_height () - 32);
if (info->x && info->y)
gtk_widget_set_uposition (toplevel, info->x, info->y);
break;
}
}
if (! list) /* didn't find a session info */
{
info = g_new0 (GimpSessionInfo, 1);
info->open = TRUE;
info->widget = toplevel;
factory->session_infos = g_list_append (factory->session_infos, info);
}
}
factory->open_dialogs = g_list_prepend (factory->open_dialogs, toplevel);
}
void
gimp_dialog_factory_remove_dock (GimpDialogFactory *factory,
GimpDock *dock)
gimp_dialog_factory_remove_toplevel (GimpDialogFactory *factory,
GtkWidget *toplevel)
{
GimpDialogFactory *toplevel_factory;
GimpSessionInfo *session_info;
GList *list;
g_return_if_fail (factory != NULL);
g_return_if_fail (GIMP_IS_DIALOG_FACTORY (factory));
g_return_if_fail (dock != NULL);
g_return_if_fail (GIMP_IS_DOCK (dock));
g_return_if_fail (toplevel != NULL);
g_return_if_fail (GTK_IS_WIDGET (toplevel));
if (! g_list_find (factory->open_docks, dock))
if (! g_list_find (factory->open_dialogs, toplevel))
{
g_warning ("%s(): dock not registered", G_GNUC_FUNCTION);
g_warning ("%s(): dialog not registered", G_GNUC_FUNCTION);
return;
}
factory->open_docks = g_list_remove (factory->open_docks, dock);
factory->open_dialogs = g_list_remove (factory->open_dialogs, toplevel);
toplevel_factory = gtk_object_get_data (GTK_OBJECT (toplevel),
"gimp-dialog-factory");
if (toplevel_factory && toplevel_factory != factory)
{
g_warning ("%s(): dialog was created by a different GimpDialogFactory",
G_GNUC_FUNCTION);
return;
}
for (list = factory->session_infos; list; list = g_list_next (list))
{
session_info = (GimpSessionInfo *) list->data;
if (session_info->widget == toplevel)
{
session_info->open = FALSE;
session_info->widget = NULL;
break;
}
}
}
static void
gimp_dialog_factories_session_save_foreach (gchar *name,
GimpDialogFactory *factory,
FILE *fp)
{
GList *list;
for (list = factory->session_infos; list; list = g_list_next (list))
{
GimpSessionInfo *info;
info = (GimpSessionInfo *) list->data;
if (info->widget)
{
gdk_window_get_root_origin (info->widget->window,
&info->x, &info->y);
gdk_window_get_size (info->widget->window,
&info->width, &info->height);
info->open = GTK_WIDGET_VISIBLE (info->widget);
}
fprintf (fp, "(new-session-info \"%s\" \"%s\"\n",
name,
info->toplevel_entry ? info->toplevel_entry->identifier : "dock");
fprintf (fp, " (position %d %d)\n", info->x, info->y);
fprintf (fp, " (size %d %d)", info->width, info->height);
if (info->open)
fprintf (fp, "\n (open-on-exit)");
if (! info->toplevel_entry && info->widget)
{
GimpDock *dock;
GList *books;
dock = GIMP_DOCK (info->widget);
fprintf (fp, "\n (dock ");
for (books = dock->dockbooks; books; books = g_list_next (books))
{
GimpDockbook *dockbook;
GList *pages;
dockbook = (GimpDockbook *) books->data;
fprintf (fp, "(");
for (pages = gtk_container_children (GTK_CONTAINER (dockbook));
pages;
pages = g_list_next (pages))
{
GimpDockable *dockable;
GimpDialogFactoryEntry *entry;
dockable = (GimpDockable *) pages->data;
entry = gtk_object_get_data (GTK_OBJECT (dockable),
"gimp-dialog-factory-entry");
if (entry)
fprintf (fp, "\"%s\"%s",
entry->identifier, pages->next ? " ": "");
}
fprintf (fp, ")%s", books->next ? "\n " : "");
}
fprintf (fp, ")");
}
fprintf (fp, ")\n\n");
}
}
void
gimp_dialog_factories_session_save (FILE *file)
{
GimpDialogFactoryClass *factory_class;
g_return_if_fail (file != NULL);
factory_class =
GIMP_DIALOG_FACTORY_CLASS (gtk_type_class (GIMP_TYPE_DIALOG_FACTORY));
g_hash_table_foreach (factory_class->factories,
(GHFunc) gimp_dialog_factories_session_save_foreach,
file);
}
static void
gimp_dialog_factories_session_restore_foreach (gchar *name,
GimpDialogFactory *factory,
gpointer data)
{
GList *list;
for (list = factory->session_infos; list; list = g_list_next (list))
{
GimpSessionInfo *info;
info = (GimpSessionInfo *) list->data;
if (! info->open)
continue;
if (info->toplevel_entry)
{
}
else
{
GimpDock *dock;
GList *books;
dock = GIMP_DOCK (gimp_dock_new (factory));
while ((books = info->sub_dialogs))
{
GimpDockbook *dockbook;
GList *pages;
dockbook = GIMP_DOCKBOOK (gimp_dockbook_new ());
gimp_dock_add_book (dock, dockbook, -1);
while ((pages = (GList *) books->data))
{
GtkWidget *dockable;
gchar *identifier;
identifier = (gchar *) pages->data;
dockable = gimp_dialog_factory_dialog_new (factory,
identifier);
if (dockable)
gimp_dockbook_add (dockbook, GIMP_DOCKABLE (dockable), -1);
books->data = g_list_remove (books->data, identifier);
g_free (identifier);
}
info->sub_dialogs = g_list_remove (info->sub_dialogs,
info->sub_dialogs->data);
}
gtk_widget_show (GTK_WIDGET (dock));
}
}
}
void
gimp_dialog_factories_session_restore (void)
{
GimpDialogFactoryClass *factory_class;
factory_class =
GIMP_DIALOG_FACTORY_CLASS (gtk_type_class (GIMP_TYPE_DIALOG_FACTORY));
g_hash_table_foreach (factory_class->factories,
(GHFunc) gimp_dialog_factories_session_restore_foreach,
NULL);
}

View file

@ -23,10 +23,39 @@
#define __GIMP_DIALOG_FACTORY_H__
#include <stdio.h>
#include "gimpobject.h"
typedef GimpDockable * (* GimpDialogNewFunc) (GimpDialogFactory *factory);
typedef GtkWidget * (* GimpDialogNewFunc) (GimpDialogFactory *factory);
typedef struct _GimpDialogFactoryEntry GimpDialogFactoryEntry;
struct _GimpDialogFactoryEntry
{
gchar *identifier;
GimpDialogNewFunc new_func;
};
typedef struct _GimpSessionInfo GimpSessionInfo;
struct _GimpSessionInfo
{
gint x;
gint y;
gint width;
gint height;
gboolean open;
GtkWidget *widget;
/* only one of these is valid */
GimpDialogFactoryEntry *toplevel_entry;
GList *sub_dialogs; /* GList of GLists of entries */
};
#define GIMP_TYPE_DIALOG_FACTORY (gimp_dialog_factory_get_type ())
@ -47,30 +76,39 @@ struct _GimpDialogFactory
/*< private >*/
GList *registered_dialogs;
GList *session_infos;
GList *open_docks;
GList *open_dialogs;
};
struct _GimpDialogFactoryClass
{
GimpObjectClass parent_class;
GHashTable *factories;
};
GtkType gimp_dialog_factory_get_type (void);
GimpDialogFactory * gimp_dialog_factory_new (GimpContext *context,
GtkItemFactory *item_factory);
GtkType gimp_dialog_factory_get_type (void);
GimpDialogFactory * gimp_dialog_factory_new (const gchar *name,
GimpContext *context,
GtkItemFactory *item_factory);
void gimp_dialog_factory_register (GimpDialogFactory *factory,
GimpDialogFactory * gimp_dialog_factory_from_name (const gchar *name);
void gimp_dialog_factory_register (GimpDialogFactory *factory,
const gchar *identifier,
GimpDialogNewFunc new_func);
GimpDockable * gimp_dialog_factory_dialog_new (GimpDialogFactory *factory,
GtkWidget * gimp_dialog_factory_dialog_new (GimpDialogFactory *factory,
const gchar *identifier);
void gimp_dialog_factory_add_dock (GimpDialogFactory *factory,
GimpDock *dock);
void gimp_dialog_factory_remove_dock (GimpDialogFactory *factory,
GimpDock *dock);
void gimp_dialog_factory_add_toplevel (GimpDialogFactory *factory,
GtkWidget *toplevel);
void gimp_dialog_factory_remove_toplevel (GimpDialogFactory *factory,
GtkWidget *toplevel);
void gimp_dialog_factories_session_save (FILE *file);
void gimp_dialog_factories_session_restore (void);
#endif /* __GIMP_DIALOG_FACTORY_H__ */

View file

@ -136,7 +136,7 @@ gimp_dock_destroy (GtkObject *object)
dock = GIMP_DOCK (object);
gimp_dialog_factory_remove_dock (dock->factory, dock);
gimp_dialog_factory_remove_toplevel (dock->factory, GTK_WIDGET (dock));
g_list_free (dock->dockbooks);
@ -156,7 +156,7 @@ gimp_dock_new (GimpDialogFactory *factory)
dock->factory = factory;
gimp_dialog_factory_add_dock (dock->factory, dock);
gimp_dialog_factory_add_toplevel (dock->factory, GTK_WIDGET (dock));
return GTK_WIDGET (dock);
}

View file

@ -834,44 +834,44 @@ static GimpItemFactoryEntry dialogs_entries[] =
NULL, NULL },
{ { N_("/Add Tab/Image List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:image_list") },
GPOINTER_TO_UINT ("gimp:image-list") },
NULL, NULL },
{ { N_("/Add Tab/Brush List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:brush_list") },
GPOINTER_TO_UINT ("gimp:brush-list") },
NULL, NULL },
{ { N_("/Add Tab/Pattern List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:pattern_list") },
GPOINTER_TO_UINT ("gimp:pattern-list") },
NULL, NULL },
{ { N_("/Add Tab/Gradient List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:gradient_list") },
GPOINTER_TO_UINT ("gimp:gradient-list") },
NULL, NULL },
{ { N_("/Add Tab/Palette List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:palette_list") },
GPOINTER_TO_UINT ("gimp:palette-list") },
NULL, NULL },
{ { N_("/Add Tab/Tool List..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:tool_list") },
GPOINTER_TO_UINT ("gimp:tool-list") },
NULL, NULL },
{ { "/Add Tab/---", NULL, NULL, 0, "<Separator>" },
NULL, NULL },
{ { N_("/Add Tab/Image Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:image_grid") },
GPOINTER_TO_UINT ("gimp:image-grid") },
NULL, NULL },
{ { N_("/Add Tab/Brush Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:brush_grid") },
GPOINTER_TO_UINT ("gimp:brush-grid") },
NULL, NULL },
{ { N_("/Add Tab/Pattern Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:pattern_grid") },
GPOINTER_TO_UINT ("gimp:pattern-grid") },
NULL, NULL },
{ { N_("/Add Tab/Gradient Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:gradient_grid") },
GPOINTER_TO_UINT ("gimp:gradient-grid") },
NULL, NULL },
{ { N_("/Add Tab/Palette Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:palette_grid") },
GPOINTER_TO_UINT ("gimp:palette-grid") },
NULL, NULL },
{ { N_("/Add Tab/Tool Grid..."), NULL, dialogs_add_tab_cmd_callback,
GPOINTER_TO_UINT ("gimp:tool_grid") },
GPOINTER_TO_UINT ("gimp:tool-grid") },
NULL, NULL },
};
static guint n_dialogs_entries = (sizeof (dialogs_entries) /