svx/source/dialog/imapwnd.cxx |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit fdffaac63c893694df950119790ace22972ec531
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Mon Jun 30 10:01:32 2025 +0200
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Mon Jun 30 13:57:08 2025 +0200

    tdf#167274 svx: Set drawing area for ImageMap dialog early
    
    For the gtk3 VCL plugin, calling weld::DrawingArea::set_size_request
    can trigger the creation of the corresponding a11y object,
    which wants to access the drawing area to determine its states.
    
    Therefore, call the base class implementation to set the
    drawing area right at the start of IMapWindow::SetDrawingArea,
    as is done elsewhere (e.g. in CuiGraphicPreviewWindow::SetDrawingArea).
    
    This fixes a crash with the below backtrace seen after
    
        commit 62b8ebe343ec49756fdbfddd0f22cb0b15296747
        Author: Michael Weghorn <m.wegh...@posteo.de>
        Date:   Wed Feb 12 13:15:52 2025 +0100
    
            GraphCtrl a11y: Use comphelper::OAccessibleComponentHelper
    
    when opening the "Tools" -> "ImageMap" dialog in Impress or Writer
    with the gtk3 VCL plugin.
    
            Thread 1 "soffice.bin" received signal SIGSEGV, Segmentation fault.
        0x00007ffff24b0634 in weld::CustomWidgetController::HasFocus 
(this=0x55555d7068e0) at include/vcl/customweld.hxx:67
        67          bool HasFocus() const { return m_pDrawingArea->has_focus(); 
}
        (gdb) bt
        #0  0x00007ffff24b0634 in weld::CustomWidgetController::HasFocus 
(this=0x55555d7068e0) at include/vcl/customweld.hxx:67
        #1  0x00007ffff24ada4a in 
SvxGraphCtrlAccessibleContext::getAccessibleStateSet (this=0x555558db29c0) at 
/home/michi/development/git/libreoffice/svx/source/accessibility/GraphCtlAccessibleContext.cxx:256
        #2  0x00007fffe62582d8 in atk_object_wrapper_new 
(rxAccessible=uno::Reference to (SvxGraphCtrlAccessibleContext *) 
0x555558db2a10, parent=0x5555598c69a0, orig=0x555558dd9210)
            at 
/home/michi/development/git/libreoffice/vcl/unx/gtk3/a11y/atkwrapper.cxx:974
        #3  0x00007fffe62b15c4 in (anonymous 
namespace)::GtkInstanceDrawingArea::GetAtkObject (this=0x555558f99f60, 
pDefaultAccessible=0x555558dd9210) at 
/home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:18964
        #4  0x00007fffe62b14ea in (anonymous 
namespace)::drawing_area_get_accessible (pWidget=0x55555d7192f0) at 
/home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:23966
        #5  0x00007fffe5c131b5 in ??? () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #6  0x00007ffff09b4950 in g_closure_invoke () at 
/lib/x86_64-linux-gnu/libgobject-2.0.so.0
        #7  0x00007ffff09c8d43 in ??? () at 
/lib/x86_64-linux-gnu/libgobject-2.0.so.0
        #8  0x00007ffff09ca769 in ??? () at 
/lib/x86_64-linux-gnu/libgobject-2.0.so.0
        #9  0x00007ffff09d05a6 in g_signal_emit_valist () at 
/lib/x86_64-linux-gnu/libgobject-2.0.so.0
        #10 0x00007ffff09d0663 in g_signal_emit () at 
/lib/x86_64-linux-gnu/libgobject-2.0.so.0
        #11 0x00007ffff09b8b14 in ??? () at 
/lib/x86_64-linux-gnu/libgobject-2.0.so.0
        #12 0x00007ffff09ba767 in ??? () at 
/lib/x86_64-linux-gnu/libgobject-2.0.so.0
        #13 0x00007fffe62985f3 in (anonymous 
namespace)::GtkInstanceWidget::set_size_request (this=0x555558f99f60, 
nWidth=608, nHeight=383) at 
/home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:3625
        #14 0x00007ffff2617c53 in IMapWindow::SetDrawingArea 
(this=0x55555d7068e0, pDrawingArea=0x555558f9a210) at 
/home/michi/development/git/libreoffice/svx/source/dialog/imapwnd.cxx:92
        #15 0x00007fffee96f280 in weld::CustomWeld::CustomWeld 
(this=0x5555598c6520, rBuilder=..., rDrawingId="container", 
rWidgetController=...) at 
/home/michi/development/git/libreoffice/vcl/source/app/customweld.cxx:28
        #16 0x00007ffff260c4b7 in SvxIMapDlg::SvxIMapDlg (this=0x555558838180, 
_pBindings=0x555556aadbd0, pCW=0x55555d6f5530, _pParent=0x55555d723e28) at 
/home/michi/development/git/libreoffice/svx/source/dialog/imapdlg.cxx:118
        #17 0x00007ffff2616b46 in std::_Construct<SvxIMapDlg, SfxBindings*&, 
SvxIMapDlgChildWindow*, weld::Window*>
            (__p=0x555558838180, __args=@0x7fffffff4170: 0x555556aadbd0, 
__args=@0x7fffffff4148: 0x55555d6f5530, __args=@0x7fffffff4140: 0x55555d723e28) 
at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_construct.h:119
        #18 0x00007ffff2616775 in std::allocator_traits<std::allocator<void> 
>::construct<SvxIMapDlg, SfxBindings*&, SvxIMapDlgChildWindow*, weld::Window*>
            (__p=0x555558838180, __args=@0x7fffffff4170: 0x555556aadbd0, 
__args=@0x7fffffff4148: 0x55555d6f5530, __args=@0x7fffffff4140: 0x55555d723e28) 
at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/alloc_traits.h:706
        #19 std::_Sp_counted_ptr_inplace<SvxIMapDlg, std::allocator<void>, 
(__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<SfxBindings*&, 
SvxIMapDlgChildWindow*, weld::Window*>
            (this=0x555558838170, __a=..., __args=@0x7fffffff4170: 
0x555556aadbd0, __args=@0x7fffffff4148: 0x55555d6f5530, __args=@0x7fffffff4140: 
0x55555d723e28)
            at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:607
        #20 0x00007ffff26164ff in 
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<SvxIMapDlg, 
std::allocator<void>, SfxBindings*&, SvxIMapDlgChildWindow*, weld::Window*>
            (this=0x7fffffff4158, __p=@0x7fffffff4150: 0x0, __a=..., 
__args=@0x7fffffff4170: 0x555556aadbd0, __args=@0x7fffffff4148: 0x55555d6f5530, 
__args=@0x7fffffff4140: 0x55555d723e28)
            at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:970
        #21 0x00007ffff261642c in std::__shared_ptr<SvxIMapDlg, 
(__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<void>, SfxBindings*&, 
SvxIMapDlgChildWindow*, weld::Window*>
            (this=0x7fffffff4150, __tag=..., __args=@0x7fffffff4170: 
0x555556aadbd0, __args=@0x7fffffff4148: 0x55555d6f5530, __args=@0x7fffffff4140: 
0x55555d723e28)
            at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:1713
        #22 0x00007ffff26163aa in 
std::shared_ptr<SvxIMapDlg>::shared_ptr<std::allocator<void>, SfxBindings*&, 
SvxIMapDlgChildWindow*, weld::Window*>
            (this=0x7fffffff4150, __tag=..., __args=@0x7fffffff4170: 
0x555556aadbd0, __args=@0x7fffffff4148: 0x55555d6f5530, __args=@0x7fffffff4140: 
0x55555d723e28)
            at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr.h:463
        #23 0x00007ffff2612a49 in std::make_shared<SvxIMapDlg, SfxBindings*&, 
SvxIMapDlgChildWindow*, weld::Window*> (__args=@0x7fffffff4170: 0x555556aadbd0, 
__args=@0x7fffffff4148: 0x55555d6f5530, __args=@0x7fffffff4140: 0x55555d723e28)
            at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr.h:1007
        #24 0x00007ffff260bb7c in SvxIMapDlgChildWindow::SvxIMapDlgChildWindow 
(this=0x55555d6f5530, _pParent=0x5555576ad680, nId=10371, 
pBindings=0x555556aadbd0, pInfo=0x7fffffff43e8)
            at 
/home/michi/development/git/libreoffice/svx/source/dialog/imapdlg.cxx:89
        #25 0x00007ffff261290c in std::make_unique<SvxIMapDlgChildWindow, 
vcl::Window*&, unsigned short&, SfxBindings*&, SfxChildWinInfo*&>
            (__args=@0x7fffffff4230: 0x5555576ad680, __args=@0x7fffffff422e: 
10371, __args=@0x7fffffff4220: 0x555556aadbd0, __args=@0x7fffffff4218: 
0x7fffffff43e8)
            at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/unique_ptr.h:1077
        #26 0x00007ffff260b704 in SvxIMapDlgChildWindow::CreateImpl 
(pParent=0x5555576ad680, nId=10371, pBindings=0x555556aadbd0, 
pInfo=0x7fffffff43e8) at 
/home/michi/development/git/libreoffice/svx/source/dialog/imapdlg.cxx:59
        #27 0x00007ffff38c3b6f in SfxChildWindow::CreateChildWindow (nId=10371, 
pParent=0x5555576ad680, pBindings=0x555556aadbd0, rInfo=...) at 
/home/michi/development/git/libreoffice/sfx2/source/appl/childwin.cxx:242
        #28 0x00007ffff395f5bd in SfxWorkWindow::CreateChildWin_Impl 
(this=0x5555571433b0, pCW=0x55555864a020, bSetFocus=true) at 
/home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1350
        #29 0x00007ffff3961853 in SfxWorkWindow::ToggleChildWindow_Impl 
(this=0x5555571433b0, nId=10371, bSetFocus=true) at 
/home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1835
        #30 0x00007ffff403ba89 in SfxViewFrame::ToggleChildWindow 
(this=0x555557128f90, nId=10371) at 
/home/michi/development/git/libreoffice/sfx2/source/view/viewfrm.cxx:3695
        #31 0x00007fffbb6290d4 in sd::DrawViewShell::FuTemporary 
(this=0x55555728c010, rReq=...) at 
/home/michi/development/git/libreoffice/sd/source/ui/view/drviews2.cxx:3893
        #32 0x00007fffbb6949b5 in SfxStubDrawViewShellFuTemporary 
(pShell=0x55555728c010, rReq=...) at workdir/SdiTarget/sd/sdi/sdslots.hxx:1551
        #33 0x00007ffff39c8d1e in SfxDispatcher::Call_Impl 
(this=0x555556af3f30, rShell=..., rSlot=..., rReq=..., bRecord=true) at 
/home/michi/development/git/libreoffice/sfx2/source/control/dispatch.cxx:256
        #34 0x00007ffff39cd5d6 in SfxDispatcher::Execute_ (this=0x555556af3f30, 
rShell=..., rSlot=..., rReq=..., eCallMode=SfxCallMode::RECORD) at 
/home/michi/development/git/libreoffice/sfx2/source/control/dispatch.cxx:755
        #35 0x00007ffff39b59ee in SfxBindings::Execute_Impl 
(this=0x555556aadbd0, aReq=..., pSlot=0x7fffbb7c6270 
<aDrawViewShellSlots_Impl+14400>, pShell=0x55555728c010)
            at 
/home/michi/development/git/libreoffice/sfx2/source/control/bindings.cxx:1046
        #36 0x00007ffff3a95e2d in SfxDispatchController_Impl::dispatch 
(this=0x555557e27950, aURL=..., aArgs=empty uno::Sequence, rListener=empty 
uno::Reference) at 
/home/michi/development/git/libreoffice/sfx2/source/control/unoctitm.cxx:736
        #37 0x00007ffff3a948e4 in SfxOfficeDispatch::dispatch 
(this=0x555557e278b0, aURL=..., aArgs=empty uno::Sequence) at 
/home/michi/development/git/libreoffice/sfx2/source/control/unoctitm.cxx:255
        #38 0x00007ffff4f0bd04 in framework::(anonymous 
namespace)::AsyncMenuExecute (data=0x5555588c6000) at 
/home/michi/development/git/libreoffice/framework/source/uielement/menubarmanager.cxx:790
        #39 0x00007fffee275a41 in Link<void*, void>::Call (this=0x55555d70f598, 
data=0x5555588c6000) at include/tools/link.hxx:105
        #40 0x00007fffee271c71 in ImplHandleUserEvent (pSVEvent=0x55555d70f590) 
at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2285
        #41 0x00007fffee26eb9f in ImplWindowFrameProc (_pWindow=0x555556ba6530, 
nEvent=SalEvent::UserEvent, pEvent=0x55555d70f590) at 
/home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2849
        #42 0x00007fffeee4638c in SalFrame::CallCallback (this=0x5555569908a0, 
nEvent=SalEvent::UserEvent, pEvent=0x55555d70f590) at vcl/inc/salframe.hxx:310
        #43 0x00007fffeee6ed1f in SalGenericDisplay::ProcessEvent 
(this=0x5555568f8ef0, aEvent=...) at 
/home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:66
        #44 0x00007fffee97966d in 
SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const 
(this=0x7fffffffb920) at 
/home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
        #45 0x00007fffee97953b in SalUserEventList::DispatchUserEvents 
(this=0x5555568f8ef0, bHandleAllCurrentEvents=false) at 
/home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
        #46 0x00007fffeee6ec75 in SalGenericDisplay::DispatchInternalEvent 
(this=0x5555568f8ef0, bHandleAllCurrentEvent=false) at 
/home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:51
        #47 0x00007fffe62891ef in call_userEventFn (data=0x5555555b3ab0) at 
/home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkdata.cxx:827
        #48 0x00007fffe99043c5 in ??? () at 
/lib/x86_64-linux-gnu/libglib-2.0.so.0
        #49 0x00007fffe99065f7 in ??? () at 
/lib/x86_64-linux-gnu/libglib-2.0.so.0
        #50 0x00007fffe9906d60 in g_main_context_iteration () at 
/lib/x86_64-linux-gnu/libglib-2.0.so.0
        #51 0x00007fffe6287e6c in GtkSalData::Yield (this=0x5555555b3ab0, 
bWait=true, bHandleAllCurrentEvents=false) at 
/home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkdata.cxx:405
        #52 0x00007fffe628cf13 in GtkInstance::DoYield (this=0x5555555b3960, 
bWait=true, bHandleAllCurrentEvents=false) at 
/home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:439
        #53 0x00007fffeea45406 in ImplYield (i_bWait=true, i_bAllEvents=false) 
at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:385
        #54 0x00007fffeea44d1f in Application::Yield () at 
/home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:488
        #55 0x00007fffeea44b00 in Application::Execute () at 
/home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:360
        #56 0x00007ffff7b29455 in desktop::Desktop::Main (this=0x7fffffffd660) 
at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1678
        #57 0x00007fffeea6f1b6 in ImplSVMain () at 
/home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:230
        #58 0x00007fffeea70ca9 in SVMain () at 
/home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:248
        #59 0x00007ffff7ba387a in soffice_main () at 
/home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:122
        #60 0x00005555555559fd in sal_main () at 
/home/michi/development/git/libreoffice/desktop/source/app/main.c:51
        #61 0x00005555555559d7 in main (argc=2, argv=0x7fffffffd868) at 
/home/michi/development/git/libreoffice/desktop/source/app/main.c:49
    
    Change-Id: I9488a66c1512e41b37bcea0d4bb25a6733884976
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187162
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>
    Tested-by: Jenkins

diff --git a/svx/source/dialog/imapwnd.cxx b/svx/source/dialog/imapwnd.cxx
index 66a367f0d8bc..d00fcd724a3b 100644
--- a/svx/source/dialog/imapwnd.cxx
+++ b/svx/source/dialog/imapwnd.cxx
@@ -88,10 +88,10 @@ IMapWindow::~IMapWindow()
 
 void IMapWindow::SetDrawingArea(weld::DrawingArea* pDrawingArea)
 {
+    weld::CustomWidgetController::SetDrawingArea(pDrawingArea);
     Size aSize(pDrawingArea->get_ref_device().LogicToPixel(Size(270, 170), 
MapMode(MapUnit::MapAppFont)));
     pDrawingArea->set_size_request(aSize.Width(), aSize.Height());
     SetOutputSizePixel(aSize);
-    weld::CustomWidgetController::SetDrawingArea(pDrawingArea);
 
     SetSdrMode(true);
 

Reply via email to