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

Unified Diff: chrome/browser/ui/panels/panel_browser_window_gtk.cc

Issue 7605009: Implement drag and drop testing in a platform independent way. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed a build error on mac only. Created 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/panels/panel_browser_window_gtk.h ('k') | chrome/browser/ui/panels/panel_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/panels/panel_browser_window_gtk.cc
diff --git a/chrome/browser/ui/panels/panel_browser_window_gtk.cc b/chrome/browser/ui/panels/panel_browser_window_gtk.cc
index 571291e85c28086f5954c01b7beda3e19da406a8..c53ef3cb346dc99d8be074484842c7d4eda66792 100644
--- a/chrome/browser/ui/panels/panel_browser_window_gtk.cc
+++ b/chrome/browser/ui/panels/panel_browser_window_gtk.cc
@@ -181,10 +181,6 @@ void PanelBrowserWindowGtk::DestroyPanelBrowser() {
DestroyBrowser();
}
-NativePanelTesting* PanelBrowserWindowGtk::GetNativePanelTesting() {
- return this;
-}
-
void PanelBrowserWindowGtk::SetBoundsImpl() {
gtk_window_move(window_, bounds_.x(), bounds_.y());
gtk_window_resize(window(), bounds_.width(), bounds_.height());
@@ -201,12 +197,15 @@ void PanelBrowserWindowGtk::DidProcessEvent(GdkEvent* event) {
gdouble new_x_double;
gdouble new_y_double;
+ gdouble old_x_double;
+ gdouble old_y_double;
gdk_event_get_root_coords(event, &new_x_double, &new_y_double);
+ gdk_event_get_root_coords(last_mouse_down_, &old_x_double, &old_y_double);
gint new_x = static_cast<gint>(new_x_double);
gint new_y = static_cast<gint>(new_y_double);
- gint old_x = static_cast<gint>(last_mouse_down_->button.x_root);
- gint old_y = static_cast<gint>(last_mouse_down_->button.y_root);
+ gint old_x = static_cast<gint>(old_x_double);
+ gint old_y = static_cast<gint>(old_y_double);
if (drag_widget_) {
panel_->manager()->Drag(new_x - old_x);
@@ -315,3 +314,79 @@ gboolean PanelBrowserWindowGtk::OnDragButtonReleased(GtkWidget* widget,
&PanelBrowserWindowGtk::EndDrag, false));
return TRUE;
}
+
+// NativePanelTesting implementation.
+class NativePanelTestingGtk : public NativePanelTesting {
+ public:
+ explicit NativePanelTestingGtk(
+ PanelBrowserWindowGtk* panel_browser_window_gtk);
+
+ private:
+ virtual void PressLeftMouseButtonTitlebar(
+ const gfx::Point& point) OVERRIDE;
+ virtual void ReleaseMouseButtonTitlebar() OVERRIDE;
+ virtual void DragTitlebar(int delta_x, int delta_y) OVERRIDE;
+ virtual void CancelDragTitlebar() OVERRIDE;
+ virtual void FinishDragTitlebar() OVERRIDE;
+
+ PanelBrowserWindowGtk* panel_browser_window_gtk_;
+};
+
+// static
+NativePanelTesting* NativePanelTesting::Create(NativePanel* native_panel) {
+ return new NativePanelTestingGtk(static_cast<PanelBrowserWindowGtk*>(
+ native_panel));
+}
+
+NativePanelTestingGtk::NativePanelTestingGtk(
+ PanelBrowserWindowGtk* panel_browser_window_gtk) :
+ panel_browser_window_gtk_(panel_browser_window_gtk) {
+}
+
+void NativePanelTestingGtk::PressLeftMouseButtonTitlebar(
+ const gfx::Point& point) {
+ GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS);
+ event->button.button = 1;
+ event->button.x_root = point.x();
+ event->button.y_root = point.y();
+ panel_browser_window_gtk_->OnTitlebarButtonPressEvent(
+ panel_browser_window_gtk_->titlebar_widget(),
+ reinterpret_cast<GdkEventButton*>(event));
+ gdk_event_free(event);
+ MessageLoopForUI::current()->RunAllPending();
+}
+
+void NativePanelTestingGtk::ReleaseMouseButtonTitlebar() {
+ panel_browser_window_gtk_->OnTitlebarButtonReleaseEvent(NULL, NULL);
+ MessageLoopForUI::current()->RunAllPending();
+}
+
+void NativePanelTestingGtk::DragTitlebar(int delta_x, int delta_y) {
+ if (!panel_browser_window_gtk_->drag_widget_) {
+ panel_browser_window_gtk_->CreateDragWidget();
+ panel_browser_window_gtk_->panel_->manager()->StartDragging(
+ panel_browser_window_gtk_->panel_.get());
+ }
+ GdkEvent* event = gdk_event_new(GDK_MOTION_NOTIFY);
+ gdk_event_get_root_coords(panel_browser_window_gtk_->last_mouse_down_,
+ &event->motion.x_root, &event->motion.y_root);
+ event->motion.x_root += delta_x;
+ event->motion.y_root += delta_y;
+ panel_browser_window_gtk_->DidProcessEvent(event);
+ gdk_event_free(event);
+ MessageLoopForUI::current()->RunAllPending();
+}
+
+void NativePanelTestingGtk::CancelDragTitlebar() {
+ panel_browser_window_gtk_->OnDragFailed(
+ panel_browser_window_gtk_->drag_widget_, NULL,
+ GTK_DRAG_RESULT_USER_CANCELLED);
+ MessageLoopForUI::current()->RunAllPending();
+}
+
+void NativePanelTestingGtk::FinishDragTitlebar() {
+ panel_browser_window_gtk_->OnDragFailed(
+ panel_browser_window_gtk_->drag_widget_, NULL,
+ GTK_DRAG_RESULT_NO_TARGET);
+ MessageLoopForUI::current()->RunAllPending();
+}
« no previous file with comments | « chrome/browser/ui/panels/panel_browser_window_gtk.h ('k') | chrome/browser/ui/panels/panel_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698