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

Side by Side Diff: chrome/browser/ui/gtk/gtk_input_event_box.cc

Issue 7657009: Revert 96674 - Gtk: Make click target of tabs match their appearance. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/gtk/gtk_input_event_box.h ('k') | chrome/browser/ui/gtk/tabs/tab_gtk.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/gtk/gtk_input_event_box.h"
6
7 #include <gdk/gdkwindow.h>
8 #include <gtk/gtk.h>
9 #include <gtk/gtkwidget.h>
10 #include <gtk/gtkbin.h>
11
12 G_BEGIN_DECLS
13
14 #define GTK_INPUT_EVENT_BOX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
15 GTK_TYPE_INPUT_EVENT_BOX, \
16 GtkInputEventBoxPrivate))
17
18 typedef struct _GtkInputEventBoxPrivate GtkInputEventBoxPrivate;
19
20 struct _GtkInputEventBoxPrivate {
21 GdkWindow* event_window;
22 };
23
24 G_DEFINE_TYPE(GtkInputEventBox, gtk_input_event_box, GTK_TYPE_BIN)
25
26 static void gtk_input_event_box_realize(GtkWidget* widget);
27 static void gtk_input_event_box_unrealize(GtkWidget* widget);
28 static void gtk_input_event_box_map(GtkWidget* widget);
29 static void gtk_input_event_box_unmap(GtkWidget* widget);
30 static void gtk_input_event_box_size_allocate(GtkWidget* widget,
31 GtkAllocation* allocation);
32 static void gtk_input_event_box_size_request(GtkWidget* widget,
33 GtkRequisition* requisition);
34
35 static void gtk_input_event_box_class_init(GtkInputEventBoxClass* klass) {
36 GtkWidgetClass* widget_class = reinterpret_cast<GtkWidgetClass*>(klass);
37 widget_class->realize = gtk_input_event_box_realize;
38 widget_class->unrealize = gtk_input_event_box_unrealize;
39 widget_class->map = gtk_input_event_box_map;
40 widget_class->unmap = gtk_input_event_box_unmap;
41 widget_class->size_allocate = gtk_input_event_box_size_allocate;
42 widget_class->size_request = gtk_input_event_box_size_request;
43
44 GObjectClass* gobject_class = G_OBJECT_CLASS(klass);
45 g_type_class_add_private(gobject_class, sizeof(GtkInputEventBoxPrivate));
46 }
47
48 static void gtk_input_event_box_init(GtkInputEventBox* widget) {
49 GtkInputEventBoxPrivate* priv = GTK_INPUT_EVENT_BOX_GET_PRIVATE(widget);
50 priv->event_window = NULL;
51 }
52
53 GtkWidget* gtk_input_event_box_new() {
54 return GTK_WIDGET(g_object_new(GTK_TYPE_INPUT_EVENT_BOX, NULL));
55 }
56
57 static void gtk_input_event_box_realize(GtkWidget* widget) {
58 g_return_if_fail(GTK_IS_INPUT_EVENT_BOX(widget));
59
60 GtkInputEventBoxPrivate* priv = GTK_INPUT_EVENT_BOX_GET_PRIVATE(widget);
61
62 GdkWindow* parent = gtk_widget_get_parent_window(widget);
63 GdkWindowAttr attributes;
64 GtkAllocation allocation;
65 gint attributes_mask = GDK_WA_X | GDK_WA_Y;
66
67 gtk_widget_get_allocation(widget, &allocation);
68
69 attributes.x = allocation.x;
70 attributes.y = allocation.y;
71 attributes.width = allocation.width;
72 attributes.height = allocation.height;
73
74 attributes.window_type = GDK_WINDOW_CHILD;
75 attributes.wclass = GDK_INPUT_ONLY;
76
77 attributes.event_mask = gtk_widget_get_events(widget)
78 | GDK_BUTTON_MOTION_MASK
79 | GDK_BUTTON_PRESS_MASK
80 | GDK_BUTTON_RELEASE_MASK
81 | GDK_EXPOSURE_MASK
82 | GDK_ENTER_NOTIFY_MASK
83 | GDK_LEAVE_NOTIFY_MASK;
84
85 priv->event_window = gdk_window_new(parent, &attributes, attributes_mask);
86 gdk_window_set_user_data(priv->event_window, widget);
87
88 GTK_WIDGET_CLASS(gtk_input_event_box_parent_class)->realize(widget);
89 }
90
91 static void gtk_input_event_box_unrealize(GtkWidget* widget) {
92 g_return_if_fail(GTK_IS_INPUT_EVENT_BOX(widget));
93
94 GtkInputEventBoxPrivate* priv = GTK_INPUT_EVENT_BOX_GET_PRIVATE(widget);
95 if (priv->event_window) {
96 gdk_window_set_user_data(priv->event_window, NULL);
97 gdk_window_destroy(priv->event_window);
98 priv->event_window = NULL;
99 }
100
101 GTK_WIDGET_CLASS(gtk_input_event_box_parent_class)->unrealize(widget);
102 }
103
104 static void gtk_input_event_box_map(GtkWidget* widget) {
105 g_return_if_fail(GTK_IS_INPUT_EVENT_BOX(widget));
106
107 GtkInputEventBoxPrivate* priv = GTK_INPUT_EVENT_BOX_GET_PRIVATE(widget);
108 if (priv->event_window)
109 gdk_window_show(priv->event_window);
110
111 GTK_WIDGET_CLASS(gtk_input_event_box_parent_class)->map(widget);
112 }
113
114 static void gtk_input_event_box_unmap(GtkWidget* widget) {
115 g_return_if_fail(GTK_IS_INPUT_EVENT_BOX(widget));
116
117 GtkInputEventBoxPrivate* priv = GTK_INPUT_EVENT_BOX_GET_PRIVATE(widget);
118 if (priv->event_window)
119 gdk_window_hide(priv->event_window);
120
121 GTK_WIDGET_CLASS(gtk_input_event_box_parent_class)->unmap(widget);
122 }
123
124 static void gtk_input_event_box_size_allocate(GtkWidget* widget,
125 GtkAllocation* allocation) {
126 g_return_if_fail(GTK_IS_INPUT_EVENT_BOX(widget));
127
128 widget->allocation = *allocation;
129
130 GtkInputEventBoxPrivate* priv = GTK_INPUT_EVENT_BOX_GET_PRIVATE(widget);
131 if (priv->event_window) {
132 gdk_window_move_resize(priv->event_window,
133 allocation->x,
134 allocation->y,
135 allocation->width,
136 allocation->height);
137 }
138
139 GtkWidget* child = gtk_bin_get_child(GTK_BIN(widget));
140 if (child)
141 gtk_widget_size_allocate(child, allocation);
142 }
143
144 static void gtk_input_event_box_size_request(GtkWidget* widget,
145 GtkRequisition* requisition) {
146
147 GtkWidget* child = gtk_bin_get_child(GTK_BIN(widget));
148 if (child)
149 gtk_widget_size_request(child, requisition);
150 }
151
152 GdkWindow* gtk_input_event_box_get_window(GtkInputEventBox* widget) {
153 g_return_val_if_fail(GTK_IS_INPUT_EVENT_BOX(widget), NULL);
154
155 GtkInputEventBoxPrivate* priv = GTK_INPUT_EVENT_BOX_GET_PRIVATE(widget);
156 return priv->event_window;
157 }
158
159 G_END_DECLS
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/gtk_input_event_box.h ('k') | chrome/browser/ui/gtk/tabs/tab_gtk.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698