forked from quickshell/quickshell
feat: implement soft reloading
This commit is contained in:
parent
ba1e18a125
commit
362789fc46
11 changed files with 385 additions and 21 deletions
49
src/cpp/scavenge.hpp
Normal file
49
src/cpp/scavenge.hpp
Normal file
|
@ -0,0 +1,49 @@
|
|||
#pragma once
|
||||
|
||||
#include <qobject.h>
|
||||
#include <qqmlcomponent.h>
|
||||
#include <qqmlparserstatus.h>
|
||||
#include <qtmetamacros.h>
|
||||
|
||||
extern QObject* SCAVENGE_PARENT; // NOLINT
|
||||
|
||||
class Scavenger: public QObject, public QQmlParserStatus {
|
||||
Q_OBJECT;
|
||||
Q_INTERFACES(QQmlParserStatus);
|
||||
|
||||
public:
|
||||
explicit Scavenger(QObject* parent = nullptr): QObject(parent) {}
|
||||
~Scavenger() override = default;
|
||||
|
||||
Scavenger(Scavenger&) = delete;
|
||||
Scavenger(Scavenger&&) = delete;
|
||||
void operator=(Scavenger&) = delete;
|
||||
void operator=(Scavenger&&) = delete;
|
||||
|
||||
void classBegin() override;
|
||||
void componentComplete() override {}
|
||||
|
||||
protected:
|
||||
// do early init, sometimes with a scavengeable target
|
||||
virtual void earlyInit(QObject* old) = 0;
|
||||
};
|
||||
|
||||
class Scavengeable {
|
||||
public:
|
||||
Scavengeable() = default;
|
||||
virtual ~Scavengeable() = default;
|
||||
|
||||
Scavengeable(Scavengeable&) = delete;
|
||||
Scavengeable(Scavengeable&&) = delete;
|
||||
void operator=(Scavengeable&) = delete;
|
||||
void operator=(Scavengeable&&) = delete;
|
||||
|
||||
// return an old object that might have salvageable resources
|
||||
virtual QObject* scavengeTargetFor(QObject* child) = 0;
|
||||
};
|
||||
|
||||
QObject* createComponentScavengeable(
|
||||
QObject& parent,
|
||||
QQmlComponent& component,
|
||||
QVariantMap& initialProperties
|
||||
);
|
Loading…
Add table
Add a link
Reference in a new issue