Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Side by Side Diff: ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc

Issue 2709283003: Allow to open multiple modal file-pickers in Linux (Closed)
Patch Set: add DCHECK_GT Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h" 5 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
6 6
7 #include <X11/extensions/shape.h> 7 #include <X11/extensions/shape.h>
8 #include <X11/extensions/XInput2.h> 8 #include <X11/extensions/XInput2.h>
9 #include <X11/Xatom.h> 9 #include <X11/Xatom.h>
10 #include <X11/Xregion.h> 10 #include <X11/Xregion.h>
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 desktop_native_widget_aura_(desktop_native_widget_aura), 199 desktop_native_widget_aura_(desktop_native_widget_aura),
200 content_window_(NULL), 200 content_window_(NULL),
201 window_parent_(NULL), 201 window_parent_(NULL),
202 custom_window_shape_(false), 202 custom_window_shape_(false),
203 urgency_hint_set_(false), 203 urgency_hint_set_(false),
204 has_pointer_grab_(false), 204 has_pointer_grab_(false),
205 activatable_(true), 205 activatable_(true),
206 has_pointer_(false), 206 has_pointer_(false),
207 has_window_focus_(false), 207 has_window_focus_(false),
208 has_pointer_focus_(false), 208 has_pointer_focus_(false),
209 modal_dialog_xid_(0), 209 modal_dialog_counter_(0),
210 close_widget_factory_(this), 210 close_widget_factory_(this),
211 weak_factory_(this) {} 211 weak_factory_(this) {}
212 212
213 DesktopWindowTreeHostX11::~DesktopWindowTreeHostX11() { 213 DesktopWindowTreeHostX11::~DesktopWindowTreeHostX11() {
214 window()->ClearProperty(kHostForRootWindow); 214 window()->ClearProperty(kHostForRootWindow);
215 aura::client::SetWindowMoveClient(window(), NULL); 215 aura::client::SetWindowMoveClient(window(), NULL);
216 desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(this); 216 desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(this);
217 DestroyDispatcher(); 217 DestroyDispatcher();
218 } 218 }
219 219
(...skipping 2110 matching lines...) Expand 10 before | Expand all | Expand 10 after
2330 return gfx::ToEnclosingRect(rect_in_dip); 2330 return gfx::ToEnclosingRect(rect_in_dip);
2331 } 2331 }
2332 2332
2333 gfx::Rect DesktopWindowTreeHostX11::ToPixelRect( 2333 gfx::Rect DesktopWindowTreeHostX11::ToPixelRect(
2334 const gfx::Rect& rect_in_dip) const { 2334 const gfx::Rect& rect_in_dip) const {
2335 gfx::RectF rect_in_pixels = gfx::RectF(rect_in_dip); 2335 gfx::RectF rect_in_pixels = gfx::RectF(rect_in_dip);
2336 GetRootTransform().TransformRect(&rect_in_pixels); 2336 GetRootTransform().TransformRect(&rect_in_pixels);
2337 return gfx::ToEnclosingRect(rect_in_pixels); 2337 return gfx::ToEnclosingRect(rect_in_pixels);
2338 } 2338 }
2339 2339
2340 XID DesktopWindowTreeHostX11::GetModalDialog() {
2341 return modal_dialog_xid_;
2342 }
2343
2344 std::unique_ptr<base::Closure> 2340 std::unique_ptr<base::Closure>
2345 DesktopWindowTreeHostX11::DisableEventListening(XID dialog) { 2341 DesktopWindowTreeHostX11::DisableEventListening() {
2346 DCHECK(dialog); 2342 // Allows to open multiple file-pickers. See https://crbug.com/678982
2347 DCHECK(!modal_dialog_xid_); 2343 modal_dialog_counter_++;
2348 modal_dialog_xid_ = dialog; 2344 if (modal_dialog_counter_ == 1) {
2349 // ScopedWindowTargeter is used to temporarily replace the event-targeter 2345 // ScopedWindowTargeter is used to temporarily replace the event-targeter
2350 // with NullEventTargeter to make |dialog| modal. 2346 // with NullEventTargeter to make |dialog| modal.
2351 targeter_for_modal_.reset(new aura::ScopedWindowTargeter(window(), 2347 targeter_for_modal_.reset(new aura::ScopedWindowTargeter(
2352 std::unique_ptr<ui::EventTargeter>(new ui::NullEventTargeter))); 2348 window(),
2349 std::unique_ptr<ui::EventTargeter>(new ui::NullEventTargeter)));
2350 }
2353 2351
2354 return base::MakeUnique<base::Closure>(base::Bind( 2352 return base::MakeUnique<base::Closure>(base::Bind(
2355 &DesktopWindowTreeHostX11::EnableEventListening, 2353 &DesktopWindowTreeHostX11::EnableEventListening,
2356 weak_factory_.GetWeakPtr())); 2354 weak_factory_.GetWeakPtr()));
2357 } 2355 }
2358 2356
2359 void DesktopWindowTreeHostX11::EnableEventListening() { 2357 void DesktopWindowTreeHostX11::EnableEventListening() {
2360 DCHECK(modal_dialog_xid_); 2358 DCHECK_GT(modal_dialog_counter_, 0UL);
2361 modal_dialog_xid_ = 0; 2359 if (!--modal_dialog_counter_)
2362 targeter_for_modal_.reset(); 2360 targeter_for_modal_.reset();
2363 } 2361 }
2364 2362
2365 //////////////////////////////////////////////////////////////////////////////// 2363 ////////////////////////////////////////////////////////////////////////////////
2366 // DesktopWindowTreeHost, public: 2364 // DesktopWindowTreeHost, public:
2367 2365
2368 // static 2366 // static
2369 DesktopWindowTreeHost* DesktopWindowTreeHost::Create( 2367 DesktopWindowTreeHost* DesktopWindowTreeHost::Create(
2370 internal::NativeWidgetDelegate* native_widget_delegate, 2368 internal::NativeWidgetDelegate* native_widget_delegate,
2371 DesktopNativeWidgetAura* desktop_native_widget_aura) { 2369 DesktopNativeWidgetAura* desktop_native_widget_aura) {
2372 return new DesktopWindowTreeHostX11(native_widget_delegate, 2370 return new DesktopWindowTreeHostX11(native_widget_delegate,
2373 desktop_native_widget_aura); 2371 desktop_native_widget_aura);
2374 } 2372 }
2375 2373
2376 } // namespace views 2374 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698