Commit cc3fc234 authored by Robert O'Callahan's avatar Robert O'Callahan
Browse files

Bug 506615. XUL decks should not have wididgets. r=dbaron

parent 821f4703
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -617,11 +617,10 @@ nsContainerFrame::SyncFrameViewProperties(nsPresContext* aPresContext,

    if (!aStyleContext->GetStyleVisibility()->IsVisible() &&
        !aFrame->SupportsVisibilityHidden()) {
      // If it's a scrollable frame that can't hide its scrollbars,
      // hide the view. This means that child elements can't override
      // their parent's visibility, but it's not practical to leave it
      // visible in all cases because the scrollbars will be showing
      // XXXldb Does the view system really enforce this correctly?
      // If it's a subdocument frame or a plugin, hide the view and
      // any associated widget.
      // These are leaf elements so this is OK, no descendant can be
      // visibility:visible.
      viewIsVisible = PR_FALSE;
    } else if (IsMenuPopup(aFrame)) {
      // if the view is for a popup, don't show the view if the popup is closed
+0 −9
Original line number Diff line number Diff line
@@ -6714,15 +6714,6 @@ nsFrame::SetParent(const nsIFrame* aParent)
  else if (wasBoxWrapped && !IsBoxWrapped())
    DeleteProperty(nsGkAtoms::boxMetricsProperty);

  if (aParent && aParent->IsBoxFrame()) {
    if (aParent->ChildrenMustHaveWidgets()) {
        nsHTMLContainerFrame::CreateViewForFrame(this, PR_TRUE);
        nsIView* view = GetView();
        if (!view->HasWidget())
          CreateWidgetForView(view);
    }
  }

  return NS_OK;
}

+2 −7
Original line number Diff line number Diff line
@@ -106,11 +106,9 @@ struct nsMargin;

typedef class nsIFrame nsIBox;

// IID for the nsIFrame interface
// 2871104e-2738-4ad7-b86a-ede63c71f1c2
#define NS_IFRAME_IID \
  { 0x2871104e, 0x2738, 0x4ad7,                       \
    { 0xb8, 0x6a, 0xed, 0xe6, 0x3c, 0x71, 0xf1, 0xc2 } }
  { 0x7e9018b5, 0x5405, 0x4e2b, \
    { 0x87, 0x67, 0xe2, 0xb4, 0xb1, 0x3e, 0xc1, 0x69 } }

/**
 * Indication of how the frame can be split. This is used when doing runaround
@@ -2290,9 +2288,6 @@ NS_PTR_TO_INT32(frame->GetProperty(nsGkAtoms::embeddingLevel))
  NS_IMETHOD DumpBox(FILE* out)=0;
#endif

  // Only nsDeckFrame requires that all its children have widgets
  virtual PRBool ChildrenMustHaveWidgets() const { return PR_FALSE; }

  /**
   * @return PR_TRUE if this text frame ends with a newline character.  It
   * should return PR_FALSE if this is not a text frame.
+0 −12
Original line number Diff line number Diff line
@@ -205,18 +205,6 @@ nsBoxFrame::Init(nsIContent* aContent,

  MarkIntrinsicWidthsDirty();

  // see if we need a widget
  if (aParent && aParent->IsBoxFrame()) {
    if (aParent->ChildrenMustHaveWidgets()) {
        rv = nsHTMLContainerFrame::CreateViewForFrame(this, PR_TRUE);
        NS_ENSURE_SUCCESS(rv, rv);

        nsIView* view = GetView();
        if (!view->HasWidget())
           view->CreateWidget(kWidgetCID);   
    }
  }

  CacheAttributes();

#ifdef DEBUG_LAYOUT
+34 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@
#include "nsBoxLayoutState.h"
#include "nsStackLayout.h"
#include "nsDisplayList.h"
#include "nsHTMLContainerFrame.h"

nsIFrame*
NS_NewDeckFrame(nsIPresShell* aPresShell, nsStyleContext* aContext)
@@ -107,6 +108,39 @@ nsDeckFrame::Init(nsIContent* aContent,
  return rv;
}

static void
CreateViewsForFrames(const nsFrameList& aFrames)
{
  for (nsFrameList::Enumerator f(aFrames); !f.AtEnd(); f.Next()) {
    nsHTMLContainerFrame::CreateViewForFrame(f.get(), PR_TRUE);
  }
}

NS_IMETHODIMP
nsDeckFrame::SetInitialChildList(nsIAtom*        aListName,
                                 nsFrameList&    aChildList)
{
  CreateViewsForFrames(aChildList);
  return nsBoxFrame::SetInitialChildList(aListName, aChildList);
}

NS_IMETHODIMP
nsDeckFrame::AppendFrames(nsIAtom*        aListName,
                          nsFrameList&    aFrameList)
{
  CreateViewsForFrames(aFrameList);
  return nsBoxFrame::AppendFrames(aListName, aFrameList);
}

NS_IMETHODIMP
nsDeckFrame::InsertFrames(nsIAtom*        aListName,
                          nsIFrame*       aPrevFrame,
                          nsFrameList&    aFrameList)
{
  CreateViewsForFrames(aFrameList);
  return nsBoxFrame::InsertFrames(aListName, aPrevFrame, aFrameList);
}

void
nsDeckFrame::HideBox(nsPresContext* aPresContext, nsIBox* aBox)
{
Loading