MonitorManager: store the presentation mode bit in XRandR
Use a private output property to store if the output is in presentation mode or not, so that this information is not lost after the configuration read back from the server. https://bugzilla.gnome.org/show_bug.cgi?id=705670
This commit is contained in:
parent
764c472edb
commit
5c27a91684
@ -33,6 +33,7 @@
|
|||||||
#include <clutter/clutter.h>
|
#include <clutter/clutter.h>
|
||||||
|
|
||||||
#ifdef HAVE_RANDR
|
#ifdef HAVE_RANDR
|
||||||
|
#include <X11/Xatom.h>
|
||||||
#include <X11/extensions/Xrandr.h>
|
#include <X11/extensions/Xrandr.h>
|
||||||
#include <X11/extensions/dpms.h>
|
#include <X11/extensions/dpms.h>
|
||||||
#endif
|
#endif
|
||||||
@ -339,6 +340,34 @@ wl_transform_from_xrandr_all (Rotation rotation)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
output_get_presentation_xrandr (MetaMonitorManager *manager,
|
||||||
|
MetaOutput *output)
|
||||||
|
{
|
||||||
|
MetaDisplay *display = meta_get_display ();
|
||||||
|
gboolean value;
|
||||||
|
Atom actual_type;
|
||||||
|
int actual_format;
|
||||||
|
unsigned long nitems, bytes_after;
|
||||||
|
unsigned char *buffer;
|
||||||
|
|
||||||
|
XRRGetOutputProperty (manager->xdisplay,
|
||||||
|
(XID)output->output_id,
|
||||||
|
display->atom__MUTTER_PRESENTATION_OUTPUT,
|
||||||
|
0, G_MAXLONG, False, False, XA_CARDINAL,
|
||||||
|
&actual_type, &actual_format,
|
||||||
|
&nitems, &bytes_after, &buffer);
|
||||||
|
|
||||||
|
if (actual_type != XA_CARDINAL || actual_format != 32 ||
|
||||||
|
nitems < 1)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
value = ((int*)buffer)[0];
|
||||||
|
|
||||||
|
XFree (buffer);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
compare_outputs (const void *one,
|
compare_outputs (const void *one,
|
||||||
const void *two)
|
const void *two)
|
||||||
@ -540,7 +569,7 @@ read_monitor_infos_from_xrandr (MetaMonitorManager *manager)
|
|||||||
}
|
}
|
||||||
|
|
||||||
meta_output->is_primary = ((XID)meta_output->output_id == primary_output);
|
meta_output->is_primary = ((XID)meta_output->output_id == primary_output);
|
||||||
meta_output->is_presentation = FALSE;
|
meta_output->is_presentation = output_get_presentation_xrandr (manager, meta_output);
|
||||||
|
|
||||||
n_actual_outputs++;
|
n_actual_outputs++;
|
||||||
}
|
}
|
||||||
@ -1165,6 +1194,21 @@ wl_transform_to_xrandr (enum wl_output_transform transform)
|
|||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
output_set_presentation_xrandr (MetaMonitorManager *manager,
|
||||||
|
MetaOutput *output,
|
||||||
|
gboolean presentation)
|
||||||
|
{
|
||||||
|
MetaDisplay *display = meta_get_display ();
|
||||||
|
int value = presentation;
|
||||||
|
|
||||||
|
XRRChangeOutputProperty (manager->xdisplay,
|
||||||
|
(XID)output->output_id,
|
||||||
|
display->atom__MUTTER_PRESENTATION_OUTPUT,
|
||||||
|
XA_CARDINAL, 32, PropModeReplace,
|
||||||
|
(unsigned char*) &value, 1);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
apply_config_xrandr (MetaMonitorManager *manager,
|
apply_config_xrandr (MetaMonitorManager *manager,
|
||||||
MetaCRTCInfo **crtcs,
|
MetaCRTCInfo **crtcs,
|
||||||
@ -1237,6 +1281,10 @@ apply_config_xrandr (MetaMonitorManager *manager,
|
|||||||
DefaultRootWindow (manager->xdisplay),
|
DefaultRootWindow (manager->xdisplay),
|
||||||
(XID)output_info->output->output_id);
|
(XID)output_info->output->output_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
output_set_presentation_xrandr (manager,
|
||||||
|
output_info->output,
|
||||||
|
output_info->is_presentation);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disable CRTCs not mentioned in the list */
|
/* Disable CRTCs not mentioned in the list */
|
||||||
|
@ -72,6 +72,7 @@ item(_MUTTER_TIMESTAMP_PING)
|
|||||||
item(_MUTTER_FOCUS_SET)
|
item(_MUTTER_FOCUS_SET)
|
||||||
item(_MUTTER_SENTINEL)
|
item(_MUTTER_SENTINEL)
|
||||||
item(_MUTTER_VERSION)
|
item(_MUTTER_VERSION)
|
||||||
|
item(_MUTTER_PRESENTATION_OUTPUT)
|
||||||
item(WM_CLIENT_MACHINE)
|
item(WM_CLIENT_MACHINE)
|
||||||
item(MANAGER)
|
item(MANAGER)
|
||||||
item(TARGETS)
|
item(TARGETS)
|
||||||
|
Loading…
Reference in New Issue
Block a user