From 9090dc1f3b27195f5defd35586ac79357992be21 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Mon, 18 Jan 2021 18:27:19 +0200 Subject: split OutputDevice from Window as part of a longer-term goal of doing our widget rendering only inside a top-level render- context. I moved all of the OutputDevice-related code that existed in vcl::Window into a new subclass of OutputDevice called WindowOutputDevice. Notes for further work (*) not sure why we are getting an 1x1 surface in SvpSalGraphics::releaseCairoContext, but to fix it I clamp the size there (*) might have to dump VCLXDevice, and move it's code down into VCLXWindow and VCLXVirtualDevice (*) can we remove use of VCLXDevice in other places, in favour of just talking to the VCL code? Change-Id: I105946377f5322677d6f7d0c1c23847178a720b6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113204 Tested-by: Jenkins Reviewed-by: Noel Grandin --- compilerplugins/clang/vclwidgets.cxx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'compilerplugins/clang') diff --git a/compilerplugins/clang/vclwidgets.cxx b/compilerplugins/clang/vclwidgets.cxx index 92bc4a0c3911..804b4cc26489 100644 --- a/compilerplugins/clang/vclwidgets.cxx +++ b/compilerplugins/clang/vclwidgets.cxx @@ -596,11 +596,13 @@ bool VCLWidgets::VisitFunctionDecl( const FunctionDecl* functionDecl ) // check the last thing that the dispose() method does, is to call into the superclass dispose method if (loplugin::DeclCheck(functionDecl).Function("dispose")) { if (!isDisposeCallingSuperclassDispose(pMethodDecl)) { - report( - DiagnosticsEngine::Warning, - BASE_REF_COUNTED_CLASS " subclass dispose() function MUST call dispose() of its superclass as the last thing it does", - compat::getBeginLoc(functionDecl)) - << functionDecl->getSourceRange(); + // We specifically have to clear a member variable AFTER calling super::dispose() here, unfortunately + if (!loplugin::DeclCheck(pMethodDecl->getParent()).Class("WindowOutputDevice")) + report( + DiagnosticsEngine::Warning, + BASE_REF_COUNTED_CLASS " subclass dispose() function MUST call dispose() of its superclass as the last thing it does", + compat::getBeginLoc(functionDecl)) + << functionDecl->getSourceRange(); } } } -- cgit