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

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: More code review feedback. 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
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..ffa884b58cc18f54af23caebf2fa4126f8c4f95d 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,78 @@ gboolean PanelBrowserWindowGtk::OnDragButtonReleased(GtkWidget* widget,
&PanelBrowserWindowGtk::EndDrag, false));
return TRUE;
}
+
+// NativePanelTesting implementation.
+class NativePanelTestingGtk : public NativePanelTesting {
jianli 2011/08/11 20:52:09 Please move this subclass to the anonymous namespa
prasadt 2011/08/11 21:07:56 Need it in header file.
+ 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_;
+};
+
+NativePanelTesting* NativePanelTesting::Create(NativePanel* native_panel) {
jianli 2011/08/11 20:52:09 Please add the comment for indicate it is static.
prasadt 2011/08/11 21:07:56 Done.
+ 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();
+}

Powered by Google App Engine
This is Rietveld 408576698