ProcessController: use a single menu item for scheduler modes

Following the HIG, a single toggle item is enough as there are only two
states.

Fixes #10709
This commit is contained in:
Adrien Destugues
2020-07-12 19:44:55 +02:00
parent 4ad808b67d
commit eff77d18c7
@@ -471,9 +471,13 @@ ProcessController::MessageReceived(BMessage *message)
case 'Schd': case 'Schd':
{ {
int32 mode; BMenuItem* source;
if (message->FindInt32 ("mode", &mode) == B_OK) if (message->FindPointer("source", (void**)&source) != B_OK)
set_scheduler_mode(mode); break;
if (!source->IsMarked())
set_scheduler_mode(SCHEDULER_MODE_POWER_SAVING);
else
set_scheduler_mode(SCHEDULER_MODE_LOW_LATENCY);
break; break;
} }
@@ -842,19 +846,13 @@ thread_popup(void *arg)
} }
// Scheduler modes // Scheduler modes
static const char* schedulerModes[] = { B_TRANSLATE_MARK("Low latency"),
B_TRANSLATE_MARK("Power saving") };
unsigned int modesCount = sizeof(schedulerModes) / sizeof(const char*);
int32 currentMode = get_scheduler_mode(); int32 currentMode = get_scheduler_mode();
for (unsigned int i = 0; i < modesCount; i++) { BMessage* msg = new BMessage('Schd');
BMessage* m = new BMessage('Schd'); item = new BMenuItem(B_TRANSLATE("Power saving"), msg);
m->AddInt32("mode", i); if ((uint32)currentMode == SCHEDULER_MODE_POWER_SAVING)
item = new BMenuItem(B_TRANSLATE(schedulerModes[i]), m); item->SetMarked(true);
if ((uint32)currentMode == i) item->SetTarget(gPCView);
item->SetMarked(true); addtopbottom(item);
item->SetTarget(gPCView);
addtopbottom(item);
}
addtopbottom(new BSeparatorItem()); addtopbottom(new BSeparatorItem());
if (!be_roster->IsRunning(kTrackerSig)) { if (!be_roster->IsRunning(kTrackerSig)) {