File gnome-settings-daemon-randr-boot-video-mode.diff of Package gnome-settings-daemon

From 50a74bed7b8ce3addc481d75292c4e8d5880c79c Mon Sep 17 00:00:00 2001
From: Joey Lee <jlee@novell.com>
Date: Fri, 29 Jan 2010 18:29:37 -0600
Subject: [PATCH] RANDR - add GConf options for a boot-time configuration - bnc#553300

---
 data/apps_gnome_settings_daemon_xrandr.schemas.in |   26 +++++++++++
 plugins/xrandr/gsd-xrandr-manager.c               |   48 +++++++++++++++++++--
 2 files changed, 70 insertions(+), 4 deletions(-)

diff --git a/data/apps_gnome_settings_daemon_xrandr.schemas.in b/data/apps_gnome_settings_daemon_xrandr.schemas.in
index 80324ca..b6e1c1c 100644
--- a/data/apps_gnome_settings_daemon_xrandr.schemas.in
+++ b/data/apps_gnome_settings_daemon_xrandr.schemas.in
@@ -39,5 +39,31 @@
 		</long>
             </locale>
         </schema>
+	<schema>
+	    <key>/schemas/apps/gnome_settings_daemon/xrandr/turn_on_external_monitors_at_startup</key>
+	    <applyto>/apps/gnome_settings_daemon/xrandr/turn_on_external_monitors_at_startup</applyto>
+            <owner>gnome</owner>
+	    <type>bool</type>
+            <default>false</default>
+            <locale name="C">
+	        <short>Turn on external monitor after system boot</short>
+                <long>Turn on external monitor after system boot if user plugin
+		external monitor when system boot.
+		</long>
+            </locale>
+        </schema>
+	<schema>
+	    <key>/schemas/apps/gnome_settings_daemon/xrandr/turn_on_laptop_monitor_at_startup</key>
+	    <applyto>/apps/gnome_settings_daemon/xrandr/turn_on_laptop_monitor_at_startup</applyto>
+            <owner>gnome</owner>
+	    <type>bool</type>
+            <default>true</default>
+            <locale name="C">
+	        <short>Turn on laptop monitor after system boot</short>
+                <long>Turn on laptop monitor after system boot if user plugin
+		external monitor when system boot.
+		</long>
+            </locale>
+        </schema>
     </schemalist>
 </gconfschemafile>
diff --git a/plugins/xrandr/gsd-xrandr-manager.c b/plugins/xrandr/gsd-xrandr-manager.c
index a382c57..6c63667 100644
--- a/plugins/xrandr/gsd-xrandr-manager.c
+++ b/plugins/xrandr/gsd-xrandr-manager.c
@@ -66,6 +66,8 @@
 #define CONF_DIR "/apps/gnome_settings_daemon/xrandr"
 #define CONF_KEY_SHOW_NOTIFICATION_ICON		(CONF_DIR "/show_notification_icon")
 #define CONF_KEY_ROTATE_TABLET_WITH_MONITOR	(CONF_DIR "/rotate_tablet_with_monitor")
+#define CONF_KEY_TURN_ON_EXTERNAL_MONITORS_AT_STARTUP	(CONF_DIR "/turn_on_external_monitors_at_startup")
+#define CONF_KEY_TURN_ON_LAPTOP_MONITOR_AT_STARTUP	(CONF_DIR "/turn_on_laptop_monitor_at_startup")
 
 #define VIDEO_KEYSYM    "XF86Display"
 
@@ -1940,13 +1942,15 @@ on_config_changed (GConfClient          *client,
                 handle_tablet_rotation (manager);
 }
 
-static void
+static gboolean
 apply_intended_configuration (GsdXrandrManager *manager, const char *intended_filename, guint32 timestamp)
 {
         GError *my_error;
+	gboolean result;
 
         my_error = NULL;
-        if (!apply_configuration_from_filename (manager, intended_filename, FALSE, timestamp, &my_error)) {
+        result = apply_configuration_from_filename (manager, intended_filename, FALSE, timestamp, &my_error);
+        if (!result) {
                 if (my_error) {
                         if (!g_error_matches (my_error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
                                 error_message (manager, _("Could not apply the stored configuration for monitors"), my_error, NULL);
@@ -1954,9 +1958,42 @@ apply_intended_configuration (GsdXrandrManager *manager, const char *intended_fi
                         g_error_free (my_error);
                 }
         }
+
+        return result;
 }
 
 static void
+apply_default_boot_configuration (GsdXrandrManager *mgr)
+{
+	GsdXrandrManagerPrivate *priv = mgr->priv;
+	GnomeRRScreen *screen = priv->rw_screen;
+   	GnomeRRConfig *config;
+   	gboolean turn_on_external, turn_on_laptop;
+	GError *error = NULL;
+
+        turn_on_external =
+                gconf_client_get_bool (mgr->priv->client, CONF_KEY_TURN_ON_EXTERNAL_MONITORS_AT_STARTUP, NULL);
+        turn_on_laptop =
+                gconf_client_get_bool (mgr->priv->client, CONF_KEY_TURN_ON_LAPTOP_MONITOR_AT_STARTUP, NULL);
+
+	if (turn_on_external && turn_on_laptop)
+		config = make_clone_setup (screen);
+	else if (!turn_on_external && turn_on_laptop)
+		config = make_laptop_setup (screen);
+	else if (turn_on_external && !turn_on_laptop)
+		config = make_other_setup (screen);
+	else
+		config = make_laptop_setup (screen);
+
+	if (!gnome_rr_config_apply (config, screen, &error)) {
+		error_message (mgr, _("Could not switch the monitor configuration"), error, NULL);
+		g_error_free (error);
+	}
+
+	gnome_rr_config_free (config);
+}
+
+static gboolean
 apply_stored_configuration_at_startup (GsdXrandrManager *manager, guint32 timestamp)
 {
         GError *my_error;
@@ -2000,7 +2037,7 @@ apply_stored_configuration_at_startup (GsdXrandrManager *manager, guint32 timest
          * good.  Apply the intended configuration instead.
          */
 
-        apply_intended_configuration (manager, intended_filename, timestamp);
+        success = apply_intended_configuration (manager, intended_filename, timestamp);
 
 out:
 
@@ -2009,6 +2046,8 @@ out:
 
         g_free (backup_filename);
         g_free (intended_filename);
+
+        return success;
 }
 
 static gboolean
@@ -2072,7 +2111,8 @@ gsd_xrandr_manager_start (GsdXrandrManager *manager,
 
         if (user_configuration_is_newer_than_xorg (manager)) {
                 show_timestamps_dialog (manager, "Startup");
-                apply_stored_configuration_at_startup (manager, GDK_CURRENT_TIME); /* we don't have a real timestamp at startup anyway */
+                if (!apply_stored_configuration_at_startup (manager, GDK_CURRENT_TIME)) /* we don't have a real timestamp at startup anyway */
+                        apply_default_boot_configuration (manager);
         }
 
         gdk_window_add_filter (gdk_get_default_root_window(),
-- 
1.6.4.2

openSUSE Build Service is sponsored by