Drop a bit more special-casing for Chart's sidebar property deck

Introduced in commit 2d01ed9e8b
  Author Muhammet Kara <muhammet.kara@collabora.com>
  Date   Mon Nov 25 21:55:31 2019 +0300
    tdf#94288: Show chart props sidebar on activation

The problem was that ChartController::attachFrame, that called
SelectionChangeHandler::selectionChanged notification, did that
*prior* to setting its m_xFrame - and the notification failed
in ContextChangeEventMultiplexer::NotifyContextChange, that
checks the frame first. That prevented the proper context (with
correct application and context names) to arrive to listeners,
and the sidebar didn't update properly.

Changing the order of the calls should fix the original problem.

Change-Id: I9da8465af2ee4ed1f8eabed1c65d1c318f81a3f9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133326
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
This commit is contained in:
Mike Kaganski
2022-04-22 16:17:09 +03:00
parent 27953931d4
commit a09cf7e76a
2 changed files with 11 additions and 27 deletions

View File

@@ -366,6 +366,17 @@ void SAL_CALL ChartController::attachFrame(
if( impl_isDisposedOrSuspended() ) //@todo? allow attaching the frame while suspended?
return; //behave passive if already disposed or suspended
if(m_xFrame.is()) //what happens, if we do have a Frame already??
{
//@todo? throw exception?
OSL_FAIL( "there is already a frame attached to the controller" );
return;
}
//--attach frame
m_xFrame = xFrame; //the frameloader is responsible to call xFrame->setComponent
// Only notify after setting the frame, otherwise notification will fail
mpSelectionChangeHandler->Connect();
uno::Reference<ui::XSidebar> xSidebar = getSidebarFromModel(getChartModel());
@@ -379,16 +390,6 @@ void SAL_CALL ChartController::attachFrame(
mpSelectionChangeHandler->selectionChanged(aEvent);
}
if(m_xFrame.is()) //what happens, if we do have a Frame already??
{
//@todo? throw exception?
OSL_FAIL( "there is already a frame attached to the controller" );
return;
}
//--attach frame
m_xFrame = xFrame; //the frameloader is responsible to call xFrame->setComponent
//add as disposelistener to the frame (due to persistent reference) ??...:
//the frame is considered to be owner of this controller and will live longer than we do

View File

@@ -162,23 +162,6 @@ void SAL_CALL ContextChangeEventMultiplexer::addContextChangeEventListener (
if (!(rxEventFocus.is() && pFocusDescriptor!=nullptr))
return;
if (pFocusDescriptor->msCurrentApplicationName.isEmpty() && pFocusDescriptor->msCurrentContextName.isEmpty()
&& rxEventFocus.is())
{
Reference< lang::XServiceInfo > xServInfo( rxEventFocus, uno::UNO_QUERY );
if( xServInfo.is() && xServInfo->getImplementationName() == "com.sun.star.comp.chart2.ChartController")
{
css::ui::ContextChangeEventObject aEvent (
rxEventFocus,
"com.sun.star.chart2.ChartDocument",
"Chart");
rxListener->notifyContextChangeEvent(aEvent);
return;
}
}
css::ui::ContextChangeEventObject aEvent (
nullptr,
pFocusDescriptor->msCurrentApplicationName,