test-runner: Add support for add_strut
command
It allows to add struts to the ones we already have, as per this we can re-implement `set_strut` as `clear_strut` + `add_strut`. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3701>
This commit is contained in:
parent
ea7357f48a
commit
0bc873419d
@ -31,6 +31,8 @@
|
|||||||
#include "meta-test/meta-context-test.h"
|
#include "meta-test/meta-context-test.h"
|
||||||
#include "meta/util.h"
|
#include "meta/util.h"
|
||||||
#include "meta/window.h"
|
#include "meta/window.h"
|
||||||
|
#include "core/meta-workspace-manager-private.h"
|
||||||
|
#include "core/workspace-private.h"
|
||||||
#include "tests/meta-test-utils.h"
|
#include "tests/meta-test-utils.h"
|
||||||
#include "wayland/meta-wayland.h"
|
#include "wayland/meta-wayland.h"
|
||||||
#include "wayland/meta-window-wayland.h"
|
#include "wayland/meta-window-wayland.h"
|
||||||
@ -49,6 +51,26 @@ typedef struct {
|
|||||||
GHashTable *cloned_windows;
|
GHashTable *cloned_windows;
|
||||||
} TestCase;
|
} TestCase;
|
||||||
|
|
||||||
|
static void
|
||||||
|
set_true_cb (gboolean *value)
|
||||||
|
{
|
||||||
|
*value = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
wait_for_signal_emission (gpointer instance,
|
||||||
|
const char *signal_name)
|
||||||
|
{
|
||||||
|
gulong handler_id;
|
||||||
|
gboolean changed = FALSE;
|
||||||
|
|
||||||
|
handler_id = g_signal_connect_swapped (instance, signal_name,
|
||||||
|
G_CALLBACK (set_true_cb), &changed);
|
||||||
|
while (!changed)
|
||||||
|
g_main_context_iteration (NULL, TRUE);
|
||||||
|
g_signal_handler_disconnect (instance, handler_id);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
test_case_alarm_filter (MetaX11Display *x11_display,
|
test_case_alarm_filter (MetaX11Display *x11_display,
|
||||||
XSyncAlarmNotifyEvent *event,
|
XSyncAlarmNotifyEvent *event,
|
||||||
@ -593,6 +615,92 @@ str_to_bool (const char *str,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
str_to_side (const char *str,
|
||||||
|
MetaSide *out_side)
|
||||||
|
{
|
||||||
|
if (g_str_equal (str, "left"))
|
||||||
|
{
|
||||||
|
*out_side = META_SIDE_LEFT;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_str_equal (str, "right"))
|
||||||
|
{
|
||||||
|
*out_side = META_SIDE_RIGHT;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_str_equal (str, "top"))
|
||||||
|
{
|
||||||
|
*out_side = META_SIDE_TOP;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_str_equal (str, "bottom"))
|
||||||
|
{
|
||||||
|
*out_side = META_SIDE_BOTTOM;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
test_case_add_strut (TestCase *test,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
MetaSide side,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
MetaDisplay *display = meta_context_get_display (test->context);
|
||||||
|
MetaWorkspaceManager *workspace_manager =
|
||||||
|
meta_display_get_workspace_manager (display);
|
||||||
|
MtkRectangle rect = { x, y, width, height };
|
||||||
|
MetaStrut strut = { rect, side };
|
||||||
|
GList *workspaces =
|
||||||
|
meta_workspace_manager_get_workspaces (workspace_manager);
|
||||||
|
GList *l;
|
||||||
|
|
||||||
|
for (l = workspaces; l; l = l->next)
|
||||||
|
{
|
||||||
|
MetaWorkspace *workspace = l->data;
|
||||||
|
g_autoptr (GSList) struts_list = NULL;
|
||||||
|
g_autoslist (MetaStrut) struts = NULL;
|
||||||
|
|
||||||
|
struts_list = meta_workspace_get_builtin_struts (workspace);
|
||||||
|
struts = g_slist_append (g_steal_pointer (&struts_list),
|
||||||
|
g_memdup2 (&strut, sizeof (MetaStrut)));
|
||||||
|
meta_workspace_set_builtin_struts (workspace, struts);
|
||||||
|
}
|
||||||
|
|
||||||
|
wait_for_signal_emission (display, "workareas-changed");
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
test_case_clear_struts (TestCase *test,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
MetaDisplay *display = meta_context_get_display (test->context);
|
||||||
|
MetaWorkspaceManager *workspace_manager =
|
||||||
|
meta_display_get_workspace_manager (display);
|
||||||
|
GList *workspaces =
|
||||||
|
meta_workspace_manager_get_workspaces (workspace_manager);
|
||||||
|
GList *l;
|
||||||
|
|
||||||
|
for (l = workspaces; l; l = l->next)
|
||||||
|
{
|
||||||
|
MetaWorkspace *workspace = l->data;
|
||||||
|
meta_workspace_set_builtin_struts (workspace, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
test_case_do (TestCase *test,
|
test_case_do (TestCase *test,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
@ -1059,7 +1167,8 @@ test_case_do (TestCase *test,
|
|||||||
if (!test_case_sleep (test, (uint32_t) interval_ms, error))
|
if (!test_case_sleep (test, (uint32_t) interval_ms, error))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
else if (strcmp (argv[0], "set_strut") == 0)
|
else if (g_str_equal (argv[0], "add_strut") ||
|
||||||
|
g_str_equal (argv[0], "set_strut"))
|
||||||
{
|
{
|
||||||
if (argc < 6 || argc > 7)
|
if (argc < 6 || argc > 7)
|
||||||
{
|
{
|
||||||
@ -1074,6 +1183,12 @@ test_case_do (TestCase *test,
|
|||||||
if (!logical_monitor)
|
if (!logical_monitor)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
if (g_str_equal (argv[0], "set_strut"))
|
||||||
|
{
|
||||||
|
if (!test_case_clear_struts (test, error))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
MtkRectangle monitor_layout =
|
MtkRectangle monitor_layout =
|
||||||
meta_logical_monitor_get_layout (logical_monitor);
|
meta_logical_monitor_get_layout (logical_monitor);
|
||||||
|
|
||||||
@ -1083,52 +1198,19 @@ test_case_do (TestCase *test,
|
|||||||
int height = parse_monitor_size (&monitor_layout, argv[4]);
|
int height = parse_monitor_size (&monitor_layout, argv[4]);
|
||||||
|
|
||||||
MetaSide side;
|
MetaSide side;
|
||||||
if (strcmp (argv[5], "left") == 0)
|
if (!str_to_side (argv[5], &side))
|
||||||
side = META_SIDE_LEFT;
|
BAD_COMMAND ("Invalid side: %s", argv[5]);
|
||||||
else if (strcmp (argv[5], "right") == 0)
|
|
||||||
side = META_SIDE_RIGHT;
|
if (!test_case_add_strut (test, x, y, width, height, side, error))
|
||||||
else if (strcmp (argv[5], "top") == 0)
|
|
||||||
side = META_SIDE_TOP;
|
|
||||||
else if (strcmp (argv[5], "bottom") == 0)
|
|
||||||
side = META_SIDE_BOTTOM;
|
|
||||||
else
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
MetaDisplay *display = meta_context_get_display (test->context);
|
|
||||||
MetaWorkspaceManager *workspace_manager =
|
|
||||||
meta_display_get_workspace_manager (display);
|
|
||||||
MtkRectangle rect = { x, y, width, height };
|
|
||||||
MetaStrut strut = { rect, side };
|
|
||||||
GSList *struts = g_slist_append (NULL, &strut);
|
|
||||||
GList *workspaces =
|
|
||||||
meta_workspace_manager_get_workspaces (workspace_manager);
|
|
||||||
GList *l;
|
|
||||||
|
|
||||||
for (l = workspaces; l; l = l->next)
|
|
||||||
{
|
|
||||||
MetaWorkspace *workspace = l->data;
|
|
||||||
meta_workspace_set_builtin_struts (workspace, struts);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_slist_free (struts);
|
|
||||||
}
|
}
|
||||||
else if (strcmp (argv[0], "clear_struts") == 0)
|
else if (strcmp (argv[0], "clear_struts") == 0)
|
||||||
{
|
{
|
||||||
if (argc != 1)
|
if (argc != 1)
|
||||||
BAD_COMMAND("usage: %s", argv[0]);
|
BAD_COMMAND("usage: %s", argv[0]);
|
||||||
|
|
||||||
MetaDisplay *display = meta_context_get_display (test->context);
|
if (!test_case_clear_struts (test, error))
|
||||||
MetaWorkspaceManager *workspace_manager =
|
return FALSE;
|
||||||
meta_display_get_workspace_manager (display);
|
|
||||||
GList *workspaces =
|
|
||||||
meta_workspace_manager_get_workspaces (workspace_manager);
|
|
||||||
GList *l;
|
|
||||||
|
|
||||||
for (l = workspaces; l; l = l->next)
|
|
||||||
{
|
|
||||||
MetaWorkspace *workspace = l->data;
|
|
||||||
meta_workspace_set_builtin_struts (workspace, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (strcmp (argv[0], "assert_stacking") == 0)
|
else if (strcmp (argv[0], "assert_stacking") == 0)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user