summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2011-03-31 20:24:59 +0000
committerHisham Muhammad <hisham@gobolinux.org>2011-03-31 20:24:59 +0000
commitbd459776a424e40eb181f269a113eb30eb691cd3 (patch)
tree4a9e59d02ce79ce46fa728f0b932b8847db58461
parentb57b7e9a9e7b960cf5f2b38e79b332cbff6533df (diff)
retain meter state when it is reinit'ed in the Setup screen
-rw-r--r--CPUMeter.c13
-rw-r--r--Meter.c3
2 files changed, 10 insertions, 6 deletions
diff --git a/CPUMeter.c b/CPUMeter.c
index b6f8d35e..7c90bb6d 100644
--- a/CPUMeter.c
+++ b/CPUMeter.c
@@ -124,12 +124,15 @@ static void CPUMeter_display(Object* cast, RichString* out) {
static void AllCPUsMeter_init(Meter* this) {
int cpus = this->pl->cpuCount;
- this->drawData = malloc(sizeof(Meter*) * cpus);
+ if (!this->drawData)
+ this->drawData = calloc(sizeof(Meter*), cpus);
Meter** meters = (Meter**) this->drawData;
- for (int i = 0; i < cpus; i++)
- meters[i] = Meter_new(this->pl, i+1, &CPUMeter);
- this->h = cpus;
- this->mode = BAR_METERMODE;
+ for (int i = 0; i < cpus; i++) {
+ if (!meters[i])
+ meters[i] = Meter_new(this->pl, i+1, &CPUMeter);
+ meters[i]->type->init(meters[i]);
+ }
+ this->h = Meter_modes[this->mode]->h;
}
static void AllCPUsMeter_done(Meter* this) {
diff --git a/Meter.c b/Meter.c
index fe31e54a..713cd12f 100644
--- a/Meter.c
+++ b/Meter.c
@@ -155,8 +155,9 @@ Meter* Meter_new(ProcessList* pl, int param, MeterType* type) {
}
void Meter_delete(Object* cast) {
+ if (!cast)
+ return;
Meter* this = (Meter*) cast;
- assert (this != NULL);
if (this->type->done) {
this->type->done(this);
}