summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Scott <natoscott@users.noreply.github.com>2021-12-09 08:38:25 +1100
committerGitHub <noreply@github.com>2021-12-09 08:38:25 +1100
commitbc08c7dc2aa933385fb35df9f81ba06b111ac0c6 (patch)
tree01de7b1a5cd9c16dae0fb2e8fd51efcec76fae6d
parent1e94b92226007bac939e59b7f6b75b23b177b9c6 (diff)
parentc85e5bbf5c5697b47fb94903eb9d5c0f03f51ec7 (diff)
Merge pull request #889 from cgzones/screens_update
Screens update
-rw-r--r--ScreensPanel.c33
-rw-r--r--Settings.c10
-rw-r--r--Settings.h2
3 files changed, 34 insertions, 11 deletions
diff --git a/ScreensPanel.c b/ScreensPanel.c
index 70e517c3..8d49127c 100644
--- a/ScreensPanel.c
+++ b/ScreensPanel.c
@@ -15,13 +15,22 @@ in the source distribution for its full text.
#include "FunctionBar.h"
#include "Hashtable.h"
#include "ProvideCurses.h"
+#include "Settings.h"
#include "XUtils.h"
+static void ScreenListItem_delete(Object* cast) {
+ ScreenListItem* this = (ScreenListItem*)cast;
+ if (this->ss) {
+ ScreenSettings_delete(this->ss);
+ }
+ ListItem_delete(cast);
+}
+
ObjectClass ScreenListItem_class = {
.extends = Class(ListItem),
.display = ListItem_display,
- .delete = ListItem_delete,
+ .delete = ScreenListItem_delete,
.compare = ListItem_compare
};
@@ -37,6 +46,14 @@ static const char* const ScreensFunctions[] = {" ", "Rename", " ", "
static void ScreensPanel_delete(Object* object) {
Panel* super = (Panel*) object;
ScreensPanel* this = (ScreensPanel*) object;
+
+ /* do not delete screen settings still in use */
+ int n = Panel_size(super);
+ for (int i = 0; i < n; i++) {
+ ScreenListItem* item = (ScreenListItem*) Panel_get(super, i);
+ item->ss = NULL;
+ }
+
Panel_done(super);
free(this);
}
@@ -44,7 +61,7 @@ static void ScreensPanel_delete(Object* object) {
static HandlerResult ScreensPanel_eventHandlerRenaming(Panel* super, int ch) {
ScreensPanel* const this = (ScreensPanel*) super;
- if (ch >= 32 && ch < 127 && ch != 61) {
+ if (ch >= 32 && ch < 127 && ch != '=') {
if (this->cursor < SCREEN_NAME_LEN - 1) {
this->buffer[this->cursor] = (char)ch;
this->cursor++;
@@ -64,8 +81,8 @@ static HandlerResult ScreensPanel_eventHandlerRenaming(Panel* super, int ch) {
}
break;
}
- case 0x0a:
- case 0x0d:
+ case '\n':
+ case '\r':
case KEY_ENTER:
{
ListItem* item = (ListItem*) Panel_getSelected(super);
@@ -119,7 +136,7 @@ static void rebuildSettingsArray(Panel* super) {
int n = Panel_size(super);
free(this->settings->screens);
- this->settings->screens = xMalloc(sizeof(ScreenSettings*) * (n + 1));
+ this->settings->screens = xMallocArray(n + 1, sizeof(ScreenSettings*));
this->settings->screens[n] = NULL;
for (int i = 0; i < n; i++) {
ScreenListItem* item = (ScreenListItem*) Panel_get(super, i);
@@ -147,8 +164,8 @@ static HandlerResult ScreensPanel_eventHandlerNormal(Panel* super, int ch) {
bool shouldRebuildArray = false;
HandlerResult result = IGNORED;
switch(ch) {
- case 0x0a:
- case 0x0d:
+ case '\n':
+ case '\r':
case KEY_ENTER:
case KEY_MOUSE:
case KEY_RECLICK:
@@ -297,7 +314,7 @@ void ScreensPanel_update(Panel* super) {
ScreensPanel* this = (ScreensPanel*) super;
int size = Panel_size(super);
this->settings->changed = true;
- this->settings->screens = xRealloc(this->settings->screens, sizeof(char*) * (size+1));
+ this->settings->screens = xReallocArray(this->settings->screens, size + 1, sizeof(ScreenSettings*));
for (int i = 0; i < size; i++) {
ScreenListItem* item = (ScreenListItem*) Panel_get(super, i);
ScreenSettings* ss = item->ss;
diff --git a/Settings.c b/Settings.c
index 5cc09502..4b76d612 100644
--- a/Settings.c
+++ b/Settings.c
@@ -75,9 +75,7 @@ void Settings_delete(Settings* this) {
free(this->hColumns);
if (this->screens) {
for (unsigned int i = 0; this->screens[i]; i++) {
- free(this->screens[i]->name);
- free(this->screens[i]->fields);
- free(this->screens[i]);
+ ScreenSettings_delete(this->screens[i]);
}
free(this->screens);
}
@@ -285,6 +283,12 @@ ScreenSettings* Settings_newScreen(Settings* this, const char* name, const char*
return ss;
}
+void ScreenSettings_delete(ScreenSettings* this) {
+ free(this->name);
+ free(this->fields);
+ free(this);
+}
+
static ScreenSettings* Settings_defaultScreens(Settings* this) {
if (this->nScreens)
return this->screens[0];
diff --git a/Settings.h b/Settings.h
index 2ca8034d..314b516b 100644
--- a/Settings.h
+++ b/Settings.h
@@ -118,6 +118,8 @@ Settings* Settings_new(unsigned int initialCpuCount, Hashtable* dynamicColumns);
ScreenSettings* Settings_newScreen(Settings* this, const char* name, const char* line);
+void ScreenSettings_delete(ScreenSettings* this);
+
void ScreenSettings_invertSortOrder(ScreenSettings* this);
void ScreenSettings_setSortKey(ScreenSettings* this, ProcessField sortKey);

© 2014-2024 Faster IT GmbH | imprint | privacy policy