Commit 02631119 authored by pavlov%pavlov.net's avatar pavlov%pavlov.net
Browse files

Patch from Owen Taylor <otaylor@redhat.com> that makes nsWidget inherit from

nsBaseWidget.  It moves the Create() functions into nsWidget for the base
creation so that the code is reused and not the same code in each file.  This
patch also fixes numerous nsWindow related issues.
parent b2e38fec
Loading
Loading
Loading
Loading
+6 −43
Original line number Diff line number Diff line
@@ -38,53 +38,16 @@ nsButton::nsButton() : nsWidget() , nsIButton()
{
}


NS_METHOD nsButton::Create(nsIWidget        *aParent,
                      const nsRect     &aRect,
                      EVENT_CALLBACK    aHandleEventFunction,
                      nsIDeviceContext *aContext,
                      nsIAppShell      *aAppShell,
                      nsIToolkit       *aToolkit,
                      nsWidgetInitData *aInitData)
//-------------------------------------------------------------------------
//
// Create the native Button widget
//
//-------------------------------------------------------------------------
NS_METHOD nsButton::CreateNative(GtkWidget *parentWindow)
{
  aParent->AddChild(this);
  GtkWidget *parentWidget = nsnull;

  if (aParent) {
    parentWidget = (GtkWidget *) aParent->GetNativeData(NS_NATIVE_WIDGET);
  } else if (aAppShell) {
    parentWidget = (GtkWidget *) aAppShell->GetNativeData(NS_NATIVE_SHELL);
  }

  InitToolkit(aToolkit, aParent);
  InitDeviceContext(aContext, parentWidget);

  mWidget = gtk_button_new_with_label("");

  gtk_layout_put(GTK_LAYOUT(parentWidget), mWidget, aRect.x, aRect.y);
  gtk_widget_set_usize(mWidget, aRect.width, aRect.height);

  gtk_object_set_user_data(GTK_OBJECT(mWidget), this);
  gtk_widget_show(mWidget);

  // save the event callback function
  mEventCallback = aHandleEventFunction;

  InitCallbacks("nsButton");
  return NS_OK;

}

NS_METHOD nsButton::Create(nsNativeWidget aParent,
                      const nsRect &aRect,
                      EVENT_CALLBACK aHandleEventFunction,
                      nsIDeviceContext *aContext,
                      nsIAppShell *aAppShell,
                      nsIToolkit *aToolkit,
                      nsWidgetInitData *aInitData)
{
  return NS_ERROR_FAILURE;

}

//-------------------------------------------------------------------------
+3 −15
Original line number Diff line number Diff line
@@ -36,21 +36,6 @@ public:
  // nsISupports
  NS_DECL_ISUPPORTS;

  NS_IMETHOD Create(nsIWidget *aParent,
              const nsRect &aRect,
              EVENT_CALLBACK aHandleEventFunction,
              nsIDeviceContext *aContext = nsnull,
              nsIAppShell *aAppShell = nsnull,
              nsIToolkit *aToolkit = nsnull,
              nsWidgetInitData *aInitData = nsnull);
  NS_IMETHOD Create(nsNativeWidget aParent,
              const nsRect &aRect,
              EVENT_CALLBACK aHandleEventFunction,
              nsIDeviceContext *aContext = nsnull,
              nsIAppShell *aAppShell = nsnull,
              nsIToolkit *aToolkit = nsnull,
              nsWidgetInitData *aInitData = nsnull);

  // nsIButton part
  NS_IMETHOD     SetLabel(const nsString& aText);
  NS_IMETHOD     GetLabel(nsString& aBuffer);
@@ -58,6 +43,9 @@ public:
  virtual PRBool OnMove(PRInt32 aX, PRInt32 aY);
  virtual PRBool OnPaint(nsPaintEvent &aEvent);
  virtual PRBool OnResize(nsSizeEvent &aEvent);

protected:
  NS_METHOD CreateNative(GtkWidget *parentWindow);
};

#endif // nsButton_h__
+2 −79
Original line number Diff line number Diff line
@@ -47,93 +47,16 @@ nsCheckButton::~nsCheckButton()

//-------------------------------------------------------------------------
//
// nsCheckButton Creator
// Create the native CheckButton widget
//
//-------------------------------------------------------------------------
NS_METHOD nsCheckButton::Create(nsIWidget *aParent,
                      const nsRect &aRect,
                      EVENT_CALLBACK aHandleEventFunction,
                      nsIDeviceContext *aContext,
                      nsIAppShell *aAppShell,
                      nsIToolkit *aToolkit,
                      nsWidgetInitData *aInitData)
NS_METHOD  nsCheckButton::CreateNative(GtkWidget *parentWindow)
{
  aParent->AddChild(this);
  GtkWidget *parentWidget = nsnull;

  if (aParent) {
    parentWidget = (GtkWidget *) aParent->GetNativeData(NS_NATIVE_WIDGET);
  } else {
    parentWidget = (GtkWidget *) aAppShell->GetNativeData(NS_NATIVE_SHELL);
  }

  InitToolkit(aToolkit, aParent);
  InitDeviceContext(aContext, parentWidget);

  mWidget = gtk_check_button_new();

  gtk_layout_put(GTK_LAYOUT(parentWidget), mWidget, aRect.x, aRect.y);
  gtk_widget_set_usize(mWidget, aRect.width, aRect.height);

  gtk_object_set_user_data(GTK_OBJECT(mWidget), this);
  gtk_widget_show(mWidget);
      
/*
  mWidget = ::XtVaCreateManagedWidget("",
                                    xmToggleButtonWidgetClass,
                                    parentWidget,
                                    XmNwidth, aRect.width,
                                    XmNheight, aRect.height,
                                    XmNrecomputeSize, False,
                                    XmNhighlightOnEnter, False,
                                    XmNx, aRect.x,
                                    XmNy, aRect.y,
                                    XmNresizeHeight, False,
                                    XmNresizeWidth, False,
                                    xmNmarginHeight, 0,
                                    XmNmarginWidth, 0,
                                    XmNadjustMargin, False,
                                    XmNspacing, 0,
                                    XmNisAligned, False,
                                    XmNentryBorder, 0,
                                    XmNborderWidth, 0,
                                    0);
*/
  // save the event callback function
  mEventCallback = aHandleEventFunction;

  InitCallbacks();
/*
  XtAddCallback(mWidget,
                XmNarmCallback,
                nsXtWidget_Toggle_ArmCallback,
                this);

  XtAddCallback(mWidget,
                XmNdisarmCallback,
                nsXtWidget_Toggle_DisArmCallback,
                this);
*/

  return NS_OK;
}

//-------------------------------------------------------------------------
//
// nsCheckButton Creator
//
//-------------------------------------------------------------------------
NS_METHOD nsCheckButton::Create(nsNativeWidget aParent,
                      const nsRect &aRect,
                      EVENT_CALLBACK aHandleEventFunction,
                      nsIDeviceContext *aContext,
                      nsIAppShell *aAppShell,
                      nsIToolkit *aToolkit,
                      nsWidgetInitData *aInitData)
{
  return NS_ERROR_FAILURE;
}

/**
 * Implement the standard QueryInterface for NS_IWIDGET_IID and NS_ISUPPORTS_IID
 * @modify gpk 8/4/98
+1 −15
Original line number Diff line number Diff line
@@ -45,21 +45,6 @@ public:
    NS_IMETHOD SetState(const PRBool aState);
    NS_IMETHOD GetState(PRBool& aState);

    NS_IMETHOD Create(nsIWidget *aParent,
                const nsRect &aRect,
                EVENT_CALLBACK aHandleEventFunction,
                nsIDeviceContext *aContext = nsnull,
                nsIAppShell *aAppShell = nsnull,
                nsIToolkit *aToolkit = nsnull,
                nsWidgetInitData *aInitData = nsnull);
    NS_IMETHOD Create(nsNativeWidget aParent,
                const nsRect &aRect,
                EVENT_CALLBACK aHandleEventFunction,
                nsIDeviceContext *aContext = nsnull,
                nsIAppShell *aAppShell = nsnull,
                nsIToolkit *aToolkit = nsnull,
                nsWidgetInitData *aInitData = nsnull);

  virtual PRBool OnMove(PRInt32 aX, PRInt32 aY);
  virtual PRBool OnPaint(nsPaintEvent &aEvent);
  virtual PRBool OnResize(nsSizeEvent &aEvent);
@@ -69,6 +54,7 @@ public:
  void DisArmed();

protected:
  NS_IMETHOD nsCheckButton::CreateNative(GtkWidget *parentWindow);
  GtkWidget *mLabel;

private:
+2 −81
Original line number Diff line number Diff line
@@ -260,95 +260,16 @@ nsresult nsComboBox::QueryInterface(const nsIID& aIID, void** aInstancePtr)

//-------------------------------------------------------------------------
//
// nsComboBox Creator
// Create the native GtkCombo widget
//
//-------------------------------------------------------------------------
NS_METHOD nsComboBox::Create(nsIWidget *aParent,
                      const nsRect &aRect,
                      EVENT_CALLBACK aHandleEventFunction,
                      nsIDeviceContext *aContext,
                      nsIAppShell *aAppShell,
                      nsIToolkit *aToolkit,
                      nsWidgetInitData *aInitData)
NS_METHOD  nsComboBox::CreateNative(GtkWidget *parentWindow)
{
  aParent->AddChild(this);
  GtkWidget *parentWidget = nsnull;

  if (aParent) {
    parentWidget = GTK_WIDGET(aParent->GetNativeData(NS_NATIVE_WIDGET));
  } else if (aAppShell) {
    parentWidget = GTK_WIDGET(aAppShell->GetNativeData(NS_NATIVE_SHELL));
  }

  InitToolkit(aToolkit, aParent);
  InitDeviceContext(aContext, parentWidget);

  mWidget = gtk_combo_new();

  gtk_combo_set_value_in_list(GTK_COMBO(mWidget), TRUE, TRUE);

  gtk_layout_put(GTK_LAYOUT(parentWidget), mWidget, aRect.x, aRect.y);
  gtk_widget_set_usize(mWidget, aRect.width, aRect.height);

  gtk_widget_show(mWidget);

  mEventCallback = aHandleEventFunction;
  InitCallbacks("nsComboBox");
  
  return NS_OK;
/*
  Arg	args[30];
  int	argc;

  argc = 0;
  XtSetArg(args[argc], XmNx, 0); argc++;
  XtSetArg(args[argc], XmNy, 0); argc++;
  mPullDownMenu = XmCreatePulldownMenu(parentWidget, "pulldown", args, argc);

  argc = 0;
  XtSetArg(args[argc], XmNmarginHeight, 0); argc++;
  XtSetArg(args[argc], XmNmarginWidth, 0); argc++;
  XtSetArg(args[argc], XmNrecomputeSize, False); argc++;
  XtSetArg(args[argc], XmNresizeHeight, False); argc++;
  XtSetArg(args[argc], XmNresizeWidth, False); argc++;
  XtSetArg(args[argc], XmNspacing, False); argc++;
  XtSetArg(args[argc], XmNborderWidth, 0); argc++;
  XtSetArg(args[argc], XmNnavigationType, XmTAB_GROUP); argc++;
  XtSetArg(args[argc], XmNtraversalOn, True); argc++;
  XtSetArg(args[argc], XmNorientation, XmVERTICAL); argc++;
  XtSetArg(args[argc], XmNadjustMargin, False); argc++;
  XtSetArg(args[argc], XmNsubMenuId, mPullDownMenu); argc++;
  XtSetArg(args[argc], XmNuserData, (XtPointer)this); argc++;
  XtSetArg(args[argc], XmNx, aRect.x); argc++;
  XtSetArg(args[argc], XmNy, aRect.y); argc++;
  XtSetArg(args[argc], XmNwidth, aRect.width); argc++;
  XtSetArg(args[argc], XmNheight, aRect.height); argc++;
  mWidget = XmCreateOptionMenu(parentWidget, "", args, argc);

  mOptionMenu = XmOptionLabelGadget(mWidget);
  XtUnmanageChild(mOptionMenu);

  // save the event callback function
  mEventCallback = aHandleEventFunction;
  //InitCallbacks();
  return NS_OK;
*/
}

//-------------------------------------------------------------------------
//
// nsComboBox Creator
//
//-------------------------------------------------------------------------
NS_METHOD nsComboBox::Create(nsNativeWidget aParent,
                      const nsRect &aRect,
                      EVENT_CALLBACK aHandleEventFunction,
                      nsIDeviceContext *aContext,
                      nsIAppShell *aAppShell,
                      nsIToolkit *aToolkit,
                      nsWidgetInitData *aInitData)
{
  return NS_ERROR_FAILURE;
}

//-------------------------------------------------------------------------
Loading