diff --git a/gmenu-dbusmenu-proxy/icons.cpp b/gmenu-dbusmenu-proxy/icons.cpp index 91b45492d..016ace0ab 100644 --- a/gmenu-dbusmenu-proxy/icons.cpp +++ b/gmenu-dbusmenu-proxy/icons.cpp @@ -20,6 +20,7 @@ #include "icons.h" #include +#include QString Icons::actionIcon(const QString &actionName) { @@ -32,6 +33,7 @@ QString Icons::actionIcon(const QString &actionName) } static const QHash s_icons { + {QStringLiteral("new"), QStringLiteral("document-new")}, // appmenu-gtk-module "New" {QStringLiteral("image-new"), QStringLiteral("document-new")}, // Gimp "New" item {QStringLiteral("adddirect"), QStringLiteral("document-new")}, // LibreOffice "New" item {QStringLiteral("filenew"), QStringLiteral("document-new")}, // Pluma "New" item @@ -47,17 +49,21 @@ QString Icons::actionIcon(const QString &actionName) {QStringLiteral("saveas"), QStringLiteral("document-save-as")}, {QStringLiteral("save-all"), QStringLiteral("document-save-all")}, {QStringLiteral("saveall"), QStringLiteral("document-save-all")}, + {QStringLiteral("import"), QStringLiteral("document-import")}, {QStringLiteral("export"), QStringLiteral("document-export")}, {QStringLiteral("exportto"), QStringLiteral("document-export")}, // LibreOffice {QStringLiteral("exporttopdf"), QStringLiteral("viewpdf")}, // LibreOffice, the icon it uses but the name is quite random {QStringLiteral("webhtml"), QStringLiteral("text-html")}, // LibreOffice {QStringLiteral("printpreview"), QStringLiteral("document-print-preview")}, + {QStringLiteral("print-preview"), QStringLiteral("document-print-preview")}, {QStringLiteral("print"), QStringLiteral("document-print")}, {QStringLiteral("print-gtk"), QStringLiteral("document-print")}, // Gimp {QStringLiteral("mail-image"), QStringLiteral("mail-message-new")}, // Gimp {QStringLiteral("sendmail"), QStringLiteral("mail-message-new")}, // LibreOffice {QStringLiteral("sendviabluetooth"), QStringLiteral("preferences-system-bluetooth")}, // LibreOffice - {QStringLiteral("close"), QStringLiteral("document-close")}, + {QStringLiteral("sendviabluetooth"), QStringLiteral("preferences-system-bluetooth")}, // LibreOffice + {QStringLiteral("document-properties"), QStringLiteral("document-properties")}, + {QStringLiteral("close"), QStringLiteral("document-close")}, // appmenu-gtk-module "Close" {QStringLiteral("closedoc"), QStringLiteral("document-close")}, {QStringLiteral("close-all"), QStringLiteral("document-close")}, {QStringLiteral("closeall"), QStringLiteral("document-close")}, @@ -83,10 +89,14 @@ QString Icons::actionIcon(const QString &actionName) {QStringLiteral("replace"), QStringLiteral("edit-find-replace")}, {QStringLiteral("searchreplace"), QStringLiteral("edit-find-replace")}, // LibreOffice {QStringLiteral("searchdialog"), QStringLiteral("edit-find-replace")}, // LibreOffice + {QStringLiteral("find-replace"), QStringLiteral("edit-find-replace")}, // Inkscape {QStringLiteral("select-all"), QStringLiteral("edit-select-all")}, {QStringLiteral("selectall"), QStringLiteral("edit-select-all")}, {QStringLiteral("select-none"), QStringLiteral("edit-select-invert")}, {QStringLiteral("select-invert"), QStringLiteral("edit-select-invert")}, + {QStringLiteral("invert-selection"), QStringLiteral("edit-select-invert")}, // Inkscape + {QStringLiteral("check-spelling"), QStringLiteral("tools-check-spelling")}, + {QStringLiteral("set-language"), QStringLiteral("set-language")}, {QStringLiteral("increasesize"), QStringLiteral("zoom-in")}, {QStringLiteral("decreasesize"), QStringLiteral("zoom-out")}, @@ -163,6 +173,7 @@ QString Icons::actionIcon(const QString &actionName) {QStringLiteral("help"), QStringLiteral("help-contents")}, {QStringLiteral("helpindex"), QStringLiteral("help-contents")}, + {QStringLiteral("contents"), QStringLiteral("help-contents")}, {QStringLiteral("helpcontents"), QStringLiteral("help-contents")}, {QStringLiteral("context-help"), QStringLiteral("help-whatsthis")}, {QStringLiteral("extendedhelp"), QStringLiteral("help-whatsthis")}, // LibreOffice @@ -196,10 +207,35 @@ QString Icons::actionIcon(const QString &actionName) if (icon.isEmpty()) { const int dotIndex = action.indexOf(QLatin1Char('.')); // app., win., or unity. prefix + + QString prefix; if (dotIndex > -1) { + prefix = action.left(dotIndex); + action = action.mid(dotIndex + 1); } + // appmenu-gtk-module + if (prefix == QLatin1String("unity")) { + // Remove superfluous hyphens added by appmenu-gtk-module + // First remove multiple subsequent ones + static QRegularExpression subsequentHyphenRegExp(QStringLiteral("-{2,}")); + action.replace(subsequentHyphenRegExp, QStringLiteral("-")); + + // now we can be sure we only have a single hyphen at the start or end, remove it if needed + if (action.startsWith(QLatin1Char('-'))) { + action = action.mid(1); + } + if (action.endsWith(QLatin1Char('-'))) { + action.chop(1); + } + + // It also turns accelerators (&) into hyphens, so remove any hyphen that comes before + // a lower-case letter ("mid sentence"), e.g. "P-references" + static QRegularExpression strayHyphenRegExp(QStringLiteral("-(?=[a-z]+)")); + action.remove(strayHyphenRegExp); + } + icon = s_icons.value(action); }