diff --git a/0001-fdo-67045-fix-several-nasty-screen-selection-issues-.patch b/0001-fdo-67045-fix-several-nasty-screen-selection-issues-.patch new file mode 100644 index 0000000..27f5c70 --- /dev/null +++ b/0001-fdo-67045-fix-several-nasty-screen-selection-issues-.patch @@ -0,0 +1,252 @@ +From 94dd6a449fe3c17f97264dd01bf263eb268ac19d Mon Sep 17 00:00:00 2001 +From: Michael Meeks +Date: Thu, 18 Jul 2013 14:51:29 +0100 +Subject: [PATCH] fdo#67045 - fix several nasty screen selection issues with + presenter console. + +Also add the ability to select the external screen (whatever it is) to the +configuration dialog. + +Change-Id: I2c81175143ba8fdd7c9aee1dac433742c2a0ba69 +Reviewed-on: https://gerrit.libreoffice.org/4971 +Reviewed-by: Fridrich Strba +Tested-by: Fridrich Strba +--- + .../schema/org/openoffice/Office/Impress.xcs | 5 +- + sd/source/ui/dlg/present.cxx | 63 +++++++++++++++------- + sd/source/ui/inc/present.hxx | 4 +- + sd/source/ui/slideshow/slideshow.cxx | 28 ++++------ + sdext/source/presenter/PresenterScreen.cxx | 13 +++-- + 5 files changed, 70 insertions(+), 43 deletions(-) + +diff --git a/officecfg/registry/schema/org/openoffice/Office/Impress.xcs b/officecfg/registry/schema/org/openoffice/Office/Impress.xcs +index 8161806..410a869 100644 +--- a/officecfg/registry/schema/org/openoffice/Office/Impress.xcs ++++ b/officecfg/registry/schema/org/openoffice/Office/Impress.xcs +@@ -504,7 +504,10 @@ + + + +- Number of the display used for full screen slide show mode. ++ Offset number of the display used for full screen slide show mode; ++ -1 means all screens, ++ 0 means default external screen, ++ N>0 means real-screen number + 1. + + + 0 +diff --git a/sd/source/ui/dlg/present.cxx b/sd/source/ui/dlg/present.cxx +index 9fce09b..6aec289 100644 +--- a/sd/source/ui/dlg/present.cxx ++++ b/sd/source/ui/dlg/present.cxx +@@ -149,6 +149,26 @@ SdStartPresentationDlg::SdStartPresentationDlg( Window* pWindow, + ChangePauseHdl( NULL ); + } + ++String SdStartPresentationDlg::GetDisplayName( sal_Int32 nDisplay, bool bExternal ) ++{ ++ String aName( bExternal ? msExternalMonitor->GetText() : ++ msMonitor->GetText() ); ++ const String aNumber( OUString::number( nDisplay ) ); ++ aName.SearchAndReplace( String("%1"), aNumber ); ++ return aName; ++} ++ ++/// Store display index together with name in user data ++sal_Int32 SdStartPresentationDlg::InsertDisplayEntry(const rtl::OUString &aName, ++ sal_Int32 nDisplay) ++{ ++ maLBMonitor->InsertEntry( aName ); ++ const sal_uInt32 nEntryIndex = maLBMonitor->GetEntryCount() - 1; ++ maLBMonitor->SetEntryData( nEntryIndex, (void*)(sal_IntPtr)nDisplay ); ++ ++ return nEntryIndex; ++} ++ + void SdStartPresentationDlg::InitMonitorSettings() + { + try +@@ -172,36 +192,39 @@ void SdStartPresentationDlg::InitMonitorSettings() + sal_Int32 nDefaultExternalIndex (-1); + const sal_Int32 nDefaultSelectedDisplay ( + ( ( const SfxInt32Item& ) rOutAttrs.Get( ATTR_PRESENT_DISPLAY ) ).GetValue()); +- const String sPlaceHolder( RTL_CONSTASCII_USTRINGPARAM( "%1" ) ); ++ ++ // Un-conditionally add a version for '0' the default external display ++ sal_Int32 nInsertedEntry; ++ ++ // FIXME: string-freeze this should really be 'External (display %)' ++ String aName = GetDisplayName( nExternalIndex + 1, true); ++ nInsertedEntry = InsertDisplayEntry( aName, 0 ); ++ if( nDefaultSelectedDisplay == 0) ++ nSelectedIndex = nInsertedEntry; ++ ++ // The user data contains the real setting + for( sal_Int32 nDisplay = 0; nDisplay < mnMonitors; nDisplay++ ) + { +- String aName( nDisplay == nExternalIndex ? +- msExternalMonitor->GetText() : +- msMonitor->GetText() ); +- const String aNumber( OUString::number( nDisplay + 1 ) ); +- aName.SearchAndReplace( sPlaceHolder, aNumber ); +- maLBMonitor->InsertEntry( aName ); +- +- // Store display index together with name. +- const sal_uInt32 nEntryIndex (maLBMonitor->GetEntryCount()-1); +- maLBMonitor->SetEntryData(nEntryIndex, (void*)(sal_IntPtr)nDisplay); ++ bool bIsExternal = nDisplay == nExternalIndex; ++ // FIXME: string-freeze, use true to denote external for now ++ bIsExternal = false; ++ aName = GetDisplayName( nDisplay + 1, bIsExternal ); ++ nInsertedEntry = InsertDisplayEntry( aName, nDisplay + 1 ); + + // Remember the index of the default selection. +- if (nDefaultSelectedDisplay == nDisplay) +- nSelectedIndex = nEntryIndex; ++ if( nDisplay + 1 == nDefaultSelectedDisplay ) ++ nSelectedIndex = nInsertedEntry; + + // Remember index of the default display. +- if (nDisplay == nExternalIndex) +- nDefaultExternalIndex = nEntryIndex; ++ if( nDisplay == nExternalIndex ) ++ nDefaultExternalIndex = nInsertedEntry; + } + + if( bUnifiedDisplay ) + { +- maLBMonitor->InsertEntry( msAllMonitors->GetText() ); +- const sal_uInt32 nEntryIndex (maLBMonitor->GetEntryCount()-1); +- maLBMonitor->SetEntryData(nEntryIndex, (void*)-1); +- if (nDefaultSelectedDisplay == -1) +- nSelectedIndex = nEntryIndex; ++ nInsertedEntry = InsertDisplayEntry( msAllMonitors->GetText(), -1 ); ++ if( nDefaultSelectedDisplay == -1 ) ++ nSelectedIndex = nInsertedEntry; + } + + if (nSelectedIndex < 0) +diff --git a/sd/source/ui/inc/present.hxx b/sd/source/ui/inc/present.hxx +index 393e03a..ef27bfb 100644 +--- a/sd/source/ui/inc/present.hxx ++++ b/sd/source/ui/inc/present.hxx +@@ -74,7 +74,9 @@ private: + DECL_LINK( ChangePauseHdl, void * ); + + void InitMonitorSettings(); +- ++ sal_Int32 InsertDisplayEntry(const rtl::OUString &aName, ++ sal_Int32 nDisplay); ++ String GetDisplayName( sal_Int32 nDisplay, bool bExternal ); + public: + SdStartPresentationDlg( Window* pWindow, + const SfxItemSet& rInAttrs, +diff --git a/sd/source/ui/slideshow/slideshow.cxx b/sd/source/ui/slideshow/slideshow.cxx +index f9154e2..50a93e5 100644 +--- a/sd/source/ui/slideshow/slideshow.cxx ++++ b/sd/source/ui/slideshow/slideshow.cxx +@@ -550,14 +550,6 @@ void SAL_CALL SlideShow::setPropertyValue( const OUString& aPropertyName, const + sal_Int32 nDisplay = 0; + if( aValue >>= nDisplay ) + { +- // Convert value to true display id. +- if (nDisplay == 0) +- nDisplay = Application::GetDisplayExternalScreen(); +- else if (nDisplay < 0) +- nDisplay = -1; +- else +- --nDisplay; +- + bIllegalArgument = false; + + SdOptions* pOptions = SD_MOD()->GetSdOptions(DOCUMENT_TYPE_IMPRESS); +@@ -642,14 +634,7 @@ Any SAL_CALL SlideShow::getPropertyValue( const OUString& PropertyName ) throw(U + case ATTR_PRESENT_DISPLAY: + { + SdOptions* pOptions = SD_MOD()->GetSdOptions(DOCUMENT_TYPE_IMPRESS); +- const sal_Int32 nDisplay (pOptions->GetDisplay()); +- // Convert true display id to the previously used schema. +- if (nDisplay == (sal_Int32)Application::GetDisplayExternalScreen()) +- return Any(sal_Int32(0)); +- else if (nDisplay < 0) +- return Any(sal_Int32(-1)); +- else +- return Any(nDisplay+1); ++ return Any(pOptions->GetDisplay()); + } + + default: +@@ -1288,8 +1273,8 @@ void SlideShow::StartFullscreenPresentation( ) + + // --------------------------------------------------------- + ++/// convert configuration setting display concept to real screens + sal_Int32 SlideShow::GetDisplay() +- + { + sal_Int32 nDisplay = 0; + +@@ -1297,6 +1282,15 @@ sal_Int32 SlideShow::GetDisplay() + if( pOptions ) + nDisplay = pOptions->GetDisplay(); + ++ if( nDisplay < 0 ) ++ nDisplay = -1; ++ else if( nDisplay == 0) ++ nDisplay = (sal_Int32)Application::GetDisplayExternalScreen(); ++ else ++ nDisplay--; ++ ++ SAL_INFO("sd", "Presenting on real screen " << nDisplay); ++ + return nDisplay; + } + +diff --git a/sdext/source/presenter/PresenterScreen.cxx b/sdext/source/presenter/PresenterScreen.cxx +index f361912..f986944 100644 +--- a/sdext/source/presenter/PresenterScreen.cxx ++++ b/sdext/source/presenter/PresenterScreen.cxx +@@ -448,9 +448,10 @@ void PresenterScreen::SwitchMonitors() + } + } + +-// FIXME: really VCL should hold the current 'external' and 'built-in' +-// display states, and hide them behind some attractive API, and +-// the PresenterConsole should link VCL directly ... ++/** ++ * Return the real VCL screen number to show the presenter console ++ * on or -1 to not show anything. ++ */ + sal_Int32 PresenterScreen::GetPresenterScreenNumber ( + const Reference& rxPresentation) const + { +@@ -475,6 +476,8 @@ sal_Int32 PresenterScreen::GetPresenterScreenNumber ( + return -1; + } + ++ SAL_INFO("sdext.presenter", "Display number is " << nDisplayNumber); ++ + if (nDisplayNumber > 0) + { + nScreenNumber = nDisplayNumber - 1; +@@ -518,7 +521,7 @@ sal_Int32 PresenterScreen::GetPresenterScreenNumber ( + // For some reason we can not access the screen number. Use + // the default instead. + } +- ++ SAL_INFO("sdext.presenter", "Get presenter screen for screen " << nScreenNumber); + return GetPresenterScreenFromScreen(nScreenNumber); + } + +@@ -538,6 +541,8 @@ sal_Int32 PresenterScreen::GetPresenterScreenFromScreen( sal_Int32 nPresentation + break; + + default: ++ SAL_INFO("sdext.presenter", "Warning unexpected, out of bound screen " ++ "mapped to 0" << nPresentationScreen); + // When the full screen presentation is displayed on a screen + // other than 0 or 1 then place the presenter on the first + // available screen. +-- +1.8.3.1 + diff --git a/libreoffice.spec b/libreoffice.spec index e9180ee..bdf31f7 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -261,6 +261,7 @@ Patch23: 0001-Use-inconditionally-the-libwpd-0.9.5-path.patch Patch24: 0001-sanitize-system-clucene-includes.patch Patch25: 0001-Resolves-rhbz-989686-Fix-crash-with-ooo120774-1.doc.patch Patch26: 0001-rhbz-989246-Honor-user-s-JavaDriverClass-override-in.patch +Patch27: 0001-fdo-67045-fix-several-nasty-screen-selection-issues-.patch %define instdir %{_libdir} %define baseinstdir %{instdir}/libreoffice @@ -1019,6 +1020,7 @@ mv -f redhat.soc extras/source/palettes/standard.soc %patch24 -p1 -b .sanitize-system-clucene-includes.patch %patch25 -p1 -b .rhbz-989686-Fix-crash-with-ooo120774-1.doc.patch %patch26 -p1 -b .rhbz-989246-Honor-user-s-JavaDriverClass-override-in.patch +%patch27 -p1 -b .fdo-67045-fix-several-nasty-screen-selection-issues-.patch # TODO: check this # these are horribly incomplete--empty translations and copied english @@ -2105,8 +2107,9 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %endif %changelog -* Tue Jul 30 2013 Stephan Bergmann - 1:4.1.0.4-5-UNBUILT +* Tue Jul 30 2013 Stephan Bergmann - 1:4.1.0.4-5 - Resolves: rhbz#989246 Honor user's JavaDriverClass override in mysql driver +- Resolves: fdo#67045 fix several nasty screen selection issues * Tue Jul 30 2013 Caolán McNamara - 1:4.1.0.4-4 - Resolves: rhbz#989686 Fix crash with stripping whitespace from toc entries