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

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

Issue 455553003: Do not release capture when starting a move loop on Desktop Linux (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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
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 903 matching lines...) Expand 10 before | Expand all | Expand 10 after
914 OnHostResized(bounds.size()); 914 OnHostResized(bounds.size());
915 ResetWindowRegion(); 915 ResetWindowRegion();
916 } 916 }
917 } 917 }
918 918
919 gfx::Point DesktopWindowTreeHostX11::GetLocationOnNativeScreen() const { 919 gfx::Point DesktopWindowTreeHostX11::GetLocationOnNativeScreen() const {
920 return bounds_.origin(); 920 return bounds_.origin();
921 } 921 }
922 922
923 void DesktopWindowTreeHostX11::SetCapture() { 923 void DesktopWindowTreeHostX11::SetCapture() {
924 if (HasCapture())
925 return;
926
924 // Grabbing the mouse is asynchronous. However, we synchronously start 927 // Grabbing the mouse is asynchronous. However, we synchronously start
925 // forwarding all mouse events received by Chrome to the 928 // forwarding all mouse events received by Chrome to the
926 // aura::WindowEventDispatcher which has capture. This makes capture 929 // aura::WindowEventDispatcher which has capture. This makes capture
927 // synchronous for all intents and purposes if either: 930 // synchronous for all intents and purposes if either:
928 // - |g_current_capture|'s X window has capture. 931 // - |g_current_capture|'s X window has capture.
929 // OR 932 // OR
930 // - The topmost window underneath the mouse is managed by Chrome. 933 // - The topmost window underneath the mouse is managed by Chrome.
931 if (g_current_capture) 934 DesktopWindowTreeHostX11* old_capturer = g_current_capture;
932 g_current_capture->OnHostLostWindowCapture();
933 g_current_capture = this; 935 g_current_capture = this;
936 if (old_capturer)
937 old_capturer->OnHostLostWindowCapture();
934 938
935 unsigned int event_mask = PointerMotionMask | ButtonReleaseMask | 939 unsigned int event_mask = PointerMotionMask | ButtonReleaseMask |
936 ButtonPressMask; 940 ButtonPressMask;
937 XGrabPointer(xdisplay_, xwindow_, True, event_mask, GrabModeAsync, 941 XGrabPointer(xdisplay_, xwindow_, True, event_mask, GrabModeAsync,
938 GrabModeAsync, None, None, CurrentTime); 942 GrabModeAsync, None, None, CurrentTime);
939 } 943 }
940 944
941 void DesktopWindowTreeHostX11::ReleaseCapture() { 945 void DesktopWindowTreeHostX11::ReleaseCapture() {
942 if (g_current_capture == this) { 946 if (g_current_capture == this) {
943 // Release mouse grab asynchronously. A window managed by Chrome is likely 947 // Release mouse grab asynchronously. A window managed by Chrome is likely
(...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after
1903 if (linux_ui) { 1907 if (linux_ui) {
1904 ui::NativeTheme* native_theme = linux_ui->GetNativeTheme(window); 1908 ui::NativeTheme* native_theme = linux_ui->GetNativeTheme(window);
1905 if (native_theme) 1909 if (native_theme)
1906 return native_theme; 1910 return native_theme;
1907 } 1911 }
1908 1912
1909 return ui::NativeTheme::instance(); 1913 return ui::NativeTheme::instance();
1910 } 1914 }
1911 1915
1912 } // namespace views 1916 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698