[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57204] trunk/blender/source/blender: fix [#35434] Segmentation fault switching screen layout from python

Campbell Barton ideasman42 at gmail.com
Sun Jun 2 22:59:00 CEST 2013


Revision: 57204
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57204
Author:   campbellbarton
Date:     2013-06-02 20:59:00 +0000 (Sun, 02 Jun 2013)
Log Message:
-----------
fix [#35434] Segmentation fault switching screen layout from python
(take 2), only free popup handlers.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/UI_interface.h
    trunk/blender/source/blender/editors/interface/interface_handlers.c
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_interface.h	2013-06-02 20:39:32 UTC (rev 57203)
+++ trunk/blender/source/blender/editors/include/UI_interface.h	2013-06-02 20:59:00 UTC (rev 57204)
@@ -687,6 +687,7 @@
 void UI_add_region_handlers(struct ListBase *handlers);
 void UI_add_popup_handlers(struct bContext *C, struct ListBase *handlers, uiPopupBlockHandle *popup);
 void UI_remove_popup_handlers(struct ListBase *handlers, uiPopupBlockHandle *popup);
+void UI_remove_popup_handlers_all(struct bContext *C, struct ListBase *handlers);
 
 /* Module
  *

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2013-06-02 20:39:32 UTC (rev 57203)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2013-06-02 20:59:00 UTC (rev 57204)
@@ -7662,6 +7662,11 @@
 	WM_event_remove_ui_handler(handlers, ui_handler_popup, ui_handler_remove_popup, popup, FALSE);
 }
 
+void UI_remove_popup_handlers_all(bContext *C, ListBase *handlers)
+{
+	WM_event_free_ui_handler_all(C, handlers, ui_handler_popup, ui_handler_remove_popup);
+}
+
 bool UI_textbutton_activate_event(const bContext *C, ARegion *ar,
                                   const void *rna_poin_data, const char *rna_prop_id)
 {

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2013-06-02 20:39:32 UTC (rev 57203)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2013-06-02 20:59:00 UTC (rev 57204)
@@ -247,8 +247,11 @@
 			if (note->window == win) {
 				if (note->category == NC_SCREEN) {
 					if (note->data == ND_SCREENBROWSE) {
-						/* do not free handlers here! [#35434] */
+						/* free popup handlers only [#35434] */
+						wmWindow *win = CTX_wm_window(C);
+						UI_remove_popup_handlers_all(C, &win->modalhandlers);
 
+
 						ED_screen_set(C, note->reference);  // XXX hrms, think this over!
 						if (G.debug & G_DEBUG_EVENTS)
 							printf("%s: screen set %p\n", __func__, note->reference);




More information about the Bf-blender-cvs mailing list