From 6fc587c643c9d2dce8d96a20e1c2f7465c1cc785 Mon Sep 17 00:00:00 2001 From: Martin Nordholts Date: Mon, 30 May 2011 08:19:53 +0200 Subject: [PATCH] app: Add GimpSessionManaged Add a GimpSessionManaged interface to generalize gimp_session_info_aux_get_list() and gimp_session_info_aux_set_list(). --- NEWS | 1 + app/dialogs/dialogs.c | 7 +- app/widgets/Makefile.am | 2 + app/widgets/gimpdockable.c | 86 +++++++++------ app/widgets/gimpdockable.h | 4 - app/widgets/gimpdockwindow.c | 144 ++++++++++++++----------- app/widgets/gimpdockwindow.h | 3 - app/widgets/gimpsessioninfo-aux.c | 26 +---- app/widgets/gimpsessioninfo-aux.h | 4 - app/widgets/gimpsessioninfo-dockable.c | 8 +- app/widgets/gimpsessioninfo.c | 7 +- app/widgets/gimpsessionmanaged.c | 114 ++++++++++++++++++++ app/widgets/gimpsessionmanaged.h | 50 +++++++++ app/widgets/widgets-types.h | 1 + 14 files changed, 322 insertions(+), 135 deletions(-) create mode 100644 app/widgets/gimpsessionmanaged.c create mode 100644 app/widgets/gimpsessionmanaged.h diff --git a/NEWS b/NEWS index 0ab374ccbb..961a9b5eca 100644 --- a/NEWS +++ b/NEWS @@ -29,6 +29,7 @@ Core: a simple API and takes it out of GimpDisplayShell - Add a GimpIdTable utility class - Add a GimpDockContainer interface + - Add a GimpSessionManaged interface GEGL: diff --git a/app/dialogs/dialogs.c b/app/dialogs/dialogs.c index f8c9e89a44..cb97b0e0e0 100644 --- a/app/dialogs/dialogs.c +++ b/app/dialogs/dialogs.c @@ -40,6 +40,7 @@ #include "widgets/gimpmenufactory.h" #include "widgets/gimpsessioninfo.h" #include "widgets/gimpsessioninfo-aux.h" +#include "widgets/gimpsessionmanaged.h" #include "widgets/gimptoolbox.h" #include "dialogs.h" @@ -441,9 +442,9 @@ dialogs_restore_dialog (GimpDialogFactory *factory, GIMP_DIALOG_VISIBILITY_HIDDEN : GIMP_DIALOG_VISIBILITY_VISIBLE)); - if (dialog && gimp_session_info_get_aux_info (info)) - gimp_session_info_aux_set_list (dialog, - gimp_session_info_get_aux_info (info)); + if (GIMP_IS_SESSION_MANAGED (dialog) && gimp_session_info_get_aux_info (info)) + gimp_session_managed_set_aux_info (GIMP_SESSION_MANAGED (dialog), + gimp_session_info_get_aux_info (info)); return dialog; } diff --git a/app/widgets/Makefile.am b/app/widgets/Makefile.am index 64bc9570c2..9c27642e55 100644 --- a/app/widgets/Makefile.am +++ b/app/widgets/Makefile.am @@ -296,6 +296,8 @@ libappwidgets_a_sources = \ gimpsessioninfo-dockable.c \ gimpsessioninfo-dockable.h \ gimpsessioninfo-private.h \ + gimpsessionmanaged.c \ + gimpsessionmanaged.h \ gimpsettingsbox.c \ gimpsettingsbox.h \ gimpsettingseditor.c \ diff --git a/app/widgets/gimpdockable.c b/app/widgets/gimpdockable.c index f31c1be36a..36a9e38261 100644 --- a/app/widgets/gimpdockable.c +++ b/app/widgets/gimpdockable.c @@ -42,6 +42,7 @@ #include "gimphelp-ids.h" #include "gimppanedbox.h" #include "gimpsessioninfo-aux.h" +#include "gimpsessionmanaged.h" #include "gimpuimanager.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_set_property (GObject *object, guint property_id, @@ -114,13 +118,21 @@ static void gimp_dockable_style_set (GtkWidget *widget, static void gimp_dockable_add (GtkContainer *container, GtkWidget *widget); 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 gimp_dockable_convert_tab_style (GimpDockable *dockable, GimpTabStyle tab_style); 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 @@ -181,6 +193,13 @@ gimp_dockable_init (GimpDockable *dockable) 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 gimp_dockable_dispose (GObject *object) { @@ -672,36 +691,6 @@ gimp_dockable_get_drag_handler (GimpDockable *dockable) 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 gimp_dockable_set_locked (GimpDockable *dockable, gboolean lock) @@ -928,6 +917,41 @@ gimp_dockable_blink_cancel (GimpDockable *dockable) /* 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 gimp_dockable_convert_tab_style (GimpDockable *dockable, GimpTabStyle tab_style) diff --git a/app/widgets/gimpdockable.h b/app/widgets/gimpdockable.h index 1d55067b32..6d3dd2bd14 100644 --- a/app/widgets/gimpdockable.h +++ b/app/widgets/gimpdockable.h @@ -82,10 +82,6 @@ void gimp_dockable_get_drag_pos (GimpDockable *dockable, gint *drag_y); 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, gboolean lock); gboolean gimp_dockable_is_locked (GimpDockable *dockable); diff --git a/app/widgets/gimpdockwindow.c b/app/widgets/gimpdockwindow.c index dea0232149..6372cf7d2e 100644 --- a/app/widgets/gimpdockwindow.c +++ b/app/widgets/gimpdockwindow.c @@ -54,6 +54,7 @@ #include "gimpmenufactory.h" #include "gimpsessioninfo-aux.h" #include "gimpsessioninfo.h" +#include "gimpsessionmanaged.h" #include "gimptoolbox.h" #include "gimpuimanager.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_session_managed_iface_init(GimpSessionManagedInterface*iface); static void gimp_dock_window_constructed (GObject *object); static void gimp_dock_window_dispose (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, GimpDock *dock, 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 gimp_dock_window_get_dock_side (GimpDockContainer *dock_container, 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_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 @@ -272,6 +279,13 @@ gimp_dock_window_dock_container_iface_init (GimpDockContainerInterface *iface) 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 gimp_dock_window_constructed (GObject *object) { @@ -725,6 +739,74 @@ gimp_dock_window_add_dock_from_session (GimpDockContainer *dock_container, -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 gimp_dock_window_get_dock_side (GimpDockContainer *dock_container, GimpDock *dock) @@ -1127,66 +1209,6 @@ gimp_dock_window_setup (GimpDockWindow *dock_window, 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: * @dock_window: diff --git a/app/widgets/gimpdockwindow.h b/app/widgets/gimpdockwindow.h index 8946d8259f..9762e264b5 100644 --- a/app/widgets/gimpdockwindow.h +++ b/app/widgets/gimpdockwindow.h @@ -77,9 +77,6 @@ void gimp_dock_window_set_show_image_menu (GimpDockWindow * gboolean show); void gimp_dock_window_setup (GimpDockWindow *dock_window, 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); GimpDockWindow * gimp_dock_window_from_dock (GimpDock *dock); diff --git a/app/widgets/gimpsessioninfo-aux.c b/app/widgets/gimpsessioninfo-aux.c index 74de6625e0..d77b28a90e 100644 --- a/app/widgets/gimpsessioninfo-aux.c +++ b/app/widgets/gimpsessioninfo-aux.c @@ -32,6 +32,7 @@ #include "gimpdockable.h" #include "gimpdockwindow.h" #include "gimpsessioninfo-aux.h" +#include "gimpsessionmanaged.h" /* public functions */ @@ -281,28 +282,3 @@ gimp_session_info_aux_deserialize (GScanner *scanner, 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; -} diff --git a/app/widgets/gimpsessioninfo-aux.h b/app/widgets/gimpsessioninfo-aux.h index de90009573..843ce6f6fc 100644 --- a/app/widgets/gimpsessioninfo-aux.h +++ b/app/widgets/gimpsessioninfo-aux.h @@ -51,9 +51,5 @@ void gimp_session_info_aux_serialize (GimpConfigWriter *writer, GTokenType gimp_session_info_aux_deserialize (GScanner *scanner, 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__ */ diff --git a/app/widgets/gimpsessioninfo-dockable.c b/app/widgets/gimpsessioninfo-dockable.c index 2604466720..2d934de538 100644 --- a/app/widgets/gimpsessioninfo-dockable.c +++ b/app/widgets/gimpsessioninfo-dockable.c @@ -33,6 +33,7 @@ #include "gimpdockable.h" #include "gimpsessioninfo-aux.h" #include "gimpsessioninfo-dockable.h" +#include "gimpsessionmanaged.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) 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; } @@ -301,7 +304,8 @@ gimp_session_info_dockable_restore (GimpSessionInfoDockable *info, gimp_dockable_set_tab_style (GIMP_DOCKABLE (dockable), info->tab_style); 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); diff --git a/app/widgets/gimpsessioninfo.c b/app/widgets/gimpsessioninfo.c index f779f813af..b4aad8c592 100644 --- a/app/widgets/gimpsessioninfo.c +++ b/app/widgets/gimpsessioninfo.c @@ -43,7 +43,8 @@ #include "gimpsessioninfo-book.h" #include "gimpsessioninfo-dock.h" #include "gimpsessioninfo-private.h" - +#include "gimpsessionmanaged.h" + #include "gimp-log.h" @@ -748,7 +749,9 @@ gimp_session_info_get_info (GimpSessionInfo *info) 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)) { diff --git a/app/widgets/gimpsessionmanaged.c b/app/widgets/gimpsessionmanaged.c new file mode 100644 index 0000000000..2360547feb --- /dev/null +++ b/app/widgets/gimpsessionmanaged.c @@ -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 + * + * 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 . + */ + +#include "config.h" + +#include + +#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); +} diff --git a/app/widgets/gimpsessionmanaged.h b/app/widgets/gimpsessionmanaged.h new file mode 100644 index 0000000000..730a90f096 --- /dev/null +++ b/app/widgets/gimpsessionmanaged.h @@ -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 + * + * 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 . + */ + +#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__ */ diff --git a/app/widgets/widgets-types.h b/app/widgets/widgets-types.h index aaf5f1260c..36a88e1d2c 100644 --- a/app/widgets/widgets-types.h +++ b/app/widgets/widgets-types.h @@ -244,6 +244,7 @@ typedef struct _GimpSessionInfoAux GimpSessionInfoAux; typedef struct _GimpSessionInfoBook GimpSessionInfoBook; typedef struct _GimpSessionInfoDock GimpSessionInfoDock; typedef struct _GimpSessionInfoDockable GimpSessionInfoDockable; +typedef struct _GimpSessionManaged GimpSessionManaged; /* structs */