app: Add GimpSessionManaged

Add a GimpSessionManaged interface to generalize
gimp_session_info_aux_get_list() and gimp_session_info_aux_set_list().
This commit is contained in:
Martin Nordholts
2011-05-30 08:19:53 +02:00
parent da18c1114b
commit 6fc587c643
14 changed files with 322 additions and 135 deletions

1
NEWS
View File

@ -29,6 +29,7 @@ Core:
a simple API and takes it out of GimpDisplayShell a simple API and takes it out of GimpDisplayShell
- Add a GimpIdTable utility class - Add a GimpIdTable utility class
- Add a GimpDockContainer interface - Add a GimpDockContainer interface
- Add a GimpSessionManaged interface
GEGL: GEGL:

View File

@ -40,6 +40,7 @@
#include "widgets/gimpmenufactory.h" #include "widgets/gimpmenufactory.h"
#include "widgets/gimpsessioninfo.h" #include "widgets/gimpsessioninfo.h"
#include "widgets/gimpsessioninfo-aux.h" #include "widgets/gimpsessioninfo-aux.h"
#include "widgets/gimpsessionmanaged.h"
#include "widgets/gimptoolbox.h" #include "widgets/gimptoolbox.h"
#include "dialogs.h" #include "dialogs.h"
@ -441,8 +442,8 @@ dialogs_restore_dialog (GimpDialogFactory *factory,
GIMP_DIALOG_VISIBILITY_HIDDEN : GIMP_DIALOG_VISIBILITY_HIDDEN :
GIMP_DIALOG_VISIBILITY_VISIBLE)); GIMP_DIALOG_VISIBILITY_VISIBLE));
if (dialog && gimp_session_info_get_aux_info (info)) if (GIMP_IS_SESSION_MANAGED (dialog) && gimp_session_info_get_aux_info (info))
gimp_session_info_aux_set_list (dialog, gimp_session_managed_set_aux_info (GIMP_SESSION_MANAGED (dialog),
gimp_session_info_get_aux_info (info)); gimp_session_info_get_aux_info (info));
return dialog; return dialog;

View File

@ -296,6 +296,8 @@ libappwidgets_a_sources = \
gimpsessioninfo-dockable.c \ gimpsessioninfo-dockable.c \
gimpsessioninfo-dockable.h \ gimpsessioninfo-dockable.h \
gimpsessioninfo-private.h \ gimpsessioninfo-private.h \
gimpsessionmanaged.c \
gimpsessionmanaged.h \
gimpsettingsbox.c \ gimpsettingsbox.c \
gimpsettingsbox.h \ gimpsettingsbox.h \
gimpsettingseditor.c \ gimpsettingseditor.c \

View File

@ -42,6 +42,7 @@
#include "gimphelp-ids.h" #include "gimphelp-ids.h"
#include "gimppanedbox.h" #include "gimppanedbox.h"
#include "gimpsessioninfo-aux.h" #include "gimpsessioninfo-aux.h"
#include "gimpsessionmanaged.h"
#include "gimpuimanager.h" #include "gimpuimanager.h"
#include "gimpwidgets-utils.h" #include "gimpwidgets-utils.h"
@ -80,6 +81,9 @@ struct _GimpDockablePrivate
}; };
static void gimp_dockable_session_managed_iface_init
(GimpSessionManagedInterface
*iface);
static void gimp_dockable_dispose (GObject *object); static void gimp_dockable_dispose (GObject *object);
static void gimp_dockable_set_property (GObject *object, static void gimp_dockable_set_property (GObject *object,
guint property_id, guint property_id,
@ -114,13 +118,21 @@ static void gimp_dockable_style_set (GtkWidget *widget,
static void gimp_dockable_add (GtkContainer *container, static void gimp_dockable_add (GtkContainer *container,
GtkWidget *widget); GtkWidget *widget);
static GType gimp_dockable_child_type (GtkContainer *container); static GType gimp_dockable_child_type (GtkContainer *container);
static GList * gimp_dockable_get_aux_info (GimpSessionManaged
*session_managed);
static void gimp_dockable_set_aux_info (GimpSessionManaged
*session_managed,
GList *aux_info);
static GimpTabStyle static GimpTabStyle
gimp_dockable_convert_tab_style (GimpDockable *dockable, gimp_dockable_convert_tab_style (GimpDockable *dockable,
GimpTabStyle tab_style); GimpTabStyle tab_style);
static gboolean gimp_dockable_blink_timeout (GimpDockable *dockable); static gboolean gimp_dockable_blink_timeout (GimpDockable *dockable);
G_DEFINE_TYPE (GimpDockable, gimp_dockable, GTK_TYPE_BIN) G_DEFINE_TYPE_WITH_CODE (GimpDockable, gimp_dockable, GTK_TYPE_BIN,
G_IMPLEMENT_INTERFACE (GIMP_TYPE_SESSION_MANAGED,
gimp_dockable_session_managed_iface_init))
#define parent_class gimp_dockable_parent_class #define parent_class gimp_dockable_parent_class
@ -181,6 +193,13 @@ gimp_dockable_init (GimpDockable *dockable)
GDK_ACTION_MOVE); GDK_ACTION_MOVE);
} }
static void
gimp_dockable_session_managed_iface_init (GimpSessionManagedInterface *iface)
{
iface->get_aux_info = gimp_dockable_get_aux_info;
iface->set_aux_info = gimp_dockable_set_aux_info;
}
static void static void
gimp_dockable_dispose (GObject *object) gimp_dockable_dispose (GObject *object)
{ {
@ -672,36 +691,6 @@ gimp_dockable_get_drag_handler (GimpDockable *dockable)
return dockable->p->drag_handler; return dockable->p->drag_handler;
} }
void
gimp_dockable_set_aux_info (GimpDockable *dockable,
GList *aux_info)
{
GtkWidget *child;
g_return_if_fail (GIMP_IS_DOCKABLE (dockable));
child = gtk_bin_get_child (GTK_BIN (dockable));
if (child)
gimp_docked_set_aux_info (GIMP_DOCKED (child), aux_info);
}
GList *
gimp_dockable_get_aux_info (GimpDockable *dockable)
{
GtkWidget *child;
g_return_val_if_fail (GIMP_IS_DOCKABLE (dockable), NULL);
child = gtk_bin_get_child (GTK_BIN (dockable));
if (child)
return gimp_docked_get_aux_info (GIMP_DOCKED (child));
return NULL;
}
void void
gimp_dockable_set_locked (GimpDockable *dockable, gimp_dockable_set_locked (GimpDockable *dockable,
gboolean lock) gboolean lock)
@ -928,6 +917,41 @@ gimp_dockable_blink_cancel (GimpDockable *dockable)
/* private functions */ /* private functions */
static GList *
gimp_dockable_get_aux_info (GimpSessionManaged *session_managed)
{
GimpDockable *dockable;
GtkWidget *child;
g_return_val_if_fail (GIMP_IS_DOCKABLE (session_managed), NULL);
dockable = GIMP_DOCKABLE (session_managed);
child = gtk_bin_get_child (GTK_BIN (dockable));
if (child)
return gimp_docked_get_aux_info (GIMP_DOCKED (child));
return NULL;
}
static void
gimp_dockable_set_aux_info (GimpSessionManaged *session_managed,
GList *aux_info)
{
GimpDockable *dockable;
GtkWidget *child;
g_return_if_fail (GIMP_IS_DOCKABLE (session_managed));
dockable = GIMP_DOCKABLE (session_managed);
child = gtk_bin_get_child (GTK_BIN (dockable));
if (child)
gimp_docked_set_aux_info (GIMP_DOCKED (child), aux_info);
}
static GimpTabStyle static GimpTabStyle
gimp_dockable_convert_tab_style (GimpDockable *dockable, gimp_dockable_convert_tab_style (GimpDockable *dockable,
GimpTabStyle tab_style) GimpTabStyle tab_style)

View File

@ -82,10 +82,6 @@ void gimp_dockable_get_drag_pos (GimpDockable *dockable,
gint *drag_y); gint *drag_y);
GimpPanedBox * gimp_dockable_get_drag_handler (GimpDockable *dockable); GimpPanedBox * gimp_dockable_get_drag_handler (GimpDockable *dockable);
void gimp_dockable_set_aux_info (GimpDockable *dockable,
GList *aux_info);
GList * gimp_dockable_get_aux_info (GimpDockable *dockable);
void gimp_dockable_set_locked (GimpDockable *dockable, void gimp_dockable_set_locked (GimpDockable *dockable,
gboolean lock); gboolean lock);
gboolean gimp_dockable_is_locked (GimpDockable *dockable); gboolean gimp_dockable_is_locked (GimpDockable *dockable);

View File

@ -54,6 +54,7 @@
#include "gimpmenufactory.h" #include "gimpmenufactory.h"
#include "gimpsessioninfo-aux.h" #include "gimpsessioninfo-aux.h"
#include "gimpsessioninfo.h" #include "gimpsessioninfo.h"
#include "gimpsessionmanaged.h"
#include "gimptoolbox.h" #include "gimptoolbox.h"
#include "gimpuimanager.h" #include "gimpuimanager.h"
#include "gimpwidgets-utils.h" #include "gimpwidgets-utils.h"
@ -110,6 +111,7 @@ struct _GimpDockWindowPrivate
static void gimp_dock_window_dock_container_iface_init (GimpDockContainerInterface *iface); static void gimp_dock_window_dock_container_iface_init (GimpDockContainerInterface *iface);
static void gimp_dock_window_session_managed_iface_init(GimpSessionManagedInterface*iface);
static void gimp_dock_window_constructed (GObject *object); static void gimp_dock_window_constructed (GObject *object);
static void gimp_dock_window_dispose (GObject *object); static void gimp_dock_window_dispose (GObject *object);
static void gimp_dock_window_finalize (GObject *object); static void gimp_dock_window_finalize (GObject *object);
@ -130,6 +132,9 @@ static GimpUIManager * gimp_dock_window_get_ui_manager (GimpDockConta
static void gimp_dock_window_add_dock_from_session (GimpDockContainer *dock_container, static void gimp_dock_window_add_dock_from_session (GimpDockContainer *dock_container,
GimpDock *dock, GimpDock *dock,
GimpSessionInfoDock *dock_info); GimpSessionInfoDock *dock_info);
static GList * gimp_dock_window_get_aux_info (GimpSessionManaged *session_managed);
static void gimp_dock_window_set_aux_info (GimpSessionManaged *session_managed,
GList *aux_info);
static GimpAlignmentType static GimpAlignmentType
gimp_dock_window_get_dock_side (GimpDockContainer *dock_container, gimp_dock_window_get_dock_side (GimpDockContainer *dock_container,
GimpDock *dock); GimpDock *dock);
@ -162,7 +167,9 @@ static void gimp_dock_window_auto_clicked (GtkWidget
G_DEFINE_TYPE_WITH_CODE (GimpDockWindow, gimp_dock_window, GIMP_TYPE_WINDOW, G_DEFINE_TYPE_WITH_CODE (GimpDockWindow, gimp_dock_window, GIMP_TYPE_WINDOW,
G_IMPLEMENT_INTERFACE (GIMP_TYPE_DOCK_CONTAINER, G_IMPLEMENT_INTERFACE (GIMP_TYPE_DOCK_CONTAINER,
gimp_dock_window_dock_container_iface_init)) gimp_dock_window_dock_container_iface_init)
G_IMPLEMENT_INTERFACE (GIMP_TYPE_SESSION_MANAGED,
gimp_dock_window_session_managed_iface_init))
#define parent_class gimp_dock_window_parent_class #define parent_class gimp_dock_window_parent_class
@ -272,6 +279,13 @@ gimp_dock_window_dock_container_iface_init (GimpDockContainerInterface *iface)
iface->get_dock_side = gimp_dock_window_get_dock_side; iface->get_dock_side = gimp_dock_window_get_dock_side;
} }
static void
gimp_dock_window_session_managed_iface_init (GimpSessionManagedInterface *iface)
{
iface->get_aux_info = gimp_dock_window_get_aux_info;
iface->set_aux_info = gimp_dock_window_set_aux_info;
}
static void static void
gimp_dock_window_constructed (GObject *object) gimp_dock_window_constructed (GObject *object)
{ {
@ -725,6 +739,74 @@ gimp_dock_window_add_dock_from_session (GimpDockContainer *dock_container,
-1 /*index*/); -1 /*index*/);
} }
static GList *
gimp_dock_window_get_aux_info (GimpSessionManaged *session_managed)
{
GimpDockWindow *dock_window;
GList *aux_info = NULL;
GimpSessionInfoAux *aux;
g_return_val_if_fail (GIMP_IS_DOCK_WINDOW (session_managed), NULL);
dock_window = GIMP_DOCK_WINDOW (session_managed);
if (dock_window->p->allow_dockbook_absence)
{
/* Assume it is the toolbox; it does not have aux info */
return NULL;
}
g_return_val_if_fail (GIMP_IS_DOCK_WINDOW (dock_window), NULL);
aux = gimp_session_info_aux_new (AUX_INFO_SHOW_IMAGE_MENU,
dock_window->p->show_image_menu ?
"true" : "false");
aux_info = g_list_append (aux_info, aux);
aux = gimp_session_info_aux_new (AUX_INFO_FOLLOW_ACTIVE_IMAGE,
dock_window->p->auto_follow_active ?
"true" : "false");
aux_info = g_list_append (aux_info, aux);
return aux_info;
}
static void
gimp_dock_window_set_aux_info (GimpSessionManaged *session_managed,
GList *aux_info)
{
GimpDockWindow *dock_window;
GList *list;
gboolean menu_shown;
gboolean auto_follow;
g_return_if_fail (GIMP_IS_DOCK_WINDOW (session_managed));
dock_window = GIMP_DOCK_WINDOW (session_managed);
menu_shown = dock_window->p->show_image_menu;
auto_follow = dock_window->p->auto_follow_active;
for (list = aux_info; list; list = g_list_next (list))
{
GimpSessionInfoAux *aux = list->data;
if (! strcmp (aux->name, AUX_INFO_SHOW_IMAGE_MENU))
{
menu_shown = ! g_ascii_strcasecmp (aux->value, "true");
}
else if (! strcmp (aux->name, AUX_INFO_FOLLOW_ACTIVE_IMAGE))
{
auto_follow = ! g_ascii_strcasecmp (aux->value, "true");
}
}
if (menu_shown != dock_window->p->show_image_menu)
gimp_dock_window_set_show_image_menu (dock_window, menu_shown);
if (auto_follow != dock_window->p->auto_follow_active)
gimp_dock_window_set_auto_follow_active (dock_window, auto_follow);
}
static GimpAlignmentType static GimpAlignmentType
gimp_dock_window_get_dock_side (GimpDockContainer *dock_container, gimp_dock_window_get_dock_side (GimpDockContainer *dock_container,
GimpDock *dock) GimpDock *dock)
@ -1127,66 +1209,6 @@ gimp_dock_window_setup (GimpDockWindow *dock_window,
template->p->show_image_menu); template->p->show_image_menu);
} }
void
gimp_dock_window_set_aux_info (GimpDockWindow *dock_window,
GList *aux_info)
{
GList *list;
gboolean menu_shown = dock_window->p->show_image_menu;
gboolean auto_follow = dock_window->p->auto_follow_active;
g_return_if_fail (GIMP_IS_DOCK_WINDOW (dock_window));
for (list = aux_info; list; list = g_list_next (list))
{
GimpSessionInfoAux *aux = list->data;
if (! strcmp (aux->name, AUX_INFO_SHOW_IMAGE_MENU))
{
menu_shown = ! g_ascii_strcasecmp (aux->value, "true");
}
else if (! strcmp (aux->name, AUX_INFO_FOLLOW_ACTIVE_IMAGE))
{
auto_follow = ! g_ascii_strcasecmp (aux->value, "true");
}
}
if (menu_shown != dock_window->p->show_image_menu)
gimp_dock_window_set_show_image_menu (dock_window, menu_shown);
if (auto_follow != dock_window->p->auto_follow_active)
gimp_dock_window_set_auto_follow_active (dock_window, auto_follow);
}
GList *
gimp_dock_window_get_aux_info (GimpDockWindow *dock_window)
{
GList *aux_info = NULL;
GimpSessionInfoAux *aux = NULL;
g_return_val_if_fail (GIMP_IS_DOCK_WINDOW (dock_window), NULL);
if (dock_window->p->allow_dockbook_absence)
{
/* Assume it is the toolbox; it does not have aux info */
return NULL;
}
g_return_val_if_fail (GIMP_IS_DOCK_WINDOW (dock_window), NULL);
aux = gimp_session_info_aux_new (AUX_INFO_SHOW_IMAGE_MENU,
dock_window->p->show_image_menu ?
"true" : "false");
aux_info = g_list_append (aux_info, aux);
aux = gimp_session_info_aux_new (AUX_INFO_FOLLOW_ACTIVE_IMAGE,
dock_window->p->auto_follow_active ?
"true" : "false");
aux_info = g_list_append (aux_info, aux);
return aux_info;
}
/** /**
* gimp_dock_window_has_toolbox: * gimp_dock_window_has_toolbox:
* @dock_window: * @dock_window:

View File

@ -77,9 +77,6 @@ void gimp_dock_window_set_show_image_menu (GimpDockWindow *
gboolean show); gboolean show);
void gimp_dock_window_setup (GimpDockWindow *dock_window, void gimp_dock_window_setup (GimpDockWindow *dock_window,
GimpDockWindow *template); GimpDockWindow *template);
void gimp_dock_window_set_aux_info (GimpDockWindow *dock,
GList *aux_info);
GList * gimp_dock_window_get_aux_info (GimpDockWindow *dock);
gboolean gimp_dock_window_has_toolbox (GimpDockWindow *dock_window); gboolean gimp_dock_window_has_toolbox (GimpDockWindow *dock_window);
GimpDockWindow * gimp_dock_window_from_dock (GimpDock *dock); GimpDockWindow * gimp_dock_window_from_dock (GimpDock *dock);

View File

@ -32,6 +32,7 @@
#include "gimpdockable.h" #include "gimpdockable.h"
#include "gimpdockwindow.h" #include "gimpdockwindow.h"
#include "gimpsessioninfo-aux.h" #include "gimpsessioninfo-aux.h"
#include "gimpsessionmanaged.h"
/* public functions */ /* public functions */
@ -281,28 +282,3 @@ gimp_session_info_aux_deserialize (GScanner *scanner,
return token; return token;
} }
void
gimp_session_info_aux_set_list (GtkWidget *dialog,
GList *aux_list)
{
/* FIXME: make the aux-info stuff generic */
if (GIMP_IS_DOCK_WINDOW (dialog))
gimp_dock_window_set_aux_info (GIMP_DOCK_WINDOW (dialog), aux_list);
else if (GIMP_IS_DOCKABLE (dialog))
gimp_dockable_set_aux_info (GIMP_DOCKABLE (dialog), aux_list);
}
GList *
gimp_session_info_aux_get_list (GtkWidget *dialog)
{
/* FIXME: make the aux-info stuff generic */
if (GIMP_IS_DOCK_WINDOW (dialog))
return gimp_dock_window_get_aux_info (GIMP_DOCK_WINDOW (dialog));
else if (GIMP_IS_DOCKABLE (dialog))
return gimp_dockable_get_aux_info (GIMP_DOCKABLE (dialog));
return NULL;
}

View File

@ -51,9 +51,5 @@ void gimp_session_info_aux_serialize (GimpConfigWriter *writer,
GTokenType gimp_session_info_aux_deserialize (GScanner *scanner, GTokenType gimp_session_info_aux_deserialize (GScanner *scanner,
GList **aux_list); GList **aux_list);
void gimp_session_info_aux_set_list (GtkWidget *dialog,
GList *aux_info);
GList * gimp_session_info_aux_get_list (GtkWidget *dialog);
#endif /* __GIMP_SESSION_INFO_AUX_H__ */ #endif /* __GIMP_SESSION_INFO_AUX_H__ */

View File

@ -33,6 +33,7 @@
#include "gimpdockable.h" #include "gimpdockable.h"
#include "gimpsessioninfo-aux.h" #include "gimpsessioninfo-aux.h"
#include "gimpsessioninfo-dockable.h" #include "gimpsessioninfo-dockable.h"
#include "gimpsessionmanaged.h"
#include "gimptoolbox.h" #include "gimptoolbox.h"
@ -264,7 +265,9 @@ gimp_session_info_dockable_from_widget (GimpDockable *dockable)
if (view_size > 0 && view_size != entry->view_size) if (view_size > 0 && view_size != entry->view_size)
info->view_size = view_size; info->view_size = view_size;
info->aux_info = gimp_session_info_aux_get_list (GTK_WIDGET (dockable)); if (GIMP_IS_SESSION_MANAGED (dockable))
info->aux_info =
gimp_session_managed_get_aux_info (GIMP_SESSION_MANAGED (dockable));
return info; return info;
} }
@ -301,7 +304,8 @@ gimp_session_info_dockable_restore (GimpSessionInfoDockable *info,
gimp_dockable_set_tab_style (GIMP_DOCKABLE (dockable), info->tab_style); gimp_dockable_set_tab_style (GIMP_DOCKABLE (dockable), info->tab_style);
if (info->aux_info) if (info->aux_info)
gimp_session_info_aux_set_list (dockable, info->aux_info); gimp_session_managed_set_aux_info (GIMP_SESSION_MANAGED (dockable),
info->aux_info);
} }
return GIMP_DOCKABLE (dockable); return GIMP_DOCKABLE (dockable);

View File

@ -43,6 +43,7 @@
#include "gimpsessioninfo-book.h" #include "gimpsessioninfo-book.h"
#include "gimpsessioninfo-dock.h" #include "gimpsessioninfo-dock.h"
#include "gimpsessioninfo-private.h" #include "gimpsessioninfo-private.h"
#include "gimpsessionmanaged.h"
#include "gimp-log.h" #include "gimp-log.h"
@ -748,7 +749,9 @@ gimp_session_info_get_info (GimpSessionInfo *info)
gimp_session_info_read_geometry (info, NULL /*cevent*/); gimp_session_info_read_geometry (info, NULL /*cevent*/);
info->p->aux_info = gimp_session_info_aux_get_list (info->p->widget); if (GIMP_IS_SESSION_MANAGED (info->p->widget))
info->p->aux_info =
gimp_session_managed_get_aux_info (GIMP_SESSION_MANAGED (info->p->widget));
if (GIMP_IS_DOCK_CONTAINER (info->p->widget)) if (GIMP_IS_DOCK_CONTAINER (info->p->widget))
{ {

View File

@ -0,0 +1,114 @@
/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* gimpsessionmanaged.c
* Copyright (C) 2011 Martin Nordholts <martinn@src.gnome.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <gtk/gtk.h>
#include "widgets-types.h"
#include "gimpsessionmanaged.h"
static void gimp_session_managed_iface_base_init (GimpSessionManagedInterface *managed_iface);
GType
gimp_session_managed_interface_get_type (void)
{
static GType iface_type = 0;
if (! iface_type)
{
const GTypeInfo iface_info =
{
sizeof (GimpSessionManagedInterface),
(GBaseInitFunc) gimp_session_managed_iface_base_init,
(GBaseFinalizeFunc) NULL,
};
iface_type = g_type_register_static (G_TYPE_INTERFACE,
"GimpSessionManagedInterface",
&iface_info,
0);
g_type_interface_add_prerequisite (iface_type, GTK_TYPE_WIDGET);
}
return iface_type;
}
static void
gimp_session_managed_iface_base_init (GimpSessionManagedInterface *managed_iface)
{
static gboolean initialized = FALSE;
if (initialized)
return;
initialized = TRUE;
managed_iface->get_aux_info = NULL;
managed_iface->set_aux_info = NULL;
}
/**
* gimp_session_managed_get_aux_info:
* @session_managed: A #GimpSessionManaged
*
* Returns: A list of #GimpSessionInfoAux created with
* gimp_session_info_aux_new().
**/
GList *
gimp_session_managed_get_aux_info (GimpSessionManaged *session_managed)
{
GimpSessionManagedInterface *iface;
g_return_val_if_fail (GIMP_IS_SESSION_MANAGED (session_managed), NULL);
iface = GIMP_SESSION_MANAGED_GET_INTERFACE (session_managed);
if (iface->get_aux_info)
return iface->get_aux_info (session_managed);
return NULL;
}
/**
* gimp_session_managed_get_ui_manager:
* @session_managed: A #GimpSessionManaged
* @aux_info A list of #GimpSessionInfoAux
*
* Sets aux data previously returned from
* gimp_session_managed_get_aux_info().
**/
void
gimp_session_managed_set_aux_info (GimpSessionManaged *session_managed,
GList *aux_info)
{
GimpSessionManagedInterface *iface;
g_return_if_fail (GIMP_IS_SESSION_MANAGED (session_managed));
iface = GIMP_SESSION_MANAGED_GET_INTERFACE (session_managed);
if (iface->set_aux_info)
iface->set_aux_info (session_managed, aux_info);
}

View File

@ -0,0 +1,50 @@
/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* gimpsessionmanaged.h
* Copyright (C) 2011 Martin Nordholts <martinn@src.gnome.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GIMP_SESSION_MANAGED_H__
#define __GIMP_SESSION_MANAGED_H__
#define GIMP_TYPE_SESSION_MANAGED (gimp_session_managed_interface_get_type ())
#define GIMP_SESSION_MANAGED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_SESSION_MANAGED, GimpSessionManaged))
#define GIMP_IS_SESSION_MANAGED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_SESSION_MANAGED))
#define GIMP_SESSION_MANAGED_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GIMP_TYPE_SESSION_MANAGED, GimpSessionManagedInterface))
typedef struct _GimpSessionManagedInterface GimpSessionManagedInterface;
struct _GimpSessionManagedInterface
{
GTypeInterface base_iface;
/* virtual functions */
GList * (* get_aux_info) (GimpSessionManaged *session_managed);
void (* set_aux_info) (GimpSessionManaged *session_managed,
GList *aux_info);
};
GType gimp_session_managed_interface_get_type (void) G_GNUC_CONST;
GList * gimp_session_managed_get_aux_info (GimpSessionManaged *session_managed);
void gimp_session_managed_set_aux_info (GimpSessionManaged *session_managed,
GList *aux_info);
#endif /* __GIMP_SESSION_MANAGED_H__ */

View File

@ -244,6 +244,7 @@ typedef struct _GimpSessionInfoAux GimpSessionInfoAux;
typedef struct _GimpSessionInfoBook GimpSessionInfoBook; typedef struct _GimpSessionInfoBook GimpSessionInfoBook;
typedef struct _GimpSessionInfoDock GimpSessionInfoDock; typedef struct _GimpSessionInfoDock GimpSessionInfoDock;
typedef struct _GimpSessionInfoDockable GimpSessionInfoDockable; typedef struct _GimpSessionInfoDockable GimpSessionInfoDockable;
typedef struct _GimpSessionManaged GimpSessionManaged;
/* structs */ /* structs */