mirror of https://github.com/GNOME/gimp.git
app: Introduce gimp_dialog_factory_set_put_in_dockables()
Change gimp_dialog_factory_set_constructor() to gimp_dialog_factory_set_put_in_dockables() order to narrow the interface a bit. We can make both gimp_dialog_factory_set_put_in_dockables() and the GimpDialogConstructor typedef internal this way. The main reason we do this is because we want to get rid of a dependency on factory->p->new_dock_func. Eventually we want to construct docks just like we construct other widgets in the factory, so new_dock_func will be removed. Also improve readability of code such as making it explicit that gimp_dialog_factory_put_in_dockable_constructor() is just an extended version of gimp_dialog_factory_default_constructor().
This commit is contained in:
parent
73445668a6
commit
deb07e812d
|
@ -266,35 +266,6 @@ dialogs_dock_window_new (GimpDialogFactory *factory,
|
||||||
/* dockables */
|
/* dockables */
|
||||||
/***************/
|
/***************/
|
||||||
|
|
||||||
/***** the dockable constructor *****/
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
dialogs_dockable_constructor (GimpDialogFactory *factory,
|
|
||||||
GimpDialogFactoryEntry *entry,
|
|
||||||
GimpContext *context,
|
|
||||||
gint view_size)
|
|
||||||
{
|
|
||||||
GtkWidget *dockable = NULL;
|
|
||||||
GtkWidget *widget;
|
|
||||||
|
|
||||||
widget = entry->new_func (factory, context, view_size);
|
|
||||||
|
|
||||||
if (widget)
|
|
||||||
{
|
|
||||||
dockable = gimp_dockable_new (entry->name, entry->blurb,
|
|
||||||
entry->stock_id, entry->help_id);
|
|
||||||
gtk_container_add (GTK_CONTAINER (dockable), widget);
|
|
||||||
gtk_widget_show (widget);
|
|
||||||
|
|
||||||
/* EEK */
|
|
||||||
g_object_set_data (G_OBJECT (dockable), "gimp-dialog-identifier",
|
|
||||||
entry->identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
return dockable;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***** singleton dialogs *****/
|
/***** singleton dialogs *****/
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
|
|
|
@ -84,11 +84,6 @@ GtkWidget * dialogs_dock_window_new (GimpDialogFactory *factory,
|
||||||
|
|
||||||
/* dockables */
|
/* dockables */
|
||||||
|
|
||||||
GtkWidget * dialogs_dockable_constructor (GimpDialogFactory *factory,
|
|
||||||
GimpDialogFactoryEntry *entry,
|
|
||||||
GimpContext *context,
|
|
||||||
gint view_size);
|
|
||||||
|
|
||||||
GtkWidget * dialogs_tool_options_new (GimpDialogFactory *factory,
|
GtkWidget * dialogs_tool_options_new (GimpDialogFactory *factory,
|
||||||
GimpContext *context,
|
GimpContext *context,
|
||||||
gint view_size);
|
gint view_size);
|
||||||
|
|
|
@ -328,8 +328,7 @@ dialogs_init (Gimp *gimp,
|
||||||
menu_factory,
|
menu_factory,
|
||||||
dialogs_toolbox_new,
|
dialogs_toolbox_new,
|
||||||
TRUE);
|
TRUE);
|
||||||
gimp_dialog_factory_set_constructor (global_toolbox_factory,
|
gimp_dialog_factory_set_put_in_dockables (global_toolbox_factory, TRUE);
|
||||||
dialogs_dockable_constructor);
|
|
||||||
gimp_dialog_factory_set_dock_window_func (global_toolbox_factory,
|
gimp_dialog_factory_set_dock_window_func (global_toolbox_factory,
|
||||||
dialogs_toolbox_dock_window_new);
|
dialogs_toolbox_dock_window_new);
|
||||||
|
|
||||||
|
@ -339,8 +338,7 @@ dialogs_init (Gimp *gimp,
|
||||||
menu_factory,
|
menu_factory,
|
||||||
dialogs_dock_new,
|
dialogs_dock_new,
|
||||||
TRUE);
|
TRUE);
|
||||||
gimp_dialog_factory_set_constructor (global_dock_window_factory,
|
gimp_dialog_factory_set_put_in_dockables (global_dock_window_factory, TRUE);
|
||||||
dialogs_dockable_constructor);
|
|
||||||
gimp_dialog_factory_set_dock_window_func (global_dock_window_factory,
|
gimp_dialog_factory_set_dock_window_func (global_dock_window_factory,
|
||||||
dialogs_dock_window_new);
|
dialogs_dock_window_new);
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,10 @@ enum
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef GtkWidget * (* GimpDialogConstructor) (GimpDialogFactory *factory,
|
||||||
|
GimpDialogFactoryEntry *entry,
|
||||||
|
GimpContext *context,
|
||||||
|
gint view_size);
|
||||||
|
|
||||||
struct _GimpDialogFactoryPrivate
|
struct _GimpDialogFactoryPrivate
|
||||||
{
|
{
|
||||||
|
@ -84,6 +88,11 @@ static GtkWidget * gimp_dialog_factory_default_constructor (GimpDialogFactory
|
||||||
GimpDialogFactoryEntry *entry,
|
GimpDialogFactoryEntry *entry,
|
||||||
GimpContext *context,
|
GimpContext *context,
|
||||||
gint view_size);
|
gint view_size);
|
||||||
|
static GtkWidget * gimp_dialog_factory_put_in_dockable_constructor
|
||||||
|
(GimpDialogFactory *factory,
|
||||||
|
GimpDialogFactoryEntry *entry,
|
||||||
|
GimpContext *context,
|
||||||
|
gint view_size);
|
||||||
static void gimp_dialog_factory_set_widget_data (GtkWidget *dialog,
|
static void gimp_dialog_factory_set_widget_data (GtkWidget *dialog,
|
||||||
GimpDialogFactory *factory,
|
GimpDialogFactory *factory,
|
||||||
GimpDialogFactoryEntry *entry);
|
GimpDialogFactoryEntry *entry);
|
||||||
|
@ -319,15 +328,14 @@ gimp_dialog_factory_from_name (const gchar *name)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gimp_dialog_factory_set_constructor (GimpDialogFactory *factory,
|
gimp_dialog_factory_set_put_in_dockables (GimpDialogFactory *factory,
|
||||||
GimpDialogConstructor constructor)
|
gboolean put_in_dockables)
|
||||||
{
|
{
|
||||||
g_return_if_fail (GIMP_IS_DIALOG_FACTORY (factory));
|
g_return_if_fail (GIMP_IS_DIALOG_FACTORY (factory));
|
||||||
|
|
||||||
if (! constructor)
|
factory->p->constructor = (put_in_dockables ?
|
||||||
constructor = gimp_dialog_factory_default_constructor;
|
gimp_dialog_factory_put_in_dockable_constructor :
|
||||||
|
gimp_dialog_factory_default_constructor);
|
||||||
factory->p->constructor = constructor;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -502,18 +510,23 @@ gimp_dialog_factory_dialog_new_internal (GimpDialogFactory *factory,
|
||||||
/* create the dialog if it was not found */
|
/* create the dialog if it was not found */
|
||||||
if (! dialog)
|
if (! dialog)
|
||||||
{
|
{
|
||||||
GtkWidget *dock = NULL;
|
GtkWidget *dock = NULL;
|
||||||
|
gboolean dialog_will_be_dockable = FALSE;
|
||||||
|
gboolean called_from_raise = FALSE;
|
||||||
|
|
||||||
/* If the dialog will be a dockable (factory->p->new_dock_func) and
|
dialog_will_be_dockable = (factory->p->constructor ==
|
||||||
* we are called from gimp_dialog_factory_dialog_raise() (! context),
|
gimp_dialog_factory_put_in_dockable_constructor);
|
||||||
* create a new dock _before_ creating the dialog.
|
called_from_raise = (context == NULL);
|
||||||
* We do this because the new dockable needs to be created in it's
|
|
||||||
* dock's context.
|
if (dialog_will_be_dockable && called_from_raise)
|
||||||
*/
|
|
||||||
if (factory->p->new_dock_func && ! context)
|
|
||||||
{
|
{
|
||||||
GtkWidget *dockbook;
|
GtkWidget *dockbook;
|
||||||
|
|
||||||
|
/* It doesn't make sense to have a dockable without a dock
|
||||||
|
* so create one. Create a new dock _before_ creating the
|
||||||
|
* dialog. We do this because the new dockable needs to be
|
||||||
|
* created in its dock's context.
|
||||||
|
*/
|
||||||
dock = gimp_dialog_factory_dock_with_window_new (factory, screen);
|
dock = gimp_dialog_factory_dock_with_window_new (factory, screen);
|
||||||
dockbook = gimp_dockbook_new (factory->p->menu_factory);
|
dockbook = gimp_dockbook_new (factory->p->menu_factory);
|
||||||
|
|
||||||
|
@ -1391,6 +1404,46 @@ gimp_dialog_factory_default_constructor (GimpDialogFactory *factory,
|
||||||
return entry->new_func (factory, context, view_size);
|
return entry->new_func (factory, context, view_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gimp_dialog_factory_put_in_dockable_constructor:
|
||||||
|
* @factory:
|
||||||
|
* @entry:
|
||||||
|
* @context:
|
||||||
|
* @view_size:
|
||||||
|
*
|
||||||
|
* Put the created widget inside a #GimpDockable.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
**/
|
||||||
|
static GtkWidget *
|
||||||
|
gimp_dialog_factory_put_in_dockable_constructor (GimpDialogFactory *factory,
|
||||||
|
GimpDialogFactoryEntry *entry,
|
||||||
|
GimpContext *context,
|
||||||
|
gint view_size)
|
||||||
|
{
|
||||||
|
GtkWidget *dockable = NULL;
|
||||||
|
GtkWidget *widget;
|
||||||
|
|
||||||
|
widget = gimp_dialog_factory_default_constructor (factory,
|
||||||
|
entry,
|
||||||
|
context,
|
||||||
|
view_size);
|
||||||
|
|
||||||
|
if (widget)
|
||||||
|
{
|
||||||
|
dockable = gimp_dockable_new (entry->name, entry->blurb,
|
||||||
|
entry->stock_id, entry->help_id);
|
||||||
|
gtk_container_add (GTK_CONTAINER (dockable), widget);
|
||||||
|
gtk_widget_show (widget);
|
||||||
|
|
||||||
|
/* EEK */
|
||||||
|
g_object_set_data (G_OBJECT (dockable), "gimp-dialog-identifier",
|
||||||
|
entry->identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
return dockable;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_dialog_factory_set_widget_data (GtkWidget *dialog,
|
gimp_dialog_factory_set_widget_data (GtkWidget *dialog,
|
||||||
GimpDialogFactory *factory,
|
GimpDialogFactory *factory,
|
||||||
|
|
|
@ -40,10 +40,6 @@ typedef GtkWidget * (* GimpDialogNewFunc) (GimpDialogFactory *factory,
|
||||||
typedef GtkWidget * (* GimpDialogNewDockFunc) (GimpDialogFactory *factory,
|
typedef GtkWidget * (* GimpDialogNewDockFunc) (GimpDialogFactory *factory,
|
||||||
GimpContext *context,
|
GimpContext *context,
|
||||||
GimpUIManager *ui_manager);
|
GimpUIManager *ui_manager);
|
||||||
typedef GtkWidget * (* GimpDialogConstructor) (GimpDialogFactory *factory,
|
|
||||||
GimpDialogFactoryEntry *entry,
|
|
||||||
GimpContext *context,
|
|
||||||
gint view_size);
|
|
||||||
|
|
||||||
|
|
||||||
struct _GimpDialogFactoryEntry
|
struct _GimpDialogFactoryEntry
|
||||||
|
@ -114,8 +110,8 @@ GimpDialogFactory * gimp_dialog_factory_new (const gchar
|
||||||
GimpDialogNewDockFunc new_dock_func,
|
GimpDialogNewDockFunc new_dock_func,
|
||||||
gboolean toggle_visibility);
|
gboolean toggle_visibility);
|
||||||
GimpDialogFactory * gimp_dialog_factory_from_name (const gchar *name);
|
GimpDialogFactory * gimp_dialog_factory_from_name (const gchar *name);
|
||||||
void gimp_dialog_factory_set_constructor (GimpDialogFactory *factory,
|
void gimp_dialog_factory_set_put_in_dockables (GimpDialogFactory *factory,
|
||||||
GimpDialogConstructor constructor);
|
gboolean put_in_dockables);
|
||||||
void gimp_dialog_factory_set_dock_window_func (GimpDialogFactory *factory,
|
void gimp_dialog_factory_set_dock_window_func (GimpDialogFactory *factory,
|
||||||
GimpDialogNewFunc new_dock_window_func);
|
GimpDialogNewFunc new_dock_window_func);
|
||||||
void gimp_dialog_factory_register_entry (GimpDialogFactory *factory,
|
void gimp_dialog_factory_register_entry (GimpDialogFactory *factory,
|
||||||
|
|
Loading…
Reference in New Issue