]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Avoid crash on start when help actions are restricted through the Kiosk system
authorAlexander Volkov <avolkov@astralinux.ru>
Tue, 10 Aug 2021 09:00:21 +0000 (12:00 +0300)
committerAlexander Volkov <avolkov@astralinux.ru>
Tue, 10 Aug 2021 09:04:25 +0000 (12:04 +0300)
KHelpMenu may not create some actions, so check for nullptr before
setting "What's this?" text.

src/dolphinmainwindow.cpp

index 0b1ebe76560e5a32975b31e22df4d667d995bba2..62e347032be8604f65b8d29c0af7491230507834 100644 (file)
@@ -1687,8 +1687,13 @@ void DolphinMainWindow::setupActions()
     m_helpMenu = new KHelpMenu(nullptr);
     m_helpMenu->menu()->installEventFilter(this);
     // remove duplicate shortcuts
-    m_helpMenu->action(KHelpMenu::menuHelpContents)->setShortcut(QKeySequence());
-    m_helpMenu->action(KHelpMenu::menuWhatsThis)->setShortcut(QKeySequence());
+    auto removeHelpActionShortcut = [this](KHelpMenu::MenuId menuId) {
+        if (auto *action = m_helpMenu->action(menuId)) {
+            action->setShortcut(QKeySequence());
+        }
+    };
+    removeHelpActionShortcut(KHelpMenu::menuHelpContents);
+    removeHelpActionShortcut(KHelpMenu::menuWhatsThis);
 
     // not in menu actions
     QList<QKeySequence> nextTabKeys = KStandardShortcut::tabNext();
@@ -2284,6 +2289,18 @@ void DolphinMainWindow::setupWhatsThis()
     // StandardAction separately because both are used in different locations.
     // m_helpMenu is only used for createControlButton() button.
 
+    auto setStandardActionWhatsThis = [this](KStandardAction::StandardAction actionId,
+                                             const QString &whatsThis) {
+        if (auto *action = actionCollection()->action(KStandardAction::name(actionId))) {
+            action->setWhatsThis(whatsThis);
+        }
+    };
+    auto setHelpActionWhatsThis = [this](KHelpMenu::MenuId menuId, const QString &whatsThis) {
+        if (auto *action = m_helpMenu->action(menuId)) {
+            action->setWhatsThis(whatsThis);
+        }
+    };
+
     // Links do not work within the Menubar so texts without links are provided there.
 
     // i18n: If the external link isn't available in your language you should
@@ -2294,13 +2311,12 @@ void DolphinMainWindow::setupWhatsThis()
     const QString whatsThisHelpContents = xi18nc("@info:whatsthis handbook",
         "<para>This opens the Handbook for this application. It provides "
         "explanations for every part of <emphasis>Dolphin</emphasis>.</para>");
-    actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents))
-        ->setWhatsThis(whatsThisHelpContents
+    setStandardActionWhatsThis(KStandardAction::HelpContents, whatsThisHelpContents
         + xi18nc("@info:whatsthis second half of handbook hb text without link",
         "<para>If you want more elaborate introductions to the "
         "different features of <emphasis>Dolphin</emphasis> "
         "go to the KDE UserBase Wiki.</para>"));
-    m_helpMenu->action(KHelpMenu::menuHelpContents)->setWhatsThis(whatsThisHelpContents
+    setHelpActionWhatsThis(KHelpMenu::menuHelpContents, whatsThisHelpContents
         + xi18nc("@info:whatsthis second half of handbook text with link",
         "<para>If you want more elaborate introductions to the "
         "different features of <emphasis>Dolphin</emphasis> "
@@ -2312,8 +2328,7 @@ void DolphinMainWindow::setupWhatsThis()
         "using right now! Click it, then click any component of this "
         "application to ask \"What's this?\" about it. The mouse cursor "
         "will change appearance if no help is available for a spot.</para>");
-    actionCollection()->action(KStandardAction::name(KStandardAction::WhatsThis))
-       ->setWhatsThis(whatsThisWhatsThis
+    setStandardActionWhatsThis(KStandardAction::WhatsThis, whatsThisWhatsThis
         + xi18nc("@info:whatsthis second half of whatsthis button text without link",
         "<para>There are two other ways to get help for this application: The "
         "<interface>Dolphin Handbook</interface> in the <interface>Help"
@@ -2321,7 +2336,7 @@ void DolphinMainWindow::setupWhatsThis()
         "article about <emphasis>File Management</emphasis> online."
         "</para><para>The \"What's this?\" help is "
         "missing in most other windows so don't get too used to this.</para>"));
-    m_helpMenu->action(KHelpMenu::menuWhatsThis)->setWhatsThis(whatsThisWhatsThis
+    setHelpActionWhatsThis(KHelpMenu::menuWhatsThis, whatsThisWhatsThis
         + xi18nc("@info:whatsthis second half of whatsthis button text with link",
         "<para>There are two other ways to get help: "
         "The <link url='help:/dolphin/index.html'>Dolphin Handbook</link> and "
@@ -2332,9 +2347,8 @@ void DolphinMainWindow::setupWhatsThis()
     const QString whatsThisReportBug = xi18nc("@info:whatsthis","<para>This opens a "
         "window that will guide you through reporting errors or flaws "
         "in this application or in other KDE software.</para>");
-    actionCollection()->action(KStandardAction::name(KStandardAction::ReportBug))
-       ->setWhatsThis(whatsThisReportBug);
-    m_helpMenu->action(KHelpMenu::menuReportBug)->setWhatsThis(whatsThisReportBug
+    setStandardActionWhatsThis(KStandardAction::ReportBug, whatsThisReportBug);
+    setHelpActionWhatsThis(KHelpMenu::menuReportBug, whatsThisReportBug
         + xi18nc("@info:whatsthis second half of reportbug text with link",
         "<para>High-quality bug reports are much appreciated. To learn "
         "how to make your bug report as effective as possible "
@@ -2351,33 +2365,30 @@ void DolphinMainWindow::setupWhatsThis()
         "require money like servers, contributor meetings, etc.</para>"
         "<para><emphasis>KDE e.V.</emphasis> is the non-profit "
         "organization behind the KDE community.</para>");
-    actionCollection()->action(KStandardAction::name(KStandardAction::Donate))
-       ->setWhatsThis(whatsThisDonate);
-    m_helpMenu->action(KHelpMenu::menuDonate)->setWhatsThis(whatsThisDonate);
+    setStandardActionWhatsThis(KStandardAction::Donate, whatsThisDonate);
+    setHelpActionWhatsThis(KHelpMenu::menuDonate, whatsThisDonate);
 
     const QString whatsThisSwitchLanguage = xi18nc("@info:whatsthis",
         "With this you can change the language this application uses."
         "<nl/>You can even set secondary languages which will be used "
         "if texts are not available in your preferred language.");
-    actionCollection()->action(KStandardAction::name(KStandardAction::SwitchApplicationLanguage))
-       ->setWhatsThis(whatsThisSwitchLanguage);
-    m_helpMenu->action(KHelpMenu::menuSwitchLanguage)->setWhatsThis(whatsThisSwitchLanguage);
+    setStandardActionWhatsThis(KStandardAction::SwitchApplicationLanguage,
+                               whatsThisSwitchLanguage);
+    setHelpActionWhatsThis(KHelpMenu::menuSwitchLanguage, whatsThisSwitchLanguage);
 
     const QString whatsThisAboutApp = xi18nc("@info:whatsthis","This opens a "
         "window that informs you about the version, license, "
         "used libraries and maintainers of this application.");
-    actionCollection()->action(KStandardAction::name(KStandardAction::AboutApp))
-       ->setWhatsThis(whatsThisAboutApp);
-    m_helpMenu->action(KHelpMenu::menuAboutApp)->setWhatsThis(whatsThisAboutApp);
+    setStandardActionWhatsThis(KStandardAction::AboutApp, whatsThisAboutApp);
+    setHelpActionWhatsThis(KHelpMenu::menuAboutApp, whatsThisAboutApp);
 
     const QString whatsThisAboutKDE = xi18nc("@info:whatsthis","This opens a "
         "window with information about <emphasis>KDE</emphasis>. "
         "The KDE community are the people behind this free software."
         "<nl/>If you like using this application but don't know "
         "about KDE or want to see a cute dragon have a look!");
-    actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE))
-       ->setWhatsThis(whatsThisAboutKDE);
-    m_helpMenu->action(KHelpMenu::menuAboutKDE)->setWhatsThis(whatsThisAboutKDE);
+    setStandardActionWhatsThis(KStandardAction::AboutKDE, whatsThisAboutKDE);
+    setHelpActionWhatsThis(KHelpMenu::menuAboutKDE, whatsThisAboutKDE);
 }
 
 bool DolphinMainWindow::addHamburgerMenuToToolbar()