summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/gtk/tabs/tab_gtk.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/gtk/tabs/tab_gtk.cc')
-rw-r--r--chrome/browser/ui/gtk/tabs/tab_gtk.cc23
1 files changed, 21 insertions, 2 deletions
diff --git a/chrome/browser/ui/gtk/tabs/tab_gtk.cc b/chrome/browser/ui/gtk/tabs/tab_gtk.cc
index c8e4a51..c4c6399 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();
}