diff options
author | Michael Weghorn <m.weghorn@posteo.de> | 2024-12-16 14:05:35 +0100 |
---|---|---|
committer | Michael Weghorn <m.weghorn@posteo.de> | 2024-12-16 19:08:06 +0100 |
commit | a7cc36dad9f37dcd74fe03ea08887a7732f08ff0 (patch) | |
tree | a6f4b6d6fc7cff8710e4f49ea2da554a0b65eeb7 /svtools/source/control/accessibletabbarbase.cxx | |
parent | 12ce6bbd537b6b6cb00f674dd5035d4389135c75 (diff) |
a11y: Move TabBar a11y classses to svtools, no longer use factory
Move AccessibleTabBar and related classes to
implement accessibility for the TabBar control
to svtools, where the TabBar code is also located.
(This matches how it's organized for the Ruler control
whose a11y class AccessibleRuler is also in svtools.)
This removes the last dependency of the accessibility
module on svtools, so drop that from accessibility/Library_acc.mk.
Instead of using the AccessibleFactory to
create an instance in TabBar::CreateAccessible,
just call the AccessibleTabBar ctor directly.
Change-Id: Id6a8852de930ffe7fe7509f84f33861d274120dd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178588
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
Diffstat (limited to 'svtools/source/control/accessibletabbarbase.cxx')
-rw-r--r-- | svtools/source/control/accessibletabbarbase.cxx | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/svtools/source/control/accessibletabbarbase.cxx b/svtools/source/control/accessibletabbarbase.cxx new file mode 100644 index 000000000000..08142db60f6f --- /dev/null +++ b/svtools/source/control/accessibletabbarbase.cxx @@ -0,0 +1,95 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "accessibletabbarbase.hxx" +#include "accessibletabbarpagelist.hxx" + +#include <svtools/tabbar.hxx> +#include <vcl/vclevent.hxx> + + +namespace accessibility +{ + + +AccessibleTabBarBase::AccessibleTabBarBase( TabBar* pTabBar ) : + m_pTabBar( nullptr ) +{ + SetTabBarPointer( pTabBar ); +} + +AccessibleTabBarBase::~AccessibleTabBarBase() +{ + ClearTabBarPointer(); +} + +IMPL_LINK( AccessibleTabBarBase, WindowEventListener, VclWindowEvent&, rEvent, void ) +{ + vcl::Window* pEventWindow = rEvent.GetWindow(); + OSL_ENSURE( pEventWindow, "AccessibleTabBarBase::WindowEventListener: no window!" ); + + if( ( rEvent.GetId() == VclEventId::TabbarPageRemoved ) && + ( static_cast<sal_uInt16>(reinterpret_cast<sal_IntPtr>(rEvent.GetData())) == TabBar::PAGE_NOT_FOUND ) && + (dynamic_cast<AccessibleTabBarPageList *>(this) == nullptr)) + { + return; + } + + if ( !pEventWindow->IsAccessibilityEventsSuppressed() || (rEvent.GetId() == VclEventId::ObjectDying) ) + ProcessWindowEvent( rEvent ); +} + +void AccessibleTabBarBase::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) +{ + if( rVclWindowEvent.GetId() == VclEventId::ObjectDying ) + ClearTabBarPointer(); +} + +// XComponent + +void AccessibleTabBarBase::disposing() +{ + OAccessibleExtendedComponentHelper::disposing(); + ClearTabBarPointer(); +} + +// private + +void AccessibleTabBarBase::SetTabBarPointer( TabBar* pTabBar ) +{ + OSL_ENSURE( !m_pTabBar, "AccessibleTabBarBase::SetTabBarPointer - multiple call" ); + m_pTabBar = pTabBar; + if( m_pTabBar ) + m_pTabBar->AddEventListener( LINK( this, AccessibleTabBarBase, WindowEventListener ) ); +} + +void AccessibleTabBarBase::ClearTabBarPointer() +{ + if( m_pTabBar ) + { + m_pTabBar->RemoveEventListener( LINK( this, AccessibleTabBarBase, WindowEventListener ) ); + m_pTabBar = nullptr; + } +} + + +} // namespace accessibility + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |