There is a chunk of code in: desktop/source/deployment/gui/dp_gui_dialog2.cxx with some pretty bad practice on display. There is a large chunk of cut-and-paste coding between: IMPL_LINK_NOARG_TYPED(UpdateRequiredDialog, TimeOutHdl, Idle *, void) and IMPL_LINK_NOARG_TYPED(ExtMgrDialog, TimeOutHdl, Idle *, void) And that code itself should -not- be in an idle handler that runs all the time. Instead we should add an idle task whenever anything changes. The reason the code is done like this is to avoid needing to take the SolarMutex in the implementation that updates the progress etc. which is useful in several cases for UNO components etc. Anyhow - we should create a new (inside VCL) "ProgressBarAsync" class and encapsulate this functionality into VCL. The methods - such as updating the progress %age, and the text etc. should take effect only asynchronously in an idle handler -but- the idle handler should only be triggered when some state actually changes =) a new %age, new text etc. Then we should clean the cut/paste coding out of the above module. Thanks !
JanI is default CC for Easy Hacks (Add Jan; remove LibreOffice Dev List from CC) [NinjaEdit]
Hi Michael, it seems the code pointers are no longer valid. Could you please update them?
Looks like it's still there to me: //UpdateRequiredDialog UpdateRequiredDialog::UpdateRequiredDialog(weld::Window *pParent, TheExtensionManager *pManager) : GenericDialogController(pParent, "desktop/ui/updaterequireddialog.ui", "UpdateRequiredDialog") , DialogHelper(pManager->getContext(), m_xDialog.get()) , m_sCloseText(DpResId(RID_STR_CLOSE_BTN)) , m_bHasProgress(false) , m_bProgressChanged(false) , m_bStartProgress(false) , m_bStopProgress(false) , m_bHasLockedEntries(false) , m_nProgress(0) and ExtMgrDialog::ExtMgrDialog(weld::Window *pParent, TheExtensionManager *pManager) : GenericDialogController(pParent, "desktop/ui/extensionmanager.ui", "ExtensionManagerDialog") , DialogHelper(pManager->getContext(), m_xDialog.get()) , m_sAddPackages(DpResId(RID_STR_ADD_PACKAGES)) , m_bHasProgress(false) , m_bProgressChanged(false) , m_bStartProgress(false) , m_bStopProgress(false) Look too similar. Should be some shared base-class or another helper class for some of what they want to do with progress. The idle handlers are still there but didn't read them yet.
Re-evaluating the EasyHack in 2023 This enhancement is still relevant. Both of the UpdateRequiredDialog::UpdateRequiredDialog() and ExtMgrDialog::ExtMgrDialog() are still in the above mentioned file without much change. We don't have ProgressBarAsync class yet.