зеркало из https://github.com/mozilla/gecko-dev.git
Ok, I have the appropriate maximum Z-index borderless view being created
for menus. Now I just have to figure out how to show it.
This commit is contained in:
Родитель
6b2b072163
Коммит
155f10f03d
|
@ -26,6 +26,10 @@
|
||||||
#include "nsIStyleContext.h"
|
#include "nsIStyleContext.h"
|
||||||
#include "nsCSSRendering.h"
|
#include "nsCSSRendering.h"
|
||||||
#include "nsINameSpaceManager.h"
|
#include "nsINameSpaceManager.h"
|
||||||
|
#include "nsIViewManager.h"
|
||||||
|
#include "nsWidgetsCID.h"
|
||||||
|
|
||||||
|
const PRInt32 kMaxZ = 0x7fffffff; //XXX: Shouldn't there be a define somewhere for MaxInt for PRInt32
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -71,5 +75,37 @@ nsMenuPopupFrame::Init(nsIPresContext& aPresContext,
|
||||||
getter_AddRefs(menuStyle));
|
getter_AddRefs(menuStyle));
|
||||||
rv = nsBoxFrame::Init(aPresContext, aContent, aParent, menuStyle, aPrevInFlow);
|
rv = nsBoxFrame::Init(aPresContext, aContent, aParent, menuStyle, aPrevInFlow);
|
||||||
CreateViewForFrame(aPresContext, this, menuStyle, PR_TRUE);
|
CreateViewForFrame(aPresContext, this, menuStyle, PR_TRUE);
|
||||||
|
|
||||||
|
// Now that we've made a view, remove it and insert it at the correct
|
||||||
|
// position in the view hierarchy (as the root view). We do this so that we
|
||||||
|
// can draw the menus outside the confines of the window.
|
||||||
|
nsIView* ourView;
|
||||||
|
GetView(&ourView);
|
||||||
|
|
||||||
|
nsIFrame* parent;
|
||||||
|
aParent->GetParentWithView(&parent);
|
||||||
|
nsIView* parentView;
|
||||||
|
parent->GetView(&parentView);
|
||||||
|
|
||||||
|
nsCOMPtr<nsIViewManager> viewManager;
|
||||||
|
parentView->GetViewManager(*getter_AddRefs(viewManager));
|
||||||
|
|
||||||
|
// Remove the view from its old position.
|
||||||
|
viewManager->RemoveChild(parentView, ourView);
|
||||||
|
|
||||||
|
// Reinsert ourselves as the root view with a maximum z-index.
|
||||||
|
nsIView* rootView;
|
||||||
|
viewManager->GetRootView(rootView);
|
||||||
|
viewManager->InsertChild(rootView, ourView, kMaxZ);
|
||||||
|
|
||||||
|
// Create a widget for ourselves.
|
||||||
|
nsWidgetInitData widgetData;
|
||||||
|
ourView->SetZIndex(kMaxZ);
|
||||||
|
widgetData.mBorderStyle = eBorderStyle_BorderlessTopLevel;
|
||||||
|
static NS_DEFINE_IID(kCChildCID, NS_CHILD_CID);
|
||||||
|
ourView->CreateWidget(kCChildCID,
|
||||||
|
&widgetData,
|
||||||
|
nsnull);
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче