Index: ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
index e7fd89c85fe7084eb018cb13bab71957aa50c7c1..c56a0014fbfad623409fe73a3e37b266d718bc1a 100644 |
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
@@ -88,53 +88,6 @@ const int k_NET_WM_STATE_REMOVE = 0; |
// should appear on all desktops. |
const int kAllDesktops = 0xFFFFFFFF; |
-const char* kAtomsToCache[] = { |
- "UTF8_STRING", |
- "WM_DELETE_WINDOW", |
- "WM_PROTOCOLS", |
- "_NET_ACTIVE_WINDOW", |
- "_NET_FRAME_EXTENTS", |
- "_NET_WM_CM_S0", |
- "_NET_WM_DESKTOP", |
- "_NET_WM_ICON", |
- "_NET_WM_NAME", |
- "_NET_WM_PID", |
- "_NET_WM_PING", |
- "_NET_WM_STATE", |
- "_NET_WM_STATE_ABOVE", |
- "_NET_WM_STATE_FULLSCREEN", |
- "_NET_WM_STATE_HIDDEN", |
- "_NET_WM_STATE_MAXIMIZED_HORZ", |
- "_NET_WM_STATE_MAXIMIZED_VERT", |
- "_NET_WM_STATE_SKIP_TASKBAR", |
- "_NET_WM_STATE_STICKY", |
- "_NET_WM_USER_TIME", |
- "_NET_WM_WINDOW_OPACITY", |
- "_NET_WM_WINDOW_TYPE", |
- "_NET_WM_WINDOW_TYPE_DND", |
- "_NET_WM_WINDOW_TYPE_MENU", |
- "_NET_WM_WINDOW_TYPE_NORMAL", |
- "_NET_WM_WINDOW_TYPE_NOTIFICATION", |
- "_NET_WM_WINDOW_TYPE_TOOLTIP", |
- "XdndActionAsk", |
- "XdndActionCopy", |
- "XdndActionLink", |
- "XdndActionList", |
- "XdndActionMove", |
- "XdndActionPrivate", |
- "XdndAware", |
- "XdndDrop", |
- "XdndEnter", |
- "XdndFinished", |
- "XdndLeave", |
- "XdndPosition", |
- "XdndProxy", // Proxy windows? |
- "XdndSelection", |
- "XdndStatus", |
- "XdndTypeList", |
- NULL |
-}; |
- |
const char kX11WindowRolePopup[] = "popup"; |
const char kX11WindowRoleBubble[] = "bubble"; |
@@ -190,7 +143,6 @@ DesktopWindowTreeHostX11::DesktopWindowTreeHostX11( |
: xdisplay_(gfx::GetXDisplay()), |
xwindow_(0), |
x_root_window_(DefaultRootWindow(xdisplay_)), |
- atom_cache_(xdisplay_, kAtomsToCache), |
window_mapped_in_server_(false), |
window_mapped_in_client_(false), |
is_fullscreen_(false), |
@@ -779,7 +731,7 @@ void DesktopWindowTreeHostX11::Activate() { |
// https://code.google.com/p/wmii/issues/detail?id=266 |
static bool wm_supports_active_window = |
ui::GuessWindowManager() != ui::WM_WMII && |
- ui::WmSupportsHint(atom_cache_.GetAtom("_NET_ACTIVE_WINDOW")); |
+ ui::WmSupportsHint(ui::GetAtom("_NET_ACTIVE_WINDOW")); |
Time timestamp = ui::X11EventSource::GetInstance()->GetTimestamp(); |
@@ -788,7 +740,7 @@ void DesktopWindowTreeHostX11::Activate() { |
memset(&xclient, 0, sizeof(xclient)); |
xclient.type = ClientMessage; |
xclient.xclient.window = xwindow_; |
- xclient.xclient.message_type = atom_cache_.GetAtom("_NET_ACTIVE_WINDOW"); |
+ xclient.xclient.message_type = ui::GetAtom("_NET_ACTIVE_WINDOW"); |
xclient.xclient.format = 32; |
xclient.xclient.data.l[0] = 1; // Specified we are an app. |
xclient.xclient.data.l[1] = timestamp; |
@@ -845,9 +797,7 @@ bool DesktopWindowTreeHostX11::IsActive() const { |
void DesktopWindowTreeHostX11::Maximize() { |
if (HasWMSpecProperty("_NET_WM_STATE_FULLSCREEN")) { |
// Unfullscreen the window if it is fullscreen. |
- SetWMSpecState(false, |
- atom_cache_.GetAtom("_NET_WM_STATE_FULLSCREEN"), |
- None); |
+ SetWMSpecState(false, ui::GetAtom("_NET_WM_STATE_FULLSCREEN"), None); |
// Resize the window so that it does not have the same size as a monitor. |
// (Otherwise, some window managers immediately put the window back in |
@@ -867,9 +817,8 @@ void DesktopWindowTreeHostX11::Maximize() { |
// heuristics that are in the PropertyNotify and ConfigureNotify handlers. |
restored_bounds_in_pixels_ = bounds_in_pixels_; |
- SetWMSpecState(true, |
- atom_cache_.GetAtom("_NET_WM_STATE_MAXIMIZED_VERT"), |
- atom_cache_.GetAtom("_NET_WM_STATE_MAXIMIZED_HORZ")); |
+ SetWMSpecState(true, ui::GetAtom("_NET_WM_STATE_MAXIMIZED_VERT"), |
+ ui::GetAtom("_NET_WM_STATE_MAXIMIZED_HORZ")); |
if (IsMinimized()) |
ShowWindowWithState(ui::SHOW_STATE_NORMAL); |
} |
@@ -881,9 +830,8 @@ void DesktopWindowTreeHostX11::Minimize() { |
void DesktopWindowTreeHostX11::Restore() { |
should_maximize_after_map_ = false; |
- SetWMSpecState(false, |
- atom_cache_.GetAtom("_NET_WM_STATE_MAXIMIZED_VERT"), |
- atom_cache_.GetAtom("_NET_WM_STATE_MAXIMIZED_HORZ")); |
+ SetWMSpecState(false, ui::GetAtom("_NET_WM_STATE_MAXIMIZED_VERT"), |
+ ui::GetAtom("_NET_WM_STATE_MAXIMIZED_HORZ")); |
if (IsMinimized()) |
ShowWindowWithState(ui::SHOW_STATE_NORMAL); |
} |
@@ -903,9 +851,7 @@ bool DesktopWindowTreeHostX11::HasCapture() const { |
void DesktopWindowTreeHostX11::SetAlwaysOnTop(bool always_on_top) { |
is_always_on_top_ = always_on_top; |
- SetWMSpecState(always_on_top, |
- atom_cache_.GetAtom("_NET_WM_STATE_ABOVE"), |
- None); |
+ SetWMSpecState(always_on_top, ui::GetAtom("_NET_WM_STATE_ABOVE"), None); |
} |
bool DesktopWindowTreeHostX11::IsAlwaysOnTop() const { |
@@ -913,9 +859,7 @@ bool DesktopWindowTreeHostX11::IsAlwaysOnTop() const { |
} |
void DesktopWindowTreeHostX11::SetVisibleOnAllWorkspaces(bool always_visible) { |
- SetWMSpecState(always_visible, |
- atom_cache_.GetAtom("_NET_WM_STATE_STICKY"), |
- None); |
+ SetWMSpecState(always_visible, ui::GetAtom("_NET_WM_STATE_STICKY"), None); |
int new_desktop = 0; |
if (always_visible) { |
@@ -930,7 +874,7 @@ void DesktopWindowTreeHostX11::SetVisibleOnAllWorkspaces(bool always_visible) { |
memset (&xevent, 0, sizeof (xevent)); |
xevent.type = ClientMessage; |
xevent.xclient.window = xwindow_; |
- xevent.xclient.message_type = atom_cache_.GetAtom("_NET_WM_DESKTOP"); |
+ xevent.xclient.message_type = ui::GetAtom("_NET_WM_DESKTOP"); |
xevent.xclient.format = 32; |
xevent.xclient.data.l[0] = new_desktop; |
xevent.xclient.data.l[1] = 0; |
@@ -955,12 +899,8 @@ bool DesktopWindowTreeHostX11::SetWindowTitle(const base::string16& title) { |
return false; |
window_title_ = title; |
std::string utf8str = base::UTF16ToUTF8(title); |
- XChangeProperty(xdisplay_, |
- xwindow_, |
- atom_cache_.GetAtom("_NET_WM_NAME"), |
- atom_cache_.GetAtom("UTF8_STRING"), |
- 8, |
- PropModeReplace, |
+ XChangeProperty(xdisplay_, xwindow_, ui::GetAtom("_NET_WM_NAME"), |
+ ui::GetAtom("UTF8_STRING"), 8, PropModeReplace, |
reinterpret_cast<const unsigned char*>(utf8str.c_str()), |
utf8str.size()); |
XTextProperty xtp; |
@@ -1057,9 +997,7 @@ void DesktopWindowTreeHostX11::SetFullscreen(bool fullscreen) { |
if (unmaximize_and_remaximize) |
Restore(); |
- SetWMSpecState(fullscreen, |
- atom_cache_.GetAtom("_NET_WM_STATE_FULLSCREEN"), |
- None); |
+ SetWMSpecState(fullscreen, ui::GetAtom("_NET_WM_STATE_FULLSCREEN"), None); |
if (unmaximize_and_remaximize) |
Maximize(); |
@@ -1104,13 +1042,10 @@ void DesktopWindowTreeHostX11::SetOpacity(float opacity) { |
unsigned long cardinality = opacity_8bit * channel_multiplier; |
if (cardinality == 0xffffffff) { |
- XDeleteProperty(xdisplay_, xwindow_, |
- atom_cache_.GetAtom("_NET_WM_WINDOW_OPACITY")); |
+ XDeleteProperty(xdisplay_, xwindow_, ui::GetAtom("_NET_WM_WINDOW_OPACITY")); |
} else { |
- XChangeProperty(xdisplay_, xwindow_, |
- atom_cache_.GetAtom("_NET_WM_WINDOW_OPACITY"), |
- XA_CARDINAL, 32, |
- PropModeReplace, |
+ XChangeProperty(xdisplay_, xwindow_, ui::GetAtom("_NET_WM_WINDOW_OPACITY"), |
+ XA_CARDINAL, 32, PropModeReplace, |
reinterpret_cast<unsigned char*>(&cardinality), 1); |
} |
} |
@@ -1367,22 +1302,22 @@ void DesktopWindowTreeHostX11::InitX11Window( |
switch (params.type) { |
case Widget::InitParams::TYPE_MENU: |
swa.override_redirect = True; |
- window_type = atom_cache_.GetAtom("_NET_WM_WINDOW_TYPE_MENU"); |
+ window_type = ui::GetAtom("_NET_WM_WINDOW_TYPE_MENU"); |
break; |
case Widget::InitParams::TYPE_TOOLTIP: |
swa.override_redirect = True; |
- window_type = atom_cache_.GetAtom("_NET_WM_WINDOW_TYPE_TOOLTIP"); |
+ window_type = ui::GetAtom("_NET_WM_WINDOW_TYPE_TOOLTIP"); |
break; |
case Widget::InitParams::TYPE_POPUP: |
swa.override_redirect = True; |
- window_type = atom_cache_.GetAtom("_NET_WM_WINDOW_TYPE_NOTIFICATION"); |
+ window_type = ui::GetAtom("_NET_WM_WINDOW_TYPE_NOTIFICATION"); |
break; |
case Widget::InitParams::TYPE_DRAG: |
swa.override_redirect = True; |
- window_type = atom_cache_.GetAtom("_NET_WM_WINDOW_TYPE_DND"); |
+ window_type = ui::GetAtom("_NET_WM_WINDOW_TYPE_DND"); |
break; |
default: |
- window_type = atom_cache_.GetAtom("_NET_WM_WINDOW_TYPE_NORMAL"); |
+ window_type = ui::GetAtom("_NET_WM_WINDOW_TYPE_NORMAL"); |
break; |
} |
// An in-activatable window should not interact with the system wm. |
@@ -1451,8 +1386,8 @@ void DesktopWindowTreeHostX11::InitX11Window( |
// should listen for activation events and anything else that GTK+ listens |
// for, and do something useful. |
::Atom protocols[2]; |
- protocols[0] = atom_cache_.GetAtom("WM_DELETE_WINDOW"); |
- protocols[1] = atom_cache_.GetAtom("_NET_WM_PING"); |
+ protocols[0] = ui::GetAtom("WM_DELETE_WINDOW"); |
+ protocols[1] = ui::GetAtom("_NET_WM_PING"); |
XSetWMProtocols(xdisplay_, xwindow_, protocols, 2); |
// We need a WM_CLIENT_MACHINE and WM_LOCALE_NAME value so we integrate with |
@@ -1465,20 +1400,12 @@ void DesktopWindowTreeHostX11::InitX11Window( |
static_assert(sizeof(long) >= sizeof(pid_t), |
"pid_t should not be larger than long"); |
long pid = getpid(); |
- XChangeProperty(xdisplay_, |
- xwindow_, |
- atom_cache_.GetAtom("_NET_WM_PID"), |
- XA_CARDINAL, |
- 32, |
- PropModeReplace, |
- reinterpret_cast<unsigned char*>(&pid), 1); |
+ XChangeProperty(xdisplay_, xwindow_, ui::GetAtom("_NET_WM_PID"), XA_CARDINAL, |
+ 32, PropModeReplace, reinterpret_cast<unsigned char*>(&pid), |
+ 1); |
- XChangeProperty(xdisplay_, |
- xwindow_, |
- atom_cache_.GetAtom("_NET_WM_WINDOW_TYPE"), |
- XA_ATOM, |
- 32, |
- PropModeReplace, |
+ XChangeProperty(xdisplay_, xwindow_, ui::GetAtom("_NET_WM_WINDOW_TYPE"), |
+ XA_ATOM, 32, PropModeReplace, |
reinterpret_cast<unsigned char*>(&window_type), 1); |
// List of window state properties (_NET_WM_STATE) to set, if any. |
@@ -1488,19 +1415,18 @@ void DesktopWindowTreeHostX11::InitX11Window( |
if ((params.type == Widget::InitParams::TYPE_POPUP || |
params.type == Widget::InitParams::TYPE_BUBBLE) && |
!params.force_show_in_taskbar) { |
- state_atom_list.push_back( |
- atom_cache_.GetAtom("_NET_WM_STATE_SKIP_TASKBAR")); |
+ state_atom_list.push_back(ui::GetAtom("_NET_WM_STATE_SKIP_TASKBAR")); |
} |
// If the window should stay on top of other windows, add the |
// _NET_WM_STATE_ABOVE property. |
is_always_on_top_ = params.keep_on_top; |
if (is_always_on_top_) |
- state_atom_list.push_back(atom_cache_.GetAtom("_NET_WM_STATE_ABOVE")); |
+ state_atom_list.push_back(ui::GetAtom("_NET_WM_STATE_ABOVE")); |
workspace_.clear(); |
if (params.visible_on_all_workspaces) { |
- state_atom_list.push_back(atom_cache_.GetAtom("_NET_WM_STATE_STICKY")); |
+ state_atom_list.push_back(ui::GetAtom("_NET_WM_STATE_STICKY")); |
ui::SetIntProperty(xwindow_, "_NET_WM_DESKTOP", "CARDINAL", kAllDesktops); |
} else if (!params.workspace.empty()) { |
int workspace; |
@@ -1717,13 +1643,9 @@ void DesktopWindowTreeHostX11::UpdateWMUserTime( |
type == ui::ET_TOUCH_PRESSED) { |
unsigned long wm_user_time_ms = static_cast<unsigned long>( |
(ui::EventTimeFromNative(event) - base::TimeTicks()).InMilliseconds()); |
- XChangeProperty(xdisplay_, |
- xwindow_, |
- atom_cache_.GetAtom("_NET_WM_USER_TIME"), |
- XA_CARDINAL, |
- 32, |
- PropModeReplace, |
- reinterpret_cast<const unsigned char *>(&wm_user_time_ms), |
+ XChangeProperty(xdisplay_, xwindow_, ui::GetAtom("_NET_WM_USER_TIME"), |
+ XA_CARDINAL, 32, PropModeReplace, |
+ reinterpret_cast<const unsigned char*>(&wm_user_time_ms), |
1); |
} |
} |
@@ -1735,7 +1657,7 @@ void DesktopWindowTreeHostX11::SetWMSpecState(bool enabled, |
memset(&xclient, 0, sizeof(xclient)); |
xclient.type = ClientMessage; |
xclient.xclient.window = xwindow_; |
- xclient.xclient.message_type = atom_cache_.GetAtom("_NET_WM_STATE"); |
+ xclient.xclient.message_type = ui::GetAtom("_NET_WM_STATE"); |
xclient.xclient.format = 32; |
xclient.xclient.data.l[0] = |
enabled ? k_NET_WM_STATE_ADD : k_NET_WM_STATE_REMOVE; |
@@ -1750,8 +1672,8 @@ void DesktopWindowTreeHostX11::SetWMSpecState(bool enabled, |
} |
bool DesktopWindowTreeHostX11::HasWMSpecProperty(const char* property) const { |
- return window_properties_.find(atom_cache_.GetAtom(property)) != |
- window_properties_.end(); |
+ return window_properties_.find(ui::GetAtom(property)) != |
+ window_properties_.end(); |
} |
void DesktopWindowTreeHostX11::SetUseNativeFrame(bool use_native_frame) { |
@@ -1931,10 +1853,10 @@ void DesktopWindowTreeHostX11::MapWindow(ui::WindowShowState show_state) { |
? 0 |
: ui::X11EventSource::GetInstance()->GetTimestamp(); |
if (show_state == ui::SHOW_STATE_INACTIVE || wm_user_time_ms != 0) { |
- XChangeProperty( |
- xdisplay_, xwindow_, atom_cache_.GetAtom("_NET_WM_USER_TIME"), |
- XA_CARDINAL, 32, PropModeReplace, |
- reinterpret_cast<const unsigned char*>(&wm_user_time_ms), 1); |
+ XChangeProperty(xdisplay_, xwindow_, ui::GetAtom("_NET_WM_USER_TIME"), |
+ XA_CARDINAL, 32, PropModeReplace, |
+ reinterpret_cast<const unsigned char*>(&wm_user_time_ms), |
+ 1); |
} |
ui::X11EventSource* event_source = ui::X11EventSource::GetInstance(); |
@@ -2192,12 +2114,12 @@ uint32_t DesktopWindowTreeHostX11::DispatchEvent( |
} |
case ClientMessage: { |
Atom message_type = xev->xclient.message_type; |
- if (message_type == atom_cache_.GetAtom("WM_PROTOCOLS")) { |
+ if (message_type == ui::GetAtom("WM_PROTOCOLS")) { |
Atom protocol = static_cast<Atom>(xev->xclient.data.l[0]); |
- if (protocol == atom_cache_.GetAtom("WM_DELETE_WINDOW")) { |
+ if (protocol == ui::GetAtom("WM_DELETE_WINDOW")) { |
// We have received a close message from the window manager. |
OnHostCloseRequested(); |
- } else if (protocol == atom_cache_.GetAtom("_NET_WM_PING")) { |
+ } else if (protocol == ui::GetAtom("_NET_WM_PING")) { |
XEvent reply_event = *xev; |
reply_event.xclient.window = x_root_window_; |
@@ -2207,17 +2129,17 @@ uint32_t DesktopWindowTreeHostX11::DispatchEvent( |
SubstructureRedirectMask | SubstructureNotifyMask, |
&reply_event); |
} |
- } else if (message_type == atom_cache_.GetAtom("XdndEnter")) { |
+ } else if (message_type == ui::GetAtom("XdndEnter")) { |
drag_drop_client_->OnXdndEnter(xev->xclient); |
- } else if (message_type == atom_cache_.GetAtom("XdndLeave")) { |
+ } else if (message_type == ui::GetAtom("XdndLeave")) { |
drag_drop_client_->OnXdndLeave(xev->xclient); |
- } else if (message_type == atom_cache_.GetAtom("XdndPosition")) { |
+ } else if (message_type == ui::GetAtom("XdndPosition")) { |
drag_drop_client_->OnXdndPosition(xev->xclient); |
- } else if (message_type == atom_cache_.GetAtom("XdndStatus")) { |
+ } else if (message_type == ui::GetAtom("XdndStatus")) { |
drag_drop_client_->OnXdndStatus(xev->xclient); |
- } else if (message_type == atom_cache_.GetAtom("XdndFinished")) { |
+ } else if (message_type == ui::GetAtom("XdndFinished")) { |
drag_drop_client_->OnXdndFinished(xev->xclient); |
- } else if (message_type == atom_cache_.GetAtom("XdndDrop")) { |
+ } else if (message_type == ui::GetAtom("XdndDrop")) { |
drag_drop_client_->OnXdndDrop(xev->xclient); |
} |
break; |
@@ -2261,11 +2183,11 @@ uint32_t DesktopWindowTreeHostX11::DispatchEvent( |
} |
case PropertyNotify: { |
::Atom changed_atom = xev->xproperty.atom; |
- if (changed_atom == atom_cache_.GetAtom("_NET_WM_STATE")) { |
+ if (changed_atom == ui::GetAtom("_NET_WM_STATE")) { |
OnWMStateUpdated(); |
- } else if (changed_atom == atom_cache_.GetAtom("_NET_FRAME_EXTENTS")) { |
+ } else if (changed_atom == ui::GetAtom("_NET_FRAME_EXTENTS")) { |
OnFrameExtentsUpdated(); |
- } else if (changed_atom == atom_cache_.GetAtom("_NET_WM_DESKTOP")) { |
+ } else if (changed_atom == ui::GetAtom("_NET_WM_DESKTOP")) { |
if (UpdateWorkspace()) |
OnHostWorkspaceChanged(); |
} |