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

Unified Diff: ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc

Issue 110223004: linux-aura: Fix some dragging behaviour. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years 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 side-by-side diff with in-line comments
Download patch
Index: ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc
index 545e0cde550ffaea30255827af593b2927f3da30..8ee87510ea4bf528510aaa3c51938c26f4036e84 100644
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc
@@ -47,6 +47,7 @@
#include "ui/views/widget/desktop_aura/desktop_root_window_host_observer_x11.h"
#include "ui/views/widget/desktop_aura/x11_desktop_handler.h"
#include "ui/views/widget/desktop_aura/x11_desktop_window_move_client.h"
+#include "ui/views/widget/desktop_aura/x11_scoped_capture.h"
#include "ui/views/widget/desktop_aura/x11_window_event_filter.h"
namespace views {
@@ -292,6 +293,7 @@ void DesktopRootWindowHostX11::CloseNow() {
if (xwindow_ == None)
return;
+ x11_capture_.reset();
native_widget_delegate_->OnNativeWidgetDestroying();
// If we have children, close them. Use a copy for iteration because they'll
@@ -466,6 +468,7 @@ void DesktopRootWindowHostX11::Activate() {
void DesktopRootWindowHostX11::Deactivate() {
// Deactivating a window means activating nothing.
+ x11_capture_.reset();
X11DesktopHandler::get()->ActivateWindow(None);
}
@@ -485,6 +488,7 @@ void DesktopRootWindowHostX11::Maximize() {
}
void DesktopRootWindowHostX11::Minimize() {
+ x11_capture_.reset();
XIconifyWindow(xdisplay_, xwindow_, 0);
}
@@ -694,8 +698,10 @@ void DesktopRootWindowHostX11::OnNativeWidgetFocus() {
}
void DesktopRootWindowHostX11::OnNativeWidgetBlur() {
- if (xwindow_)
+ if (xwindow_) {
+ x11_capture_.reset();
native_widget_delegate_->AsWidget()->GetInputMethod()->OnBlur();
+ }
}
bool DesktopRootWindowHostX11::IsAnimatingClosed() const {
@@ -813,17 +819,11 @@ void DesktopRootWindowHostX11::SetCapture() {
g_current_capture->OnCaptureReleased();
g_current_capture = this;
-
- // TODO(erg): In addition to the above, NativeWidgetGtk performs a full X
- // pointer grab when our NativeWidget is of type Menu. However, things work
- // without it. Clicking inside a chrome window causes a release capture, and
- // clicking outside causes an activation change. Since previous attempts at
- // using XPointerGrab() to implement this have locked my X server, I'm going
- // to skip this for now.
+ x11_capture_.reset(new X11ScopedCapture(xwindow_));
}
void DesktopRootWindowHostX11::ReleaseCapture() {
- if (g_current_capture)
+ if (g_current_capture == this)
g_current_capture->OnCaptureReleased();
}
@@ -1102,6 +1102,7 @@ bool DesktopRootWindowHostX11::HasWMSpecProperty(const char* property) const {
}
void DesktopRootWindowHostX11::OnCaptureReleased() {
+ x11_capture_.reset();
g_current_capture = NULL;
delegate_->OnHostLostWindowCapture();
native_widget_delegate_->OnMouseCaptureLost();

Powered by Google App Engine
This is Rietveld 408576698