Sophie

Sophie

distrib > Fedora > 13 > i386 > media > updates-src > by-pkgid > 7528c2f0034b5e6ab4ac60c4ee775b93 > files > 20

kdebase-workspace-4.5.5-1.fc13.src.rpm

diff -up kdebase-workspace-4.5.2/kcontrol/randr/CMakeLists.txt.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/CMakeLists.txt
--- kdebase-workspace-4.5.2/kcontrol/randr/CMakeLists.txt.krandrtray_backport	2010-05-16 05:04:23.000000000 -0500
+++ kdebase-workspace-4.5.2/kcontrol/randr/CMakeLists.txt	2010-10-15 13:49:39.466636332 -0500
@@ -58,6 +58,8 @@ target_link_libraries(krandrtray ${KDE4_
 
 install(TARGETS krandrtray ${INSTALL_TARGETS_DEFAULT_ARGS})
 
+install(PROGRAMS krandrstartup DESTINATION ${BIN_INSTALL_DIR})
+
 
 ########### install files ###############
 
diff -up kdebase-workspace-4.5.2/kcontrol/randr/krandrstartup.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/krandrstartup
--- kdebase-workspace-4.5.2/kcontrol/randr/krandrstartup.krandrtray_backport	2010-10-15 13:49:39.466636332 -0500
+++ kdebase-workspace-4.5.2/kcontrol/randr/krandrstartup	2010-10-15 13:49:39.466636332 -0500
@@ -0,0 +1,57 @@
+#!/bin/sh
+#
+# A script that is called from startkde. Does early setup of a configuration
+# saved by krandr.
+
+if test "$kcmrandrrc_display_applyonstartup" = "true"; then
+    if test -n "$kcmrandrrc_display_startupcommands"; then
+        # new way of simply storing the commands
+        echo "$kcmrandrrc_display_startupcommands" | \
+        while read command; do
+            eval "$command"
+        done
+    else
+        # backwards compatibility
+        # 4 screens is hopefully enough
+        for scrn in 0 1 2 3; do
+            args=
+            width="\$kcmrandrrc_screen${scrn}_width" ; eval "width=$width"
+            height="\$kcmrandrrc_screen${scrn}_height" ; eval "height=$height"
+            if test -n "${width}" -a -n "${height}"; then
+                args="$args -s ${width}x${height}"
+            fi
+            refresh="\$kcmrandrrc_screen${scrn}_refresh" ; eval "refresh=$refresh"
+            if test -n "${refresh}"; then
+                args="$args -r ${refresh}"
+            fi
+            rotation="\$kcmrandrrc_screen${scrn}_rotation" ; eval "rotation=$rotation"
+            if test -n "${rotation}"; then
+                case "${rotation}" in
+                    0)
+                        args="$args -o 0"
+                        ;;
+                    90)
+                        args="$args -o 1"
+                        ;;
+                    180)
+                        args="$args -o 2"
+                        ;;
+                    270)
+                        args="$args -o 3"
+                        ;;
+                esac
+            fi
+            reflectx="\$kcmrandrrc_screen${scrn}_reflectx" ; eval "reflectx=$reflectx"
+            if test "${refrectx}" = "true"; then
+                args="$args -x"
+            fi
+            reflecty="\$kcmrandrrc_screen${scrn}_reflecty" ; eval "reflecty=$reflecty"
+            if test "${refrecty}" = "true"; then
+                args="$args -y"
+            fi
+            if test -n "$args"; then
+                xrandr $args
+            fi
+        done
+    fi
+fi
diff -up kdebase-workspace-4.5.2/kcontrol/randr/krandrtray.cpp.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/krandrtray.cpp
--- kdebase-workspace-4.5.2/kcontrol/randr/krandrtray.cpp.krandrtray_backport	2010-05-05 04:37:46.000000000 -0500
+++ kdebase-workspace-4.5.2/kcontrol/randr/krandrtray.cpp	2010-10-15 13:49:39.466636332 -0500
@@ -505,7 +505,7 @@ void KRandRSystemTray::slotResolutionCha
 
 	if (screen->applyProposedAndConfirm()) 
 	{
-		KConfig config("krandrrc");
+		KConfig config("kcmrandrrc");
 		if (m_display->syncTrayApp(config))
 			screen->save(config);
 	}
@@ -531,7 +531,7 @@ void KRandRSystemTray::slotOrientationCh
 
 	if (screen->applyProposedAndConfirm()) 
 	{
-		KConfig config("krandrrc");
+		KConfig config("kcmrandrrc");
 		if (m_display->syncTrayApp(config))
 			screen->save(config);
 	}
@@ -551,7 +551,7 @@ void KRandRSystemTray::slotRefreshRateCh
 
 	if (screen->applyProposedAndConfirm()) 
 	{
-		KConfig config("krandrrc");
+		KConfig config("kcmrandrrc");
 		if (m_display->syncTrayApp(config))
 			screen->save(config);
 	}
diff -up kdebase-workspace-4.5.2/kcontrol/randr/legacyrandrconfig.cpp.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/legacyrandrconfig.cpp
--- kdebase-workspace-4.5.2/kcontrol/randr/legacyrandrconfig.cpp.krandrtray_backport	2009-11-13 04:57:32.000000000 -0600
+++ kdebase-workspace-4.5.2/kcontrol/randr/legacyrandrconfig.cpp	2010-10-15 13:49:39.467636123 -0500
@@ -73,7 +73,7 @@ void LegacyRandRConfig::load()
 	// and if it isn't correct they have changed a) their X configuration, b) the screen
 	// with another program, or c) their hardware.
 
-	KConfig config("krandrrc");
+	KConfig config("kcmrandrrc");
 	m_oldApply = m_display->loadDisplay(config, false);
 	m_oldSyncTrayApp = m_display->syncTrayApp(config);
 	applyOnStartup->setChecked(m_oldApply);
@@ -91,8 +91,12 @@ void LegacyRandRConfig::save()
 
 	m_oldApply = applyOnStartup->isChecked();
 	m_oldSyncTrayApp = syncTrayApp->isChecked();
-	KConfig config("krandrrc");
-	m_display->saveDisplay(config, m_oldApply, m_oldSyncTrayApp);
+	KConfig config("kcmrandrrc");
+	m_display->saveDisplay(config, m_oldSyncTrayApp);
+	if(m_oldApply)
+		m_display->saveStartup(config);
+	else
+		m_display->disableStartup(config);
 
 	setChanged();
 }
diff -up kdebase-workspace-4.5.2/kcontrol/randr/legacyrandrscreen.cpp.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/legacyrandrscreen.cpp
--- kdebase-workspace-4.5.2/kcontrol/randr/legacyrandrscreen.cpp.krandrtray_backport	2008-07-08 04:26:10.000000000 -0500
+++ kdebase-workspace-4.5.2/kcontrol/randr/legacyrandrscreen.cpp	2010-10-15 13:49:39.467636123 -0500
@@ -388,6 +388,28 @@ void LegacyRandRScreen::save(KConfig& co
 	group.writeEntry("reflectY", (bool)(rotation() & RandR::ReflectMask) == RandR::ReflectY);
 }
 
+QStringList LegacyRandRScreen::startupCommands() const
+{
+	QString command = QString("xrandr -s %1x%2 -r %3 ").arg( currentPixelSize().width(),
+	    currentPixelSize().height(), refreshRateIndexToHz(size(), refreshRate()));
+	switch( rotation()) {
+		case RR_Rotate_90:
+			command += " -o 1 ";
+			break;
+		case RR_Rotate_180:
+			command += " -o 2 ";
+			break;
+		case RR_Rotate_270:
+			command += " -o 3 ";
+			break;
+	}
+	if((rotation() & RandR::ReflectMask) == RandR::ReflectX)
+		command += " -x ";
+	if((bool)(rotation() & RandR::ReflectMask) == RandR::ReflectY)
+		command += " -y ";
+	return QStringList() << command;
+}
+
 int LegacyRandRScreen::pixelCount( int index ) const
 {
 	QSize sz = pixelSize(index);
diff -up kdebase-workspace-4.5.2/kcontrol/randr/legacyrandrscreen.h.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/legacyrandrscreen.h
--- kdebase-workspace-4.5.2/kcontrol/randr/legacyrandrscreen.h.krandrtray_backport	2008-01-14 19:50:55.000000000 -0600
+++ kdebase-workspace-4.5.2/kcontrol/randr/legacyrandrscreen.h	2010-10-15 13:49:39.468636472 -0500
@@ -130,6 +130,7 @@ public:
 	 */
 	void load(KConfig& config);
 	void save(KConfig& config) const;
+	QStringList startupCommands() const;
 
 private:
 	XRRScreenConfiguration*	m_config;
diff -up kdebase-workspace-4.5.2/kcontrol/randr/randrconfigbase.ui.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/randrconfigbase.ui
--- kdebase-workspace-4.5.2/kcontrol/randr/randrconfigbase.ui.krandrtray_backport	2009-11-13 04:57:32.000000000 -0600
+++ kdebase-workspace-4.5.2/kcontrol/randr/randrconfigbase.ui	2010-10-15 13:49:39.468636472 -0500
@@ -44,6 +44,13 @@
          </property>
         </widget>
        </item>
+       <item>
+        <widget class="QPushButton" name="saveAsDefaultButton">
+         <property name="text">
+          <string>Save as Default</string>
+         </property>
+        </widget>
+       </item>
       </layout>
      </widget>
      <widget class="QGraphicsView" name="screenView"/>
diff -up kdebase-workspace-4.5.2/kcontrol/randr/randrconfig.cpp.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/randrconfig.cpp
--- kdebase-workspace-4.5.2/kcontrol/randr/randrconfig.cpp.krandrtray_backport	2009-12-10 17:14:03.000000000 -0600
+++ kdebase-workspace-4.5.2/kcontrol/randr/randrconfig.cpp	2010-10-15 13:49:39.469636751 -0500
@@ -31,6 +31,8 @@
 #include <kglobalsettings.h>
 #include <kmessagebox.h>
 #include <kprocess.h>
+#include <kshell.h>
+#include <qmenu.h>
 
 RandRConfig::RandRConfig(QWidget *parent, RandRDisplay *display)
 	: QWidget(parent), Ui::RandRConfigBase()
@@ -54,6 +56,12 @@ RandRConfig::RandRConfig(QWidget *parent
 	identifyTimer.setSingleShot( true );
 	compressUpdateViewTimer.setSingleShot( true );
 
+	connect( saveAsDefaultButton, SIGNAL( clicked()), SLOT( saveStartup()));
+	QMenu* saveMenu = new QMenu(saveAsDefaultButton);
+	saveMenu->addAction(i18n("Save as Default"),this, SLOT(saveStartup()));
+	saveMenu->addAction(i18n("Reset"),this, SLOT(disableStartup()));
+	saveAsDefaultButton->setMenu(saveMenu);
+
 	// create the container for the settings widget
 	QHBoxLayout *layout = new QHBoxLayout(outputList);
 	layout->setSpacing(0);
@@ -214,6 +222,25 @@ void RandRConfig::update()
 	emit changed(false);
 }
 
+void RandRConfig::saveStartup()
+{
+	if (!m_display->isValid())
+		return;
+	KConfig config("kcmrandrrc");
+	m_display->saveStartup(config);
+	KMessageBox::information( window(), i18n( "Configuration has been set as the desktop default." ));
+}
+
+void RandRConfig::disableStartup()
+{
+	if (!m_display->isValid())
+		return;
+	KConfig config("kcmrandrrc");
+	m_display->disableStartup(config);
+	KMessageBox::information( window(), i18n( "Default desktop setup has been reset." ));
+}
+
+
 bool RandRConfig::eventFilter(QObject *obj, QEvent *event)
 {
 	if ( obj == screenView && event->type() == QEvent::Resize ) {
diff -up kdebase-workspace-4.5.2/kcontrol/randr/randrconfig.h.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/randrconfig.h
--- kdebase-workspace-4.5.2/kcontrol/randr/randrconfig.h.krandrtray_backport	2009-11-13 04:57:32.000000000 -0600
+++ kdebase-workspace-4.5.2/kcontrol/randr/randrconfig.h	2010-10-15 13:49:39.469636751 -0500
@@ -57,6 +57,8 @@ protected slots:
 	void slotAdjustOutput(OutputGraphicsItem *o);
 	void identifyOutputs();
 	void clearIndicators();
+	void saveStartup();
+	void disableStartup();
 
 signals:
 	void changed(bool change);
diff -up kdebase-workspace-4.5.2/kcontrol/randr/randrdisplay.cpp.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/randrdisplay.cpp
--- kdebase-workspace-4.5.2/kcontrol/randr/randrdisplay.cpp.krandrtray_backport	2008-09-29 00:55:38.000000000 -0500
+++ kdebase-workspace-4.5.2/kcontrol/randr/randrdisplay.cpp	2010-10-15 13:49:39.470636332 -0500
@@ -290,10 +290,9 @@ bool RandRDisplay::syncTrayApp(KConfig& 
 	return config.group("Display").readEntry("SyncTrayApp", false);
 }
 
-void RandRDisplay::saveDisplay(KConfig& config, bool applyOnStartup, bool syncTrayApp)
+void RandRDisplay::saveDisplay(KConfig& config, bool syncTrayApp)
 {
 	KConfigGroup group = config.group("Display");
-	group.writeEntry("ApplyOnStartup", applyOnStartup);
 	group.writeEntry("SyncTrayApp", syncTrayApp);
 
 #ifdef HAS_RANDR_1_2
@@ -310,6 +309,36 @@ void RandRDisplay::saveDisplay(KConfig& 
 	}
 }
 
+// to be used during desktop startup, make all screens provide the shell commands
+// (using xrandr cli tool), save them here and a script will perform these commands
+// early during desktop startup
+void RandRDisplay::saveStartup(KConfig& config)
+{
+	KConfigGroup group = config.group("Display");
+	group.writeEntry("ApplyOnStartup", true);
+	QStringList commands;
+#ifdef HAS_RANDR_1_2
+	if (RandR::has_1_2)
+	{
+		foreach(RandRScreen *s, m_screens)
+			commands += s->startupCommands();
+	}
+	else
+#endif
+	{
+		foreach(LegacyRandRScreen *s, m_legacyScreens)
+			commands += s->startupCommands();
+	}
+	group.writeEntry( "StartupCommands", commands.join( "\n" ));
+}
+
+void RandRDisplay::disableStartup(KConfig& config)
+{
+	KConfigGroup group = config.group("Display");
+	group.writeEntry("ApplyOnStartup", false);
+	group.deleteEntry( "StartupCommands" );
+}
+
 void RandRDisplay::applyProposed(bool confirm)
 {
 
diff -up kdebase-workspace-4.5.2/kcontrol/randr/randrdisplay.h.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/randrdisplay.h
--- kdebase-workspace-4.5.2/kcontrol/randr/randrdisplay.h.krandrtray_backport	2009-11-13 04:57:32.000000000 -0600
+++ kdebase-workspace-4.5.2/kcontrol/randr/randrdisplay.h	2010-10-15 13:49:39.470636332 -0500
@@ -63,7 +63,9 @@ public:
 	 * @retuns true if the settings should be applied on KDE startup.
 	 */
 	bool loadDisplay(KConfig& config, bool loadScreens = true);
-	void saveDisplay(KConfig& config, bool applyOnStartup, bool syncTrayApp);
+	void saveDisplay(KConfig& config, bool syncTrayApp);
+	void saveStartup(KConfig& config);
+	void disableStartup(KConfig& config);
 
 	static bool applyOnStartup(KConfig& config);
 	static bool syncTrayApp(KConfig& config);
diff -up kdebase-workspace-4.5.2/kcontrol/randr/randroutput.cpp.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/randroutput.cpp
--- kdebase-workspace-4.5.2/kcontrol/randr/randroutput.cpp.krandrtray_backport	2010-04-15 03:59:20.000000000 -0500
+++ kdebase-workspace-4.5.2/kcontrol/randr/randroutput.cpp	2010-10-15 13:49:39.471635983 -0500
@@ -24,6 +24,7 @@
 
 #include <KConfig>
 #include <KConfigGroup>
+#include <KShell>
 #include <QX11Info>
 #include <QAction>
 
@@ -424,6 +425,36 @@ void RandROutput::save(KConfig &config)
 	cg.writeEntry("RefreshRate", (double)m_crtc->refreshRate());
 }
 
+QStringList RandROutput::startupCommands() const
+{
+	if (!m_connected)
+		return QStringList();
+	if (m_crtc->id() == None)
+	     return QStringList();	
+	QString command = QString( "xrandr --output \"%1\"" ).arg( KShell::quoteArg( m_name ));
+	// if the outputs are unified, do not save size and rotation
+	// this allow us to set back the size and rotation being used
+	// when the outputs are not unified.
+	if (!m_screen->outputsUnified() || m_screen->connectedCount() <=1)
+	{
+		command += QString( " --pos %1x%2 --mode %3x%4" ).arg( m_crtc->rect().x())
+		    .arg( m_crtc->rect().y()).arg( m_crtc->rect().width()).arg( m_crtc->rect().height());
+		switch( m_crtc->rotation()) {
+			case RandR::Rotate90:
+				command += " --rotate right";
+				break;
+			case RandR::Rotate180:
+				command += " --rotate inverted";
+				break;
+			case RandR::Rotate270:
+				command += " --rotate left";
+				break;
+		}
+	}
+	command += QString(" --refresh %1").arg( m_crtc->refreshRate());
+	return QStringList() << command;
+}
+
 void RandROutput::proposeRefreshRate(float rate)
 {
 	if (!m_crtc->isValid())
@@ -559,7 +590,7 @@ bool RandROutput::applyProposed(int chan
 	}
 	kDebug() << "Applying proposed changes for output" << m_name << "...";
 
-	KConfig cfg("krandrrc");
+	KConfig cfg("kcmrandrrc");
 	RandRCrtc *crtc;
 
 	// first try to apply to the already attached crtc if any
diff -up kdebase-workspace-4.5.2/kcontrol/randr/randroutput.h.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/randroutput.h
--- kdebase-workspace-4.5.2/kcontrol/randr/randroutput.h.krandrtray_backport	2009-11-13 04:57:32.000000000 -0600
+++ kdebase-workspace-4.5.2/kcontrol/randr/randroutput.h	2010-10-15 13:49:39.472635843 -0500
@@ -118,6 +118,7 @@ public:
 
 	void load(KConfig &config);
 	void save(KConfig &config);
+	QStringList startupCommands() const;
 
 public slots:
 	void slotChangeSize(QAction *action);
diff -up kdebase-workspace-4.5.2/kcontrol/randr/randrscreen.cpp.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/randrscreen.cpp
--- kdebase-workspace-4.5.2/kcontrol/randr/randrscreen.cpp.krandrtray_backport	2009-11-13 04:57:32.000000000 -0600
+++ kdebase-workspace-4.5.2/kcontrol/randr/randrscreen.cpp	2010-10-15 13:49:39.472635843 -0500
@@ -420,13 +420,24 @@ void RandRScreen::save(KConfig &config)
 
 void RandRScreen::save()
 {
-	KConfig cfg("krandrrc");
+	KConfig cfg("kcmrandrrc");
 	save(cfg);
 }
 
+QStringList RandRScreen::startupCommands() const
+{
+	QStringList commands;
+	foreach(RandROutput *output, m_outputs)
+	{
+		if (output->isConnected())
+			commands += output->startupCommands();
+	}
+	return commands;
+}
+
 void RandRScreen::load()
 {
-	KConfig cfg("krandrrc");
+	KConfig cfg("kcmrandrrc");
 	load(cfg);
 }
 
@@ -511,7 +522,7 @@ bool RandRScreen::applyProposed(bool con
 
 void RandRScreen::unifyOutputs()
 {
-	KConfig cfg("krandrrc");
+	KConfig cfg("kcmrandrrc");
 	SizeList sizes = unifiedSizes();
 
 	//FIXME: better handle this
@@ -562,7 +573,7 @@ void RandRScreen::slotResizeUnified(QAct
 void RandRScreen::slotUnifyOutputs(bool unified)
 {
 	m_outputsUnified = unified;
-	KConfig cfg("krandrrc");
+	KConfig cfg("kcmrandrrc");
 
 	if (!unified || m_connectedCount <= 1)
 	{
diff -up kdebase-workspace-4.5.2/kcontrol/randr/randrscreen.h.krandrtray_backport kdebase-workspace-4.5.2/kcontrol/randr/randrscreen.h
--- kdebase-workspace-4.5.2/kcontrol/randr/randrscreen.h.krandrtray_backport	2008-01-14 19:50:55.000000000 -0600
+++ kdebase-workspace-4.5.2/kcontrol/randr/randrscreen.h	2010-10-15 13:49:39.473636192 -0500
@@ -84,6 +84,7 @@ public:
 
 	void load(KConfig &config);
 	void save(KConfig &config);
+	QStringList startupCommands() const;
 
 public slots:
 	void slotUnifyOutputs(bool unify);
diff -up kdebase-workspace-4.5.2/startkde.cmake.krandrtray_backport kdebase-workspace-4.5.2/startkde.cmake
--- kdebase-workspace-4.5.2/startkde.cmake.krandrtray_backport	2010-08-27 03:10:26.000000000 -0500
+++ kdebase-workspace-4.5.2/startkde.cmake	2010-10-15 13:49:39.473636192 -0500
@@ -82,6 +82,7 @@ kcminputrc Mouse cursorSize ''
 ksplashrc KSplash Theme Default
 ksplashrc KSplash Engine KSplashX
 kcmrandrrc Display ApplyOnStartup false
+kcmrandrrc Display StartupCommands ''
 kcmrandrrc [Screen0]
 kcmrandrrc [Screen1]
 kcmrandrrc [Screen2]
@@ -115,49 +116,7 @@ if test -n "$kcminputrc_mouse_cursorthem
     fi
 fi
 
-if test "$kcmrandrrc_display_applyonstartup" = "true"; then
-    # 4 screens is hopefully enough
-    for scrn in 0 1 2 3; do
-        args=
-        width="\$kcmrandrrc_screen${scrn}_width" ; eval "width=$width"
-        height="\$kcmrandrrc_screen${scrn}_height" ; eval "height=$height"
-        if test -n "${width}" -a -n "${height}"; then
-            args="$args -s ${width}x${height}"
-        fi
-        refresh="\$kcmrandrrc_screen${scrn}_refresh" ; eval "refresh=$refresh"
-        if test -n "${refresh}"; then
-            args="$args -r ${refresh}"
-        fi
-        rotation="\$kcmrandrrc_screen${scrn}_rotation" ; eval "rotation=$rotation"
-        if test -n "${rotation}"; then
-            case "${rotation}" in
-                0)
-                    args="$args -o 0"
-                    ;;
-                90)
-                    args="$args -o 1"
-                    ;;
-                180)
-                    args="$args -o 2"
-                    ;;
-                270)
-                    args="$args -o 3"
-                    ;;
-            esac
-        fi
-        reflectx="\$kcmrandrrc_screen${scrn}_reflectx" ; eval "reflectx=$reflectx"
-        if test "${refrectx}" = "true"; then
-            args="$args -x"
-        fi
-        reflecty="\$kcmrandrrc_screen${scrn}_reflecty" ; eval "reflecty=$reflecty"
-        if test "${refrecty}" = "true"; then
-            args="$args -y"
-        fi
-        if test -n "$args"; then
-            xrandr $args
-        fi
-    done
-fi
+. krandrstartup 2>/dev/null
 
 if test "$kcmfonts_general_forcefontdpi" -eq 120; then
     xrdb -quiet -merge -nocpp <<EOF