mirror of
https://github.com/brl/mutter.git
synced 2025-02-18 06:04:10 +00:00
Move the dummy monitor manager to his own subclass / file
This commit is contained in:
parent
f6a73bcf22
commit
2a0289a216
@ -144,6 +144,8 @@ libmutter_wayland_la_SOURCES = \
|
|||||||
core/monitor.c \
|
core/monitor.c \
|
||||||
core/monitor-config.c \
|
core/monitor-config.c \
|
||||||
core/monitor-private.h \
|
core/monitor-private.h \
|
||||||
|
core/meta-monitor-manager-dummy.c \
|
||||||
|
core/meta-monitor-manager-dummy.h \
|
||||||
core/meta-monitor-manager-kms.c \
|
core/meta-monitor-manager-kms.c \
|
||||||
core/meta-monitor-manager-kms.h \
|
core/meta-monitor-manager-kms.h \
|
||||||
core/meta-monitor-manager-xrandr.c \
|
core/meta-monitor-manager-xrandr.c \
|
||||||
|
243
src/core/meta-monitor-manager-dummy.c
Normal file
243
src/core/meta-monitor-manager-dummy.c
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2001, 2002 Havoc Pennington
|
||||||
|
* Copyright (C) 2002, 2003 Red Hat Inc.
|
||||||
|
* Some ICCCM manager selection code derived from fvwm2,
|
||||||
|
* Copyright (C) 2001 Dominik Vogt, Matthias Clasen, and fvwm2 team
|
||||||
|
* Copyright (C) 2003 Rob Adams
|
||||||
|
* Copyright (C) 2004-2006 Elijah Newren
|
||||||
|
* Copyright (C) 2013 Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include "meta-monitor-manager-dummy.h"
|
||||||
|
|
||||||
|
#define ALL_WL_TRANSFORMS ((1 << (WL_OUTPUT_TRANSFORM_FLIPPED_270 + 1)) - 1)
|
||||||
|
|
||||||
|
struct _MetaMonitorManagerDummy
|
||||||
|
{
|
||||||
|
MetaMonitorManager parent_instance;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _MetaMonitorManagerDummyClass
|
||||||
|
{
|
||||||
|
MetaMonitorManagerClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (MetaMonitorManagerDummy, meta_monitor_manager_dummy, META_TYPE_MONITOR_MANAGER);
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_monitor_manager_dummy_read_current (MetaMonitorManager *manager)
|
||||||
|
{
|
||||||
|
manager->max_screen_width = 65535;
|
||||||
|
manager->max_screen_height = 65535;
|
||||||
|
manager->screen_width = 1024;
|
||||||
|
manager->screen_height = 768;
|
||||||
|
|
||||||
|
manager->modes = g_new0 (MetaMonitorMode, 1);
|
||||||
|
manager->n_modes = 1;
|
||||||
|
|
||||||
|
manager->modes[0].mode_id = 0;
|
||||||
|
manager->modes[0].width = 1024;
|
||||||
|
manager->modes[0].height = 768;
|
||||||
|
manager->modes[0].refresh_rate = 60.0;
|
||||||
|
|
||||||
|
manager->crtcs = g_new0 (MetaCRTC, 1);
|
||||||
|
manager->n_crtcs = 1;
|
||||||
|
|
||||||
|
manager->crtcs[0].crtc_id = 1;
|
||||||
|
manager->crtcs[0].rect.x = 0;
|
||||||
|
manager->crtcs[0].rect.y = 0;
|
||||||
|
manager->crtcs[0].rect.width = manager->modes[0].width;
|
||||||
|
manager->crtcs[0].rect.height = manager->modes[0].height;
|
||||||
|
manager->crtcs[0].current_mode = &manager->modes[0];
|
||||||
|
manager->crtcs[0].transform = WL_OUTPUT_TRANSFORM_NORMAL;
|
||||||
|
manager->crtcs[0].all_transforms = ALL_WL_TRANSFORMS;
|
||||||
|
manager->crtcs[0].is_dirty = FALSE;
|
||||||
|
manager->crtcs[0].logical_monitor = NULL;
|
||||||
|
|
||||||
|
manager->outputs = g_new0 (MetaOutput, 1);
|
||||||
|
manager->n_outputs = 1;
|
||||||
|
|
||||||
|
manager->outputs[0].crtc = &manager->crtcs[0];
|
||||||
|
manager->outputs[0].output_id = 1;
|
||||||
|
manager->outputs[0].name = g_strdup ("LVDS");
|
||||||
|
manager->outputs[0].vendor = g_strdup ("MetaProducts Inc.");
|
||||||
|
manager->outputs[0].product = g_strdup ("unknown");
|
||||||
|
manager->outputs[0].serial = g_strdup ("0xC0FFEE");
|
||||||
|
manager->outputs[0].width_mm = 222;
|
||||||
|
manager->outputs[0].height_mm = 125;
|
||||||
|
manager->outputs[0].subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
|
||||||
|
manager->outputs[0].preferred_mode = &manager->modes[0];
|
||||||
|
manager->outputs[0].n_modes = 1;
|
||||||
|
manager->outputs[0].modes = g_new0 (MetaMonitorMode *, 1);
|
||||||
|
manager->outputs[0].modes[0] = &manager->modes[0];
|
||||||
|
manager->outputs[0].n_possible_crtcs = 1;
|
||||||
|
manager->outputs[0].possible_crtcs = g_new0 (MetaCRTC *, 1);
|
||||||
|
manager->outputs[0].possible_crtcs[0] = &manager->crtcs[0];
|
||||||
|
manager->outputs[0].n_possible_clones = 0;
|
||||||
|
manager->outputs[0].possible_clones = g_new0 (MetaOutput *, 0);
|
||||||
|
manager->outputs[0].backlight = -1;
|
||||||
|
manager->outputs[0].backlight_min = 0;
|
||||||
|
manager->outputs[0].backlight_max = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_monitor_manager_dummy_apply_config (MetaMonitorManager *manager,
|
||||||
|
MetaCRTCInfo **crtcs,
|
||||||
|
unsigned int n_crtcs,
|
||||||
|
MetaOutputInfo **outputs,
|
||||||
|
unsigned int n_outputs)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
int screen_width = 0, screen_height = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < n_crtcs; i++)
|
||||||
|
{
|
||||||
|
MetaCRTCInfo *crtc_info = crtcs[i];
|
||||||
|
MetaCRTC *crtc = crtc_info->crtc;
|
||||||
|
crtc->is_dirty = TRUE;
|
||||||
|
|
||||||
|
if (crtc_info->mode == NULL)
|
||||||
|
{
|
||||||
|
crtc->rect.x = 0;
|
||||||
|
crtc->rect.y = 0;
|
||||||
|
crtc->rect.width = 0;
|
||||||
|
crtc->rect.height = 0;
|
||||||
|
crtc->current_mode = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MetaMonitorMode *mode;
|
||||||
|
MetaOutput *output;
|
||||||
|
int i, n_outputs;
|
||||||
|
int width, height;
|
||||||
|
|
||||||
|
mode = crtc_info->mode;
|
||||||
|
|
||||||
|
if (meta_monitor_transform_is_rotated (crtc_info->transform))
|
||||||
|
{
|
||||||
|
width = mode->height;
|
||||||
|
height = mode->width;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
width = mode->width;
|
||||||
|
height = mode->height;
|
||||||
|
}
|
||||||
|
|
||||||
|
crtc->rect.x = crtc_info->x;
|
||||||
|
crtc->rect.y = crtc_info->y;
|
||||||
|
crtc->rect.width = width;
|
||||||
|
crtc->rect.height = height;
|
||||||
|
crtc->current_mode = mode;
|
||||||
|
crtc->transform = crtc_info->transform;
|
||||||
|
|
||||||
|
screen_width = MAX (screen_width, crtc_info->x + width);
|
||||||
|
screen_height = MAX (screen_height, crtc_info->y + height);
|
||||||
|
|
||||||
|
n_outputs = crtc_info->outputs->len;
|
||||||
|
for (i = 0; i < n_outputs; i++)
|
||||||
|
{
|
||||||
|
output = ((MetaOutput**)crtc_info->outputs->pdata)[i];
|
||||||
|
|
||||||
|
output->is_dirty = TRUE;
|
||||||
|
output->crtc = crtc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < n_outputs; i++)
|
||||||
|
{
|
||||||
|
MetaOutputInfo *output_info = outputs[i];
|
||||||
|
MetaOutput *output = output_info->output;
|
||||||
|
|
||||||
|
output->is_primary = output_info->is_primary;
|
||||||
|
output->is_presentation = output_info->is_presentation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disable CRTCs not mentioned in the list */
|
||||||
|
for (i = 0; i < manager->n_crtcs; i++)
|
||||||
|
{
|
||||||
|
MetaCRTC *crtc = &manager->crtcs[i];
|
||||||
|
|
||||||
|
crtc->logical_monitor = NULL;
|
||||||
|
|
||||||
|
if (crtc->is_dirty)
|
||||||
|
{
|
||||||
|
crtc->is_dirty = FALSE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
crtc->rect.x = 0;
|
||||||
|
crtc->rect.y = 0;
|
||||||
|
crtc->rect.width = 0;
|
||||||
|
crtc->rect.height = 0;
|
||||||
|
crtc->current_mode = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disable outputs not mentioned in the list */
|
||||||
|
for (i = 0; i < manager->n_outputs; i++)
|
||||||
|
{
|
||||||
|
MetaOutput *output = &manager->outputs[i];
|
||||||
|
|
||||||
|
if (output->is_dirty)
|
||||||
|
{
|
||||||
|
output->is_dirty = FALSE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
output->crtc = NULL;
|
||||||
|
output->is_primary = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
manager->screen_width = screen_width;
|
||||||
|
manager->screen_height = screen_height;
|
||||||
|
|
||||||
|
meta_monitor_manager_rebuild_derived (manager);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GBytes *
|
||||||
|
meta_monitor_manager_dummy_read_edid (MetaMonitorManager *manager,
|
||||||
|
MetaOutput *output)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
meta_monitor_manager_dummy_get_edid_file (MetaMonitorManager *manager,
|
||||||
|
MetaOutput *output)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_monitor_manager_dummy_class_init (MetaMonitorManagerDummyClass *klass)
|
||||||
|
{
|
||||||
|
MetaMonitorManagerClass *manager_class = META_MONITOR_MANAGER_CLASS (klass);
|
||||||
|
|
||||||
|
manager_class->read_current = meta_monitor_manager_dummy_read_current;
|
||||||
|
manager_class->apply_configuration = meta_monitor_manager_dummy_apply_config;
|
||||||
|
manager_class->get_edid_file = meta_monitor_manager_dummy_get_edid_file;
|
||||||
|
manager_class->read_edid = meta_monitor_manager_dummy_read_edid;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_monitor_manager_dummy_init (MetaMonitorManagerDummy *manager)
|
||||||
|
{
|
||||||
|
}
|
40
src/core/meta-monitor-manager-dummy.h
Normal file
40
src/core/meta-monitor-manager-dummy.h
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2001 Havoc Pennington
|
||||||
|
* Copyright (C) 2003 Rob Adams
|
||||||
|
* Copyright (C) 2004-2006 Elijah Newren
|
||||||
|
* Copyright (C) 2013 Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef META_MONITOR_MANAGER_DUMMY_H
|
||||||
|
#define META_MONITOR_MANAGER_DUMMY_H
|
||||||
|
|
||||||
|
#include "monitor-private.h"
|
||||||
|
|
||||||
|
#define META_TYPE_MONITOR_MANAGER_DUMMY (meta_monitor_manager_dummy_get_type ())
|
||||||
|
#define META_MONITOR_MANAGER_DUMMY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_MONITOR_MANAGER_DUMMY, MetaMonitorManagerDummy))
|
||||||
|
#define META_MONITOR_MANAGER_DUMMY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_MONITOR_MANAGER_DUMMY, MetaMonitorManagerDummyClass))
|
||||||
|
#define META_IS_MONITOR_MANAGER_DUMMY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_MONITOR_MANAGER_DUMMY))
|
||||||
|
#define META_IS_MONITOR_MANAGER_DUMMY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_MONITOR_MANAGER_DUMMY))
|
||||||
|
#define META_MONITOR_MANAGER_DUMMY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_MONITOR_MANAGER_DUMMY, MetaMonitorManagerDummyClass))
|
||||||
|
|
||||||
|
typedef struct _MetaMonitorManagerDummyClass MetaMonitorManagerDummyClass;
|
||||||
|
typedef struct _MetaMonitorManagerDummy MetaMonitorManagerDummy;
|
||||||
|
|
||||||
|
GType meta_monitor_manager_dummy_get_type (void);
|
||||||
|
|
||||||
|
#endif /* META_MONITOR_MANAGER_DUMMY_H */
|
@ -36,11 +36,10 @@
|
|||||||
#include "monitor-private.h"
|
#include "monitor-private.h"
|
||||||
#include "meta-monitor-manager-kms.h"
|
#include "meta-monitor-manager-kms.h"
|
||||||
#include "meta-monitor-manager-xrandr.h"
|
#include "meta-monitor-manager-xrandr.h"
|
||||||
|
#include "meta-monitor-manager-dummy.h"
|
||||||
|
|
||||||
#include "meta-dbus-xrandr.h"
|
#include "meta-dbus-xrandr.h"
|
||||||
|
|
||||||
#define ALL_WL_TRANSFORMS ((1 << (WL_OUTPUT_TRANSFORM_FLIPPED_270 + 1)) - 1)
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
CONFIRM_DISPLAY_CHANGE,
|
CONFIRM_DISPLAY_CHANGE,
|
||||||
SIGNALS_LAST
|
SIGNALS_LAST
|
||||||
@ -56,196 +55,11 @@ static int signals[SIGNALS_LAST];
|
|||||||
|
|
||||||
static void meta_monitor_manager_display_config_init (MetaDBusDisplayConfigIface *iface);
|
static void meta_monitor_manager_display_config_init (MetaDBusDisplayConfigIface *iface);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (MetaMonitorManager, meta_monitor_manager, META_DBUS_TYPE_DISPLAY_CONFIG_SKELETON,
|
G_DEFINE_ABSTRACT_TYPE_WITH_CODE (MetaMonitorManager, meta_monitor_manager, META_DBUS_TYPE_DISPLAY_CONFIG_SKELETON,
|
||||||
G_IMPLEMENT_INTERFACE (META_DBUS_TYPE_DISPLAY_CONFIG, meta_monitor_manager_display_config_init));
|
G_IMPLEMENT_INTERFACE (META_DBUS_TYPE_DISPLAY_CONFIG, meta_monitor_manager_display_config_init));
|
||||||
|
|
||||||
static void initialize_dbus_interface (MetaMonitorManager *manager);
|
static void initialize_dbus_interface (MetaMonitorManager *manager);
|
||||||
|
|
||||||
static void
|
|
||||||
read_current_dummy (MetaMonitorManager *manager)
|
|
||||||
{
|
|
||||||
manager->max_screen_width = 65535;
|
|
||||||
manager->max_screen_height = 65535;
|
|
||||||
manager->screen_width = 1024;
|
|
||||||
manager->screen_height = 768;
|
|
||||||
|
|
||||||
manager->modes = g_new0 (MetaMonitorMode, 1);
|
|
||||||
manager->n_modes = 1;
|
|
||||||
|
|
||||||
manager->modes[0].mode_id = 0;
|
|
||||||
manager->modes[0].width = 1024;
|
|
||||||
manager->modes[0].height = 768;
|
|
||||||
manager->modes[0].refresh_rate = 60.0;
|
|
||||||
|
|
||||||
manager->crtcs = g_new0 (MetaCRTC, 1);
|
|
||||||
manager->n_crtcs = 1;
|
|
||||||
|
|
||||||
manager->crtcs[0].crtc_id = 1;
|
|
||||||
manager->crtcs[0].rect.x = 0;
|
|
||||||
manager->crtcs[0].rect.y = 0;
|
|
||||||
manager->crtcs[0].rect.width = manager->modes[0].width;
|
|
||||||
manager->crtcs[0].rect.height = manager->modes[0].height;
|
|
||||||
manager->crtcs[0].current_mode = &manager->modes[0];
|
|
||||||
manager->crtcs[0].transform = WL_OUTPUT_TRANSFORM_NORMAL;
|
|
||||||
manager->crtcs[0].all_transforms = ALL_WL_TRANSFORMS;
|
|
||||||
manager->crtcs[0].is_dirty = FALSE;
|
|
||||||
manager->crtcs[0].logical_monitor = NULL;
|
|
||||||
|
|
||||||
manager->outputs = g_new0 (MetaOutput, 1);
|
|
||||||
manager->n_outputs = 1;
|
|
||||||
|
|
||||||
manager->outputs[0].crtc = &manager->crtcs[0];
|
|
||||||
manager->outputs[0].output_id = 1;
|
|
||||||
manager->outputs[0].name = g_strdup ("LVDS");
|
|
||||||
manager->outputs[0].vendor = g_strdup ("MetaProducts Inc.");
|
|
||||||
manager->outputs[0].product = g_strdup ("unknown");
|
|
||||||
manager->outputs[0].serial = g_strdup ("0xC0FFEE");
|
|
||||||
manager->outputs[0].width_mm = 222;
|
|
||||||
manager->outputs[0].height_mm = 125;
|
|
||||||
manager->outputs[0].subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
|
|
||||||
manager->outputs[0].preferred_mode = &manager->modes[0];
|
|
||||||
manager->outputs[0].n_modes = 1;
|
|
||||||
manager->outputs[0].modes = g_new0 (MetaMonitorMode *, 1);
|
|
||||||
manager->outputs[0].modes[0] = &manager->modes[0];
|
|
||||||
manager->outputs[0].n_possible_crtcs = 1;
|
|
||||||
manager->outputs[0].possible_crtcs = g_new0 (MetaCRTC *, 1);
|
|
||||||
manager->outputs[0].possible_crtcs[0] = &manager->crtcs[0];
|
|
||||||
manager->outputs[0].n_possible_clones = 0;
|
|
||||||
manager->outputs[0].possible_clones = g_new0 (MetaOutput *, 0);
|
|
||||||
manager->outputs[0].backlight = -1;
|
|
||||||
manager->outputs[0].backlight_min = 0;
|
|
||||||
manager->outputs[0].backlight_max = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
apply_config_dummy (MetaMonitorManager *manager,
|
|
||||||
MetaCRTCInfo **crtcs,
|
|
||||||
unsigned int n_crtcs,
|
|
||||||
MetaOutputInfo **outputs,
|
|
||||||
unsigned int n_outputs)
|
|
||||||
{
|
|
||||||
unsigned i;
|
|
||||||
int screen_width = 0, screen_height = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < n_crtcs; i++)
|
|
||||||
{
|
|
||||||
MetaCRTCInfo *crtc_info = crtcs[i];
|
|
||||||
MetaCRTC *crtc = crtc_info->crtc;
|
|
||||||
crtc->is_dirty = TRUE;
|
|
||||||
|
|
||||||
if (crtc_info->mode == NULL)
|
|
||||||
{
|
|
||||||
crtc->rect.x = 0;
|
|
||||||
crtc->rect.y = 0;
|
|
||||||
crtc->rect.width = 0;
|
|
||||||
crtc->rect.height = 0;
|
|
||||||
crtc->current_mode = NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MetaMonitorMode *mode;
|
|
||||||
MetaOutput *output;
|
|
||||||
int i, n_outputs;
|
|
||||||
int width, height;
|
|
||||||
|
|
||||||
mode = crtc_info->mode;
|
|
||||||
|
|
||||||
if (meta_monitor_transform_is_rotated (crtc_info->transform))
|
|
||||||
{
|
|
||||||
width = mode->height;
|
|
||||||
height = mode->width;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
width = mode->width;
|
|
||||||
height = mode->height;
|
|
||||||
}
|
|
||||||
|
|
||||||
crtc->rect.x = crtc_info->x;
|
|
||||||
crtc->rect.y = crtc_info->y;
|
|
||||||
crtc->rect.width = width;
|
|
||||||
crtc->rect.height = height;
|
|
||||||
crtc->current_mode = mode;
|
|
||||||
crtc->transform = crtc_info->transform;
|
|
||||||
|
|
||||||
screen_width = MAX (screen_width, crtc_info->x + width);
|
|
||||||
screen_height = MAX (screen_height, crtc_info->y + height);
|
|
||||||
|
|
||||||
n_outputs = crtc_info->outputs->len;
|
|
||||||
for (i = 0; i < n_outputs; i++)
|
|
||||||
{
|
|
||||||
output = ((MetaOutput**)crtc_info->outputs->pdata)[i];
|
|
||||||
|
|
||||||
output->is_dirty = TRUE;
|
|
||||||
output->crtc = crtc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < n_outputs; i++)
|
|
||||||
{
|
|
||||||
MetaOutputInfo *output_info = outputs[i];
|
|
||||||
MetaOutput *output = output_info->output;
|
|
||||||
|
|
||||||
output->is_primary = output_info->is_primary;
|
|
||||||
output->is_presentation = output_info->is_presentation;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disable CRTCs not mentioned in the list */
|
|
||||||
for (i = 0; i < manager->n_crtcs; i++)
|
|
||||||
{
|
|
||||||
MetaCRTC *crtc = &manager->crtcs[i];
|
|
||||||
|
|
||||||
crtc->logical_monitor = NULL;
|
|
||||||
|
|
||||||
if (crtc->is_dirty)
|
|
||||||
{
|
|
||||||
crtc->is_dirty = FALSE;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
crtc->rect.x = 0;
|
|
||||||
crtc->rect.y = 0;
|
|
||||||
crtc->rect.width = 0;
|
|
||||||
crtc->rect.height = 0;
|
|
||||||
crtc->current_mode = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disable outputs not mentioned in the list */
|
|
||||||
for (i = 0; i < manager->n_outputs; i++)
|
|
||||||
{
|
|
||||||
MetaOutput *output = &manager->outputs[i];
|
|
||||||
|
|
||||||
if (output->is_dirty)
|
|
||||||
{
|
|
||||||
output->is_dirty = FALSE;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
output->crtc = NULL;
|
|
||||||
output->is_primary = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
manager->screen_width = screen_width;
|
|
||||||
manager->screen_height = screen_height;
|
|
||||||
|
|
||||||
meta_monitor_manager_rebuild_derived (manager);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GBytes *
|
|
||||||
read_edid_dummy (MetaMonitorManager *manager,
|
|
||||||
MetaOutput *output)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *
|
|
||||||
get_edid_file_dummy (MetaMonitorManager *manager,
|
|
||||||
MetaOutput *output)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_monitor_manager_init (MetaMonitorManager *manager)
|
meta_monitor_manager_init (MetaMonitorManager *manager)
|
||||||
{
|
{
|
||||||
@ -369,7 +183,7 @@ get_default_backend (void)
|
|||||||
* we're a nested configuration, so return the dummy
|
* we're a nested configuration, so return the dummy
|
||||||
* monitor setup. */
|
* monitor setup. */
|
||||||
if (meta_is_wayland_compositor ())
|
if (meta_is_wayland_compositor ())
|
||||||
return META_TYPE_MONITOR_MANAGER;
|
return META_TYPE_MONITOR_MANAGER_DUMMY;
|
||||||
else
|
else
|
||||||
return META_TYPE_MONITOR_MANAGER_XRANDR;
|
return META_TYPE_MONITOR_MANAGER_XRANDR;
|
||||||
}
|
}
|
||||||
@ -381,7 +195,7 @@ get_default_backend (void)
|
|||||||
/* Use the dummy implementation on Wayland for now.
|
/* Use the dummy implementation on Wayland for now.
|
||||||
* In the future, we should support wl_fullscreen_output
|
* In the future, we should support wl_fullscreen_output
|
||||||
* which will have CRTC management in the protocol. */
|
* which will have CRTC management in the protocol. */
|
||||||
return META_TYPE_MONITOR_MANAGER;
|
return META_TYPE_MONITOR_MANAGER_DUMMY;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -586,11 +400,6 @@ meta_monitor_manager_class_init (MetaMonitorManagerClass *klass)
|
|||||||
object_class->dispose = meta_monitor_manager_dispose;
|
object_class->dispose = meta_monitor_manager_dispose;
|
||||||
object_class->finalize = meta_monitor_manager_finalize;
|
object_class->finalize = meta_monitor_manager_finalize;
|
||||||
|
|
||||||
klass->read_current = read_current_dummy;
|
|
||||||
klass->apply_configuration = apply_config_dummy;
|
|
||||||
klass->get_edid_file = get_edid_file_dummy;
|
|
||||||
klass->read_edid = read_edid_dummy;
|
|
||||||
|
|
||||||
signals[CONFIRM_DISPLAY_CHANGE] =
|
signals[CONFIRM_DISPLAY_CHANGE] =
|
||||||
g_signal_new ("confirm-display-change",
|
g_signal_new ("confirm-display-change",
|
||||||
G_TYPE_FROM_CLASS (object_class),
|
G_TYPE_FROM_CLASS (object_class),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user