app: Add gimp_dockbook_add_from_dialog_factory()

This commit is contained in:
Martin Nordholts 2011-07-03 16:36:38 +02:00
parent a410716503
commit 91b7043aef
3 changed files with 52 additions and 28 deletions

View File

@ -49,34 +49,9 @@ dockable_add_tab_cmd_callback (GtkAction *action,
{
GimpDockbook *dockbook = GIMP_DOCKBOOK (data);
if (value)
{
GtkWidget *dockable;
GimpDock *dock;
gchar *identifier;
gchar *p;
identifier = g_strdup (value);
p = strchr (identifier, '|');
if (p)
*p = '\0';
dock = gimp_dockbook_get_dock (dockbook);
dockable = gimp_dialog_factory_dockable_new (gimp_dock_get_dialog_factory (dock),
dock,
identifier, -1);
g_free (identifier);
/* Maybe gimp_dialog_factory_dockable_new() returned an already
* existing singleton dockable, so check if it already is
* attached to a dockbook.
*/
if (dockable && ! gimp_dockable_get_dockbook (GIMP_DOCKABLE (dockable)))
gimp_dockbook_add (dockbook, GIMP_DOCKABLE (dockable), -1);
}
gimp_dockbook_add_from_dialog_factory (dockbook,
value /*identifiers*/,
-1);
}
void

View File

@ -31,6 +31,7 @@
#include "core/gimpcontext.h"
#include "core/gimpmarshal.h"
#include "gimpdialogfactory.h"
#include "gimpdnd.h"
#include "gimpdock.h"
#include "gimpdockable.h"
@ -989,6 +990,51 @@ gimp_dockbook_add (GimpDockbook *dockbook,
g_signal_emit (dockbook, dockbook_signals[DOCKABLE_ADDED], 0, dockable);
}
/**
* gimp_dockbook_add_from_dialog_factory:
* @dockbook: The #DockBook
* @identifiers: The dockable identifier(s)
* @position: The insert position
*
* Add a dockable from the dialog factory associated wth the dockbook.
**/
GtkWidget *
gimp_dockbook_add_from_dialog_factory (GimpDockbook *dockbook,
const gchar *identifiers,
gint position)
{
GtkWidget *dockable;
GimpDock *dock;
gchar *identifier;
gchar *p;
g_return_val_if_fail (GIMP_IS_DOCKBOOK (dockbook), NULL);
g_return_val_if_fail (identifiers != NULL, NULL);
identifier = g_strdup (identifiers);
p = strchr (identifier, '|');
if (p)
*p = '\0';
dock = gimp_dockbook_get_dock (dockbook);
dockable = gimp_dialog_factory_dockable_new (gimp_dock_get_dialog_factory (dock),
dock,
identifier, -1);
g_free (identifier);
/* Maybe gimp_dialog_factory_dockable_new() returned an already
* existing singleton dockable, so check if it already is
* attached to a dockbook.
*/
if (dockable && ! gimp_dockable_get_dockbook (GIMP_DOCKABLE (dockable)))
gimp_dockbook_add (dockbook, GIMP_DOCKABLE (dockable), position);
return dockable;
}
void
gimp_dockbook_remove (GimpDockbook *dockbook,
GimpDockable *dockable)

View File

@ -68,6 +68,9 @@ GimpUIManager * gimp_dockbook_get_ui_manager (GimpDockbook *dockbo
void gimp_dockbook_add (GimpDockbook *dockbook,
GimpDockable *dockable,
gint position);
GtkWidget * gimp_dockbook_add_from_dialog_factory (GimpDockbook *dockbook,
const gchar *identifiers,
gint position);
void gimp_dockbook_remove (GimpDockbook *dockbook,
GimpDockable *dockable);
void gimp_dockbook_update_with_context (GimpDockbook *dockbook,