From 5b78ad2d53b751e8b07d67ab8070e47f77036b84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= Date: Thu, 16 Dec 2021 16:09:32 +0100 Subject: [PATCH] Set correct default sorting direction Respect the field option defaultSortDesc for the default screen sort direction, e.g. for CPU%. --- ScreensPanel.c | 2 +- Settings.c | 16 ++++++++-------- Settings.h | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ScreensPanel.c b/ScreensPanel.c index 8d49127c..45c6ba8b 100644 --- a/ScreensPanel.c +++ b/ScreensPanel.c @@ -149,7 +149,7 @@ static void addNewScreen(Panel* super) { ScreensPanel* const this = (ScreensPanel*) super; const char* name = "New"; - ScreenSettings* ss = Settings_newScreen(this->settings, name, "PID Command"); + 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); diff --git a/Settings.c b/Settings.c index ee2fe1b5..54ae0515 100644 --- a/Settings.c +++ b/Settings.c @@ -262,22 +262,23 @@ static void ScreenSettings_readFields(ScreenSettings* ss, Hashtable* columns, co String_freeArray(ids); } -ScreenSettings* Settings_newScreen(Settings* this, const char* name, const char* line) { +ScreenSettings* Settings_newScreen(Settings* this, const ScreenDefaults* defaults) { + int sortKey = defaults->sortKey ? toFieldIndex(this->dynamicColumns, defaults->sortKey) : PID; ScreenSettings* ss = xMalloc(sizeof(ScreenSettings)); *ss = (ScreenSettings) { - .name = xStrdup(name), + .name = xStrdup(defaults->name), .fields = xCalloc(LAST_PROCESSFIELD, sizeof(ProcessField)), .flags = 0, - .direction = 1, + .direction = (Process_fields[sortKey].defaultSortDesc) ? -1 : 1, .treeDirection = 1, - .sortKey = PID, + .sortKey = sortKey, .treeSortKey = PID, .treeView = false, .treeViewAlwaysByPID = false, .allBranchesCollapsed = false, }; - ScreenSettings_readFields(ss, this->dynamicColumns, line); + ScreenSettings_readFields(ss, this->dynamicColumns, defaults->columns); this->screens[this->nScreens] = ss; this->nScreens++; this->screens = xRealloc(this->screens, sizeof(ScreenSettings*) * (this->nScreens + 1)); @@ -296,8 +297,7 @@ static ScreenSettings* Settings_defaultScreens(Settings* this) { return this->screens[0]; for (unsigned int i = 0; i < Platform_numberOfDefaultScreens; i++) { const ScreenDefaults* defaults = &Platform_defaultScreens[i]; - ScreenSettings* settings = Settings_newScreen(this, defaults->name, defaults->columns); - settings->sortKey = toFieldIndex(this->dynamicColumns, defaults->sortKey); + Settings_newScreen(this, defaults); } return this->screens[0]; } @@ -466,7 +466,7 @@ static bool Settings_read(Settings* this, const char* fileName, unsigned int ini this->topologyAffinity = !!atoi(option[1]); #endif } else if (strncmp(option[0], "screen:", 7) == 0) { - screen = Settings_newScreen(this, option[0] + 7, option[1]); + screen = Settings_newScreen(this, &(const ScreenDefaults){ .name = option[0] + 7, .columns = option[1] }); } else if (String_eq(option[0], ".sort_key")) { if (screen) screen->sortKey = toFieldIndex(this->dynamicColumns, option[1]); diff --git a/Settings.h b/Settings.h index 314b516b..345a535c 100644 --- a/Settings.h +++ b/Settings.h @@ -116,7 +116,7 @@ int Settings_write(const Settings* this, bool onCrash); Settings* Settings_new(unsigned int initialCpuCount, Hashtable* dynamicColumns); -ScreenSettings* Settings_newScreen(Settings* this, const char* name, const char* line); +ScreenSettings* Settings_newScreen(Settings* this, const ScreenDefaults* defaults); void ScreenSettings_delete(ScreenSettings* this);