diff options
author | Bastien Nocera <hadess@hadess.net> | 2018-04-16 10:57:02 +0200 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2018-06-18 14:38:55 +0200 |
commit | 5eea723596654dfb979dcca0da4441c8014adf93 (patch) | |
tree | 4c7beed7245a82a7d48f4db97712c28d6c057deb | |
parent | 48d005c362c118953782bce09f04e3de7e0210e0 (diff) | |
download | mutter-5eea723596654dfb979dcca0da4441c8014adf93.tar.gz |
monitor-manager: Cache the last known value of "lid-is-closed"
Restarting UPower will make every property of UpClient emit a "notify"
signal (as a GDBusProxy would). Avoid mutter reconfiguring the displays
when upower restarts by caching the last known value of "lid-is-closed"
and only reconfiguring the displays if it actually changed.
This fixes a black out of the screen when UPower restarts.
-rw-r--r-- | src/backends/meta-monitor-manager-private.h | 1 | ||||
-rw-r--r-- | src/backends/meta-monitor-manager.c | 9 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h index a7a0671ae..9a59b99c9 100644 --- a/src/backends/meta-monitor-manager-private.h +++ b/src/backends/meta-monitor-manager-private.h @@ -181,6 +181,7 @@ struct _MetaMonitorManager GnomePnpIds *pnp_ids; UpClient *up_client; + gboolean lid_is_closed; gulong experimental_features_changed_handler_id; diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c index 75f521096..133b90e8d 100644 --- a/src/backends/meta-monitor-manager.c +++ b/src/backends/meta-monitor-manager.c @@ -351,7 +351,13 @@ lid_is_closed_changed (UpClient *client, gpointer user_data) { MetaMonitorManager *manager = user_data; + gboolean lid_is_closed; + lid_is_closed = up_client_get_lid_is_closed (manager->up_client); + if (lid_is_closed == manager->lid_is_closed) + return; + + manager->lid_is_closed = lid_is_closed; meta_monitor_manager_lid_is_closed_changed (manager); } @@ -361,7 +367,7 @@ meta_monitor_manager_real_is_lid_closed (MetaMonitorManager *manager) if (!manager->up_client) return FALSE; - return up_client_get_lid_is_closed (manager->up_client); + return manager->lid_is_closed; } gboolean @@ -733,6 +739,7 @@ meta_monitor_manager_constructed (GObject *object) { g_signal_connect_object (manager->up_client, "notify::lid-is-closed", G_CALLBACK (lid_is_closed_changed), manager, 0); + manager->lid_is_closed = up_client_get_lid_is_closed (manager->up_client); } } |