| Index: chrome/browser/gtk/tabs/tab_gtk.cc
|
| diff --git a/chrome/browser/gtk/tabs/tab_gtk.cc b/chrome/browser/gtk/tabs/tab_gtk.cc
|
| index 3ca46888cc6e7e37846a6bb46d4ab5b468bf55fe..bda8d629ffb7a61d7ee8bfb8f1c9e8638b37bd9e 100644
|
| --- a/chrome/browser/gtk/tabs/tab_gtk.cc
|
| +++ b/chrome/browser/gtk/tabs/tab_gtk.cc
|
| @@ -146,13 +146,13 @@ TabGtk::TabGtk(TabDelegate* delegate)
|
| event_box_ = gtk_event_box_new();
|
| gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box_), FALSE);
|
| g_signal_connect(event_box_, "button-press-event",
|
| - G_CALLBACK(OnButtonPressEvent), this);
|
| + G_CALLBACK(OnButtonPressEventThunk), this);
|
| g_signal_connect(event_box_, "button-release-event",
|
| - G_CALLBACK(OnButtonReleaseEvent), this);
|
| + G_CALLBACK(OnButtonReleaseEventThunk), this);
|
| g_signal_connect(event_box_, "enter-notify-event",
|
| - G_CALLBACK(OnEnterNotifyEvent), this);
|
| + G_CALLBACK(OnEnterNotifyEventThunk), this);
|
| g_signal_connect(event_box_, "leave-notify-event",
|
| - G_CALLBACK(OnLeaveNotifyEvent), this);
|
| + G_CALLBACK(OnLeaveNotifyEventThunk), this);
|
| gtk_widget_add_events(event_box_,
|
| GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
|
| GDK_LEAVE_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
|
| @@ -178,44 +178,41 @@ TabGtk::~TabGtk() {
|
| }
|
| }
|
|
|
| -// static
|
| -gboolean TabGtk::OnButtonPressEvent(GtkWidget* widget, GdkEventButton* event,
|
| - TabGtk* tab) {
|
| +gboolean TabGtk::OnButtonPressEvent(GtkWidget* widget, GdkEventButton* event) {
|
| // Every button press ensures either a button-release-event or a drag-fail
|
| // signal for |widget|.
|
| if (event->button == 1 && event->type == GDK_BUTTON_PRESS) {
|
| // Store whether or not we were selected just now... we only want to be
|
| // able to drag foreground tabs, so we don't start dragging the tab if
|
| // it was in the background.
|
| - bool just_selected = !tab->IsSelected();
|
| + bool just_selected = !IsSelected();
|
| if (just_selected) {
|
| - tab->delegate_->SelectTab(tab);
|
| + delegate_->SelectTab(this);
|
| }
|
|
|
| // Hook into the message loop to handle dragging.
|
| - tab->observer_.reset(new TabGtkObserverHelper(tab));
|
| + observer_.reset(new TabGtkObserverHelper(this));
|
|
|
| // Store the button press event, used to initiate a drag.
|
| - tab->last_mouse_down_ = gdk_event_copy(reinterpret_cast<GdkEvent*>(event));
|
| + last_mouse_down_ = gdk_event_copy(reinterpret_cast<GdkEvent*>(event));
|
| } else if (event->button == 3) {
|
| // Only show the context menu if the left mouse button isn't down (i.e.,
|
| // the user might want to drag instead).
|
| - if (!tab->last_mouse_down_)
|
| - tab->ShowContextMenu();
|
| + if (!last_mouse_down_)
|
| + ShowContextMenu();
|
| }
|
|
|
| return TRUE;
|
| }
|
|
|
| -// static
|
| -gboolean TabGtk::OnButtonReleaseEvent(GtkWidget* widget, GdkEventButton* event,
|
| - TabGtk* tab) {
|
| +gboolean TabGtk::OnButtonReleaseEvent(GtkWidget* widget,
|
| + GdkEventButton* event) {
|
| if (event->button == 1) {
|
| - tab->observer_.reset();
|
| + observer_.reset();
|
|
|
| - if (tab->last_mouse_down_) {
|
| - gdk_event_free(tab->last_mouse_down_);
|
| - tab->last_mouse_down_ = NULL;
|
| + if (last_mouse_down_) {
|
| + gdk_event_free(last_mouse_down_);
|
| + last_mouse_down_ = NULL;
|
| }
|
| }
|
|
|
| @@ -229,43 +226,38 @@ gboolean TabGtk::OnButtonReleaseEvent(GtkWidget* widget, GdkEventButton* event,
|
| // moved the mouse yet, a drag hasn't started yet. In that case, clean up
|
| // some state before closing the tab to avoid a crash. Once the drag has
|
| // started, we don't get the middle mouse click here.
|
| - if (tab->last_mouse_down_) {
|
| - DCHECK(!tab->drag_widget_);
|
| - tab->observer_.reset();
|
| - gdk_event_free(tab->last_mouse_down_);
|
| - tab->last_mouse_down_ = NULL;
|
| + if (last_mouse_down_) {
|
| + DCHECK(!drag_widget_);
|
| + observer_.reset();
|
| + gdk_event_free(last_mouse_down_);
|
| + last_mouse_down_ = NULL;
|
| }
|
| - tab->delegate_->CloseTab(tab);
|
| + delegate_->CloseTab(this);
|
| }
|
|
|
| return TRUE;
|
| }
|
|
|
| -// static
|
| gboolean TabGtk::OnDragFailed(GtkWidget* widget, GdkDragContext* context,
|
| - GtkDragResult result,
|
| - TabGtk* tab) {
|
| + GtkDragResult result) {
|
| bool canceled = (result == GTK_DRAG_RESULT_USER_CANCELLED);
|
| - tab->EndDrag(canceled);
|
| + EndDrag(canceled);
|
| return TRUE;
|
| }
|
|
|
| -// static
|
| -gboolean TabGtk::OnDragButtonReleased(GtkWidget* widget, GdkEventButton* button,
|
| - TabGtk* tab) {
|
| +gboolean TabGtk::OnDragButtonReleased(GtkWidget* widget,
|
| + GdkEventButton* button) {
|
| // We always get this event when gtk is releasing the grab and ending the
|
| // drag. However, if the user ended the drag with space or enter, we don't
|
| // get a follow up event to tell us the drag has finished (either a
|
| // drag-failed or a drag-end). So we post a task to manually end the drag.
|
| // If GTK+ does send the drag-failed or drag-end event, we cancel the task.
|
| MessageLoop::current()->PostTask(FROM_HERE,
|
| - tab->drag_end_factory_.NewRunnableMethod(&TabGtk::EndDrag, false));
|
| + drag_end_factory_.NewRunnableMethod(&TabGtk::EndDrag, false));
|
| return TRUE;
|
| }
|
|
|
| -// static
|
| -void TabGtk::OnDragBegin(GtkWidget* widget, GdkDragContext* context,
|
| - TabGtk* tab) {
|
| +void TabGtk::OnDragBegin(GtkWidget* widget, GdkDragContext* context) {
|
| GdkPixbuf* pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 1, 1);
|
| gtk_drag_set_icon_pixbuf(context, pixbuf, 0, 0);
|
| g_object_unref(pixbuf);
|
| @@ -368,11 +360,11 @@ void TabGtk::CreateDragWidget() {
|
| DCHECK(!drag_widget_);
|
| drag_widget_ = gtk_invisible_new();
|
| g_signal_connect(drag_widget_, "drag-failed",
|
| - G_CALLBACK(OnDragFailed), this);
|
| + G_CALLBACK(OnDragFailedThunk), this);
|
| g_signal_connect(drag_widget_, "button-release-event",
|
| - G_CALLBACK(OnDragButtonReleased), this);
|
| + G_CALLBACK(OnDragButtonReleasedThunk), this);
|
| g_signal_connect_after(drag_widget_, "drag-begin",
|
| - G_CALLBACK(OnDragBegin), this);
|
| + G_CALLBACK(OnDragBeginThunk), this);
|
| }
|
|
|
| void TabGtk::DestroyDragWidget() {
|
|
|