summaryrefslogtreecommitdiffstats
path: root/mandriva/2010.2/applications/krandr/krandr-0.5.2-display_switch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'mandriva/2010.2/applications/krandr/krandr-0.5.2-display_switch.patch')
-rw-r--r--mandriva/2010.2/applications/krandr/krandr-0.5.2-display_switch.patch187
1 files changed, 187 insertions, 0 deletions
diff --git a/mandriva/2010.2/applications/krandr/krandr-0.5.2-display_switch.patch b/mandriva/2010.2/applications/krandr/krandr-0.5.2-display_switch.patch
new file mode 100644
index 000000000..366b6685c
--- /dev/null
+++ b/mandriva/2010.2/applications/krandr/krandr-0.5.2-display_switch.patch
@@ -0,0 +1,187 @@
+--- krandr-0.5.2.1/randr/krandrtray.h.orig 2007-09-03 18:05:43.000000000 -0300
++++ krandr-0.5.2.1/randr/krandrtray.h 2007-09-03 18:29:15.000000000 -0300
+@@ -37,6 +37,9 @@ public:
+
+ void configChanged();
+
++public slots:
++ void slotSwitchDisplay();
++
+ protected slots:
+ void slotScreenActivated();
+ void slotResolutionChanged(int parameter);
+--- krandr-0.5.2.1/randr/randrdisplay.h.orig 2007-09-03 18:05:43.000000000 -0300
++++ krandr-0.5.2.1/randr/randrdisplay.h 2007-09-03 18:31:43.000000000 -0300
+@@ -51,6 +51,8 @@ public:
+
+ void refresh();
+
++ void switchOutput();
++
+ /**
+ * Loads saved settings.
+ *
+--- krandr-0.5.2.1/randr/randrscreen.h.orig 2007-09-03 18:05:43.000000000 -0300
++++ krandr-0.5.2.1/randr/randrscreen.h 2007-09-03 18:32:51.000000000 -0300
+@@ -40,6 +40,8 @@ public:
+
+ int index() const;
+
++ void switchOutput();
++
+ XRRScreenResources* resources() const;
+ Window rootWindow() const;
+
+--- krandr-0.5.2.1/randr/krandrtray.cpp.orig 2007-09-03 18:05:43.000000000 -0300
++++ krandr-0.5.2.1/randr/krandrtray.cpp 2007-09-04 10:12:05.000000000 -0300
+@@ -17,6 +17,7 @@
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
++#include <kglobalaccel.h>
+ #include <kapplication.h>
+ #include <kpopupmenu.h>
+ #include <khelpmenu.h>
+@@ -33,6 +34,7 @@
+ #include "randroutput.h"
+ #include "randrmode.h"
+
++#include <kdebug.h>
+ KRandRSystemTray::KRandRSystemTray(RandRDisplay *dpy, QWidget* parent, const char *name)
+ : KSystemTray(parent, name)
+ , m_popupUp(false), m_display(dpy)
+@@ -43,6 +45,16 @@ KRandRSystemTray::KRandRSystemTray(RandR
+ connect(this, SIGNAL(quitSelected()), kapp, SLOT(quit()));
+ QToolTip::add(this, i18n("Screen resize & rotate"));
+
++ KConfig cfg("kcmrandrrc");
++ cfg.setGroup("General");
++
++ KGlobalAccel *accel = new KGlobalAccel(this);
++ accel->insert( "DisplaySwitch", i18n("Switch displays"),
++ i18n("Switch between active displays."),
++ CTRL+SHIFT+Key_S, KKey::QtWIN+CTRL+Key_S, this, SLOT(slotSwitchDisplay()) );
++
++ accel->readSettings(&cfg);
++ accel->updateConnections();
+ }
+
+ void KRandRSystemTray::mousePressEvent(QMouseEvent* e)
+@@ -456,3 +468,8 @@ void KRandRSystemTray::slotPrefs()
+ kcm->setPlainCaption( i18n( "Configure Display" ) );
+ kcm->exec();
+ }
++
++void KRandRSystemTray::slotSwitchDisplay()
++{
++ m_display->switchOutput();
++}
+--- krandr-0.5.2.1/randr/randrdisplay.cpp.orig 2007-09-03 18:05:43.000000000 -0300
++++ krandr-0.5.2.1/randr/randrdisplay.cpp 2007-09-03 18:32:35.000000000 -0300
+@@ -300,3 +300,10 @@ void RandRDisplay::applyProposed(bool co
+ }
+ }
+
++void RandRDisplay::switchOutput()
++{
++#ifdef HAS_RANDR_1_2
++ if (RandR::has_1_2)
++ currentScreen()->switchOutput();
++#endif
++}
+--- krandr-0.5.2.1/randr/randrscreen.cpp.orig 2007-09-03 18:05:43.000000000 -0300
++++ krandr-0.5.2.1/randr/randrscreen.cpp 2007-09-04 12:45:23.000000000 -0300
+@@ -581,6 +581,93 @@ void RandRScreen::slotOutputChanged(RROu
+ emit configChanged();
+ }
+
++void RandRScreen::switchOutput()
++{
++ //refresh settings so that the new monitor gets detected
++ loadSettings();
++
++ // if there is just one connected output, do not switch
++ if (connectedCount() < 2)
++ return;
++
++ // disable all outputs and activate the first connected one
++ if (activeCount() > 1)
++ {
++ bool first = true;
++ slotUnifyOutputs(0);
++ OutputMap::iterator it;
++ for(it = m_outputs.begin(); it != m_outputs.end(); ++it)
++ {
++ RandROutput *output = *it;
++ if (first && output->isActive())
++ first = false;
++ else if (first && output->isConnected())
++ {
++ SizeList sizes = output->sizes();
++ if (!sizes.count())
++ continue;
++
++ output->proposeRect(QRect(QPoint(0,0), sizes.first()));
++ if (output->applyProposed(false))
++ first = false;
++ else
++ output->slotDisable();
++ }
++ else
++ output->slotDisable();
++ }
++
++ for(it = m_outputs.begin(); it != m_outputs.end(); ++it)
++ {
++ RandROutput *output = *it;
++ if (output->isConnected())
++ {
++ SizeList sizes = output->sizes();
++ if (!sizes.count())
++ continue;
++
++ output->proposeRect(QRect(QPoint(0,0), sizes.first()));
++ if (output->applyProposed(RandR::ChangeRect, false))
++ break;
++ }
++ }
++ }
++ else
++ {
++ OutputMap::iterator it;
++ // first disable the currently active output and try to active the next
++ // connected one
++ bool found_active = false, found_connected = false;
++ for(it = m_outputs.begin(); it != m_outputs.end(); ++it)
++ {
++ RandROutput *output = *it;
++ if (!found_active && output->isActive())
++ {
++ output->slotDisable();
++ found_active = true;
++ }
++ else if (found_active && output->isConnected())
++ {
++ SizeList sizes = output->sizes();
++ if (!sizes.count())
++ continue;
++
++ output->proposeRect(QRect(QPoint(0,0), sizes.first()));
++ if (output->applyProposed(RandR::ChangeRect, false))
++ {
++ found_connected = true;
++ break;
++ }
++ }
++ }
++
++ // if we could not find the next connected output after the active one,
++ // activate all
++ if (!found_connected)
++ slotUnifyOutputs(1);
++ } // if activeCount < 2
++}
++
+ #include "randrscreen.moc"
+
+ #endif