Chromium Code Reviews

Side by Side Diff: chrome/browser/renderer_host/render_widget_host_view_gtk.cc

Issue 354010: Handle GTK enter and leave notification events and pass them to WebKit as ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
« no previous file with comments | « chrome/browser/automation/automation_provider.cc ('k') | chrome/chrome.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/renderer_host/render_widget_host_view_gtk.h" 5 #include "chrome/browser/renderer_host/render_widget_host_view_gtk.h"
6 6
7 // If this gets included after the gtk headers, then a bunch of compiler 7 // If this gets included after the gtk headers, then a bunch of compiler
8 // errors happen because of a "#define Status int" in Xlib.h, which interacts 8 // errors happen because of a "#define Status int" in Xlib.h, which interacts
9 // badly with URLRequestStatus::Status. 9 // badly with URLRequestStatus::Status.
10 #include "chrome/common/render_messages.h" 10 #include "chrome/common/render_messages.h"
(...skipping 42 matching lines...)
53 gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &gfx::kGdkWhite); 53 gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &gfx::kGdkWhite);
54 #else 54 #else
55 gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &gfx::kGdkGreen); 55 gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &gfx::kGdkGreen);
56 #endif 56 #endif
57 57
58 gtk_widget_add_events(widget, GDK_EXPOSURE_MASK | 58 gtk_widget_add_events(widget, GDK_EXPOSURE_MASK |
59 GDK_POINTER_MOTION_MASK | 59 GDK_POINTER_MOTION_MASK |
60 GDK_BUTTON_PRESS_MASK | 60 GDK_BUTTON_PRESS_MASK |
61 GDK_BUTTON_RELEASE_MASK | 61 GDK_BUTTON_RELEASE_MASK |
62 GDK_KEY_PRESS_MASK | 62 GDK_KEY_PRESS_MASK |
63 GDK_KEY_RELEASE_MASK); 63 GDK_KEY_RELEASE_MASK |
64 GDK_FOCUS_CHANGE_MASK |
65 GDK_ENTER_NOTIFY_MASK |
66 GDK_LEAVE_NOTIFY_MASK);
64 GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_FOCUS); 67 GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_FOCUS);
65 68
66 g_signal_connect(widget, "size-allocate", 69 g_signal_connect(widget, "size-allocate",
67 G_CALLBACK(SizeAllocate), host_view); 70 G_CALLBACK(SizeAllocate), host_view);
68 g_signal_connect(widget, "expose-event", 71 g_signal_connect(widget, "expose-event",
69 G_CALLBACK(ExposeEvent), host_view); 72 G_CALLBACK(ExposeEvent), host_view);
70 g_signal_connect(widget, "key-press-event", 73 g_signal_connect(widget, "key-press-event",
71 G_CALLBACK(KeyPressReleaseEvent), host_view); 74 G_CALLBACK(KeyPressReleaseEvent), host_view);
72 g_signal_connect(widget, "key-release-event", 75 g_signal_connect(widget, "key-release-event",
73 G_CALLBACK(KeyPressReleaseEvent), host_view); 76 G_CALLBACK(KeyPressReleaseEvent), host_view);
74 g_signal_connect(widget, "focus-in-event", 77 g_signal_connect(widget, "focus-in-event",
75 G_CALLBACK(OnFocusIn), host_view); 78 G_CALLBACK(OnFocusIn), host_view);
76 g_signal_connect(widget, "focus-out-event", 79 g_signal_connect(widget, "focus-out-event",
77 G_CALLBACK(OnFocusOut), host_view); 80 G_CALLBACK(OnFocusOut), host_view);
78 g_signal_connect(widget, "grab-notify", 81 g_signal_connect(widget, "grab-notify",
79 G_CALLBACK(OnGrabNotify), host_view); 82 G_CALLBACK(OnGrabNotify), host_view);
80 g_signal_connect(widget, "button-press-event", 83 g_signal_connect(widget, "button-press-event",
81 G_CALLBACK(ButtonPressReleaseEvent), host_view); 84 G_CALLBACK(ButtonPressReleaseEvent), host_view);
82 g_signal_connect(widget, "button-release-event", 85 g_signal_connect(widget, "button-release-event",
83 G_CALLBACK(ButtonPressReleaseEvent), host_view); 86 G_CALLBACK(ButtonPressReleaseEvent), host_view);
84 g_signal_connect(widget, "motion-notify-event", 87 g_signal_connect(widget, "motion-notify-event",
85 G_CALLBACK(MouseMoveEvent), host_view); 88 G_CALLBACK(MouseMoveEvent), host_view);
89 g_signal_connect(widget, "enter-notify-event",
90 G_CALLBACK(CrossingEvent), host_view);
91 g_signal_connect(widget, "leave-notify-event",
92 G_CALLBACK(CrossingEvent), host_view);
93
86 // Connect after so that we are called after the handler installed by the 94 // Connect after so that we are called after the handler installed by the
87 // TabContentsView which handles zoom events. 95 // TabContentsView which handles zoom events.
88 g_signal_connect_after(widget, "scroll-event", 96 g_signal_connect_after(widget, "scroll-event",
89 G_CALLBACK(MouseScrollEvent), host_view); 97 G_CALLBACK(MouseScrollEvent), host_view);
90 98
91 return widget; 99 return widget;
92 } 100 }
93 101
94 private: 102 private:
95 static gboolean SizeAllocate(GtkWidget* widget, GtkAllocation* allocation, 103 static gboolean SizeAllocate(GtkWidget* widget, GtkAllocation* allocation,
(...skipping 154 matching lines...)
250 int y = 0; 258 int y = 0;
251 gtk_widget_get_pointer(widget, &x, &y); 259 gtk_widget_get_pointer(widget, &x, &y);
252 event->x = x; 260 event->x = x;
253 event->y = y; 261 event->y = y;
254 } 262 }
255 host_view->GetRenderWidgetHost()->ForwardMouseEvent( 263 host_view->GetRenderWidgetHost()->ForwardMouseEvent(
256 WebInputEventFactory::mouseEvent(event)); 264 WebInputEventFactory::mouseEvent(event));
257 return FALSE; 265 return FALSE;
258 } 266 }
259 267
268 static gboolean CrossingEvent(GtkWidget* widget, GdkEventCrossing* event,
269 RenderWidgetHostViewGtk* host_view) {
270 host_view->GetRenderWidgetHost()->ForwardMouseEvent(
271 WebInputEventFactory::mouseEvent(event));
272
273 return FALSE;
274 }
275
260 static gboolean MouseScrollEvent(GtkWidget* widget, GdkEventScroll* event, 276 static gboolean MouseScrollEvent(GtkWidget* widget, GdkEventScroll* event,
261 RenderWidgetHostViewGtk* host_view) { 277 RenderWidgetHostViewGtk* host_view) {
262 // If the user is holding shift, translate it into a horizontal scroll. We 278 // If the user is holding shift, translate it into a horizontal scroll. We
263 // don't care what other modifiers the user may be holding (zooming is 279 // don't care what other modifiers the user may be holding (zooming is
264 // handled at the TabContentsView level). 280 // handled at the TabContentsView level).
265 if (event->state & GDK_SHIFT_MASK) { 281 if (event->state & GDK_SHIFT_MASK) {
266 if (event->direction == GDK_SCROLL_UP) 282 if (event->direction == GDK_SCROLL_UP)
267 event->direction = GDK_SCROLL_LEFT; 283 event->direction = GDK_SCROLL_LEFT;
268 else if (event->direction == GDK_SCROLL_DOWN) 284 else if (event->direction == GDK_SCROLL_DOWN)
269 event->direction = GDK_SCROLL_RIGHT; 285 event->direction = GDK_SCROLL_RIGHT;
(...skipping 378 matching lines...)
648 const NativeWebKeyboardEvent& event) { 664 const NativeWebKeyboardEvent& event) {
649 if (!host_) 665 if (!host_)
650 return; 666 return;
651 667
652 EditCommands edit_commands; 668 EditCommands edit_commands;
653 if (key_bindings_handler_->Match(event, &edit_commands)) { 669 if (key_bindings_handler_->Match(event, &edit_commands)) {
654 host_->ForwardEditCommandsForNextKeyEvent(edit_commands); 670 host_->ForwardEditCommandsForNextKeyEvent(edit_commands);
655 } 671 }
656 host_->ForwardKeyboardEvent(event); 672 host_->ForwardKeyboardEvent(event);
657 } 673 }
OLDNEW
« no previous file with comments | « chrome/browser/automation/automation_provider.cc ('k') | chrome/chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine