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

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

Issue 146078: linux: OOP windowed plugins (Closed)
Patch Set: new version Created 11 years, 5 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
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 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 #include <gdk/gdk.h> 8 #include <gdk/gdk.h>
9 #include <gdk/gdkkeysyms.h> 9 #include <gdk/gdkkeysyms.h>
10 #include <gdk/gdkx.h> 10 #include <gdk/gdkx.h>
(...skipping 16 matching lines...) Expand all
27 static const int kMaxWindowWidth = 4000; 27 static const int kMaxWindowWidth = 4000;
28 static const int kMaxWindowHeight = 4000; 28 static const int kMaxWindowHeight = 4000;
29 29
30 using WebKit::WebInputEventFactory; 30 using WebKit::WebInputEventFactory;
31 31
32 // This class is a simple convenience wrapper for Gtk functions. It has only 32 // This class is a simple convenience wrapper for Gtk functions. It has only
33 // static methods. 33 // static methods.
34 class RenderWidgetHostViewGtkWidget { 34 class RenderWidgetHostViewGtkWidget {
35 public: 35 public:
36 static GtkWidget* CreateNewWidget(RenderWidgetHostViewGtk* host_view) { 36 static GtkWidget* CreateNewWidget(RenderWidgetHostViewGtk* host_view) {
37 GtkWidget* widget = gtk_drawing_area_new(); 37 GtkWidget* widget = gtk_fixed_new();
38 gtk_fixed_set_has_window(GTK_FIXED(widget), true);
38 gtk_widget_set_double_buffered(widget, FALSE); 39 gtk_widget_set_double_buffered(widget, FALSE);
39 #if defined(NDEBUG) 40 #if defined(NDEBUG)
40 gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &gfx::kGdkWhite); 41 gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &gfx::kGdkWhite);
41 #else 42 #else
42 gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &gfx::kGdkGreen); 43 gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &gfx::kGdkGreen);
43 #endif 44 #endif
44 45
45 gtk_widget_add_events(widget, GDK_EXPOSURE_MASK | 46 gtk_widget_add_events(widget, GDK_EXPOSURE_MASK |
46 GDK_POINTER_MOTION_MASK | 47 GDK_POINTER_MOTION_MASK |
47 GDK_BUTTON_PRESS_MASK | 48 GDK_BUTTON_PRESS_MASK |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 } 369 }
369 370
370 RenderWidgetHostViewGtk::~RenderWidgetHostViewGtk() { 371 RenderWidgetHostViewGtk::~RenderWidgetHostViewGtk() {
371 if (im_context_) 372 if (im_context_)
372 g_object_unref(im_context_); 373 g_object_unref(im_context_);
373 view_.Destroy(); 374 view_.Destroy();
374 } 375 }
375 376
376 void RenderWidgetHostViewGtk::InitAsChild() { 377 void RenderWidgetHostViewGtk::InitAsChild() {
377 view_.Own(RenderWidgetHostViewGtkWidget::CreateNewWidget(this)); 378 view_.Own(RenderWidgetHostViewGtkWidget::CreateNewWidget(this));
379 plugin_container_host_.set_host_widget(view_.get());
378 gtk_widget_show(view_.get()); 380 gtk_widget_show(view_.get());
379 } 381 }
380 382
381 void RenderWidgetHostViewGtk::InitAsPopup( 383 void RenderWidgetHostViewGtk::InitAsPopup(
382 RenderWidgetHostView* parent_host_view, const gfx::Rect& pos) { 384 RenderWidgetHostView* parent_host_view, const gfx::Rect& pos) {
383 parent_host_view_ = parent_host_view; 385 parent_host_view_ = parent_host_view;
384 parent_ = parent_host_view->GetNativeView(); 386 parent_ = parent_host_view->GetNativeView();
385 GtkWidget* popup = gtk_window_new(GTK_WINDOW_POPUP); 387 GtkWidget* popup = gtk_window_new(GTK_WINDOW_POPUP);
386 view_.Own(RenderWidgetHostViewGtkWidget::CreateNewWidget(this)); 388 view_.Own(RenderWidgetHostViewGtkWidget::CreateNewWidget(this));
389 plugin_container_host_.set_host_widget(view_.get());
387 gtk_container_add(GTK_CONTAINER(popup), view_.get()); 390 gtk_container_add(GTK_CONTAINER(popup), view_.get());
388 391
389 // If we are not activatable, we don't want to grab keyboard input, 392 // If we are not activatable, we don't want to grab keyboard input,
390 // and webkit will manage our destruction. 393 // and webkit will manage our destruction.
391 if (activatable()) { 394 if (activatable()) {
392 // Grab all input for the app. If a click lands outside the bounds of the 395 // Grab all input for the app. If a click lands outside the bounds of the
393 // popup, WebKit will notice and destroy us. 396 // popup, WebKit will notice and destroy us.
394 gtk_grab_add(view_.get()); 397 gtk_grab_add(view_.get());
395 // Now grab all of X's input. 398 // Now grab all of X's input.
396 gdk_pointer_grab( 399 gdk_pointer_grab(
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 } 469 }
467 470
468 gfx::NativeView RenderWidgetHostViewGtk::GetNativeView() { 471 gfx::NativeView RenderWidgetHostViewGtk::GetNativeView() {
469 return view_.get(); 472 return view_.get();
470 } 473 }
471 474
472 void RenderWidgetHostViewGtk::MovePluginWindows( 475 void RenderWidgetHostViewGtk::MovePluginWindows(
473 const std::vector<WebPluginGeometry>& plugin_window_moves) { 476 const std::vector<WebPluginGeometry>& plugin_window_moves) {
474 if (plugin_window_moves.empty()) 477 if (plugin_window_moves.empty())
475 return; 478 return;
476 479 for (unsigned int i = 0; i < plugin_window_moves.size(); ++i) {
477 NOTIMPLEMENTED(); 480 plugin_container_host_.MovePluginContainer(plugin_window_moves[i]);
481 }
478 } 482 }
479 483
480 void RenderWidgetHostViewGtk::Focus() { 484 void RenderWidgetHostViewGtk::Focus() {
481 gtk_widget_grab_focus(view_.get()); 485 gtk_widget_grab_focus(view_.get());
482 } 486 }
483 487
484 void RenderWidgetHostViewGtk::Blur() { 488 void RenderWidgetHostViewGtk::Blur() {
485 // TODO(estade): We should be clearing native focus as well, but I know of no 489 // TODO(estade): We should be clearing native focus as well, but I know of no
486 // way to do that without focusing another widget. 490 // way to do that without focusing another widget.
487 // TODO(estade): it doesn't seem like the CanBlur() check should be necessary 491 // TODO(estade): it doesn't seem like the CanBlur() check should be necessary
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 void RenderWidgetHostViewGtk::DidScrollRect(const gfx::Rect& rect, int dx, 570 void RenderWidgetHostViewGtk::DidScrollRect(const gfx::Rect& rect, int dx,
567 int dy) { 571 int dy) {
568 if (is_hidden_) 572 if (is_hidden_)
569 return; 573 return;
570 574
571 Paint(rect); 575 Paint(rect);
572 } 576 }
573 577
574 void RenderWidgetHostViewGtk::RenderViewGone() { 578 void RenderWidgetHostViewGtk::RenderViewGone() {
575 Destroy(); 579 Destroy();
580 plugin_container_host_.set_host_widget(NULL);
576 } 581 }
577 582
578 void RenderWidgetHostViewGtk::Destroy() { 583 void RenderWidgetHostViewGtk::Destroy() {
579 // If |parent_| is non-null, we are a popup and we must disconnect from our 584 // If |parent_| is non-null, we are a popup and we must disconnect from our
580 // parent and destroy the popup window. 585 // parent and destroy the popup window.
581 if (parent_) { 586 if (parent_) {
582 if (activatable()) { 587 if (activatable()) {
583 GdkDisplay *display = gtk_widget_get_display(parent_); 588 GdkDisplay *display = gtk_widget_get_display(parent_);
584 gdk_display_pointer_ungrab(display, GDK_CURRENT_TIME); 589 gdk_display_pointer_ungrab(display, GDK_CURRENT_TIME);
585 gdk_display_keyboard_ungrab(display, GDK_CURRENT_TIME); 590 gdk_display_keyboard_ungrab(display, GDK_CURRENT_TIME);
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 void RenderWidgetHostViewGtk::ReceivedSelectionText(GtkClipboard* clipboard, 705 void RenderWidgetHostViewGtk::ReceivedSelectionText(GtkClipboard* clipboard,
701 const gchar* text, gpointer userdata) { 706 const gchar* text, gpointer userdata) {
702 // If there's nothing to paste (|text| is NULL), do nothing. 707 // If there's nothing to paste (|text| is NULL), do nothing.
703 if (!text) 708 if (!text)
704 return; 709 return;
705 RenderWidgetHostViewGtk* host_view = 710 RenderWidgetHostViewGtk* host_view =
706 reinterpret_cast<RenderWidgetHostViewGtk*>(userdata); 711 reinterpret_cast<RenderWidgetHostViewGtk*>(userdata);
707 host_view->host_->Send(new ViewMsg_InsertText(host_view->host_->routing_id(), 712 host_view->host_->Send(new ViewMsg_InsertText(host_view->host_->routing_id(),
708 UTF8ToUTF16(text))); 713 UTF8ToUTF16(text)));
709 } 714 }
715
716 gfx::PluginWindowHandle RenderWidgetHostViewGtk::CreatePluginContainer() {
717 return plugin_container_host_.CreatePluginContainer();
718 }
719
720 void RenderWidgetHostViewGtk::DestroyPluginContainer(
721 gfx::PluginWindowHandle container) {
722 plugin_container_host_.DestroyPluginContainer(container);
723 }
OLDNEW
« no previous file with comments | « chrome/browser/renderer_host/render_widget_host_view_gtk.h ('k') | chrome/browser/renderer_host/test/test_render_view_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698