Skip to content

Commit

Permalink
[lacros/client] Add active display support
Browse files Browse the repository at this point in the history
This will be used as a target for new display when
no bounds is specified.

Bug: 1350513
Test: WaylandZAuraOutputTest.ActiveDisplay
Change-Id: I08449be2995d1867ce81a2e274254a0d99322e39
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4024382
Reviewed-by: Maksim Sisov <msisov@igalia.com>
Commit-Queue: Mitsuru Oshima <oshima@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1075920}
  • Loading branch information
mitoshima authored and Chromium LUCI CQ committed Nov 26, 2022
1 parent b2af9a0 commit 981a046
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 4 deletions.
2 changes: 1 addition & 1 deletion ui/display/screen_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Display ScreenBase::GetDisplayNearestPoint(const gfx::Point& point) const {
}

int ScreenBase::GetNumDisplays() const {
return static_cast<int>(display_list_.displays().size());
return static_cast<int>(GetAllDisplays().size());
}

const std::vector<Display>& ScreenBase::GetAllDisplays() const {
Expand Down
1 change: 1 addition & 0 deletions ui/ozone/platform/wayland/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -547,6 +547,7 @@ source_set("test_support") {
"//third_party/wayland-protocols:text_input_protocol",
"//third_party/wayland-protocols:viewporter_protocol",
"//third_party/wayland-protocols:xdg_shell_protocol",
"//ui/display:test_support",
"//ui/gfx/geometry:geometry",
]
}
Expand Down
10 changes: 9 additions & 1 deletion ui/ozone/platform/wayland/host/wayland_zaura_output.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "base/check.h"
#include "base/logging.h"
#include "ui/base/wayland/wayland_display_util.h"
#include "ui/display/screen.h"

namespace ui {

Expand Down Expand Up @@ -74,6 +75,13 @@ void WaylandZAuraOutput::OnDisplayId(void* data,
}

void WaylandZAuraOutput::OnActivated(void* data,
struct zaura_output* zaura_output) {}
struct zaura_output* zaura_output) {
auto* aura_output = static_cast<WaylandZAuraOutput*>(data);
if (aura_output && aura_output->IsReady()) {
DCHECK(display::Screen::GetScreen());
display::Screen::GetScreen()->SetDisplayForNewWindows(
aura_output->display_id_.value());
}
}

} // namespace ui
59 changes: 59 additions & 0 deletions ui/ozone/platform/wayland/host/wayland_zaura_output_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "base/memory/raw_ptr.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/wayland/wayland_display_util.h"
#include "ui/display/test/test_screen.h"
#include "ui/ozone/platform/wayland/host/wayland_connection.h"
#include "ui/ozone/platform/wayland/host/wayland_output.h"
#include "ui/ozone/platform/wayland/host/wayland_output_manager.h"
Expand All @@ -17,6 +18,24 @@
using ::testing::Values;

namespace ui {
namespace {

// A Test Screen that uses Display info in WaylandOutputManager. It has bare
// minimum impl to support the test case for {Set|Get|DisplayForNewWindows().
class WaylandTestScreen : public display::test::TestScreen {
public:
explicit WaylandTestScreen(WaylandScreen* wayland_screen)
: display::test::TestScreen(/*create_display=*/false,
/*register_screen=*/true),
wayland_screen_(wayland_screen) {}

const std::vector<display::Display>& GetAllDisplays() const override {
return wayland_screen_->GetAllDisplays();
}

private:
raw_ptr<WaylandScreen> wayland_screen_;
};

class WaylandZAuraOutputTest : public WaylandTestSimpleWithAuraShell {
public:
Expand Down Expand Up @@ -51,6 +70,8 @@ class WaylandZAuraOutputTest : public WaylandTestSimpleWithAuraShell {
std::unique_ptr<WaylandScreen> platform_screen_;
};

} // namespace

TEST_F(WaylandZAuraOutputTest, HandleInsets) {
WaylandOutput* wayland_output = output_manager_->GetPrimaryOutput();
ASSERT_TRUE(wayland_output);
Expand Down Expand Up @@ -122,4 +143,42 @@ TEST_F(WaylandZAuraOutputTest, DisplayIdConversions) {
}
}

TEST_F(WaylandZAuraOutputTest, ActiveDisplay) {
WaylandTestScreen test_screen(output_manager_->wayland_screen());

wl::TestOutput *primary = nullptr, *secondary = nullptr;
PostToServerAndWait([&](wl::TestWaylandServerThread* server) {
primary = server->output();
secondary = server->CreateAndInitializeOutput();
});

int64_t primary_id = display::kInvalidDisplayId,
secondary_id = display::kInvalidDisplayId;
// Wait so that the client creates xdg/aura outputs.
PostToServerAndWait([&](wl::TestWaylandServerThread* server) {
secondary->SetRect(gfx::Rect(100, 100));
secondary->Flush();
primary_id = primary->GetAuraOutput()->display_id();
secondary_id = secondary->GetAuraOutput()->display_id();
});

auto* platform_screen = output_manager_->wayland_screen();
DCHECK(platform_screen);
ASSERT_EQ(2u, platform_screen->GetAllDisplays().size());

EXPECT_EQ(primary_id, platform_screen->GetAllDisplays()[0].id());
EXPECT_EQ(secondary_id, platform_screen->GetAllDisplays()[1].id());

PostToServerAndWait([&](wl::TestWaylandServerThread* server) {
secondary->GetAuraOutput()->SendActivated();
});
EXPECT_EQ(secondary_id,
display::Screen::GetScreen()->GetDisplayForNewWindows().id());
PostToServerAndWait([&](wl::TestWaylandServerThread* server) {
primary->GetAuraOutput()->SendActivated();
});
EXPECT_EQ(primary_id,
display::Screen::GetScreen()->GetDisplayForNewWindows().id());
}

} // namespace ui
2 changes: 1 addition & 1 deletion ui/ozone/platform/wayland/host/wayland_zaura_shell.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace ui {

namespace {
constexpr uint32_t kMinVersion = 1;
constexpr uint32_t kMaxVersion = 43;
constexpr uint32_t kMaxVersion = 44;
}

// static
Expand Down
2 changes: 1 addition & 1 deletion ui/ozone/platform/wayland/test/mock_zaura_shell.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace wl {
namespace {

constexpr uint32_t kZAuraShellVersion = 44;
constexpr uint32_t kZAuraOutputVersion = 43;
constexpr uint32_t kZAuraOutputVersion = 44;

void GetAuraSurface(wl_client* client,
wl_resource* resource,
Expand Down

0 comments on commit 981a046

Please sign in to comment.