gimp r25377 - in trunk: . app/actions app/dialogs app/display app/gui



Author: neo
Date: Sat Apr  5 21:32:24 2008
New Revision: 25377
URL: http://svn.gnome.org/viewvc/gimp?rev=25377&view=rev

Log:
2008-04-05  Sven Neumann  <sven gimp org>

	* app/display/gimpdisplay.[ch]: added new function
	gimp_display_close() which decides if gimp_display_delete() or
	gimp_display_empty() needs to be called.

	* app/display/gimpdisplay-foreach.[ch]: added new function
	gimp_displays_close() and removed the 'do_quit' parameter from
	gimp_displays_delete().

	* app/gui/gui.c (gui_exit_callback): changed accordingly.

	* app/display/gimpdisplayshell-close.c: removed
	gimp_display_shell_really_close() and call gimp_display_close()
	instead.

	* app/display/gimpdisplayshell.c (gimp_display_shell_empty): 
moved
	code to update the ui managers here.

	* app/actions/file-commands.c (file_save_cmd_callback)
	(file_close_cmd_callback)
	* app/dialogs/file-save-dialog.c (file_save_dialog_response)
	* app/dialogs/quit-dialog.c (quit_close_all_dialog_response):
	close displays instead of deleting them.

	* app/gui/gui-vtable.c (gui_display_delete): call
	gimp_display_close().



Modified:
   trunk/ChangeLog
   trunk/app/actions/file-commands.c
   trunk/app/dialogs/file-save-dialog.c
   trunk/app/dialogs/quit-dialog.c
   trunk/app/display/gimpdisplay-foreach.c
   trunk/app/display/gimpdisplay-foreach.h
   trunk/app/display/gimpdisplay.c
   trunk/app/display/gimpdisplay.h
   trunk/app/display/gimpdisplayshell-close.c
   trunk/app/display/gimpdisplayshell.c
   trunk/app/gui/gui-vtable.c
   trunk/app/gui/gui.c

Modified: trunk/app/actions/file-commands.c
==============================================================================
--- trunk/app/actions/file-commands.c	(original)
+++ trunk/app/actions/file-commands.c	Sat Apr  5 21:32:24 2008
@@ -302,7 +302,7 @@
   if (save_mode == GIMP_SAVE_MODE_SAVE_AND_CLOSE &&
       saved && ! display->image->dirty)
     {
-      gimp_display_delete (display);
+      gimp_display_close (display);
     }
 }
 
@@ -408,7 +408,7 @@
 
   if (! gimp_displays_dirty (gimp))
     {
-      gimp_displays_delete (gimp, FALSE);
+      gimp_displays_close (gimp);
     }
   else
     {

Modified: trunk/app/dialogs/file-save-dialog.c
==============================================================================
--- trunk/app/dialogs/file-save-dialog.c	(original)
+++ trunk/app/dialogs/file-save-dialog.c	Sat Apr  5 21:32:24 2008
@@ -156,7 +156,7 @@
                       display = GIMP_DISPLAY_SHELL (parent)->display;
 
                       if (! display->image->dirty)
-                        gimp_display_delete (display);
+                        gimp_display_close (display);
                     }
                 }
             }

Modified: trunk/app/dialogs/quit-dialog.c
==============================================================================
--- trunk/app/dialogs/quit-dialog.c	(original)
+++ trunk/app/dialogs/quit-dialog.c	Sat Apr  5 21:32:24 2008
@@ -196,7 +196,7 @@
       if (do_quit)
         gimp_exit (gimp, TRUE);
       else
-        gimp_displays_delete (gimp, FALSE);
+        gimp_displays_close (gimp);
     }
 }
 

Modified: trunk/app/display/gimpdisplay-foreach.c
==============================================================================
--- trunk/app/display/gimpdisplay-foreach.c	(original)
+++ trunk/app/display/gimpdisplay-foreach.c	Sat Apr  5 21:32:24 2008
@@ -139,30 +139,53 @@
   return NULL;
 }
 
+/**
+ * gimp_displays_delete:
+ * @gimp:
+ *
+ * Calls gimp_display_delete() an all displays in the display list.
+ * This closes all displays, including the first one which is usually
+ * kept open.
+ */
 void
-gimp_displays_delete (Gimp     *gimp,
-                      gboolean  quit)
+gimp_displays_delete (Gimp *gimp)
 {
-  g_return_if_fail (GIMP_IS_GIMP (gimp));
-
   /*  this removes the GimpDisplay from the list, so do a while loop
    *  "around" the first element to get them all
    */
-  while (GIMP_LIST (gimp->displays)->list)
+  while (! gimp_container_is_empty (gimp->displays))
     {
-      GList       *list    = GIMP_LIST (gimp->displays)->list;
-      GimpDisplay *display = list->data;
+      GimpDisplay *display = GIMP_LIST (gimp->displays)->list->data;
+
+      gimp_display_delete (display);
+    }
+}
+
+/**
+ * gimp_displays_close:
+ * @gimp:
+ *
+ * Calls gimp_display_close() an all displays in the display list. The
+ * first display will remain open without an image.
+ */
+void
+gimp_displays_close (Gimp *gimp)
+{
+  GList *list;
+  GList *iter;
+
+  g_return_if_fail (GIMP_IS_GIMP (gimp));
 
-      if (list->next || quit)
-        {
-          gimp_display_delete (display);
-        }
-      else
-        {
-          gimp_display_empty (display);
-          break;
-        }
+  list = g_list_copy (GIMP_LIST (gimp->displays)->list);
+
+  for (iter = list; iter; iter = g_list_next (iter))
+    {
+      GimpDisplay *display = iter->data;
+
+      gimp_display_close (display);
     }
+
+  g_list_free (list);
 }
 
 void

Modified: trunk/app/display/gimpdisplay-foreach.h
==============================================================================
--- trunk/app/display/gimpdisplay-foreach.h	(original)
+++ trunk/app/display/gimpdisplay-foreach.h	Sat Apr  5 21:32:24 2008
@@ -22,8 +22,8 @@
 
 gboolean        gimp_displays_dirty            (Gimp      *gimp);
 GimpContainer * gimp_displays_get_dirty_images (Gimp      *gimp);
-void            gimp_displays_delete           (Gimp      *gimp,
-                                                gboolean   quit);
+void            gimp_displays_delete           (Gimp      *gimp);
+void            gimp_displays_close            (Gimp      *gimp);
 void            gimp_displays_reconnect        (Gimp      *gimp,
                                                 GimpImage *old,
                                                 GimpImage *new);

Modified: trunk/app/display/gimpdisplay.c
==============================================================================
--- trunk/app/display/gimpdisplay.c	(original)
+++ trunk/app/display/gimpdisplay.c	Sat Apr  5 21:32:24 2008
@@ -396,6 +396,13 @@
   return display;
 }
 
+/**
+ * gimp_display_delete:
+ * @display:
+ *
+ * Closes the display and removes it from the display list. You should
+ * not call this function directly, use gimp_display_close() instead.
+ */
 void
 gimp_display_delete (GimpDisplay *display)
 {
@@ -404,8 +411,7 @@
   g_return_if_fail (GIMP_IS_DISPLAY (display));
 
   /* remove the display from the list */
-  gimp_container_remove (display->gimp->displays,
-                         GIMP_OBJECT (display));
+  gimp_container_remove (display->gimp->displays, GIMP_OBJECT (display));
 
   /*  unrefs the image  */
   gimp_display_set_image (display, NULL);
@@ -434,6 +440,28 @@
   g_object_unref (display);
 }
 
+/**
+ * gimp_display_close:
+ * @display:
+ *
+ * Closes the display. If this is the last display, it will remain
+ * open, but without an image.
+ */
+void
+gimp_display_close (GimpDisplay *display)
+{
+  g_return_if_fail (GIMP_IS_DISPLAY (display));
+
+  if (gimp_container_num_children (display->gimp->displays) > 1)
+    {
+      gimp_display_delete (display);
+    }
+  else
+    {
+      gimp_display_empty (display);
+    }
+}
+
 gint
 gimp_display_get_ID (GimpDisplay *display)
 {

Modified: trunk/app/display/gimpdisplay.h
==============================================================================
--- trunk/app/display/gimpdisplay.h	(original)
+++ trunk/app/display/gimpdisplay.h	Sat Apr  5 21:32:24 2008
@@ -67,6 +67,7 @@
                                         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,

Modified: trunk/app/display/gimpdisplayshell-close.c
==============================================================================
--- trunk/app/display/gimpdisplayshell-close.c	(original)
+++ trunk/app/display/gimpdisplayshell-close.c	Sat Apr  5 21:32:24 2008
@@ -57,8 +57,6 @@
 static void      gimp_display_shell_close_response     (GtkWidget        *widget,
                                                         gboolean          close,
                                                         GimpDisplayShell *shell);
-static void      gimp_display_shell_really_close       (GimpDisplayShell *shell);
-
 static void      gimp_time_since                       (guint  then,
                                                         gint  *hours,
                                                         gint  *minutes);
@@ -96,7 +94,7 @@
     }
   else if (image)
     {
-      gimp_display_shell_really_close (shell);
+      gimp_display_close (shell->display);
     }
   else
     {
@@ -289,7 +287,7 @@
   switch (response_id)
     {
     case GTK_RESPONSE_CLOSE:
-      gimp_display_shell_really_close (shell);
+      gimp_display_close (shell->display);
       break;
 
     case RESPONSE_SAVE:
@@ -303,28 +301,6 @@
 }
 
 static void
-gimp_display_shell_really_close (GimpDisplayShell *shell)
-{
-  if (gimp_container_num_children (shell->display->gimp->displays) > 1)
-    {
-      gimp_display_delete (shell->display);
-    }
-  else
-    {
-      GimpContext *user_context;
-
-      gimp_display_empty (shell->display);
-
-      gimp_ui_manager_update (shell->menubar_manager, shell->display);
-
-      user_context = gimp_get_user_context (shell->display->gimp);
-
-      if (shell->display == gimp_context_get_display (user_context))
-        gimp_ui_manager_update (shell->popup_manager, shell->display);
-    }
-}
-
-static void
 gimp_time_since (guint  then,
                  gint  *hours,
                  gint  *minutes)

Modified: trunk/app/display/gimpdisplayshell.c
==============================================================================
--- trunk/app/display/gimpdisplayshell.c	(original)
+++ trunk/app/display/gimpdisplayshell.c	Sat Apr  5 21:32:24 2008
@@ -1245,6 +1245,7 @@
 gimp_display_shell_empty (GimpDisplayShell *shell)
 {
   GimpSessionInfo *session_info;
+  GimpContext     *user_context;
   gint             width;
   gint             height;
 
@@ -1298,6 +1299,15 @@
   gimp_display_shell_expose_full (shell);
 
   gtk_window_resize (GTK_WINDOW (shell), width, height);
+
+  /*  update the ui managers  */
+
+  gimp_ui_manager_update (shell->menubar_manager, shell->display);
+
+  user_context = gimp_get_user_context (shell->display->gimp);
+
+  if (shell->display == gimp_context_get_display (user_context))
+    gimp_ui_manager_update (shell->popup_manager, shell->display);
 }
 
 static gboolean

Modified: trunk/app/gui/gui-vtable.c
==============================================================================
--- trunk/app/gui/gui-vtable.c	(original)
+++ trunk/app/gui/gui-vtable.c	Sat Apr  5 21:32:24 2008
@@ -363,7 +363,7 @@
 static void
 gui_display_delete (GimpObject *display)
 {
-  gimp_display_delete (GIMP_DISPLAY (display));
+  gimp_display_close (GIMP_DISPLAY (display));
 }
 
 static void

Modified: trunk/app/gui/gui.c
==============================================================================
--- trunk/app/gui/gui.c	(original)
+++ trunk/app/gui/gui.c	Sat Apr  5 21:32:24 2008
@@ -584,7 +584,7 @@
                                         gui_display_changed,
                                         gimp);
 
-  gimp_displays_delete (gimp, TRUE);
+  gimp_displays_delete (gimp);
 
   gimp_tools_save (gimp, gui_config->save_tool_options, FALSE);
   gimp_tools_exit (gimp);



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