Index: chrome/browser/ui/gtk/tabs/tab_gtk.cc |
diff --git a/chrome/browser/ui/gtk/tabs/tab_gtk.cc b/chrome/browser/ui/gtk/tabs/tab_gtk.cc |
index c8e4a510703b85240af96b99c41cf7c636e8c52d..c4c6399a3d33eb9b6a4c6a9824b5e0073629a082 100644 |
--- a/chrome/browser/ui/gtk/tabs/tab_gtk.cc |
+++ b/chrome/browser/ui/gtk/tabs/tab_gtk.cc |
@@ -10,12 +10,15 @@ |
#include "base/utf_string_conversions.h" |
#include "chrome/app/chrome_command_ids.h" |
#include "chrome/browser/ui/gtk/accelerators_gtk.h" |
+#include "chrome/browser/ui/gtk/gtk_input_event_box.h" |
#include "chrome/browser/ui/gtk/menu_gtk.h" |
#include "chrome/browser/ui/gtk/tabs/tab_strip_menu_controller.h" |
#include "chrome/browser/ui/tabs/tab_menu_model.h" |
+#include "chrome/browser/ui/tabs/tab_resources.h" |
#include "grit/generated_resources.h" |
#include "grit/theme_resources.h" |
#include "ui/base/dragdrop/gtk_dnd_util.h" |
+#include "ui/base/gtk/scoped_handle_gtk.h" |
#include "ui/base/models/accelerator_gtk.h" |
#include "ui/gfx/path.h" |
@@ -62,8 +65,7 @@ TabGtk::TabGtk(TabDelegate* delegate) |
title_width_(0), |
ALLOW_THIS_IN_INITIALIZER_LIST(destroy_factory_(this)), |
ALLOW_THIS_IN_INITIALIZER_LIST(drag_end_factory_(this)) { |
- event_box_ = gtk_event_box_new(); |
- gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box_), FALSE); |
+ event_box_ = gtk_input_event_box_new(); |
g_signal_connect(event_box_, "button-press-event", |
G_CALLBACK(OnButtonPressEventThunk), this); |
g_signal_connect(event_box_, "button-release-event", |
@@ -97,6 +99,12 @@ TabGtk::~TabGtk() { |
} |
} |
+void TabGtk::Raise() const { |
+ GdkWindow* window = gtk_input_event_box_get_window( |
+ GTK_INPUT_EVENT_BOX(event_box_)); |
+ gdk_window_raise(window); |
+} |
+ |
gboolean TabGtk::OnButtonPressEvent(GtkWidget* widget, GdkEventButton* event) { |
// Every button press ensures either a button-release-event or a drag-fail |
// signal for |widget|. |
@@ -257,6 +265,17 @@ void TabGtk::UpdateData(TabContents* contents, bool app, bool loading_only) { |
void TabGtk::SetBounds(const gfx::Rect& bounds) { |
TabRendererGtk::SetBounds(bounds); |
+ |
+ if (gtk_input_event_box_get_window(GTK_INPUT_EVENT_BOX(event_box_))) { |
+ gfx::Path mask; |
+ TabResources::GetHitTestMask(bounds.width(), bounds.height(), &mask); |
+ ui::ScopedRegion region(mask.CreateNativeRegion()); |
+ gdk_window_input_shape_combine_region( |
+ gtk_input_event_box_get_window(GTK_INPUT_EVENT_BOX(event_box_)), |
+ region.Get(), |
+ 0, 0); |
+ } |
+ |
UpdateTooltipState(); |
} |