Pre-select the last sent signal in SignalsPanel

Instead of pre-selecting SIGTERM every time, select the signal last
send in the same htop session.

Closes: #862
This commit is contained in:
Christian Göttsche 2021-12-05 19:30:32 +01:00 committed by BenBE
parent a38f48481e
commit ff4f44b22a
3 changed files with 11 additions and 5 deletions

View File

@ -344,9 +344,12 @@ static Htop_Reaction actionKill(State* st) {
if (Settings_isReadonly())
return HTOP_OK;
Panel* signalsPanel = SignalsPanel_new();
static int preSelectedSignal = SIGNALSPANEL_INITSELECTEDSIGNAL;
Panel* signalsPanel = SignalsPanel_new(preSelectedSignal);
const ListItem* sgn = (ListItem*) Action_pickFromVector(st, signalsPanel, 14, true);
if (sgn && sgn->key != 0) {
preSelectedSignal = sgn->key;
Panel_setHeader((Panel*)st->mainPanel, "Sending...");
Panel_draw((Panel*)st->mainPanel, false, true, true, State_hideFunctionBar(st));
refresh();

View File

@ -18,15 +18,14 @@ in the source distribution for its full text.
#include "XUtils.h"
Panel* SignalsPanel_new() {
Panel* SignalsPanel_new(int preSelectedSignal) {
Panel* this = Panel_new(1, 1, 1, 1, Class(ListItem), true, FunctionBar_newEnterEsc("Send ", "Cancel "));
const int defaultSignal = SIGTERM;
int defaultPosition = 15;
unsigned int i;
for (i = 0; i < Platform_numberOfSignals; i++) {
Panel_set(this, i, (Object*) ListItem_new(Platform_signals[i].name, Platform_signals[i].number));
// signal 15 is not always the 15th signal in the table
if (Platform_signals[i].number == defaultSignal) {
if (Platform_signals[i].number == preSelectedSignal) {
defaultPosition = i;
}
}

View File

@ -7,6 +7,8 @@ Released under the GNU GPLv2+, see the COPYING file
in the source distribution for its full text.
*/
#include <signal.h>
#include "Panel.h"
@ -15,6 +17,8 @@ typedef struct SignalItem_ {
int number;
} SignalItem;
Panel* SignalsPanel_new(void);
#define SIGNALSPANEL_INITSELECTEDSIGNAL SIGTERM
Panel* SignalsPanel_new(int preSelectedSignal);
#endif