1#include <freerdp/config.h>
2#include <X11/extensions/Xrandr.h>
3#include "../xfreerdp.h"
4#include "../xf_monitor.h"
6static BOOL check_size(Display* display,
const char* name, BOOL fullscreen, BOOL workarea,
7 UINT32 percent, UINT32 width, UINT32 height)
9 MONITOR_INFO monitors[16] = WINPR_C_ARRAY_INIT;
10 xfContext xfc = WINPR_C_ARRAY_INIT;
15 xfc.display = display;
16 xfc.screen = DefaultScreenOfDisplay(display);
17 xfc.log = WLog_Get(
"com.freerdp.client.x11.test");
18 xfc.vscreen.monitors = monitors;
19 xfc.common.context.settings = settings;
29 UINT32 actual_width = 0;
30 UINT32 actual_height = 0;
32 rc = xf_detect_monitors(&xfc, &actual_width, &actual_height);
33 if (!rc || actual_width != width || actual_height != height || xfc.vscreen.nmonitors != 2)
35 fprintf(stderr,
"%s: expected %ux%u, got %ux%u (%u monitors)\n", name, width, height,
36 actual_width, actual_height, xfc.vscreen.nmonitors);
43int main(
int argc,
char* argv[])
47 Display* display = XOpenDisplay(
nullptr);
50 const Window root = DefaultRootWindow(display);
51 XRRScreenResources* resources = XRRGetScreenResourcesCurrent(display, root);
52 XRRMonitorInfo* left = XRRAllocateMonitor(display, 1);
53 XRRMonitorInfo* right = XRRAllocateMonitor(display, 0);
55 if (!resources || resources->noutput < 1 || !left || !right)
58 left->name = XInternAtom(display,
"left", False);
64 left->outputs[0] = resources->outputs[0];
65 right->name = XInternAtom(display,
"right", False);
72 XRRSetMonitor(display, root, left);
73 XRRSetMonitor(display, root, right);
74 XWarpPointer(display, None, root, 0, 0, 0, 0, 100, 100);
75 XSync(display, False);
78 if (!check_size(display,
"windowed", FALSE, FALSE, 0, 1900, 1200))
80 if (!check_size(display,
"fullscreen", TRUE, FALSE, 0, 1200, 1920))
82 if (!check_size(display,
"workarea", FALSE, TRUE, 0, 1200, 1920))
84 if (!check_size(display,
"50 percent", FALSE, FALSE, 50, 600, 960))
88 XRRFreeScreenResources(resources);
90 XRRFreeMonitors(left);
92 XRRFreeMonitors(right);
93 XCloseDisplay(display);
FREERDP_API rdpSettings * freerdp_settings_new(DWORD flags)
creates a new setting struct
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_bool(rdpSettings *settings, FreeRDP_Settings_Keys_Bool id, BOOL val)
Sets a BOOL settings value.
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_uint32(rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id, UINT32 val)
Sets a UINT32 settings value.
FREERDP_API void freerdp_settings_free(rdpSettings *settings)
Free a settings struct with all data in it.