From f56b3ce8469793eeaba4952ad70bdba62fdaf418 Mon Sep 17 00:00:00 2001 From: fpc_diesel Date: Fri, 8 May 2020 11:26:09 +0800 Subject: [PATCH] feat(accessible):rename multitasking and show-desktop plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重命名任务栏左下角的回到桌面和多任务视图插件的标记命名, 对Label添加Value属性,看能不能被识别到 --- frame/controller/dockitemmanager.cpp | 1 - frame/item/pluginsitem.cpp | 2 +- frame/panel/mainpanelcontrol.cpp | 1 + frame/util/abstractpluginscontroller.cpp | 1 + frame/window/accessible.h | 55 ++++++++++---------- frame/window/accessibledefine.h | 64 +++++++++++------------- 6 files changed, 58 insertions(+), 66 deletions(-) diff --git a/frame/controller/dockitemmanager.cpp b/frame/controller/dockitemmanager.cpp index 955c61108..e32497049 100644 --- a/frame/controller/dockitemmanager.cpp +++ b/frame/controller/dockitemmanager.cpp @@ -281,7 +281,6 @@ void DockItemManager::pluginItemInserted(PluginsItem *item) if(pluginType == DockItem::FixedPlugin) { insertIndex ++; - item->setAccessibleName("plugins"); } emit itemInserted(insertIndex - firstPluginPosition, item); diff --git a/frame/item/pluginsitem.cpp b/frame/item/pluginsitem.cpp index fff1e3433..52499f660 100644 --- a/frame/item/pluginsitem.cpp +++ b/frame/item/pluginsitem.cpp @@ -57,7 +57,7 @@ PluginsItem::PluginsItem(PluginsItemInterface *const pluginInter, const QString hLayout->setMargin(0); setLayout(hLayout); - setAccessibleName(pluginInter->pluginName() + "-" + m_itemKey); + setAccessibleName(pluginInter->pluginName()); setAttribute(Qt::WA_TranslucentBackground); const QByteArray &schema{ diff --git a/frame/panel/mainpanelcontrol.cpp b/frame/panel/mainpanelcontrol.cpp index 1035d48a4..18990eb64 100755 --- a/frame/panel/mainpanelcontrol.cpp +++ b/frame/panel/mainpanelcontrol.cpp @@ -82,6 +82,7 @@ MainPanelControl::MainPanelControl(QWidget *parent) setAcceptDrops(true); setMouseTracking(true); m_desktopWidget->setMouseTracking(true); + m_desktopWidget->setObjectName("showdesktoparea"); m_appAreaWidget->installEventFilter(this); m_appAreaSonWidget->installEventFilter(this); diff --git a/frame/util/abstractpluginscontroller.cpp b/frame/util/abstractpluginscontroller.cpp index 19b97309e..6b76addfa 100644 --- a/frame/util/abstractpluginscontroller.cpp +++ b/frame/util/abstractpluginscontroller.cpp @@ -230,6 +230,7 @@ void AbstractPluginsController::initPlugin(PluginsItemInterface *interface) void AbstractPluginsController::refreshPluginSettings() { const QString &pluginSettings = m_dockDaemonInter->GetPluginSettings().value(); + qDebug() << pluginSettings; if (pluginSettings.isEmpty()) { qDebug() << "Error! get plugin settings from dbus failed!"; return; diff --git a/frame/window/accessible.h b/frame/window/accessible.h index 5899f28d8..ff076eaf5 100644 --- a/frame/window/accessible.h +++ b/frame/window/accessible.h @@ -50,44 +50,44 @@ DWIDGET_USE_NAMESPACE // 添加accessible -SET_FORM_ACCESSIBLE(MainWindow, "mainwindow") -SET_BUTTON_ACCESSIBLE_SHOWMENU(MainPanelControl, "mainpanelcontrol") +SET_WIDGET_ACCESSIBLE(MainWindow, QAccessible::Form, "mainwindow") +SET_BUTTON_ACCESSIBLE(MainPanelControl, "mainpanelcontrol") SET_LABEL_ACCESSIBLE(TipsWidget, "tips") -SET_FORM_ACCESSIBLE(DockPopupWindow, "popupwindow") +SET_WIDGET_ACCESSIBLE(DockPopupWindow, QAccessible::Form, "popupwindow") SET_BUTTON_ACCESSIBLE(LauncherItem, "launcheritem") -SET_BUTTON_ACCESSIBLE_PRESS_SHOWMENU(AppItem, "appitem") +SET_BUTTON_ACCESSIBLE(AppItem, "appitem") SET_BUTTON_ACCESSIBLE(PreviewContainer, "previewcontainer") -SET_BUTTON_ACCESSIBLE_PRESS_SHOWMENU(PluginsItem, m_w->pluginName()) +SET_BUTTON_ACCESSIBLE(PluginsItem, m_w->pluginName()) SET_BUTTON_ACCESSIBLE(TrayPluginItem, m_w->pluginName()) SET_BUTTON_ACCESSIBLE(PlaceholderItem, "placeholderitem") SET_BUTTON_ACCESSIBLE(AppDragWidget, "appdragwidget") SET_BUTTON_ACCESSIBLE(AppSnapshot, "appsnapshot") SET_BUTTON_ACCESSIBLE(FloatingPreview, "floatingpreview") -SET_BUTTON_ACCESSIBLE_PRESS_SHOWMENU(XEmbedTrayWidget, m_w->itemKeyForConfig()) -SET_BUTTON_ACCESSIBLE_PRESS_SHOWMENU(IndicatorTrayWidget, m_w->itemKeyForConfig()) -SET_BUTTON_ACCESSIBLE_PRESS_SHOWMENU(SNITrayWidget, m_w->itemKeyForConfig()) -SET_BUTTON_ACCESSIBLE_PRESS_SHOWMENU(SystemTrayItem, m_w->itemKeyForConfig()) -SET_FORM_ACCESSIBLE(FashionTrayItem, "fashiontrayitem") -SET_FORM_ACCESSIBLE(FashionTrayWidgetWrapper, "fashiontraywrapper") +SET_BUTTON_ACCESSIBLE(XEmbedTrayWidget, m_w->itemKeyForConfig()) +SET_BUTTON_ACCESSIBLE(IndicatorTrayWidget, m_w->itemKeyForConfig()) +SET_BUTTON_ACCESSIBLE(SNITrayWidget, m_w->itemKeyForConfig()) +SET_BUTTON_ACCESSIBLE(SystemTrayItem, m_w->itemKeyForConfig()) +SET_WIDGET_ACCESSIBLE(FashionTrayItem, QAccessible::Form, "fashiontrayitem") +SET_WIDGET_ACCESSIBLE(FashionTrayWidgetWrapper, QAccessible::Form, "fashiontraywrapper") SET_BUTTON_ACCESSIBLE(FashionTrayControlWidget, "fashiontraycontrolwidget") -SET_FORM_ACCESSIBLE(AttentionContainer, "attentioncontainer") -SET_FORM_ACCESSIBLE(HoldContainer, "holdcontainer") -SET_FORM_ACCESSIBLE(NormalContainer, "normalcontainer") -SET_FORM_ACCESSIBLE(SpliterAnimated, "spliteranimated") +SET_WIDGET_ACCESSIBLE(AttentionContainer, QAccessible::Form, "attentioncontainer") +SET_WIDGET_ACCESSIBLE(HoldContainer, QAccessible::Form, "holdcontainer") +SET_WIDGET_ACCESSIBLE(NormalContainer, QAccessible::Form, "normalcontainer") +SET_WIDGET_ACCESSIBLE(SpliterAnimated, QAccessible::Form, "spliteranimated") SET_BUTTON_ACCESSIBLE(SoundItem, "plugin-sounditem") -SET_FORM_ACCESSIBLE(SoundApplet, "soundapplet") -SET_FORM_ACCESSIBLE(SinkInputWidget, "sinkinputwidget") -SET_SLIDER_ACCESSIBLE(VolumeSlider, "volumeslider") -SET_SEPARATOR_ACCESSIBLE(HorizontalSeparator, "horizontalseparator") -SET_FORM_ACCESSIBLE(DatetimeWidget, "plugin-datetime") -SET_FORM_ACCESSIBLE(OnboardItem, "plugin-onboard") -SET_FORM_ACCESSIBLE(TrashWidget, "plugin-trash") +SET_WIDGET_ACCESSIBLE(SoundApplet, QAccessible::Form, "soundapplet") +SET_WIDGET_ACCESSIBLE(SinkInputWidget, QAccessible::Form, "sinkinputwidget") +SET_WIDGET_ACCESSIBLE(VolumeSlider, QAccessible::Slider, "volumeslider") +SET_WIDGET_ACCESSIBLE(HorizontalSeparator, QAccessible::Separator, "horizontalseparator") +SET_WIDGET_ACCESSIBLE(DatetimeWidget, QAccessible::Form, "plugin-datetime") +SET_WIDGET_ACCESSIBLE(OnboardItem, QAccessible::Form, "plugin-onboard") +SET_WIDGET_ACCESSIBLE(TrashWidget, QAccessible::Form, "plugin-trash") SET_BUTTON_ACCESSIBLE(PopupControlWidget, "popupcontrolwidget") -SET_FORM_ACCESSIBLE(ShutdownWidget, "plugin-shutdown") -SET_FORM_ACCESSIBLE(MultitaskingWidget, "plugin-multitasking") -SET_FORM_ACCESSIBLE(ShowDesktopWidget, "plugin-showdesktop") -SET_FORM_ACCESSIBLE(OverlayWarningWidget, "plugin-overlaywarningwidget") -SET_FORM_ACCESSIBLE(QWidget, m_w->objectName().isEmpty() ? "widget" : m_w->objectName()) +SET_WIDGET_ACCESSIBLE(ShutdownWidget, QAccessible::Form, "plugin-shutdown") +SET_WIDGET_ACCESSIBLE(MultitaskingWidget, QAccessible::Form, "plugin-multitasking") +SET_WIDGET_ACCESSIBLE(ShowDesktopWidget, QAccessible::Form, "plugin-showdesktop") +SET_WIDGET_ACCESSIBLE(OverlayWarningWidget, QAccessible::Form, "plugin-overlaywarningwidget") +SET_WIDGET_ACCESSIBLE(QWidget, QAccessible::Form, m_w->objectName().isEmpty() ? "widget" : m_w->objectName()) SET_LABEL_ACCESSIBLE(QLabel, m_w->text().isEmpty() ? m_w->objectName().isEmpty() ? "text" : m_w->objectName() : m_w->text()) SET_BUTTON_ACCESSIBLE(DImageButton, m_w->objectName().isEmpty() ? "imagebutton" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(DSwitchButton, m_w->text().isEmpty() ? "switchbutton" : m_w->text()) @@ -133,7 +133,6 @@ QAccessibleInterface *accessibleFactory(const QString &classname, QObject *objec USE_ACCESSIBLE(classname, MultitaskingWidget); USE_ACCESSIBLE(classname, ShowDesktopWidget); USE_ACCESSIBLE(classname, OverlayWarningWidget); - USE_ACCESSIBLE_BY_OBJECTNAME(classname, QWidget, "Btn_showdesktoparea");//TODO 点击坐标有偏差 USE_ACCESSIBLE(classname, QWidget); USE_ACCESSIBLE_BY_OBJECTNAME(classname, QLabel, "spliter_fix"); USE_ACCESSIBLE_BY_OBJECTNAME(classname, QLabel, "spliter_app"); diff --git a/frame/window/accessibledefine.h b/frame/window/accessibledefine.h index 7853494e4..322516b2c 100644 --- a/frame/window/accessibledefine.h +++ b/frame/window/accessibledefine.h @@ -22,6 +22,9 @@ #define ACCESSIBLEDEFINE_H // 为了方便使用,把相关定义独立出来,如有需要,直接包含这个头文件,然后使用SET_*的宏去设置,USE_*宏开启即可 +// 注意:对项目中出现的所有的QWidget的派生类都要再启用一次accessiblity,包括qt的原生控件[qt未限制其标记名称为空的情况] +// 注意:使用USE_ACCESSIBLE_BY_OBJECTNAME开启accessiblity的时候,一定要再最这个类用一下USE_ACCESSIBLE,否则标记可能会遗漏 + /* 宏参数说明 * classname:类名,例如DLineEdit * accessiblename:accessible唯一标识,需保证唯一性[getAccessibleName函数处理],优先使用QObject::setAccessibleName值 @@ -36,6 +39,7 @@ * FUNC_PRESS_SHOWMENU:上两者的综合 * FUNC_RECT:实现rect接口 * FUNC_TEXT:实现text接口 +* FUNC_TEXT_BY_LABEL:实现text接口,使用这个宏,需要被添加的类有text接口,从而得到其Value * USE_ACCESSIBLE:对传入的类型设置其accessible功能 * USE_ACCESSIBLE_BY_OBJECTNAME:同上,[指定objectname]---适用同一个类,但objectname不同的情况 * @@ -179,7 +183,8 @@ inline QString getAccessibleName(QWidget *w, QAccessible::Role r, const QString #define FUNC_RECT(classobj) QRect rect() const override{\ if (!classobj->isVisible())\ return QRect();\ - return classobj->geometry();\ + QPoint pos = classobj->mapToGlobal(QPoint(0, 0));\ + return QRect(pos.x(), pos.y(), classobj->width(), classobj->height());\ }\ #define FUNC_TEXT(classname,accessiblename) QString Accessible##classname::text(QAccessible::Text t) const{\ @@ -193,42 +198,38 @@ inline QString getAccessibleName(QWidget *w, QAccessible::Role r, const QString }\ }\ +#define FUNC_TEXT_BY_LABEL(classname,accessiblename) QString Accessible##classname::text(QAccessible::Text t) const{\ + switch (t) {\ + case QAccessible::Name:\ + return getAccessibleName(m_w, this->role(), accessiblename);\ + case QAccessible::Description:\ + return m_description;\ + case QAccessible::Value:\ + return m_w->text();\ + default:\ + return QString();\ + }\ + }\ + #define USE_ACCESSIBLE(classnamestring,classname) if (classnamestring == QLatin1String(#classname) && object && object->isWidgetType())\ {\ interface = new Accessible##classname(static_cast(object));\ }\ -// [指定objectname]---适用同一个类,但objectname不同的情况 #define USE_ACCESSIBLE_BY_OBJECTNAME(classnamestring,classname,objectname) if (classnamestring == QLatin1String(#classname) && object && (object->objectName() == objectname) && object->isWidgetType())\ {\ interface = new Accessible##classname(static_cast(object));\ }\ -#define SET_BUTTON_ACCESSIBLE_PRESS_DESCRIPTION(classname,accessiblename,accessdescription) class Accessible##classname : public QAccessibleWidget\ +#define SET_ACCESSIBLE_WITH_PRESS_SHOWMENU_DESCRIPTION(classname,aaccessibletype,accessdescription) class Accessible##classname : public QAccessibleWidget\ {\ public:\ - FUNC_CREATE(classname,QAccessible::Button,accessdescription)\ - QString text(QAccessible::Text t) const override;\ - FUNC_PRESS(m_w)\ - };\ - -#define SET_BUTTON_ACCESSIBLE_SHOWMENU_DESCRIPTION(classname,accessiblename,accessdescription) class Accessible##classname : public QAccessibleWidget\ - {\ - public:\ - FUNC_CREATE(classname,QAccessible::Button,accessdescription)\ - QString text(QAccessible::Text t) const override;\ - FUNC_SHOWMENU(m_w)\ - };\ - -#define SET_BUTTON_ACCESSIBLE_PRESS_SHOEMENU_DESCRIPTION(classname,accessiblename,accessdescription) class Accessible##classname : public QAccessibleWidget\ - {\ - public:\ - FUNC_CREATE(classname,QAccessible::Button,accessdescription)\ + FUNC_CREATE(classname,aaccessibletype,accessdescription)\ QString text(QAccessible::Text t) const override;\ FUNC_PRESS_SHOWMENU(m_w)\ };\ -#define SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname,aaccessibletype,accessiblename,accessdescription) class Accessible##classname : public QAccessibleWidget\ +#define SET_ACCESSIBLE_WITH_DESCRIPTION(classname,aaccessibletype,accessdescription) class Accessible##classname : public QAccessibleWidget\ {\ public:\ FUNC_CREATE(classname,aaccessibletype,accessdescription)\ @@ -236,26 +237,17 @@ inline QString getAccessibleName(QWidget *w, QAccessible::Role r, const QString FUNC_RECT(m_w)\ };\ -// /*******************************************简化使用*******************************************/ -#define SET_BUTTON_ACCESSIBLE_PRESS_SHOWMENU(classname,accessiblename) SET_BUTTON_ACCESSIBLE_PRESS_SHOEMENU_DESCRIPTION(classname,accessiblename,"")\ +/*******************************************简化使用*******************************************/ +#define SET_BUTTON_ACCESSIBLE(classname,accessiblename) SET_ACCESSIBLE_WITH_PRESS_SHOWMENU_DESCRIPTION(classname,QAccessible::Button,"")\ FUNC_TEXT(classname,accessiblename) -#define SET_BUTTON_ACCESSIBLE_SHOWMENU(classname,accessiblename) SET_BUTTON_ACCESSIBLE_SHOWMENU_DESCRIPTION(classname,accessiblename,"")\ +#define SET_MENU_ACCESSIBLE(classname,accessiblename) SET_ACCESSIBLE_WITH_PRESS_SHOWMENU_DESCRIPTION(classname,QAccessible::PopupMenu,"")\ FUNC_TEXT(classname,accessiblename) -#define SET_BUTTON_ACCESSIBLE(classname,accessiblename) SET_BUTTON_ACCESSIBLE_PRESS_DESCRIPTION(classname,accessiblename,"")\ - FUNC_TEXT(classname,accessiblename) +#define SET_LABEL_ACCESSIBLE(classname,accessiblename) SET_ACCESSIBLE_WITH_DESCRIPTION(classname,QAccessible::StaticText,"")\ + FUNC_TEXT_BY_LABEL(classname,accessiblename) -#define SET_LABEL_ACCESSIBLE(classname,accessiblename) SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname,QAccessible::StaticText,accessiblename,"")\ - FUNC_TEXT(classname,accessiblename) - -#define SET_FORM_ACCESSIBLE(classname,accessiblename) SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname,QAccessible::Form,accessiblename,"");\ - FUNC_TEXT(classname,accessiblename) - -#define SET_SLIDER_ACCESSIBLE(classname,accessiblename) SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname,QAccessible::Slider,accessiblename,"")\ - FUNC_TEXT(classname,accessiblename) - -#define SET_SEPARATOR_ACCESSIBLE(classname,accessiblename) SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname,QAccessible::Separator,accessiblename,"")\ +#define SET_WIDGET_ACCESSIBLE(classname,aaccessibletype,accessiblename) SET_ACCESSIBLE_WITH_DESCRIPTION(classname,aaccessibletype,"");\ FUNC_TEXT(classname,accessiblename) /************************************************************************************************/