[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