mirror of
https://github.com/brl/mutter.git
synced 2024-11-28 11:00:54 -05:00
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.
This commit is contained in:
parent
25f82424b8
commit
b383d55988
@ -32,6 +32,7 @@
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
#ifdef HAVE_RANDR
|
||||
#include <X11/Xatom.h>
|
||||
#include <X11/extensions/Xrandr.h>
|
||||
#include <X11/extensions/dpms.h>
|
||||
#endif
|
||||
@ -341,6 +342,34 @@ wl_transform_from_xrandr_all (Rotation rotation)
|
||||
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
|
||||
compare_outputs (const void *one,
|
||||
const void *two)
|
||||
@ -541,7 +570,7 @@ read_monitor_infos_from_xrandr (MetaMonitorManager *manager)
|
||||
}
|
||||
|
||||
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++;
|
||||
}
|
||||
@ -1177,7 +1206,22 @@ wl_transform_to_xrandr (enum wl_output_transform transform)
|
||||
|
||||
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
|
||||
apply_config_xrandr (MetaMonitorManager *manager,
|
||||
MetaCRTCInfo **crtcs,
|
||||
@ -1250,6 +1294,10 @@ apply_config_xrandr (MetaMonitorManager *manager,
|
||||
DefaultRootWindow (manager->xdisplay),
|
||||
(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 */
|
||||
|
@ -72,6 +72,7 @@ item(_MUTTER_TIMESTAMP_PING)
|
||||
item(_MUTTER_FOCUS_SET)
|
||||
item(_MUTTER_SENTINEL)
|
||||
item(_MUTTER_VERSION)
|
||||
item(_MUTTER_PRESENTATION_OUTPUT)
|
||||
item(WM_CLIENT_MACHINE)
|
||||
item(MANAGER)
|
||||
item(TARGETS)
|
||||
|
Loading…
Reference in New Issue
Block a user