| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/web_contents/web_contents_view_gtk.h" | 5 #include "content/browser/web_contents/web_contents_view_gtk.h" |
| 6 | 6 |
| 7 #include <gdk/gdk.h> | 7 #include <gdk/gdk.h> |
| 8 #include <gdk/gdkkeysyms.h> | 8 #include <gdk/gdkkeysyms.h> |
| 9 #include <gtk/gtk.h> | 9 #include <gtk/gtk.h> |
| 10 | 10 |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 g_signal_connect(content_view, "leave-notify-event", | 216 g_signal_connect(content_view, "leave-notify-event", |
| 217 G_CALLBACK(OnLeaveNotify), web_contents_); | 217 G_CALLBACK(OnLeaveNotify), web_contents_); |
| 218 g_signal_connect(content_view, "motion-notify-event", | 218 g_signal_connect(content_view, "motion-notify-event", |
| 219 G_CALLBACK(OnMouseMove), web_contents_); | 219 G_CALLBACK(OnMouseMove), web_contents_); |
| 220 g_signal_connect(content_view, "scroll-event", | 220 g_signal_connect(content_view, "scroll-event", |
| 221 G_CALLBACK(OnMouseScroll), web_contents_); | 221 G_CALLBACK(OnMouseScroll), web_contents_); |
| 222 gtk_widget_add_events(content_view, GDK_LEAVE_NOTIFY_MASK | | 222 gtk_widget_add_events(content_view, GDK_LEAVE_NOTIFY_MASK | |
| 223 GDK_POINTER_MOTION_MASK); | 223 GDK_POINTER_MOTION_MASK); |
| 224 InsertIntoContentArea(content_view); | 224 InsertIntoContentArea(content_view); |
| 225 | 225 |
| 226 // Renderer target DnD. | 226 // We don't want to change any state in this class for swapped out RVHs |
| 227 drag_dest_.reset(new WebDragDestGtk(web_contents_, content_view)); | 227 // because they will not be visible at this time. |
| 228 | 228 if (render_widget_host->IsRenderView()) { |
| 229 if (delegate_.get()) | 229 RenderViewHost* rvh = RenderViewHost::From(render_widget_host); |
| 230 drag_dest_->set_delegate(delegate_->GetDragDestDelegate()); | 230 if (!static_cast<RenderViewHostImpl*>(rvh)->is_swapped_out()) |
| 231 UpdateDragDest(rvh); |
| 232 } |
| 231 | 233 |
| 232 return view; | 234 return view; |
| 233 } | 235 } |
| 234 | 236 |
| 235 RenderWidgetHostView* WebContentsViewGtk::CreateViewForPopupWidget( | 237 RenderWidgetHostView* WebContentsViewGtk::CreateViewForPopupWidget( |
| 236 RenderWidgetHost* render_widget_host) { | 238 RenderWidgetHost* render_widget_host) { |
| 237 return RenderWidgetHostViewPort::CreateViewForWidget(render_widget_host); | 239 return RenderWidgetHostViewPort::CreateViewForWidget(render_widget_host); |
| 238 } | 240 } |
| 239 | 241 |
| 240 void WebContentsViewGtk::SetPageTitle(const string16& title) { | 242 void WebContentsViewGtk::SetPageTitle(const string16& title) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 256 requested_size_ = size; | 258 requested_size_ = size; |
| 257 RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView(); | 259 RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView(); |
| 258 if (rwhv) | 260 if (rwhv) |
| 259 rwhv->SetSize(size); | 261 rwhv->SetSize(size); |
| 260 } | 262 } |
| 261 | 263 |
| 262 void WebContentsViewGtk::RenderViewCreated(RenderViewHost* host) { | 264 void WebContentsViewGtk::RenderViewCreated(RenderViewHost* host) { |
| 263 } | 265 } |
| 264 | 266 |
| 265 void WebContentsViewGtk::RenderViewSwappedIn(RenderViewHost* host) { | 267 void WebContentsViewGtk::RenderViewSwappedIn(RenderViewHost* host) { |
| 268 UpdateDragDest(host); |
| 266 } | 269 } |
| 267 | 270 |
| 268 WebContents* WebContentsViewGtk::web_contents() { | 271 WebContents* WebContentsViewGtk::web_contents() { |
| 269 return web_contents_; | 272 return web_contents_; |
| 270 } | 273 } |
| 271 | 274 |
| 272 void WebContentsViewGtk::UpdateDragCursor(WebDragOperation operation) { | 275 void WebContentsViewGtk::UpdateDragCursor(WebDragOperation operation) { |
| 273 drag_dest_->UpdateDragStatus(operation); | 276 drag_dest_->UpdateDragStatus(operation); |
| 274 } | 277 } |
| 275 | 278 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 287 GetTopLevelNativeWindow()) { | 290 GetTopLevelNativeWindow()) { |
| 288 gtk_widget_child_focus(GTK_WIDGET(GetTopLevelNativeWindow()), | 291 gtk_widget_child_focus(GTK_WIDGET(GetTopLevelNativeWindow()), |
| 289 reverse ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD); | 292 reverse ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD); |
| 290 } | 293 } |
| 291 } | 294 } |
| 292 | 295 |
| 293 void WebContentsViewGtk::InsertIntoContentArea(GtkWidget* widget) { | 296 void WebContentsViewGtk::InsertIntoContentArea(GtkWidget* widget) { |
| 294 gtk_container_add(GTK_CONTAINER(expanded_.get()), widget); | 297 gtk_container_add(GTK_CONTAINER(expanded_.get()), widget); |
| 295 } | 298 } |
| 296 | 299 |
| 300 void WebContentsViewGtk::UpdateDragDest(RenderViewHost* host) { |
| 301 gfx::NativeView content_view = host->GetView()->GetNativeView(); |
| 302 |
| 303 // If the host is already used by the drag_dest_, there's no point in deleting |
| 304 // the old one to create an identical copy. |
| 305 if (drag_dest_.get() && drag_dest_->widget() == content_view) |
| 306 return; |
| 307 |
| 308 // Clear the currently connected drag drop signals by deleting the old |
| 309 // drag_dest_ before creating the new one. |
| 310 drag_dest_.reset(); |
| 311 // Create the new drag_dest_. |
| 312 drag_dest_.reset(new WebDragDestGtk(web_contents_, content_view)); |
| 313 |
| 314 if (delegate_.get()) |
| 315 drag_dest_->set_delegate(delegate_->GetDragDestDelegate()); |
| 316 } |
| 317 |
| 297 // Called when the content view gtk widget is tabbed to, or after the call to | 318 // Called when the content view gtk widget is tabbed to, or after the call to |
| 298 // gtk_widget_child_focus() in TakeFocus(). We return true | 319 // gtk_widget_child_focus() in TakeFocus(). We return true |
| 299 // and grab focus if we don't have it. The call to | 320 // and grab focus if we don't have it. The call to |
| 300 // FocusThroughTabTraversal(bool) forwards the "move focus forward" effect to | 321 // FocusThroughTabTraversal(bool) forwards the "move focus forward" effect to |
| 301 // webkit. | 322 // webkit. |
| 302 gboolean WebContentsViewGtk::OnFocus(GtkWidget* widget, | 323 gboolean WebContentsViewGtk::OnFocus(GtkWidget* widget, |
| 303 GtkDirectionType focus) { | 324 GtkDirectionType focus) { |
| 304 // Give our view wrapper first chance at this event. | 325 // Give our view wrapper first chance at this event. |
| 305 if (delegate_.get()) { | 326 if (delegate_.get()) { |
| 306 gboolean return_value = FALSE; | 327 gboolean return_value = FALSE; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 // We manually tell our RWHV to resize the renderer content. This avoids | 403 // We manually tell our RWHV to resize the renderer content. This avoids |
| 383 // spurious resizes from GTK+. | 404 // spurious resizes from GTK+. |
| 384 RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView(); | 405 RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView(); |
| 385 if (rwhv) | 406 if (rwhv) |
| 386 rwhv->SetSize(size); | 407 rwhv->SetSize(size); |
| 387 if (web_contents_->GetInterstitialPage()) | 408 if (web_contents_->GetInterstitialPage()) |
| 388 web_contents_->GetInterstitialPage()->SetSize(size); | 409 web_contents_->GetInterstitialPage()->SetSize(size); |
| 389 } | 410 } |
| 390 | 411 |
| 391 } // namespace content | 412 } // namespace content |
| OLD | NEW |