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,20 +253,22 @@ void KRandRSystemTray::contextMenuAboutToShow(TDEPopupMenu* menu)
menu->setCheckable(true);
bool valid = isValid();
if (!valid) {
if (!valid)
{
lastIndex = menu->insertItem(i18n("Required X Extension Not Available"));
menu->setItemEnabled(lastIndex, false);
}
else {
else
{
m_screenPopups.clear();
for (int s = 0; s < numScreens() /*&& numScreens() > 1 */; s++) {
if (numScreens() > 1)
{
int screenOfWidget = screenIndexOfWidget(this);
for (int s = 0; s < numScreens(); s++)
{
setCurrentScreen(s);
if (s == screenIndexOfWidget(this)) {
/*lastIndex = menu->insertItem(i18n("Screen %1").arg(s+1));
menu->setItemEnabled(lastIndex, false);*/
} else {
if (s != screenOfWidget)
{
TDEPopupMenu *subMenu = new TDEPopupMenu(menu, TQString("screen%1").arg(s+1).latin1());
m_screenPopups.append(subMenu);
populateMenu(subMenu);
@ -274,6 +276,7 @@ void KRandRSystemTray::contextMenuAboutToShow(TDEPopupMenu* menu)
connect(subMenu, TQ_SIGNAL(activated(int)), TQ_SLOT(slotScreenActivated()));
}
}
}
setCurrentScreen(screenIndexOfWidget(this));
populateMenu(menu);
@ -282,52 +285,52 @@ void KRandRSystemTray::contextMenuAboutToShow(TDEPopupMenu* menu)
addOutputMenu(menu);
// Find any user ICC profiles
TQStringList cfgProfiles;
cfgProfiles = t_config->groupList();
if (cfgProfiles.isEmpty() == false) {
menu->insertTitle(SmallIcon("kcoloredit"), i18n("Color Profile"));
TQStringList cfgProfiles = t_config->groupList();
if (!cfgProfiles.isEmpty())
{
TDEPopupMenu *profileMenu = new TDEPopupMenu(menu);
for (TQStringList::Iterator t(cfgProfiles.begin()); t != cfgProfiles.end(); ++t)
{
lastIndex = profileMenu->insertItem(*t);
if (t_config->readEntry("CurrentProfile") == (*t))
{
profileMenu->setItemChecked(lastIndex, true);
}
for (TQStringList::Iterator t(cfgProfiles.begin()); t != cfgProfiles.end(); ++t) {
lastIndex = menu->insertItem(*t);
if (t_config->readEntry("CurrentProfile") == (*t)) {
menu->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->connectItem(lastIndex, this, TQ_SLOT(slotColorProfileChanged(int)));
menu->insertItem(SmallIcon("kcoloredit"), i18n("Color Profile"), profileMenu);
}
if (valid) {
if (valid)
{
// Find any display profiles
TQStringList displayProfiles;
displayProfiles = getDisplayConfigurationProfiles(locateLocal("config", "/", true));
if (!displayProfiles.isEmpty()) {
menu->insertTitle(SmallIcon("background"), i18n("Display Profiles"));
lastIndex = menu->insertItem(SmallIcon("bookmark"), "<default>");
menu->connectItem(lastIndex, this, TQ_SLOT(slotDisplayProfileChanged(int)));
for (TQStringList::Iterator t(displayProfiles.begin()); t != displayProfiles.end(); ++t) {
lastIndex = menu->insertItem(SmallIcon("bookmark"), *t);
menu->connectItem(lastIndex, this, TQ_SLOT(slotDisplayProfileChanged(int)));
TQStringList displayProfiles = getDisplayConfigurationProfiles(locateLocal("config", "/", true));
if (!displayProfiles.isEmpty())
{
TDEPopupMenu *displayProfileMenu = new TDEPopupMenu(menu);
lastIndex = displayProfileMenu->insertItem(SmallIcon("bookmark"), "<default>");
displayProfileMenu->connectItem(lastIndex, this, TQ_SLOT(slotDisplayProfileChanged(int)));
for (TQStringList::Iterator t(displayProfiles.begin()); t != displayProfiles.end(); ++t)
{
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"));
TDEAction *actColors = new TDEAction( i18n( "Configure Displays..." ),
SmallIconSet( "configure" ), TDEShortcut(), this, TQ_SLOT( slotDisplayConfig() ),
actionCollection() );
actColors->plug( menu );
// TDEAction *actPrefs = new TDEAction( i18n( "Configure Display..." ),
// SmallIconSet( "configure" ), TDEShortcut(), this, TQ_SLOT( slotPrefs() ),
// actionCollection() );
// actPrefs->plug( menu );
TDEAction *actSKeys = new TDEAction( i18n( "Configure Shortcut Keys..." ),
SmallIconSet( "configure" ), TDEShortcut(), this, TQ_SLOT( slotSKeys() ),
actionCollection() );
actSKeys->plug( menu );
// Config menu
TDEPopupMenu *configMenu = new TDEPopupMenu(menu);
TDEAction *actColors = new TDEAction(i18n("Configure Displays..."), SmallIconSet("configure"),
TDEShortcut(), this, TQ_SLOT(slotDisplayConfig()), actionCollection());
actColors->plug(configMenu);
TDEAction *actSKeys = new TDEAction(i18n("Configure Shortcut Keys..."), SmallIconSet("configure"),
TDEShortcut(), this, TQ_SLOT(slotSKeys()), actionCollection());
actSKeys->plug(configMenu);
menu->insertItem(SmallIcon("randr"), i18n("Global Configuration"), configMenu);
menu->insertSeparator();
menu->insertItem(SmallIcon("help"),KStdGuiItem::help().text(), m_help->menu());
TDEAction *quitAction = actionCollection()->action(KStdAction::name(KStdAction::Quit));
quitAction->plug(menu);
@ -413,72 +416,83 @@ int KRandRSystemTray::GetHackResolutionParameter() {
void KRandRSystemTray::populateMenu(TDEPopupMenu *menu)
{
int lastIndex = 0;
menu->insertTitle(SmallIcon("view-fullscreen"), i18n("Screen Size"));
int lastIndex;
int numSizes = currentScreen()->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);
}
for (int j = 0; j < numSizes; j++) {
int highest = -1, highestIndex = -1;
for (int i = 0; i < numSizes; i++) {
if (sizeSort[i] && sizeSort[i] > highest) {
TDEPopupMenu *screenSizeMenu = new TDEPopupMenu(menu);
for (int j = 0; j < numSizes; j++)
{
int highest = 0, highestIndex = -1;
for (int i = 0; i < numSizes; i++)
{
if (sizeSort[i] > highest)
{
highest = sizeSort[i];
highestIndex = i;
}
}
sizeSort[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)
menu->setItemChecked(lastIndex, true);
{
screenSizeMenu->setItemChecked(lastIndex, true);
}
menu->setItemParameter(lastIndex, highestIndex);
menu->connectItem(lastIndex, this, TQ_SLOT(slotResolutionChanged(int)));
screenSizeMenu->setItemParameter(lastIndex, highestIndex);
screenSizeMenu->connectItem(lastIndex, this, TQ_SLOT(slotResolutionChanged(int)));
}
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)
// XFree86 4.3 does not include rotation support.
if (currentScreen()->rotations() != RandRScreen::Rotate0) {
menu->insertTitle(SmallIcon("reload"), i18n("Orientation"));
for (int i = 0; i < 6; i++) {
if ((1 << i) & currentScreen()->rotations()) {
lastIndex = menu->insertItem(currentScreen()->rotationIcon(1 << i), RandRScreen::rotationName(1 << i));
if (currentScreen()->rotations() != RandRScreen::Rotate0)
{
TDEPopupMenu *orientationMenu = new TDEPopupMenu(menu);
for (int i = 0; i < 6; i++)
{
if ((1 << i) & currentScreen()->rotations())
{
lastIndex = orientationMenu->insertItem(currentScreen()->rotationIcon(1 << i), RandRScreen::rotationName(1 << i));
if (currentScreen()->proposedRotation() & (1 << i))
menu->setItemChecked(lastIndex, true);
{
orientationMenu->setItemChecked(lastIndex, true);
}
menu->setItemParameter(lastIndex, 1 << i);
menu->connectItem(lastIndex, this, TQ_SLOT(slotOrientationChanged(int)));
orientationMenu->setItemParameter(lastIndex, 1 << i);
orientationMenu->connectItem(lastIndex, this, TQ_SLOT(slotOrientationChanged(int)));
}
}
menu->insertItem(SmallIcon("reload"), i18n("Orientation"), orientationMenu);
}
TQStringList rr = currentScreen()->refreshRates(currentScreen()->proposedSize());
if (rr.count())
menu->insertTitle(SmallIcon("clock"), i18n("Refresh Rate"));
{
TDEPopupMenu *refreshRatesMenu = new TDEPopupMenu(menu);
int i = 0;
for (TQStringList::Iterator it = rr.begin(); it != rr.end(); ++it, i++) {
lastIndex = menu->insertItem(*it);
for (TQStringList::Iterator it = rr.begin(); it != rr.end(); ++it, i++)
{
lastIndex = refreshRatesMenu->insertItem(*it);
if (currentScreen()->proposedRefreshRate() == i)
menu->setItemChecked(lastIndex, true);
{
refreshRatesMenu->setItemChecked(lastIndex, true);
}
menu->setItemParameter(lastIndex, i);
menu->connectItem(lastIndex, this, TQ_SLOT(slotRefreshRateChanged(int)));
refreshRatesMenu->setItemParameter(lastIndex, i);
refreshRatesMenu->connectItem(lastIndex, this, TQ_SLOT(slotRefreshRateChanged(int)));
}
menu->insertItem(SmallIcon("clock"), i18n("Refresh Rate"), refreshRatesMenu);
}
}
@ -742,82 +756,85 @@ void KRandRSystemTray::addOutputMenu(TDEPopupMenu* menu)
{
XRROutputInfo *output_info;
char *output_name;
int i;
int lastIndex = 0;
int connected_displays = 0;
if (isValid() == true) {
menu->insertTitle(SmallIcon("kcmkwm"), i18n("Output Port"));
if (isValid())
{
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;
// Look for ON outputs
if (!randr_screen_info->outputs[i]->cur_crtc) {
if (!randr_screen_info->outputs[i]->cur_crtc)
{
continue;
}
if (RR_Disconnected == randr_screen_info->outputs[i]->info->connection) {
if (RR_Disconnected == randr_screen_info->outputs[i]->info->connection)
{
continue;
}
output_name = output_info->name;
//printf("ON: Found output %s\n", output_name);
lastIndex = menu->insertItem(i18n("%1 (Active)").arg(output_name));
menu->setItemChecked(lastIndex, true);
menu->connectItem(lastIndex, this, TQ_SLOT(slotOutputChanged(int)));
menu->setItemParameter(lastIndex, i);
lastIndex = outputMenu->insertItem(i18n("%1 (Active)").arg(output_name));
outputMenu->setItemChecked(lastIndex, true);
outputMenu->connectItem(lastIndex, this, TQ_SLOT(slotOutputChanged(int)));
outputMenu->setItemParameter(lastIndex, i);
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;
// 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;
}
// ...that are not ON
if (randr_screen_info->outputs[i]->cur_crtc) {
if (randr_screen_info->outputs[i]->cur_crtc)
{
continue;
}
output_name = output_info->name;
//printf("CONNECTED, NOT ON: Found output %s\n", output_name);
lastIndex = menu->insertItem(i18n("%1 (Connected, Inactive)").arg(output_name));
menu->setItemChecked(lastIndex, false);
menu->connectItem(lastIndex, this, TQ_SLOT(slotOutputChanged(int)));
menu->setItemParameter(lastIndex, i);
lastIndex = outputMenu->insertItem(i18n("%1 (Connected, Inactive)").arg(output_name));
outputMenu->setItemChecked(lastIndex, false);
outputMenu->connectItem(lastIndex, this, TQ_SLOT(slotOutputChanged(int)));
outputMenu->setItemParameter(lastIndex, i);
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;
// 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;
}
// ...or ON
if (randr_screen_info->outputs[i]->cur_crtc) {
if (randr_screen_info->outputs[i]->cur_crtc)
{
continue;
}
output_name = output_info->name;
//printf("DISCONNECTED, NOT ON: Found output %s\n", output_name);
lastIndex = menu->insertItem(i18n("%1 (Disconnected, Inactive)").arg(output_name));
menu->setItemChecked(lastIndex, false);
menu->setItemEnabled(lastIndex, false);
menu->connectItem(lastIndex, this, TQ_SLOT(slotOutputChanged(int)));
menu->setItemParameter(lastIndex, i);
lastIndex = outputMenu->insertItem(i18n("%1 (Disconnected, Inactive)").arg(output_name));
outputMenu->setItemChecked(lastIndex, false);
outputMenu->setItemEnabled(lastIndex, false);
outputMenu->connectItem(lastIndex, this, TQ_SLOT(slotOutputChanged(int)));
outputMenu->setItemParameter(lastIndex, i);
}
lastIndex = menu->insertItem(SmallIcon("forward"), i18n("Next available output"));
if (connected_displays < 2) {
menu->setItemEnabled(lastIndex, false);
if (connected_displays >= 2)
{
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