[gimp] app: Don't crash when detaching dockables from image window
- From: Martin Nordholts <martinn src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] app: Don't crash when detaching dockables from image window
- Date: Thu, 10 Dec 2009 18:34:15 +0000 (UTC)
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]