tdf#33495: Allow presenter console in windowed mode

Added an option in the Impress settings window to set the presenter
console into fullscreen/windowed mode. This will then be used the
next time a presentation is started.

Two pictures of how the result looks are given in the bug tracker.

Change-Id: I231f9180301301a9eccf9984ea4dcd529bd7dfce
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142359
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>
diff --git a/officecfg/registry/schema/org/openoffice/Office/Impress.xcs b/officecfg/registry/schema/org/openoffice/Office/Impress.xcs
index acf2673..fefd4ba 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Impress.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Impress.xcs
@@ -570,6 +570,13 @@
          </info>
          <value>true</value>
        </prop>
        <prop oor:name="PresenterScreenFullScreen" oor:type="xs:boolean" oor:nillable="false">
          <info>
           <desc>Indicates whether the Presenter Screen Console is shown in FullScreen mode.</desc>
           <label>Presenter Screen FullScreen</label>
         </info>
         <value>true</value>
       </prop>
      </group>
      <group oor:name="Compatibility">
        <info>
diff --git a/sd/source/ui/app/optsitem.cxx b/sd/source/ui/app/optsitem.cxx
index 5baff32..fb9aac8 100644
--- a/sd/source/ui/app/optsitem.cxx
+++ b/sd/source/ui/app/optsitem.cxx
@@ -409,7 +409,8 @@ SdOptionsMisc::SdOptionsMisc( bool bImpress, bool bUseConfig ) :
    bDoubleClickTextEdit( true ),
    bClickChangeRotation( false ),
    bEnableSdremote( false ),
    bEnablePresenterScreen( true),
    bEnablePresenterScreen( true ),
    bPresenterScreenFullScreen( true ),
    bSolidDragging( true ),
    bSummationOfParagraphs( false ),
    bTabBarVisible( true ),
@@ -443,7 +444,8 @@ bool SdOptionsMisc::operator==( const SdOptionsMisc& rOpt ) const
            IsDoubleClickTextEdit() == rOpt.IsDoubleClickTextEdit() &&
            IsClickChangeRotation() == rOpt.IsClickChangeRotation() &&
            IsEnableSdremote() == rOpt.IsEnableSdremote() &&
            IsEnablePresenterScreen() == rOpt.IsEnablePresenterScreen()&&
            IsEnablePresenterScreen() == rOpt.IsEnablePresenterScreen() &&
            IsPresenterScreenFullScreen() == rOpt.IsPresenterScreenFullScreen() &&
            IsSummationOfParagraphs() == rOpt.IsSummationOfParagraphs() &&
            IsTabBarVisible() == rOpt.IsTabBarVisible() &&
            IsSolidDragging() == rOpt.IsSolidDragging() &&
@@ -500,6 +502,7 @@ void SdOptionsMisc::GetPropNameArray( const char**& ppNames, sal_uLong& rCount )
        "PenWidth",
        "Start/EnableSdremote",
        "Start/EnablePresenterScreen",
        "Start/PresenterScreenFullScreen",
        "TabBarVisible"
    };

@@ -562,8 +565,11 @@ bool SdOptionsMisc::ReadData( const Any* pValues )
        if( pValues[25].hasValue() )
            SetEnablePresenterScreen( *o3tl::doAccess<bool>(pValues[ 25 ]) );

        if( pValues[26].hasValue() ) {
            SetTabBarVisible( *o3tl::doAccess<bool>(pValues[ 26 ]) );
        if (pValues[26].hasValue() )
            SetPresenterScreenFullScreen( *o3tl::doAccess<bool>(pValues[ 26 ]) );

        if( pValues[27].hasValue() ) {
            SetTabBarVisible( *o3tl::doAccess<bool>(pValues[ 27 ]) );
        }
    }

@@ -606,7 +612,8 @@ bool SdOptionsMisc::WriteData( Any* pValues ) const
        pValues[ 23 ] <<= GetPresentationPenWidth();
        pValues[ 24 ] <<= IsEnableSdremote();
        pValues[ 25 ] <<= IsEnablePresenterScreen();
        pValues[ 26 ] <<= IsTabBarVisible();
        pValues[ 26 ] <<= IsPresenterScreenFullScreen();
        pValues[ 27 ] <<= IsTabBarVisible();
    }

    return true;
@@ -633,6 +640,7 @@ SdOptionsMiscItem::SdOptionsMiscItem( SdOptions const * pOpts, ::sd::FrameView c
        maOptionsMisc.SetStartWithTemplate( pOpts->IsStartWithTemplate() );
        maOptionsMisc.SetEnableSdremote( pOpts->IsEnableSdremote() );
        maOptionsMisc.SetEnablePresenterScreen( pOpts->IsEnablePresenterScreen() );
        maOptionsMisc.SetPresenterScreenFullScreen( pOpts->IsPresenterScreenFullScreen() );
        maOptionsMisc.SetSummationOfParagraphs( pOpts->IsSummationOfParagraphs() );
        maOptionsMisc.SetTabBarVisible( pOpts->IsTabBarVisible() );
        maOptionsMisc.SetShowUndoDeleteWarning( pOpts->IsShowUndoDeleteWarning() );
@@ -710,6 +718,7 @@ void SdOptionsMiscItem::SetOptions( SdOptions* pOpts ) const
    pOpts->SetClickChangeRotation( maOptionsMisc.IsClickChangeRotation() );
    pOpts->SetEnableSdremote( maOptionsMisc.IsEnableSdremote() );
    pOpts->SetEnablePresenterScreen( maOptionsMisc.IsEnablePresenterScreen() );
    pOpts->SetPresenterScreenFullScreen( maOptionsMisc.IsPresenterScreenFullScreen() );
    pOpts->SetSummationOfParagraphs( maOptionsMisc.IsSummationOfParagraphs() );
    pOpts->SetTabBarVisible( maOptionsMisc.IsTabBarVisible() );

diff --git a/sd/source/ui/dlg/tpoption.cxx b/sd/source/ui/dlg/tpoption.cxx
index 8c1408d..3d214f5 100644
--- a/sd/source/ui/dlg/tpoption.cxx
+++ b/sd/source/ui/dlg/tpoption.cxx
@@ -186,6 +186,7 @@ SdTpOptionsMisc::SdTpOptionsMisc(weld::Container* pPage, weld::DialogController*
    , m_xMtrFldTabstop(m_xBuilder->weld_metric_spin_button("metricFields", FieldUnit::MM))
    , m_xCbxEnableSdremote(m_xBuilder->weld_check_button("enremotcont"))
    , m_xCbxEnablePresenterScreen(m_xBuilder->weld_check_button("enprsntcons"))
    , m_xCbxPresenterScreenFullScreen(m_xBuilder->weld_check_button("enprsntconsfullscreen"))
    , m_xCbxCompatibility(m_xBuilder->weld_check_button("cbCompatibility"))
    , m_xScaleFrame(m_xBuilder->weld_frame("scaleframe"))
    , m_xCbScale(m_xBuilder->weld_combo_box("scaleBox"))
@@ -329,15 +330,16 @@ bool SdTpOptionsMisc::FillItemSet( SfxItemSet* rAttrs )
{
    bool bModified = false;

    if( m_xCbxStartWithTemplate->get_state_changed_from_saved()     ||
        m_xCbxMarkedHitMovesAlways->get_state_changed_from_saved()  ||
        m_xCbxQuickEdit->get_state_changed_from_saved()             ||
        m_xCbxPickThrough->get_state_changed_from_saved()           ||
        m_xCbxMasterPageCache->get_state_changed_from_saved()       ||
        m_xCbxCopy->get_state_changed_from_saved()                  ||
        m_xCbxEnableSdremote->get_state_changed_from_saved()        ||
        m_xCbxEnablePresenterScreen->get_state_changed_from_saved() ||
        m_xCbxCompatibility->get_state_changed_from_saved()         ||
    if( m_xCbxStartWithTemplate->get_state_changed_from_saved()         ||
        m_xCbxMarkedHitMovesAlways->get_state_changed_from_saved()      ||
        m_xCbxQuickEdit->get_state_changed_from_saved()                 ||
        m_xCbxPickThrough->get_state_changed_from_saved()               ||
        m_xCbxMasterPageCache->get_state_changed_from_saved()           ||
        m_xCbxCopy->get_state_changed_from_saved()                      ||
        m_xCbxEnableSdremote->get_state_changed_from_saved()            ||
        m_xCbxEnablePresenterScreen->get_state_changed_from_saved()     ||
        m_xCbxPresenterScreenFullScreen->get_state_changed_from_saved() ||
        m_xCbxCompatibility->get_state_changed_from_saved()             ||
        m_xCbxDistort->get_state_changed_from_saved())
    {
        SdOptionsMiscItem aOptsItem;
@@ -350,6 +352,7 @@ bool SdTpOptionsMisc::FillItemSet( SfxItemSet* rAttrs )
        aOptsItem.GetOptionsMisc().SetDragWithCopy( m_xCbxCopy->get_active() );
        aOptsItem.GetOptionsMisc().SetEnableSdremote( m_xCbxEnableSdremote->get_active() );
        aOptsItem.GetOptionsMisc().SetEnablePresenterScreen( m_xCbxEnablePresenterScreen->get_active() );
        aOptsItem.GetOptionsMisc().SetPresenterScreenFullScreen( m_xCbxPresenterScreenFullScreen->get_active() );
        aOptsItem.GetOptionsMisc().SetSummationOfParagraphs( m_xCbxCompatibility->get_active() );
        aOptsItem.GetOptionsMisc().SetCrookNoContortion( m_xCbxDistort->get_active() );
        rAttrs->Put( aOptsItem );
@@ -399,6 +402,7 @@ void SdTpOptionsMisc::Reset( const SfxItemSet* rAttrs )
    m_xCbxCopy->set_active( aOptsItem.GetOptionsMisc().IsDragWithCopy() );
    m_xCbxEnableSdremote->set_active( aOptsItem.GetOptionsMisc().IsEnableSdremote() );
    m_xCbxEnablePresenterScreen->set_active( aOptsItem.GetOptionsMisc().IsEnablePresenterScreen() );
    m_xCbxPresenterScreenFullScreen->set_active( aOptsItem.GetOptionsMisc().IsPresenterScreenFullScreen() );
    m_xCbxCompatibility->set_active( aOptsItem.GetOptionsMisc().IsSummationOfParagraphs() );
    m_xCbxDistort->set_active( aOptsItem.GetOptionsMisc().IsCrookNoContortion() );
    m_xCbxStartWithTemplate->save_state();
@@ -410,6 +414,7 @@ void SdTpOptionsMisc::Reset( const SfxItemSet* rAttrs )
    m_xCbxCopy->save_state();
    m_xCbxEnableSdremote->save_state();
    m_xCbxEnablePresenterScreen->save_state();
    m_xCbxPresenterScreenFullScreen->save_state();
    m_xCbxCompatibility->save_state();
    m_xCbxDistort->save_state();

@@ -496,6 +501,7 @@ void SdTpOptionsMisc::SetDrawMode()
    m_xNewDocumentFrame->hide();
    m_xCbxEnableSdremote->hide();
    m_xCbxEnablePresenterScreen->hide();
    m_xCbxPresenterScreenFullScreen->hide();
    m_xCbxCompatibility->hide();
    m_xNewDocLb->hide();
    m_xCbScale->show();
diff --git a/sd/source/ui/framework/factories/FullScreenPane.cxx b/sd/source/ui/framework/factories/FullScreenPane.cxx
index dbf3421..39da061 100644
--- a/sd/source/ui/framework/factories/FullScreenPane.cxx
+++ b/sd/source/ui/framework/factories/FullScreenPane.cxx
@@ -40,23 +40,27 @@ FullScreenPane::FullScreenPane (
    : FrameWindowPane(rxPaneId,nullptr),
      mxComponentContext(rxComponentContext)
{
    vcl::Window* pParent = nullptr;
    mpWorkWindow.reset(VclPtr<WorkWindow>::Create(
    sal_Int32 nScreenNumber = 1;
    bool bFullScreen = true;
    ExtractArguments(rxPaneId, nScreenNumber, bFullScreen);

    vcl::Window* pParent = nullptr;
    WinBits nStyle = bFullScreen ? 0 : (WB_BORDER | WB_MOVEABLE | WB_SIZEABLE);

    mpWorkWindow.reset(VclPtr<WorkWindow>::Create(
        pParent,
        0));  // For debugging (non-fullscreen) use WB_BORDER | WB_MOVEABLE | WB_SIZEABLE));
        nStyle));  // For debugging (non-fullscreen) use WB_BORDER | WB_MOVEABLE | WB_SIZEABLE));

    if ( ! rxPaneId.is())
        throw lang::IllegalArgumentException();

    sal_Int32 nScreenNumber = 1;
    ExtractArguments(rxPaneId, nScreenNumber);

    if (!mpWorkWindow)
        return;

    // Create a new top-level window that is displayed full screen.
    mpWorkWindow->ShowFullScreenMode(true, nScreenNumber);
    if (bFullScreen)
        mpWorkWindow->ShowFullScreenMode(bFullScreen, nScreenNumber);

    // For debugging (non-fullscreen) use mpWorkWindow->SetScreenNumber(nScreenNumber);
    mpWorkWindow->SetMenuBarMode(MenuBarMode::Hide);
    mpWorkWindow->SetBorderStyle(WindowBorderStyle::REMOVEBORDER);
@@ -206,7 +210,8 @@ Reference<rendering::XCanvas> FullScreenPane::CreateCanvas()

void FullScreenPane::ExtractArguments (
    const Reference<XResourceId>& rxPaneId,
    sal_Int32& rnScreenNumberReturnValue)
    sal_Int32& rnScreenNumberReturnValue,
    bool& rbFullScreen)
{
    // Extract arguments from the resource URL.
    const util::URL aURL = rxPaneId->getFullResourceURL();
@@ -218,6 +223,10 @@ void FullScreenPane::ExtractArguments (
        {
            rnScreenNumberReturnValue = o3tl::toInt32(sValue);
        }
        if (o3tl::starts_with(aToken, u"FullScreen=", &sValue))
        {
            rbFullScreen = o3tl::equalsAscii(sValue, "true");
        }
    }
}

diff --git a/sd/source/ui/framework/factories/FullScreenPane.hxx b/sd/source/ui/framework/factories/FullScreenPane.hxx
index b33804e..138503d 100644
--- a/sd/source/ui/framework/factories/FullScreenPane.hxx
+++ b/sd/source/ui/framework/factories/FullScreenPane.hxx
@@ -77,7 +77,8 @@ private:

    static void ExtractArguments (
        const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
        sal_Int32& rnScreenNumberReturnValue);
        sal_Int32& rnScreenNumberReturnValue,
        bool& rbFullScreen);
};

} // end of namespace sd::framework
diff --git a/sd/source/ui/inc/optsitem.hxx b/sd/source/ui/inc/optsitem.hxx
index 979b90b..0b5347f 100644
--- a/sd/source/ui/inc/optsitem.hxx
+++ b/sd/source/ui/inc/optsitem.hxx
@@ -185,25 +185,26 @@ private:
    sal_Int32   nDefaultObjectSizeWidth;
    sal_Int32   nDefaultObjectSizeHeight;

    bool    bStartWithTemplate      : 1;    // Misc/NewDoc/AutoPilot
    bool    bMarkedHitMovesAlways   : 1;    // Misc/ObjectMoveable
    bool    bMoveOnlyDragging       : 1;    // Currently, not in use !!!
    bool    bCrookNoContortion      : 1;    // Misc/NoDistort
    bool    bQuickEdit              : 1;    // Misc/TextObject/QuickEditing
    bool    bMasterPageCache        : 1;    // Misc/BackgroundCache
    bool    bDragWithCopy           : 1;    // Misc/CopyWhileMoving
    bool    bPickThrough            : 1;    // Misc/TextObject/Selectable
    bool    bDoubleClickTextEdit    : 1;    // Misc/DclickTextedit
    bool    bClickChangeRotation    : 1;    // Misc/RotateClick
    bool    bEnableSdremote         : 1;    // Misc/Start/EnableSdremote
    bool    bEnablePresenterScreen : 1;    // Misc/Start/EnablePresenterDisplay
    bool    bSolidDragging          : 1;    // Misc/ModifyWithAttributes
    bool    bSummationOfParagraphs  : 1;    // misc/SummationOfParagraphs
    bool    bTabBarVisible          : 1;    // Misc/TabBarVisible
    bool    bShowUndoDeleteWarning  : 1;    // Misc/ShowUndoDeleteWarning
    bool    bStartWithTemplate          : 1;    // Misc/NewDoc/AutoPilot
    bool    bMarkedHitMovesAlways       : 1;    // Misc/ObjectMoveable
    bool    bMoveOnlyDragging           : 1;    // Currently, not in use !!!
    bool    bCrookNoContortion          : 1;    // Misc/NoDistort
    bool    bQuickEdit                  : 1;    // Misc/TextObject/QuickEditing
    bool    bMasterPageCache            : 1;    // Misc/BackgroundCache
    bool    bDragWithCopy               : 1;    // Misc/CopyWhileMoving
    bool    bPickThrough                : 1;    // Misc/TextObject/Selectable
    bool    bDoubleClickTextEdit        : 1;    // Misc/DclickTextedit
    bool    bClickChangeRotation        : 1;    // Misc/RotateClick
    bool    bEnableSdremote             : 1;    // Misc/Start/EnableSdremote
    bool    bEnablePresenterScreen      : 1;    // Misc/Start/EnablePresenterScreen
    bool    bPresenterScreenFullScreen  : 1;    // Misc/Start/PresenterScreenFullScreen
    bool    bSolidDragging              : 1;    // Misc/ModifyWithAttributes
    bool    bSummationOfParagraphs      : 1;    // misc/SummationOfParagraphs
    bool    bTabBarVisible              : 1;    // Misc/TabBarVisible
    bool    bShowUndoDeleteWarning      : 1;    // Misc/ShowUndoDeleteWarning
    // #i75315#
    bool    bSlideshowRespectZOrder : 1;    // Misc/SlideshowRespectZOrder
    bool    bShowComments           : 1;    // Misc/ShowComments
    bool    bSlideshowRespectZOrder     : 1;    // Misc/SlideshowRespectZOrder
    bool    bShowComments               : 1;    // Misc/ShowComments

    bool    bPreviewNewEffects;
    bool    bPreviewChangedEffects;
@@ -247,6 +248,7 @@ public:
    bool    IsClickChangeRotation() const { Init(); return bClickChangeRotation; }
    bool    IsEnableSdremote() const { Init(); return bEnableSdremote; }
    bool    IsEnablePresenterScreen() const { Init(); return bEnablePresenterScreen; }
    bool    IsPresenterScreenFullScreen() const { Init(); return bPresenterScreenFullScreen; }
    bool    IsSolidDragging() const { Init(); return bSolidDragging; }
    bool    IsSummationOfParagraphs() const { Init(); return bSummationOfParagraphs; };
    bool    IsTabBarVisible() const { Init(); return bTabBarVisible; };
@@ -287,6 +289,7 @@ public:
    void    SetClickChangeRotation( bool bOn ) { if( bClickChangeRotation != bOn ) { OptionsChanged(); bClickChangeRotation = bOn; } }
    void    SetEnableSdremote( bool bOn ) { if( bEnableSdremote != bOn ) { OptionsChanged(); bEnableSdremote = bOn; } }
    void    SetEnablePresenterScreen( bool bOn ) { if( bEnablePresenterScreen != bOn ) { OptionsChanged(); bEnablePresenterScreen = bOn; } }
    void    SetPresenterScreenFullScreen( bool bOn ) { if ( bPresenterScreenFullScreen != bOn) { OptionsChanged(); bPresenterScreenFullScreen = bOn; } }
    void    SetSummationOfParagraphs( bool bOn ){ if ( bOn != bSummationOfParagraphs ) { OptionsChanged(); bSummationOfParagraphs = bOn; } }
    void    SetTabBarVisible( bool bOn ){ if ( bOn != bTabBarVisible ) { OptionsChanged(); bTabBarVisible = bOn; } }
    /** Set the printer independent layout mode.
diff --git a/sd/source/ui/inc/tpoption.hxx b/sd/source/ui/inc/tpoption.hxx
index d0f010a..9959163 100644
--- a/sd/source/ui/inc/tpoption.hxx
+++ b/sd/source/ui/inc/tpoption.hxx
@@ -88,6 +88,7 @@ private:

    std::unique_ptr<weld::CheckButton> m_xCbxEnableSdremote;
    std::unique_ptr<weld::CheckButton> m_xCbxEnablePresenterScreen;
    std::unique_ptr<weld::CheckButton> m_xCbxPresenterScreenFullScreen;
    std::unique_ptr<weld::CheckButton> m_xCbxCompatibility;

    //Scale
diff --git a/sd/uiconfig/simpress/ui/optimpressgeneralpage.ui b/sd/uiconfig/simpress/ui/optimpressgeneralpage.ui
index 44924853..6cb9eba 100644
--- a/sd/uiconfig/simpress/ui/optimpressgeneralpage.ui
+++ b/sd/uiconfig/simpress/ui/optimpressgeneralpage.ui
@@ -96,7 +96,7 @@
        <property name="label-xalign">0</property>
        <property name="shadow-type">none</property>
        <child>
          <!-- n-columns=1 n-rows=2 -->
          <!-- n-columns=1 n-rows=3 -->
          <object class="GtkGrid" id="grid5">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
@@ -144,6 +144,25 @@
                <property name="top-attach">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkCheckButton" id="enprsntconsfullscreen">
                <property name="label" translatable="yes" context="optimpressgeneralpage|enprsntconsfullscreen">Presenter Console Fullscreen</property>
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="receives-default">False</property>
                <property name="use-underline">True</property>
                <property name="draw-indicator">True</property>
                <child internal-child="accessible">
                  <object class="AtkObject" id="enprsntconsfullscreen-atkobject">
                    <property name="AtkObject::accessible-description" translatable="yes" context="extended_tip|enprsntconsfullscreen">Specifies that you want to show the Presenter Console as fullscreen window.</property>
                  </object>
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="top-attach">2</property>
              </packing>
            </child>
          </object>
        </child>
        <child type="label">
diff --git a/sdext/source/presenter/PresenterScreen.cxx b/sdext/source/presenter/PresenterScreen.cxx
index 993f967..c4f2cda 100644
--- a/sdext/source/presenter/PresenterScreen.cxx
+++ b/sdext/source/presenter/PresenterScreen.cxx
@@ -261,6 +261,19 @@ bool PresenterScreen::isPresenterScreenEnabled(const css::uno::Reference<css::un
            >>= dEnablePresenterScreen;
        return dEnablePresenterScreen;
}

bool PresenterScreen::isPresenterScreenFullScreen(const css::uno::Reference<css::uno::XComponentContext>& rxContext)
{
    bool dPresenterScreenFullScreen = true;
    PresenterConfigurationAccess aConfiguration (
        rxContext,
        "/org.openoffice.Office.Impress/",
        PresenterConfigurationAccess::READ_ONLY);
    aConfiguration.GetConfigurationNode("Misc/Start/PresenterScreenFullScreen")
        >>= dPresenterScreenFullScreen;
    return dPresenterScreenFullScreen;
}

void SAL_CALL PresenterScreen::disposing()
{
    Reference<XConfigurationController> xCC (mxConfigurationControllerWeak);
@@ -324,7 +337,7 @@ void PresenterScreen::InitializePresenterScreen()
        mxConfigurationControllerWeak = xCC;

        Reference<drawing::framework::XResourceId> xMainPaneId(
            GetMainPaneId(xPresentation));
            GetMainPaneId(xPresentation, xContext));
        // An empty reference means that the presenter screen can
        // not or must not be displayed.
        if ( ! xMainPaneId.is())
@@ -506,7 +519,8 @@ sal_Int32 PresenterScreen::GetPresenterScreenFromScreen( sal_Int32 nPresentation
}

Reference<drawing::framework::XResourceId> PresenterScreen::GetMainPaneId (
    const Reference<presentation::XPresentation2>& rxPresentation) const
    const Reference<presentation::XPresentation2>& rxPresentation,
    const Reference<XComponentContext>& xContext) const
{
    // A negative value means that the presentation spans all available
    // displays.  That leaves no room for the presenter.
@@ -514,10 +528,16 @@ Reference<drawing::framework::XResourceId> PresenterScreen::GetMainPaneId (
    if (nScreen < 0)
        return nullptr;

    auto fullScreenStr = isPresenterScreenFullScreen(xContext)
        ? OUString("true")
        : OUString("false");

    return ResourceId::create(
        Reference<XComponentContext>(mxContextWeak),
        PresenterHelper::msFullScreenPaneURL
                + "?FullScreen=true&ScreenNumber="
                + "?FullScreen="
                + fullScreenStr
                + "&ScreenNumber="
                + OUString::number(nScreen));
}

diff --git a/sdext/source/presenter/PresenterScreen.hxx b/sdext/source/presenter/PresenterScreen.hxx
index 90d23ad..3e4caf1 100644
--- a/sdext/source/presenter/PresenterScreen.hxx
+++ b/sdext/source/presenter/PresenterScreen.hxx
@@ -104,6 +104,9 @@ public:

    static bool isPresenterScreenEnabled(
        const css::uno::Reference<css::uno::XComponentContext>& rxContext);
    static bool isPresenterScreenFullScreen(
        const css::uno::Reference<css::uno::XComponentContext>& rxContext);

    /** Make the presenter screen visible.
    */
    void InitializePresenterScreen();
@@ -217,7 +220,8 @@ private:
        is displayed on another screen than the full screen presentation.
    */
    css::uno::Reference<css::drawing::framework::XResourceId> GetMainPaneId (
        const css::uno::Reference<css::presentation::XPresentation2>& rxPresentation) const;
        const css::uno::Reference<css::presentation::XPresentation2>& rxPresentation,
        const css::uno::Reference<com::sun::star::uno::XComponentContext>& xContext) const;
};

}