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

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

Issue 72503002: Remove some pass-thrus on RootWindow API in favor of exposing the RootWindowHost again. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 1 month 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_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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 atom_cache_(xdisplay_, kAtomsToCache), 125 atom_cache_(xdisplay_, kAtomsToCache),
126 window_mapped_(false), 126 window_mapped_(false),
127 focus_when_shown_(false), 127 focus_when_shown_(false),
128 is_fullscreen_(false), 128 is_fullscreen_(false),
129 is_always_on_top_(false), 129 is_always_on_top_(false),
130 root_window_(NULL), 130 root_window_(NULL),
131 drag_drop_client_(NULL), 131 drag_drop_client_(NULL),
132 current_cursor_(ui::kCursorNull), 132 current_cursor_(ui::kCursorNull),
133 native_widget_delegate_(native_widget_delegate), 133 native_widget_delegate_(native_widget_delegate),
134 desktop_native_widget_aura_(desktop_native_widget_aura), 134 desktop_native_widget_aura_(desktop_native_widget_aura),
135 root_window_host_delegate_(NULL),
136 content_window_(NULL), 135 content_window_(NULL),
137 window_parent_(NULL) { 136 window_parent_(NULL) {
138 } 137 }
139 138
140 DesktopRootWindowHostX11::~DesktopRootWindowHostX11() { 139 DesktopRootWindowHostX11::~DesktopRootWindowHostX11() {
141 root_window_->window()->ClearProperty(kHostForRootWindow); 140 root_window_->window()->ClearProperty(kHostForRootWindow);
142 aura::client::SetWindowMoveClient(root_window_->window(), NULL); 141 aura::client::SetWindowMoveClient(root_window_->window(), NULL);
143 desktop_native_widget_aura_->OnDesktopRootWindowHostDestroyed(root_window_); 142 desktop_native_widget_aura_->OnDesktopRootWindowHostDestroyed(root_window_);
144 } 143 }
145 144
(...skipping 19 matching lines...) Expand all
165 return windows; 164 return windows;
166 } 165 }
167 166
168 gfx::Rect DesktopRootWindowHostX11::GetX11RootWindowBounds() const { 167 gfx::Rect DesktopRootWindowHostX11::GetX11RootWindowBounds() const {
169 return bounds_; 168 return bounds_;
170 } 169 }
171 170
172 void DesktopRootWindowHostX11::HandleNativeWidgetActivationChanged( 171 void DesktopRootWindowHostX11::HandleNativeWidgetActivationChanged(
173 bool active) { 172 bool active) {
174 if (active) 173 if (active)
175 root_window_host_delegate_->OnHostActivated(); 174 delegate_->OnHostActivated();
176 175
177 desktop_native_widget_aura_->HandleActivationChanged(active); 176 desktop_native_widget_aura_->HandleActivationChanged(active);
178 177
179 native_widget_delegate_->AsWidget()->GetRootView()->SchedulePaint(); 178 native_widget_delegate_->AsWidget()->GetRootView()->SchedulePaint();
180 } 179 }
181 180
182 void DesktopRootWindowHostX11::AddObserver( 181 void DesktopRootWindowHostX11::AddObserver(
183 views::DesktopRootWindowHostObserverX11* observer) { 182 views::DesktopRootWindowHostObserverX11* observer) {
184 observer_list_.AddObserver(observer); 183 observer_list_.AddObserver(observer);
185 } 184 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 } 220 }
222 221
223 void DesktopRootWindowHostX11::OnRootWindowCreated( 222 void DesktopRootWindowHostX11::OnRootWindowCreated(
224 aura::RootWindow* root, 223 aura::RootWindow* root,
225 const Widget::InitParams& params) { 224 const Widget::InitParams& params) {
226 root_window_ = root; 225 root_window_ = root;
227 226
228 root_window_->window()->SetProperty(kViewsWindowForRootWindow, 227 root_window_->window()->SetProperty(kViewsWindowForRootWindow,
229 content_window_); 228 content_window_);
230 root_window_->window()->SetProperty(kHostForRootWindow, this); 229 root_window_->window()->SetProperty(kHostForRootWindow, this);
231 root_window_host_delegate_ = root_window_; 230 delegate_ = root_window_;
232 231
233 // If we're given a parent, we need to mark ourselves as transient to another 232 // If we're given a parent, we need to mark ourselves as transient to another
234 // window. Otherwise activation gets screwy. 233 // window. Otherwise activation gets screwy.
235 gfx::NativeView parent = params.parent; 234 gfx::NativeView parent = params.parent;
236 if (!params.child && params.parent) 235 if (!params.child && params.parent)
237 parent->AddTransientChild(content_window_); 236 parent->AddTransientChild(content_window_);
238 237
239 // Ensure that the X11DesktopHandler exists so that it dispatches activation 238 // Ensure that the X11DesktopHandler exists so that it dispatches activation
240 // messages to us. 239 // messages to us.
241 X11DesktopHandler::get(); 240 X11DesktopHandler::get();
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 native_widget_delegate_->AsWidget()->GetInputMethod()->OnBlur(); 675 native_widget_delegate_->AsWidget()->GetInputMethod()->OnBlur();
677 } 676 }
678 677
679 bool DesktopRootWindowHostX11::IsAnimatingClosed() const { 678 bool DesktopRootWindowHostX11::IsAnimatingClosed() const {
680 return false; 679 return false;
681 } 680 }
682 681
683 //////////////////////////////////////////////////////////////////////////////// 682 ////////////////////////////////////////////////////////////////////////////////
684 // DesktopRootWindowHostX11, aura::RootWindowHost implementation: 683 // DesktopRootWindowHostX11, aura::RootWindowHost implementation:
685 684
686 void DesktopRootWindowHostX11::SetDelegate(
687 aura::RootWindowHostDelegate* delegate) {
688 root_window_host_delegate_ = delegate;
689 }
690
691 aura::RootWindow* DesktopRootWindowHostX11::GetRootWindow() { 685 aura::RootWindow* DesktopRootWindowHostX11::GetRootWindow() {
692 return root_window_; 686 return root_window_;
693 } 687 }
694 688
695 gfx::AcceleratedWidget DesktopRootWindowHostX11::GetAcceleratedWidget() { 689 gfx::AcceleratedWidget DesktopRootWindowHostX11::GetAcceleratedWidget() {
696 return xwindow_; 690 return xwindow_;
697 } 691 }
698 692
699 void DesktopRootWindowHostX11::Show() { 693 void DesktopRootWindowHostX11::Show() {
700 if (!window_mapped_) { 694 if (!window_mapped_) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 // Assume that the resize will go through as requested, which should be the 752 // Assume that the resize will go through as requested, which should be the
759 // case if we're running without a window manager. If there's a window 753 // case if we're running without a window manager. If there's a window
760 // manager, it can modify or ignore the request, but (per ICCCM) we'll get a 754 // manager, it can modify or ignore the request, but (per ICCCM) we'll get a
761 // (possibly synthetic) ConfigureNotify about the actual size and correct 755 // (possibly synthetic) ConfigureNotify about the actual size and correct
762 // |bounds_| later. 756 // |bounds_| later.
763 bounds_ = bounds; 757 bounds_ = bounds;
764 758
765 if (origin_changed) 759 if (origin_changed)
766 native_widget_delegate_->AsWidget()->OnNativeWidgetMove(); 760 native_widget_delegate_->AsWidget()->OnNativeWidgetMove();
767 if (size_changed) 761 if (size_changed)
768 root_window_host_delegate_->OnHostResized(bounds.size()); 762 delegate_->OnHostResized(bounds.size());
769 else 763 else
770 root_window_host_delegate_->OnHostPaint(gfx::Rect(bounds.size())); 764 delegate_->OnHostPaint(gfx::Rect(bounds.size()));
771 } 765 }
772 766
773 gfx::Insets DesktopRootWindowHostX11::GetInsets() const { 767 gfx::Insets DesktopRootWindowHostX11::GetInsets() const {
774 return gfx::Insets(); 768 return gfx::Insets();
775 } 769 }
776 770
777 void DesktopRootWindowHostX11::SetInsets(const gfx::Insets& insets) { 771 void DesktopRootWindowHostX11::SetInsets(const gfx::Insets& insets) {
778 } 772 }
779 773
780 gfx::Point DesktopRootWindowHostX11::GetLocationOnNativeScreen() const { 774 gfx::Point DesktopRootWindowHostX11::GetLocationOnNativeScreen() const {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
850 void DesktopRootWindowHostX11::OnCursorVisibilityChanged(bool show) { 844 void DesktopRootWindowHostX11::OnCursorVisibilityChanged(bool show) {
851 // TODO(erg): Conditional on us enabling touch on desktop linux builds, do 845 // TODO(erg): Conditional on us enabling touch on desktop linux builds, do
852 // the same tap-to-click disabling here that chromeos does. 846 // the same tap-to-click disabling here that chromeos does.
853 } 847 }
854 848
855 void DesktopRootWindowHostX11::MoveCursorTo(const gfx::Point& location) { 849 void DesktopRootWindowHostX11::MoveCursorTo(const gfx::Point& location) {
856 XWarpPointer(xdisplay_, None, x_root_window_, 0, 0, 0, 0, 850 XWarpPointer(xdisplay_, None, x_root_window_, 0, 0, 0, 0,
857 bounds_.x() + location.x(), bounds_.y() + location.y()); 851 bounds_.x() + location.x(), bounds_.y() + location.y());
858 } 852 }
859 853
860 void DesktopRootWindowHostX11::SetFocusWhenShown(bool focus_when_shown) {
861 static const char* k_NET_WM_USER_TIME = "_NET_WM_USER_TIME";
862 focus_when_shown_ = focus_when_shown;
863 if (IsWindowManagerPresent() && !focus_when_shown_) {
864 ui::SetIntProperty(xwindow_,
865 k_NET_WM_USER_TIME,
866 k_NET_WM_USER_TIME,
867 0);
868 }
869 }
870
871 void DesktopRootWindowHostX11::PostNativeEvent( 854 void DesktopRootWindowHostX11::PostNativeEvent(
872 const base::NativeEvent& native_event) { 855 const base::NativeEvent& native_event) {
873 DCHECK(xwindow_); 856 DCHECK(xwindow_);
874 DCHECK(xdisplay_); 857 DCHECK(xdisplay_);
875 XEvent xevent = *native_event; 858 XEvent xevent = *native_event;
876 xevent.xany.display = xdisplay_; 859 xevent.xany.display = xdisplay_;
877 xevent.xany.window = xwindow_; 860 xevent.xany.window = xwindow_;
878 861
879 switch (xevent.type) { 862 switch (xevent.type) {
880 case EnterNotify: 863 case EnterNotify:
881 case LeaveNotify: 864 case LeaveNotify:
882 case MotionNotify: 865 case MotionNotify:
883 case KeyPress: 866 case KeyPress:
884 case KeyRelease: 867 case KeyRelease:
885 case ButtonPress: 868 case ButtonPress:
886 case ButtonRelease: { 869 case ButtonRelease: {
887 // The fields used below are in the same place for all of events 870 // The fields used below are in the same place for all of events
888 // above. Using xmotion from XEvent's unions to avoid repeating 871 // above. Using xmotion from XEvent's unions to avoid repeating
889 // the code. 872 // the code.
890 xevent.xmotion.root = x_root_window_; 873 xevent.xmotion.root = x_root_window_;
891 xevent.xmotion.time = CurrentTime; 874 xevent.xmotion.time = CurrentTime;
892 875
893 gfx::Point point(xevent.xmotion.x, xevent.xmotion.y); 876 gfx::Point point(xevent.xmotion.x, xevent.xmotion.y);
894 root_window_->ConvertPointToNativeScreen(&point); 877 ConvertPointToNativeScreen(&point);
895 xevent.xmotion.x_root = point.x(); 878 xevent.xmotion.x_root = point.x();
896 xevent.xmotion.y_root = point.y(); 879 xevent.xmotion.y_root = point.y();
897 } 880 }
898 default: 881 default:
899 break; 882 break;
900 } 883 }
901 XSendEvent(xdisplay_, xwindow_, False, 0, &xevent); 884 XSendEvent(xdisplay_, xwindow_, False, 0, &xevent);
902 } 885 }
903 886
904 void DesktopRootWindowHostX11::OnDeviceScaleFactorChanged( 887 void DesktopRootWindowHostX11::OnDeviceScaleFactorChanged(
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 1010
1028 if (!params.wm_class_name.empty() || !params.wm_class_class.empty()) { 1011 if (!params.wm_class_name.empty() || !params.wm_class_class.empty()) {
1029 ui::SetWindowClassHint( 1012 ui::SetWindowClassHint(
1030 xdisplay_, xwindow_, params.wm_class_name, params.wm_class_class); 1013 xdisplay_, xwindow_, params.wm_class_name, params.wm_class_class);
1031 } 1014 }
1032 1015
1033 // If we have a parent, record the parent/child relationship. We use this 1016 // If we have a parent, record the parent/child relationship. We use this
1034 // data during destruction to make sure that when we try to close a parent 1017 // data during destruction to make sure that when we try to close a parent
1035 // window, we also destroy all child windows. 1018 // window, we also destroy all child windows.
1036 if (params.parent && params.parent->GetDispatcher()) { 1019 if (params.parent && params.parent->GetDispatcher()) {
1037 XID parent_xid = params.parent->GetDispatcher()->GetAcceleratedWidget(); 1020 XID parent_xid =
1021 params.parent->GetDispatcher()->host()->GetAcceleratedWidget();
1038 window_parent_ = GetHostForXID(parent_xid); 1022 window_parent_ = GetHostForXID(parent_xid);
1039 DCHECK(window_parent_); 1023 DCHECK(window_parent_);
1040 window_parent_->window_children_.insert(this); 1024 window_parent_->window_children_.insert(this);
1041 } 1025 }
1042 1026
1043 // If we have a delegate which is providing a default window icon, use that 1027 // If we have a delegate which is providing a default window icon, use that
1044 // icon. 1028 // icon.
1045 gfx::ImageSkia* window_icon = ViewsDelegate::views_delegate ? 1029 gfx::ImageSkia* window_icon = ViewsDelegate::views_delegate ?
1046 ViewsDelegate::views_delegate->GetDefaultWindowIcon() : NULL; 1030 ViewsDelegate::views_delegate->GetDefaultWindowIcon() : NULL;
1047 if (window_icon) { 1031 if (window_icon) {
(...skipping 29 matching lines...) Expand all
1077 &xclient); 1061 &xclient);
1078 } 1062 }
1079 1063
1080 bool DesktopRootWindowHostX11::HasWMSpecProperty(const char* property) const { 1064 bool DesktopRootWindowHostX11::HasWMSpecProperty(const char* property) const {
1081 return window_properties_.find(atom_cache_.GetAtom(property)) != 1065 return window_properties_.find(atom_cache_.GetAtom(property)) !=
1082 window_properties_.end(); 1066 window_properties_.end();
1083 } 1067 }
1084 1068
1085 void DesktopRootWindowHostX11::OnCaptureReleased() { 1069 void DesktopRootWindowHostX11::OnCaptureReleased() {
1086 g_current_capture = NULL; 1070 g_current_capture = NULL;
1087 root_window_host_delegate_->OnHostLostWindowCapture(); 1071 delegate_->OnHostLostWindowCapture();
1088 native_widget_delegate_->OnMouseCaptureLost(); 1072 native_widget_delegate_->OnMouseCaptureLost();
1089 } 1073 }
1090 1074
1091 void DesktopRootWindowHostX11::DispatchMouseEvent(ui::MouseEvent* event) { 1075 void DesktopRootWindowHostX11::DispatchMouseEvent(ui::MouseEvent* event) {
1092 if (!g_current_capture || g_current_capture == this) { 1076 if (!g_current_capture || g_current_capture == this) {
1093 root_window_host_delegate_->OnHostMouseEvent(event); 1077 delegate_->OnHostMouseEvent(event);
1094 } else { 1078 } else {
1095 // Another DesktopRootWindowHostX11 has installed itself as 1079 // Another DesktopRootWindowHostX11 has installed itself as
1096 // capture. Translate the event's location and dispatch to the other. 1080 // capture. Translate the event's location and dispatch to the other.
1097 event->ConvertLocationToTarget(root_window_->window(), 1081 event->ConvertLocationToTarget(root_window_->window(),
1098 g_current_capture->root_window_->window()); 1082 g_current_capture->root_window_->window());
1099 g_current_capture->root_window_host_delegate_->OnHostMouseEvent(event); 1083 g_current_capture->delegate_->OnHostMouseEvent(event);
1100 } 1084 }
1101 } 1085 }
1102 1086
1103 void DesktopRootWindowHostX11::ResetWindowRegion() { 1087 void DesktopRootWindowHostX11::ResetWindowRegion() {
1104 if (!IsMaximized()) { 1088 if (!IsMaximized()) {
1105 gfx::Path window_mask; 1089 gfx::Path window_mask;
1106 views::Widget* widget = native_widget_delegate_->AsWidget(); 1090 views::Widget* widget = native_widget_delegate_->AsWidget();
1107 if (widget->non_client_view()) { 1091 if (widget->non_client_view()) {
1108 // Some frame views define a custom (non-rectangular) window mask. If 1092 // Some frame views define a custom (non-rectangular) window mask. If
1109 // so, use it to define the window shape. If not, fall through. 1093 // so, use it to define the window shape. If not, fall through.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 case LeaveNotify: { 1149 case LeaveNotify: {
1166 if (!g_current_capture) 1150 if (!g_current_capture)
1167 X11DesktopHandler::get()->ProcessXEvent(xev); 1151 X11DesktopHandler::get()->ProcessXEvent(xev);
1168 ui::MouseEvent mouse_event(xev); 1152 ui::MouseEvent mouse_event(xev);
1169 DispatchMouseEvent(&mouse_event); 1153 DispatchMouseEvent(&mouse_event);
1170 break; 1154 break;
1171 } 1155 }
1172 case Expose: { 1156 case Expose: {
1173 gfx::Rect damage_rect(xev->xexpose.x, xev->xexpose.y, 1157 gfx::Rect damage_rect(xev->xexpose.x, xev->xexpose.y,
1174 xev->xexpose.width, xev->xexpose.height); 1158 xev->xexpose.width, xev->xexpose.height);
1175 root_window_host_delegate_->OnHostPaint(damage_rect); 1159 delegate_->OnHostPaint(damage_rect);
1176 break; 1160 break;
1177 } 1161 }
1178 case KeyPress: { 1162 case KeyPress: {
1179 ui::KeyEvent keydown_event(xev, false); 1163 ui::KeyEvent keydown_event(xev, false);
1180 root_window_host_delegate_->OnHostKeyEvent(&keydown_event); 1164 delegate_->OnHostKeyEvent(&keydown_event);
1181 break; 1165 break;
1182 } 1166 }
1183 case KeyRelease: { 1167 case KeyRelease: {
1184 ui::KeyEvent keyup_event(xev, false); 1168 ui::KeyEvent keyup_event(xev, false);
1185 root_window_host_delegate_->OnHostKeyEvent(&keyup_event); 1169 delegate_->OnHostKeyEvent(&keyup_event);
1186 break; 1170 break;
1187 } 1171 }
1188 case ButtonPress: { 1172 case ButtonPress: {
1189 if (static_cast<int>(xev->xbutton.button) == kBackMouseButton || 1173 if (static_cast<int>(xev->xbutton.button) == kBackMouseButton ||
1190 static_cast<int>(xev->xbutton.button) == kForwardMouseButton) { 1174 static_cast<int>(xev->xbutton.button) == kForwardMouseButton) {
1191 aura::client::UserActionClient* gesture_client = 1175 aura::client::UserActionClient* gesture_client =
1192 aura::client::GetUserActionClient(root_window_->window()); 1176 aura::client::GetUserActionClient(root_window_->window());
1193 if (gesture_client) { 1177 if (gesture_client) {
1194 gesture_client->OnUserAction( 1178 gesture_client->OnUserAction(
1195 static_cast<int>(xev->xbutton.button) == kBackMouseButton ? 1179 static_cast<int>(xev->xbutton.button) == kBackMouseButton ?
(...skipping 21 matching lines...) Expand all
1217 // No event is created for X11-release events for mouse-wheel buttons. 1201 // No event is created for X11-release events for mouse-wheel buttons.
1218 break; 1202 break;
1219 default: 1203 default:
1220 NOTREACHED() << event_type; 1204 NOTREACHED() << event_type;
1221 } 1205 }
1222 break; 1206 break;
1223 } 1207 }
1224 case FocusOut: 1208 case FocusOut:
1225 if (xev->xfocus.mode != NotifyGrab) { 1209 if (xev->xfocus.mode != NotifyGrab) {
1226 ReleaseCapture(); 1210 ReleaseCapture();
1227 root_window_host_delegate_->OnHostLostWindowCapture(); 1211 delegate_->OnHostLostWindowCapture();
1228 } else { 1212 } else {
1229 root_window_host_delegate_->OnHostLostMouseGrab(); 1213 delegate_->OnHostLostMouseGrab();
1230 } 1214 }
1231 break; 1215 break;
1232 case ConfigureNotify: { 1216 case ConfigureNotify: {
1233 DCHECK_EQ(xwindow_, xev->xconfigure.window); 1217 DCHECK_EQ(xwindow_, xev->xconfigure.window);
1234 DCHECK_EQ(xwindow_, xev->xconfigure.event); 1218 DCHECK_EQ(xwindow_, xev->xconfigure.event);
1235 // It's possible that the X window may be resized by some other means than 1219 // It's possible that the X window may be resized by some other means than
1236 // from within aura (e.g. the X window manager can change the size). Make 1220 // from within aura (e.g. the X window manager can change the size). Make
1237 // sure the root window size is maintained properly. 1221 // sure the root window size is maintained properly.
1238 int translated_x = xev->xconfigure.x; 1222 int translated_x = xev->xconfigure.x;
1239 int translated_y = xev->xconfigure.y; 1223 int translated_y = xev->xconfigure.y;
1240 if (!xev->xconfigure.send_event && !xev->xconfigure.override_redirect) { 1224 if (!xev->xconfigure.send_event && !xev->xconfigure.override_redirect) {
1241 Window unused; 1225 Window unused;
1242 XTranslateCoordinates(xdisplay_, xwindow_, x_root_window_, 1226 XTranslateCoordinates(xdisplay_, xwindow_, x_root_window_,
1243 0, 0, &translated_x, &translated_y, &unused); 1227 0, 0, &translated_x, &translated_y, &unused);
1244 } 1228 }
1245 gfx::Rect bounds(translated_x, translated_y, 1229 gfx::Rect bounds(translated_x, translated_y,
1246 xev->xconfigure.width, xev->xconfigure.height); 1230 xev->xconfigure.width, xev->xconfigure.height);
1247 bool size_changed = bounds_.size() != bounds.size(); 1231 bool size_changed = bounds_.size() != bounds.size();
1248 bool origin_changed = bounds_.origin() != bounds.origin(); 1232 bool origin_changed = bounds_.origin() != bounds.origin();
1249 previous_bounds_ = bounds_; 1233 previous_bounds_ = bounds_;
1250 bounds_ = bounds; 1234 bounds_ = bounds;
1251 if (size_changed) 1235 if (size_changed)
1252 root_window_host_delegate_->OnHostResized(bounds.size()); 1236 delegate_->OnHostResized(bounds.size());
1253 if (origin_changed) 1237 if (origin_changed)
1254 root_window_host_delegate_->OnHostMoved(bounds_.origin()); 1238 delegate_->OnHostMoved(bounds_.origin());
1255 ResetWindowRegion(); 1239 ResetWindowRegion();
1256 break; 1240 break;
1257 } 1241 }
1258 case GenericEvent: { 1242 case GenericEvent: {
1259 ui::TouchFactory* factory = ui::TouchFactory::GetInstance(); 1243 ui::TouchFactory* factory = ui::TouchFactory::GetInstance();
1260 if (!factory->ShouldProcessXI2Event(xev)) 1244 if (!factory->ShouldProcessXI2Event(xev))
1261 break; 1245 break;
1262 1246
1263 ui::EventType type = ui::EventTypeFromNative(xev); 1247 ui::EventType type = ui::EventTypeFromNative(xev);
1264 XEvent last_event; 1248 XEvent last_event;
1265 int num_coalesced = 0; 1249 int num_coalesced = 0;
1266 1250
1267 switch (type) { 1251 switch (type) {
1268 // case ui::ET_TOUCH_MOVED: 1252 // case ui::ET_TOUCH_MOVED:
1269 // num_coalesced = CoalescePendingMotionEvents(xev, &last_event); 1253 // num_coalesced = CoalescePendingMotionEvents(xev, &last_event);
1270 // if (num_coalesced > 0) 1254 // if (num_coalesced > 0)
1271 // xev = &last_event; 1255 // xev = &last_event;
1272 // // fallthrough 1256 // // fallthrough
1273 // case ui::ET_TOUCH_PRESSED: 1257 // case ui::ET_TOUCH_PRESSED:
1274 // case ui::ET_TOUCH_RELEASED: { 1258 // case ui::ET_TOUCH_RELEASED: {
1275 // ui::TouchEvent touchev(xev); 1259 // ui::TouchEvent touchev(xev);
1276 // root_window_host_delegate_->OnHostTouchEvent(&touchev); 1260 // delegate_->OnHostTouchEvent(&touchev);
1277 // break; 1261 // break;
1278 // } 1262 // }
1279 case ui::ET_MOUSE_MOVED: 1263 case ui::ET_MOUSE_MOVED:
1280 case ui::ET_MOUSE_DRAGGED: 1264 case ui::ET_MOUSE_DRAGGED:
1281 case ui::ET_MOUSE_PRESSED: 1265 case ui::ET_MOUSE_PRESSED:
1282 case ui::ET_MOUSE_RELEASED: 1266 case ui::ET_MOUSE_RELEASED:
1283 case ui::ET_MOUSE_ENTERED: 1267 case ui::ET_MOUSE_ENTERED:
1284 case ui::ET_MOUSE_EXITED: { 1268 case ui::ET_MOUSE_EXITED: {
1285 if (type == ui::ET_MOUSE_MOVED || type == ui::ET_MOUSE_DRAGGED) { 1269 if (type == ui::ET_MOUSE_MOVED || type == ui::ET_MOUSE_DRAGGED) {
1286 // If this is a motion event, we want to coalesce all pending motion 1270 // If this is a motion event, we want to coalesce all pending motion
1287 // events that are at the top of the queue. 1271 // events that are at the top of the queue.
1288 num_coalesced = ui::CoalescePendingMotionEvents(xev, &last_event); 1272 num_coalesced = ui::CoalescePendingMotionEvents(xev, &last_event);
1289 if (num_coalesced > 0) 1273 if (num_coalesced > 0)
1290 xev = &last_event; 1274 xev = &last_event;
1291 } else if (type == ui::ET_MOUSE_PRESSED) { 1275 } else if (type == ui::ET_MOUSE_PRESSED) {
1292 XIDeviceEvent* xievent = 1276 XIDeviceEvent* xievent =
1293 static_cast<XIDeviceEvent*>(xev->xcookie.data); 1277 static_cast<XIDeviceEvent*>(xev->xcookie.data);
1294 int button = xievent->detail; 1278 int button = xievent->detail;
1295 if (button == kBackMouseButton || button == kForwardMouseButton) { 1279 if (button == kBackMouseButton || button == kForwardMouseButton) {
1296 aura::client::UserActionClient* gesture_client = 1280 aura::client::UserActionClient* gesture_client =
1297 aura::client::GetUserActionClient( 1281 aura::client::GetUserActionClient(
1298 root_window_host_delegate_->AsRootWindow()->window()); 1282 delegate_->AsRootWindow()->window());
1299 if (gesture_client) { 1283 if (gesture_client) {
1300 bool reverse_direction = 1284 bool reverse_direction =
1301 ui::IsTouchpadEvent(xev) && ui::IsNaturalScrollEnabled(); 1285 ui::IsTouchpadEvent(xev) && ui::IsNaturalScrollEnabled();
1302 gesture_client->OnUserAction( 1286 gesture_client->OnUserAction(
1303 (button == kBackMouseButton && !reverse_direction) || 1287 (button == kBackMouseButton && !reverse_direction) ||
1304 (button == kForwardMouseButton && reverse_direction) ? 1288 (button == kForwardMouseButton && reverse_direction) ?
1305 aura::client::UserActionClient::BACK : 1289 aura::client::UserActionClient::BACK :
1306 aura::client::UserActionClient::FORWARD); 1290 aura::client::UserActionClient::FORWARD);
1307 } 1291 }
1308 break; 1292 break;
(...skipping 14 matching lines...) Expand all
1323 } 1307 }
1324 case ui::ET_MOUSEWHEEL: { 1308 case ui::ET_MOUSEWHEEL: {
1325 ui::MouseWheelEvent mouseev(xev); 1309 ui::MouseWheelEvent mouseev(xev);
1326 DispatchMouseEvent(&mouseev); 1310 DispatchMouseEvent(&mouseev);
1327 break; 1311 break;
1328 } 1312 }
1329 case ui::ET_SCROLL_FLING_START: 1313 case ui::ET_SCROLL_FLING_START:
1330 case ui::ET_SCROLL_FLING_CANCEL: 1314 case ui::ET_SCROLL_FLING_CANCEL:
1331 case ui::ET_SCROLL: { 1315 case ui::ET_SCROLL: {
1332 ui::ScrollEvent scrollev(xev); 1316 ui::ScrollEvent scrollev(xev);
1333 root_window_host_delegate_->OnHostScrollEvent(&scrollev); 1317 delegate_->OnHostScrollEvent(&scrollev);
1334 break; 1318 break;
1335 } 1319 }
1336 case ui::ET_UNKNOWN: 1320 case ui::ET_UNKNOWN:
1337 break; 1321 break;
1338 default: 1322 default:
1339 NOTREACHED(); 1323 NOTREACHED();
1340 } 1324 }
1341 1325
1342 // If we coalesced an event we need to free its cookie. 1326 // If we coalesced an event we need to free its cookie.
1343 if (num_coalesced > 0) 1327 if (num_coalesced > 0)
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1503 if (linux_ui) { 1487 if (linux_ui) {
1504 ui::NativeTheme* native_theme = linux_ui->GetNativeTheme(); 1488 ui::NativeTheme* native_theme = linux_ui->GetNativeTheme();
1505 if (native_theme) 1489 if (native_theme)
1506 return native_theme; 1490 return native_theme;
1507 } 1491 }
1508 1492
1509 return ui::NativeTheme::instance(); 1493 return ui::NativeTheme::instance();
1510 } 1494 }
1511 1495
1512 } // namespace views 1496 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698