diff options
author | Jonas Ådahl <jadahl@gmail.com> | 2017-03-28 16:52:15 +0800 |
---|---|---|
committer | Jonas Ådahl <jadahl@gmail.com> | 2017-10-05 16:18:43 -0400 |
commit | 2db55052168dae091ad561a19069988834a1e0db (patch) | |
tree | 82c5b9426a3f66cc0969a021cf79d877aceea39e /src/backends/x11/meta-monitor-manager-xrandr.c | |
parent | f44b6c772aca3e59d08ec2acc19a186d791d5d60 (diff) | |
download | mutter-2db55052168dae091ad561a19069988834a1e0db.tar.gz |
monitor-manager: Turn MetaCrtcMode into a GObject
Convert MetaCrtcMode from a plain struct to a GObject. This changes the
storage format, and also the API, as the API was dependent on the
storage format.
https://bugzilla.gnome.org/show_bug.cgi?id=785381
Diffstat (limited to 'src/backends/x11/meta-monitor-manager-xrandr.c')
-rw-r--r-- | src/backends/x11/meta-monitor-manager-xrandr.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c index 60870103a..558bede31 100644 --- a/src/backends/x11/meta-monitor-manager-xrandr.c +++ b/src/backends/x11/meta-monitor-manager-xrandr.c @@ -659,7 +659,7 @@ output_get_modes (MetaMonitorManager *manager, MetaOutput *output, XRROutputInfo *xrandr_output) { - guint j, k; + guint j; guint n_actual_modes; output->modes = g_new0 (MetaCrtcMode *, xrandr_output->nmode); @@ -667,11 +667,15 @@ output_get_modes (MetaMonitorManager *manager, n_actual_modes = 0; for (j = 0; j < (guint)xrandr_output->nmode; j++) { - for (k = 0; k < manager->n_modes; k++) + GList *l; + + for (l = manager->modes; l; l = l->next) { - if (xrandr_output->modes[j] == (XID)manager->modes[k].mode_id) + MetaCrtcMode *mode = l->data; + + if (xrandr_output->modes[j] == (XID) mode->mode_id) { - output->modes[n_actual_modes] = &manager->modes[k]; + output->modes[n_actual_modes] = mode; n_actual_modes += 1; break; } @@ -797,9 +801,8 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager) return; manager_xrandr->resources = resources; - manager->n_modes = resources->nmode; manager->outputs = NULL; - manager->modes = g_new0 (MetaCrtcMode, manager->n_modes); + manager->modes = NULL; manager->crtcs = NULL; for (i = 0; i < (unsigned)resources->nmode; i++) @@ -807,7 +810,7 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager) XRRModeInfo *xmode = &resources->modes[i]; MetaCrtcMode *mode; - mode = &manager->modes[i]; + mode = g_object_new (META_TYPE_CRTC_MODE, NULL); mode->mode_id = xmode->id; mode->width = xmode->width; @@ -816,6 +819,8 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager) ((float)xmode->hTotal * xmode->vTotal)); mode->flags = xmode->modeFlags; mode->name = get_xmode_name (xmode); + + manager->modes = g_list_append (manager->modes, mode); } for (i = 0; i < (unsigned)resources->ncrtc; i++) @@ -843,7 +848,7 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager) { if (resources->modes[j].id == xrandr_crtc->mode) { - crtc->current_mode = &manager->modes[j]; + crtc->current_mode = g_list_nth_data (manager->modes, j); break; } } |