From febdd3d5048e4ee2523f40f9ebcfa44462f6f68e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Tue, 19 Feb 2013 15:07:26 +0000 Subject: [PATCH] Resolves: rhbz#895196 sc filter float a11y parent of itself --- ...5196-sc-filter-float-a11y-parent-of-.patch | 96 +++++++++++++++++++ libreoffice.spec | 7 +- 2 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 0001-Resolves-rhbz-895196-sc-filter-float-a11y-parent-of-.patch diff --git a/0001-Resolves-rhbz-895196-sc-filter-float-a11y-parent-of-.patch b/0001-Resolves-rhbz-895196-sc-filter-float-a11y-parent-of-.patch new file mode 100644 index 0000000..0ca0894 --- /dev/null +++ b/0001-Resolves-rhbz-895196-sc-filter-float-a11y-parent-of-.patch @@ -0,0 +1,96 @@ +From 1b13c952f50aab2b907dab13395ab23d0955c238 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 15 Feb 2013 17:12:00 +0000 +Subject: [PATCH] Resolves: rhbz#895196 sc filter float a11y parent of itself + loop/recurse + +Change-Id: I3679e7cfcd32a78b40c6a7b803c92ff0abe6f32c +--- + accessibility/source/helper/acc_factory.cxx | 8 +++++--- + vcl/inc/vcl/popupmenuwindow.hxx | 3 +++ + vcl/source/window/popupmenuwindow.cxx | 6 ++++++ + vcl/source/window/window.cxx | 12 +++++++++--- + 4 files changed, 23 insertions(+), 6 deletions(-) + +diff --git a/accessibility/source/helper/acc_factory.cxx b/accessibility/source/helper/acc_factory.cxx +index dc16fe6..93f6bf5 100644 +--- a/accessibility/source/helper/acc_factory.cxx ++++ b/accessibility/source/helper/acc_factory.cxx +@@ -382,9 +382,11 @@ inline bool hasFloatingChild(Window *pWindow) + } + else if ( nType == WINDOW_BORDERWINDOW && hasFloatingChild( pWindow ) ) + { +- PopupMenuFloatingWindow* pChild = dynamic_cast( +- pWindow->GetAccessibleChildWindow(0)); +- if ( pChild && pChild->IsPopupMenu() ) ++ // The logic here has to match that of Window::GetAccessibleParentWindow in ++ // vcl/source/window/window.cxx to avoid PopupMenuFloatingWindow ++ // becoming a11y parents of themselves ++ Window* pChild = pWindow->GetAccessibleChildWindow(0); ++ if (PopupMenuFloatingWindow::isPopupMenu(pChild)) + { + // Get the accessible context from the child window. + Reference xAccessible = pChild->CreateAccessible(); +diff --git a/vcl/inc/vcl/popupmenuwindow.hxx b/vcl/inc/vcl/popupmenuwindow.hxx +index 57b7747..a5856dc 100644 +--- a/vcl/inc/vcl/popupmenuwindow.hxx ++++ b/vcl/inc/vcl/popupmenuwindow.hxx +@@ -34,6 +34,9 @@ public: + sal_uInt16 GetMenuStackLevel() const; + void SetMenuStackLevel( sal_uInt16 nLevel ); + bool IsPopupMenu() const; ++ ++ //determine if a given window is an activated PopupMenuFloatingWindow ++ static bool isPopupMenu(const Window *pWindow); + }; + + #endif +diff --git a/vcl/source/window/popupmenuwindow.cxx b/vcl/source/window/popupmenuwindow.cxx +index e5e773a..7a03794 100644 +--- a/vcl/source/window/popupmenuwindow.cxx ++++ b/vcl/source/window/popupmenuwindow.cxx +@@ -67,4 +67,10 @@ bool PopupMenuFloatingWindow::IsPopupMenu() const + return mpImplData->mnMenuStackLevel != ::std::numeric_limits::max(); + } + ++bool PopupMenuFloatingWindow::isPopupMenu(const Window *pWindow) ++{ ++ const PopupMenuFloatingWindow* pChild = dynamic_cast(pWindow); ++ return pChild && pChild->IsPopupMenu(); ++} ++ + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx +index 6767fde..7ddb6b1 100644 +--- a/vcl/source/window/window.cxx ++++ b/vcl/source/window/window.cxx +@@ -48,6 +48,7 @@ + #include "vcl/unowrap.hxx" + #include "vcl/gdimtf.hxx" + #include "vcl/pdfextoutdevdata.hxx" ++#include "vcl/popupmenuwindow.hxx" + #include "vcl/lazydelete.hxx" + #include "vcl/virdev.hxx" + +@@ -8601,10 +8602,15 @@ Window* Window::GetAccessibleParentWindow() const + pWorkWin = pWorkWin->mpWindowImpl->mpNext; + pParent = pWorkWin; + } +- // If this a floating window which has a native boarder window, this one should be reported as +- // accessible parent ++ // If this is a floating window which has a native border window, then that border should be reported as ++ // the accessible parent, unless the floating window is a PopupMenuFloatingWindow ++ // ++ // The logic here has to match that of AccessibleFactory::createAccessibleContext in ++ // accessibility/source/helper/acc_factory.cxx to avoid PopupMenuFloatingWindow ++ // becoming a11y parents of themselves + else if( GetType() == WINDOW_FLOATINGWINDOW && +- mpWindowImpl->mpBorderWindow && mpWindowImpl->mpBorderWindow->mpWindowImpl->mbFrame) ++ mpWindowImpl->mpBorderWindow && mpWindowImpl->mpBorderWindow->mpWindowImpl->mbFrame && ++ !PopupMenuFloatingWindow::isPopupMenu(this)) + { + pParent = mpWindowImpl->mpBorderWindow; + } +-- +1.8.1.2 + diff --git a/libreoffice.spec b/libreoffice.spec index 4d55d4f..351e0eb 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -47,7 +47,7 @@ Summary: Free Software Productivity Suite Name: libreoffice Epoch: 1 Version: %{libo_version}.3 -Release: 6%{?libo_prerelease}%{?dist} +Release: 7%{?libo_prerelease}%{?dist} License: (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and Artistic and MPLv2.0 Group: Applications/Productivity URL: http://www.documentfoundation.org/develop @@ -258,6 +258,7 @@ Patch22: 0001-Resolves-rhbz-910176-cannot-select-directory-with-gn.patch Patch23: 0001-Work-around-problem-with-boost-shared_array-NULL-cto.patch Patch24: 0001-fix-compile-for-change-to-boost-1.53.0-declaring-sma.patch Patch25: 0001-fdo-60491-scp2-always-package-emboleobj-library-on-n.patch +Patch26: 0001-Resolves-rhbz-895196-sc-filter-float-a11y-parent-of-.patch %define instdir %{_libdir} %define baseinstdir %{instdir}/libreoffice @@ -1006,6 +1007,7 @@ mv -f redhat.soc extras/source/palettes/standard.soc %patch23 -p1 -b .Work-around-problem-with-boost-shared_array-NULL-cto.patch %patch24 -p1 -b .fix-compile-for-change-to-boost-1.53.0-declaring-sma.patch %patch25 -p1 -b .fdo-60491-scp2-always-package-emboleobj-library-on-n.patch +%patch26 -p1 -b .rhbz-895196-sc-filter-float-a11y-parent-of-.patch # TODO: check this # these are horribly incomplete--empty translations and copied english @@ -2073,6 +2075,9 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %endif %changelog +* Tue Feb 19 2013 Caolán McNamara - 1:4.0.0.3-7 +- Resolves: rhbz#895196 sc filter float a11y parent of itself + * Tue Feb 19 2013 David Tardon - 1:4.0.0.3-6 - Resolves: rhbz#911896 add Kazakh localization