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

Side by Side Diff: ui/aura/desktop_host_linux.cc

Issue 8359005: Notify Desktop::OnHostRezied only when the size has changed or resize is requsted. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 9 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/aura/desktop_host.h" 5 #include "ui/aura/desktop_host.h"
6 6
7 #include <X11/cursorfont.h> 7 #include <X11/cursorfont.h>
8 #include <X11/Xlib.h> 8 #include <X11/Xlib.h>
9 9
10 // Get rid of a macro from Xlib.h that conflicts with Aura's RootWindow class. 10 // Get rid of a macro from Xlib.h that conflicts with Aura's RootWindow class.
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 // The display and the native X window hosting the desktop. 206 // The display and the native X window hosting the desktop.
207 Display* xdisplay_; 207 Display* xdisplay_;
208 ::Window xwindow_; 208 ::Window xwindow_;
209 209
210 // Current Aura cursor. 210 // Current Aura cursor.
211 gfx::NativeCursor current_cursor_; 211 gfx::NativeCursor current_cursor_;
212 212
213 // The size of |xwindow_|. 213 // The size of |xwindow_|.
214 gfx::Rect bounds_; 214 gfx::Rect bounds_;
215 215
216 // True while we requested configure, but haven't recieved configure event
217 // yet.
218 bool expect_configure_event_;
219
216 DISALLOW_COPY_AND_ASSIGN(DesktopHostLinux); 220 DISALLOW_COPY_AND_ASSIGN(DesktopHostLinux);
217 }; 221 };
218 222
219 DesktopHostLinux::DesktopHostLinux(const gfx::Rect& bounds) 223 DesktopHostLinux::DesktopHostLinux(const gfx::Rect& bounds)
220 : desktop_(NULL), 224 : desktop_(NULL),
221 xdisplay_(NULL), 225 xdisplay_(NULL),
222 xwindow_(0), 226 xwindow_(0),
223 current_cursor_(aura::kCursorNull), 227 current_cursor_(aura::kCursorNull),
224 bounds_(bounds) { 228 bounds_(bounds) {
225 // This assumes that the message-pump creates and owns the display. 229 // This assumes that the message-pump creates and owns the display.
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 } 306 }
303 case ConfigureNotify: { 307 case ConfigureNotify: {
304 DCHECK_EQ(xdisplay_, xev->xconfigure.display); 308 DCHECK_EQ(xdisplay_, xev->xconfigure.display);
305 DCHECK_EQ(xwindow_, xev->xconfigure.window); 309 DCHECK_EQ(xwindow_, xev->xconfigure.window);
306 DCHECK_EQ(xwindow_, xev->xconfigure.event); 310 DCHECK_EQ(xwindow_, xev->xconfigure.event);
307 311
308 // It's possible that the X window may be resized by some other means than 312 // It's possible that the X window may be resized by some other means than
309 // from within aura (e.g. the X window manager can change the size). Make 313 // from within aura (e.g. the X window manager can change the size). Make
310 // sure the desktop size is maintained properly. 314 // sure the desktop size is maintained properly.
311 gfx::Size size(xev->xconfigure.width, xev->xconfigure.height); 315 gfx::Size size(xev->xconfigure.width, xev->xconfigure.height);
312 if (bounds_.size() != size) 316 if (bounds_.size() != size || expect_configure_event_) {
317 expect_configure_event_ = false;
313 bounds_.set_size(size); 318 bounds_.set_size(size);
314 desktop_->OnHostResized(size); 319 desktop_->OnHostResized(size);
320 }
315 handled = true; 321 handled = true;
316 break; 322 break;
317 } 323 }
318 324
319 case GenericEvent: { 325 case GenericEvent: {
320 ui::TouchFactory* factory = ui::TouchFactory::GetInstance(); 326 ui::TouchFactory* factory = ui::TouchFactory::GetInstance();
321 if (!factory->ShouldProcessXI2Event(xev)) 327 if (!factory->ShouldProcessXI2Event(xev))
322 break; 328 break;
323 329
324 // If this is a motion event we want to coalesce all pending motion 330 // If this is a motion event we want to coalesce all pending motion
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 XFlush(xdisplay_); 393 XFlush(xdisplay_);
388 } 394 }
389 395
390 gfx::Size DesktopHostLinux::GetSize() const { 396 gfx::Size DesktopHostLinux::GetSize() const {
391 return bounds_.size(); 397 return bounds_.size();
392 } 398 }
393 399
394 void DesktopHostLinux::SetSize(const gfx::Size& size) { 400 void DesktopHostLinux::SetSize(const gfx::Size& size) {
395 if (bounds_.size() == size) 401 if (bounds_.size() == size)
396 return; 402 return;
403 expect_configure_event_ = true;
397 bounds_.set_size(size); 404 bounds_.set_size(size);
398 XResizeWindow(xdisplay_, xwindow_, size.width(), size.height()); 405 XResizeWindow(xdisplay_, xwindow_, size.width(), size.height());
399 } 406 }
400 407
401 void DesktopHostLinux::SetCursor(gfx::NativeCursor cursor) { 408 void DesktopHostLinux::SetCursor(gfx::NativeCursor cursor) {
402 if (current_cursor_ == cursor) 409 if (current_cursor_ == cursor)
403 return; 410 return;
404 current_cursor_ = cursor; 411 current_cursor_ = cursor;
405 // Custom web cursors are handled directly. 412 // Custom web cursors are handled directly.
406 if (cursor == kCursorCustom) 413 if (cursor == kCursorCustom)
(...skipping 26 matching lines...) Expand all
433 } 440 }
434 441
435 } // namespace 442 } // namespace
436 443
437 // static 444 // static
438 DesktopHost* DesktopHost::Create(const gfx::Rect& bounds) { 445 DesktopHost* DesktopHost::Create(const gfx::Rect& bounds) {
439 return new DesktopHostLinux(bounds); 446 return new DesktopHostLinux(bounds);
440 } 447 }
441 448
442 } // namespace aura 449 } // namespace aura
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698