[gimp/soc-2011-gimpunitentry] app: Add GimpSessionManaged



commit ce225ab3cea913d013a6235261e77ac7e2775708
Author: Martin Nordholts <martinn src gnome org>
Date:   Mon May 30 08:19:53 2011 +0200

    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(-)
---
diff --git a/NEWS b/NEWS
index 0ab374c..961a9b5 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 f8c9e89..cb97b0e 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 64bc957..9c27642 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 f31c1be..36a9e38 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
 
@@ -182,6 +194,13 @@ gimp_dockable_init (GimpDockable *dockable)
 }
 
 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)
 {
   GimpDockable *dockable = GIMP_DOCKABLE (object);
@@ -673,36 +692,6 @@ gimp_dockable_get_drag_handler (GimpDockable *dockable)
 }
 
 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 1d55067..6d3dd2b 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 dea0232..6372cf7 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
 
@@ -273,6 +280,13 @@ gimp_dock_window_dock_container_iface_init (GimpDockContainerInterface *iface)
 }
 
 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)
 {
   GimpDockWindow *dock_window = GIMP_DOCK_WINDOW (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 8946d82..9762e26 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 74de662..d77b28a 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 de90009..843ce6f 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 2604466..2d934de 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 f779f81..b4aad8c 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 0000000..2360547
--- /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 <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);
+}
diff --git a/app/widgets/gimpsessionmanaged.h b/app/widgets/gimpsessionmanaged.h
new file mode 100644
index 0000000..730a90f
--- /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 <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__  */
diff --git a/app/widgets/widgets-types.h b/app/widgets/widgets-types.h
index aaf5f12..36a88e1 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  */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]