Chromium Code Reviews| Index: chrome/browser/views/extensions/extension_popup.cc |
| =================================================================== |
| --- chrome/browser/views/extensions/extension_popup.cc (revision 33889) |
| +++ chrome/browser/views/extensions/extension_popup.cc (working copy) |
| @@ -29,12 +29,14 @@ |
| ExtensionPopup::ExtensionPopup(ExtensionHost* host, |
| Widget* frame, |
| const gfx::Rect& relative_to, |
| - BubbleBorder::ArrowLocation arrow_location) |
| + BubbleBorder::ArrowLocation arrow_location, |
| + bool activate_on_show) |
| : BrowserBubble(host->view(), |
| frame, |
| gfx::Point()), |
| relative_to_(relative_to), |
| - extension_host_(host) { |
| + extension_host_(host), |
| + activate_on_show_(activate_on_show) { |
| host->view()->SetContainer(this); |
| registrar_.Add(this, |
| NotificationType::EXTENSION_HOST_DID_STOP_LOADING, |
| @@ -56,6 +58,10 @@ |
| border_view_->set_background(new BubbleBackground(border_)); |
| border_view_->set_border(border_); |
| border_widget_->SetContentsView(border_view_); |
| + |
| + // Ensure that the popup contents are always displayed ontop of the border |
| + // widget. |
| + border_widget_->MoveAbove(popup_); |
|
rafaelw
2009/12/08 00:25:54
Can you explain what's going on here? Why is the b
Jeff Timanus
2009/12/08 01:05:38
Sorry for not making this clear. The issue with t
|
| } |
| ExtensionPopup::~ExtensionPopup() { |
| @@ -68,7 +74,7 @@ |
| border_widget_->Hide(); |
| } |
| -void ExtensionPopup::Show() { |
| +void ExtensionPopup::Show(bool activate) { |
| if (visible()) |
| return; |
| @@ -80,7 +86,7 @@ |
| // Show the border first, then the popup overlaid on top. |
| border_widget_->Show(); |
| - BrowserBubble::Show(true); |
| + BrowserBubble::Show(activate); |
| } |
| void ExtensionPopup::ResizeToView() { |
| @@ -118,7 +124,7 @@ |
| // Once we receive did stop loading, the content will be complete and |
| // the width will have been computed. Now it's safe to show. |
| if (extension_host_.get() == Details<ExtensionHost>(details).ptr()) |
| - Show(); |
| + Show(activate_on_show_); |
| } else { |
| NOTREACHED() << L"Received unexpected notification"; |
| } |
| @@ -138,7 +144,8 @@ |
| ExtensionPopup* ExtensionPopup::Show( |
| const GURL& url, Browser* browser, |
| const gfx::Rect& relative_to, |
| - BubbleBorder::ArrowLocation arrow_location) { |
| + BubbleBorder::ArrowLocation arrow_location, |
| + bool activate_on_show) { |
| ExtensionProcessManager* manager = |
| browser->profile()->GetExtensionProcessManager(); |
| DCHECK(manager); |
| @@ -149,12 +156,12 @@ |
| views::Widget* frame = BrowserView::GetBrowserViewForNativeWindow( |
| browser->window()->GetNativeHandle())->GetWidget(); |
| ExtensionPopup* popup = new ExtensionPopup(host, frame, relative_to, |
| - arrow_location); |
| + arrow_location, activate_on_show); |
| // If the host had somehow finished loading, then we'd miss the notification |
| // and not show. This seems to happen in single-process mode. |
| if (host->did_stop_loading()) |
| - popup->Show(); |
| + popup->Show(activate_on_show); |
| return popup; |
| } |