summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2024-11-24 13:32:30 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2024-11-26 23:20:51 +0900
commite8f9f4591343bf1d0fbd9bbdaa568f4392957e43 (patch)
treeb26a60f445d48ef04c83713d76ed0fa63980d7f0
parent6a5431ca30193c71fefed3d108423e9ba6e8b8b8 (diff)
downloadtdebase-e8f9f4591343bf1d0fbd9bbdaa568f4392957e43.tar.gz
tdebase-e8f9f4591343bf1d0fbd9bbdaa568f4392957e43.zip
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> (cherry picked from commit a555786bf77db35bc9fbe4e5d1a793415a346322)
-rw-r--r--kcontrol/randr/tderandrtray.cpp283
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);
}
}