| Index: webkit/glue/plugins/webplugin_delegate_impl.cc
|
| ===================================================================
|
| --- webkit/glue/plugins/webplugin_delegate_impl.cc (revision 12476)
|
| +++ webkit/glue/plugins/webplugin_delegate_impl.cc (working copy)
|
| @@ -145,6 +145,7 @@
|
| windowless_(false),
|
| windowed_handle_(NULL),
|
| windowed_did_set_window_(false),
|
| + windowed_manage_position_(false),
|
| windowless_needs_set_window_(true),
|
| plugin_wnd_proc_(NULL),
|
| last_message_(0),
|
| @@ -266,7 +267,8 @@
|
| return false;
|
| }
|
|
|
| - plugin->SetWindow(windowed_handle_, handle_event_pump_messages_event_);
|
| + windowed_manage_position_ =
|
| + plugin->SetWindow(windowed_handle_, handle_event_pump_messages_event_);
|
| plugin_url_ = url.spec();
|
|
|
| // The windowless version of the Silverlight plugin calls the
|
| @@ -550,10 +552,10 @@
|
| const MSG& msg = *it;
|
| if (processed.find(msg.hwnd) == processed.end()) {
|
| WNDPROC proc = reinterpret_cast<WNDPROC>(msg.time);
|
| - // It is possible that the window was closed after we queued
|
| - // this message. This is a rare event; just verify the window
|
| - // is alive. (see also bug 1259488)
|
| - if (IsWindow(msg.hwnd))
|
| + // It is possible that the window was closed after we queued
|
| + // this message. This is a rare event; just verify the window
|
| + // is alive. (see also bug 1259488)
|
| + if (IsWindow(msg.hwnd))
|
| CallWindowProc(proc, msg.hwnd, msg.message, msg.wParam, msg.lParam);
|
| processed[msg.hwnd] = 1;
|
| it = throttle_queue->erase(it);
|
| @@ -695,20 +697,14 @@
|
| if (window_rect_ == window_rect && clip_rect_ == clip_rect)
|
| return false;
|
|
|
| - // There are a few parts to managing the plugin windows:
|
| - // - Initial geometry, show / resize / position the window.
|
| - // - Geometry updates, resize the window.
|
| - // - Geometry updates, move the window or update the clipping region.
|
| - // This code should handle the first two, positioning and sizing the window
|
| - // initially, and resizing it when the size changes. Clipping and moving are
|
| - // handled separately by WebPlugin, after it has called this code. This
|
| - // allows window moves, like scrolling, to be synchronized with painting.
|
| - // See WebPluginImpl::setFrameRect().
|
| + // If windowed_manage_position_ is false, then the plugin will be moved
|
| + // elsewhere. This allows the window moves/scrolling/clipping to be
|
| + // synchronized with the page and other windows.
|
| if (window_rect.size() != window_rect_.size()) {
|
| ::SetWindowPos(windowed_handle_,
|
| NULL,
|
| - 0,
|
| - 0,
|
| + windowed_manage_position_ ? window_rect.x() : 0,
|
| + windowed_manage_position_ ? window_rect.y() : 0,
|
| window_rect.width(),
|
| window_rect.height(),
|
| SWP_SHOWWINDOW);
|
| @@ -742,8 +738,8 @@
|
| window_.clipRect.right = clip_rect_.x() + clip_rect_.width();
|
| window_.height = window_rect_.height();
|
| window_.width = window_rect_.width();
|
| - window_.x = window_rect_.x();
|
| - window_.y = window_rect_.y();
|
| + window_.x = windowed_manage_position_ ? window_rect_.x() : 0;
|
| + window_.y = windowed_manage_position_ ? window_rect_.y() : 0;
|
|
|
| window_.window = windowed_handle_;
|
| window_.type = NPWindowTypeWindow;
|
|
|