[gnome-settings-daemon/wip/wayland-display: 87/87] xrandr: adapt to the new model for display configuration



commit 7ebb99929446336b63aa18ce789c41b5fad0f0aa
Author: Giovanni Campagna <gcampagn redhat com>
Date:   Thu Aug 8 14:10:53 2013 +0200

    xrandr: adapt to the new model for display configuration
    
    Stop handling monitors.xml and the initial modeset for the session,
    as well as monitor hotplug and lid switches. All that is implemented
    in mutter now.
    What is left in the xrandr plugin is Fn-F7 (for lack of a better
    place) and Rotate. Both will go in mutter/gnome-shell at some point.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=705507

 plugins/xrandr/gsd-xrandr-manager.c |  725 +----------------------------------
 1 files changed, 8 insertions(+), 717 deletions(-)
---
diff --git a/plugins/xrandr/gsd-xrandr-manager.c b/plugins/xrandr/gsd-xrandr-manager.c
index 9703a3b..29a639c 100644
--- a/plugins/xrandr/gsd-xrandr-manager.c
+++ b/plugins/xrandr/gsd-xrandr-manager.c
@@ -62,7 +62,6 @@
 
 #define CONF_SCHEMA "org.gnome.settings-daemon.plugins.xrandr"
 #define CONF_KEY_DEFAULT_MONITORS_SETUP   "default-monitors-setup"
-#define CONF_KEY_DEFAULT_CONFIGURATION_FILE   "default-configuration-file"
 
 /* Number of seconds that the confirmation dialog will last before it resets the
  * RANDR configuration to its old state.
@@ -100,7 +99,6 @@ struct GsdXrandrManagerPrivate {
         gboolean running;
 
         UpClient *upower_client;
-        gboolean laptop_lid_is_closed;
 
         GSettings       *settings;
         GDBusNodeInfo   *introspection_data;
@@ -112,9 +110,6 @@ struct GsdXrandrManagerPrivate {
         int             current_fn_f7_config;             /* -1 if no configs */
         GnomeRRConfig **fn_f7_configs;  /* NULL terminated, NULL if there are no configs */
 
-        /* Last time at which we got a "screen got reconfigured" event; see on_randr_event() */
-        guint32 last_config_timestamp;
-
 #ifdef HAVE_WACOM
         WacomDeviceDatabase *wacom_db;
 #endif /* HAVE_WACOM */
@@ -242,23 +237,11 @@ log_configuration (GnomeRRConfig *config)
                 log_msg ("        no outputs!\n");
 }
 
-static char
-timestamp_relationship (guint32 a, guint32 b)
-{
-        if (a < b)
-                return '<';
-        else if (a > b)
-                return '>';
-        else
-                return '=';
-}
-
 static void
 log_screen (GnomeRRScreen *screen)
 {
         GnomeRRConfig *config;
         int min_w, min_h, max_w, max_h;
-        guint32 change_timestamp, config_timestamp;
 
         if (!log_file)
                 return;
@@ -266,14 +249,10 @@ log_screen (GnomeRRScreen *screen)
         config = gnome_rr_config_new_current (screen, NULL);
 
         gnome_rr_screen_get_ranges (screen, &min_w, &max_w, &min_h, &max_h);
-        gnome_rr_screen_get_timestamps (screen, &change_timestamp, &config_timestamp);
 
-        log_msg ("        Screen min(%d, %d), max(%d, %d), change=%u %c config=%u\n",
+        log_msg ("        Screen min(%d, %d), max(%d, %d)\n",
                  min_w, min_h,
-                 max_w, max_h,
-                 change_timestamp,
-                 timestamp_relationship (change_timestamp, config_timestamp),
-                 config_timestamp);
+                 max_w, max_h);
 
         log_configuration (config);
         g_object_unref (config);
@@ -296,34 +275,6 @@ log_configurations (GnomeRRConfig **configs)
 }
 
 static void
-show_timestamps_dialog (GsdXrandrManager *manager, const char *msg)
-{
-#if 1
-        return;
-#else
-        struct GsdXrandrManagerPrivate *priv = manager->priv;
-        GtkWidget *dialog;
-        guint32 change_timestamp, config_timestamp;
-        static int serial;
-
-        gnome_rr_screen_get_timestamps (priv->rw_screen, &change_timestamp, &config_timestamp);
-
-        dialog = gtk_message_dialog_new (NULL,
-                                         0,
-                                         GTK_MESSAGE_INFO,
-                                         GTK_BUTTONS_CLOSE,
-                                         "RANDR timestamps (%d):\n%s\nchange: %u\nconfig: %u",
-                                         serial++,
-                                         msg,
-                                         change_timestamp,
-                                         config_timestamp);
-        g_signal_connect (dialog, "response",
-                          G_CALLBACK (gtk_widget_destroy), NULL);
-        gtk_widget_show (dialog);
-#endif
-}
-
-static void
 print_output (GnomeRROutputInfo *info)
 {
         int x, y, width, height;
@@ -382,96 +333,6 @@ get_laptop_output_info (GnomeRRScreen *screen, GnomeRRConfig *config)
         return NULL;
 }
 
-static gboolean
-non_laptop_outputs_are_active (GnomeRRConfig *config, GnomeRROutputInfo *laptop_info)
-{
-        GnomeRROutputInfo **outputs;
-        int i;
-
-        outputs = gnome_rr_config_get_outputs (config);
-        for (i = 0; outputs[i] != NULL; i++) {
-                if (outputs[i] == laptop_info)
-                        continue;
-
-                if (gnome_rr_output_info_is_active (outputs[i]))
-                        return TRUE;
-        }
-
-        return FALSE;
-}
-
-static void
-turn_off_laptop_display_in_configuration (GnomeRRScreen *screen, GnomeRRConfig *config)
-{
-        GnomeRROutputInfo *laptop_info;
-
-        laptop_info = get_laptop_output_info (screen, config);
-        if (laptop_info) {
-                /* Turn off the laptop's screen only if other displays are on.  This is to avoid an 
all-black-screens scenario. */
-                if (non_laptop_outputs_are_active (config, laptop_info))
-                        gnome_rr_output_info_set_active (laptop_info, FALSE);
-        }
-
-        /* Adjust the offsets of outputs so they start at (0, 0) */
-        gnome_rr_config_sanitize (config);
-}
-
-/* This function effectively centralizes the use of gnome_rr_config_apply_from_filename_with_time().
- *
- * Optionally filters out GNOME_RR_ERROR_NO_MATCHING_CONFIG from the matching
- * process(), since that is not usually an error.
- */
-static gboolean
-apply_configuration_from_filename (GsdXrandrManager *manager,
-                                   const char       *filename,
-                                   gboolean          no_matching_config_is_an_error,
-                                   guint32           timestamp,
-                                   GError          **error)
-{
-        struct GsdXrandrManagerPrivate *priv = manager->priv;
-        GnomeRRConfig *config;
-        GError *my_error;
-        gboolean success;
-        char *str;
-
-        str = g_strdup_printf ("Applying %s with timestamp %d", filename, timestamp);
-        show_timestamps_dialog (manager, str);
-        g_free (str);
-
-        my_error = NULL;
-
-        config = g_object_new (GNOME_TYPE_RR_CONFIG, "screen", priv->rw_screen, NULL);
-        if (!gnome_rr_config_load_filename (config, filename, &my_error)) {
-                g_object_unref (config);
-
-                if (g_error_matches (my_error, GNOME_RR_ERROR, GNOME_RR_ERROR_NO_MATCHING_CONFIG)) {
-                        if (no_matching_config_is_an_error) {
-                                g_propagate_error (error, my_error);
-                                return FALSE;
-                        } else {
-                                /* This is not an error; the user probably changed his monitors
-                                 * and so they don't match any of the stored configurations.
-                                 */
-                                g_error_free (my_error);
-                                return TRUE;
-                        }
-                } else {
-                        g_propagate_error (error, my_error);
-                        return FALSE;
-                }
-        }
-
-        if (up_client_get_lid_is_closed (priv->upower_client))
-                turn_off_laptop_display_in_configuration (priv->rw_screen, config);
-
-        gnome_rr_config_ensure_primary (config);
-       success = gnome_rr_config_apply_with_time (config, priv->rw_screen, timestamp, error);
-
-        g_object_unref (config);
-
-        return success;
-}
-
 /* This function centralizes the use of gnome_rr_config_apply_with_time().
  *
  * Applies a configuration and displays an error message if an error happens.
@@ -489,11 +350,12 @@ apply_configuration (GsdXrandrManager *manager, GnomeRRConfig *config, guint32 t
         print_configuration (config, "Applying Configuration");
 
         error = NULL;
-        success = gnome_rr_config_apply_with_time (config, priv->rw_screen, timestamp, &error);
-        if (success) {
-                if (save_configuration)
-                        gnome_rr_config_save (config, NULL); /* NULL-GError - there's not much we can do if 
this fails */
-        } else {
+        if (save_configuration)
+                success = gnome_rr_config_apply_persistent (config, priv->rw_screen, &error);
+        else
+                success = gnome_rr_config_apply (config, priv->rw_screen, &error);
+
+        if (!success) {
                 log_msg ("Could not switch to the following configuration (timestamp %u): %s\n", timestamp, 
error->message);
                 log_configuration (config);
                 g_error_free (error);
@@ -502,227 +364,6 @@ apply_configuration (GsdXrandrManager *manager, GnomeRRConfig *config, guint32 t
         return success;
 }
 
-static void
-restore_backup_configuration_without_messages (const char *backup_filename, const char *intended_filename)
-{
-        backup_filename = gnome_rr_config_get_backup_filename ();
-        rename (backup_filename, intended_filename);
-}
-
-static void
-restore_backup_configuration (GsdXrandrManager *manager, const char *backup_filename, const char 
*intended_filename, guint32 timestamp)
-{
-        int saved_errno;
-
-        if (rename (backup_filename, intended_filename) == 0) {
-                GError *error;
-
-                error = NULL;
-                if (!apply_configuration_from_filename (manager, intended_filename, FALSE, timestamp, 
&error)) {
-                        error_message (manager, _("Could not restore the display's configuration"), error, 
NULL);
-
-                        if (error)
-                                g_error_free (error);
-                }
-
-                return;
-        }
-
-        saved_errno = errno;
-
-        /* ENOENT means the original file didn't exist.  That is *not* an error;
-         * the backup was not created because there wasn't even an original
-         * monitors.xml (such as on a first-time login).  Note that *here* there
-         * is a "didn't work" monitors.xml, so we must delete that one.
-         */
-        if (saved_errno == ENOENT)
-                unlink (intended_filename);
-        else {
-                char *msg;
-
-                msg = g_strdup_printf ("Could not rename %s to %s: %s",
-                                       backup_filename, intended_filename,
-                                       g_strerror (saved_errno));
-                error_message (manager,
-                               _("Could not restore the display's configuration from a backup"),
-                               NULL,
-                               msg);
-                g_free (msg);
-        }
-
-        unlink (backup_filename);
-}
-
-typedef struct {
-        GsdXrandrManager *manager;
-        GtkWidget *dialog;
-
-        int countdown;
-        int response_id;
-} TimeoutDialog;
-
-static void
-print_countdown_text (TimeoutDialog *timeout)
-{
-        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (timeout->dialog),
-                                                  ngettext ("The display will be reset to its previous 
configuration in %d second",
-                                                            "The display will be reset to its previous 
configuration in %d seconds",
-                                                            timeout->countdown),
-                                                  timeout->countdown);
-}
-
-static gboolean
-timeout_cb (gpointer data)
-{
-        TimeoutDialog *timeout = data;
-
-        timeout->countdown--;
-
-        if (timeout->countdown == 0) {
-                timeout->response_id = GTK_RESPONSE_CANCEL;
-                gtk_main_quit ();
-        } else {
-                print_countdown_text (timeout);
-        }
-
-        return TRUE;
-}
-
-static void
-timeout_response_cb (GtkDialog *dialog, int response_id, gpointer data)
-{
-        TimeoutDialog *timeout = data;
-
-        if (response_id == GTK_RESPONSE_DELETE_EVENT) {
-                /* The user closed the dialog or pressed ESC, revert */
-                timeout->response_id = GTK_RESPONSE_CANCEL;
-        } else
-                timeout->response_id = response_id;
-
-        gtk_main_quit ();
-}
-
-static gboolean
-user_says_things_are_ok (GsdXrandrManager *manager, GdkWindow *parent_window)
-{
-        TimeoutDialog timeout;
-        guint timeout_id;
-
-        timeout.manager = manager;
-
-        timeout.dialog = gtk_message_dialog_new (NULL,
-                                                 GTK_DIALOG_MODAL,
-                                                 GTK_MESSAGE_QUESTION,
-                                                 GTK_BUTTONS_NONE,
-                                                 _("Does the display look OK?"));
-
-        timeout.countdown = CONFIRMATION_DIALOG_SECONDS;
-
-        print_countdown_text (&timeout);
-
-        gtk_window_set_icon_name (GTK_WINDOW (timeout.dialog), "preferences-desktop-display");
-        gtk_dialog_add_button (GTK_DIALOG (timeout.dialog), _("_Restore Previous Configuration"), 
GTK_RESPONSE_CANCEL);
-        gtk_dialog_add_button (GTK_DIALOG (timeout.dialog), _("_Keep This Configuration"), 
GTK_RESPONSE_ACCEPT);
-        gtk_dialog_set_default_response (GTK_DIALOG (timeout.dialog), GTK_RESPONSE_ACCEPT); /* ah, the 
optimism */
-
-        g_signal_connect (timeout.dialog, "response",
-                          G_CALLBACK (timeout_response_cb),
-                          &timeout);
-
-        gtk_widget_realize (timeout.dialog);
-
-        if (parent_window)
-                gdk_window_set_transient_for (gtk_widget_get_window (timeout.dialog), parent_window);
-
-        gtk_widget_show_all (timeout.dialog);
-        /* We don't use g_timeout_add_seconds() since we actually care that the user sees "real" second 
ticks in the dialog */
-        timeout_id = g_timeout_add (1000,
-                                    timeout_cb,
-                                    &timeout);
-        gtk_main ();
-
-        gtk_widget_destroy (timeout.dialog);
-        g_source_remove (timeout_id);
-
-        if (timeout.response_id == GTK_RESPONSE_ACCEPT)
-                return TRUE;
-        else
-                return FALSE;
-}
-
-struct confirmation {
-        GsdXrandrManager *manager;
-        GdkWindow *parent_window;
-        guint32 timestamp;
-};
-
-static gboolean
-confirm_with_user_idle_cb (gpointer data)
-{
-        struct confirmation *confirmation = data;
-        char *backup_filename;
-        char *intended_filename;
-
-        backup_filename = gnome_rr_config_get_backup_filename ();
-        intended_filename = gnome_rr_config_get_intended_filename ();
-
-        if (user_says_things_are_ok (confirmation->manager, confirmation->parent_window))
-                unlink (backup_filename);
-        else
-                restore_backup_configuration (confirmation->manager, backup_filename, intended_filename, 
confirmation->timestamp);
-
-        g_free (confirmation);
-
-        return FALSE;
-}
-
-static void
-queue_confirmation_by_user (GsdXrandrManager *manager, GdkWindow *parent_window, guint32 timestamp)
-{
-        struct confirmation *confirmation;
-
-        confirmation = g_new (struct confirmation, 1);
-        confirmation->manager = manager;
-        confirmation->parent_window = parent_window;
-        confirmation->timestamp = timestamp;
-
-        g_idle_add (confirm_with_user_idle_cb, confirmation);
-}
-
-static gboolean
-try_to_apply_intended_configuration (GsdXrandrManager *manager, GdkWindow *parent_window, guint32 timestamp, 
GError **error)
-{
-        char *backup_filename;
-        char *intended_filename;
-        gboolean result;
-
-        /* Try to apply the intended configuration */
-
-        backup_filename = gnome_rr_config_get_backup_filename ();
-        intended_filename = gnome_rr_config_get_intended_filename ();
-
-        result = apply_configuration_from_filename (manager, intended_filename, FALSE, timestamp, error);
-        if (!result) {
-                error_message (manager, _("The selected configuration for displays could not be applied"), 
error ? *error : NULL, NULL);
-                restore_backup_configuration_without_messages (backup_filename, intended_filename);
-                goto out;
-        } else {
-                /* We need to return as quickly as possible, so instead of
-                 * confirming with the user right here, we do it in an idle
-                 * handler.  The caller only expects a status for "could you
-                 * change the RANDR configuration?", not "is the user OK with it
-                 * as well?".
-                 */
-                queue_confirmation_by_user (manager, parent_window, timestamp);
-        }
-
-out:
-        g_free (backup_filename);
-        g_free (intended_filename);
-
-        return result;
-}
-
 /* DBus method for org.gnome.SettingsDaemon.XRANDR_2 VideoModeSwitch; see gsd-xrandr-manager.xml for the 
interface definition */
 static gboolean
 gsd_xrandr_manager_2_video_mode_switch (GsdXrandrManager *manager,
@@ -1362,7 +1003,6 @@ handle_fn_f7 (GsdXrandrManager *mgr, guint32 timestamp)
         g_object_unref (current);
 
         if (priv->fn_f7_configs) {
-                guint32 server_timestamp;
                 gboolean success;
 
                 mgr->priv->current_fn_f7_config++;
@@ -1376,22 +1016,6 @@ handle_fn_f7 (GsdXrandrManager *mgr, guint32 timestamp)
 
                 g_debug ("applying");
 
-                /* See https://bugzilla.gnome.org/show_bug.cgi?id=610482
-                 *
-                 * Sometimes we'll get two rapid XF86Display keypress events,
-                 * but their timestamps will be out of order with respect to the
-                 * RANDR timestamps.  This *may* be due to stupid BIOSes sending
-                 * out display-switch keystrokes "to make Windows work".
-                 *
-                 * The X server will error out if the timestamp provided is
-                 * older than a previous change configuration timestamp. We
-                 * assume here that we do want this event to go through still,
-                 * since kernel timestamps may be skewed wrt the X server.
-                 */
-                gnome_rr_screen_get_timestamps (screen, NULL, &server_timestamp);
-                if (timestamp < server_timestamp)
-                        timestamp = server_timestamp;
-
                 success = apply_configuration (mgr, priv->fn_f7_configs[mgr->priv->current_fn_f7_config], 
timestamp, TRUE);
 
                 if (success) {
@@ -1632,153 +1256,6 @@ out:
         g_object_unref (current);
 }
 
-static GnomeRRConfig *
-make_default_setup (GsdXrandrManager *manager)
-{
-        GsdXrandrManagerPrivate *priv = manager->priv;
-        GnomeRRConfig *config;
-        GsdXrandrBootBehaviour boot;
-
-        boot = g_settings_get_enum (priv->settings, CONF_KEY_DEFAULT_MONITORS_SETUP);
-        g_debug ("xrandr default monitors setup: %d\n", boot);
-
-        switch (boot) {
-        case GSD_XRANDR_BOOT_BEHAVIOUR_DO_NOTHING:
-                config = make_xinerama_setup (manager, priv->rw_screen);
-                break;
-        case GSD_XRANDR_BOOT_BEHAVIOUR_FOLLOW_LID:
-                if (laptop_lid_is_closed (manager))
-                        config = make_other_setup (priv->rw_screen);
-                else
-                        config = make_xinerama_setup (manager, priv->rw_screen);
-                break;
-        case GSD_XRANDR_BOOT_BEHAVIOUR_CLONE:
-                config = make_clone_setup (manager, priv->rw_screen);
-                break;
-        case GSD_XRANDR_BOOT_BEHAVIOUR_DOCK:
-                config = make_other_setup (priv->rw_screen);
-                break;
-        default:
-                g_assert_not_reached ();
-        }
-
-        return config;
-}
-
-static void
-auto_configure_outputs (GsdXrandrManager *manager, guint32 timestamp)
-{
-        GnomeRRConfig *config;
-
-        g_debug ("xrandr auto-configure");
-        config = make_default_setup (manager);
-        if (config) {
-                apply_configuration (manager, config, timestamp, TRUE);
-                g_object_unref (config);
-        } else {
-                g_debug ("No applicable configuration found during auto-configure");
-        }
-}
-
-static void
-use_stored_configuration_or_auto_configure_outputs (GsdXrandrManager *manager, guint32 timestamp)
-{
-        GsdXrandrManagerPrivate *priv = manager->priv;
-        char *intended_filename;
-        GError *error;
-        gboolean success;
-
-        intended_filename = gnome_rr_config_get_intended_filename ();
-
-        error = NULL;
-        success = apply_configuration_from_filename (manager, intended_filename, TRUE, timestamp, &error);
-        g_free (intended_filename);
-
-        if (!success) {
-                /* We don't bother checking the error type.
-                 *
-                 * Both G_FILE_ERROR_NOENT and
-                 * GNOME_RR_ERROR_NO_MATCHING_CONFIG would mean, "there
-                 * was no configuration to apply, or none that matched
-                 * the current outputs", and in that case we need to run
-                 * our fallback.
-                 *
-                 * Any other error means "we couldn't do the smart thing
-                 * of using a previously- saved configuration, anyway,
-                 * for some other reason.  In that case, we also need to
-                 * run our fallback to avoid leaving the user with a
-                 * bogus configuration.
-                 */
-
-                if (error)
-                        g_error_free (error);
-
-                if (timestamp != priv->last_config_timestamp || timestamp == GDK_CURRENT_TIME) {
-                        priv->last_config_timestamp = timestamp;
-                        auto_configure_outputs (manager, timestamp);
-                        log_msg ("  Automatically configured outputs\n");
-                } else
-                        log_msg ("  Ignored autoconfiguration as old and new config timestamps are the 
same\n");
-        } else
-                log_msg ("Applied stored configuration\n");
-}
-
-static void
-on_randr_event (GnomeRRScreen *screen, gpointer data)
-{
-        GsdXrandrManager *manager = GSD_XRANDR_MANAGER (data);
-        GsdXrandrManagerPrivate *priv = manager->priv;
-        guint32 change_timestamp, config_timestamp;
-
-        if (!priv->running)
-                return;
-
-        gnome_rr_screen_get_timestamps (screen, &change_timestamp, &config_timestamp);
-
-        log_open ();
-        log_msg ("Got RANDR event with timestamps change=%u %c config=%u\n",
-                 change_timestamp,
-                 timestamp_relationship (change_timestamp, config_timestamp),
-                 config_timestamp);
-
-        if (change_timestamp >= config_timestamp) {
-                GnomeRRConfig *rr_config;
-
-                /* The event is due to an explicit configuration change.
-                 *
-                 * If the change was performed by us, then we need to do nothing.
-                 *
-                 * If the change was done by some other X client, we don't need
-                 * to do anything, either; the screen is already configured.
-                 */
-
-                /* Check if we need to update the primary */
-                rr_config = gnome_rr_config_new_current (priv->rw_screen, NULL);
-                if (gnome_rr_config_ensure_primary (rr_config)) {
-                        if (gnome_rr_config_applicable (rr_config, priv->rw_screen, NULL)) {
-                                print_configuration (rr_config, "Updating for primary");
-                                priv->last_config_timestamp = config_timestamp;
-                                gnome_rr_config_apply_with_time (rr_config, priv->rw_screen, 
config_timestamp, NULL);
-                        }
-                }
-                g_object_unref (rr_config);
-
-                show_timestamps_dialog (manager, "ignoring since change > config");
-                log_msg ("  Ignoring event since change >= config\n");
-        } else {
-                /* Here, config_timestamp > change_timestamp.  This means that
-                 * the screen got reconfigured because of hotplug/unplug; the X
-                 * server is just notifying us, and we need to configure the
-                 * outputs in a sane way.
-                 */
-
-                show_timestamps_dialog (manager, "need to deal with reconfiguration, as config > change");
-                use_stored_configuration_or_auto_configure_outputs (manager, config_timestamp);
-        }
-
-        log_close ();
-}
-
 static void
 get_allowed_rotations_for_output (GnomeRRConfig *config,
                                   GnomeRRScreen *rr_screen,
@@ -1818,179 +1295,6 @@ get_allowed_rotations_for_output (GnomeRRConfig *config,
         }
 }
 
-static gboolean
-apply_intended_configuration (GsdXrandrManager *manager, const char *intended_filename, guint32 timestamp)
-{
-        GError *my_error;
-        gboolean result;
-
-        my_error = NULL;
-        result = apply_configuration_from_filename (manager, intended_filename, TRUE, timestamp, &my_error);
-        if (!result) {
-                if (my_error) {
-                        if (!g_error_matches (my_error, G_FILE_ERROR, G_FILE_ERROR_NOENT) &&
-                            !g_error_matches (my_error, GNOME_RR_ERROR, GNOME_RR_ERROR_NO_MATCHING_CONFIG))
-                                error_message (manager, _("Could not apply the stored configuration for 
monitors"), my_error, NULL);
-
-                        g_error_free (my_error);
-                }
-        }
-
-        return result;
-}
-
-static void
-apply_default_boot_configuration (GsdXrandrManager *mgr, guint32 timestamp)
-{
-        GsdXrandrManagerPrivate *priv = mgr->priv;
-        GnomeRRConfig *config;
-        GsdXrandrBootBehaviour boot;
-
-        boot = g_settings_get_enum (priv->settings, CONF_KEY_DEFAULT_MONITORS_SETUP);
-
-        if (boot == GSD_XRANDR_BOOT_BEHAVIOUR_DO_NOTHING)
-                return;
-
-        config = make_default_setup (mgr);
-        if (config) {
-                /* We don't save the configuration (the "false" parameter to the following function) because 
we don't want to
-                 * install a user-side setting when *here* we are using a system-default setting.
-                 */
-                apply_configuration (mgr, config, timestamp, TRUE);
-                g_object_unref (config);
-        }
-}
-
-static gboolean
-apply_stored_configuration_at_startup (GsdXrandrManager *manager, guint32 timestamp)
-{
-        GError *my_error;
-        gboolean success;
-        char *backup_filename;
-        char *intended_filename;
-        GnomePnpIds *pnp_ids;
-
-        /* This avoids the GnomePnpIds object being created multiple times.
-         * See c9240e8b69c5833074508b46bc56307aac12ec19 */
-        pnp_ids = gnome_pnp_ids_new ();
-        backup_filename = gnome_rr_config_get_backup_filename ();
-        intended_filename = gnome_rr_config_get_intended_filename ();
-
-        /* 1. See if there was a "saved" configuration.  If there is one, it means
-         * that the user had selected to change the display configuration, but the
-         * machine crashed.  In that case, we'll apply *that* configuration and save it on top of the
-         * "intended" one.
-         */
-
-        my_error = NULL;
-
-        success = apply_configuration_from_filename (manager, backup_filename, FALSE, timestamp, &my_error);
-        if (success) {
-                /* The backup configuration existed, and could be applied
-                 * successfully, so we must restore it on top of the
-                 * failed/intended one.
-                 */
-                restore_backup_configuration (manager, backup_filename, intended_filename, timestamp);
-                goto out;
-        }
-
-        if (!g_error_matches (my_error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) {
-                /* Epic fail:  there (probably) was a backup configuration, but
-                 * we could not apply it.  The only thing we can do is delete
-                 * the backup configuration.  Let's hope that the user doesn't
-                 * get left with an unusable display...
-                 */
-
-                unlink (backup_filename);
-                goto out;
-        }
-
-        /* 2. There was no backup configuration!  This means we are
-         * good.  Apply the intended configuration instead.
-         */
-
-        success = apply_intended_configuration (manager, intended_filename, timestamp);
-
-out:
-       g_object_unref (pnp_ids);
-
-        if (my_error)
-                g_error_free (my_error);
-
-        g_free (backup_filename);
-        g_free (intended_filename);
-
-        return success;
-}
-
-static gboolean
-apply_default_configuration_from_file (GsdXrandrManager *manager, guint32 timestamp)
-{
-        GsdXrandrManagerPrivate *priv = manager->priv;
-        char *default_config_filename;
-        gboolean result;
-
-        default_config_filename = g_settings_get_string (priv->settings, 
CONF_KEY_DEFAULT_CONFIGURATION_FILE);
-        if (!default_config_filename)
-                return FALSE;
-
-        result = apply_configuration_from_filename (manager, default_config_filename, TRUE, timestamp, NULL);
-
-        g_free (default_config_filename);
-        return result;
-}
-
-static void
-turn_off_laptop_display (GsdXrandrManager *manager, guint32 timestamp)
-{
-        GsdXrandrManagerPrivate *priv = manager->priv;
-        GnomeRRConfig *config;
-        
-        config = gnome_rr_config_new_current (priv->rw_screen, NULL);
-
-        turn_off_laptop_display_in_configuration (priv->rw_screen, config);
-
-        /* We don't turn the laptop's display off if it is the only display present. */
-        if (!config_is_all_off (config)) {
-                /* We don't save the configuration (the "false" parameter to the following function) because 
we
-                 * wouldn't want to restore a configuration with the laptop's display turned off, if at some
-                 * point later the user booted his laptop with the lid open.
-                 */
-                apply_configuration (manager, config, timestamp, FALSE);
-        }
-
-        g_object_unref (config);
-}
-
-static void
-power_client_changed_cb (UpClient *client, gpointer data)
-{
-        GsdXrandrManager *manager = data;
-        GsdXrandrManagerPrivate *priv = manager->priv;
-        gboolean is_closed;
-
-        is_closed = up_client_get_lid_is_closed (priv->upower_client);
-
-        if (is_closed != priv->laptop_lid_is_closed) {
-                priv->laptop_lid_is_closed = is_closed;
-                if (!follow_laptop_lid(manager))
-                        return;
-
-                /* Refresh the RANDR state.  The lid just got opened/closed, so we can afford to
-                 * probe the outputs right now.  It will also help the case where we can't detect
-                 * hotplug/unplug, but the fact that the lid's state changed lets us know that the
-                 * user probably did something interesting.
-                 */
-
-                gnome_rr_screen_refresh (priv->rw_screen, NULL); /* NULL-GError */
-
-                if (is_closed)
-                        turn_off_laptop_display (manager, GDK_CURRENT_TIME); /* sucks not to have a 
timestamp for the notification */
-                else
-                        use_stored_configuration_or_auto_configure_outputs (manager, GDK_CURRENT_TIME);
-        }
-}
-
 gboolean
 gsd_xrandr_manager_start (GsdXrandrManager *manager,
                           GError          **error)
@@ -2011,12 +1315,7 @@ gsd_xrandr_manager_start (GsdXrandrManager *manager,
                 return FALSE;
         }
 
-        g_signal_connect (manager->priv->rw_screen, "changed", G_CALLBACK (on_randr_event), manager);
-
         manager->priv->upower_client = up_client_new ();
-        manager->priv->laptop_lid_is_closed = up_client_get_lid_is_closed (manager->priv->upower_client);
-        g_signal_connect (manager->priv->upower_client, "changed",
-                          G_CALLBACK (power_client_changed_cb), manager);
 
         log_msg ("State of screen at startup:\n");
         log_screen (manager->priv->rw_screen);
@@ -2024,14 +1323,6 @@ gsd_xrandr_manager_start (GsdXrandrManager *manager,
         manager->priv->running = TRUE;
         manager->priv->settings = g_settings_new (CONF_SCHEMA);
 
-        show_timestamps_dialog (manager, "Startup");
-        if (!apply_stored_configuration_at_startup (manager, GDK_CURRENT_TIME)) /* we don't have a real 
timestamp at startup anyway */
-                if (!apply_default_configuration_from_file (manager, GDK_CURRENT_TIME))
-                        apply_default_boot_configuration (manager, GDK_CURRENT_TIME);
-
-        log_msg ("State of screen after initial configuration:\n");
-        log_screen (manager->priv->rw_screen);
-
         log_close ();
 
         gnome_settings_profile_end (NULL);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]