Index: chrome/browser/automation/automation_provider.cc |
=================================================================== |
--- chrome/browser/automation/automation_provider.cc (revision 23786) |
+++ chrome/browser/automation/automation_provider.cc (working copy) |
@@ -71,6 +71,8 @@ |
#include "views/widget/root_view.h" |
#include "views/widget/widget_win.h" |
#include "views/window/window.h" |
+#elif defined(OS_LINUX) |
+#include "chrome/browser/gtk/view_id_util.h" |
#endif |
using base::Time; |
@@ -787,6 +789,38 @@ |
DISALLOW_COPY_AND_ASSIGN(AutomationInterstitialPage); |
}; |
+#if !defined(OS_MACOSX) |
+class ClickTask : public Task { |
+ public: |
+ ClickTask(gfx::Point point, int flags) : point_(point), flags_(flags) {} |
+ virtual ~ClickTask() {} |
+ |
+ virtual void Run() { |
+ ui_controls::MouseButton button = ui_controls::LEFT; |
+ if ((flags_ & views::Event::EF_LEFT_BUTTON_DOWN) == |
+ views::Event::EF_LEFT_BUTTON_DOWN) { |
+ button = ui_controls::LEFT; |
+ } else if ((flags_ & views::Event::EF_RIGHT_BUTTON_DOWN) == |
+ views::Event::EF_RIGHT_BUTTON_DOWN) { |
+ button = ui_controls::RIGHT; |
+ } else if ((flags_ & views::Event::EF_MIDDLE_BUTTON_DOWN) == |
+ views::Event::EF_MIDDLE_BUTTON_DOWN) { |
+ button = ui_controls::MIDDLE; |
+ } else { |
+ NOTREACHED(); |
+ } |
+ |
+ ui_controls::SendMouseClick(point_, button); |
+ } |
+ |
+ private: |
+ gfx::Point point_; |
+ int flags_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ClickTask); |
+}; |
+#endif |
+ |
AutomationProvider::AutomationProvider(Profile* profile) |
: redirect_query_(0), |
profile_(profile), |
@@ -1481,6 +1515,27 @@ |
bounds->set_origin(point); |
} |
} |
+#elif defined(OS_LINUX) |
+ gfx::NativeWindow window = window_tracker_->GetResource(handle); |
+ GtkWidget* widget = ViewIDUtil::GetWidget(GTK_WIDGET(window), |
+ static_cast<ViewID>(view_id)); |
+ if (!widget) |
+ return; |
+ *success = true; |
+ *bounds = gfx::Rect(0, 0, |
+ widget->allocation.width, widget->allocation.height); |
+ gint x, y; |
+ if (screen_coordinates) { |
+ gdk_window_get_origin(widget->window, &x, &y); |
+ if (GTK_WIDGET_NO_WINDOW(widget)) { |
+ x += widget->allocation.x; |
+ y += widget->allocation.y; |
+ } |
+ } else { |
+ gtk_widget_translate_coordinates(widget, GTK_WIDGET(window), |
+ 0, 0, &x, &y); |
+ } |
+ bounds->set_origin(gfx::Point(x, y)); |
#else |
NOTIMPLEMENTED(); |
#endif |
@@ -1600,23 +1655,8 @@ |
int flags) { |
if (window_tracker_->ContainsHandle(handle)) { |
- gfx::NativeWindow window = window_tracker_->GetResource(handle); |
- ui_controls::SendMouseMove(click.x(), click.y()); |
- |
- ui_controls::MouseButton button = ui_controls::LEFT; |
- if ((flags & views::Event::EF_LEFT_BUTTON_DOWN) == |
- views::Event::EF_LEFT_BUTTON_DOWN) { |
- button = ui_controls::LEFT; |
- } else if ((flags & views::Event::EF_RIGHT_BUTTON_DOWN) == |
- views::Event::EF_RIGHT_BUTTON_DOWN) { |
- button = ui_controls::RIGHT; |
- } else if ((flags & views::Event::EF_MIDDLE_BUTTON_DOWN) == |
- views::Event::EF_MIDDLE_BUTTON_DOWN) { |
- button = ui_controls::MIDDLE; |
- } else { |
- NOTREACHED(); |
- } |
- ui_controls::SendMouseClick(window, click, button); |
+ ui_controls::SendMouseMoveNotifyWhenDone(click.x(), click.y(), |
+ new ClickTask(click, flags)); |
} |
} |
#endif |