mirror of
https://github.com/brl/mutter.git
synced 2025-06-14 01:09:30 +00:00
Make MetaOutput a GObject
Turn MetaOutput into a GObject and move it to a separate file. This changes the storage format, resulting in changing the API for accessing MetaOutputs from using an array, to using a GList. https://bugzilla.gnome.org/show_bug.cgi?id=785381
This commit is contained in:
@ -20,6 +20,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#include "backends/meta-monitor-manager-private.h"
|
||||
#include "backends/meta-output.h"
|
||||
#include "compositor/meta-plugin-manager.h"
|
||||
#include "core/main-private.h"
|
||||
#include "meta/main.h"
|
||||
@ -59,12 +60,8 @@ meta_test_headless_start (void)
|
||||
g_assert_cmpint ((int) monitor_manager->n_modes,
|
||||
==,
|
||||
0);
|
||||
g_assert_cmpint ((int) monitor_manager->n_outputs,
|
||||
==,
|
||||
0);
|
||||
g_assert_cmpint ((int) monitor_manager->n_crtcs,
|
||||
==,
|
||||
0);
|
||||
g_assert_null (monitor_manager->outputs);
|
||||
g_assert_null (monitor_manager->crtcs);
|
||||
g_assert_null (monitor_manager->monitors);
|
||||
g_assert_null (monitor_manager->logical_monitors);
|
||||
|
||||
@ -102,6 +99,7 @@ meta_test_headless_monitor_connect (void)
|
||||
MetaMonitorTestSetup *test_setup;
|
||||
MetaCrtcMode **modes;
|
||||
MetaCrtc **possible_crtcs;
|
||||
MetaOutput *output;
|
||||
GList *logical_monitors;
|
||||
ClutterActor *stage;
|
||||
|
||||
@ -128,22 +126,19 @@ meta_test_headless_monitor_connect (void)
|
||||
possible_crtcs = g_new0 (MetaCrtc *, 1);
|
||||
possible_crtcs[0] = &test_setup->crtcs[0];
|
||||
|
||||
test_setup->n_outputs = 1;
|
||||
test_setup->outputs = g_new0 (MetaOutput, test_setup->n_outputs);
|
||||
test_setup->outputs[0] = (MetaOutput) {
|
||||
.winsys_id = 1,
|
||||
.name = g_strdup ("DP-1"),
|
||||
.vendor = g_strdup ("MetaProduct's Inc."),
|
||||
.product = g_strdup ("MetaMonitor"),
|
||||
.serial = g_strdup ("0x987654"),
|
||||
.preferred_mode = modes[0],
|
||||
.n_modes = 1,
|
||||
.modes = modes,
|
||||
.n_possible_crtcs = 1,
|
||||
.possible_crtcs = possible_crtcs,
|
||||
.backlight = -1,
|
||||
.connector_type = META_CONNECTOR_TYPE_DisplayPort
|
||||
};
|
||||
output = g_object_new (META_TYPE_OUTPUT, NULL);
|
||||
output->winsys_id = 1;
|
||||
output->name = g_strdup ("DP-1");
|
||||
output->vendor = g_strdup ("MetaProduct's Inc.");
|
||||
output->product = g_strdup ("MetaMonitor");
|
||||
output->serial = g_strdup ("0x987654");
|
||||
output->preferred_mode = modes[0];
|
||||
output->n_modes = 1;
|
||||
output->modes = modes;
|
||||
output->n_possible_crtcs = 1;
|
||||
output->possible_crtcs = possible_crtcs;
|
||||
output->connector_type = META_CONNECTOR_TYPE_DisplayPort;
|
||||
test_setup->outputs = g_list_append (NULL, output);
|
||||
|
||||
meta_monitor_manager_test_emulate_hotplug (monitor_manager_test, test_setup);
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
|
||||
#include "backends/meta-backend-private.h"
|
||||
#include "backends/meta-monitor-config-manager.h"
|
||||
#include "backends/meta-output.h"
|
||||
|
||||
struct _MetaMonitorManagerTest
|
||||
{
|
||||
@ -99,7 +100,6 @@ meta_monitor_manager_test_read_current (MetaMonitorManager *manager)
|
||||
manager->n_crtcs = manager_test->test_setup->n_crtcs;
|
||||
|
||||
manager->outputs = manager_test->test_setup->outputs;
|
||||
manager->n_outputs = manager_test->test_setup->n_outputs;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -134,6 +134,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
MetaOutputInfo **outputs,
|
||||
unsigned int n_outputs)
|
||||
{
|
||||
GList *l;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < n_crtcs; i++)
|
||||
@ -218,9 +219,9 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
}
|
||||
|
||||
/* Disable outputs not mentioned in the list */
|
||||
for (i = 0; i < manager->n_outputs; i++)
|
||||
for (l = manager->outputs; l; l = l->next)
|
||||
{
|
||||
MetaOutput *output = &manager->outputs[i];
|
||||
MetaOutput *output = l->data;
|
||||
|
||||
if (output->is_dirty)
|
||||
{
|
||||
|
@ -26,8 +26,7 @@ typedef struct _MetaMonitorTestSetup
|
||||
{
|
||||
MetaCrtcMode *modes;
|
||||
int n_modes;
|
||||
MetaOutput *outputs;
|
||||
int n_outputs;
|
||||
GList *outputs;
|
||||
MetaCrtc *crtcs;
|
||||
int n_crtcs;
|
||||
} MetaMonitorTestSetup;
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "backends/meta-monitor.h"
|
||||
#include "backends/meta-monitor-config-migration.h"
|
||||
#include "backends/meta-monitor-config-store.h"
|
||||
#include "backends/meta-output.h"
|
||||
#include "tests/meta-monitor-manager-test.h"
|
||||
#include "tests/monitor-test-utils.h"
|
||||
#include "tests/test-utils.h"
|
||||
@ -366,11 +367,11 @@ static MetaOutput *
|
||||
output_from_winsys_id (MetaMonitorManager *monitor_manager,
|
||||
long winsys_id)
|
||||
{
|
||||
unsigned int i;
|
||||
GList *l;
|
||||
|
||||
for (i = 0; i < monitor_manager->n_outputs; i++)
|
||||
for (l = monitor_manager->outputs; l; l = l->next)
|
||||
{
|
||||
MetaOutput *output = &monitor_manager->outputs[i];
|
||||
MetaOutput *output = l->data;
|
||||
|
||||
if (output->winsys_id == winsys_id)
|
||||
return output;
|
||||
@ -616,7 +617,7 @@ check_monitor_configuration (MonitorTestCase *test_case)
|
||||
g_assert_cmpint (monitor_manager->screen_height,
|
||||
==,
|
||||
test_case->expect.screen_height);
|
||||
g_assert_cmpint ((int) monitor_manager->n_outputs,
|
||||
g_assert_cmpint ((int) g_list_length (monitor_manager->outputs),
|
||||
==,
|
||||
test_case->expect.n_outputs);
|
||||
g_assert_cmpint ((int) monitor_manager->n_crtcs,
|
||||
@ -892,10 +893,10 @@ create_monitor_test_setup (MonitorTestCase *test_case,
|
||||
};
|
||||
}
|
||||
|
||||
test_setup->n_outputs = test_case->setup.n_outputs;
|
||||
test_setup->outputs = g_new0 (MetaOutput, test_setup->n_outputs);
|
||||
for (i = 0; i < test_setup->n_outputs; i++)
|
||||
test_setup->outputs = NULL;
|
||||
for (i = 0; i < test_case->setup.n_outputs; i++)
|
||||
{
|
||||
MetaOutput *output;
|
||||
MetaOutputTest *output_test;
|
||||
int crtc_index;
|
||||
MetaCrtc *crtc;
|
||||
@ -958,37 +959,39 @@ create_monitor_test_setup (MonitorTestCase *test_case,
|
||||
if (!serial)
|
||||
serial = "0x123456";
|
||||
|
||||
test_setup->outputs[i] = (MetaOutput) {
|
||||
.crtc = crtc,
|
||||
.winsys_id = i,
|
||||
.name = (is_laptop_panel ? g_strdup_printf ("eDP-%d",
|
||||
++n_laptop_panels)
|
||||
: g_strdup_printf ("DP-%d",
|
||||
++n_normal_panels)),
|
||||
.vendor = g_strdup ("MetaProduct's Inc."),
|
||||
.product = g_strdup ("MetaMonitor"),
|
||||
.serial = g_strdup (serial),
|
||||
.suggested_x = -1,
|
||||
.suggested_y = -1,
|
||||
.hotplug_mode_update = hotplug_mode_update,
|
||||
.width_mm = test_case->setup.outputs[i].width_mm,
|
||||
.height_mm = test_case->setup.outputs[i].height_mm,
|
||||
.subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN,
|
||||
.preferred_mode = preferred_mode,
|
||||
.n_modes = n_modes,
|
||||
.modes = modes,
|
||||
.n_possible_crtcs = n_possible_crtcs,
|
||||
.possible_crtcs = possible_crtcs,
|
||||
.n_possible_clones = 0,
|
||||
.possible_clones = NULL,
|
||||
.backlight = -1,
|
||||
.connector_type = (is_laptop_panel ? META_CONNECTOR_TYPE_eDP
|
||||
: META_CONNECTOR_TYPE_DisplayPort),
|
||||
.tile_info = test_case->setup.outputs[i].tile_info,
|
||||
.is_underscanning = test_case->setup.outputs[i].is_underscanning,
|
||||
.driver_private = output_test,
|
||||
.driver_notify = (GDestroyNotify) meta_output_test_destroy_notify
|
||||
};
|
||||
output = g_object_new (META_TYPE_OUTPUT, NULL);
|
||||
|
||||
output->crtc = crtc;
|
||||
output->winsys_id = i;
|
||||
output->name = (is_laptop_panel ? g_strdup_printf ("eDP-%d",
|
||||
++n_laptop_panels)
|
||||
: g_strdup_printf ("DP-%d",
|
||||
++n_normal_panels));
|
||||
output->vendor = g_strdup ("MetaProduct's Inc.");
|
||||
output->product = g_strdup ("MetaMonitor");
|
||||
output->serial = g_strdup (serial);
|
||||
output->suggested_x = -1;
|
||||
output->suggested_y = -1;
|
||||
output->hotplug_mode_update = hotplug_mode_update;
|
||||
output->width_mm = test_case->setup.outputs[i].width_mm;
|
||||
output->height_mm = test_case->setup.outputs[i].height_mm;
|
||||
output->subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
|
||||
output->preferred_mode = preferred_mode;
|
||||
output->n_modes = n_modes;
|
||||
output->modes = modes;
|
||||
output->n_possible_crtcs = n_possible_crtcs;
|
||||
output->possible_crtcs = possible_crtcs;
|
||||
output->n_possible_clones = 0;
|
||||
output->possible_clones = NULL;
|
||||
output->backlight = -1;
|
||||
output->connector_type = (is_laptop_panel ? META_CONNECTOR_TYPE_eDP
|
||||
: META_CONNECTOR_TYPE_DisplayPort);
|
||||
output->tile_info = test_case->setup.outputs[i].tile_info;
|
||||
output->is_underscanning = test_case->setup.outputs[i].is_underscanning;
|
||||
output->driver_private = output_test;
|
||||
output->driver_notify = (GDestroyNotify) meta_output_test_destroy_notify;
|
||||
|
||||
test_setup->outputs = g_list_append (test_setup->outputs, output);
|
||||
}
|
||||
|
||||
return test_setup;
|
||||
@ -1909,6 +1912,15 @@ meta_test_monitor_hidpi_linear_config (void)
|
||||
check_monitor_configuration (&test_case);
|
||||
}
|
||||
|
||||
static void
|
||||
set_suggested_output_position (MetaOutput *output,
|
||||
int x,
|
||||
int y)
|
||||
{
|
||||
output->suggested_x = x;
|
||||
output->suggested_y = y;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_test_monitor_suggested_config (void)
|
||||
{
|
||||
@ -2047,10 +2059,10 @@ meta_test_monitor_suggested_config (void)
|
||||
test_setup = create_monitor_test_setup (&test_case,
|
||||
MONITOR_TEST_FLAG_NO_STORED);
|
||||
|
||||
test_setup->outputs[0].suggested_x = 1024;
|
||||
test_setup->outputs[0].suggested_y = 758;
|
||||
test_setup->outputs[1].suggested_x = 0;
|
||||
test_setup->outputs[1].suggested_y = 0;
|
||||
set_suggested_output_position (g_list_nth_data (test_setup->outputs, 0),
|
||||
1024, 758);
|
||||
set_suggested_output_position (g_list_nth_data (test_setup->outputs, 1),
|
||||
0, 0);
|
||||
|
||||
emulate_hotplug (test_setup);
|
||||
check_monitor_configuration (&test_case);
|
||||
|
Reference in New Issue
Block a user