[gimp] Make display->instance private, add an accessor and use it everywhere



commit 23cd244c659764ef4a2d9963ae91f701e60abfde
Author: Michael Natterer <mitch gimp org>
Date:   Tue Oct 6 09:16:46 2009 +0200

    Make display->instance private, add an accessor and use it everywhere

 app/actions/windows-actions.c        |    2 +-
 app/display/gimpdisplay-handlers.c   |   10 ++----
 app/display/gimpdisplay.c            |   35 ++++++++++++++----
 app/display/gimpdisplay.h            |   66 +++++++++++++++++-----------------
 app/display/gimpdisplayshell-title.c |    3 +-
 5 files changed, 67 insertions(+), 49 deletions(-)
---
diff --git a/app/actions/windows-actions.c b/app/actions/windows-actions.c
index b1f227d..088a8c1 100644
--- a/app/actions/windows-actions.c
+++ b/app/actions/windows-actions.c
@@ -280,7 +280,7 @@ windows_actions_image_notify (GimpDisplay      *display,
 
         title = g_strdup_printf ("%s-%d.%d", escaped,
                                  gimp_image_get_ID (display->image),
-                                 display->instance);
+                                 gimp_display_get_instance (display));
         g_free (escaped);
 
         g_object_set (action,
diff --git a/app/display/gimpdisplay-handlers.c b/app/display/gimpdisplay-handlers.c
index 6b03f78..738dcb0 100644
--- a/app/display/gimpdisplay-handlers.c
+++ b/app/display/gimpdisplay-handlers.c
@@ -52,18 +52,14 @@ gimp_display_connect (GimpDisplay *display,
   g_return_if_fail (GIMP_IS_IMAGE (image));
   g_return_if_fail (display->image == NULL);
 
-  display->image    = image;
-  display->instance = image->instance_count;
-
-  image->instance_count++;   /* this is obsolete */
-  image->disp_count++;
-
 #if 0
   g_print ("%s: image->ref_count before refing: %d\n",
            G_STRFUNC, G_OBJECT (display->image)->ref_count);
 #endif
 
-  g_object_ref (image);
+  display->image = g_object_ref (image);
+
+  image->disp_count++;
 
   g_signal_connect (gimp_image_get_projection (image), "update",
                     G_CALLBACK (gimp_display_update_handler),
diff --git a/app/display/gimpdisplay.c b/app/display/gimpdisplay.c
index cdac3c8..e13cc1f 100644
--- a/app/display/gimpdisplay.c
+++ b/app/display/gimpdisplay.c
@@ -64,6 +64,8 @@ typedef struct _GimpDisplayPrivate GimpDisplayPrivate;
 struct _GimpDisplayPrivate
 {
   gint       ID;           /*  unique identifier for this display  */
+  gint       instance;     /*  the instance # of this display as
+                            *  taken from the image at creation    */
   GtkWidget *shell;
   GSList    *update_areas;
 };
@@ -163,10 +165,6 @@ gimp_display_class_init (GimpDisplayClass *klass)
 static void
 gimp_display_init (GimpDisplay *display)
 {
-  display->gimp     = NULL;
-
-  display->image    = NULL;
-  display->instance = 0;
 }
 
 static void
@@ -408,7 +406,11 @@ gimp_display_new (Gimp              *gimp,
 
   /*  refs the image  */
   if (image)
-    gimp_display_connect (display, image);
+    {
+      private->instance = image->instance_count++;
+
+      gimp_display_connect (display, image);
+    }
 
   /*  get an image window  */
   if (GIMP_GUI_CONFIG (display->config)->single_window_mode)
@@ -610,11 +612,14 @@ void
 gimp_display_set_image (GimpDisplay *display,
                         GimpImage   *image)
 {
-  GimpImage *old_image = NULL;
+  GimpDisplayPrivate *private;
+  GimpImage          *old_image = NULL;
 
   g_return_if_fail (GIMP_IS_DISPLAY (display));
   g_return_if_fail (image == NULL || GIMP_IS_IMAGE (image));
 
+  private = GIMP_DISPLAY_GET_PRIVATE (display);
+
   if (display->image)
     {
       /*  stop any active tool  */
@@ -629,7 +634,11 @@ gimp_display_set_image (GimpDisplay *display,
     }
 
   if (image)
-    gimp_display_connect (display, image);
+    {
+      private->instance = image->instance_count++;
+
+      gimp_display_connect (display, image);
+    }
 
   if (old_image)
     g_object_unref (old_image);
@@ -643,6 +652,18 @@ gimp_display_set_image (GimpDisplay *display,
     g_object_notify (G_OBJECT (display), "image");
 }
 
+gint
+gimp_display_get_instance (GimpDisplay *display)
+{
+  GimpDisplayPrivate *private;
+
+  g_return_val_if_fail (GIMP_IS_DISPLAY (display), 0);
+
+  private = GIMP_DISPLAY_GET_PRIVATE (display);
+
+  return private->instance;
+}
+
 GimpDisplayShell *
 gimp_display_get_shell (GimpDisplay *display)
 {
diff --git a/app/display/gimpdisplay.h b/app/display/gimpdisplay.h
index 43aa3f4..1e09b9c 100644
--- a/app/display/gimpdisplay.h
+++ b/app/display/gimpdisplay.h
@@ -40,8 +40,6 @@ struct _GimpDisplay
   GimpDisplayConfig *config;
 
   GimpImage         *image;        /*  pointer to the associated image     */
-  gint               instance;     /*  the instance # of this display as   */
-                                   /*  taken from the image at creation    */
 };
 
 struct _GimpDisplayClass
@@ -50,45 +48,47 @@ struct _GimpDisplayClass
 };
 
 
-GType              gimp_display_get_type    (void) G_GNUC_CONST;
+GType              gimp_display_get_type     (void) G_GNUC_CONST;
 
-GimpDisplay      * gimp_display_new         (Gimp              *gimp,
-                                             GimpImage         *image,
-                                             GimpUnit           unit,
-                                             gdouble            scale,
-                                             GimpMenuFactory   *menu_factory,
-                                             GimpUIManager     *popup_manager,
-                                             GimpDialogFactory *display_factory);
-void               gimp_display_delete      (GimpDisplay       *display);
-void               gimp_display_close       (GimpDisplay       *display);
+GimpDisplay      * gimp_display_new          (Gimp              *gimp,
+                                              GimpImage         *image,
+                                              GimpUnit           unit,
+                                              gdouble            scale,
+                                              GimpMenuFactory   *menu_factory,
+                                              GimpUIManager     *popup_manager,
+                                              GimpDialogFactory *display_factory);
+void               gimp_display_delete       (GimpDisplay       *display);
+void               gimp_display_close        (GimpDisplay       *display);
 
-gint               gimp_display_get_ID      (GimpDisplay       *display);
-GimpDisplay      * gimp_display_get_by_ID   (Gimp              *gimp,
-                                             gint               ID);
+gint               gimp_display_get_ID       (GimpDisplay       *display);
+GimpDisplay      * gimp_display_get_by_ID    (Gimp              *gimp,
+                                              gint               ID);
 
-Gimp             * gimp_display_get_gimp    (GimpDisplay       *display);
+Gimp             * gimp_display_get_gimp     (GimpDisplay       *display);
 
-GimpImage        * gimp_display_get_image   (GimpDisplay       *display);
-void               gimp_display_set_image   (GimpDisplay       *display,
-                                             GimpImage         *image);
+GimpImage        * gimp_display_get_image    (GimpDisplay       *display);
+void               gimp_display_set_image    (GimpDisplay       *display,
+                                              GimpImage         *image);
 
-GimpDisplayShell * gimp_display_get_shell   (GimpDisplay       *display);
+gint               gimp_display_get_instance (GimpDisplay       *display);
 
-void               gimp_display_empty       (GimpDisplay       *display);
-void               gimp_display_fill        (GimpDisplay       *display,
-                                             GimpImage         *image,
-                                             GimpUnit           unit,
-                                             gdouble            scale);
+GimpDisplayShell * gimp_display_get_shell    (GimpDisplay       *display);
 
-void               gimp_display_update_area (GimpDisplay       *display,
-                                             gboolean           now,
-                                             gint               x,
-                                             gint               y,
-                                             gint               w,
-                                             gint               h);
+void               gimp_display_empty        (GimpDisplay       *display);
+void               gimp_display_fill         (GimpDisplay       *display,
+                                              GimpImage         *image,
+                                              GimpUnit           unit,
+                                              gdouble            scale);
 
-void               gimp_display_flush       (GimpDisplay       *display);
-void               gimp_display_flush_now   (GimpDisplay       *display);
+void               gimp_display_update_area  (GimpDisplay       *display,
+                                              gboolean           now,
+                                              gint               x,
+                                              gint               y,
+                                              gint               w,
+                                              gint               h);
+
+void               gimp_display_flush        (GimpDisplay       *display);
+void               gimp_display_flush_now    (GimpDisplay       *display);
 
 
 #endif /*  __GIMP_DISPLAY_H__  */
diff --git a/app/display/gimpdisplayshell-title.c b/app/display/gimpdisplayshell-title.c
index 2a1ad60..de0a185 100644
--- a/app/display/gimpdisplayshell-title.c
+++ b/app/display/gimpdisplayshell-title.c
@@ -238,7 +238,8 @@ gimp_display_shell_format_title (GimpDisplayShell *shell,
               break;
 
             case 'i': /* instance */
-              i += print (title, title_len, i, "%d", shell->display->instance);
+              i += print (title, title_len, i, "%d",
+                          gimp_display_get_instance (shell->display));
               break;
 
             case 't': /* image type */



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