monitor-manager: Make tiled Xrandr monitors based on monitors
Don't deal with adding/removing tiled Xrandr monitors in the generic backend, but leave it to the Xrandr backend. The tiled monitor will itself notify the backend when such a monitor is added and removed. Tiled Xrandr monitors are now based no MetaMonitor instead of MetaLogicalMonitor. This means that mirrored tiled monitors will now be represented correctly. https://bugzilla.gnome.org/show_bug.cgi?id=777732
This commit is contained in:
@ -122,7 +122,6 @@ derive_monitor_position (MetaMonitor *monitor,
|
||||
static void
|
||||
make_logical_config (MetaMonitorManager *manager)
|
||||
{
|
||||
MetaMonitorManagerClass *manager_class = META_MONITOR_MANAGER_GET_CLASS (manager);
|
||||
GList *logical_monitors = NULL;
|
||||
GList *l;
|
||||
int monitor_number;
|
||||
@ -174,18 +173,6 @@ make_logical_config (MetaMonitorManager *manager)
|
||||
|
||||
meta_monitor_manager_set_primary_logical_monitor (manager,
|
||||
primary_logical_monitor);
|
||||
|
||||
if (manager_class->add_monitor)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
for (l = logical_monitors; l; l = l->next)
|
||||
{
|
||||
MetaLogicalMonitor *logical_monitor = l->data;
|
||||
|
||||
manager_class->add_monitor (manager, logical_monitor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1412,6 +1399,28 @@ rebuild_monitors (MetaMonitorManager *manager)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_monitor_manager_tiled_monitor_added (MetaMonitorManager *manager,
|
||||
MetaMonitor *monitor)
|
||||
{
|
||||
MetaMonitorManagerClass *manager_class =
|
||||
META_MONITOR_MANAGER_GET_CLASS (manager);
|
||||
|
||||
if (manager_class->tiled_monitor_added)
|
||||
manager_class->tiled_monitor_added (manager, monitor);
|
||||
}
|
||||
|
||||
void
|
||||
meta_monitor_manager_tiled_monitor_removed (MetaMonitorManager *manager,
|
||||
MetaMonitor *monitor)
|
||||
{
|
||||
MetaMonitorManagerClass *manager_class =
|
||||
META_MONITOR_MANAGER_GET_CLASS (manager);
|
||||
|
||||
if (manager_class->tiled_monitor_removed)
|
||||
manager_class->tiled_monitor_removed (manager, monitor);
|
||||
}
|
||||
|
||||
void
|
||||
meta_monitor_manager_read_current_config (MetaMonitorManager *manager)
|
||||
{
|
||||
@ -1444,9 +1453,7 @@ void
|
||||
meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManagerClass *manager_class = META_MONITOR_MANAGER_GET_CLASS (manager);
|
||||
GList *old_logical_monitors;
|
||||
GList *old_l;
|
||||
|
||||
if (manager->in_init)
|
||||
return;
|
||||
@ -1455,36 +1462,6 @@ meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager)
|
||||
|
||||
make_logical_config (manager);
|
||||
|
||||
if (manager_class->delete_monitor)
|
||||
{
|
||||
for (old_l = old_logical_monitors; old_l; old_l = old_l->next)
|
||||
{
|
||||
MetaLogicalMonitor *old_logical_monitor = old_l->data;
|
||||
int old_monitor_winsys_xid;
|
||||
gboolean delete_mon;
|
||||
GList *new_l;
|
||||
|
||||
delete_mon = TRUE;
|
||||
old_monitor_winsys_xid = old_logical_monitor->monitor_winsys_xid;
|
||||
|
||||
for (new_l = manager->logical_monitors; new_l; new_l = new_l->next)
|
||||
{
|
||||
MetaLogicalMonitor *new_logical_monitor = new_l->data;
|
||||
int new_monitor_winsys_xid;
|
||||
|
||||
new_monitor_winsys_xid = new_logical_monitor->monitor_winsys_xid;
|
||||
|
||||
if (new_monitor_winsys_xid == old_monitor_winsys_xid)
|
||||
{
|
||||
delete_mon = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (delete_mon)
|
||||
manager_class->delete_monitor (manager, old_monitor_winsys_xid);
|
||||
}
|
||||
}
|
||||
|
||||
/* Tell the backend about that the monitors changed before emitting the
|
||||
* signal, so that the backend can prepare itself before all the signal
|
||||
* consumers.
|
||||
|
Reference in New Issue
Block a user