summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Pearson <[email protected]>2013-01-09 16:39:31 -0600
committerTimothy Pearson <[email protected]>2013-01-09 16:39:31 -0600
commite88baf8334b8ff7ce92e555cbaffee949672d4b8 (patch)
treecaac57be5b2bb29eef81ffb58341829e2571ebb3
parent477e956a04dfb244814f274e98a8d6f4beb84f3f (diff)
downloadtdebase-e88baf8334b8ff7ce92e555cbaffee949672d4b8.tar.gz
tdebase-e88baf8334b8ff7ce92e555cbaffee949672d4b8.zip
Automatically deactivate disconnected display devices
Notify user on display add/remove/change Add advanced display configuration option to krandr menu Add option to autohide kicker panels on inactive Xinerama screens and enable by default Update hwmanager treeview on device change
-rw-r--r--kcontrol/displayconfig/displayconfig.cpp29
-rw-r--r--kcontrol/displayconfig/displayconfig.h2
-rw-r--r--kcontrol/displayconfig/displayconfigbase.ui79
-rw-r--r--kcontrol/hwmanager/hwmanager.cpp20
-rw-r--r--kcontrol/hwmanager/hwmanager.h1
-rw-r--r--kcontrol/kicker/extensionInfo.cpp75
-rw-r--r--kcontrol/kicker/extensionInfo.h1
-rw-r--r--kcontrol/kicker/hidingtab.ui14
-rw-r--r--kcontrol/kicker/hidingtab_impl.cpp8
-rw-r--r--kcontrol/randr/krandrtray.cpp118
-rw-r--r--kcontrol/randr/krandrtray.h5
-rw-r--r--kcontrol/taskbar/kcmtaskbar.cpp4
-rw-r--r--kcontrol/taskbar/kcmtaskbarui.ui32
-rw-r--r--kicker/kicker/core/container_extension.cpp19
-rw-r--r--kicker/kicker/core/extensionSettings.kcfg5
15 files changed, 283 insertions, 129 deletions
diff --git a/kcontrol/displayconfig/displayconfig.cpp b/kcontrol/displayconfig/displayconfig.cpp
index faeffa1f5..47c45a3a9 100644
--- a/kcontrol/displayconfig/displayconfig.cpp
+++ b/kcontrol/displayconfig/displayconfig.cpp
@@ -447,7 +447,7 @@ void KDisplayConfig::updateDraggableMonitorInformationInternal (int monitor_id,
}
TQString rotationDesired = *screendata->rotations.at(screendata->current_rotation_index);
- bool isvisiblyrotated = ((rotationDesired == "Rotate 90 degrees") || (rotationDesired == "Rotate 270 degrees"));
+ bool isvisiblyrotated = ((rotationDesired == ROTATION_90_DEGREES_STRING) || (rotationDesired == ROTATION_270_DEGREES_STRING));
if (screendata->is_extended) {
moved_monitor->show();
@@ -742,6 +742,8 @@ void KDisplayConfig::setRealResolutionSliderValue(int index) {
KDisplayConfig::KDisplayConfig(TQWidget *parent, const char *name, const TQStringList &)
: KCModule(KDisplayCFactory::instance(), parent, name), iccTab(0), m_randrsimple(0), m_gammaApplyTimer(0)
{
+ TDEHardwareDevices *hwdevices = KGlobal::hardwareDevices();
+ connect(hwdevices, TQT_SIGNAL(hardwareUpdated(TDEGenericDevice*)), this, TQT_SLOT(deviceChanged(TDEGenericDevice*)));
m_randrsimple = new KRandrSimpleAPI();
@@ -773,9 +775,18 @@ KDisplayConfig::KDisplayConfig(TQWidget *parent, const char *name, const TQStrin
base->systemEnableSupport->setText(i18n("&Enable local display control for this session"));
}
- setRootOnlyMsg(i18n("<b>The global display configuration is a system wide setting, and requires administrator access</b><br>To alter the system's global display configuration, click on the \"Administrator Mode\" button below.<br>Otherwise, you may change your session-specific display configuration below."));
+// setRootOnlyMsg(i18n("<b>The global display configuration is a system wide setting, and requires administrator access</b><br>To alter the system's global display configuration, click on the \"Administrator Mode\" button below.<br>Otherwise, you may change your session-specific display configuration below."));
// setUseRootOnlyMsg(true); // Setting this hides the Apply button!
+ base->nonRootWarningLabel->setFrameShape(TQFrame::Box);
+ base->nonRootWarningLabel->setFrameShadow(TQFrame::Raised);
+ if (getuid() != 0) {
+ base->nonRootWarningLabel->setText(i18n("<b>The global display configuration is a system wide setting, and requires administrator access</b><br>To alter the system's global display configuration, click on the \"Administrator Mode\" button below.<br>Otherwise, you may change your session-specific display configuration below."));
+ }
+ else {
+ base->nonRootWarningLabel->hide();
+ }
+
connect(base->systemEnableSupport, TQT_SIGNAL(clicked()), TQT_SLOT(changed()));
connect(base->systemEnableSupport, TQT_SIGNAL(clicked()), TQT_SLOT(processLockoutControls()));
connect(base->monitorDisplaySelectDD, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
@@ -833,6 +844,16 @@ KDisplayConfig::~KDisplayConfig()
}
}
+void KDisplayConfig::deviceChanged (TDEGenericDevice* device) {
+ if (device->type() == TDEGenericDeviceType::Monitor) {
+ if (base->rescanHardware->isEnabled()) {
+ base->rescanHardware->setEnabled(false);
+ rescanHardware();
+ base->rescanHardware->setEnabled(true);
+ }
+ }
+}
+
void KDisplayConfig::updateExtendedMonitorInformation () {
SingleScreenData *screendata;
@@ -987,7 +1008,7 @@ void KDisplayConfig::updateDisplayedInformation () {
base->orientationVFlip->setChecked(screendata->has_y_flip);
}
else {
- base->rotationSelectDD->insertItem("Normal", 0);
+ base->rotationSelectDD->insertItem(ROTATION_0_DEGREES_STRING, 0);
base->rotationSelectDD->setCurrentItem(0);
base->orientationHFlip->hide();
base->orientationVFlip->hide();
@@ -1097,7 +1118,7 @@ void KDisplayConfig::updateDragDropDisplay() {
screendata = m_screenInfoArray.at(i);
if (((j==0) && (screendata->is_primary==true)) || ((j==1) && (screendata->is_primary==false))) { // This ensures that the primary monitor is always the first one created and placed on the configuration widget
TQString rotationDesired = *screendata->rotations.at(screendata->current_rotation_index);
- bool isvisiblyrotated = ((rotationDesired == "Rotate 90 degrees") || (rotationDesired == "Rotate 270 degrees"));
+ bool isvisiblyrotated = ((rotationDesired == ROTATION_90_DEGREES_STRING) || (rotationDesired == ROTATION_270_DEGREES_STRING));
DraggableMonitor *m = new DraggableMonitor( base->monitorPhyArrange, 0, WStyle_Customize | WDestructiveClose | WStyle_NoBorder | WX11BypassWM );
connect(m, TQT_SIGNAL(workspaceRelayoutNeeded()), this, TQT_SLOT(layoutDragDropDisplay()));
connect(m, TQT_SIGNAL(monitorSelected(int)), this, TQT_SLOT(selectScreen(int)));
diff --git a/kcontrol/displayconfig/displayconfig.h b/kcontrol/displayconfig/displayconfig.h
index 53541d8f8..8f7681c81 100644
--- a/kcontrol/displayconfig/displayconfig.h
+++ b/kcontrol/displayconfig/displayconfig.h
@@ -35,6 +35,7 @@
#include <dcopobject.h>
#include <libkrandr/libkrandr.h>
+#include <tdehardwaredevices.h>
#include "monitorworkspace.h"
#include "displayconfigbase.h"
@@ -128,6 +129,7 @@ private slots:
void gammaTargetChanged (int slotNumber);
void dpmsChanged (void);
void processDPMSControls (void);
+ void deviceChanged (TDEGenericDevice*);
};
#endif
diff --git a/kcontrol/displayconfig/displayconfigbase.ui b/kcontrol/displayconfig/displayconfigbase.ui
index 3ea1c57e7..dfa7e57fd 100644
--- a/kcontrol/displayconfig/displayconfigbase.ui
+++ b/kcontrol/displayconfig/displayconfigbase.ui
@@ -26,7 +26,12 @@
<property name="name">
<cstring>unnamed</cstring>
</property>
- <widget class="TQGroupBox" row="0" column="0">
+ <widget class="TQLabel" row="0" column="0">
+ <property name="name">
+ <cstring>nonRootWarningLabel</cstring>
+ </property>
+ </widget>
+ <widget class="TQGroupBox" row="1" column="0">
<property name="name">
<cstring>groupSystemSettings</cstring>
</property>
@@ -47,7 +52,7 @@
</widget>
</grid>
</widget>
- <spacer row="1" column="0">
+ <spacer row="2" column="0">
<property name="name" stdset="0">
<cstring>Spacer4</cstring>
</property>
@@ -225,7 +230,15 @@
<property name="name">
<cstring>unnamed</cstring>
</property>
- <widget class="KComboBox" row="0" column="0" colspan="1">
+ <widget class="TQLabel" row="0" column="0" colspan="1">
+ <property name="name">
+ <cstring>textLabel7_9</cstring>
+ </property>
+ <property name="text">
+ <string>Rotate screen by:</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="1" column="0" colspan="1">
<property name="name">
<cstring>rotationSelectDD</cstring>
</property>
@@ -265,36 +278,46 @@
</property>
</widget>
<widget class="KPushButton" row="8" column="0" colspan="1">
- <property name="name">
- <cstring>rescanHardware</cstring>
- </property>
- <property name="text">
- <string>&amp;Rescan Displays</string>
- </property>
+ <property name="name">
+ <cstring>rescanHardware</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Rescan Displays</string>
+ </property>
</widget>
<widget class="KPushButton" row="8" column="1" colspan="1">
- <property name="name">
- <cstring>loadExistingProfile</cstring>
- </property>
- <property name="text">
- <string>Load &amp;Existing Profile</string>
- </property>
+ <property name="name">
+ <cstring>loadExistingProfile</cstring>
+ </property>
+ <property name="text">
+ <string>Load &amp;Existing Profile</string>
+ </property>
</widget>
- <widget class="KPushButton" row="8" column="2" colspan="1">
+ <widget class="TQLayoutWidget" row="8" column="3" colspan="1">
<property name="name">
- <cstring>previewConfiguration</cstring>
- </property>
- <property name="text">
- <string>&amp;Test Settings</string>
- </property>
- </widget>
- <widget class="KPushButton" row="8" column="3" colspan="1">
- <property name="name">
- <cstring>identifyMonitors</cstring>
- </property>
- <property name="text">
- <string>&amp;Identify</string>
+ <cstring>layout7</cstring>
</property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton" row="8" column="0" colspan="1">
+ <property name="name">
+ <cstring>previewConfiguration</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Test Settings</string>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="8" column="1" colspan="1">
+ <property name="name">
+ <cstring>identifyMonitors</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Identify</string>
+ </property>
+ </widget>
+ </hbox>
</widget>
</grid>
</widget>
diff --git a/kcontrol/hwmanager/hwmanager.cpp b/kcontrol/hwmanager/hwmanager.cpp
index 36dc89b3e..936a8ab38 100644
--- a/kcontrol/hwmanager/hwmanager.cpp
+++ b/kcontrol/hwmanager/hwmanager.cpp
@@ -90,7 +90,7 @@ TDEHWManager::TDEHWManager(TQWidget *parent, const char *name, const TQStringLis
connect(hwdevices, TQT_SIGNAL(hardwareAdded(TDEGenericDevice*)), this, TQT_SLOT(populateTreeView()));
connect(hwdevices, TQT_SIGNAL(hardwareRemoved(TDEGenericDevice*)), this, TQT_SLOT(populateTreeView()));
-// connect(hwdevices, TQT_SIGNAL(hardwareUpdated(TDEGenericDevice*)), this, TQT_SLOT(populateTreeView()));
+ connect(hwdevices, TQT_SIGNAL(hardwareUpdated(TDEGenericDevice*)), this, TQT_SLOT(deviceChanged(TDEGenericDevice*)));
load();
@@ -188,6 +188,24 @@ void TDEHWManager::populateTreeViewLeaf(DeviceIconItem *parent, bool show_by_con
}
}
+void TDEHWManager::deviceChanged(TDEGenericDevice* device) {
+ TQListViewItemIterator it(base->deviceTree);
+ while (it.current()) {
+ DeviceIconItem* item = dynamic_cast<DeviceIconItem*>(it.current());
+ if (item) {
+ TDEGenericDevice* candidate = item->device();
+ if (candidate) {
+ if (candidate->systemPath() == device->systemPath()) {
+ if (item->text(0) != device->friendlyName()) {
+ item->setText(0, device->friendlyName());
+ }
+ }
+ }
+ }
+ ++it;
+ }
+}
+
TQString TDEHWManager::quickHelp() const
{
return i18n("<h1>TDE Hardware Device Manager</h1> This module allows you to configure hardware devices on your system");
diff --git a/kcontrol/hwmanager/hwmanager.h b/kcontrol/hwmanager/hwmanager.h
index a7c9749a7..1847f4f33 100644
--- a/kcontrol/hwmanager/hwmanager.h
+++ b/kcontrol/hwmanager/hwmanager.h
@@ -60,6 +60,7 @@ k_dcop:
private slots:
void populateTreeView();
void populateTreeViewLeaf(DeviceIconItem *parent, bool show_by_connection, TQString selected_syspath);
+ void deviceChanged(TDEGenericDevice*);
private:
TDEHWManagerBase *base;
diff --git a/kcontrol/kicker/extensionInfo.cpp b/kcontrol/kicker/extensionInfo.cpp
index 88745b9e2..91e19e2d3 100644
--- a/kcontrol/kicker/extensionInfo.cpp
+++ b/kcontrol/kicker/extensionInfo.cpp
@@ -124,21 +124,22 @@ void ExtensionInfo::load()
KConfig c(_configFile);
c.setGroup("General");
- _position = c.readNumEntry ("Position", _position);
- _alignment = c.readNumEntry ("Alignment", _alignment);
- _xineramaScreen = c.readNumEntry ("XineramaScreen", _xineramaScreen);
- _showLeftHB = c.readBoolEntry("ShowLeftHideButton", _showLeftHB);
- _showRightHB = c.readBoolEntry("ShowRightHideButton", _showRightHB);
- _hideButtonSize = c.readNumEntry ("HideButtonSize", _hideButtonSize);
- _autohidePanel = c.readBoolEntry("AutoHidePanel", _autohidePanel);
- _backgroundHide = c.readBoolEntry("BackgroundHide", _backgroundHide);
- _autoHideSwitch = c.readBoolEntry("AutoHideSwitch", _autoHideSwitch);
- _autoHideDelay = c.readNumEntry ("AutoHideDelay", _autoHideDelay);
- _hideAnim = c.readBoolEntry("HideAnimation", _hideAnim);
- _hideAnimSpeed = c.readNumEntry ("HideAnimationSpeed", _hideAnimSpeed);
- _unhideLocation = c.readNumEntry ("UnhideLocation", _unhideLocation);
- _sizePercentage = c.readNumEntry ("SizePercentage", _sizePercentage);
- _expandSize = c.readBoolEntry("ExpandSize", _expandSize);
+ _position = c.readNumEntry ("Position", _position);
+ _alignment = c.readNumEntry ("Alignment", _alignment);
+ _xineramaScreen = c.readNumEntry ("XineramaScreen", _xineramaScreen);
+ _showLeftHB = c.readBoolEntry("ShowLeftHideButton", _showLeftHB);
+ _showRightHB = c.readBoolEntry("ShowRightHideButton", _showRightHB);
+ _hideButtonSize = c.readNumEntry ("HideButtonSize", _hideButtonSize);
+ _autohidePanel = c.readBoolEntry("AutoHidePanel", _autohidePanel);
+ _backgroundHide = c.readBoolEntry("BackgroundHide", _backgroundHide);
+ _autoHideSwitch = c.readBoolEntry("AutoHideSwitch", _autoHideSwitch);
+ _xineramaHideSwitch = c.readBoolEntry("XineramaHideSwitch", _xineramaHideSwitch);
+ _autoHideDelay = c.readNumEntry ("AutoHideDelay", _autoHideDelay);
+ _hideAnim = c.readBoolEntry("HideAnimation", _hideAnim);
+ _hideAnimSpeed = c.readNumEntry ("HideAnimationSpeed", _hideAnimSpeed);
+ _unhideLocation = c.readNumEntry ("UnhideLocation", _unhideLocation);
+ _sizePercentage = c.readNumEntry ("SizePercentage", _sizePercentage);
+ _expandSize = c.readBoolEntry("ExpandSize", _expandSize);
if (_resizeable)
{
@@ -196,27 +197,28 @@ void ExtensionInfo::configChanged()
void ExtensionInfo::setDefaults()
{
// defaults
- _position = 3;
- _alignment = TQApplication::reverseLayout() ? 2 : 0;
- _xineramaScreen = TQApplication::desktop()->primaryScreen();
- _size = 2;
- _showLeftHB = false;
- _showRightHB = true;
- _hideButtonSize = 14;
- _autohidePanel = false;
- _backgroundHide = false;
- _autoHideSwitch = false;
- _autoHideDelay = 3;
- _hideAnim = true;
- _hideAnimSpeed = 40;
- _unhideLocation = 0;
- _sizePercentage = 100;
- _expandSize = true;
- _customSize = 0;
- _resizeable = false;
- _useStdSizes = false;
- _customSizeMin = 0;
- _customSizeMax = 0;
+ _position = 3;
+ _alignment = TQApplication::reverseLayout() ? 2 : 0;
+ _xineramaScreen = TQApplication::desktop()->primaryScreen();
+ _size = 2;
+ _showLeftHB = false;
+ _showRightHB = true;
+ _hideButtonSize = 14;
+ _autohidePanel = false;
+ _backgroundHide = false;
+ _autoHideSwitch = false;
+ _xineramaHideSwitch = true;
+ _autoHideDelay = 3;
+ _hideAnim = true;
+ _hideAnimSpeed = 40;
+ _unhideLocation = 0;
+ _sizePercentage = 100;
+ _expandSize = true;
+ _customSize = 0;
+ _resizeable = false;
+ _useStdSizes = false;
+ _customSizeMin = 0;
+ _customSizeMax = 0;
}
void ExtensionInfo::save()
@@ -232,6 +234,7 @@ void ExtensionInfo::save()
c.writeEntry("AutoHidePanel", _autohidePanel);
c.writeEntry("BackgroundHide", _backgroundHide);
c.writeEntry("AutoHideSwitch", _autoHideSwitch);
+ c.writeEntry("XineramaHideSwitch", _xineramaHideSwitch);
c.writeEntry("AutoHideDelay", _autoHideDelay);
c.writeEntry("HideAnimation", _hideAnim);
c.writeEntry("HideAnimationSpeed", _hideAnimSpeed);
diff --git a/kcontrol/kicker/extensionInfo.h b/kcontrol/kicker/extensionInfo.h
index 169322aa4..8c571011e 100644
--- a/kcontrol/kicker/extensionInfo.h
+++ b/kcontrol/kicker/extensionInfo.h
@@ -57,6 +57,7 @@ class ExtensionInfo
bool _autohidePanel;
bool _backgroundHide;
bool _autoHideSwitch;
+ bool _xineramaHideSwitch;
int _autoHideDelay;
bool _hideAnim;
int _hideAnimSpeed;
diff --git a/kcontrol/kicker/hidingtab.ui b/kcontrol/kicker/hidingtab.ui
index d6b85c046..11ec229b4 100644
--- a/kcontrol/kicker/hidingtab.ui
+++ b/kcontrol/kicker/hidingtab.ui
@@ -308,6 +308,20 @@
</spacer>
</hbox>
</widget>
+ <widget class="TQCheckBox" row="7" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_xineramaHide</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Hide panel when configured screen is not available</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>When this option is selected, this panel will be hidden if its Xinerama screen is not available. This panel will be automatically restored when the configured Xinerama screen is reenabked.</string>
+ </property>
+ </widget>
<widget class="TQCheckBox" row="5" column="0" rowspan="1" colspan="2">
<property name="name">
<cstring>m_autoHideSwitch</cstring>
diff --git a/kcontrol/kicker/hidingtab_impl.cpp b/kcontrol/kicker/hidingtab_impl.cpp
index 4a5a36e67..3bde445b8 100644
--- a/kcontrol/kicker/hidingtab_impl.cpp
+++ b/kcontrol/kicker/hidingtab_impl.cpp
@@ -41,8 +41,9 @@ HidingTab::HidingTab(TQWidget *parent, const char* name)
connect(m_manual,TQT_SIGNAL(toggled(bool)), TQT_SIGNAL(changed()));
connect(m_automatic, TQT_SIGNAL(toggled(bool)), TQT_SIGNAL(changed()));
connect(m_automatic, TQT_SIGNAL(toggled(bool)), TQT_SLOT(backgroundModeClicked()));
- connect(m_background,TQT_SIGNAL(toggled(bool)), TQT_SIGNAL(changed()));
+ connect(m_background, TQT_SIGNAL(toggled(bool)), TQT_SIGNAL(changed()));
connect(m_background, TQT_SIGNAL(toggled(bool)), TQT_SLOT(backgroundModeClicked()));
+ connect(m_xineramaHide, TQT_SIGNAL(toggled(bool)), TQT_SIGNAL(changed()));
connect(m_hideSlider, TQT_SIGNAL(valueChanged(int)), TQT_SIGNAL(changed()));
connect(m_delaySpinBox, TQT_SIGNAL(valueChanged(int)), TQT_SIGNAL(changed()));
connect(m_animateHiding, TQT_SIGNAL(toggled(bool)), TQT_SIGNAL(changed()));
@@ -141,6 +142,8 @@ void HidingTab::switchPanel(int panelItem)
m_manual->setChecked(true);
}
+ m_xineramaHide->setChecked(m_panelInfo->_xineramaHideSwitch);
+
m_delaySpinBox->setValue(m_panelInfo->_autoHideDelay);
m_autoHideSwitch->setChecked(m_panelInfo->_autoHideSwitch);
@@ -190,6 +193,8 @@ void HidingTab::storeInfo()
m_panelInfo->_autoHideDelay = m_delaySpinBox->value();
m_panelInfo->_autoHideSwitch = m_autoHideSwitch->isChecked();
+ m_panelInfo->_xineramaHideSwitch = m_xineramaHide->isChecked();
+
m_panelInfo->_unhideLocation = m_backgroundRaise->isChecked() ?
triggerComboToConfig(m_backgroundPos->currentItem()) : 0;
}
@@ -199,6 +204,7 @@ void HidingTab::defaults()
m_manual->setChecked( true );
m_delaySpinBox->setValue( 3 );
m_autoHideSwitch->setChecked( false );
+ m_xineramaHide->setChecked( true );
m_lHB->setChecked( false );
m_rHB->setChecked( true );
m_animateHiding->setChecked( true );
diff --git a/kcontrol/randr/krandrtray.cpp b/kcontrol/randr/krandrtray.cpp
index c3ba773ea..3cfe4cdda 100644
--- a/kcontrol/randr/krandrtray.cpp
+++ b/kcontrol/randr/krandrtray.cpp
@@ -88,6 +88,9 @@ KRandRSystemTray::KRandRSystemTray(TQWidget* parent, const char *name)
if (cur_profile != "") {
applyIccConfiguration(cur_profile, NULL);
}
+
+ TDEHardwareDevices *hwdevices = KGlobal::hardwareDevices();
+ connect(hwdevices, TQT_SIGNAL(hardwareUpdated(TDEGenericDevice*)), this, TQT_SLOT(deviceChanged(TDEGenericDevice*)));
}
/*!
@@ -133,27 +136,73 @@ void KRandRSystemTray::mousePressEvent(TQMouseEvent* e)
KSystemTray::mousePressEvent(e);
}
-void KRandRSystemTray::contextMenuAboutToShow(KPopupMenu* menu)
+void KRandRSystemTray::reloadDisplayConfiguration()
{
- //int lastIndex = 0;
-
// Reload the randr configuration...
XRROutputInfo *output_info;
char *output_name;
RROutput output_id;
int i;
- int lastIndex = 0;
+ int activeOutputs = 0;
int screenDeactivated = 0;
if (isValid() == true) {
randr_screen_info = read_screen_info(randr_display);
+ // Count outputs in the active state
+ activeOutputs = 0;
for (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) {
continue;
}
+ // Look for CONNECTED outputs
+ if (RR_Disconnected == randr_screen_info->outputs[i]->info->connection) {
+ continue;
+ }
+
+ activeOutputs++;
+ }
+
+ if (activeOutputs < 1) {
+ // Houston, we have a problem!
+ // There are no active displays!
+ // Activate the first connected display we come across...
+ for (i = 0; i < randr_screen_info->n_output; i++) {
+ output_info = randr_screen_info->outputs[i]->info;
+ // Look for OFF outputs
+ if (randr_screen_info->outputs[i]->cur_crtc) {
+ continue;
+ }
+ // Look for CONNECTED outputs
+ if (RR_Disconnected == randr_screen_info->outputs[i]->info->connection) {
+ continue;
+ }
+
+ // Activate this output
+ randr_screen_info->cur_crtc = randr_screen_info->outputs[i]->cur_crtc;
+ randr_screen_info->cur_output = randr_screen_info->outputs[i];
+ randr_screen_info->cur_output->auto_set = 1;
+ randr_screen_info->cur_output->off_set = 0;
+ output_auto (randr_screen_info, randr_screen_info->cur_output);
+ i=main_low_apply(randr_screen_info);
+
+ if (randr_screen_info->outputs[i]->cur_crtc) {
+ // Output successfully activated!
+ set_primary_output(randr_screen_info, randr_screen_info->cur_output->id);
+ break;
+ }
+ }
+ }
+
+ for (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) {
+ continue;
+ }
+ // Look for DISCONNECTED outputs
if (RR_Disconnected != randr_screen_info->outputs[i]->info->connection) {
continue;
}
@@ -176,19 +225,17 @@ void KRandRSystemTray::contextMenuAboutToShow(KPopupMenu* menu)
findPrimaryDisplay();
refresh();
- // HACK
- // This is needed because Qt does not properly generate screen
- // resize events when switching screens, so KDE gets stuck in the old resolution
- // This only seems to happen with more than one screen, so check for that condition...
- if (kapp->desktop()->numScreens() > 1) {
- currentScreen()->proposeSize(GetHackResolutionParameter());
- currentScreen()->applyProposed();
- }
-
currentScreen()->proposeSize(GetDefaultResolutionParameter());
currentScreen()->applyProposed();
}
}
+}
+
+void KRandRSystemTray::contextMenuAboutToShow(KPopupMenu* menu)
+{
+ int lastIndex = 0;
+
+ reloadDisplayConfiguration();
menu->clear();
menu->setCheckable(true);
@@ -236,8 +283,8 @@ void KRandRSystemTray::contextMenuAboutToShow(KPopupMenu* menu)
menu->insertTitle(SmallIcon("randr"), i18n("Global Configuation"));
- KAction *actColors = new KAction( i18n( "Configure Color Profiles..." ),
- SmallIconSet( "configure" ), KShortcut(), TQT_TQOBJECT(this), TQT_SLOT( slotColorConfig() ),
+ KAction *actColors = new KAction( i18n( "Configure Displays..." ),
+ SmallIconSet( "configure" ), KShortcut(), TQT_TQOBJECT(this), TQT_SLOT( slotDisplayConfig() ),
actionCollection() );
actColors->plug( menu );
@@ -469,12 +516,12 @@ void KRandRSystemTray::slotPrefs()
kcm->exec();
}
-void KRandRSystemTray::slotColorConfig()
+void KRandRSystemTray::slotDisplayConfig()
{
KCMultiDialog *kcm = new KCMultiDialog( KDialogBase::Plain, i18n( "Configure" ), this );
- kcm->addModule( "iccconfig" );
- kcm->setPlainCaption( i18n( "Configure Display Color Profiles" ) );
+ kcm->addModule( "displayconfig" );
+ kcm->setPlainCaption( i18n( "Configure Displays" ) );
kcm->exec();
}
@@ -596,6 +643,9 @@ void KRandRSystemTray::slotCycleDisplays()
i=main_low_apply(randr_screen_info);
if (randr_screen_info->outputs[current_on_index]->cur_crtc) {
+ // Output successfully activated!
+ set_primary_output(randr_screen_info, randr_screen_info->cur_output->id);
+
if (prev_on_index != -1) {
if (randr_screen_info->outputs[prev_on_index]->cur_crtc != NULL) {
if (RR_Disconnected != randr_screen_info->outputs[prev_on_index]->info->connection) {
@@ -635,16 +685,6 @@ void KRandRSystemTray::slotCycleDisplays()
findPrimaryDisplay();
refresh();
- // HACK
- // This is needed because Qt does not properly generate screen
- // resize events when switching screens, so KDE gets stuck in the old resolution
- // This only seems to happen with more than one screen, so check for that condition...
- if (kapp->desktop()->numScreens() > 1) {
-// currentScreen()->proposeSize(GetHackResolutionParameter());
-// currentScreen()->applyProposed();
- kapp->desktop()->emitResizedSignal(currentScreenIndex());
- }
-
currentScreen()->proposeSize(GetDefaultResolutionParameter());
currentScreen()->applyProposed();
}
@@ -781,9 +821,7 @@ void KRandRSystemTray::slotOutputChanged(int parameter)
{
XRROutputInfo *output_info;
char *output_name;
- RROutput output_id;
int i;
- Status s;
int num_outputs_on;
num_outputs_on = 0;
@@ -825,15 +863,6 @@ void KRandRSystemTray::slotOutputChanged(int parameter)
findPrimaryDisplay();
refresh();
- // HACK
- // This is needed because Qt does not properly generate screen
- // resize events when switching screens, so KDE gets stuck in the old resolution
- // This only seems to happen with more than one screen, so check for that condition...
- if (kapp->desktop()->numScreens() > 1) {
- currentScreen()->proposeSize(GetHackResolutionParameter());
- currentScreen()->applyProposed();
- }
-
currentScreen()->proposeSize(GetDefaultResolutionParameter());
currentScreen()->applyProposed();
}
@@ -842,3 +871,14 @@ void KRandRSystemTray::slotOutputChanged(int parameter)
}
}
}
+
+void KRandRSystemTray::deviceChanged (TDEGenericDevice* device) {
+ if (device->type() == TDEGenericDeviceType::Monitor) {
+ KRandrPassivePopup::message(
+ i18n("New display output options are available!"),
+ i18n("A screen has been added, removed, or changed"), SmallIcon("window_fullscreen"),
+ this, "ScreenChangeNotification");
+
+ reloadDisplayConfiguration();
+ }
+} \ No newline at end of file
diff --git a/kcontrol/randr/krandrtray.h b/kcontrol/randr/krandrtray.h
index f0d8d7367..60d966a15 100644
--- a/kcontrol/randr/krandrtray.h
+++ b/kcontrol/randr/krandrtray.h
@@ -25,6 +25,7 @@
#include <kglobalaccel.h>
#include <libkrandr/libkrandr.h>
+#include <tdehardwaredevices.h>
class KHelpMenu;
class KPopupMenu;
@@ -50,7 +51,7 @@ protected slots:
void slotOrientationChanged(int parameter);
void slotRefreshRateChanged(int parameter);
void slotPrefs();
- void slotColorConfig();
+ void slotDisplayConfig();
void slotSKeys();
void slotSettingsChanged(int category);
void slotCycleDisplays();
@@ -67,6 +68,7 @@ private:
int GetDefaultResolutionParameter();
int GetHackResolutionParameter();
void findPrimaryDisplay();
+ void reloadDisplayConfiguration();
bool m_popupUp;
KHelpMenu* m_help;
@@ -85,6 +87,7 @@ private:
private slots:
void _quit();
+ void deviceChanged (TDEGenericDevice*);
};
#endif
diff --git a/kcontrol/taskbar/kcmtaskbar.cpp b/kcontrol/taskbar/kcmtaskbar.cpp
index 25f2c778d..3a2436b24 100644
--- a/kcontrol/taskbar/kcmtaskbar.cpp
+++ b/kcontrol/taskbar/kcmtaskbar.cpp
@@ -212,6 +212,10 @@ TaskbarConfig::TaskbarConfig(TQWidget *parent, const char* name, const TQStringL
{
m_widget->showAllScreens->hide();
}
+ else
+ {
+ m_widget->showAllScreens->show();
+ }
connect( m_widget->showAllScreens, TQT_SIGNAL( stateChanged( int )), TQT_SLOT( changed()));
KAboutData *about = new KAboutData(I18N_NOOP("kcmtaskbar"),
diff --git a/kcontrol/taskbar/kcmtaskbarui.ui b/kcontrol/taskbar/kcmtaskbarui.ui
index 6a43b5fbb..ce0ddb6fe 100644
--- a/kcontrol/taskbar/kcmtaskbarui.ui
+++ b/kcontrol/taskbar/kcmtaskbarui.ui
@@ -71,7 +71,7 @@ By default this option is selected.</string>
By default, this option is selected and all windows are shown.</string>
</property>
</widget>
- <widget class="TQCheckBox" row="6" column="0" rowspan="1" colspan="3">
+ <widget class="TQCheckBox" row="7" column="0" rowspan="1" colspan="3">
<property name="name">
<cstring>kcfg_ShowWindowListBtn</cstring>
</property>
@@ -85,7 +85,7 @@ By default, this option is selected and all windows are shown.</string>
<string>Selecting this option causes the taskbar to display a button that, when clicked, shows a list of all windows in a popup menu.</string>
</property>
</widget>
- <widget class="TQComboBox" row="7" column="2">
+ <widget class="TQComboBox" row="8" column="2">
<property name="name">
<cstring>kcfg_GroupTasks</cstring>
</property>
@@ -105,9 +105,9 @@ You can set the taskbar to &lt;strong&gt;Never&lt;/strong&gt; group windows, to
By default the taskbar groups windows when it is full.</string>
</property>
</widget>
- <widget class="TQLabel" row="7" column="0" rowspan="1" colspan="2">
+ <widget class="TQLabel" row="8" column="0" rowspan="1" colspan="2">
<property name="name">
- <cstring>showTaskStatesLabel</cstring>
+ <cstring>groupTasksLabel</cstring>
</property>
<property name="text">
<string>&amp;Group similar tasks:</string>
@@ -116,7 +116,7 @@ By default the taskbar groups windows when it is full.</string>
<cstring>kcfg_ShowTaskStates</cstring>
</property>
</widget>
- <widget class="TQComboBox" row="8" column="2">
+ <widget class="TQComboBox" row="9" column="2">
<property name="name">
<cstring>kcfg_ShowTaskStates</cstring>
</property>
@@ -132,9 +132,9 @@ By default the taskbar groups windows when it is full.</string>
<string>The taskbar can show and/or hide tasks based on their current process state. Select &lt;em&gt;Any&lt;/em&gt; to show all tasks regardless of current state.</string>
</property>
</widget>
- <widget class="TQLabel" row="8" column="0" rowspan="1" colspan="2">
+ <widget class="TQLabel" row="9" column="0" rowspan="1" colspan="2">
<property name="name">
- <cstring>groupTasksLabel</cstring>
+ <cstring>showTaskStatesLabel</cstring>
</property>
<property name="text">
<string>&amp;Show tasks with state:</string>
@@ -143,7 +143,7 @@ By default the taskbar groups windows when it is full.</string>
<cstring>kcfg_ShowTaskStates</cstring>
</property>
</widget>
- <widget class="TQCheckBox" row="4" column="0" rowspan="1" colspan="3">
+ <widget class="TQCheckBox" row="5" column="0" rowspan="1" colspan="3">
<property name="name">
<cstring>kcfg_ShowOnlyIconified</cstring>
</property>
@@ -156,7 +156,7 @@ By default the taskbar groups windows when it is full.</string>
By default, this option is not selected and the taskbar will show all windows.</string>
</property>
</widget>
- <widget class="TQCheckBox" row="5" column="0" rowspan="1" colspan="3">
+ <widget class="TQCheckBox" row="6" column="0" rowspan="1" colspan="3">
<property name="name">
<cstring>kcfg_ShowIcon</cstring>
</property>
@@ -172,7 +172,7 @@ By default, this option is not selected and the taskbar will show all windows.</
By default this option is selected.</string>
</property>
</widget>
- <widget class="TQCheckBox" row="3" column="0" rowspan="1" colspan="3">
+ <widget class="TQCheckBox" row="2" column="0" rowspan="1" colspan="3">
<property name="name">
<cstring>showAllScreens</cstring>
</property>
@@ -188,12 +188,12 @@ By default this option is selected.</string>
By default, this option is selected and all windows are shown.</string>
</property>
</widget>
- <widget class="TQComboBox" row="9" column="2">
+ <widget class="TQComboBox" row="10" column="2">
<property name="name">
<cstring>appearance</cstring>
</property>
</widget>
- <widget class="TQLabel" row="9" column="0" rowspan="1" colspan="2">
+ <widget class="TQLabel" row="10" column="0" rowspan="1" colspan="2">
<property name="name">
<cstring>textLabel1</cstring>
</property>
@@ -204,7 +204,7 @@ By default, this option is selected and all windows are shown.</string>
<cstring>appearance</cstring>
</property>
</widget>
- <widget class="TQCheckBox" row="10" column="0" rowspan="1" colspan="2">
+ <widget class="TQCheckBox" row="11" column="0" rowspan="1" colspan="2">
<property name="name">
<cstring>kcfg_UseCustomColors</cstring>
</property>
@@ -218,7 +218,7 @@ By default, this option is selected and all windows are shown.</string>
<bool>true</bool>
</property>
</widget>
- <widget class="TQLayoutWidget" row="11" column="0" rowspan="1" colspan="3">
+ <widget class="TQLayoutWidget" row="12" column="0" rowspan="1" colspan="3">
<property name="name">
<cstring>layout9</cstring>
</property>
@@ -353,7 +353,7 @@ By default, this option is selected and all windows are shown.</string>
</size>
</property>
</spacer>
- <widget class="TQCheckBox" row="2" column="0" rowspan="1" colspan="3">
+ <widget class="TQCheckBox" row="3" column="0" rowspan="1" colspan="3">
<property name="name">
<cstring>kcfg_SortByApp</cstring>
</property>
@@ -364,7 +364,7 @@ By default, this option is selected and all windows are shown.</string>
<bool>true</bool>
</property>
</widget>
- <widget class="TQCheckBox" row="3" column="0" rowspan="1" colspan="3">
+ <widget class="TQCheckBox" row="4" column="0" rowspan="1" colspan="3">
<property name="name">
<cstring>kcfg_CycleWheel</cstring>
</property>
diff --git a/kicker/kicker/core/container_extension.cpp b/kicker/kicker/core/container_extension.cpp
index 80ceb6e13..1b7857774 100644
--- a/kicker/kicker/core/container_extension.cpp
+++ b/kicker/kicker/core/container_extension.cpp
@@ -476,6 +476,12 @@ void ExtensionContainer::removeSessionConfigFile()
void ExtensionContainer::moveMe()
{
int screen = xineramaScreen();
+ if (screen == -3)
+ {
+ // we aren't on any screen? um. ok.
+ return;
+ }
+
if (screen < 0)
{
screen = kapp->desktop()->screenNumber(this);
@@ -1980,7 +1986,7 @@ int ExtensionContainer::xineramaScreen() const
// sanitize at runtime only, since many Xinerama users
// turn it on and off and don't want kicker to lose their configs
- /* -2 means all screens, -1 primary screens, the rest are valid screen numbers */
+ /* -3 means no screens, -2 means all screens, -1 primary screens, the rest are valid screen numbers */
if (XineramaAllScreens <= m_settings.xineramaScreen() &&
m_settings.xineramaScreen() < TQApplication::desktop()->numScreens())
{
@@ -1988,8 +1994,15 @@ int ExtensionContainer::xineramaScreen() const
}
else
{
- /* force invalid screen locations onto the primary screen */
- return TQApplication::desktop()->primaryScreen();
+ if (m_settings.xineramaHideSwitch())
+ {
+ return -3;
+ }
+ else
+ {
+ /* force invalid screen locations onto the primary screen */
+ return TQApplication::desktop()->primaryScreen();
+ }
}
}
diff --git a/kicker/kicker/core/extensionSettings.kcfg b/kicker/kicker/core/extensionSettings.kcfg
index 466f30ce7..12bf9e37c 100644
--- a/kicker/kicker/core/extensionSettings.kcfg
+++ b/kicker/kicker/core/extensionSettings.kcfg
@@ -60,6 +60,11 @@
<default>false</default>
</entry>
+<entry name="XineramaHideSwitch" type="Bool" >
+ <label>Auto hide when Xinerama screen is not available</label>
+ <default>true</default>
+ </entry>
+
<entry name="AutoHideDelay" type="Int" >
<label>Delay before auto hide</label>
<default>3</default>