aboutsummaryrefslogtreecommitdiffstats
path: root/ScreensPanel.c
diff options
context:
space:
mode:
authorDaniel Lange <DLange@git.local>2023-02-05 04:25:56 +0100
committerDaniel Lange <DLange@git.local>2023-02-05 04:25:56 +0100
commitf288666edc9180a2e81e6655951878124f321df6 (patch)
treeda70bf44b2423f6f8e9a070c063fed79d190b489 /ScreensPanel.c
parent937052b231259a47d881d539ad5748245ef55b99 (diff)
downloaddebian_htop-f288666edc9180a2e81e6655951878124f321df6.tar.gz
debian_htop-f288666edc9180a2e81e6655951878124f321df6.tar.bz2
debian_htop-f288666edc9180a2e81e6655951878124f321df6.zip
New upstream version 3.2.2upstream/3.2.2
Diffstat (limited to 'ScreensPanel.c')
-rw-r--r--ScreensPanel.c36
1 files changed, 24 insertions, 12 deletions
diff --git a/ScreensPanel.c b/ScreensPanel.c
index 785c387..cb664ac 100644
--- a/ScreensPanel.c
+++ b/ScreensPanel.c
@@ -55,6 +55,10 @@ static void ScreensPanel_delete(Object* object) {
item->ss = NULL;
}
+ /* during renaming the ListItem's value points to our static buffer */
+ if (this->renamingItem)
+ this->renamingItem->value = this->saved;
+
Panel_done(super);
free(this);
}
@@ -70,7 +74,7 @@ static HandlerResult ScreensPanel_eventHandlerRenaming(Panel* super, int ch) {
Panel_setCursorToSelection(super);
}
} else {
- switch(ch) {
+ switch (ch) {
case 127:
case KEY_BACKSPACE:
{
@@ -89,9 +93,10 @@ static HandlerResult ScreensPanel_eventHandlerRenaming(Panel* super, int ch) {
ListItem* item = (ListItem*) Panel_getSelected(super);
if (!item)
break;
+ assert(item == this->renamingItem);
free(this->saved);
item->value = xStrdup(this->buffer);
- this->renaming = false;
+ this->renamingItem = NULL;
super->cursorOn = false;
Panel_setSelectionColor(super, PANEL_SELECTION_FOCUS);
ScreensPanel_update(super);
@@ -102,8 +107,9 @@ static HandlerResult ScreensPanel_eventHandlerRenaming(Panel* super, int ch) {
ListItem* item = (ListItem*) Panel_getSelected(super);
if (!item)
break;
+ assert(item == this->renamingItem);
item->value = this->saved;
- this->renaming = false;
+ this->renamingItem = NULL;
super->cursorOn = false;
Panel_setSelectionColor(super, PANEL_SELECTION_FOCUS);
break;
@@ -119,7 +125,7 @@ static void startRenaming(Panel* super) {
ListItem* item = (ListItem*) Panel_getSelected(super);
if (item == NULL)
return;
- this->renaming = true;
+ this->renamingItem = item;
super->cursorOn = true;
char* name = item->value;
this->saved = name;
@@ -132,7 +138,7 @@ static void startRenaming(Panel* super) {
Panel_setCursorToSelection(super);
}
-static void rebuildSettingsArray(Panel* super) {
+static void rebuildSettingsArray(Panel* super, int selected) {
ScreensPanel* const this = (ScreensPanel*) super;
int n = Panel_size(super);
@@ -144,13 +150,20 @@ static void rebuildSettingsArray(Panel* super) {
this->settings->screens[i] = item->ss;
}
this->settings->nScreens = n;
+ /* ensure selection is in valid range */
+ if (selected > n - 1)
+ selected = n - 1;
+ else if (selected < 0)
+ selected = 0;
+ this->settings->ssIndex = selected;
+ this->settings->ss = this->settings->screens[selected];
}
static void addNewScreen(Panel* super) {
ScreensPanel* const this = (ScreensPanel*) super;
const char* name = "New";
- ScreenSettings* ss = Settings_newScreen(this->settings, &(const ScreenDefaults){ .name = name, .columns = "PID Command", .sortKey = "PID" });
+ ScreenSettings* ss = Settings_newScreen(this->settings, &(const ScreenDefaults) { .name = name, .columns = "PID Command", .sortKey = "PID" });
ScreenListItem* item = ScreenListItem_new(name, ss);
int idx = Panel_getSelectedIndex(super);
Panel_insert(super, idx + 1, (Object*) item);
@@ -164,7 +177,7 @@ static HandlerResult ScreensPanel_eventHandlerNormal(Panel* super, int ch) {
ScreenListItem* oldFocus = (ScreenListItem*) Panel_getSelected(super);
bool shouldRebuildArray = false;
HandlerResult result = IGNORED;
- switch(ch) {
+ switch (ch) {
case '\n':
case '\r':
case KEY_ENTER:
@@ -242,9 +255,8 @@ static HandlerResult ScreensPanel_eventHandlerNormal(Panel* super, int ch) {
case KEY_F(9):
//case KEY_DC:
{
- if (Panel_size(super) > 1) {
+ if (Panel_size(super) > 1)
Panel_remove(super, selected);
- }
shouldRebuildArray = true;
result = HANDLED;
break;
@@ -264,7 +276,7 @@ static HandlerResult ScreensPanel_eventHandlerNormal(Panel* super, int ch) {
result = HANDLED;
}
if (shouldRebuildArray)
- rebuildSettingsArray(super);
+ rebuildSettingsArray(super, selected);
if (result == HANDLED)
ScreensPanel_update(super);
return result;
@@ -273,7 +285,7 @@ static HandlerResult ScreensPanel_eventHandlerNormal(Panel* super, int ch) {
static HandlerResult ScreensPanel_eventHandler(Panel* super, int ch) {
ScreensPanel* const this = (ScreensPanel*) super;
- if (this->renaming) {
+ if (this->renamingItem) {
return ScreensPanel_eventHandlerRenaming(super, ch);
} else {
return ScreensPanel_eventHandlerNormal(super, ch);
@@ -298,7 +310,7 @@ ScreensPanel* ScreensPanel_new(Settings* settings) {
this->settings = settings;
this->columns = ColumnsPanel_new(settings->screens[0], columns, &(settings->changed));
this->moving = false;
- this->renaming = false;
+ this->renamingItem = NULL;
super->cursorOn = false;
this->cursor = 0;
Panel_setHeader(super, "Screens");

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