Bug 132007 - Improve the password-protected document unlock prompt dialog's text strings and layout
Summary: Improve the password-protected document unlock prompt dialog's text strings a...
Status: ASSIGNED
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: UI (show other bugs)
Version:
(earliest affected)
6.4.0.3 release
Hardware: All All
: medium enhancement
Assignee: Devansh Varshney
URL:
Whiteboard:
Keywords: difficultyMedium, easyHack, skillCpp, topicUI
Depends on:
Blocks: Password-Protected
  Show dependency treegraph
 
Reported: 2020-04-09 16:51 UTC by Jeff Fortin Tam
Modified: 2025-05-14 19:40 UTC (History)
6 users (show)

See Also:
Crash report or crash signature:


Attachments
Screnshot with https://gerrit.libreoffice.org/c/core/+/163924 PS 9 in place for discussion in the Gerrit change (14.86 KB, image/png)
2024-03-15 14:15 UTC, Michael Weghorn
Details
message box after c#15 (16.49 KB, patch)
2024-03-19 03:03 UTC, Devansh Varshney
Details
without the Password label (112.34 KB, image/png)
2024-03-19 17:23 UTC, Devansh Varshney
Details
with the password label (125.84 KB, image/png)
2024-03-19 17:24 UTC, Devansh Varshney
Details
File created after patchset 15 (104.17 KB, image/png)
2024-03-25 15:59 UTC, Devansh Varshney
Details
Title is Set Password (138.84 KB, image/png)
2024-03-25 17:06 UTC, Devansh Varshney
Details
password_working (1.76 MB, image/png)
2025-04-22 17:56 UTC, Devansh Varshney
Details
A really long file name (1.85 MB, image/png)
2025-04-22 17:59 UTC, Devansh Varshney
Details
Fixed displaying the encoded version of the URL, not the decoded, human-readable version that users would expect to see (with actual spaces, äöü, etc.) (67.67 KB, image/png)
2025-05-07 15:05 UTC, Devansh Varshney
Details
aFileNameShort = OUString(aFileName.subView(0, 47)) + u"…"_ustr; (101.67 KB, image/png)
2025-05-14 09:58 UTC, Devansh Varshney
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Jeff Fortin Tam 2020-04-09 16:51:02 UTC
Description:
When you open a password-protected document, you are presented with a simple GtkDialog window that has "Enter password" as the window title and this following layout:

Enter password to open file:
file:///home/bob/path/to/the/file.ods
[ *******************                ]
( Help )             ( Cancel ) ( OK )

The "file:///full_path_blahblah" part bugs me, because it eats 90% of the space and makes it harder to see the actual file name. The path is also irrelevant to me because I _just_ requested to open the file, which either means I tried opening it from my file browser application (and therefore know the path) or that I tried opening it with LibreOffice's file open dialog (ditto) or that I tried opening it from the "Recent Files" quick menu (in which case I clearly don't care about the file's path, since I couldn't even be bothered to use a file manager to dig it up).

So I would suggest that the string becomes:

'The file "%s" is password-protected. Enter the password to open it:'

Where %s is the human-readable file name. It could be without the extension (ex: "TPS report") or with the extension (ex: "<b>TPS report</b>.ods") if you're worried about non-technical users needing to be able to cite the file extension along with the filename.

The "OK" button in that GtkDialog should also be "insensitive" until something has been entered in the password field.

Actual Results:
 

Expected Results:
 


Reproducible: Always


User Profile Reset: No



Additional Info:
Comment 1 Jean-Baptiste Faure 2020-04-19 14:56:17 UTC
What is your LibreOffice version? In a recent version, at least since LibreOffice 6.0, this dialog can be resized, so that the length of the path does not matter.

Status set to NEEDINFO, please set it back to UNCONFIRMED once requested
informations are provided.

Best regards. JBF
Comment 2 QA Administrators 2020-10-17 04:20:52 UTC Comment hidden (obsolete)
Comment 3 Jeff Fortin Tam 2020-10-19 12:51:31 UTC
Hi J-B, I'm running version 6.4. Sure the dialog is resizeable, but the user shouldn't have to resize it, that's a pain in the butt (and I can assure you most will not even think of this possibility, judging from the non-technical users I study), it should be easily and quickly readable in the first place.
Comment 4 Heiko Tietze 2021-08-18 08:39:56 UTC
We decided to make dialog non-resizable unless user input requires to resize. And I support the idea. 

Code pointer: STR_ENTER_PASSWORD_TO_OPEN and STR_ENTER_PASSWORD_TO_MODIFY in uui/inc/strings.hrc and uui/uiconfig/ui/password.ui (we have 5 different passwd dialogs!) for the UI. Code is at uui/source/passworddlg.cxx.

It's a generic dialog that might be used somewhere else. => medium difficulty and Thorsten for a second opinion.
Comment 5 Devansh Varshney 2024-02-26 08:49:04 UTC
After tinkering on the code related to this there are few things I wanted to ask/say -

1> The tdf#66553 - add file name to title bar for password managers 
   - has added the file name along with its extension in the Password title box.

2> The link to the file doesn't seem wrong in the case of if this functionality is used by some extension to open a file (in case of remote access) it will help the user to know exactly where the file is located.

This is how currently the password dialog pops-up -

  -|-------------------------------------------------------------------|-
   |                      Enter Password - dev.odt                     |   
   |                                                                   |
   |  The file is password-protected. Enter the password to open it:   |
   |  file:///home/devansh/Documents/dev.odt                           | 
   |                                                                   |
   |   Help                                         Cancel       OK    |
   |                                                                   | 
  -|-------------------------------------------------------------------|-

Is this intuition okay?
Comment 6 Heiko Tietze 2024-02-26 09:38:42 UTC
(In reply to Devansh Varshney from comment #5)
> Is this intuition okay?
Reading c0 again sounds like the way to go. 

(In reply to Jeff Fortin Tam from comment #0)
> 'The file "%s" is password-protected.\nPlease enter the password:'
Actual issue was the potentially lengthy folder structure; sometimes it might be relevant but most often it isn't. We could show the full URI in a tooltip.
Comment 7 Devansh Varshney 2024-02-26 10:43:54 UTC
(In reply to Heiko Tietze from comment #6)
> (In reply to Devansh Varshney from comment #5)
> > Is this intuition okay?
> Reading c0 again sounds like the way to go. 
> 
> (In reply to Jeff Fortin Tam from comment #0)
> > 'The file "%s" is password-protected.\nPlease enter the password:'
> Actual issue was the potentially lengthy folder structure; sometimes it
> might be relevant but most often it isn't. We could show the full URI in a
> tooltip.

I did made changes and this is currently what we are showing -

https://pasteboard.co/LL2eIt03QDA8.png

I am currently tweaking the OK button disability initially till any text is entered in the box.
Comment 8 Devansh Varshney 2024-02-26 15:27:53 UTC
https://pasteboard.co/YDGqDUqbO5C6.png


Working as expected -

https://youtu.be/BxyGar8kPbg
Comment 9 Jeff Fortin Tam 2024-03-10 01:37:09 UTC
What is demonstrated in the video seems like a nice improvement!

If you want to go the extra mile, as Heiko suggested maybe a tooltip on hover could be attached to label (for the folder path), though I don't know if that's really considered a must-have. Personally I can't think of a case where I would care to know the folder path for a file I just opened.

I guess the next step would be to send a git merge request for this, in any case.
Comment 10 Devansh Varshney 2024-03-13 08:31:55 UTC
(In reply to Jeff Fortin Tam from comment #9)
> What is demonstrated in the video seems like a nice improvement!
> 
> If you want to go the extra mile, as Heiko suggested maybe a tooltip on
> hover could be attached to label (for the folder path), though I don't know
> if that's really considered a must-have. Personally I can't think of a case
> where I would care to know the folder path for a file I just opened.
> 
> I guess the next step would be to send a git merge request for this, in any
> case.

Sorry for the delayed reply as I opened this today.

I did created the PR - https://gerrit.libreoffice.org/c/core/+/163924

I am looking for the option for the tooltip on hover.
Comment 11 Devansh Varshney 2024-03-14 03:30:25 UTC
(In reply to Jeff Fortin Tam from comment #9)
> What is demonstrated in the video seems like a nice improvement!
> 
> If you want to go the extra mile, as Heiko suggested maybe a tooltip on
> hover could be attached to label (for the folder path), though I don't know
> if that's really considered a must-have. Personally I can't think of a case
> where I would care to know the folder path for a file I just opened.
> 
> I guess the next step would be to send a git merge request for this, in any
> case.


added the option of complete file path on hovering the dialog box - https://youtu.be/p1K1U1FNdns
Comment 12 Michael Weghorn 2024-03-15 14:15:06 UTC
Created attachment 193130 [details]
Screnshot with https://gerrit.libreoffice.org/c/core/+/163924 PS 9 in place for discussion in the Gerrit change
Comment 13 Devansh Varshney 2024-03-15 17:42:10 UTC
(In reply to Michael Weghorn from comment #12)
> Created attachment 193130 [details]
> Screnshot with https://gerrit.libreoffice.org/c/core/+/163924 PS 9 in place
> for discussion in the Gerrit change

Have a look at this video https://youtu.be/ugqUnZI7mS0

is this now aligned with what we were looking?
Comment 14 Michael Weghorn 2024-03-18 10:39:00 UTC
(In reply to Devansh Varshney from comment #13)
> (In reply to Michael Weghorn from comment #12)
> > Created attachment 193130 [details]
> > Screnshot with https://gerrit.libreoffice.org/c/core/+/163924 PS 9 in place
> > for discussion in the Gerrit change
> 
> Have a look at this video https://youtu.be/ugqUnZI7mS0
> 
> is this now aligned with what we were looking?

I'll leave deciding what's the wanted design to our UX team.

In my opinion:
* There's extra unused space above and below the label seems unnecessary.
* The placeholder text in the GtkEntry is nice, but I wouldn't drop the prompt "Enter password to open file" (or similar) from above the entry, as it's e.g. otherwise no longer to be seen when starting to type a password (-> might be considered a bit of a lack of context).

FWIW, I personally prefer to see the whole file name at once, but that might be different from what most users would want.
Comment 15 Michael Weghorn 2024-03-18 10:47:55 UTC
(In reply to Michael Weghorn from comment #14)
> FWIW, I personally prefer to see the whole file name at once, but that might
> be different from what most users would want.

"... the whole file *path* at once ..." is what I mean. (Sorry for the confusion.)
Comment 16 Devansh Varshney 2024-03-18 17:06:15 UTC
(In reply to Michael Weghorn from comment #14)
> I'll leave deciding what's the wanted design to our UX team.
> 
> In my opinion:
> * There's extra unused space above and below the label seems unnecessary.
> * The placeholder text in the GtkEntry is nice, but I wouldn't drop the
> prompt "Enter password to open file" (or similar) from above the entry, as
> it's e.g. otherwise no longer to be seen when starting to type a password
> (-> might be considered a bit of a lack of context).
> 
> FWIW, I personally prefer to see the whole file name at once, but that might
> be different from what most users would want.

* I thought to add those space for a better hover if someone wants to look at the complete file path and it also seems a bit spacious.

* I did this as this is how most of the password forms are being used on the apps and web specially. I can revert/change these changes
Comment 17 Devansh Varshney 2024-03-19 03:03:57 UTC
Created attachment 193186 [details]
message box after c#15

This is now the UI for the password dialog is shown after the suggestion from c#15
Comment 18 Heiko Tietze 2024-03-19 08:27:35 UTC
(In reply to Devansh Varshney from comment #17)
> Created attachment 193186 [details]
> message box after c#15
> 
> This is now the UI for the password dialog is shown after the suggestion
> from c#15

Information text on top ending with period, buddy label for the control left of it (it's needed for a11y) ending with a colon. Distance between info label and control 6px between buddy label and control 3px. Margin around the parent frame/grid 12px.

 The file "Untitled 1.odt" is password protected.
 _P_assword: [             ]

I dislike the repetition at dialog title and content and suggest to change it to "Password protection", or the like.

Please test with a ridiculous long file name. But showing this once sounds okay to me.
Comment 19 Devansh Varshney 2024-03-19 17:23:24 UTC
Created attachment 193202 [details]
without the Password label
Comment 20 Devansh Varshney 2024-03-19 17:24:37 UTC
Created attachment 193203 [details]
with the password label
Comment 21 Devansh Varshney 2024-03-19 17:26:49 UTC
I have added two Screenshot with/out Password label.

here is the video for the file opening with a really long name

https://youtu.be/j5vOE3hdu9U
Comment 22 Devansh Varshney 2024-03-20 04:15:22 UTC
https://youtu.be/P_5cQJLRi0I

final clip
Comment 23 Devansh Varshney 2024-03-25 15:59:48 UTC
Created attachment 193297 [details]
File created after patchset 15

I created a file in the morning with the 

File -> Save As -> tick the checkbox to save with password

and it got saved with the password.
Comment 24 Devansh Varshney 2024-03-25 17:06:44 UTC
Created attachment 193298 [details]
Title is Set Password

 devansh   132007_improve_pswd_msg_lckd_dcmnt  instdir/program/soffice --writer
warn:unotools.misc:10880:10880:unotools/source/misc/mediadescriptor.cxx:372: url: 'private:factory/swriter' com.sun.star.ucb.ContentCreationException message: "No Content Provider available for URL: private:factory/swriter at /home/devansh/libreoffice/ucbhelper/source/client/content.cxx:208" eError: (com.sun.star.ucb.ContentCreationError) NO_CONTENT_PROVIDER
warn:legacy.tools:10880:10880:sfx2/source/control/bindings.cxx:1770: No cache for OfficeDispatch!
warn:sal.file:10880:10880:sal/osl/unx/file_misc.cxx:659: Invalid file URL
warn:sal.file:10880:10880:sal/osl/unx/file_misc.cxx:659: Invalid file URL
Comment 25 Devansh Varshney 2025-04-22 17:56:52 UTC
Created attachment 200458 [details]
password_working

The password Protection UI now showing the file name and upon hovering showing the full path.
Comment 26 Devansh Varshney 2025-04-22 17:59:57 UTC
Created attachment 200459 [details]
A really long file name

File with a long name.
Comment 27 Devansh Varshney 2025-05-07 15:05:16 UTC
Created attachment 200692 [details]
Fixed displaying the encoded version of the URL, not the decoded, human-readable version that users would expect to see (with actual spaces, äöü, etc.)
Comment 28 Devansh Varshney 2025-05-14 09:58:42 UTC
Created attachment 200798 [details]
aFileNameShort = OUString(aFileName.subView(0, 47)) + u"…"_ustr;

The main label still shows ... (three dots) instead of … (single typographic ellipsis)

on my MacOS.
Comment 29 Devansh Varshney 2025-05-14 19:22:27 UTC
 Devanshs-MacBook-Pro    \lode\dev\libreoffice  ➜ (   132007_password_message  4)   14m 33.265s   12:43 AM   
 ⚡devanshvarshney ❯❯ LANG=C SAL_USE_VCLPLUGIN=gen make debugrun
make -j 8  -rs -f /Users/devanshvarshney/lode/dev/libreoffice/Makefile.gbuild   debugrun
(lldb) target create "/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/MacOS/soffice"
Current executable set to '/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/MacOS/soffice' (arm64).
(lldb) settings set -- target.run-args  "--norestore" "--nologo" "\"--accept=pipe,name=devanshvarshney\\;urp\""
(lldb) b sd/source/ui/slidesorter/view/SlsFramePainter.cxx:47
Breakpoint 1: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.
(lldb) b PasswordDialog::PasswordDialog
Breakpoint 2: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.
(lldb) run
Process 75949 launched: '/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/MacOS/soffice' (arm64)
warn:sal.osl:75949:10462688:sal/osl/unx/module.cxx:103: dlopen(/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/Frameworks/libvclplug_genlo.dylib, 9): dlopen(/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/Frameworks/libvclplug_genlo.dylib, 0x0009): tried: '/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/Frameworks/libvclplug_genlo.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/Frameworks/libvclplug_genlo.dylib' (no such file), '/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/Frameworks/libvclplug_genlo.dylib' (no such file)
warn:vcl.plugadapt:75949:10462688:vcl/source/app/salplug.cxx:158: could not load shared object libvclplug_genlo.dylib
warn:vcl.skia:75949:10462688:vcl/quartz/cgutils.mm:105: Default MTLDevice is "Apple M4"
2 locations added to breakpoint 2
1 location added to breakpoint 1
warn:vcl.app:75949:10462688:vcl/source/app/UserResourceScanner.cxx:51: Could not determine status for file 'file:///Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/user/themes'.
2025-05-15 00:44:14.092158+0530 soffice[75949:10462979] [logging-persist] cannot open file at line 49448 of [1b37c146ee]
2025-05-15 00:44:14.092170+0530 soffice[75949:10462979] [logging-persist] os_unix.c:49448: (2) open(/private/var/db/DetachedSignatures) - No such file or directory
Process 75949 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x000000046a4b2728 libsdlo.dylib`sd::slidesorter::view::FramePainter::FramePainter(this=0x0000000140b49e00, rShadowBitmap=0x000000042c54dae0) at SlsFramePainter.cxx:47:9
   44  	    else
   45  	    {
   46  	        OSL_ASSERT(rShadowBitmap.GetSizePixel().Width() == rShadowBitmap.GetSizePixel().Height());
-> 47  	        OSL_ASSERT((rShadowBitmap.GetSizePixel().Width()-1)%2 == 0);
   48  	        OSL_ASSERT(((rShadowBitmap.GetSizePixel().Width()-1)/2)%2 == 1);
   49  	    }
   50  	}
Target 0: (soffice) stopped.
(lldb) p rShadowBitmap.GetSizePixel().Width()
(tools::Long) 20
(lldb) expr (rShadowBitmap.GetSizePixel().Width() - 1) % 2
(tools::Long) $0 = 1
(lldb) expr rShadowBitmap.GetSizePixel().Width() == rShadowBitmap.GetSizePixel().Height()
(bool) $1 = true
(lldb) p rShadowBitmap.GetSizePixel().Height()
(tools::Long) 20
(lldb)  bt
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
  * frame #0: 0x000000046a4b2728 libsdlo.dylib`sd::slidesorter::view::FramePainter::FramePainter(this=0x0000000140b49e00, rShadowBitmap=0x000000042c54dae0) at SlsFramePainter.cxx:47:9
    frame #1: 0x000000046a4b2950 libsdlo.dylib`sd::slidesorter::view::FramePainter::FramePainter(this=0x0000000140b49e00, rShadowBitmap=0x000000042c54dae0) at SlsFramePainter.cxx:37:1
    frame #2: 0x000000046a4d3290 libsdlo.dylib`sd::slidesorter::view::PageObjectPainter::PageObjectPainter(this=0x000060000039d3f8, rSlideSorter=0x000060000019d650) at SlsPageObjectPainter.cxx:48:32
    frame #3: 0x000000046a4d345c libsdlo.dylib`sd::slidesorter::view::PageObjectPainter::PageObjectPainter(this=0x000060000039d3f8, rSlideSorter=0x000060000019d650) at SlsPageObjectPainter.cxx:49:1
    frame #4: 0x000000046a4b1f7c libsdlo.dylib`sd::slidesorter::view::PageObjectPainter* std::__1::construct_at[abi:ne190102]<sd::slidesorter::view::PageObjectPainter, sd::slidesorter::SlideSorter&, sd::slidesorter::view::PageObjectPainter*>(__location=0x000060000039d3f8, __args=0x000060000019d650) at construct_at.h:41:83
    frame #5: 0x000000046a4b1f4c libsdlo.dylib`sd::slidesorter::view::PageObjectPainter* std::__1::__construct_at[abi:ne190102]<sd::slidesorter::view::PageObjectPainter, sd::slidesorter::SlideSorter&, sd::slidesorter::view::PageObjectPainter*>(__location=0x000060000039d3f8, __args=0x000060000019d650) at construct_at.h:49:10
    frame #6: 0x000000046a4b1d68 libsdlo.dylib`void std::__1::allocator_traits<std::__1::allocator<sd::slidesorter::view::PageObjectPainter>>::construct[abi:ne190102]<sd::slidesorter::view::PageObjectPainter, sd::slidesorter::SlideSorter&, void, 0>((null)=0x000000016fdf2066, __p=0x000060000039d3f8, __args=0x000060000019d650) at allocator_traits.h:328:5
    frame #7: 0x000000046a4b1c74 libsdlo.dylib`std::__1::__shared_ptr_emplace<sd::slidesorter::view::PageObjectPainter, std::__1::allocator<sd::slidesorter::view::PageObjectPainter>>::__shared_ptr_emplace[abi:ne190102]<sd::slidesorter::SlideSorter&, std::__1::allocator<sd::slidesorter::view::PageObjectPainter>, 0>(this=0x000060000039d3e0, __a=allocator<sd::slidesorter::view::PageObjectPainter> @ 0x000000016fdf2067, __args=0x000060000019d650) at shared_ptr.h:266:5
    frame #8: 0x000000046a4b192c libsdlo.dylib`std::__1::__shared_ptr_emplace<sd::slidesorter::view::PageObjectPainter, std::__1::allocator<sd::slidesorter::view::PageObjectPainter>>::__shared_ptr_emplace[abi:ne190102]<sd::slidesorter::SlideSorter&, std::__1::allocator<sd::slidesorter::view::PageObjectPainter>, 0>(this=0x000060000039d3e0, __a=allocator<sd::slidesorter::view::PageObjectPainter> @ 0x000000016fdf209f, __args=0x000060000019d650) at shared_ptr.h:263:115
    frame #9: 0x000000046a4b1800 libsdlo.dylib`std::__1::shared_ptr<sd::slidesorter::view::PageObjectPainter> std::__1::allocate_shared[abi:ne190102]<sd::slidesorter::view::PageObjectPainter, std::__1::allocator<sd::slidesorter::view::PageObjectPainter>, sd::slidesorter::SlideSorter&, 0>(__a=0x000000016fdf2157, __args=0x000060000019d650) at shared_ptr.h:845:51
    frame #10: 0x000000046a4acda4 libsdlo.dylib`std::__1::shared_ptr<sd::slidesorter::view::PageObjectPainter> std::__1::make_shared[abi:ne190102]<sd::slidesorter::view::PageObjectPainter, sd::slidesorter::SlideSorter&, 0>(__args=0x000060000019d650) at shared_ptr.h:853:10
    frame #11: 0x000000046a4aa838 libsdlo.dylib`sd::slidesorter::view::SlideSorterView::GetPageObjectPainter(this=0x00000001411d2000) at SlideSorterView.cxx:822:31
    frame #12: 0x000000046a4ac130 libsdlo.dylib`sd::slidesorter::view::SlideSorterView::Paint(this=0x00000001411d2000, rDevice=0x0000000469a21260, rRepaintArea=0x0000600002c51a60) at SlideSorterView.cxx:625:16
    frame #13: 0x000000046a4b010c libsdlo.dylib`sd::slidesorter::view::(anonymous namespace)::Painter::Paint(this=0x0000600003819098, rDevice=0x0000000469a21260, rRepaintArea=0x0000600002c51a60) at SlideSorterView.cxx:74:20
    frame #14: 0x000000046a4c34a0 libsdlo.dylib`sd::slidesorter::view::(anonymous namespace)::Layer::Repaint(this=0x000060000019e078, rTargetDevice=0x0000000469a21260, rRepaintRectangle=0x0000600002c51a60) at SlsLayeredDevice.cxx:445:17
    frame #15: 0x000000046a4c3368 libsdlo.dylib`sd::slidesorter::view::LayeredDevice::RepaintRectangle(this=0x00006000048fed18, rRepaintRectangle=0x0000600002c51a60) at SlsLayeredDevice.cxx:287:17
    frame #16: 0x000000046a4cd920 libsdlo.dylib`sd::slidesorter::view::LayeredDevice::Repaint(vcl::Region const&)::$_0::operator()(this=0x000000016fdf2680, r=0x0000600002c51a60) const at SlsLayeredDevice.cxx:267:58
    frame #22: 0x000000046a4c55c4 libsdlo.dylib`std::__1::function<void (tools::Rectangle const&)>::operator()(this= Lambda in File SlsLayeredDevice.cxx at Line 267, __arg=0x0000600002c51a60) const at function.h:989:10
    frame #23: 0x000000046a4c3160 libsdlo.dylib`sd::slidesorter::view::(anonymous namespace)::ForAllRectangles(rRegion=0x000000016fdf2750, aFunction= Lambda in File SlsLayeredDevice.cxx at Line 267) at SlsLayeredDevice.cxx:91:13
    frame #24: 0x000000046a4c2d84 libsdlo.dylib`sd::slidesorter::view::LayeredDevice::Repaint(this=0x00006000048fed18, rRepaintRegion=0x000000016fdf2750) at SlsLayeredDevice.cxx:266:5
    frame #25: 0x000000046a4ac0a8 libsdlo.dylib`sd::slidesorter::view::SlideSorterView::CompleteRedraw(this=0x00000001411d2000, pDevice=0x000000042c5e50d0, rPaintArea=0x000000016fdf2750, pRedirector=0x0000000000000000) at SlideSorterView.cxx:590:26
    frame #26: 0x000000046a447ea4 libsdlo.dylib`sd::slidesorter::controller::SlideSorterController::Paint(this=0x000060000165da40, rBBox=0x000000016fdf31a8, pWindow=0x000060000165cc30) at SlideSorterController.cxx:251:16
    frame #27: 0x000000046a4a71d8 libsdlo.dylib`sd::slidesorter::SlideSorterViewShell::Paint(this=0x000000042c543620, rBBox=0x000000016fdf31a8, pWindow=0x000060000165cc30) at SlideSorterViewShell.cxx:456:40
    frame #28: 0x000000046a7695bc libsdlo.dylib`sd::Window::Paint(this=0x000060000165cc30, (null)=0x000000042c5e50d0, rRect=0x000000016fdf31a8) at sdwindow.cxx:213:22
    frame #29: 0x00000001113a2320 libvcllo.dylib`PaintHelper::DoPaint(this=0x000000016fdf3178, pRegion=0x0000000000000000) at paint.cxx:313:20
    frame #30: 0x00000001113a4498 libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x000060000165cc30, pRegion=0x0000000000000000, nPaintFlags=PaintAll | PaintChildren | Erase) at paint.cxx:617:17
    frame #31: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3458) at paint.cxx:552:30
    frame #32: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3458) at paint.cxx:537:1
    frame #33: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x0000600002c282c0, pRegion=0x0000000000000000, nPaintFlags=PaintAll | PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #34: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3738) at paint.cxx:552:30
    frame #35: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3738) at paint.cxx:537:1
    frame #36: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x000000042c52d9f0, pRegion=0x0000000000000000, nPaintFlags=PaintAll | PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #37: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3a18) at paint.cxx:552:30
    frame #38: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3a18) at paint.cxx:537:1
    frame #39: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x00000003da1edb30, pRegion=0x0000000000000000, nPaintFlags=PaintAll | PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #40: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3cf8) at paint.cxx:552:30
    frame #41: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3cf8) at paint.cxx:537:1
    frame #42: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x00006000039b8360, pRegion=0x0000000000000000, nPaintFlags=PaintAll | PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #43: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3fd8) at paint.cxx:552:30
    frame #44: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3fd8) at paint.cxx:537:1
    frame #45: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x000060000018ebc0, pRegion=0x0000000000000000, nPaintFlags=PaintAll | PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #46: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf42b8) at paint.cxx:552:30
    frame #47: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf42b8) at paint.cxx:537:1
    frame #48: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x000060000126fdc0, pRegion=0x0000600003c6e980, nPaintFlags=PaintAll | PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #49: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf4598) at paint.cxx:552:30
    frame #50: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf4598) at paint.cxx:537:1
    frame #51: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x000060000023abc0, pRegion=0x0000000000000000, nPaintFlags=PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #52: 0x00000001113a506c libvcllo.dylib`vcl::Window::ImplCallOverlapPaint(this=0x000060000023abc0) at paint.cxx:644:9
    frame #53: 0x00000001113a5244 libvcllo.dylib`vcl::Window::ImplHandlePaintHdl(this=0x000060000023abc0, (null)=0x000000014001eb00) at paint.cxx:667:9
    frame #54: 0x00000001113a50ec libvcllo.dylib`vcl::Window::LinkStubImplHandlePaintHdl(instance=0x000060000023abc0, data=0x000000014001eb00) at paint.cxx:648:1
    frame #55: 0x0000000111d23494 libvcllo.dylib`Link<Timer*, void>::Call(this=0x000000014001eb20, data=0x000000014001eb00) const at link.hxx:105:45
    frame #56: 0x0000000111d23448 libvcllo.dylib`Timer::Invoke(this=0x000000014001eb00) at timer.cxx:75:21
    frame #57: 0x0000000111cdab44 libvcllo.dylib`Scheduler::CallbackTaskScheduling() at scheduler.cxx:607:20
    frame #58: 0x0000000117d3d4cc libvclplug_osxlo.dylib`SalTimer::CallCallback(this=0x0000600002491500) at saltimer.hxx:53:13
    frame #59: 0x0000000117d3d42c libvclplug_osxlo.dylib`AquaSalTimer::callTimerCallback(this=0x0000600002491500) at saltimer.cxx:140:41
    frame #60: 0x0000000117d3d524 libvclplug_osxlo.dylib`AquaSalTimer::handleTimerElapsed(this=0x0000600002491500) at saltimer.cxx:153:9
    frame #61: 0x0000000117d11968 libvclplug_osxlo.dylib`AquaSalInstance::DoYield(this=0x00000001400048f0, bWait=true, bHandleAllCurrentEvents=false) at salinst.cxx:636:21
    frame #62: 0x0000000111d0130c libvcllo.dylib`ImplYield(i_bWait=true, i_bAllEvents=false) at svapp.cxx:385:48
    frame #63: 0x0000000111d00c58 libvcllo.dylib`Application::Yield() at svapp.cxx:488:5
    frame #64: 0x0000000111d00988 libvcllo.dylib`Application::Execute() at svapp.cxx:360:13
    frame #65: 0x0000000100a40180 libsofficeapp.dylib`desktop::Desktop::Main(this=0x000000016fdf7d50) at app.cxx:1680:13
    frame #66: 0x0000000111d1fb88 libvcllo.dylib`ImplSVMain() at svmain.cxx:231:35
    frame #67: 0x0000000117d10b34 libvclplug_osxlo.dylib`AquaSalInstance::handleAppDefinedEvent(pEvent=0x0000600001c65f80) at salinst.cxx:454:20
    frame #68: 0x0000000117da3c8c libvclplug_osxlo.dylib`-[VCL_NSApplication sendEvent:](self=0x0000000137704d40, _cmd="sendEvent:", pEvent=0x0000600001c65f80) at vclnsapp.mm:99:9
    frame #69: 0x000000019369a4a4 AppKit`-[NSApplication _handleEvent:] + 60
    frame #70: 0x00000001930f0c8c AppKit`-[NSApplication run] + 520
    frame #71: 0x00000001930c735c AppKit`NSApplicationMain + 880
    frame #72: 0x0000000117d15974 libvclplug_osxlo.dylib`AquaSalInstance::SVMainHook(this=0x00000001400048f0, pnInit=0x000000016fdf7c44) at salinst.cxx:1112:5
    frame #73: 0x0000000111d1fb3c libvcllo.dylib`ImplSVMain() at svmain.cxx:224:54
    frame #74: 0x0000000111d21418 libvcllo.dylib`SVMain() at svmain.cxx:249:12
    frame #75: 0x0000000100aba224 libsofficeapp.dylib`soffice_main at sofficemain.cxx:122:12
    frame #76: 0x0000000100000558 soffice`sal_main at main.c:51:15
    frame #77: 0x0000000100000530 soffice`main(argc=4, argv=0x000000016fdf84c8) at main.c:49:1
    frame #78: 0x000000018f022b4c dyld`start + 6000
(lldb)
Comment 30 Devansh Varshney 2025-05-14 19:40:33 UTC
on different branch

 Devanshs-MacBook-Pro    \lode\dev\libreoffice  ➜ (   p1-cache-defs  4)   58.025s   12:58 AM   
 ⚡devanshvarshney ❯❯ LANG=C SAL_USE_VCLPLUGIN=gen make debugrun
make -j 8  -rs -f /Users/devanshvarshney/lode/dev/libreoffice/Makefile.gbuild   debugrun
(lldb) target create "/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/MacOS/soffice"
Current executable set to '/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/MacOS/soffice' (arm64).
(lldb) settings set -- target.run-args  "--norestore" "--nologo" "\"--accept=pipe,name=devanshvarshney\\;urp\""
(lldb) b sd/source/ui/slidesorter/view/SlsFramePainter.cxx:47
Breakpoint 1: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.
(lldb) b PasswordDialog::PasswordDialog
Breakpoint 2: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.
(lldb) run
Process 97441 launched: '/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/MacOS/soffice' (arm64)
warn:sal.osl:97441:10567325:sal/osl/unx/module.cxx:103: dlopen(/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/Frameworks/libvclplug_genlo.dylib, 9): dlopen(/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/Frameworks/libvclplug_genlo.dylib, 0x0009): tried: '/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/Frameworks/libvclplug_genlo.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/Frameworks/libvclplug_genlo.dylib' (no such file), '/Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/Frameworks/libvclplug_genlo.dylib' (no such file)
warn:vcl.plugadapt:97441:10567325:vcl/source/app/salplug.cxx:158: could not load shared object libvclplug_genlo.dylib
warn:vcl.skia:97441:10567325:vcl/quartz/cgutils.mm:105: Default MTLDevice is "Apple M4"
2 locations added to breakpoint 2
1 location added to breakpoint 1
warn:vcl.app:97441:10567325:vcl/source/app/UserResourceScanner.cxx:51: Could not determine status for file 'file:///Users/devanshvarshney/lode/dev/libreoffice/instdir/LibreOfficeDev.app/Contents/user/themes'.
2025-05-15 01:01:28.988359+0530 soffice[97441:10568104] [logging-persist] cannot open file at line 49448 of [1b37c146ee]
2025-05-15 01:01:28.988371+0530 soffice[97441:10568104] [logging-persist] os_unix.c:49448: (2) open(/private/var/db/DetachedSignatures) - No such file or directory
Process 97441 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x000000044866a728 libsdlo.dylib`sd::slidesorter::view::FramePainter::FramePainter(this=0x0000000132481600, rShadowBitmap=0x000000043fee1f40) at SlsFramePainter.cxx:47:9
   44  	    else
   45  	    {
   46  	        OSL_ASSERT(rShadowBitmap.GetSizePixel().Width() == rShadowBitmap.GetSizePixel().Height());
-> 47  	        OSL_ASSERT((rShadowBitmap.GetSizePixel().Width()-1)%2 == 0);
   48  	        OSL_ASSERT(((rShadowBitmap.GetSizePixel().Width()-1)/2)%2 == 1);
   49  	    }
   50  	}
Target 0: (soffice) stopped.
(lldb) p rShadowBitmap.GetSizePixel().Width()
(tools::Long) 20
(lldb) expr rShadowBitmap.GetSizePixel().Width()
(tools::Long) $0 = 20
(lldb) expr (rShadowBitmap.GetSizePixel().Width() - 1) % 2
(tools::Long) $1 = 1
(lldb) expr rShadowBitmap.GetSizePixel().Width() == rShadowBitmap.GetSizePixel().Height()
(bool) $2 = true
(lldb) p rShadowBitmap.GetSizePixel().Height()
(tools::Long) 20
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
  * frame #0: 0x000000044866a728 libsdlo.dylib`sd::slidesorter::view::FramePainter::FramePainter(this=0x0000000132481600, rShadowBitmap=0x000000043fee1f40) at SlsFramePainter.cxx:47:9
    frame #1: 0x000000044866a950 libsdlo.dylib`sd::slidesorter::view::FramePainter::FramePainter(this=0x0000000132481600, rShadowBitmap=0x000000043fee1f40) at SlsFramePainter.cxx:37:1
    frame #2: 0x000000044868b290 libsdlo.dylib`sd::slidesorter::view::PageObjectPainter::PageObjectPainter(this=0x0000600002e3abf8, rSlideSorter=0x0000600002c3ad10) at SlsPageObjectPainter.cxx:48:32
    frame #3: 0x000000044868b45c libsdlo.dylib`sd::slidesorter::view::PageObjectPainter::PageObjectPainter(this=0x0000600002e3abf8, rSlideSorter=0x0000600002c3ad10) at SlsPageObjectPainter.cxx:49:1
    frame #4: 0x0000000448669f7c libsdlo.dylib`sd::slidesorter::view::PageObjectPainter* std::__1::construct_at[abi:ne190102]<sd::slidesorter::view::PageObjectPainter, sd::slidesorter::SlideSorter&, sd::slidesorter::view::PageObjectPainter*>(__location=0x0000600002e3abf8, __args=0x0000600002c3ad10) at construct_at.h:41:83
    frame #5: 0x0000000448669f4c libsdlo.dylib`sd::slidesorter::view::PageObjectPainter* std::__1::__construct_at[abi:ne190102]<sd::slidesorter::view::PageObjectPainter, sd::slidesorter::SlideSorter&, sd::slidesorter::view::PageObjectPainter*>(__location=0x0000600002e3abf8, __args=0x0000600002c3ad10) at construct_at.h:49:10
    frame #6: 0x0000000448669d68 libsdlo.dylib`void std::__1::allocator_traits<std::__1::allocator<sd::slidesorter::view::PageObjectPainter>>::construct[abi:ne190102]<sd::slidesorter::view::PageObjectPainter, sd::slidesorter::SlideSorter&, void, 0>((null)=0x000000016fdf2066, __p=0x0000600002e3abf8, __args=0x0000600002c3ad10) at allocator_traits.h:328:5
    frame #7: 0x0000000448669c74 libsdlo.dylib`std::__1::__shared_ptr_emplace<sd::slidesorter::view::PageObjectPainter, std::__1::allocator<sd::slidesorter::view::PageObjectPainter>>::__shared_ptr_emplace[abi:ne190102]<sd::slidesorter::SlideSorter&, std::__1::allocator<sd::slidesorter::view::PageObjectPainter>, 0>(this=0x0000600002e3abe0, __a=allocator<sd::slidesorter::view::PageObjectPainter> @ 0x000000016fdf2067, __args=0x0000600002c3ad10) at shared_ptr.h:266:5
    frame #8: 0x000000044866992c libsdlo.dylib`std::__1::__shared_ptr_emplace<sd::slidesorter::view::PageObjectPainter, std::__1::allocator<sd::slidesorter::view::PageObjectPainter>>::__shared_ptr_emplace[abi:ne190102]<sd::slidesorter::SlideSorter&, std::__1::allocator<sd::slidesorter::view::PageObjectPainter>, 0>(this=0x0000600002e3abe0, __a=allocator<sd::slidesorter::view::PageObjectPainter> @ 0x000000016fdf209f, __args=0x0000600002c3ad10) at shared_ptr.h:263:115
    frame #9: 0x0000000448669800 libsdlo.dylib`std::__1::shared_ptr<sd::slidesorter::view::PageObjectPainter> std::__1::allocate_shared[abi:ne190102]<sd::slidesorter::view::PageObjectPainter, std::__1::allocator<sd::slidesorter::view::PageObjectPainter>, sd::slidesorter::SlideSorter&, 0>(__a=0x000000016fdf2157, __args=0x0000600002c3ad10) at shared_ptr.h:845:51
    frame #10: 0x0000000448664da4 libsdlo.dylib`std::__1::shared_ptr<sd::slidesorter::view::PageObjectPainter> std::__1::make_shared[abi:ne190102]<sd::slidesorter::view::PageObjectPainter, sd::slidesorter::SlideSorter&, 0>(__args=0x0000600002c3ad10) at shared_ptr.h:853:10
    frame #11: 0x0000000448662838 libsdlo.dylib`sd::slidesorter::view::SlideSorterView::GetPageObjectPainter(this=0x000000013232d400) at SlideSorterView.cxx:822:31
    frame #12: 0x0000000448664130 libsdlo.dylib`sd::slidesorter::view::SlideSorterView::Paint(this=0x000000013232d400, rDevice=0x000000043fee1fa0, rRepaintArea=0x0000600000508060) at SlideSorterView.cxx:625:16
    frame #13: 0x000000044866810c libsdlo.dylib`sd::slidesorter::view::(anonymous namespace)::Painter::Paint(this=0x00006000015935e8, rDevice=0x000000043fee1fa0, rRepaintArea=0x0000600000508060) at SlideSorterView.cxx:74:20
    frame #14: 0x000000044867b4a0 libsdlo.dylib`sd::slidesorter::view::(anonymous namespace)::Layer::Repaint(this=0x0000600002c3a7e8, rTargetDevice=0x000000043fee1fa0, rRepaintRectangle=0x0000600000508060) at SlsLayeredDevice.cxx:445:17
    frame #15: 0x000000044867b368 libsdlo.dylib`sd::slidesorter::view::LayeredDevice::RepaintRectangle(this=0x00006000065590f8, rRepaintRectangle=0x0000600000508060) at SlsLayeredDevice.cxx:287:17
    frame #16: 0x0000000448685920 libsdlo.dylib`sd::slidesorter::view::LayeredDevice::Repaint(vcl::Region const&)::$_0::operator()(this=0x000000016fdf2680, r=0x0000600000508060) const at SlsLayeredDevice.cxx:267:58
    frame #22: 0x000000044867d5c4 libsdlo.dylib`std::__1::function<void (tools::Rectangle const&)>::operator()(this= Lambda in File SlsLayeredDevice.cxx at Line 267, __arg=0x0000600000508060) const at function.h:989:10
    frame #23: 0x000000044867b160 libsdlo.dylib`sd::slidesorter::view::(anonymous namespace)::ForAllRectangles(rRegion=0x000000016fdf2750, aFunction= Lambda in File SlsLayeredDevice.cxx at Line 267) at SlsLayeredDevice.cxx:91:13
    frame #24: 0x000000044867ad84 libsdlo.dylib`sd::slidesorter::view::LayeredDevice::Repaint(this=0x00006000065590f8, rRepaintRegion=0x000000016fdf2750) at SlsLayeredDevice.cxx:266:5
    frame #25: 0x00000004486640a8 libsdlo.dylib`sd::slidesorter::view::SlideSorterView::CompleteRedraw(this=0x000000013232d400, pDevice=0x000000043fedb680, rPaintArea=0x000000016fdf2750, pRedirector=0x0000000000000000) at SlideSorterView.cxx:590:26
    frame #26: 0x00000004485ffea4 libsdlo.dylib`sd::slidesorter::controller::SlideSorterController::Paint(this=0x0000600003bf2df0, rBBox=0x000000016fdf31a8, pWindow=0x0000600003bf2d00) at SlideSorterController.cxx:251:16
    frame #27: 0x000000044865f1d8 libsdlo.dylib`sd::slidesorter::SlideSorterViewShell::Paint(this=0x000000043feda450, rBBox=0x000000016fdf31a8, pWindow=0x0000600003bf2d00) at SlideSorterViewShell.cxx:456:40
    frame #28: 0x00000004489215bc libsdlo.dylib`sd::Window::Paint(this=0x0000600003bf2d00, (null)=0x000000043fedb680, rRect=0x000000016fdf31a8) at sdwindow.cxx:213:22
    frame #29: 0x00000001113a2320 libvcllo.dylib`PaintHelper::DoPaint(this=0x000000016fdf3178, pRegion=0x0000000000000000) at paint.cxx:313:20
    frame #30: 0x00000001113a4498 libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x0000600003bf2d00, pRegion=0x0000000000000000, nPaintFlags=PaintAll | PaintChildren | Erase) at paint.cxx:617:17
    frame #31: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3458) at paint.cxx:552:30
    frame #32: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3458) at paint.cxx:537:1
    frame #33: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x00006000001f8f60, pRegion=0x0000000000000000, nPaintFlags=PaintAll | PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #34: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3738) at paint.cxx:552:30
    frame #35: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3738) at paint.cxx:537:1
    frame #36: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x000000043fe08e20, pRegion=0x0000000000000000, nPaintFlags=PaintAll | PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #37: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3a18) at paint.cxx:552:30
    frame #38: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3a18) at paint.cxx:537:1
    frame #39: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x000000042bdd5390, pRegion=0x0000000000000000, nPaintFlags=PaintAll | PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #40: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3cf8) at paint.cxx:552:30
    frame #41: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3cf8) at paint.cxx:537:1
    frame #42: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x00006000015c7a80, pRegion=0x0000000000000000, nPaintFlags=PaintAll | PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #43: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3fd8) at paint.cxx:552:30
    frame #44: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf3fd8) at paint.cxx:537:1
    frame #45: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x0000600002c290a0, pRegion=0x0000000000000000, nPaintFlags=PaintAll | PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #46: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf42b8) at paint.cxx:552:30
    frame #47: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf42b8) at paint.cxx:537:1
    frame #48: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x0000600003fdfdc0, pRegion=0x0000600001f9ac00, nPaintFlags=PaintAll | PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #49: 0x00000001113a3bd8 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf4598) at paint.cxx:552:30
    frame #50: 0x00000001113a46a4 libvcllo.dylib`PaintHelper::~PaintHelper(this=0x000000016fdf4598) at paint.cxx:537:1
    frame #51: 0x00000001113a44fc libvcllo.dylib`vcl::Window::ImplCallPaint(this=0x0000600002f9b560, pRegion=0x0000000000000000, nPaintFlags=PaintAllChildren | PaintChildren | Erase) at paint.cxx:623:1
    frame #52: 0x00000001113a506c libvcllo.dylib`vcl::Window::ImplCallOverlapPaint(this=0x0000600002f9b560) at paint.cxx:644:9
    frame #53: 0x00000001113a5244 libvcllo.dylib`vcl::Window::ImplHandlePaintHdl(this=0x0000600002f9b560, (null)=0x0000000131e31260) at paint.cxx:667:9
    frame #54: 0x00000001113a50ec libvcllo.dylib`vcl::Window::LinkStubImplHandlePaintHdl(instance=0x0000600002f9b560, data=0x0000000131e31260) at paint.cxx:648:1
    frame #55: 0x0000000111d23494 libvcllo.dylib`Link<Timer*, void>::Call(this=0x0000000131e31280, data=0x0000000131e31260) const at link.hxx:105:45
    frame #56: 0x0000000111d23448 libvcllo.dylib`Timer::Invoke(this=0x0000000131e31260) at timer.cxx:75:21
    frame #57: 0x0000000111cdab44 libvcllo.dylib`Scheduler::CallbackTaskScheduling() at scheduler.cxx:607:20
    frame #58: 0x0000000117d3d4cc libvclplug_osxlo.dylib`SalTimer::CallCallback(this=0x0000600000927cf0) at saltimer.hxx:53:13
    frame #59: 0x0000000117d3d42c libvclplug_osxlo.dylib`AquaSalTimer::callTimerCallback(this=0x0000600000927cf0) at saltimer.cxx:140:41
    frame #60: 0x0000000117d3d524 libvclplug_osxlo.dylib`AquaSalTimer::handleTimerElapsed(this=0x0000600000927cf0) at saltimer.cxx:153:9
    frame #61: 0x0000000117d11968 libvclplug_osxlo.dylib`AquaSalInstance::DoYield(this=0x0000000121e04300, bWait=true, bHandleAllCurrentEvents=false) at salinst.cxx:636:21
    frame #62: 0x0000000111d0130c libvcllo.dylib`ImplYield(i_bWait=true, i_bAllEvents=false) at svapp.cxx:385:48
    frame #63: 0x0000000111d00c58 libvcllo.dylib`Application::Yield() at svapp.cxx:488:5
    frame #64: 0x0000000111d00988 libvcllo.dylib`Application::Execute() at svapp.cxx:360:13
    frame #65: 0x0000000100a40180 libsofficeapp.dylib`desktop::Desktop::Main(this=0x000000016fdf7d50) at app.cxx:1680:13
    frame #66: 0x0000000111d1fb88 libvcllo.dylib`ImplSVMain() at svmain.cxx:231:35
    frame #67: 0x0000000117d10b34 libvclplug_osxlo.dylib`AquaSalInstance::handleAppDefinedEvent(pEvent=0x00006000031c7240) at salinst.cxx:454:20
    frame #68: 0x0000000117da3c8c libvclplug_osxlo.dylib`-[VCL_NSApplication sendEvent:](self=0x0000000121f04420, _cmd="sendEvent:", pEvent=0x00006000031c7240) at vclnsapp.mm:99:9
    frame #69: 0x000000019369a4a4 AppKit`-[NSApplication _handleEvent:] + 60
    frame #70: 0x00000001930f0c8c AppKit`-[NSApplication run] + 520
    frame #71: 0x00000001930c735c AppKit`NSApplicationMain + 880
    frame #72: 0x0000000117d15974 libvclplug_osxlo.dylib`AquaSalInstance::SVMainHook(this=0x0000000121e04300, pnInit=0x000000016fdf7c44) at salinst.cxx:1112:5
    frame #73: 0x0000000111d1fb3c libvcllo.dylib`ImplSVMain() at svmain.cxx:224:54
    frame #74: 0x0000000111d21418 libvcllo.dylib`SVMain() at svmain.cxx:249:12
    frame #75: 0x0000000100aba224 libsofficeapp.dylib`soffice_main at sofficemain.cxx:122:12
    frame #76: 0x0000000100000558 soffice`sal_main at main.c:51:15
    frame #77: 0x0000000100000530 soffice`main(argc=4, argv=0x000000016fdf84c8) at main.c:49:1
    frame #78: 0x000000018f022b4c dyld`start + 6000
(lldb)