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

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

Issue 100623008: Allow inactive windows to be created with Linux Aura. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@show_inactive
Patch Set: update/rebase Created 6 years, 11 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 | « 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) 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_root_window_host_x11.h" 5 #include "ui/views/widget/desktop_aura/desktop_root_window_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 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 328
329 desktop_native_widget_aura_->OnHostClosed(); 329 desktop_native_widget_aura_->OnHostClosed();
330 } 330 }
331 331
332 aura::WindowTreeHost* DesktopWindowTreeHostX11::AsWindowTreeHost() { 332 aura::WindowTreeHost* DesktopWindowTreeHostX11::AsWindowTreeHost() {
333 return this; 333 return this;
334 } 334 }
335 335
336 void DesktopWindowTreeHostX11::ShowWindowWithState( 336 void DesktopWindowTreeHostX11::ShowWindowWithState(
337 ui::WindowShowState show_state) { 337 ui::WindowShowState show_state) {
338 if (window_mapped_)
339 return;
340
338 if (show_state != ui::SHOW_STATE_DEFAULT && 341 if (show_state != ui::SHOW_STATE_DEFAULT &&
339 show_state != ui::SHOW_STATE_NORMAL) { 342 show_state != ui::SHOW_STATE_NORMAL &&
340 // Only forwarding to Show(). 343 show_state != ui::SHOW_STATE_INACTIVE) {
344 // It will behave like SHOW_STATE_NORMAL.
341 NOTIMPLEMENTED(); 345 NOTIMPLEMENTED();
342 } 346 }
343 347
344 Show(); 348 // Before we map the window, set size hints. Otherwise, some window managers
349 // will ignore toplevel XMoveWindow commands.
Matt Giuca 2014/01/13 00:18:57 Optional nit (I realize you didn't write this): to
mlamouri (slow - plz ping) 2014/01/13 02:04:58 If I knew which WM would ignore the toplevel XMove
350 XSizeHints size_hints;
351 size_hints.flags = PPosition;
352 size_hints.x = bounds_.x();
353 size_hints.y = bounds_.y();
354 XSetWMNormalHints(xdisplay_, xwindow_, &size_hints);
355
356 XWMHints wm_hints;
357 wm_hints.flags = InputHint | StateHint;
358 wm_hints.input = show_state != ui::SHOW_STATE_INACTIVE;
Matt Giuca 2014/01/13 00:18:57 // If SHOW_STATE_INACTIVE, tell the window manager
mlamouri (slow - plz ping) 2014/01/13 02:04:58 Done.
Matt Giuca 2014/01/14 05:43:27 I don't see any such comment?
359 wm_hints.initial_state = NormalState;
360 XSetWMHints(xdisplay_, xwindow_, &wm_hints);
361
362 XMapWindow(xdisplay_, xwindow_);
363
364 // We now block until our window is mapped. Some X11 APIs will crash and
365 // burn if passed |xwindow_| before the window is mapped, and XMapWindow is
Matt Giuca 2014/01/13 00:18:57 Optional nit (I realize you didn't write this): Ge
mlamouri (slow - plz ping) 2014/01/13 02:04:58 I removed "and burn". I guess those other API call
366 // asynchronous.
367 base::MessagePumpX11::Current()->BlockUntilWindowMapped(xwindow_);
368 window_mapped_ = true;
369
370 // The window has been created and mapped. Keeping the hint will simply
371 // confuse the WM at that point.
Matt Giuca 2014/01/13 00:18:57 What does "confuse" mean? Which hint are you refer
mlamouri (slow - plz ping) 2014/01/13 02:04:58 Updated the comment. There is no need to set |init
372 if (show_state == ui::SHOW_STATE_INACTIVE) {
373 XWMHints wm_hints;
374 wm_hints.flags = InputHint;
375 wm_hints.input = true;
Matt Giuca 2014/01/13 00:18:57 // Tell the window manager that the window is now
mlamouri (slow - plz ping) 2014/01/13 02:04:58 Done.
376 XSetWMHints(xdisplay_, xwindow_, &wm_hints);
377 }
378
379 if (show_state != ui::SHOW_STATE_INACTIVE)
Matt Giuca 2014/01/13 00:18:57 How about "else"?
mlamouri (slow - plz ping) 2014/01/13 02:04:58 That has changed. It is being taken care of in cl
Matt Giuca 2014/01/14 05:43:27 As I wrote on that CL, is this one going first or
380 native_widget_delegate_->AsWidget()->SetInitialFocus();
345 } 381 }
346 382
347 void DesktopWindowTreeHostX11::ShowMaximizedWithBounds( 383 void DesktopWindowTreeHostX11::ShowMaximizedWithBounds(
348 const gfx::Rect& restored_bounds) { 384 const gfx::Rect& restored_bounds) {
349 restored_bounds_ = restored_bounds; 385 restored_bounds_ = restored_bounds;
350 Maximize(); 386 Maximize();
351 Show(); 387 Show();
352 } 388 }
353 389
354 bool DesktopWindowTreeHostX11::IsVisible() const { 390 bool DesktopWindowTreeHostX11::IsVisible() const {
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 754
719 aura::RootWindow* DesktopWindowTreeHostX11::GetRootWindow() { 755 aura::RootWindow* DesktopWindowTreeHostX11::GetRootWindow() {
720 return root_window_; 756 return root_window_;
721 } 757 }
722 758
723 gfx::AcceleratedWidget DesktopWindowTreeHostX11::GetAcceleratedWidget() { 759 gfx::AcceleratedWidget DesktopWindowTreeHostX11::GetAcceleratedWidget() {
724 return xwindow_; 760 return xwindow_;
725 } 761 }
726 762
727 void DesktopWindowTreeHostX11::Show() { 763 void DesktopWindowTreeHostX11::Show() {
728 if (!window_mapped_) { 764 ShowWindowWithState(ui::SHOW_STATE_NORMAL);
729 // Before we map the window, set size hints. Otherwise, some window managers
730 // will ignore toplevel XMoveWindow commands.
731 XSizeHints size_hints;
732 size_hints.flags = PPosition;
733 size_hints.x = bounds_.x();
734 size_hints.y = bounds_.y();
735 XSetWMNormalHints(xdisplay_, xwindow_, &size_hints);
736
737 XMapWindow(xdisplay_, xwindow_);
738
739 // We now block until our window is mapped. Some X11 APIs will crash and
740 // burn if passed |xwindow_| before the window is mapped, and XMapWindow is
741 // asynchronous.
742 base::MessagePumpX11::Current()->BlockUntilWindowMapped(xwindow_);
743 window_mapped_ = true;
744 }
745
746 native_widget_delegate_->AsWidget()->SetInitialFocus();
747 } 765 }
748 766
749 void DesktopWindowTreeHostX11::Hide() { 767 void DesktopWindowTreeHostX11::Hide() {
750 if (window_mapped_) { 768 if (window_mapped_) {
751 XWithdrawWindow(xdisplay_, xwindow_, 0); 769 XWithdrawWindow(xdisplay_, xwindow_, 0);
752 window_mapped_ = false; 770 window_mapped_ = false;
753 } 771 }
754 } 772 }
755 773
756 void DesktopWindowTreeHostX11::ToggleFullScreen() { 774 void DesktopWindowTreeHostX11::ToggleFullScreen() {
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after
1546 if (linux_ui) { 1564 if (linux_ui) {
1547 ui::NativeTheme* native_theme = linux_ui->GetNativeTheme(); 1565 ui::NativeTheme* native_theme = linux_ui->GetNativeTheme();
1548 if (native_theme) 1566 if (native_theme)
1549 return native_theme; 1567 return native_theme;
1550 } 1568 }
1551 1569
1552 return ui::NativeTheme::instance(); 1570 return ui::NativeTheme::instance();
1553 } 1571 }
1554 1572
1555 } // namespace views 1573 } // namespace views
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