diff --git a/src/backends/meta-input-mapper.c b/src/backends/meta-input-mapper.c index 49f00f427..dfe67983c 100644 --- a/src/backends/meta-input-mapper.c +++ b/src/backends/meta-input-mapper.c @@ -656,8 +656,9 @@ input_mapper_monitors_changed_cb (MetaMonitorManager *monitor_manager, } static void -input_mapper_power_save_mode_changed_cb (MetaMonitorManager *monitor_manager, - MetaInputMapper *mapper) +input_mapper_power_save_mode_changed_cb (MetaMonitorManager *monitor_manager, + MetaPowerSaveChangeReason reason, + MetaInputMapper *mapper) { ClutterInputDevice *device; MetaLogicalMonitor *logical_monitor; diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h index 782ccb0f0..242fc2353 100644 --- a/src/backends/meta-monitor-manager-private.h +++ b/src/backends/meta-monitor-manager-private.h @@ -319,8 +319,9 @@ void meta_monitor_manager_get_screen_size (MetaMonitorManager * MetaPowerSave meta_monitor_manager_get_power_save_mode (MetaMonitorManager *manager); -void meta_monitor_manager_power_save_mode_changed (MetaMonitorManager *manager, - MetaPowerSave mode); +void meta_monitor_manager_power_save_mode_changed (MetaMonitorManager *manager, + MetaPowerSave mode, + MetaPowerSaveChangeReason reason); void meta_monitor_manager_confirm_configuration (MetaMonitorManager *manager, gboolean ok); diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c index 00a6a5cf5..15c219a54 100644 --- a/src/backends/meta-monitor-manager.c +++ b/src/backends/meta-monitor-manager.c @@ -59,6 +59,7 @@ #include "clutter/clutter.h" #include "core/util-private.h" #include "meta/main.h" +#include "meta/meta-enum-types.h" #include "meta/meta-x11-errors.h" #include "meta-dbus-display-config.h" @@ -416,8 +417,9 @@ meta_monitor_manager_rebuild_logical_monitors_derived (MetaMonitorManager *manag } void -meta_monitor_manager_power_save_mode_changed (MetaMonitorManager *manager, - MetaPowerSave mode) +meta_monitor_manager_power_save_mode_changed (MetaMonitorManager *manager, + MetaPowerSave mode, + MetaPowerSaveChangeReason reason) { MetaMonitorManagerPrivate *priv = meta_monitor_manager_get_instance_private (manager); @@ -426,7 +428,7 @@ meta_monitor_manager_power_save_mode_changed (MetaMonitorManager *manager, return; priv->power_save_mode = mode; - g_signal_emit (manager, signals[POWER_SAVE_MODE_CHANGED], 0); + g_signal_emit (manager, signals[POWER_SAVE_MODE_CHANGED], 0, reason); } static void @@ -438,6 +440,7 @@ power_save_mode_changed (MetaMonitorManager *manager, meta_monitor_manager_get_instance_private (manager); MetaMonitorManagerClass *klass; int mode = meta_dbus_display_config_get_power_save_mode (manager->display_config); + MetaPowerSaveChangeReason reason; if (mode == META_POWER_SAVE_UNSUPPORTED) return; @@ -453,7 +456,8 @@ power_save_mode_changed (MetaMonitorManager *manager, if (klass->set_power_save_mode) klass->set_power_save_mode (manager, mode); - meta_monitor_manager_power_save_mode_changed (manager, mode); + reason = META_POWER_SAVE_CHANGE_REASON_MODE_CHANGE; + meta_monitor_manager_power_save_mode_changed (manager, mode, reason); } void @@ -1474,7 +1478,8 @@ meta_monitor_manager_class_init (MetaMonitorManagerClass *klass) G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, - G_TYPE_NONE, 0); + G_TYPE_NONE, 1, + META_TYPE_POWER_SAVE_CHANGE_REASON); signals[CONFIRM_DISPLAY_CHANGE] = g_signal_new ("confirm-display-change", diff --git a/src/backends/meta-stage.c b/src/backends/meta-stage.c index ec3512d65..7c4de5fb9 100644 --- a/src/backends/meta-stage.c +++ b/src/backends/meta-stage.c @@ -292,8 +292,9 @@ meta_stage_deactivate (ClutterStage *actor) } static void -on_power_save_changed (MetaMonitorManager *monitor_manager, - MetaStage *stage) +on_power_save_changed (MetaMonitorManager *monitor_manager, + MetaPowerSaveChangeReason reason, + MetaStage *stage) { if (meta_monitor_manager_get_power_save_mode (monitor_manager) == META_POWER_SAVE_ON) diff --git a/src/backends/native/meta-monitor-manager-native.c b/src/backends/native/meta-monitor-manager-native.c index b3de93490..8a4d907ae 100644 --- a/src/backends/native/meta-monitor-manager-native.c +++ b/src/backends/native/meta-monitor-manager-native.c @@ -114,8 +114,14 @@ meta_monitor_manager_native_read_current_state (MetaMonitorManager *manager) power_save_mode = meta_monitor_manager_get_power_save_mode (manager); if (power_save_mode != META_POWER_SAVE_ON) - meta_monitor_manager_power_save_mode_changed (manager, - META_POWER_SAVE_ON); + { + MetaPowerSaveChangeReason reason; + + reason = META_POWER_SAVE_CHANGE_REASON_HOTPLUG; + meta_monitor_manager_power_save_mode_changed (manager, + META_POWER_SAVE_ON, + reason); + } parent_class->read_current_state (manager); } diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c index e1c384958..3a2341900 100644 --- a/src/backends/native/meta-renderer-native.c +++ b/src/backends/native/meta-renderer-native.c @@ -2011,8 +2011,9 @@ on_gpu_added (MetaBackendNative *backend_native, } static void -on_power_save_mode_changed (MetaMonitorManager *monitor_manager, - MetaRendererNative *renderer_native) +on_power_save_mode_changed (MetaMonitorManager *monitor_manager, + MetaPowerSaveChangeReason reason, + MetaRendererNative *renderer_native) { MetaRenderer *renderer = META_RENDERER (renderer_native); MetaBackend *backend = meta_renderer_get_backend (renderer); diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c index f288c7af2..c50006200 100644 --- a/src/backends/x11/meta-monitor-manager-xrandr.c +++ b/src/backends/x11/meta-monitor-manager-xrandr.c @@ -141,6 +141,7 @@ meta_monitor_manager_xrandr_read_current_state (MetaMonitorManager *manager) BOOL dpms_capable, dpms_enabled; CARD16 dpms_state; MetaPowerSave power_save_mode; + MetaPowerSaveChangeReason reason; dpms_capable = DPMSCapable (xdisplay); @@ -151,7 +152,11 @@ meta_monitor_manager_xrandr_read_current_state (MetaMonitorManager *manager) else power_save_mode = META_POWER_SAVE_UNSUPPORTED; - meta_monitor_manager_power_save_mode_changed (manager, power_save_mode); + + reason = META_POWER_SAVE_CHANGE_REASON_HOTPLUG; + meta_monitor_manager_power_save_mode_changed (manager, + power_save_mode, + reason); parent_class->read_current_state (manager); } diff --git a/src/meta/meta-monitor-manager.h b/src/meta/meta-monitor-manager.h index 9101b64ac..418dc4919 100644 --- a/src/meta/meta-monitor-manager.h +++ b/src/meta/meta-monitor-manager.h @@ -30,6 +30,12 @@ typedef enum META_MONITOR_SWITCH_CONFIG_UNKNOWN, } MetaMonitorSwitchConfigType; +typedef enum _MetaPowerSaveChangeReason +{ + META_POWER_SAVE_CHANGE_REASON_MODE_CHANGE, + META_POWER_SAVE_CHANGE_REASON_HOTPLUG, +} MetaPowerSaveChangeReason; + typedef struct _MetaMonitorManagerClass MetaMonitorManagerClass; typedef struct _MetaMonitorManager MetaMonitorManager;