[gimp] app: Don't crash when detaching dockables from image window



commit 65c5541fafcb44b71c97c6c4df025eac466f7c5f
Author: Martin Nordholts <martinn src gnome org>
Date:   Thu Dec 10 19:26:23 2009 +0100

    app: Don't crash when detaching dockables from image window
    
    Don't crash when detaching dockables from the image window. This
    scenario only occurs in single-window mode. We solve it by using
    global variables and checking for NULL for src_dock_window; there is
    no dock window when detaching from the image window.
    
    The use of global variables is meant to be temporary.

 app/widgets/gimpdock.c             |    4 +++-
 app/widgets/gimpdockable.c         |   11 ++++++++---
 app/widgets/gimpdockcolumns.c      |    4 +++-
 app/widgets/gimpdockwindow.c       |    4 +++-
 app/widgets/gimpsessioninfo-book.c |    4 +++-
 5 files changed, 20 insertions(+), 7 deletions(-)
---
diff --git a/app/widgets/gimpdock.c b/app/widgets/gimpdock.c
index e421240..b3825bb 100644
--- a/app/widgets/gimpdock.c
+++ b/app/widgets/gimpdock.c
@@ -26,6 +26,8 @@
 
 #include "widgets-types.h"
 
+#include "menus/menus.h"
+
 #include "core/gimp.h"
 #include "core/gimpcontext.h"
 #include "core/gimpmarshal.h"
@@ -287,7 +289,7 @@ gimp_dock_dropped_cb (GtkWidget *source,
   gimp_dockbook_remove (dockable->dockbook, dockable);
 
   /* Create a new dockbook */
-  dockbook = gimp_dockbook_new (gimp_dock_get_dialog_factory (dock)->menu_factory);
+  dockbook = gimp_dockbook_new (global_menu_factory);
   gimp_dock_add_book (dock, GIMP_DOCKBOOK (dockbook), insert_index);
 
   /* Add the dockable to new new dockbook */
diff --git a/app/widgets/gimpdockable.c b/app/widgets/gimpdockable.c
index 7f874bb..55c4b42 100644
--- a/app/widgets/gimpdockable.c
+++ b/app/widgets/gimpdockable.c
@@ -30,6 +30,10 @@
 
 #include "widgets-types.h"
 
+#include "menus/menus.h"
+
+#include "dialogs/dialogs.h"
+
 #include "core/gimpcontext.h"
 
 #include "gimpdialogfactory.h"
@@ -1087,13 +1091,14 @@ gimp_dockable_detach (GimpDockable *dockable)
   src_dock = gimp_dockbook_get_dock (dockable->dockbook);
   src_dock_window = gimp_dock_window_from_dock (src_dock);
 
-  dock = gimp_dialog_factory_dock_with_window_new (gimp_dock_get_dialog_factory (src_dock),
+  dock = gimp_dialog_factory_dock_with_window_new (global_dock_factory,
                                                    gtk_widget_get_screen (GTK_WIDGET (dockable)));
   dock_window = gimp_dock_window_from_dock (GIMP_DOCK (dock));
   gtk_window_set_position (GTK_WINDOW (dock_window), GTK_WIN_POS_MOUSE);
-  gimp_dock_window_setup (dock_window, src_dock_window);
+  if (src_dock_window)
+    gimp_dock_window_setup (dock_window, src_dock_window);
 
-  dockbook = gimp_dockbook_new (gimp_dock_get_dialog_factory (GIMP_DOCK (dock))->menu_factory);
+  dockbook = gimp_dockbook_new (global_menu_factory);
 
   gimp_dock_add_book (GIMP_DOCK (dock), GIMP_DOCKBOOK (dockbook), 0);
 
diff --git a/app/widgets/gimpdockcolumns.c b/app/widgets/gimpdockcolumns.c
index 11d5dc5..31c9c86 100644
--- a/app/widgets/gimpdockcolumns.c
+++ b/app/widgets/gimpdockcolumns.c
@@ -24,6 +24,8 @@
 
 #include "widgets-types.h"
 
+#include "menus/menus.h"
+
 #include "core/gimp.h"
 #include "core/gimpcontext.h"
 #include "core/gimpmarshal.h"
@@ -138,7 +140,7 @@ gimp_dock_columns_dropped_cb (GtkWidget         *source,
   gimp_dock_columns_add_dock (dock_columns, GIMP_DOCK (dock), insert_index);
 
   /* Put a now dockbook in the dock */
-  dockbook = gimp_dockbook_new (gimp_dock_get_dialog_factory (GIMP_DOCK (dock))->menu_factory);
+  dockbook = gimp_dockbook_new (global_menu_factory);
   g_object_ref (dockbook);
   gimp_dock_add_book (GIMP_DOCK (dock), GIMP_DOCKBOOK (dockbook), -1);
 
diff --git a/app/widgets/gimpdockwindow.c b/app/widgets/gimpdockwindow.c
index 65aa6af..2f7829c 100644
--- a/app/widgets/gimpdockwindow.c
+++ b/app/widgets/gimpdockwindow.c
@@ -31,6 +31,8 @@
 
 #include "dialogs/dialogs.h" /* FIXME, we are in the widget layer */
 
+#include "menus/menus.h"
+
 #include "config/gimpguiconfig.h"
 
 #include "core/gimp.h"
@@ -339,7 +341,7 @@ gimp_dock_window_constructor (GType                  type,
    * dock window is the focused window
    */
   dock_window->p->ui_manager =
-    gimp_menu_factory_manager_new (dock_window->p->dialog_factory->menu_factory,
+    gimp_menu_factory_manager_new (global_menu_factory,
                                    dock_window->p->ui_manager_name,
                                    dock_window,
                                    config->tearoff_menus);
diff --git a/app/widgets/gimpsessioninfo-book.c b/app/widgets/gimpsessioninfo-book.c
index 52c1df4..ac969fa 100644
--- a/app/widgets/gimpsessioninfo-book.c
+++ b/app/widgets/gimpsessioninfo-book.c
@@ -26,6 +26,8 @@
 
 #include "widgets-types.h"
 
+#include "menus/menus.h"
+
 #include "gimpdialogfactory.h"
 #include "gimpdock.h"
 #include "gimpdockbook.h"
@@ -242,7 +244,7 @@ gimp_session_info_book_restore (GimpSessionInfoBook *info,
   g_return_val_if_fail (info != NULL, NULL);
   g_return_val_if_fail (GIMP_IS_DOCK (dock), NULL);
 
-  dockbook = gimp_dockbook_new (gimp_dock_get_dialog_factory (dock)->menu_factory);
+  dockbook = gimp_dockbook_new (global_menu_factory);
 
   gimp_dock_add_book (dock, GIMP_DOCKBOOK (dockbook), -1);
 



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