diff options
-rw-r--r-- | kcontrol/randr/tderandrtray.cpp | 283 |
1 files changed, 150 insertions, 133 deletions
diff --git a/kcontrol/randr/tderandrtray.cpp b/kcontrol/randr/tderandrtray.cpp index a5613eb2e..c9be62354 100644 --- a/kcontrol/randr/tderandrtray.cpp +++ b/kcontrol/randr/tderandrtray.cpp @@ -253,25 +253,28 @@ 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++) { - setCurrentScreen(s); - if (s == screenIndexOfWidget(this)) { - /*lastIndex = menu->insertItem(i18n("Screen %1").arg(s+1)); - menu->setItemEnabled(lastIndex, false);*/ - } else { - TDEPopupMenu* subMenu = new TDEPopupMenu(menu, TQString("screen%1").arg(s+1).latin1()); - m_screenPopups.append(subMenu); - populateMenu(subMenu); - lastIndex = menu->insertItem(i18n("Screen %1").arg(s+1), subMenu); - connect(subMenu, TQ_SIGNAL(activated(int)), TQ_SLOT(slotScreenActivated())); + if (numScreens() > 1) + { + int screenOfWidget = screenIndexOfWidget(this); + for (int s = 0; s < numScreens(); s++) + { + setCurrentScreen(s); + if (s != screenOfWidget) + { + TDEPopupMenu *subMenu = new TDEPopupMenu(menu, TQString("screen%1").arg(s+1).latin1()); + m_screenPopups.append(subMenu); + 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); // Find any user ICC profiles - TQStringList cfgProfiles; - cfgProfiles = t_config->groupList(); - if (cfgProfiles.isEmpty() == false) { - menu->insertTitle(SmallIcon("kcoloredit"), i18n("Color Profile")); - } - for (TQStringList::Iterator t(cfgProfiles.begin()); t != cfgProfiles.end(); ++t) { - lastIndex = menu->insertItem(*t); - if (t_config->readEntry("CurrentProfile") == (*t)) { - menu->setItemChecked(lastIndex, true); + 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); + } + 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); @@ -411,74 +414,85 @@ int KRandRSystemTray::GetHackResolutionParameter() { return resparm; } -void KRandRSystemTray::populateMenu(TDEPopupMenu* menu) +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++) { + int *sizeSort = new int[numSizes]; + 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")); - - int i = 0; - for (TQStringList::Iterator it = rr.begin(); it != rr.end(); ++it, i++) { - lastIndex = menu->insertItem(*it); - - if (currentScreen()->proposedRefreshRate() == i) - menu->setItemChecked(lastIndex, true); + { + TDEPopupMenu *refreshRatesMenu = new TDEPopupMenu(menu); + int i = 0; + for (TQStringList::Iterator it = rr.begin(); it != rr.end(); ++it, i++) + { + lastIndex = refreshRatesMenu->insertItem(*it); + if (currentScreen()->proposedRefreshRate() == i) + { + 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); } } @@ -738,86 +752,89 @@ void KRandRSystemTray::findPrimaryDisplay() } } -void KRandRSystemTray::addOutputMenu(TDEPopupMenu* menu) +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); } } |