From d5f5e0cd75ca61fdd9106c21f02b883f7d402b44 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 11 Jan 2010 11:59:14 +0000 Subject: [PATCH] report errors with library linking errors. uses a hack to set the window for the popup for the menu, which is nasty but artists need to know when their files should not be resaved :( --- source/blender/blenloader/intern/readfile.c | 10 +++++++--- .../editors/interface/interface_regions.c | 4 +++- .../windowmanager/intern/wm_event_system.c | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 7b30ba603ac..5711db97d93 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -11947,10 +11947,12 @@ static void read_libraries(FileData *basefd, ListBase *mainlist) FileData *fd= mainptr->curlib->filedata; if(fd==NULL) { - ReportList reports; + /* printf and reports for now... its important users know this */ printf("read library: lib %s\n", mainptr->curlib->name); - fd= blo_openblenderfile(mainptr->curlib->filename, &reports); + BKE_reportf(basefd->reports, RPT_INFO, "read library: lib %s\n", mainptr->curlib->name); + + fd= blo_openblenderfile(mainptr->curlib->filename, basefd->reports); if (fd) { fd->reports= basefd->reports; @@ -11968,8 +11970,10 @@ static void read_libraries(FileData *basefd, ListBase *mainlist) } else mainptr->curlib->filedata= NULL; - if (fd==NULL) + if (fd==NULL) { printf("ERROR: can't find lib %s \n", mainptr->curlib->filename); + BKE_reportf(basefd->reports, RPT_ERROR, "Can't find lib %s (CAREFUL, DON'T RE-SAVE\n", mainptr->curlib->filename); + } } if(fd) { doit= 1; diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 6bc4e7b0b65..3a02b1f7e0c 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -2229,7 +2229,9 @@ void uiPupMenuReports(bContext *C, ReportList *reports) ds= BLI_dynstr_new(); for(report=reports->list.first; report; report=report->next) { - if(report->type >= RPT_ERROR) + if(report->type <= reports->printlevel) + ; /* pass */ + else if(report->type >= RPT_ERROR) BLI_dynstr_appendf(ds, "Error %%i%d%%t|%s", ICON_ERROR, report->message); else if(report->type >= RPT_WARNING) BLI_dynstr_appendf(ds, "Warning %%i%d%%t|%s", ICON_ERROR, report->message); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index f513488eca8..5f864a97d3b 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -1060,6 +1060,8 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa wm_handler_op_context(C, handler); + /* needed for uiPupMenuReports */ + if(event->val==EVT_FILESELECT_EXEC) { /* a bit weak, might become arg for WM_event_fileselect? */ /* XXX also extension code in image-save doesnt work for this yet */ @@ -1074,6 +1076,21 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa if(G.f & G_DEBUG) wm_operator_print(handler->op); + if(handler->op->reports->list.first) { + + /* FIXME, temp setting window, this is really bad! + * only have because lib linking errors need to be seen by users :( + * it can be removed without breaking anything but then no linking errors - campbell */ + wmWindow *win_prev= CTX_wm_window(C); + if(win_prev==NULL) + CTX_wm_window_set(C, CTX_wm_manager(C)->windows.first); + + handler->op->reports->printlevel = RPT_WARNING; + uiPupMenuReports(C, handler->op->reports); + + CTX_wm_window_set(C, win_prev); + } + WM_operator_free(handler->op); } } -- 2.28.0