OSDN Git Service

kdeplasma-addons: unload the data engines from WeatherPopupApplet destructor
authorIvailo Monev <xakepa10@gmail.com>
Mon, 14 Aug 2023 12:39:48 +0000 (15:39 +0300)
committerIvailo Monev <xakepa10@gmail.com>
Mon, 14 Aug 2023 12:41:37 +0000 (15:41 +0300)
because the data engines are not parented to anything the destruction
happens too late otherwise and triggers fatal message in
Plasma::DataEngineManager that it is accessed after destruction

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
kdeplasma-addons/containments/groupingdesktop/desktop/groupingdesktop.cpp
kdeplasma-addons/containments/groupingdesktop/griddesktop/griddesktop.cpp
kdeplasma-addons/libs/plasmaweather/weatherpopupapplet.cpp

index c8e6047..ad02375 100644 (file)
@@ -23,7 +23,7 @@
 K_EXPORT_PLASMA_APPLET(groupingdesktop, GroupingDesktop)
 
 GroupingDesktop::GroupingDesktop(QObject* parent, const QVariantList& args)
-               : GroupingContainment(parent, args)
+    : GroupingContainment(parent, args)
 {
     setHasConfigurationInterface(true);
     KGlobal::locale()->insertCatalog("libplasma_groupingcontainment");
index 6d71784..e9292c9 100644 (file)
@@ -26,7 +26,7 @@
 K_EXPORT_PLASMA_APPLET(griddesktop, GridDesktop)
 
 GridDesktop::GridDesktop(QObject* parent, const QVariantList& args)
-               : GroupingContainment(parent, args)
+    : GroupingContainment(parent, args)
 {
     setHasConfigurationInterface(true);
     KGlobal::locale()->insertCatalog("libplasma_groupingcontainment");
index 8c01cd2..950933b 100644 (file)
 #include "weatherpopupapplet.h"
 #include "weatheri18ncatalog.h"
 
-#include <QTimer>
+#include "weatherconfig.h"
+#include "weatherlocation.h"
 
+#include <QTimer>
 #include <KConfigGroup>
 #include <KConfigDialog>
-
-#include <kunitconversion.h>
-
-#include "weatherconfig.h"
-#include "weatherlocation.h"
+#include <KUnitConversion>
+#include <Plasma/DataEngineManager>
 
 class WeatherPopupApplet::Private
 {
@@ -125,10 +124,10 @@ public:
 
     QString conditionFromPressure()
     {
-        QString result;
         if (KPressure(0.0, pressureUnit).unitEnum() == KPressure::Invalid) {
             return QLatin1String( "weather-none-available" );
         }
+
         qreal temp = KTemperature(temperature, temperatureUnit).convertTo(KTemperature::Celsius);
         qreal p = KPressure(pressure, pressureUnit).convertTo(KPressure::Kilopascal);
         qreal t = tendency(pressure, tend);
@@ -139,7 +138,7 @@ public:
         Plasma::DataEngine::Data data = timeEngine->query(
                 QString(QLatin1String( "Local|Solar|Latitude=%1|Longitude=%2" )).arg(latitude).arg(longitude));
         bool day = (data[QLatin1String( "Corrected Elevation" )].toDouble() > 0.0);
-
+        QString result;
         if (p > 103.0) {
             if (day) {
                 result = QLatin1String( "weather-clear" );
@@ -194,6 +193,18 @@ WeatherPopupApplet::WeatherPopupApplet(QObject *parent, const QVariantList &args
 
 WeatherPopupApplet::~WeatherPopupApplet()
 {
+    if (d->locationEngine) {
+        Plasma::DataEngineManager::self()->unloadEngine(QLatin1String("geolocation"));
+        d->locationEngine = nullptr;
+    }
+    if (d->weatherEngine) {
+        Plasma::DataEngineManager::self()->unloadEngine(QLatin1String("weather"));
+        d->weatherEngine = nullptr;
+    }
+    if (d->timeEngine) {
+        Plasma::DataEngineManager::self()->unloadEngine(QLatin1String("time"));
+        d->timeEngine = nullptr;
+    }
     delete d;
 }