| OLD | NEW |
| 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 "chrome/browser/automation/ui_controls.h" | 5 #include "chrome/browser/automation/ui_controls.h" |
| 6 | 6 |
| 7 #include <gdk/gdkkeysyms.h> | 7 #include <gdk/gdkkeysyms.h> |
| 8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 // MessageLoop::Observer implementation: | 46 // MessageLoop::Observer implementation: |
| 47 virtual base::EventStatus WillProcessEvent(const base::NativeEvent& event) { | 47 virtual base::EventStatus WillProcessEvent(const base::NativeEvent& event) { |
| 48 NOTIMPLEMENTED(); | 48 NOTIMPLEMENTED(); |
| 49 return base::EVENT_CONTINUE; | 49 return base::EVENT_CONTINUE; |
| 50 } | 50 } |
| 51 | 51 |
| 52 virtual void DidProcessEvent(const base::NativeEvent& event) { | 52 virtual void DidProcessEvent(const base::NativeEvent& event) { |
| 53 } | 53 } |
| 54 #else | 54 #else |
| 55 // MessageLoop::Observer implementation: | 55 // MessageLoop::Observer implementation: |
| 56 virtual void WillProcessEvent(GdkEvent* event) { | 56 virtual void WillProcessEvent(GdkEvent* event) OVERRIDE { |
| 57 if ((event->type == type_) && (--count_ == 0)) { | 57 if ((event->type == type_) && (--count_ == 0)) { |
| 58 // At the time we're invoked the event has not actually been processed. | 58 // At the time we're invoked the event has not actually been processed. |
| 59 // Use PostTask to make sure the event has been processed before | 59 // Use PostTask to make sure the event has been processed before |
| 60 // notifying. | 60 // notifying. |
| 61 // NOTE: if processing a message results in running a nested message | 61 // NOTE: if processing a message results in running a nested message |
| 62 // loop, then DidProcessEvent isn't immediately sent. As such, we do | 62 // loop, then DidProcessEvent isn't immediately sent. As such, we do |
| 63 // the processing in WillProcessEvent rather than DidProcessEvent. | 63 // the processing in WillProcessEvent rather than DidProcessEvent. |
| 64 MessageLoop::current()->PostTask(FROM_HERE, task_); | 64 MessageLoop::current()->PostTask(FROM_HERE, task_); |
| 65 delete this; | 65 delete this; |
| 66 } | 66 } |
| 67 } | 67 } |
| 68 | 68 |
| 69 virtual void DidProcessEvent(GdkEvent* event) { | 69 virtual void DidProcessEvent(GdkEvent* event) OVERRIDE { |
| 70 // No-op. | 70 // No-op. |
| 71 } | 71 } |
| 72 #endif | 72 #endif |
| 73 | 73 |
| 74 private: | 74 private: |
| 75 base::Closure task_; | 75 base::Closure task_; |
| 76 GdkEventType type_; | 76 GdkEventType type_; |
| 77 // The number of events of this type to wait for. | 77 // The number of events of this type to wait for. |
| 78 int count_; | 78 int count_; |
| 79 }; | 79 }; |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 release_event->button.time++; | 233 release_event->button.time++; |
| 234 if (state & UP) | 234 if (state & UP) |
| 235 gdk_event_put(release_event); | 235 gdk_event_put(release_event); |
| 236 | 236 |
| 237 gdk_event_free(event); | 237 gdk_event_free(event); |
| 238 gdk_event_free(release_event); | 238 gdk_event_free(release_event); |
| 239 | 239 |
| 240 return false; | 240 return false; |
| 241 } | 241 } |
| 242 | 242 |
| 243 bool SendMouseEventsNotifyWhenDone(MouseButton type, int state, | 243 bool SendMouseEventsNotifyWhenDone(MouseButton type, |
| 244 int state, |
| 244 const base::Closure& task) { | 245 const base::Closure& task) { |
| 245 bool rv = SendMouseEvents(type, state); | 246 bool rv = SendMouseEvents(type, state); |
| 246 GdkEventType wait_type; | 247 GdkEventType wait_type; |
| 247 if (state & UP) { | 248 if (state & UP) { |
| 248 wait_type = GDK_BUTTON_RELEASE; | 249 wait_type = GDK_BUTTON_RELEASE; |
| 249 } else { | 250 } else { |
| 250 if (type == LEFT) | 251 if (type == LEFT) |
| 251 wait_type = GDK_BUTTON_PRESS; | 252 wait_type = GDK_BUTTON_PRESS; |
| 252 else if (type == MIDDLE) | 253 else if (type == MIDDLE) |
| 253 wait_type = GDK_2BUTTON_PRESS; | 254 wait_type = GDK_2BUTTON_PRESS; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 283 // Listen to configure-event that is emitted when an window gets | 284 // Listen to configure-event that is emitted when an window gets |
| 284 // resized. | 285 // resized. |
| 285 GtkWidget* gtk_widget = widget->GetNativeView(); | 286 GtkWidget* gtk_widget = widget->GetNativeView(); |
| 286 g_signal_connect(gtk_widget, "configure-event", | 287 g_signal_connect(gtk_widget, "configure-event", |
| 287 G_CALLBACK(&OnConfigure), widget); | 288 G_CALLBACK(&OnConfigure), widget); |
| 288 MessageLoop::current()->Run(); | 289 MessageLoop::current()->Run(); |
| 289 } | 290 } |
| 290 } | 291 } |
| 291 #endif | 292 #endif |
| 292 | 293 |
| 293 void MoveMouseToCenterAndPress(views::View* view, MouseButton button, | 294 void MoveMouseToCenterAndPress(views::View* view, |
| 294 int state, const base::Closure& task) { | 295 MouseButton button, |
| 296 int state, |
| 297 const base::Closure& task) { |
| 295 #if defined(OS_LINUX) | 298 #if defined(OS_LINUX) |
| 296 // X is asynchronous and we need to wait until the window gets | 299 // X is asynchronous and we need to wait until the window gets |
| 297 // resized to desired size. | 300 // resized to desired size. |
| 298 SynchronizeWidgetSize(view->GetWidget()); | 301 SynchronizeWidgetSize(view->GetWidget()); |
| 299 #endif | 302 #endif |
| 300 | 303 |
| 301 gfx::Point view_center(view->width() / 2, view->height() / 2); | 304 gfx::Point view_center(view->width() / 2, view->height() / 2); |
| 302 views::View::ConvertPointToScreen(view, &view_center); | 305 views::View::ConvertPointToScreen(view, &view_center); |
| 303 SendMouseMoveNotifyWhenDone( | 306 SendMouseMoveNotifyWhenDone( |
| 304 view_center.x(), view_center.y(), | 307 view_center.x(), view_center.y(), |
| 305 base::Bind(&ui_controls::ClickTask, button, state, task)); | 308 base::Bind(&ui_controls::internal::ClickTask, button, state, task)); |
| 306 } | 309 } |
| 307 #else | 310 #else |
| 308 void MoveMouseToCenterAndPress(GtkWidget* widget, | 311 void MoveMouseToCenterAndPress(GtkWidget* widget, |
| 309 MouseButton button, | 312 MouseButton button, |
| 310 int state, | 313 int state, |
| 311 const base::Closure& task) { | 314 const base::Closure& task) { |
| 312 gfx::Rect bounds = gtk_util::GetWidgetScreenBounds(widget); | 315 gfx::Rect bounds = gtk_util::GetWidgetScreenBounds(widget); |
| 313 SendMouseMoveNotifyWhenDone( | 316 SendMouseMoveNotifyWhenDone( |
| 314 bounds.x() + bounds.width() / 2, | 317 bounds.x() + bounds.width() / 2, |
| 315 bounds.y() + bounds.height() / 2, | 318 bounds.y() + bounds.height() / 2, |
| 316 base::Bind(&ui_controls::ClickTask, button, state, task)); | 319 base::Bind(&ui_controls::internal::ClickTask, button, state, task)); |
| 317 } | 320 } |
| 318 #endif | 321 #endif |
| 319 | 322 |
| 320 } // namespace ui_controls | 323 } // namespace ui_controls |
| OLD | NEW |