Skip to content
This repository was archived by the owner on Sep 8, 2020. It is now read-only.

Added an option to disable the mouse. #923

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion DisplayOptionsPanel.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ static void DisplayOptionsPanel_delete(Object* object) {

static HandlerResult DisplayOptionsPanel_eventHandler(Panel* super, int ch) {
DisplayOptionsPanel* this = (DisplayOptionsPanel*) super;

HandlerResult result = IGNORED;
CheckItem* selected = (CheckItem*) Panel_getSelected(super);

Expand Down Expand Up @@ -97,5 +97,6 @@ DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager*
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Count CPUs from 0 instead of 1"), &(settings->countCPUsFromZero)));
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Update process names on every refresh"), &(settings->updateProcessNames)));
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Add guest time in CPU meter percentage"), &(settings->accountGuestInCPUMeter)));
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Enable the mouse"), &(settings->enableMouse)));
return this;
}
8 changes: 4 additions & 4 deletions ScreenManager.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ static Panel* setCurrentPanel(Panel* panel) {
void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
bool quit = false;
int focus = 0;

Panel* panelFocus = setCurrentPanel((Panel*) Vector_get(this->panels, focus));

double oldTime = 0.0;
Expand All @@ -181,7 +181,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
if (this->header) {
checkRecalculation(this, &oldTime, &sortTimeout, &redraw, &rescan, &timedOut);
}

if (redraw) {
ScreenManager_drawPanels(this, focus);
}
Expand All @@ -191,7 +191,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
ch = getch();

HandlerResult result = IGNORED;
if (ch == KEY_MOUSE) {
if (ch == KEY_MOUSE && this->settings->enableMouse) {
ch = ERR;
MEVENT mevent;
int ok = getmouse(&mevent);
Expand Down Expand Up @@ -269,7 +269,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
quit = true;
continue;
}

switch (ch) {
case KEY_RESIZE:
{
Expand Down
21 changes: 13 additions & 8 deletions Settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ typedef struct {

typedef struct Settings_ {
char* filename;

MeterColumnSettings columns[2];

ProcessField* fields;
Expand All @@ -58,6 +58,7 @@ typedef struct Settings_ {
bool updateProcessNames;
bool accountGuestInCPUMeter;
bool headerMargin;
bool enableMouse;

bool changed;
} Settings;
Expand Down Expand Up @@ -114,7 +115,7 @@ static void Settings_defaultMeters(Settings* this) {
this->columns[i].modes = xCalloc(sizes[i], sizeof(int));
this->columns[i].len = sizes[i];
}

int r = 0;
if (this->cpuCount > 8) {
this->columns[0].names[0] = xStrdup("LeftCPUs2");
Expand All @@ -134,7 +135,7 @@ static void Settings_defaultMeters(Settings* this) {
this->columns[0].modes[1] = BAR_METERMODE;
this->columns[0].names[2] = xStrdup("Swap");
this->columns[0].modes[2] = BAR_METERMODE;

this->columns[1].names[r] = xStrdup("Tasks");
this->columns[1].modes[r++] = TEXT_METERMODE;
this->columns[1].names[r] = xStrdup("LoadAverage");
Expand Down Expand Up @@ -165,13 +166,13 @@ static void readFields(ProcessField* fields, int* flags, const char* line) {

static bool Settings_read(Settings* this, const char* fileName) {
FILE* fd;

CRT_dropPrivileges();
fd = fopen(fileName, "r");
CRT_restorePrivileges();
if (!fd)
return false;

bool didReadMeters = false;
bool didReadFields = false;
for (;;) {
Expand Down Expand Up @@ -232,6 +233,8 @@ static bool Settings_read(Settings* this, const char* fileName) {
} else if (String_eq(option[0], "color_scheme")) {
this->colorScheme = atoi(option[1]);
if (this->colorScheme < 0 || this->colorScheme >= LAST_COLORSCHEME) this->colorScheme = 0;
} else if (String_eq(option[0], "enable_mouse")) {
this->enableMouse = atoi(option[1]);
} else if (String_eq(option[0], "left_meters")) {
Settings_readMeters(this, option[1], 0);
didReadMeters = true;
Expand Down Expand Up @@ -315,6 +318,7 @@ bool Settings_write(Settings* this) {
fprintf(fd, "update_process_names=%d\n", (int) this->updateProcessNames);
fprintf(fd, "account_guest_in_cpu_meter=%d\n", (int) this->accountGuestInCPUMeter);
fprintf(fd, "color_scheme=%d\n", (int) this->colorScheme);
fprintf(fd, "enable_mouse=%d\n", (int) this->enableMouse);
fprintf(fd, "delay=%d\n", (int) this->delay);
fprintf(fd, "left_meters="); writeMeters(this, fd, 0);
fprintf(fd, "left_meter_modes="); writeMeterModes(this, fd, 0);
Expand All @@ -325,7 +329,7 @@ bool Settings_write(Settings* this) {
}

Settings* Settings_new(int cpuCount) {

Settings* this = xCalloc(1, sizeof(Settings));

this->sortKey = PERCENT_CPU;
Expand All @@ -344,7 +348,7 @@ Settings* Settings_new(int cpuCount) {
this->cpuCount = cpuCount;
this->showProgramPath = true;
this->highlightThreads = true;

this->fields = xCalloc(Platform_numberOfFields+1, sizeof(ProcessField));
// TODO: turn 'fields' into a Vector,
// (and ProcessFields into proper objects).
Expand Down Expand Up @@ -375,7 +379,7 @@ Settings* Settings_new(int cpuCount) {
htopDir = String_cat(home, "/.config/htop");
}
legacyDotfile = String_cat(home, "/.htoprc");

CRT_dropPrivileges();
(void) mkdir(configDir, 0700);
(void) mkdir(htopDir, 0700);
Expand All @@ -390,6 +394,7 @@ Settings* Settings_new(int cpuCount) {
CRT_restorePrivileges();
}
this->colorScheme = 0;
this->enableMouse = true;
this->changed = false;
this->delay = DEFAULT_DELAY;
bool ok = false;
Expand Down
3 changes: 2 additions & 1 deletion Settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ typedef struct {

typedef struct Settings_ {
char* filename;

MeterColumnSettings columns[2];

ProcessField* fields;
Expand All @@ -49,6 +49,7 @@ typedef struct Settings_ {
bool updateProcessNames;
bool accountGuestInCPUMeter;
bool headerMargin;
bool enableMouse;

bool changed;
} Settings;
Expand Down
37 changes: 23 additions & 14 deletions htop.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,12 @@ static void printVersionFlag() {
stdout);
exit(0);
}

static void printHelpFlag() {
fputs("htop " VERSION " - " COPYRIGHT "\n"
"Released under the GNU GPL.\n\n"
"-C --no-color Use a monochrome color scheme\n"
"-m --no-mouse Disable the mouse\n"
"-d --delay=DELAY Set the delay between updates, in tenths of seconds\n"
"-h --help Print this help screen\n"
"-s --sort-key=COLUMN Sort by COLUMN (try --sort-key=help for a list)\n"
Expand All @@ -62,6 +63,7 @@ typedef struct CommandLineSettings_ {
int sortKey;
int delay;
bool useColors;
bool enableMouse;
bool treeView;
} CommandLineSettings;

Expand All @@ -73,6 +75,7 @@ static CommandLineSettings parseArguments(int argc, char** argv) {
.sortKey = 0,
.delay = -1,
.useColors = true,
.enableMouse = true,
.treeView = false,
};

Expand All @@ -85,14 +88,15 @@ static CommandLineSettings parseArguments(int argc, char** argv) {
{"user", required_argument, 0, 'u'},
{"no-color", no_argument, 0, 'C'},
{"no-colour",no_argument, 0, 'C'},
{"no-mouse", no_argument, 0, 'm'},
{"tree", no_argument, 0, 't'},
{"pid", required_argument, 0, 'p'},
{0,0,0,0}
};

int opt, opti=0;
/* Parse arguments */
while ((opt = getopt_long(argc, argv, "hvCs:td:u:p:", long_opts, &opti))) {
while ((opt = getopt_long(argc, argv, "hvmCs:td:u:p:", long_opts, &opti))) {
if (opt == EOF) break;
switch (opt) {
case 'h':
Expand Down Expand Up @@ -130,6 +134,9 @@ static CommandLineSettings parseArguments(int argc, char** argv) {
case 'C':
flags.useColors = false;
break;
case 'm':
flags.enableMouse = false;
break;
case 't':
flags.treeView = true;
break;
Expand Down Expand Up @@ -186,12 +193,12 @@ int main(int argc, char** argv) {
exit(1);
}
#endif

Process_setupColumnWidths();

UsersTable* ut = UsersTable_new();
ProcessList* pl = ProcessList_new(ut, flags.pidWhiteList, flags.userId);

Settings* settings = Settings_new(pl->cpuCount);
pl->settings = settings;

Expand All @@ -201,18 +208,20 @@ int main(int argc, char** argv) {

if (flags.delay != -1)
settings->delay = flags.delay;
if (!flags.useColors)
if (!flags.useColors)
settings->colorScheme = COLORSCHEME_MONOCHROME;
if (!flags.enableMouse)
settings->enableMouse = false;
if (flags.treeView)
settings->treeView = true;

CRT_init(settings->delay, settings->colorScheme);

MainPanel* panel = MainPanel_new();
ProcessList_setPanel(pl, (Panel*) panel);

MainPanel_updateTreeFunctions(panel, settings->treeView);

if (flags.sortKey > 0) {
settings->sortKey = flags.sortKey;
settings->treeView = false;
Expand All @@ -228,32 +237,32 @@ int main(int argc, char** argv) {
.header = header,
};
MainPanel_setState(panel, &state);

ScreenManager* scr = ScreenManager_new(0, header->height, 0, -1, HORIZONTAL, header, settings, true);
ScreenManager_add(scr, (Panel*) panel, -1);

ProcessList_scan(pl);
millisleep(75);
ProcessList_scan(pl);

ScreenManager_run(scr, NULL, NULL);
ScreenManager_run(scr, NULL, NULL);

attron(CRT_colors[RESET_COLOR]);
mvhline(LINES-1, 0, ' ', COLS);
attroff(CRT_colors[RESET_COLOR]);
refresh();

CRT_done();
if (settings->changed)
Settings_write(settings);
Header_delete(header);
ProcessList_delete(pl);

ScreenManager_delete(scr);

UsersTable_delete(ut);
Settings_delete(settings);

if(flags.pidWhiteList) {
Hashtable_delete(flags.pidWhiteList);
}
Expand Down