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:33 +0900
commita555786bf77db35bc9fbe4e5d1a793415a346322 (patch)
tree568a39c74c8dd3bd3039262877500496dc62d6eb
parentf5175bff4e0f2d4901151acf4dd2420873cf60e9 (diff)
downloadtdebase-a555786bf77db35bc9fbe4e5d1a793415a346322.tar.gz
tdebase-a555786bf77db35bc9fbe4e5d1a793415a346322.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>
-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);
}
}