[gnome-flashback] display-config: add confirm dialog
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] display-config: add confirm dialog
- Date: Mon, 30 Mar 2015 20:08:59 +0000 (UTC)
commit 79d003923c29d20389d12d7d4bafe3fe6576d52f
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Mon Mar 30 22:56:51 2015 +0300
display-config: add confirm dialog
gnome-flashback/flashback.gresource.xml | 1 +
gnome-flashback/libdisplay-config/Makefile.am | 2 +
.../libdisplay-config/flashback-confirm-dialog.c | 242 ++++++++++++++++++++
.../libdisplay-config/flashback-confirm-dialog.h | 51 ++++
.../libdisplay-config/flashback-confirm-dialog.ui | 140 +++++++++++
.../libdisplay-config/flashback-display-config.c | 60 +++++-
.../libdisplay-config/flashback-monitor-config.c | 14 +-
.../libdisplay-config/flashback-monitor-manager.c | 29 ++-
.../libdisplay-config/flashback-monitor-manager.h | 5 +-
9 files changed, 525 insertions(+), 19 deletions(-)
---
diff --git a/gnome-flashback/flashback.gresource.xml b/gnome-flashback/flashback.gresource.xml
index 363697a..46520ef 100644
--- a/gnome-flashback/flashback.gresource.xml
+++ b/gnome-flashback/flashback.gresource.xml
@@ -3,6 +3,7 @@
<gresource prefix="/org/gnome/gnome-flashback">
<file>Adwaita.css</file>
<file>HighContrast.css</file>
+ <file alias="flashback-confirm-dialog.ui"
compressed="true">libdisplay-config/flashback-confirm-dialog.ui</file>
<file alias="flashback-inhibit-dialog.ui"
compressed="true">libend-session-dialog/flashback-inhibit-dialog.ui</file>
</gresource>
</gresources>
diff --git a/gnome-flashback/libdisplay-config/Makefile.am b/gnome-flashback/libdisplay-config/Makefile.am
index 640ce05..eb12671 100644
--- a/gnome-flashback/libdisplay-config/Makefile.am
+++ b/gnome-flashback/libdisplay-config/Makefile.am
@@ -12,6 +12,8 @@ libdisplay_config_la_SOURCES = \
meta-dbus-display-config.c \
meta-dbus-display-config.h \
meta-display-config-shared.h \
+ flashback-confirm-dialog.c \
+ flashback-confirm-dialog.h \
flashback-display-config.c \
flashback-display-config.h \
flashback-monitor-config.c \
diff --git a/gnome-flashback/libdisplay-config/flashback-confirm-dialog.c
b/gnome-flashback/libdisplay-config/flashback-confirm-dialog.c
new file mode 100644
index 0000000..54b9c99
--- /dev/null
+++ b/gnome-flashback/libdisplay-config/flashback-confirm-dialog.c
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2015 Alberts Muktupāvels
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <glib/gi18n.h>
+#include "flashback-confirm-dialog.h"
+
+typedef struct _FlashbackConfirmDialogPrivate FlashbackConfirmDialogPrivate;
+
+struct _FlashbackConfirmDialogPrivate
+{
+ GtkWidget *title;
+ GtkWidget *description;
+
+ GtkWidget *revert_settings;
+ GtkWidget *keep_changes;
+
+ gint timeout;
+ guint timeout_id;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (FlashbackConfirmDialog, flashback_confirm_dialog, GTK_TYPE_WINDOW)
+
+enum
+{
+ SIGNAL_RESPONSE,
+ SIGNAL_CLOSE,
+ SIGNAL_LAST
+};
+
+static guint signals[SIGNAL_LAST] = { 0, };
+
+static void
+update_text (FlashbackConfirmDialog *dialog)
+{
+ FlashbackConfirmDialogPrivate *priv;
+ const gchar *text;
+ gchar *description;
+
+ priv = flashback_confirm_dialog_get_instance_private (dialog);
+ text = ngettext ("Settings changes will revert in %d second",
+ "Settings changes will revert in %d seconds",
+ priv->timeout);
+
+ description = g_strdup_printf (text, priv->timeout);
+ gtk_label_set_text (GTK_LABEL (priv->description), description);
+ g_free (description);
+}
+
+static gboolean
+timeout_cb (gpointer user_data)
+{
+ FlashbackConfirmDialog *dialog;
+ FlashbackConfirmDialogPrivate *priv;
+
+ dialog = FLASHBACK_CONFIRM_DIALOG (user_data);
+ priv = flashback_confirm_dialog_get_instance_private (dialog);
+
+ if (priv->timeout == 0)
+ {
+ priv->timeout_id = 0;
+ g_signal_emit (dialog, signals[SIGNAL_RESPONSE], 0,
+ FLASHBACK_CONFIRM_DIALOG_RESPONSE_REVERT_SETTINGS);
+ return FALSE;
+ }
+
+ priv->timeout--;
+ update_text (dialog);
+
+ return TRUE;
+}
+
+static void
+revert_settings_clicked_cb (FlashbackConfirmDialog *dialog,
+ GtkButton *button)
+{
+ g_signal_emit (dialog, signals[SIGNAL_RESPONSE], 0,
+ FLASHBACK_CONFIRM_DIALOG_RESPONSE_REVERT_SETTINGS);
+}
+
+static void
+keep_changes_clicked_cb (FlashbackConfirmDialog *dialog,
+ GtkButton *button)
+{
+ g_signal_emit (dialog, signals[SIGNAL_RESPONSE], 0,
+ FLASHBACK_CONFIRM_DIALOG_RESPONSE_KEEP_CHANGES);
+}
+
+static void
+flashback_confirm_dialog_close (FlashbackConfirmDialog *dialog)
+{
+ g_signal_emit (dialog, signals[SIGNAL_RESPONSE], 0,
+ FLASHBACK_CONFIRM_DIALOG_RESPONSE_REVERT_SETTINGS);
+}
+
+static void
+flashback_confirm_dialog_finalize (GObject *object)
+{
+ FlashbackConfirmDialog *dialog;
+ FlashbackConfirmDialogPrivate *priv;
+
+ dialog = FLASHBACK_CONFIRM_DIALOG (object);
+ priv = flashback_confirm_dialog_get_instance_private (dialog);
+
+ if (priv->timeout_id > 0)
+ {
+ g_source_remove (priv->timeout_id);
+ priv->timeout_id = 0;
+ }
+
+ G_OBJECT_CLASS (flashback_confirm_dialog_parent_class)->finalize (object);
+}
+
+static void
+flashback_confirm_dialog_destroy (GtkWidget *widget)
+{
+ FlashbackConfirmDialog *dialog;
+ FlashbackConfirmDialogPrivate *priv;
+
+ dialog = FLASHBACK_CONFIRM_DIALOG (widget);
+ priv = flashback_confirm_dialog_get_instance_private (dialog);
+
+ if (priv->timeout_id > 0)
+ {
+ g_source_remove (priv->timeout_id);
+ priv->timeout_id = 0;
+ }
+
+ GTK_WIDGET_CLASS (flashback_confirm_dialog_parent_class)->destroy (widget);
+}
+
+static void
+flashback_confirm_dialog_show (GtkWidget *widget)
+{
+ FlashbackConfirmDialog *dialog;
+ FlashbackConfirmDialogPrivate *priv;
+
+ dialog = FLASHBACK_CONFIRM_DIALOG (widget);
+ priv = flashback_confirm_dialog_get_instance_private (dialog);
+
+ GTK_WIDGET_CLASS (flashback_confirm_dialog_parent_class)->show (widget);
+
+ if (priv->timeout_id == 0)
+ priv->timeout_id = g_timeout_add (1000, (GSourceFunc) timeout_cb, dialog);
+}
+
+static void
+flashback_confirm_dialog_class_init (FlashbackConfirmDialogClass *dialog_class)
+{
+ GObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+ GtkBindingSet *binding_set;
+
+ widget_class = GTK_WIDGET_CLASS (dialog_class);
+
+ dialog_class->close = flashback_confirm_dialog_close;
+
+ object_class->finalize = flashback_confirm_dialog_finalize;
+
+ widget_class->destroy = flashback_confirm_dialog_destroy;
+ widget_class->show = flashback_confirm_dialog_show;
+
+ signals[SIGNAL_RESPONSE] =
+ g_signal_new ("response",
+ G_OBJECT_CLASS_TYPE (dialog_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (FlashbackConfirmDialogClass, response),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE,
+ 1,
+ G_TYPE_INT);
+ signals[SIGNAL_CLOSE] =
+ g_signal_new ("close",
+ G_OBJECT_CLASS_TYPE (dialog_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (FlashbackConfirmDialogClass, close),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ binding_set = gtk_binding_set_by_class (dialog_class);
+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0, "close", 0);
+
+ gtk_widget_class_set_template_from_resource (widget_class,
"/org/gnome/gnome-flashback/flashback-confirm-dialog.ui");
+
+ gtk_widget_class_bind_template_child_private (widget_class, FlashbackConfirmDialog, title);
+ gtk_widget_class_bind_template_child_private (widget_class, FlashbackConfirmDialog, description);
+ gtk_widget_class_bind_template_child_private (widget_class, FlashbackConfirmDialog, revert_settings);
+ gtk_widget_class_bind_template_child_private (widget_class, FlashbackConfirmDialog, keep_changes);
+
+ gtk_widget_class_bind_template_callback (widget_class, revert_settings_clicked_cb);
+ gtk_widget_class_bind_template_callback (widget_class, keep_changes_clicked_cb);
+}
+
+static void
+flashback_confirm_dialog_init (FlashbackConfirmDialog *dialog)
+{
+ GtkWindow *window;
+ GtkWidget *widget;
+
+ widget = GTK_WIDGET (dialog);
+ window = GTK_WINDOW (dialog);
+
+ gtk_widget_init_template (widget);
+
+ gtk_window_set_keep_above (window, TRUE);
+ gtk_window_set_skip_taskbar_hint (window, TRUE);
+ gtk_window_set_skip_pager_hint (window, TRUE);
+}
+
+GtkWidget *
+flashback_confirm_dialog_new (gint timeout)
+{
+ FlashbackConfirmDialog *dialog;
+ FlashbackConfirmDialogPrivate *priv;
+
+ dialog = g_object_new (FLASHBACK_TYPE_CONFIRM_DIALOG, NULL);
+ priv = flashback_confirm_dialog_get_instance_private (dialog);
+
+ priv->timeout = timeout;
+ update_text (dialog);
+
+ return GTK_WIDGET (dialog);
+}
diff --git a/gnome-flashback/libdisplay-config/flashback-confirm-dialog.h
b/gnome-flashback/libdisplay-config/flashback-confirm-dialog.h
new file mode 100644
index 0000000..a4a71dc
--- /dev/null
+++ b/gnome-flashback/libdisplay-config/flashback-confirm-dialog.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2015 Alberts Muktupāvels
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef FLASHBACK_CONFIRM_DIALOG_H
+#define FLASHBACK_CONFIRM_DIALOG_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+typedef enum _FlashbackConfirmDialogResponseType FlashbackConfirmDialogResponseType;
+
+#define FLASHBACK_TYPE_CONFIRM_DIALOG flashback_confirm_dialog_get_type ()
+G_DECLARE_DERIVABLE_TYPE (FlashbackConfirmDialog, flashback_confirm_dialog,
+ FLASHBACK, CONFIRM_DIALOG,
+ GtkWindow)
+
+enum FlashbackConfirmDialogResponseType
+{
+ FLASHBACK_CONFIRM_DIALOG_RESPONSE_REVERT_SETTINGS,
+ FLASHBACK_CONFIRM_DIALOG_RESPONSE_KEEP_CHANGES,
+};
+
+struct _FlashbackConfirmDialogClass
+{
+ GtkWindowClass parent_class;
+
+ void (* response) (FlashbackConfirmDialog *dialog,
+ gint response_id);
+ void (* close) (FlashbackConfirmDialog *dialog);
+};
+
+GtkWidget *flashback_confirm_dialog_new (gint timeout);
+
+G_END_DECLS
+
+#endif
diff --git a/gnome-flashback/libdisplay-config/flashback-confirm-dialog.ui
b/gnome-flashback/libdisplay-config/flashback-confirm-dialog.ui
new file mode 100644
index 0000000..789bc71
--- /dev/null
+++ b/gnome-flashback/libdisplay-config/flashback-confirm-dialog.ui
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+ <requires lib="gtk+" version="3.12"/>
+ <template class="FlashbackConfirmDialog" parent="GtkWindow">
+ <property name="can_focus">False</property>
+ <property name="border_width">12</property>
+ <property name="title" translatable="yes">Confirm</property>
+ <property name="resizable">False</property>
+ <property name="window_position">center</property>
+ <property name="type_hint">dialog</property>
+ <property name="urgency_hint">True</property>
+ <child>
+ <object class="GtkBox" id="content_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkBox" id="main_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <property name="border_width">0</property>
+ <property name="baseline_position">top</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xpad">12</property>
+ <property name="ypad">12</property>
+ <property name="icon_name">preferences-desktop-display</property>
+ <property name="icon_size">6</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">center</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Do you want to keep these display
settings?</property>
+ <property name="single_line_mode">True</property>
+ <property name="lines">1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="description">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="buttons_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkButton" id="keep_changes">
+ <property name="label" translatable="yes">_Keep Changes</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">end</property>
+ <property name="use_underline">True</property>
+ <signal name="clicked" handler="keep_changes_clicked_cb" swapped="yes"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="revert_settings">
+ <property name="label" translatable="yes">_Revert Settings</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="use_underline">True</property>
+ <signal name="clicked" handler="revert_settings_clicked_cb" swapped="yes"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-flashback/libdisplay-config/flashback-display-config.c
b/gnome-flashback/libdisplay-config/flashback-display-config.c
index dc25a2b..5161ea7 100644
--- a/gnome-flashback/libdisplay-config/flashback-display-config.c
+++ b/gnome-flashback/libdisplay-config/flashback-display-config.c
@@ -29,6 +29,7 @@
#include <glib/gi18n.h>
#include <gtk/gtk.h>
#include <math.h>
+#include "flashback-confirm-dialog.h"
#include "flashback-display-config.h"
#include "flashback-monitor-config.h"
#include "flashback-monitor-manager.h"
@@ -39,6 +40,7 @@ struct _FlashbackDisplayConfig
gint bus_name;
MetaDBusDisplayConfig *skeleton;
FlashbackMonitorManager *manager;
+ GtkWidget *confirm_dialog;
};
G_DEFINE_TYPE (FlashbackDisplayConfig, flashback_display_config, G_TYPE_OBJECT)
@@ -73,19 +75,57 @@ power_save_mode_changed (MetaDBusDisplayConfig *skeleton,
manager->power_save_mode = mode;
}
+static void
+destroy_confirm_dialog (FlashbackDisplayConfig *dialog)
+{
+ if (dialog->confirm_dialog != NULL)
+ {
+ gtk_widget_destroy (GTK_WIDGET (dialog->confirm_dialog));
+ dialog->confirm_dialog = NULL;
+ }
+}
+
static gboolean
save_config_timeout (gpointer user_data)
{
- FlashbackMonitorManager *manager;
+ FlashbackDisplayConfig *dispay_config;
+
+ dispay_config = FLASHBACK_DISPLAY_CONFIG (user_data);
- manager = FLASHBACK_MONITOR_MANAGER (user_data);
+ destroy_confirm_dialog (dispay_config);
- flashback_monitor_config_restore_previous (manager->config);
+ flashback_monitor_config_restore_previous (dispay_config->manager->monitor_config);
- manager->persistent_timeout_id = 0;
+ dispay_config->manager->persistent_timeout_id = 0;
return G_SOURCE_REMOVE;
}
+static void
+confirm_dialog_response_cb (FlashbackConfirmDialog *dialog,
+ gint response_id,
+ gpointer user_data)
+{
+ FlashbackDisplayConfig *config;
+ gboolean ok;
+
+ config = FLASHBACK_DISPLAY_CONFIG (user_data);
+
+ switch (response_id)
+ {
+ case FLASHBACK_CONFIRM_DIALOG_RESPONSE_KEEP_CHANGES:
+ ok = TRUE;
+ break;
+ case FLASHBACK_CONFIRM_DIALOG_RESPONSE_REVERT_SETTINGS:
+ default:
+ ok = FALSE;
+ break;
+ }
+
+ destroy_confirm_dialog (config);
+
+ flashback_monitor_manager_confirm_configuration (config->manager, ok);
+}
+
static gboolean
output_can_config (MetaOutput *output,
MetaCRTC *crtc,
@@ -629,12 +669,18 @@ handle_apply_configuration (MetaDBusDisplayConfig *skeleton,
appropriate UI. Then wait 20 seconds and if not confirmed, revert the
configuration.
*/
- flashback_monitor_config_update_current (manager->config);
+ flashback_monitor_config_update_current (manager->monitor_config);
if (persistent)
{
- manager->persistent_timeout_id = g_timeout_add_seconds (20, save_config_timeout, manager);
+ manager->persistent_timeout_id = g_timeout_add_seconds (20, save_config_timeout, config);
g_source_set_name_by_id (manager->persistent_timeout_id, "[gnome-flashback] save_config_timeout");
+
+ config->confirm_dialog = flashback_confirm_dialog_new (20);
+ g_signal_connect (config->confirm_dialog, "response",
+ G_CALLBACK (confirm_dialog_response_cb), config);
+
+ gtk_window_present (GTK_WINDOW (config->confirm_dialog));
}
meta_dbus_display_config_complete_apply_configuration (skeleton,
@@ -902,6 +948,8 @@ flashback_display_config_finalize (GObject *object)
config->bus_name = 0;
}
+ destroy_confirm_dialog (config);
+
g_clear_object (&config->manager);
G_OBJECT_CLASS (flashback_display_config_parent_class)->finalize (object);
diff --git a/gnome-flashback/libdisplay-config/flashback-monitor-config.c
b/gnome-flashback/libdisplay-config/flashback-monitor-config.c
index 4340e2a..15ee979 100644
--- a/gnome-flashback/libdisplay-config/flashback-monitor-config.c
+++ b/gnome-flashback/libdisplay-config/flashback-monitor-config.c
@@ -1923,6 +1923,13 @@ flashback_monitor_config_update_current (FlashbackMonitorConfig *config)
void
flashback_monitor_config_make_persistent (FlashbackMonitorConfig *config)
{
+ g_hash_table_replace (config->configs, config->current, config_ref (config->current));
+ meta_monitor_config_save (config);
+}
+
+void
+flashback_monitor_config_restore_previous (FlashbackMonitorConfig *config)
+{
if (config->previous)
{
/* The user chose to restore the previous configuration. In this
@@ -1942,13 +1949,6 @@ flashback_monitor_config_make_persistent (FlashbackMonitorConfig *config)
}
}
-void
-flashback_monitor_config_restore_previous (FlashbackMonitorConfig *config)
-{
- g_hash_table_replace (config->configs, config->current, config_ref (config->current));
- meta_monitor_config_save (config);
-}
-
gboolean
flashback_monitor_manager_has_hotplug_mode_update (FlashbackMonitorManager *manager)
{
diff --git a/gnome-flashback/libdisplay-config/flashback-monitor-manager.c
b/gnome-flashback/libdisplay-config/flashback-monitor-manager.c
index b039bc1..e662ab0 100644
--- a/gnome-flashback/libdisplay-config/flashback-monitor-manager.c
+++ b/gnome-flashback/libdisplay-config/flashback-monitor-manager.c
@@ -1053,12 +1053,12 @@ flashback_monitor_manager_constructed (GObject *object)
manager->in_init = TRUE;
- manager->config = flashback_monitor_config_new (manager);
+ manager->monitor_config = flashback_monitor_config_new (manager);
flashback_monitor_manager_read_current_config (manager);
- if (!flashback_monitor_config_apply_stored (manager->config))
- flashback_monitor_config_make_default (manager->config);
+ if (!flashback_monitor_config_apply_stored (manager->monitor_config))
+ flashback_monitor_config_make_default (manager->monitor_config);
/* Under XRandR, we don't rebuild our data structures until we see
the RRScreenNotify event, but at least at startup we want to have
@@ -1416,6 +1416,25 @@ flashback_monitor_manager_apply_configuration (FlashbackMonitorManager *manager
}
void
+flashback_monitor_manager_confirm_configuration (FlashbackMonitorManager *manager,
+ gboolean ok)
+{
+ if (!manager->persistent_timeout_id)
+ {
+ /* too late */
+ return;
+ }
+
+ g_source_remove (manager->persistent_timeout_id);
+ manager->persistent_timeout_id = 0;
+
+ if (ok)
+ flashback_monitor_config_make_persistent (manager->monitor_config);
+ else
+ flashback_monitor_config_restore_previous (manager->monitor_config);
+}
+
+void
flashback_monitor_manager_change_backlight (FlashbackMonitorManager *manager,
MetaOutput *output,
gint value)
@@ -1587,13 +1606,13 @@ flashback_monitor_manager_on_hotplug (FlashbackMonitorManager *manager)
*/
if (!flashback_monitor_manager_has_hotplug_mode_update (manager))
{
- if (flashback_monitor_config_apply_stored (manager->config))
+ if (flashback_monitor_config_apply_stored (manager->monitor_config))
applied_config = TRUE;
}
/* If we haven't applied any configuration, apply the default configuration. */
if (!applied_config)
- flashback_monitor_config_make_default (manager->config);
+ flashback_monitor_config_make_default (manager->monitor_config);
}
MetaOutput *
diff --git a/gnome-flashback/libdisplay-config/flashback-monitor-manager.h
b/gnome-flashback/libdisplay-config/flashback-monitor-manager.h
index bc64172..4ea3db0 100644
--- a/gnome-flashback/libdisplay-config/flashback-monitor-manager.h
+++ b/gnome-flashback/libdisplay-config/flashback-monitor-manager.h
@@ -252,7 +252,7 @@ struct _FlashbackMonitorManager
int primary_monitor_index;
int persistent_timeout_id;
- FlashbackMonitorConfig *config;
+ FlashbackMonitorConfig *monitor_config;
GnomePnpIds *pnp_ids;
@@ -267,6 +267,9 @@ void flashback_monitor_manager_apply_configuration (Flas
MetaOutputInfo
**outputs,
unsigned int
n_outputs);
+void flashback_monitor_manager_confirm_configuration (FlashbackMonitorManager
*manager,
+ gboolean ok);
+
void flashback_monitor_manager_change_backlight (FlashbackMonitorManager
*manager,
MetaOutput *output,
gint value);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]