summaryrefslogtreecommitdiff
path: root/svtools/source/control/accessibletabbarbase.cxx
diff options
context:
space:
mode:
authorMichael Weghorn <m.weghorn@posteo.de>2024-12-16 14:05:35 +0100
committerMichael Weghorn <m.weghorn@posteo.de>2024-12-16 19:08:06 +0100
commita7cc36dad9f37dcd74fe03ea08887a7732f08ff0 (patch)
treea6f4b6d6fc7cff8710e4f49ea2da554a0b65eeb7 /svtools/source/control/accessibletabbarbase.cxx
parent12ce6bbd537b6b6cb00f674dd5035d4389135c75 (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.cxx95
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: */