diff options
author | Rui Matos <tiagomatos@gmail.com> | 2015-10-27 15:02:43 +0100 |
---|---|---|
committer | Rui Matos <tiagomatos@gmail.com> | 2015-10-30 17:47:00 +0100 |
commit | bff75b64be3da88385173520c4f517693f02971c (patch) | |
tree | 2c6f877f0a5b3eb8c1dec22ee8df96c3447e5894 /src/backends | |
parent | 8899b9da01b2c6199694c87de28e1addc57cf162 (diff) | |
download | mutter-bff75b64be3da88385173520c4f517693f02971c.tar.gz |
monitor-manager: Expose a few helpers to clear structs
These are useful for child classes to unwind cleanly when constructing
their structures.
https://bugzilla.gnome.org/show_bug.cgi?id=756796
Diffstat (limited to 'src/backends')
-rw-r--r-- | src/backends/meta-monitor-manager-private.h | 4 | ||||
-rw-r--r-- | src/backends/meta-monitor-manager.c | 62 |
2 files changed, 44 insertions, 22 deletions
diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h index c30e8d7b0..1b80299d1 100644 --- a/src/backends/meta-monitor-manager-private.h +++ b/src/backends/meta-monitor-manager-private.h @@ -414,6 +414,10 @@ gint meta_monitor_manager_get_monitor_at_point (MetaMonitorManager gfloat x, gfloat y); +void meta_monitor_manager_clear_output (MetaOutput *output); +void meta_monitor_manager_clear_mode (MetaMonitorMode *mode); +void meta_monitor_manager_clear_crtc (MetaCRTC *crtc); + /* Returns true if transform causes width and height to be inverted This is true for the odd transforms in the enum */ static inline gboolean diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c index a15673e64..38ccc7261 100644 --- a/src/backends/meta-monitor-manager.c +++ b/src/backends/meta-monitor-manager.c @@ -346,6 +346,23 @@ meta_monitor_manager_constructed (GObject *object) manager->in_init = FALSE; } +void +meta_monitor_manager_clear_output (MetaOutput *output) +{ + g_free (output->name); + g_free (output->vendor); + g_free (output->product); + g_free (output->serial); + g_free (output->modes); + g_free (output->possible_crtcs); + g_free (output->possible_clones); + + if (output->driver_notify) + output->driver_notify (output); + + memset (output, 0, sizeof (*output)); +} + static void meta_monitor_manager_free_output_array (MetaOutput *old_outputs, int n_old_outputs) @@ -353,22 +370,22 @@ meta_monitor_manager_free_output_array (MetaOutput *old_outputs, int i; for (i = 0; i < n_old_outputs; i++) - { - g_free (old_outputs[i].name); - g_free (old_outputs[i].vendor); - g_free (old_outputs[i].product); - g_free (old_outputs[i].serial); - g_free (old_outputs[i].modes); - g_free (old_outputs[i].possible_crtcs); - g_free (old_outputs[i].possible_clones); - - if (old_outputs[i].driver_notify) - old_outputs[i].driver_notify (&old_outputs[i]); - } + meta_monitor_manager_clear_output (&old_outputs[i]); g_free (old_outputs); } +void +meta_monitor_manager_clear_mode (MetaMonitorMode *mode) +{ + g_free (mode->name); + + if (mode->driver_notify) + mode->driver_notify (mode); + + memset (mode, 0, sizeof (*mode)); +} + static void meta_monitor_manager_free_mode_array (MetaMonitorMode *old_modes, int n_old_modes) @@ -376,16 +393,20 @@ meta_monitor_manager_free_mode_array (MetaMonitorMode *old_modes, int i; for (i = 0; i < n_old_modes; i++) - { - g_free (old_modes[i].name); - - if (old_modes[i].driver_notify) - old_modes[i].driver_notify (&old_modes[i]); - } + meta_monitor_manager_clear_mode (&old_modes[i]); g_free (old_modes); } +void +meta_monitor_manager_clear_crtc (MetaCRTC *crtc) +{ + if (crtc->driver_notify) + crtc->driver_notify (crtc); + + memset (crtc, 0, sizeof (*crtc)); +} + static void meta_monitor_manager_free_crtc_array (MetaCRTC *old_crtcs, int n_old_crtcs) @@ -393,10 +414,7 @@ meta_monitor_manager_free_crtc_array (MetaCRTC *old_crtcs, int i; for (i = 0; i < n_old_crtcs; i++) - { - if (old_crtcs[i].driver_notify) - old_crtcs[i].driver_notify (&old_crtcs[i]); - } + meta_monitor_manager_clear_crtc (&old_crtcs[i]); g_free (old_crtcs); } |