Skip to content

Commit

Permalink
Add option to enable XWayland by default
Browse files Browse the repository at this point in the history
  • Loading branch information
hbatagelo committed Nov 16, 2023
1 parent f13aabd commit 79c02d8
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 17 deletions.
1 change: 1 addition & 0 deletions debian/libmiral6.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -424,3 +424,4 @@ libmiral.so.6 libmiral6 #MINVER#
MIRAL_4.1@MIRAL_4.1 4.1.0
(c++)"miral::WaylandExtensions::zwp_input_method_v1@MIRAL_4.1" 4.1.0
(c++)"miral::WaylandExtensions::zwp_input_panel_v1@MIRAL_4.1" 4.1.0
(c++)"miral::X11Support::X11Support(bool)@MIRAL_4.2" 4.1.0
1 change: 1 addition & 0 deletions include/miral/miral/x11_support.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class X11Support
void operator()(mir::Server& server) const;

X11Support();
explicit X11Support(bool x11_enabled);
~X11Support();
X11Support(X11Support const&);
auto operator=(X11Support const&) -> X11Support&;
Expand Down
7 changes: 7 additions & 0 deletions src/miral/symbols.map
Original file line number Diff line number Diff line change
Expand Up @@ -482,3 +482,10 @@ global:

} MIRAL_4.0;

MIRAL_4.2 {
global:
extern "C++" {
miral::X11Support::X11Support*;
};

} MIRAL_4.1;
12 changes: 7 additions & 5 deletions src/miral/x11_support.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,14 @@ namespace mo = mir::options;

struct miral::X11Support::Self
{
bool x11_enabled;
};

miral::X11Support::X11Support() : self{std::make_shared<Self>()}
miral::X11Support::X11Support() : miral::X11Support{false}
{
}

miral::X11Support::X11Support(bool x11_enabled) : self{std::make_shared<Self>(x11_enabled)}
{
}

Expand All @@ -38,8 +43,7 @@ void miral::X11Support::operator()(mir::Server& server) const

server.add_configuration_option(
mo::x11_display_opt,
"Enable X11 support", mir::OptionType::null);

"Enable X11 support [{1|true|on|yes, 0|false|off|no}].", self->x11_enabled);

auto const x11_scale_default = []() -> char const* {
if (auto const gdk_scale = getenv("GDK_SCALE"))
Expand Down Expand Up @@ -95,5 +99,3 @@ void miral::X11Support::operator()(mir::Server& server) const
miral::X11Support::~X11Support() = default;
miral::X11Support::X11Support(X11Support const&) = default;
auto miral::X11Support::operator=(X11Support const&) -> X11Support& = default;


Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,7 @@ std::shared_ptr<mf::Connector>
enabled_wayland_extensions.end()};

auto const enable_repeat = options->get<bool>(options::enable_key_repeat_opt);
auto const x11_enabled = options->is_set(mo::x11_display_opt) && options->get<bool>(mo::x11_display_opt);

return std::make_shared<mf::WaylandConnector>(
the_shell(),
Expand All @@ -356,7 +357,7 @@ std::shared_ptr<mf::Connector>
arw_socket,
configure_wayland_extensions(
wayland_extensions,
options->is_set(mo::x11_display_opt),
x11_enabled,
wayland_extension_hooks),
wayland_extension_filter,
enable_repeat);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@ std::shared_ptr<mf::Connector> mir::DefaultServerConfiguration::the_xwayland_con
return xwayland_connector([this]() -> std::shared_ptr<mf::Connector> {

auto options = the_options();
if (options->is_set(mo::x11_display_opt))
auto const x11_enabled = options->is_set(mo::x11_display_opt) && options->get<bool>(mo::x11_display_opt);

if (x11_enabled)
{
try
{
Expand Down
45 changes: 35 additions & 10 deletions tests/miral/external_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ struct ExternalClient : miral::TestServer
}

miral::ExternalClientLauncher external_client;
miral::X11Support x11;
miral::X11Support x11_disabled_by_default;
miral::X11Support x11_enabled_by_default{true};

std::string const output = tmpnam(nullptr);

Expand All @@ -66,7 +67,7 @@ struct ExternalClient : miral::TestServer
getline(in, result);
return result;
}

bool cannot_start_X_server()
{
// Starting an X server on LP builder, or Fedora CI, doesn't work
Expand Down Expand Up @@ -98,7 +99,7 @@ TEST_F(ExternalClient, default_app_env_x11_is_as_expected)
if (cannot_start_X_server())
return; // Starting an X server doesn't work - skip the test

add_server_init(x11);
add_server_init(x11_disabled_by_default);
add_to_environment("MIR_SERVER_ENABLE_X11", "");
start_server();

Expand All @@ -123,7 +124,7 @@ TEST_F(ExternalClient, override_app_env_x11_can_unset)
return; // Starting an X server doesn't work - skip the test

add_to_environment(app_x11_env, "-GDK_BACKEND");
add_server_init(x11);
add_server_init(x11_disabled_by_default);
add_to_environment("MIR_SERVER_ENABLE_X11", "");
start_server();

Expand All @@ -136,7 +137,7 @@ TEST_F(ExternalClient, override_app_env_x11_can_unset_and_set)
return; // Starting an X server doesn't work - skip the test

add_to_environment(app_x11_env, "-GDK_BACKEND:QT_QPA_PLATFORM=xcb");
add_server_init(x11);
add_server_init(x11_disabled_by_default);
add_to_environment("MIR_SERVER_ENABLE_X11", "");
start_server();

Expand All @@ -150,7 +151,7 @@ TEST_F(ExternalClient, override_app_env_x11_can_set_and_unset)
return; // Starting an X server doesn't work - skip the test

add_to_environment(app_x11_env, "QT_QPA_PLATFORM=xcb:-GDK_BACKEND");
add_server_init(x11);
add_server_init(x11_disabled_by_default);
add_to_environment("MIR_SERVER_ENABLE_X11", "");
start_server();

Expand All @@ -164,7 +165,7 @@ TEST_F(ExternalClient, stray_separators_are_ignored)
return; // Starting an X server doesn't work - skip the test

add_to_environment(app_x11_env, "::QT_QPA_PLATFORM=xcb::-GDK_BACKEND::");
add_server_init(x11);
add_server_init(x11_disabled_by_default);
add_to_environment("MIR_SERVER_ENABLE_X11", "");
start_server();

Expand All @@ -178,7 +179,7 @@ TEST_F(ExternalClient, empty_override_does_nothing)
return; // Starting an X server doesn't work - skip the test

add_to_environment(app_x11_env, "");
add_server_init(x11);
add_server_init(x11_disabled_by_default);
add_to_environment("MIR_SERVER_ENABLE_X11", "");
start_server();

Expand All @@ -195,7 +196,7 @@ TEST_F(ExternalClient, strange_override_does_nothing)
return; // Starting an X server doesn't work - skip the test

add_to_environment(app_x11_env, "=====");
add_server_init(x11);
add_server_init(x11_disabled_by_default);
add_to_environment("MIR_SERVER_ENABLE_X11", "");
start_server();

Expand All @@ -212,7 +213,7 @@ TEST_F(ExternalClient, another_strange_override_does_nothing)
return; // Starting an X server doesn't work - skip the test

add_to_environment(app_x11_env, ":::");
add_server_init(x11);
add_server_init(x11_disabled_by_default);
add_to_environment("MIR_SERVER_ENABLE_X11", "");
start_server();

Expand Down Expand Up @@ -241,3 +242,27 @@ TEST_F(ExternalClient, split_command)
<< "test.command=\"" + test.command + "\"";
}
}

TEST_F(ExternalClient, x11_disabled_by_default_is_as_expected)
{
if (cannot_start_X_server())
return; // Starting an X server doesn't work - skip the test

add_server_init(x11_disabled_by_default);
start_server();

auto result = external_client.launch_using_x11({"bash", "-c", "exit"});
EXPECT_THAT(result, Eq(-1));
}

TEST_F(ExternalClient, x11_enabled_by_default_is_as_expected)
{
if (cannot_start_X_server())
return; // Starting an X server doesn't work - skip the test

add_server_init(x11_enabled_by_default);
start_server();

auto result = external_client.launch_using_x11({"bash", "-c", "exit"});
EXPECT_THAT(result, Ne(-1));
}

0 comments on commit 79c02d8

Please sign in to comment.