OLD | NEW |
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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 | | 64 GDK_FOCUS_CHANGE_MASK | |
65 GDK_ENTER_NOTIFY_MASK | | 65 GDK_ENTER_NOTIFY_MASK | |
66 GDK_LEAVE_NOTIFY_MASK); | 66 GDK_LEAVE_NOTIFY_MASK); |
67 GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_FOCUS); | 67 GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_FOCUS); |
68 | 68 |
69 g_signal_connect(widget, "size-allocate", | |
70 G_CALLBACK(SizeAllocate), host_view); | |
71 g_signal_connect(widget, "expose-event", | 69 g_signal_connect(widget, "expose-event", |
72 G_CALLBACK(ExposeEvent), host_view); | 70 G_CALLBACK(ExposeEvent), host_view); |
73 g_signal_connect(widget, "key-press-event", | 71 g_signal_connect(widget, "key-press-event", |
74 G_CALLBACK(KeyPressReleaseEvent), host_view); | 72 G_CALLBACK(KeyPressReleaseEvent), host_view); |
75 g_signal_connect(widget, "key-release-event", | 73 g_signal_connect(widget, "key-release-event", |
76 G_CALLBACK(KeyPressReleaseEvent), host_view); | 74 G_CALLBACK(KeyPressReleaseEvent), host_view); |
77 g_signal_connect(widget, "focus-in-event", | 75 g_signal_connect(widget, "focus-in-event", |
78 G_CALLBACK(OnFocusIn), host_view); | 76 G_CALLBACK(OnFocusIn), host_view); |
79 g_signal_connect(widget, "focus-out-event", | 77 g_signal_connect(widget, "focus-out-event", |
80 G_CALLBACK(OnFocusOut), host_view); | 78 G_CALLBACK(OnFocusOut), host_view); |
(...skipping 12 matching lines...) Expand all Loading... |
93 | 91 |
94 // Connect after so that we are called after the handler installed by the | 92 // Connect after so that we are called after the handler installed by the |
95 // TabContentsView which handles zoom events. | 93 // TabContentsView which handles zoom events. |
96 g_signal_connect_after(widget, "scroll-event", | 94 g_signal_connect_after(widget, "scroll-event", |
97 G_CALLBACK(MouseScrollEvent), host_view); | 95 G_CALLBACK(MouseScrollEvent), host_view); |
98 | 96 |
99 return widget; | 97 return widget; |
100 } | 98 } |
101 | 99 |
102 private: | 100 private: |
103 static gboolean SizeAllocate(GtkWidget* widget, GtkAllocation* allocation, | |
104 RenderWidgetHostViewGtk* host_view) { | |
105 host_view->requested_size_ = gfx::Size(allocation->width, | |
106 allocation->height); | |
107 host_view->GetRenderWidgetHost()->WasResized(); | |
108 return FALSE; | |
109 } | |
110 | |
111 static gboolean ExposeEvent(GtkWidget* widget, GdkEventExpose* expose, | 101 static gboolean ExposeEvent(GtkWidget* widget, GdkEventExpose* expose, |
112 RenderWidgetHostViewGtk* host_view) { | 102 RenderWidgetHostViewGtk* host_view) { |
113 const gfx::Rect damage_rect(expose->area); | 103 const gfx::Rect damage_rect(expose->area); |
114 host_view->Paint(damage_rect); | 104 host_view->Paint(damage_rect); |
115 return FALSE; | 105 return FALSE; |
116 } | 106 } |
117 | 107 |
118 static gboolean KeyPressReleaseEvent(GtkWidget* widget, GdkEventKey* event, | 108 static gboolean KeyPressReleaseEvent(GtkWidget* widget, GdkEventKey* event, |
119 RenderWidgetHostViewGtk* host_view) { | 109 RenderWidgetHostViewGtk* host_view) { |
120 if (host_view->parent_ && host_view->activatable() && | 110 if (host_view->parent_ && host_view->activatable() && |
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 // We're a popup, honor the size request. | 400 // We're a popup, honor the size request. |
411 gtk_widget_set_size_request(view_.get(), width, height); | 401 gtk_widget_set_size_request(view_.get(), width, height); |
412 } else { | 402 } else { |
413 #if defined(TOOLKIT_VIEWS) | 403 #if defined(TOOLKIT_VIEWS) |
414 // TOOLKIT_VIEWS' resize logic flow matches windows. so we go ahead and | 404 // TOOLKIT_VIEWS' resize logic flow matches windows. so we go ahead and |
415 // size the widget. In GTK+, the size of the widget is determined by it's | 405 // size the widget. In GTK+, the size of the widget is determined by it's |
416 // children. | 406 // children. |
417 gtk_widget_set_size_request(view_.get(), width, height); | 407 gtk_widget_set_size_request(view_.get(), width, height); |
418 #endif | 408 #endif |
419 | 409 |
420 requested_size_ = gfx::Size(width, height); | 410 if (requested_size_.width() != width || |
421 host_->WasResized(); | 411 requested_size_.height() != height) { |
| 412 requested_size_ = gfx::Size(width, height); |
| 413 host_->WasResized(); |
| 414 } |
422 } | 415 } |
423 } | 416 } |
424 | 417 |
425 gfx::NativeView RenderWidgetHostViewGtk::GetNativeView() { | 418 gfx::NativeView RenderWidgetHostViewGtk::GetNativeView() { |
426 return view_.get(); | 419 return view_.get(); |
427 } | 420 } |
428 | 421 |
429 void RenderWidgetHostViewGtk::MovePluginWindows( | 422 void RenderWidgetHostViewGtk::MovePluginWindows( |
430 const std::vector<webkit_glue::WebPluginGeometry>& moves) { | 423 const std::vector<webkit_glue::WebPluginGeometry>& moves) { |
431 for (size_t i = 0; i < moves.size(); ++i) { | 424 for (size_t i = 0; i < moves.size(); ++i) { |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 const NativeWebKeyboardEvent& event) { | 657 const NativeWebKeyboardEvent& event) { |
665 if (!host_) | 658 if (!host_) |
666 return; | 659 return; |
667 | 660 |
668 EditCommands edit_commands; | 661 EditCommands edit_commands; |
669 if (key_bindings_handler_->Match(event, &edit_commands)) { | 662 if (key_bindings_handler_->Match(event, &edit_commands)) { |
670 host_->ForwardEditCommandsForNextKeyEvent(edit_commands); | 663 host_->ForwardEditCommandsForNextKeyEvent(edit_commands); |
671 } | 664 } |
672 host_->ForwardKeyboardEvent(event); | 665 host_->ForwardKeyboardEvent(event); |
673 } | 666 } |
OLD | NEW |