summaryrefslogtreecommitdiff
path: root/src/backends/x11/meta-monitor-manager-xrandr.c
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2017-03-28 16:52:15 +0800
committerJonas Ådahl <jadahl@gmail.com>2017-10-05 16:18:43 -0400
commit2db55052168dae091ad561a19069988834a1e0db (patch)
tree82c5b9426a3f66cc0969a021cf79d877aceea39e /src/backends/x11/meta-monitor-manager-xrandr.c
parentf44b6c772aca3e59d08ec2acc19a186d791d5d60 (diff)
downloadmutter-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.c21
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;
}
}