summaryrefslogtreecommitdiff
path: root/tools/source/ref/errinf.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'tools/source/ref/errinf.cxx')
-rw-r--r--tools/source/ref/errinf.cxx29
1 files changed, 22 insertions, 7 deletions
diff --git a/tools/source/ref/errinf.cxx b/tools/source/ref/errinf.cxx
index 0ddbafdbad66..d97c91d9626b 100644
--- a/tools/source/ref/errinf.cxx
+++ b/tools/source/ref/errinf.cxx
@@ -23,6 +23,7 @@
#include <tools/errinf.hxx>
#include <rtl/strbuf.hxx>
#include <osl/diagnose.h>
+#include <vcl/window.hxx>
class ErrorHandler;
@@ -185,22 +186,31 @@ static void aDspFunc(const OUString &rErr, const OUString &rAction)
OSL_FAIL(aErr.getStr());
}
+// FIXME: this is a horrible reverse dependency on VCL
+struct ErrorContextImpl
+{
+ ErrorContext *pNext;
+ vcl::Window *pWin; // should be VclPtr for strong lifecyle
+};
+
ErrorContext::ErrorContext(vcl::Window *pWinP)
{
+ pImpl = new ErrorContextImpl();
EDcrData *pData=EDcrData::GetData();
- ErrorContext *&pHdl=pData->pFirstCtx;
- pWin=pWinP;
- pNext=pHdl;
- pHdl=this;
+ ErrorContext *&pHdl = pData->pFirstCtx;
+ pImpl->pWin = pWinP;
+ pImpl->pNext = pHdl;
+ pHdl = this;
}
ErrorContext::~ErrorContext()
{
ErrorContext **ppCtx=&(EDcrData::GetData()->pFirstCtx);
while(*ppCtx && *ppCtx!=this)
- ppCtx=&((*ppCtx)->pNext);
+ ppCtx=&((*ppCtx)->pImpl->pNext);
if(*ppCtx)
- *ppCtx=(*ppCtx)->pNext;
+ *ppCtx=(*ppCtx)->pImpl->pNext;
+ delete pImpl;
}
ErrorContext *ErrorContext::GetContext()
@@ -229,6 +239,11 @@ ErrorHandler::~ErrorHandler()
delete pImpl;
}
+vcl::Window* ErrorContext::GetParent()
+{
+ return pImpl ? pImpl->pWin : NULL;
+}
+
void ErrorHandler::RegisterDisplay(WindowDisplayErrorFunc *aDsp)
{
EDcrData *pData=EDcrData::GetData();
@@ -275,7 +290,7 @@ sal_uInt16 ErrorHandler::HandleError_Impl(
pCtx->GetString(pInfo->GetErrorCode(), aAction);
vcl::Window *pParent=0;
// Remove parent from context
- for(;pCtx;pCtx=pCtx->pNext)
+ for(;pCtx;pCtx=pCtx->pImpl->pNext)
if(pCtx->GetParent())
{
pParent=pCtx->GetParent();