From 3bc87f03e5db18a9c67c93c6199eb6fab0fbc0c3 Mon Sep 17 00:00:00 2001 From: Fushan Wen Date: Sat, 21 May 2022 20:05:24 +0800 Subject: [PATCH] calendar: use normal type for EventPluginsManager, don't use singleton It fixes that when there are multiple calendar applets, each applet doesn't have its own EventPluginsManager. BUG: 454846 FIXED-IN: 5.26 --- .../package/contents/config/config.qml | 8 +++++++- .../package/contents/ui/CalendarView.qml | 16 +++++++--------- .../package/contents/ui/configCalendar.qml | 15 +++++++++------ .../digital-clock/package/contents/ui/main.qml | 4 ---- components/calendar/calendarplugin.cpp | 10 +--------- components/calendar/daysmodel.cpp | 4 ++++ components/calendar/qml/MonthView.qml | 6 +++++- 7 files changed, 33 insertions(+), 30 deletions(-) diff --git a/applets/digital-clock/package/contents/config/config.qml b/applets/digital-clock/package/contents/config/config.qml index c7715be27..a9e2db34b 100644 --- a/applets/digital-clock/package/contents/config/config.qml +++ b/applets/digital-clock/package/contents/config/config.qml @@ -31,8 +31,14 @@ ConfigModel { source: "configTimeZones.qml" } + property QtObject eventPluginsManager: PlasmaCalendar.EventPluginsManager { + Component.onCompleted: { + populateEnabledPluginsList(Plasmoid.configuration.enabledCalendarPlugins); + } + } + property Instantiator __eventPlugins: Instantiator { - model: PlasmaCalendar.EventPluginsManager.model + model: eventPluginsManager.model delegate: ConfigCategory { name: model.display icon: model.decoration diff --git a/applets/digital-clock/package/contents/ui/CalendarView.qml b/applets/digital-clock/package/contents/ui/CalendarView.qml index bb270e995..842c1c637 100644 --- a/applets/digital-clock/package/contents/ui/CalendarView.qml +++ b/applets/digital-clock/package/contents/ui/CalendarView.qml @@ -37,7 +37,7 @@ PlasmaExtras.Representation { collapseMarginsHint: true readonly property int paddings: PlasmaCore.Units.smallSpacing - readonly property bool showAgenda: PlasmaCalendar.EventPluginsManager.enabledPlugins.length > 0 + readonly property bool showAgenda: eventPluginsManager.enabledPlugins.length > 0 readonly property bool showClocks: Plasmoid.configuration.selectedTimeZones.length > 1 property alias borderWidth: monthView.borderWidth @@ -257,6 +257,11 @@ PlasmaExtras.Representation { } } + PlasmaCalendar.EventPluginsManager { + id: eventPluginsManager + enabledPlugins: Plasmoid.configuration.enabledCalendarPlugins + } + // Left column containing agenda view and time zones // ================================================== ColumnLayout { @@ -335,14 +340,6 @@ PlasmaExtras.Representation { } } - Connections { - target: Plasmoid.configuration - - onEnabledCalendarPluginsChanged: { - PlasmaCalendar.EventPluginsManager.enabledPlugins = Plasmoid.configuration.enabledCalendarPlugins; - } - } - Binding { target: Plasmoid.self property: "hideOnWindowDeactivate" @@ -629,6 +626,7 @@ PlasmaExtras.Representation { id: monthView anchors.margins: PlasmaCore.Units.smallSpacing borderOpacity: 0.25 + eventPluginsManager: eventPluginsManager today: root.tzDate firstDayOfWeek: Plasmoid.configuration.firstDayOfWeek > -1 ? Plasmoid.configuration.firstDayOfWeek diff --git a/applets/digital-clock/package/contents/ui/configCalendar.qml b/applets/digital-clock/package/contents/ui/configCalendar.qml index eedb99a3a..a319b71cc 100644 --- a/applets/digital-clock/package/contents/ui/configCalendar.qml +++ b/applets/digital-clock/package/contents/ui/configCalendar.qml @@ -23,7 +23,14 @@ Item { function saveConfig() { - Plasmoid.configuration.enabledCalendarPlugins = PlasmaCalendar.EventPluginsManager.enabledPlugins; + Plasmoid.configuration.enabledCalendarPlugins = eventPluginsManager.enabledPlugins; + } + + PlasmaCalendar.EventPluginsManager { + id: eventPluginsManager + Component.onCompleted: { + populateEnabledPluginsList(Plasmoid.configuration.enabledCalendarPlugins); + } } Kirigami.FormLayout { @@ -68,7 +75,7 @@ Item { Repeater { id: calendarPluginsRepeater - model: PlasmaCalendar.EventPluginsManager.model + model: eventPluginsManager.model delegate: QtLayouts.RowLayout { QtControls.CheckBox { text: model.display @@ -83,9 +90,5 @@ Item { } } } - - Component.onCompleted: { - PlasmaCalendar.EventPluginsManager.populateEnabledPluginsList(Plasmoid.configuration.enabledCalendarPlugins); - } } diff --git a/applets/digital-clock/package/contents/ui/main.qml b/applets/digital-clock/package/contents/ui/main.qml index eb3c5d4b6..b5977fc8f 100644 --- a/applets/digital-clock/package/contents/ui/main.qml +++ b/applets/digital-clock/package/contents/ui/main.qml @@ -128,9 +128,5 @@ Item { if (KCMShell.authorize("kcm_formats.desktop").length > 0) { Plasmoid.setAction("formatskcm", i18n("Set Time Format…"), "gnumeric-format-thousand-separator"); } - - // Set the list of enabled plugins from config - // to the manager - PlasmaCalendar.EventPluginsManager.enabledPlugins = Plasmoid.configuration.enabledCalendarPlugins; } } diff --git a/components/calendar/calendarplugin.cpp b/components/calendar/calendarplugin.cpp index 369199498..81233a41c 100644 --- a/components/calendar/calendarplugin.cpp +++ b/components/calendar/calendarplugin.cpp @@ -13,20 +13,12 @@ #include #include -static QObject *event_plugins_manager_provider(QQmlEngine *engine, QJSEngine *scriptEngine) -{ - Q_UNUSED(engine) - Q_UNUSED(scriptEngine) - - return new EventPluginsManager(); -} - void CalendarPlugin::registerTypes(const char *uri) { Q_ASSERT(uri == QByteArray("org.kde.plasma.workspace.calendar")); qmlRegisterType(uri, 2, 0, "Calendar"); + qmlRegisterType(uri, 2, 0, "EventPluginsManager"); qmlRegisterAnonymousType(uri, 1); qmlRegisterAnonymousType(uri, 1); - qmlRegisterSingletonType(uri, 2, 0, "EventPluginsManager", event_plugins_manager_provider); qmlRegisterUncreatableType(uri, 2, 0, "EventDataDecorator", QStringLiteral("Unable to create EventDataDecorator from QML")); } diff --git a/components/calendar/daysmodel.cpp b/components/calendar/daysmodel.cpp index b1fdd6cc8..a031a958a 100644 --- a/components/calendar/daysmodel.cpp +++ b/components/calendar/daysmodel.cpp @@ -390,6 +390,10 @@ bool DaysModel::hasMinorEventAtDate(const QDate &date) const void DaysModel::setPluginsManager(QObject *manager) { + if (d->m_pluginsManager) { + disconnect(d->m_pluginsManager, nullptr, this, nullptr); + } + EventPluginsManager *m = qobject_cast(manager); if (!m) { diff --git a/components/calendar/qml/MonthView.qml b/components/calendar/qml/MonthView.qml index 7d230309f..7f2005ad5 100644 --- a/components/calendar/qml/MonthView.qml +++ b/components/calendar/qml/MonthView.qml @@ -37,6 +37,10 @@ PinchArea { // TODO KF6 switch to Item * \sa Calendar::firstDayOfWeek */ property alias firstDayOfWeek: calendarBackend.firstDayOfWeek + /** + * The event plugins manager used in the view + */ + property QtObject eventPluginsManager property QtObject date property date currentDate @@ -190,7 +194,7 @@ PinchArea { // TODO KF6 switch to Item today: root.today Component.onCompleted: { - daysModel.setPluginsManager(EventPluginsManager); + daysModel.setPluginsManager(root.eventPluginsManager); } onYearChanged: {