tderandrtray: restructure context menu.

When using big monitors the context menu was getting very crowded and
didn't entirely fit on the screen, making it difficult to navigate
hidden entries. The restructured menu uses submenus for each category,
therefore all the menu can be easily navigated.

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
pull/560/head
Michele Calgaro 11 months ago
parent f5175bff4e
commit a555786bf7
Signed by: MicheleC
GPG Key ID: 2A75B7CA8ADED5CF

@ -253,25 +253,28 @@ void KRandRSystemTray::contextMenuAboutToShow(TDEPopupMenu* menu)
menu->setCheckable(true); menu->setCheckable(true);
bool valid = isValid(); bool valid = isValid();
if (!valid)
if (!valid) { {
lastIndex = menu->insertItem(i18n("Required X Extension Not Available")); lastIndex = menu->insertItem(i18n("Required X Extension Not Available"));
menu->setItemEnabled(lastIndex, false); menu->setItemEnabled(lastIndex, false);
} }
else { else
{
m_screenPopups.clear(); m_screenPopups.clear();
for (int s = 0; s < numScreens() /*&& numScreens() > 1 */; s++) { if (numScreens() > 1)
setCurrentScreen(s); {
if (s == screenIndexOfWidget(this)) { int screenOfWidget = screenIndexOfWidget(this);
/*lastIndex = menu->insertItem(i18n("Screen %1").arg(s+1)); for (int s = 0; s < numScreens(); s++)
menu->setItemEnabled(lastIndex, false);*/ {
} else { setCurrentScreen(s);
TDEPopupMenu* subMenu = new TDEPopupMenu(menu, TQString("screen%1").arg(s+1).latin1()); if (s != screenOfWidget)
m_screenPopups.append(subMenu); {
populateMenu(subMenu); TDEPopupMenu *subMenu = new TDEPopupMenu(menu, TQString("screen%1").arg(s+1).latin1());
lastIndex = menu->insertItem(i18n("Screen %1").arg(s+1), subMenu); m_screenPopups.append(subMenu);
connect(subMenu, TQ_SIGNAL(activated(int)), TQ_SLOT(slotScreenActivated())); populateMenu(subMenu);
lastIndex = menu->insertItem(i18n("Screen %1").arg(s+1), subMenu);
connect(subMenu, TQ_SIGNAL(activated(int)), TQ_SLOT(slotScreenActivated()));
}
} }
} }
@ -282,52 +285,52 @@ void KRandRSystemTray::contextMenuAboutToShow(TDEPopupMenu* menu)
addOutputMenu(menu); addOutputMenu(menu);
// Find any user ICC profiles // Find any user ICC profiles
TQStringList cfgProfiles; TQStringList cfgProfiles = t_config->groupList();
cfgProfiles = t_config->groupList(); if (!cfgProfiles.isEmpty())
if (cfgProfiles.isEmpty() == false) { {
menu->insertTitle(SmallIcon("kcoloredit"), i18n("Color Profile")); TDEPopupMenu *profileMenu = new TDEPopupMenu(menu);
} for (TQStringList::Iterator t(cfgProfiles.begin()); t != cfgProfiles.end(); ++t)
for (TQStringList::Iterator t(cfgProfiles.begin()); t != cfgProfiles.end(); ++t) { {
lastIndex = menu->insertItem(*t); lastIndex = profileMenu->insertItem(*t);
if (t_config->readEntry("CurrentProfile") == (*t)) { if (t_config->readEntry("CurrentProfile") == (*t))
menu->setItemChecked(lastIndex, true); {
profileMenu->setItemChecked(lastIndex, true);
}
profileMenu->setItemEnabled(lastIndex, t_config->readBoolEntry("EnableICC", false));
profileMenu->connectItem(lastIndex, this, TQ_SLOT(slotColorProfileChanged(int)));
} }
menu->setItemEnabled(lastIndex, t_config->readBoolEntry("EnableICC", false)); menu->insertItem(SmallIcon("kcoloredit"), i18n("Color Profile"), profileMenu);
menu->connectItem(lastIndex, this, TQ_SLOT(slotColorProfileChanged(int)));
} }
if (valid) { if (valid)
{
// Find any display profiles // Find any display profiles
TQStringList displayProfiles; TQStringList displayProfiles = getDisplayConfigurationProfiles(locateLocal("config", "/", true));
displayProfiles = getDisplayConfigurationProfiles(locateLocal("config", "/", true)); if (!displayProfiles.isEmpty())
if (!displayProfiles.isEmpty()) { {
menu->insertTitle(SmallIcon("background"), i18n("Display Profiles")); TDEPopupMenu *displayProfileMenu = new TDEPopupMenu(menu);
lastIndex = menu->insertItem(SmallIcon("bookmark"), "<default>"); lastIndex = displayProfileMenu->insertItem(SmallIcon("bookmark"), "<default>");
menu->connectItem(lastIndex, this, TQ_SLOT(slotDisplayProfileChanged(int))); displayProfileMenu->connectItem(lastIndex, this, TQ_SLOT(slotDisplayProfileChanged(int)));
for (TQStringList::Iterator t(displayProfiles.begin()); t != displayProfiles.end(); ++t) { for (TQStringList::Iterator t(displayProfiles.begin()); t != displayProfiles.end(); ++t)
lastIndex = menu->insertItem(SmallIcon("bookmark"), *t); {
menu->connectItem(lastIndex, this, TQ_SLOT(slotDisplayProfileChanged(int))); lastIndex = displayProfileMenu->insertItem(SmallIcon("bookmark"), *t);
displayProfileMenu->connectItem(lastIndex, this, TQ_SLOT(slotDisplayProfileChanged(int)));
} }
menu->insertItem(SmallIcon("background"), i18n("Display Profiles"), displayProfileMenu);
} }
} }
menu->insertTitle(SmallIcon("randr"), i18n("Global Configuration")); // Config menu
TDEPopupMenu *configMenu = new TDEPopupMenu(menu);
TDEAction *actColors = new TDEAction( i18n( "Configure Displays..." ), TDEAction *actColors = new TDEAction(i18n("Configure Displays..."), SmallIconSet("configure"),
SmallIconSet( "configure" ), TDEShortcut(), this, TQ_SLOT( slotDisplayConfig() ), TDEShortcut(), this, TQ_SLOT(slotDisplayConfig()), actionCollection());
actionCollection() ); actColors->plug(configMenu);
actColors->plug( menu ); TDEAction *actSKeys = new TDEAction(i18n("Configure Shortcut Keys..."), SmallIconSet("configure"),
TDEShortcut(), this, TQ_SLOT(slotSKeys()), actionCollection());
// TDEAction *actPrefs = new TDEAction( i18n( "Configure Display..." ), actSKeys->plug(configMenu);
// SmallIconSet( "configure" ), TDEShortcut(), this, TQ_SLOT( slotPrefs() ), menu->insertItem(SmallIcon("randr"), i18n("Global Configuration"), configMenu);
// actionCollection() );
// actPrefs->plug( menu );
TDEAction *actSKeys = new TDEAction( i18n( "Configure Shortcut Keys..." ),
SmallIconSet( "configure" ), TDEShortcut(), this, TQ_SLOT( slotSKeys() ),
actionCollection() );
actSKeys->plug( menu );
menu->insertSeparator();
menu->insertItem(SmallIcon("help"),KStdGuiItem::help().text(), m_help->menu()); menu->insertItem(SmallIcon("help"),KStdGuiItem::help().text(), m_help->menu());
TDEAction *quitAction = actionCollection()->action(KStdAction::name(KStdAction::Quit)); TDEAction *quitAction = actionCollection()->action(KStdAction::name(KStdAction::Quit));
quitAction->plug(menu); quitAction->plug(menu);
@ -411,74 +414,85 @@ int KRandRSystemTray::GetHackResolutionParameter() {
return resparm; return resparm;
} }
void KRandRSystemTray::populateMenu(TDEPopupMenu* menu) void KRandRSystemTray::populateMenu(TDEPopupMenu *menu)
{ {
int lastIndex = 0; int lastIndex;
menu->insertTitle(SmallIcon("view-fullscreen"), i18n("Screen Size"));
int numSizes = currentScreen()->numSizes(); int numSizes = currentScreen()->numSizes();
int* sizeSort = new int[numSizes]; int *sizeSort = new int[numSizes];
for (int i = 0; i < numSizes; i++)
for (int i = 0; i < numSizes; i++) { {
sizeSort[i] = currentScreen()->pixelCount(i); sizeSort[i] = currentScreen()->pixelCount(i);
} }
for (int j = 0; j < numSizes; j++) { TDEPopupMenu *screenSizeMenu = new TDEPopupMenu(menu);
int highest = -1, highestIndex = -1; for (int j = 0; j < numSizes; j++)
{
for (int i = 0; i < numSizes; i++) { int highest = 0, highestIndex = -1;
if (sizeSort[i] && sizeSort[i] > highest) { for (int i = 0; i < numSizes; i++)
{
if (sizeSort[i] > highest)
{
highest = sizeSort[i]; highest = sizeSort[i];
highestIndex = i; highestIndex = i;
} }
} }
sizeSort[highestIndex] = -1;
Q_ASSERT(highestIndex != -1); Q_ASSERT(highestIndex != -1);
sizeSort[highestIndex] = 0;
lastIndex = menu->insertItem(i18n("%1 x %2").arg(currentScreen()->pixelSize(highestIndex).width()).arg(currentScreen()->pixelSize(highestIndex).height())); lastIndex = screenSizeMenu->insertItem(i18n("%1 x %2").arg(currentScreen()->pixelSize(highestIndex).width()).arg(currentScreen()->pixelSize(highestIndex).height()));
if (currentScreen()->proposedSize() == highestIndex) if (currentScreen()->proposedSize() == highestIndex)
menu->setItemChecked(lastIndex, true); {
screenSizeMenu->setItemChecked(lastIndex, true);
}
menu->setItemParameter(lastIndex, highestIndex); screenSizeMenu->setItemParameter(lastIndex, highestIndex);
menu->connectItem(lastIndex, this, TQ_SLOT(slotResolutionChanged(int))); screenSizeMenu->connectItem(lastIndex, this, TQ_SLOT(slotResolutionChanged(int)));
} }
delete [] sizeSort; delete [] sizeSort;
sizeSort = 0L; sizeSort = nullptr;
menu->insertItem(SmallIcon("view-fullscreen"), i18n("Screen Size"), screenSizeMenu);
// Don't display the rotation options if there is no point (ie. none are supported) // Don't display the rotation options if there is no point (ie. none are supported)
// XFree86 4.3 does not include rotation support. // XFree86 4.3 does not include rotation support.
if (currentScreen()->rotations() != RandRScreen::Rotate0) { if (currentScreen()->rotations() != RandRScreen::Rotate0)
menu->insertTitle(SmallIcon("reload"), i18n("Orientation")); {
TDEPopupMenu *orientationMenu = new TDEPopupMenu(menu);
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++)
if ((1 << i) & currentScreen()->rotations()) { {
lastIndex = menu->insertItem(currentScreen()->rotationIcon(1 << i), RandRScreen::rotationName(1 << i)); if ((1 << i) & currentScreen()->rotations())
{
lastIndex = orientationMenu->insertItem(currentScreen()->rotationIcon(1 << i), RandRScreen::rotationName(1 << i));
if (currentScreen()->proposedRotation() & (1 << i)) if (currentScreen()->proposedRotation() & (1 << i))
menu->setItemChecked(lastIndex, true); {
orientationMenu->setItemChecked(lastIndex, true);
}
menu->setItemParameter(lastIndex, 1 << i); orientationMenu->setItemParameter(lastIndex, 1 << i);
menu->connectItem(lastIndex, this, TQ_SLOT(slotOrientationChanged(int))); orientationMenu->connectItem(lastIndex, this, TQ_SLOT(slotOrientationChanged(int)));
} }
} }
menu->insertItem(SmallIcon("reload"), i18n("Orientation"), orientationMenu);
} }
TQStringList rr = currentScreen()->refreshRates(currentScreen()->proposedSize()); TQStringList rr = currentScreen()->refreshRates(currentScreen()->proposedSize());
if (rr.count()) if (rr.count())
menu->insertTitle(SmallIcon("clock"), i18n("Refresh Rate")); {
TDEPopupMenu *refreshRatesMenu = new TDEPopupMenu(menu);
int i = 0; int i = 0;
for (TQStringList::Iterator it = rr.begin(); it != rr.end(); ++it, i++) { for (TQStringList::Iterator it = rr.begin(); it != rr.end(); ++it, i++)
lastIndex = menu->insertItem(*it); {
lastIndex = refreshRatesMenu->insertItem(*it);
if (currentScreen()->proposedRefreshRate() == i) if (currentScreen()->proposedRefreshRate() == i)
menu->setItemChecked(lastIndex, true); {
refreshRatesMenu->setItemChecked(lastIndex, true);
}
menu->setItemParameter(lastIndex, i); refreshRatesMenu->setItemParameter(lastIndex, i);
menu->connectItem(lastIndex, this, TQ_SLOT(slotRefreshRateChanged(int))); refreshRatesMenu->connectItem(lastIndex, this, TQ_SLOT(slotRefreshRateChanged(int)));
}
menu->insertItem(SmallIcon("clock"), i18n("Refresh Rate"), refreshRatesMenu);
} }
} }
@ -738,86 +752,89 @@ void KRandRSystemTray::findPrimaryDisplay()
} }
} }
void KRandRSystemTray::addOutputMenu(TDEPopupMenu* menu) void KRandRSystemTray::addOutputMenu(TDEPopupMenu *menu)
{ {
XRROutputInfo *output_info; XRROutputInfo *output_info;
char *output_name; char *output_name;
int i;
int lastIndex = 0; int lastIndex = 0;
int connected_displays = 0; int connected_displays = 0;
if (isValid() == true) { if (isValid())
menu->insertTitle(SmallIcon("kcmkwm"), i18n("Output Port")); {
TDEPopupMenu *outputMenu = new TDEPopupMenu(menu);
for (i = 0; i < randr_screen_info->n_output; i++) { // Look for active (i.e. switched on) outputs
for (int i = 0; i < randr_screen_info->n_output; i++)
{
output_info = randr_screen_info->outputs[i]->info; output_info = randr_screen_info->outputs[i]->info;
// Look for ON outputs if (!randr_screen_info->outputs[i]->cur_crtc)
if (!randr_screen_info->outputs[i]->cur_crtc) { {
continue; continue;
} }
if (RR_Disconnected == randr_screen_info->outputs[i]->info->connection) { if (RR_Disconnected == randr_screen_info->outputs[i]->info->connection)
{
continue; continue;
} }
output_name = output_info->name; output_name = output_info->name;
//printf("ON: Found output %s\n", output_name); lastIndex = outputMenu->insertItem(i18n("%1 (Active)").arg(output_name));
outputMenu->setItemChecked(lastIndex, true);
lastIndex = menu->insertItem(i18n("%1 (Active)").arg(output_name)); outputMenu->connectItem(lastIndex, this, TQ_SLOT(slotOutputChanged(int)));
menu->setItemChecked(lastIndex, true); outputMenu->setItemParameter(lastIndex, i);
menu->connectItem(lastIndex, this, TQ_SLOT(slotOutputChanged(int)));
menu->setItemParameter(lastIndex, i);
connected_displays++; connected_displays++;
} }
for (i = 0; i < randr_screen_info->n_output; i++) { // Look for inactive (i.e. switched off) but connected outputs
for (int i = 0; i < randr_screen_info->n_output; i++)
{
output_info = randr_screen_info->outputs[i]->info; output_info = randr_screen_info->outputs[i]->info;
// Look for CONNECTED outputs.... if (RR_Disconnected == randr_screen_info->outputs[i]->info->connection)
if (RR_Disconnected == randr_screen_info->outputs[i]->info->connection) { {
continue; continue;
} }
// ...that are not ON if (randr_screen_info->outputs[i]->cur_crtc)
if (randr_screen_info->outputs[i]->cur_crtc) { {
continue; continue;
} }
output_name = output_info->name; output_name = output_info->name;
//printf("CONNECTED, NOT ON: Found output %s\n", output_name); lastIndex = outputMenu->insertItem(i18n("%1 (Connected, Inactive)").arg(output_name));
outputMenu->setItemChecked(lastIndex, false);
lastIndex = menu->insertItem(i18n("%1 (Connected, Inactive)").arg(output_name)); outputMenu->connectItem(lastIndex, this, TQ_SLOT(slotOutputChanged(int)));
menu->setItemChecked(lastIndex, false); outputMenu->setItemParameter(lastIndex, i);
menu->connectItem(lastIndex, this, TQ_SLOT(slotOutputChanged(int)));
menu->setItemParameter(lastIndex, i);
connected_displays++; connected_displays++;
} }
for (i = 0; i < randr_screen_info->n_output; i++) { // Look for all outputs that are not connected
for (int i = 0; i < randr_screen_info->n_output; i++)
{
output_info = randr_screen_info->outputs[i]->info; output_info = randr_screen_info->outputs[i]->info;
// Look for ALL outputs that are not connected.... if (RR_Disconnected != randr_screen_info->outputs[i]->info->connection)
if (RR_Disconnected != randr_screen_info->outputs[i]->info->connection) { {
continue; continue;
} }
// ...or ON if (randr_screen_info->outputs[i]->cur_crtc)
if (randr_screen_info->outputs[i]->cur_crtc) { {
continue; continue;
} }
output_name = output_info->name; output_name = output_info->name;
//printf("DISCONNECTED, NOT ON: Found output %s\n", output_name); lastIndex = outputMenu->insertItem(i18n("%1 (Disconnected, Inactive)").arg(output_name));
outputMenu->setItemChecked(lastIndex, false);
lastIndex = menu->insertItem(i18n("%1 (Disconnected, Inactive)").arg(output_name)); outputMenu->setItemEnabled(lastIndex, false);
menu->setItemChecked(lastIndex, false); outputMenu->connectItem(lastIndex, this, TQ_SLOT(slotOutputChanged(int)));
menu->setItemEnabled(lastIndex, false); outputMenu->setItemParameter(lastIndex, i);
menu->connectItem(lastIndex, this, TQ_SLOT(slotOutputChanged(int)));
menu->setItemParameter(lastIndex, i);
} }
lastIndex = menu->insertItem(SmallIcon("forward"), i18n("Next available output")); if (connected_displays >= 2)
if (connected_displays < 2) { {
menu->setItemEnabled(lastIndex, false); lastIndex = outputMenu->insertItem(SmallIcon("forward"), i18n("Next available output"));
outputMenu->connectItem(lastIndex, this, TQ_SLOT(slotCycleDisplays()));
} }
menu->connectItem(lastIndex, this, TQ_SLOT(slotCycleDisplays()));
menu->insertItem(SmallIcon("kcmkwm"), i18n("Output Port"), outputMenu);
} }
} }

Loading…
Cancel
Save