diff options
Diffstat (limited to 'chromium/ui/base/x/x11_workspace_handler.cc')
-rw-r--r-- | chromium/ui/base/x/x11_workspace_handler.cc | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/chromium/ui/base/x/x11_workspace_handler.cc b/chromium/ui/base/x/x11_workspace_handler.cc index cb48d38fc4a..adf92e51adb 100644 --- a/chromium/ui/base/x/x11_workspace_handler.cc +++ b/chromium/ui/base/x/x11_workspace_handler.cc @@ -50,37 +50,27 @@ std::string X11WorkspaceHandler::GetCurrentWorkspace() { return workspace_; } -bool X11WorkspaceHandler::DispatchXEvent(x11::Event* x11_event) { - XEvent* event = &x11_event->xlib_event(); - if (event->type != PropertyNotify || - event->xproperty.window != static_cast<uint32_t>(x_root_window_)) { - return false; - } - switch (event->type) { - case x11::PropertyNotifyEvent::opcode: { - if (event->xproperty.atom == - static_cast<uint32_t>(gfx::GetAtom("_NET_CURRENT_DESKTOP"))) { - GetWorkspace().OnResponse( - base::BindOnce(&X11WorkspaceHandler::OnWorkspaceResponse, - weak_factory_.GetWeakPtr())); - } - break; - } - default: - NOTREACHED(); +bool X11WorkspaceHandler::DispatchXEvent(x11::Event* xev) { + auto* prop = xev->As<x11::PropertyNotifyEvent>(); + if (prop && prop->window == x_root_window_ && + prop->atom == gfx::GetAtom("_NET_CURRENT_DESKTOP")) { + GetWorkspace().OnResponse(base::BindOnce( + &X11WorkspaceHandler::OnWorkspaceResponse, weak_factory_.GetWeakPtr())); + return true; } + return false; } void X11WorkspaceHandler::OnWorkspaceResponse( x11::GetPropertyResponse response) { - if (!response || response->format != 32 || response->value.size() < 4) + if (!response || response->format != 32 || response->value->size() < 4) return; DCHECK_EQ(response->bytes_after, 0U); DCHECK_EQ(response->type, static_cast<x11::Atom>(gfx::GetAtom("CARDINAL"))); uint32_t workspace; - memcpy(&workspace, response->value.data(), 4); + memcpy(&workspace, response->value->data(), 4); workspace_ = base::NumberToString(workspace); delegate_->OnCurrentWorkspaceChanged(workspace_); } |