test-client: Add 'assert_primary_monitor'
This is a X11 only assert, as only X11 has the concept of a primary monitor. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3567>
This commit is contained in:
parent
e2db6c8276
commit
9af1926056
2 changed files with 61 additions and 0 deletions
|
@ -166,6 +166,7 @@ test_client = executable('mutter-test-client',
|
||||||
gio_unix_dep,
|
gio_unix_dep,
|
||||||
x11_dep,
|
x11_dep,
|
||||||
xext_dep,
|
xext_dep,
|
||||||
|
xrandr_dep,
|
||||||
graphene_dep,
|
graphene_dep,
|
||||||
gsettings_desktop_schemas_dep,
|
gsettings_desktop_schemas_dep,
|
||||||
],
|
],
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <X11/extensions/Xrandr.h>
|
||||||
#include <X11/extensions/sync.h>
|
#include <X11/extensions/sync.h>
|
||||||
|
|
||||||
#include "core/events.h"
|
#include "core/events.h"
|
||||||
|
@ -875,6 +876,65 @@ process_line (const char *line)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (strcmp (argv[0], "assert_primary_monitor") == 0)
|
||||||
|
{
|
||||||
|
Display *xdisplay = gdk_x11_display_get_xdisplay (display);
|
||||||
|
GdkWindow *root_window = gdk_screen_get_root_window ((gdk_screen_get_default ()));
|
||||||
|
Window root_xwindow = gdk_x11_window_get_xid (root_window);
|
||||||
|
XRRScreenResources *resources;
|
||||||
|
RROutput primary_output;
|
||||||
|
XRROutputInfo *output_info;
|
||||||
|
char *expected_name;
|
||||||
|
|
||||||
|
if (wayland)
|
||||||
|
{
|
||||||
|
g_print ("Can only assert primary monitor on X11\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
{
|
||||||
|
g_print ("usage: %s <monitor-name>\n", argv[0]);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
expected_name = argv[1];
|
||||||
|
|
||||||
|
resources = XRRGetScreenResourcesCurrent (xdisplay, root_xwindow);
|
||||||
|
if (!resources)
|
||||||
|
{
|
||||||
|
g_print ("Failed to retrieve XRANDR resources\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
primary_output = XRRGetOutputPrimary (xdisplay, root_xwindow);
|
||||||
|
if (!primary_output)
|
||||||
|
{
|
||||||
|
if (g_strcmp0 (expected_name, "(none)") != 0)
|
||||||
|
{
|
||||||
|
g_print ("Failed to primary XRANDR output\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
output_info = XRRGetOutputInfo (xdisplay, resources, primary_output);
|
||||||
|
if (!output_info)
|
||||||
|
{
|
||||||
|
g_print ("Failed to primary XRANDR output info\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_strcmp0 (expected_name, output_info->name) != 0)
|
||||||
|
{
|
||||||
|
XRRFreeOutputInfo (output_info);
|
||||||
|
g_print ("XRANDR output %s primary, expected %s\n",
|
||||||
|
output_info->name, expected_name);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
XRRFreeOutputInfo (output_info);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (strcmp (argv[0], "stop_after_next") == 0)
|
else if (strcmp (argv[0], "stop_after_next") == 0)
|
||||||
{
|
{
|
||||||
if (sync_after_lines != -1)
|
if (sync_after_lines != -1)
|
||||||
|
|
Loading…
Reference in a new issue