loplugin:finalclasses in accessibility
Change-Id: I9d8bc018dfe8bd8668d28daccd85ea5770fe31b0 Reviewed-on: https://gerrit.libreoffice.org/44537 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
@@ -36,7 +36,7 @@ typedef ::cppu::ImplHelper1< css::accessibility::XAccessibleSelection >
|
||||
control (row or column header bar). This object supports the
|
||||
XAccessibleSelection interface. Selecting a child of this object selects
|
||||
complete rows or columns of the data table. */
|
||||
class AccessibleBrowseBoxHeaderBar :
|
||||
class AccessibleBrowseBoxHeaderBar final :
|
||||
public AccessibleBrowseBoxTableBase,
|
||||
public AccessibleBrowseBoxHeaderBarImplHelper
|
||||
{
|
||||
@@ -50,7 +50,7 @@ public:
|
||||
::svt::IAccessibleTableProvider& rBrowseBox,
|
||||
::svt::AccessibleBrowseBoxObjType eObjType );
|
||||
|
||||
protected:
|
||||
private:
|
||||
virtual ~AccessibleBrowseBoxHeaderBar() override;
|
||||
|
||||
public:
|
||||
@@ -157,7 +157,7 @@ public:
|
||||
/** @return An unique implementation ID. */
|
||||
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
|
||||
|
||||
protected:
|
||||
private:
|
||||
// internal virtual methods
|
||||
|
||||
/** @attention This method requires locked mutex's and a living object.
|
||||
|
@@ -33,11 +33,10 @@ namespace accessibility {
|
||||
|
||||
|
||||
/** This class represents the complete accessible Grid Control object. */
|
||||
class AccessibleGridControl : public AccessibleGridControlBase
|
||||
class AccessibleGridControl final : public AccessibleGridControlBase
|
||||
{
|
||||
friend class AccessibleGridControlAccess;
|
||||
|
||||
protected:
|
||||
AccessibleGridControl(
|
||||
const css::uno::Reference< css::accessibility::XAccessible >& _rxParent,
|
||||
const css::uno::Reference< css::accessibility::XAccessible >& _rxCreator,
|
||||
@@ -50,7 +49,6 @@ protected:
|
||||
using AccessibleGridControlBase::disposing;
|
||||
virtual void SAL_CALL disposing() override;
|
||||
|
||||
protected:
|
||||
// XAccessibleContext -----------------------------------------------------
|
||||
|
||||
/** @return The count of visible children. */
|
||||
@@ -106,7 +104,7 @@ public:
|
||||
void commitTableEvent(sal_Int16 nEventId, const css::uno::Any& rNewValue,
|
||||
const css::uno::Any& rOldValue);
|
||||
|
||||
protected:
|
||||
private:
|
||||
// internal virtual methods -----------------------------------------------
|
||||
|
||||
/** @attention This method requires locked mutex's and a living object.
|
||||
@@ -140,7 +138,6 @@ protected:
|
||||
@return An AccessibleGridControlTable. */
|
||||
AccessibleGridControlTable* createAccessibleTable();
|
||||
|
||||
private:
|
||||
// members ----------------------------------------------------------------
|
||||
std::unique_ptr< AccessibleGridControl_Impl > m_xImpl;
|
||||
};
|
||||
|
@@ -30,7 +30,7 @@ namespace accessibility {
|
||||
(row or column header bar). This object supports the
|
||||
XAccessibleSelection interface. Selecting a child of this object selects
|
||||
complete rows or columns of the data table. */
|
||||
class AccessibleGridControlHeader : public AccessibleGridControlTableBase
|
||||
class AccessibleGridControlHeader final : public AccessibleGridControlTableBase
|
||||
{
|
||||
public:
|
||||
/** @param rxParent accessible parent control
|
||||
@@ -43,7 +43,7 @@ public:
|
||||
::svt::table::IAccessibleTable& rTable,
|
||||
::svt::table::AccessibleTableControlObjType eObjType );
|
||||
|
||||
protected:
|
||||
private:
|
||||
virtual ~AccessibleGridControlHeader() override;
|
||||
|
||||
public:
|
||||
@@ -115,7 +115,7 @@ public:
|
||||
/** @return An unique implementation ID. */
|
||||
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
|
||||
|
||||
protected:
|
||||
private:
|
||||
/** Returns the specified row or column. Uses one of the parameters,
|
||||
depending on object type.
|
||||
@attention This method requires locked mutex's and a living object.
|
||||
|
@@ -34,7 +34,7 @@ typedef ::cppu::ImplHelper1 < css::accessibility::XAccessibleSelection >
|
||||
AccessibleGridControlTableSelectionImplHelper;
|
||||
/** This class represents the accessible object of the data table of a
|
||||
Grid control. */
|
||||
class AccessibleGridControlTable : public AccessibleGridControlTableBase,
|
||||
class AccessibleGridControlTable final : public AccessibleGridControlTableBase,
|
||||
public AccessibleGridControlTableSelectionImplHelper
|
||||
{
|
||||
public:
|
||||
@@ -42,9 +42,8 @@ public:
|
||||
const css::uno::Reference< css::accessibility::XAccessible >& rxParent,
|
||||
::svt::table::IAccessibleTable& rTable);
|
||||
|
||||
protected:
|
||||
virtual ~AccessibleGridControlTable() override;
|
||||
private:
|
||||
virtual ~AccessibleGridControlTable() override;
|
||||
std::vector< AccessibleGridControlTableCell* > m_pCellVector;
|
||||
std::vector< css::uno::Reference< css::accessibility::XAccessible> > m_pAccessCellVector;
|
||||
public:
|
||||
@@ -147,7 +146,7 @@ public:
|
||||
/**@return m_xAccessCellVector*/
|
||||
std::vector< css::uno::Reference< css::accessibility::XAccessible > >& getAccessibleCellVector() { return m_pAccessCellVector;}
|
||||
|
||||
protected:
|
||||
private:
|
||||
// internal virtual methods
|
||||
|
||||
/** @attention This method requires locked mutex's and a living object.
|
||||
|
@@ -95,11 +95,10 @@ namespace accessibility
|
||||
// = EditBrowseBoxTableCell
|
||||
|
||||
// XAccessible providing an EditBrowseBoxTableCell
|
||||
class EditBrowseBoxTableCellAccess:
|
||||
class EditBrowseBoxTableCellAccess final :
|
||||
public cppu::BaseMutex,
|
||||
public cppu::WeakComponentImplHelper<css::accessibility::XAccessible>
|
||||
{
|
||||
protected:
|
||||
css::uno::WeakReference< css::accessibility::XAccessibleContext >
|
||||
m_aContext;
|
||||
css::uno::Reference< css::accessibility::XAccessible >
|
||||
@@ -122,7 +121,7 @@ namespace accessibility
|
||||
sal_uInt16 _nColPos
|
||||
);
|
||||
|
||||
protected:
|
||||
private:
|
||||
virtual ~EditBrowseBoxTableCellAccess() override;
|
||||
|
||||
// XAccessible
|
||||
@@ -131,7 +130,6 @@ namespace accessibility
|
||||
// XComponent/OComponentHelper
|
||||
virtual void SAL_CALL disposing() override;
|
||||
|
||||
private:
|
||||
EditBrowseBoxTableCellAccess( const EditBrowseBoxTableCellAccess& ) = delete;
|
||||
EditBrowseBoxTableCellAccess& operator=( const EditBrowseBoxTableCellAccess& ) = delete;
|
||||
};
|
||||
|
@@ -37,13 +37,11 @@ namespace accessibility
|
||||
|
||||
/** the class OAccessibleListBoxEntry represents the base class for an accessible object of a listbox entry
|
||||
*/
|
||||
class AccessibleIconChoiceCtrl :public AccessibleIconChoiceCtrl_BASE
|
||||
,public VCLXAccessibleComponent
|
||||
class AccessibleIconChoiceCtrl final : public AccessibleIconChoiceCtrl_BASE
|
||||
,public VCLXAccessibleComponent
|
||||
{
|
||||
protected:
|
||||
css::uno::Reference< css::accessibility::XAccessible > m_xParent;
|
||||
|
||||
protected:
|
||||
virtual ~AccessibleIconChoiceCtrl() override;
|
||||
|
||||
/** this function is called upon disposing the component */
|
||||
|
@@ -57,22 +57,19 @@ namespace accessibility
|
||||
, css::lang::XEventListener > AccessibleIconChoiceCtrlEntry_BASE;
|
||||
|
||||
/** the class AccessibleListBoxEntry represents the class for an accessible object of a listbox entry */
|
||||
class AccessibleIconChoiceCtrlEntry : public ::cppu::BaseMutex,
|
||||
public AccessibleIconChoiceCtrlEntry_BASE,
|
||||
public ::comphelper::OCommonAccessibleText
|
||||
class AccessibleIconChoiceCtrlEntry final : public ::cppu::BaseMutex,
|
||||
public AccessibleIconChoiceCtrlEntry_BASE,
|
||||
public ::comphelper::OCommonAccessibleText
|
||||
{
|
||||
private:
|
||||
/** The treelistbox control */
|
||||
VclPtr<SvtIconChoiceCtrl> m_pIconCtrl;
|
||||
sal_Int32 m_nIndex;
|
||||
|
||||
protected:
|
||||
/// client id in the AccessibleEventNotifier queue
|
||||
sal_uInt32 m_nClientId;
|
||||
|
||||
css::uno::Reference< css::accessibility::XAccessible > m_xParent;
|
||||
|
||||
private:
|
||||
tools::Rectangle GetBoundingBox_Impl() const;
|
||||
tools::Rectangle GetBoundingBoxOnScreen_Impl() const;
|
||||
bool IsAlive_Impl() const;
|
||||
@@ -87,7 +84,6 @@ namespace accessibility
|
||||
/// @throws css::lang::DisposedException
|
||||
void EnsureIsAlive() const;
|
||||
|
||||
protected:
|
||||
virtual ~AccessibleIconChoiceCtrlEntry() override;
|
||||
/** this function is called upon disposing the component
|
||||
*/
|
||||
|
@@ -39,17 +39,15 @@ namespace accessibility
|
||||
|
||||
/** the class OAccessibleListBoxEntry represents the base class for an accessible object of a listbox entry
|
||||
*/
|
||||
class AccessibleListBox:
|
||||
class AccessibleListBox final :
|
||||
public cppu::ImplHelper2<
|
||||
css::accessibility::XAccessible,
|
||||
css::accessibility::XAccessibleSelection>,
|
||||
public VCLXAccessibleComponent
|
||||
{
|
||||
protected:
|
||||
|
||||
css::uno::Reference< css::accessibility::XAccessible > m_xParent;
|
||||
|
||||
protected:
|
||||
virtual ~AccessibleListBox() override;
|
||||
|
||||
// OComponentHelper overridables
|
||||
@@ -108,14 +106,14 @@ namespace accessibility
|
||||
css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) override;
|
||||
void SAL_CALL deselectAccessibleChild( sal_Int32 nSelectedChildIndex ) override;
|
||||
|
||||
private:
|
||||
private:
|
||||
|
||||
typedef std::map< SvTreeListEntry*, css::uno::Reference< css::accessibility::XAccessible > > MAP_ENTRY;
|
||||
MAP_ENTRY m_mapEntry;
|
||||
typedef std::map< SvTreeListEntry*, css::uno::Reference< css::accessibility::XAccessible > > MAP_ENTRY;
|
||||
MAP_ENTRY m_mapEntry;
|
||||
|
||||
css::uno::Reference< css::accessibility::XAccessible > m_xFocusedChild;
|
||||
css::uno::Reference< css::accessibility::XAccessible > m_xFocusedChild;
|
||||
|
||||
accessibility::AccessibleListBoxEntry* GetCurEventEntry( const VclWindowEvent& rVclWindowEvent );
|
||||
accessibility::AccessibleListBoxEntry* GetCurEventEntry( const VclWindowEvent& rVclWindowEvent );
|
||||
|
||||
};
|
||||
|
||||
|
@@ -68,10 +68,10 @@ namespace accessibility
|
||||
, css::lang::XServiceInfo > AccessibleListBoxEntry_BASE;
|
||||
|
||||
/** the class AccessibleListBoxEntry represents the class for an accessible object of a listbox entry */
|
||||
class AccessibleListBoxEntry:public ::cppu::BaseMutex
|
||||
,public AccessibleListBoxEntry_BASE
|
||||
,public ::comphelper::OCommonAccessibleText
|
||||
,public ListBoxAccessibleBase
|
||||
class AccessibleListBoxEntry final : public ::cppu::BaseMutex
|
||||
,public AccessibleListBoxEntry_BASE
|
||||
,public ::comphelper::OCommonAccessibleText
|
||||
,public ListBoxAccessibleBase
|
||||
{
|
||||
friend class AccessibleListBox;
|
||||
|
||||
@@ -81,14 +81,12 @@ namespace accessibility
|
||||
SvTreeListEntry* m_pSvLBoxEntry; // Needed for a11y focused item...
|
||||
|
||||
|
||||
protected:
|
||||
/// client id in the AccessibleEventNotifier queue
|
||||
sal_uInt32 m_nClientId;
|
||||
|
||||
css::uno::WeakReference< css::accessibility::XAccessible >
|
||||
m_aParent;
|
||||
|
||||
private:
|
||||
tools::Rectangle GetBoundingBox_Impl() const;
|
||||
tools::Rectangle GetBoundingBoxOnScreen_Impl() const;
|
||||
bool IsAlive_Impl() const;
|
||||
@@ -105,7 +103,6 @@ namespace accessibility
|
||||
|
||||
void NotifyAccessibleEvent( sal_Int16 _nEventId, const css::uno::Any& _aOldValue, const css::uno::Any& _aNewValue );
|
||||
|
||||
protected:
|
||||
virtual ~AccessibleListBoxEntry() override;
|
||||
|
||||
/** this function is called upon disposing the component
|
||||
@@ -135,7 +132,7 @@ namespace accessibility
|
||||
SvTreeListEntry* GetSvLBoxEntry() const { return m_pSvLBoxEntry; }
|
||||
|
||||
|
||||
protected:
|
||||
private:
|
||||
// XTypeProvider
|
||||
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
|
||||
|
||||
@@ -211,7 +208,7 @@ namespace accessibility
|
||||
virtual sal_Bool SAL_CALL setCurrentValue( const css::uno::Any& aNumber ) override;
|
||||
virtual css::uno::Any SAL_CALL getMaximumValue( ) override;
|
||||
virtual css::uno::Any SAL_CALL getMinimumValue( ) override;
|
||||
private:
|
||||
|
||||
css::uno::Reference< css::accessibility::XAccessible > implGetParentAccessible( ) const;
|
||||
SvTreeListEntry* GetRealChild(sal_Int32 nIndex);
|
||||
sal_Int32 GetRoleType();
|
||||
|
@@ -43,15 +43,13 @@ namespace accessibility
|
||||
css::accessibility::XAccessible,
|
||||
css::lang::XServiceInfo > AccessibleTabBar_BASE;
|
||||
|
||||
class AccessibleTabBar : public AccessibleTabBarBase,
|
||||
class AccessibleTabBar final : public AccessibleTabBarBase,
|
||||
public AccessibleTabBar_BASE
|
||||
{
|
||||
private:
|
||||
typedef std::vector< css::uno::Reference< css::accessibility::XAccessible > > AccessibleChildren;
|
||||
|
||||
AccessibleChildren m_aAccessibleChildren;
|
||||
|
||||
protected:
|
||||
virtual void ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) override;
|
||||
void FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet );
|
||||
|
||||
|
@@ -45,7 +45,7 @@ namespace accessibility
|
||||
css::accessibility::XAccessibleSelection,
|
||||
css::lang::XServiceInfo > AccessibleTabBarPageList_BASE;
|
||||
|
||||
class AccessibleTabBarPageList : public AccessibleTabBarBase,
|
||||
class AccessibleTabBarPageList final : public AccessibleTabBarBase,
|
||||
public AccessibleTabBarPageList_BASE
|
||||
{
|
||||
private:
|
||||
@@ -54,7 +54,6 @@ namespace accessibility
|
||||
AccessibleChildren m_aAccessibleChildren;
|
||||
sal_Int32 m_nIndexInParent;
|
||||
|
||||
protected:
|
||||
void UpdateShowing( bool bShowing );
|
||||
void UpdateSelected( sal_Int32 i, bool bSelected );
|
||||
void UpdatePageText( sal_Int32 i );
|
||||
|
@@ -35,14 +35,13 @@ typedef ::cppu::ImplHelper2<
|
||||
css::accessibility::XAccessibleAction,
|
||||
css::accessibility::XAccessibleValue > VCLXAccessibleCheckBox_BASE;
|
||||
|
||||
class VCLXAccessibleCheckBox : public VCLXAccessibleTextComponent,
|
||||
class VCLXAccessibleCheckBox final : public VCLXAccessibleTextComponent,
|
||||
public VCLXAccessibleCheckBox_BASE
|
||||
{
|
||||
private:
|
||||
bool m_bChecked;
|
||||
bool m_bIndeterminate;
|
||||
|
||||
protected:
|
||||
virtual ~VCLXAccessibleCheckBox() override;
|
||||
|
||||
bool IsChecked();
|
||||
|
@@ -49,7 +49,7 @@ namespace accessibility
|
||||
access to their underlying list implementation. Look into derived
|
||||
classes for selection.
|
||||
*/
|
||||
class VCLXAccessibleList
|
||||
class VCLXAccessibleList final
|
||||
: public VCLXAccessibleComponent,
|
||||
public VCLXAccessibleList_BASE
|
||||
{
|
||||
@@ -128,7 +128,7 @@ public:
|
||||
|
||||
static void NotifyListItem(css::uno::Any const & val);
|
||||
::accessibility::IComboListBoxHelper* getListBoxHelper() { return m_pListBoxHelper.get(); }
|
||||
protected:
|
||||
private:
|
||||
BoxType m_aBoxType;
|
||||
std::unique_ptr<::accessibility::IComboListBoxHelper> m_pListBoxHelper;
|
||||
ListItems m_aAccessibleChildren;
|
||||
@@ -170,19 +170,16 @@ protected:
|
||||
// VCLXAccessibleComponent
|
||||
virtual css::awt::Rectangle implGetBounds( ) override;
|
||||
|
||||
private:
|
||||
/** We need to save the accessible parent to return it in getAccessibleParent(),
|
||||
because this method of the base class returns the wrong parent.
|
||||
*/
|
||||
css::uno::Reference< css::accessibility::XAccessible > m_xParent;
|
||||
|
||||
void UpdateEntryRange_Impl();
|
||||
protected:
|
||||
void UpdateSelection_Impl(sal_Int32 nPos = 0);
|
||||
bool checkEntrySelected(sal_Int32 _nPos,
|
||||
css::uno::Any& _rNewValue,
|
||||
css::uno::Reference< css::accessibility::XAccessible >& _rxNewAcc);
|
||||
private:
|
||||
void notifyVisibleStates(bool _bSetNew );
|
||||
void UpdateVisibleLineCount();
|
||||
};
|
||||
|
@@ -52,7 +52,7 @@ typedef ::cppu::WeakAggComponentImplHelper6< css::accessibility::XAccessible
|
||||
|
||||
/** the class OAccessibleListBoxEntry represents the base class for an accessible object of a listbox entry
|
||||
*/
|
||||
class VCLXAccessibleListItem : public ::cppu::BaseMutex,
|
||||
class VCLXAccessibleListItem final : public ::cppu::BaseMutex,
|
||||
public ::comphelper::OCommonAccessibleText,
|
||||
public VCLXAccessibleListItem_BASE
|
||||
{
|
||||
@@ -62,14 +62,12 @@ private:
|
||||
bool m_bSelected;
|
||||
bool m_bVisible;
|
||||
|
||||
protected:
|
||||
/// client id in the AccessibleEventNotifier queue
|
||||
sal_uInt32 m_nClientId;
|
||||
|
||||
rtl::Reference< VCLXAccessibleList > m_xParent;
|
||||
css::uno::Reference< css::accessibility::XAccessibleContext > m_xParentContext;
|
||||
|
||||
protected:
|
||||
virtual ~VCLXAccessibleListItem() override;
|
||||
/** this function is called upon disposing the component
|
||||
*/
|
||||
|
@@ -31,9 +31,8 @@ namespace vcl { class Window; }
|
||||
// class VCLXAccessibleMenuBar
|
||||
|
||||
|
||||
class VCLXAccessibleMenuBar : public OAccessibleMenuComponent
|
||||
class VCLXAccessibleMenuBar final : public OAccessibleMenuComponent
|
||||
{
|
||||
protected:
|
||||
VclPtr<vcl::Window> m_pWindow;
|
||||
|
||||
virtual bool IsFocused() override;
|
||||
|
@@ -35,7 +35,7 @@ class TabControl;
|
||||
typedef ::cppu::ImplHelper1 <
|
||||
css::accessibility::XAccessibleSelection > VCLXAccessibleTabControl_BASE;
|
||||
|
||||
class VCLXAccessibleTabControl : public VCLXAccessibleComponent,
|
||||
class VCLXAccessibleTabControl final : public VCLXAccessibleComponent,
|
||||
public VCLXAccessibleTabControl_BASE
|
||||
{
|
||||
private:
|
||||
@@ -44,7 +44,6 @@ private:
|
||||
AccessibleChildren m_aAccessibleChildren;
|
||||
VclPtr<TabControl> m_pTabControl;
|
||||
|
||||
protected:
|
||||
void UpdateFocused();
|
||||
void UpdateSelected( sal_Int32 i, bool bSelected );
|
||||
void UpdatePageText( sal_Int32 i );
|
||||
|
@@ -43,7 +43,7 @@ typedef ::cppu::ImplHelper2<
|
||||
css::accessibility::XAccessible,
|
||||
css::lang::XServiceInfo > VCLXAccessibleTabPage_BASE;
|
||||
|
||||
class VCLXAccessibleTabPage : public AccessibleTextHelper_BASE,
|
||||
class VCLXAccessibleTabPage final : public AccessibleTextHelper_BASE,
|
||||
public VCLXAccessibleTabPage_BASE
|
||||
{
|
||||
friend class VCLXAccessibleTabControl;
|
||||
@@ -55,7 +55,6 @@ private:
|
||||
bool m_bSelected;
|
||||
OUString m_sPageText;
|
||||
|
||||
protected:
|
||||
bool IsFocused();
|
||||
bool IsSelected();
|
||||
|
||||
|
@@ -35,7 +35,7 @@ typedef std::map< sal_Int32, css::uno::Reference< css::accessibility::XAccessibl
|
||||
class VCLXAccessibleToolBoxItem;
|
||||
class ToolBox;
|
||||
|
||||
class VCLXAccessibleToolBox : public VCLXAccessibleComponent, public VCLXAccessibleToolBox_BASE
|
||||
class VCLXAccessibleToolBox final : public VCLXAccessibleComponent, public VCLXAccessibleToolBox_BASE
|
||||
{
|
||||
private:
|
||||
ToolBoxItemsMap m_aAccessibleChildren;
|
||||
@@ -54,7 +54,6 @@ private:
|
||||
void HandleSubToolBarEvent( const VclWindowEvent& rVclWindowEvent );
|
||||
void ReleaseSubToolBox( ToolBox* _pSubToolBox );
|
||||
|
||||
protected:
|
||||
virtual ~VCLXAccessibleToolBox() override;
|
||||
|
||||
virtual void FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet ) override;
|
||||
|
@@ -39,7 +39,7 @@ namespace avmedia { namespace gstreamer {
|
||||
typedef ::cppu::WeakComponentImplHelper< css::media::XPlayer,
|
||||
css::lang::XServiceInfo > GstPlayer_BASE;
|
||||
|
||||
class Player : public ::cppu::BaseMutex,
|
||||
class Player final : public ::cppu::BaseMutex,
|
||||
public GstPlayer_BASE
|
||||
{
|
||||
public:
|
||||
@@ -77,7 +77,7 @@ public:
|
||||
// ::cppu::OComponentHelper
|
||||
virtual void SAL_CALL disposing() final override;
|
||||
|
||||
protected:
|
||||
private:
|
||||
OUString maURL;
|
||||
|
||||
// Add elements and pipeline here
|
||||
|
Reference in New Issue
Block a user