зеркало из https://github.com/mozilla/pjs.git
Bug 178987 Get qt toolkit working again
patch by esben@despammed.com r=timeless rs=bz a=roc some changes by me Bug 184257 Infrequent nsIPref users need to be converted to nsIPrefService, etc. patch by caillon@returnzero.com r=timeless rs=bz a=roc
This commit is contained in:
Родитель
8d7ea68681
Коммит
2a124528f5
|
@ -73,6 +73,7 @@ CFLAGS += $(MOZ_QT_CFLAGS)
|
|||
|
||||
EXTRA_DSO_LDOPTS += $(MOZ_COMPONENT_LIBS) \
|
||||
-lgkgfx \
|
||||
-lgfxshared_s \
|
||||
$(MOZ_JS_LIBS) \
|
||||
$(NULL)
|
||||
|
||||
|
|
|
@ -69,14 +69,14 @@ NS_IMPL_ISUPPORTS1(nsClipboard, nsIClipboard);
|
|||
// nsClipboard constructor
|
||||
//
|
||||
//-------------------------------------------------------------------------
|
||||
nsClipboard::nsClipboard()
|
||||
nsClipboard::nsClipboard() :
|
||||
mSelectionOwner (nsnull),
|
||||
mGlobalOwner (nsnull),
|
||||
mSelectionTransferable (nsnull),
|
||||
mGlobalTransferable (nsnull),
|
||||
mIgnoreEmptyNotification (PR_FALSE)
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
mIgnoreEmptyNotification = PR_FALSE;
|
||||
mGlobalTransferable = nsnull;
|
||||
mSelectionTransferable = nsnull;
|
||||
mGlobalOwner = nsnull;
|
||||
mSelectionOwner = nsnull;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
@ -88,6 +88,14 @@ nsClipboard::~nsClipboard()
|
|||
{
|
||||
}
|
||||
|
||||
#ifdef DEBUG_timeless
|
||||
// XXX nsBaseClipboard will have an init method to allow for constructors to fail
|
||||
NS_IMETHODIMP nsClipboard::Init()
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
NS_IMETHODIMP nsClipboard::SetNativeClipboardData(PRInt32 aWhichClipboard)
|
||||
{
|
||||
mIgnoreEmptyNotification = PR_TRUE;
|
||||
|
|
|
@ -1,78 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Denis Issoupov <denis@macadamian.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
#ifndef nsClipboard_h__
|
||||
#define nsClipboard_h__
|
||||
|
||||
#include "nsIClipboard.h"
|
||||
#include "nsITransferable.h"
|
||||
#include "nsIClipboardOwner.h"
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
#include <qlist.h>
|
||||
#include <qcstring.h>
|
||||
#include <qmime.h>
|
||||
|
||||
/* Native QT Clipboard wrapper */
|
||||
class nsClipboard : public nsIClipboard
|
||||
{
|
||||
public:
|
||||
nsClipboard();
|
||||
virtual ~nsClipboard();
|
||||
|
||||
//nsISupports
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// nsIClipboard
|
||||
NS_DECL_NSICLIPBOARD
|
||||
|
||||
protected:
|
||||
NS_IMETHOD SetNativeClipboardData(PRInt32 aWhichClipboard);
|
||||
NS_IMETHOD GetNativeClipboardData(nsITransferable *aTransferable,
|
||||
PRInt32 aWhichClipboard);
|
||||
|
||||
inline nsITransferable *GetTransferable(PRInt32 aWhichClipboard);
|
||||
|
||||
PRBool mIgnoreEmptyNotification;
|
||||
|
||||
nsCOMPtr<nsIClipboardOwner> mSelectionOwner;
|
||||
nsCOMPtr<nsIClipboardOwner> mGlobalOwner;
|
||||
nsCOMPtr<nsITransferable> mSelectionTransferable;
|
||||
nsCOMPtr<nsITransferable> mGlobalTransferable;
|
||||
};
|
||||
|
||||
#endif // nsClipboard_h__
|
|
@ -1,173 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Denis Issoupov <denis@macadamian.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsDragService.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsWidget.h"
|
||||
#include "nsXPCOM.h"
|
||||
#include "nsISupportsPrimitives.h"
|
||||
#include "nsXPIDLString.h"
|
||||
#include "nsPrimitiveHelpers.h"
|
||||
#include "nsReadableUtils.h"
|
||||
#include "nsClipboard.h"
|
||||
#include "nsMime.h"
|
||||
|
||||
#include <qapplication.h>
|
||||
#include <qclipboard.h>
|
||||
|
||||
//----------------------------------------------------------
|
||||
nsMimeStoreData::nsMimeStoreData(QCString& name, QByteArray& data)
|
||||
{
|
||||
flavorName = name;
|
||||
flavorData = data;
|
||||
}
|
||||
|
||||
nsMimeStoreData::nsMimeStoreData(const char* name,void* rawdata,PRInt32 rawlen)
|
||||
{
|
||||
flavorName = name;
|
||||
flavorData.assign((char*)rawdata,(unsigned int)rawlen);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
nsMimeStore::nsMimeStore()
|
||||
{
|
||||
mMimeStore.setAutoDelete(TRUE);
|
||||
}
|
||||
|
||||
nsMimeStore::~nsMimeStore()
|
||||
{
|
||||
}
|
||||
|
||||
const char* nsMimeStore::format(int n) const
|
||||
{
|
||||
if (n >= (int)mMimeStore.count())
|
||||
return 0;
|
||||
|
||||
// because of const
|
||||
QList<nsMimeStoreData> *pMimeStore = (QList<nsMimeStoreData>*)&mMimeStore;
|
||||
|
||||
nsMimeStoreData* msd;
|
||||
msd = pMimeStore->at((unsigned int)n);
|
||||
return msd->flavorName;
|
||||
}
|
||||
|
||||
QByteArray nsMimeStore::encodedData(const char* name) const
|
||||
{
|
||||
QByteArray qba;
|
||||
|
||||
// because of const
|
||||
QList<nsMimeStoreData> *pMimeStore = (QList<nsMimeStoreData>*)&mMimeStore;
|
||||
|
||||
nsMimeStoreData* msd;
|
||||
for (msd = pMimeStore->first(); msd != 0; msd = pMimeStore->next()) {
|
||||
if (strcmp(name, msd->flavorName) == 0) {
|
||||
qba = msd->flavorData;
|
||||
return qba;
|
||||
}
|
||||
}
|
||||
#ifdef NS_DEBUG
|
||||
printf("nsMimeStore::encodedData requested unknown %s\n", name);
|
||||
#endif
|
||||
return qba;
|
||||
}
|
||||
|
||||
PRBool nsMimeStore::ContainsFlavor(const char* name)
|
||||
{
|
||||
for (nsMimeStoreData *msd = mMimeStore.first(); msd; msd = mMimeStore.next()) {
|
||||
if (!strcmp(name, msd->flavorName))
|
||||
return PR_TRUE;
|
||||
}
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
PRBool nsMimeStore::AddFlavorData(const char* name, void* data, PRInt32 len)
|
||||
{
|
||||
if (ContainsFlavor(name))
|
||||
return PR_FALSE;
|
||||
mMimeStore.append(new nsMimeStoreData(name, data, len));
|
||||
|
||||
// we're done unless we're given text/unicode,
|
||||
// and text/plain is not already advertised,
|
||||
if (strcmp(name, kUnicodeMime) || ContainsFlavor(kTextMime))
|
||||
return PR_TRUE;
|
||||
// in which case we also advertise text/plain
|
||||
// which we will convert on our own in nsDataObj::GetText().
|
||||
|
||||
char *as = ToNewCString(nsDependentString((PRUnichar*)data));
|
||||
|
||||
// let's text/plain be first for stupid programs
|
||||
// Ownership of |as| is transfered to mMimeStore
|
||||
mMimeStore.insert(0,new nsMimeStoreData(kTextMime,as,nsCRT::strlen(as) + 1));
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
nsDragObject::nsDragObject(nsMimeStore* mimeStore,QWidget* dragSource,
|
||||
const char* name)
|
||||
: QDragObject(dragSource, name)
|
||||
{
|
||||
if (!mimeStore)
|
||||
NS_ASSERTION(PR_TRUE, "Invalid pointer.");
|
||||
|
||||
mMimeStore = mimeStore;
|
||||
}
|
||||
|
||||
nsDragObject::~nsDragObject()
|
||||
{
|
||||
delete mMimeStore;
|
||||
}
|
||||
|
||||
const char* nsDragObject::format(int i) const
|
||||
{
|
||||
if (i >= (int)mMimeStore->count())
|
||||
return 0;
|
||||
|
||||
const char* frm = mMimeStore->format(i);
|
||||
#ifdef NS_DEBUG
|
||||
printf("nsDragObject::format i=%i %s\n",i, frm);
|
||||
#endif
|
||||
return frm;
|
||||
}
|
||||
|
||||
QByteArray nsDragObject::encodedData(const char* frm) const
|
||||
{
|
||||
#ifdef NS_DEBUG
|
||||
printf("nsDragObject::encodedData %s\n",frm);
|
||||
#endif
|
||||
return mMimeStore->encodedData(frm);
|
||||
}
|
|
@ -86,16 +86,19 @@ int _x_error(Display *display, XErrorEvent *error)
|
|||
|
||||
nsQApplication* nsQApplication::Instance(int argc,char** argv)
|
||||
{
|
||||
printf("Enter nsQApplication::Instance\n");
|
||||
if (!mInstance)
|
||||
mInstance = new nsQApplication(argc,argv);
|
||||
|
||||
mRefCnt++;
|
||||
|
||||
printf("Exit nsQApplication::Instance\n");
|
||||
return mInstance;
|
||||
}
|
||||
|
||||
void nsQApplication::Release()
|
||||
{
|
||||
printf("Enter nsQApplication::Release\n");
|
||||
mRefCnt--;
|
||||
if (mRefCnt <= 0) {
|
||||
if (mMasterWidget) {
|
||||
|
@ -105,19 +108,23 @@ void nsQApplication::Release()
|
|||
delete mInstance;
|
||||
mInstance = nsnull;
|
||||
}
|
||||
printf("Exit nsQApplication::Release\n");
|
||||
}
|
||||
|
||||
QWidget *nsQApplication::GetMasterWidget()
|
||||
{
|
||||
printf("Enter nsQApplication::GetMasterWidget\n");
|
||||
if (!mMasterWidget)
|
||||
mMasterWidget = new QWidget();
|
||||
|
||||
printf("Exit nsQApplication::GetMasterWidget\n");
|
||||
return mMasterWidget;
|
||||
}
|
||||
|
||||
nsQApplication::nsQApplication(int argc,char** argv)
|
||||
: QApplication(argc,argv)
|
||||
{
|
||||
printf("Enter: QApplication::QApplication\n");
|
||||
#ifdef DBG_JCG
|
||||
gQAppCount++;
|
||||
mID = gQAppID++;
|
||||
|
@ -125,23 +132,24 @@ nsQApplication::nsQApplication(int argc,char** argv)
|
|||
|
||||
XSetErrorHandler (_x_error);
|
||||
#endif
|
||||
if (mInstance)
|
||||
NS_ASSERTION(mInstance == nsnull,
|
||||
"Attempt to create duplicate QApplication Object.");
|
||||
NS_ASSERTION(!mInstance, "Attempt to create duplicate QApplication Object.");
|
||||
mInstance = this;
|
||||
setGlobalMouseTracking(true);
|
||||
setStyle(new QWindowsStyle);
|
||||
setOverrideCursor(QCursor(ArrowCursor),PR_TRUE);
|
||||
connect(this,SIGNAL(lastWindowClosed()),this,SLOT(quit()));
|
||||
printf("Exit: QApplication::QApplication\n");
|
||||
}
|
||||
|
||||
nsQApplication::~nsQApplication()
|
||||
{
|
||||
printf("Enter: QApplication::~QApplication\n");
|
||||
#ifdef DBG_JCG
|
||||
gQAppCount--;
|
||||
printf("JCG nsQApplication DTOR (%p) ID: %d, Count: %d\n",this,mID,gQAppCount);
|
||||
#endif
|
||||
setGlobalMouseTracking(false);
|
||||
printf("Exit: QApplication::~QApplication\n");
|
||||
}
|
||||
|
||||
void nsQApplication::AddEventProcessorCallback(nsIEventQueue* EQueue)
|
||||
|
|
|
@ -1,92 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* John C. Griggs <johng@corel.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
#ifndef nsQApplication_h__
|
||||
#define nsQApplication_h__
|
||||
|
||||
#include "nsIEventQueue.h"
|
||||
#include <qapplication.h>
|
||||
#include <qsocketnotifier.h>
|
||||
|
||||
class nsQtEventQueue : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
nsQtEventQueue(nsIEventQueue *EQueue);
|
||||
~nsQtEventQueue();
|
||||
unsigned long IncRefCnt();
|
||||
unsigned long DecRefCnt();
|
||||
|
||||
public slots:
|
||||
void DataReceived();
|
||||
|
||||
private:
|
||||
nsIEventQueue *mEventQueue;
|
||||
QSocketNotifier *mQSocket;
|
||||
PRUint32 mRefCnt;
|
||||
PRInt32 mID;
|
||||
};
|
||||
|
||||
class nsQApplication : public QApplication
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
static nsQApplication *Instance(int argc,char **argv);
|
||||
|
||||
static void Release();
|
||||
|
||||
static void AddEventProcessorCallback(nsIEventQueue *EQueue);
|
||||
static void RemoveEventProcessorCallback(nsIEventQueue *EQueue);
|
||||
|
||||
static QWidget *GetMasterWidget();
|
||||
|
||||
///Hook for debugging X11 Events
|
||||
bool x11EventFilter(XEvent *event);
|
||||
|
||||
protected:
|
||||
nsQApplication(int argc,char **argv);
|
||||
~nsQApplication();
|
||||
|
||||
private:
|
||||
PRInt32 mID;
|
||||
static QIntDict<nsQtEventQueue> mQueueDict;
|
||||
static nsQApplication *mInstance;
|
||||
static PRUint32 mRefCnt;
|
||||
static QWidget *mMasterWidget;
|
||||
};
|
||||
|
||||
#endif // nsQApplication_h__
|
|
@ -48,6 +48,7 @@
|
|||
#include "nsQApplication.h"
|
||||
|
||||
#include <qobjectlist.h>
|
||||
#include <qcursor.h>
|
||||
|
||||
//JCG #define DBG_JCG 1
|
||||
//JCG #define DBG_JCG_EVENT 1
|
||||
|
@ -1111,13 +1112,13 @@ void qt_leave_modal(QWidget*); // --- "" ---
|
|||
void nsQWidget::SetModal(PRBool aState)
|
||||
{
|
||||
if (aState) {
|
||||
setWFlags(Qt::WType_Modal);
|
||||
setWState(Qt::WState_Modal);
|
||||
setWFlags(Qt::WShowModal);
|
||||
// setWState(Qt::WState_Modal);
|
||||
qt_enter_modal(this);
|
||||
}
|
||||
else {
|
||||
clearWFlags(Qt::WType_Modal);
|
||||
clearWState(Qt::WState_Modal);
|
||||
clearWFlags(Qt::WShowModal);
|
||||
// clearWState(Qt::WState_Modal);
|
||||
qt_leave_modal(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,189 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* John C. Griggs <jcgriggs@sympatico.ca>
|
||||
* Denis Issoupov <denis@macadamian.com>
|
||||
* Wes Morgan <wmorga13@calvin.edu>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
#ifndef nsQWidget_h__
|
||||
#define nsQWidget_h__
|
||||
|
||||
#include <qwidget.h>
|
||||
#include <qstring.h>
|
||||
|
||||
#include "nsIWidget.h"
|
||||
|
||||
class nsFontQT;
|
||||
class nsWidget;
|
||||
|
||||
/* Utility Functions */
|
||||
PRBool NS_IsMouseInWindow(void *aWin,PRInt32 aMouseX,PRInt32 aMouseY);
|
||||
unsigned int NS_GetQWFlags(nsBorderStyle aBorder,nsWindowType aType);
|
||||
|
||||
//=============================================================================
|
||||
// nsQWidget class:
|
||||
// Customizes QWidget for use in XPFE
|
||||
//=============================================================================
|
||||
class nsQWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
nsQWidget(QWidget *aParent,const char *aName = 0,WFlags aFlags = WResizeNoErase);
|
||||
virtual ~nsQWidget();
|
||||
|
||||
virtual void SetModal(PRBool aState);
|
||||
|
||||
private:
|
||||
PRUint32 mQWidgetID;
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// nsQBaseWidget class
|
||||
// Provides a "two-way" interface, allowing XPFE to access Qt Widget
|
||||
// functionality and hooking the relevant Qt Events into the XPFE Event
|
||||
// Handling
|
||||
//=============================================================================
|
||||
class nsQBaseWidget : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
nsQBaseWidget(nsWidget *aWidget);
|
||||
virtual ~nsQBaseWidget();
|
||||
|
||||
/*** Lifecycle Management ***/
|
||||
PRBool CreateNative(QWidget *aParent = 0,const char *aName = 0,
|
||||
unsigned int aFlags = WResizeNoErase);
|
||||
virtual void Destroy();
|
||||
|
||||
/*** Interface to Qt Widget functionality for XPFE ***/
|
||||
void Enable(PRBool aState);
|
||||
PRBool HandlePopup(void *aEvent);
|
||||
virtual void SetCursor(nsCursor aCursor);
|
||||
virtual void SetFont(nsFontQT *aFont);
|
||||
virtual void SetModal(PRBool aState)
|
||||
{
|
||||
((nsQWidget*)mQWidget)->SetModal(aState);
|
||||
};
|
||||
virtual const char *Name() {return mQWidget->name();};
|
||||
virtual int Width() {return mQWidget->width();};
|
||||
virtual int Height() {return mQWidget->height();};
|
||||
virtual int BoundsX() {return 0;};
|
||||
virtual int BoundsY() {return 0;};
|
||||
virtual void OffsetXYToGlobal(PRInt32 *aX,PRInt32 *aY)
|
||||
{
|
||||
QPoint offset(0,0);
|
||||
offset = mQWidget->mapToGlobal(offset);
|
||||
*aX = offset.x();
|
||||
*aY = offset.y();
|
||||
};
|
||||
virtual void OffsetXYFromGlobal(PRInt32 *aX,PRInt32 *aY)
|
||||
{
|
||||
QPoint offset(0,0);
|
||||
offset = mQWidget->mapFromGlobal(offset);
|
||||
*aX = offset.x();
|
||||
*aY = offset.y();
|
||||
};
|
||||
virtual void Move(PRInt32 aX,PRInt32 aY) {mQWidget->move(aX,aY);};
|
||||
virtual void Resize(PRInt32 aW,PRInt32 aH) {mQWidget->resize(aW,aH);};
|
||||
virtual void Scroll(PRInt32 aDx,PRInt32 aDy) {mQWidget->scroll(aDx,aDy);};
|
||||
virtual void Show() {mQWidget->show();};
|
||||
virtual void Hide() {mQWidget->hide();};
|
||||
virtual PRBool IsVisible() {return mQWidget->isVisible();};
|
||||
virtual void SetFocus() {mQWidget->setFocus();};
|
||||
virtual void SetTopLevelFocus() {mQWidget->topLevelWidget()->setFocus();};
|
||||
virtual void RaiseTopLevel() {mQWidget->topLevelWidget()->raise();};
|
||||
virtual PRBool IsTopLevelActive()
|
||||
{
|
||||
return(mQWidget->topLevelWidget()->isActiveWindow());
|
||||
};
|
||||
virtual void SetTitle(const char *aTitleStr)
|
||||
{
|
||||
mQWidget->setCaption(QString::fromLocal8Bit(aTitleStr));
|
||||
};
|
||||
virtual void SetBackgroundColor(const nscolor &aColor)
|
||||
{
|
||||
QColor color(NS_GET_R(aColor),NS_GET_G(aColor),NS_GET_B(aColor));
|
||||
mQWidget->setBackgroundColor(color);
|
||||
};
|
||||
virtual void Polish() {mQWidget->polish();};
|
||||
virtual void Repaint(PRBool aErase) {mQWidget->repaint(aErase);};
|
||||
virtual void Repaint(PRInt32 aX,PRInt32 aY,PRInt32 aW, PRInt32 aH,PRBool aErase)
|
||||
{
|
||||
mQWidget->repaint(aX,aY,aW,aH,aErase);
|
||||
};
|
||||
virtual void Update() {mQWidget->update();};
|
||||
virtual void Update(PRInt32 aX,PRInt32 aY,PRInt32 aW, PRInt32 aH)
|
||||
{
|
||||
mQWidget->update(aX,aY,aW,aH);
|
||||
};
|
||||
virtual void *GetNativeWindow() {return((void*)(QPaintDevice*)mQWidget);};
|
||||
virtual void *GetNativeWidget() {return((void*)mQWidget);};
|
||||
|
||||
virtual void* X11Display() {return (void*)mQWidget->x11Display();};
|
||||
virtual void* WinID() {return (void*)mQWidget->winId();};
|
||||
|
||||
/*** Interface to XPFE Event Handling from Qt ***/
|
||||
bool eventFilter(QObject *aObj,QEvent *aEvent);
|
||||
|
||||
virtual PRBool MouseButtonEvent(QMouseEvent *aEvent,PRBool aButtonDown,
|
||||
int aClickCount);
|
||||
virtual PRBool MouseMovedEvent(QMouseEvent *aEvent);
|
||||
virtual PRBool MouseEnterEvent(QEvent *aEvent);
|
||||
virtual PRBool MouseExitEvent(QEvent *aEvent);
|
||||
virtual PRBool MouseWheelEvent(QWheelEvent *aEvent);
|
||||
virtual PRBool DestroyEvent();
|
||||
virtual PRBool ResizeEvent(QResizeEvent *aEvent);
|
||||
virtual PRBool MoveEvent(QMoveEvent *aEvent);
|
||||
virtual PRBool PaintEvent(QPaintEvent *aEvent);
|
||||
virtual PRBool KeyPressEvent(QKeyEvent *aEvent);
|
||||
virtual PRBool KeyReleaseEvent(QKeyEvent *aEvent);
|
||||
virtual PRBool FocusInEvent();
|
||||
virtual PRBool FocusOutEvent();
|
||||
virtual PRBool DragEnterEvent(QDragEnterEvent *aEvent);
|
||||
virtual PRBool DragMoveEvent(QDragMoveEvent *aEvent);
|
||||
virtual PRBool DragLeaveEvent(QDragLeaveEvent *aEvent);
|
||||
virtual PRBool DropEvent(QDropEvent *aEvent);
|
||||
|
||||
protected:
|
||||
nsWidget *mWidget;
|
||||
QWidget *mQWidget;
|
||||
PRBool mEnabled;
|
||||
PRBool mDestroyed;
|
||||
|
||||
private:
|
||||
PRUint32 mQBaseID;
|
||||
};
|
||||
|
||||
#endif //nsQWidget_h__
|
|
@ -202,6 +202,7 @@ nsIWidget *nsWidget::GetParent(void)
|
|||
//-------------------------------------------------------------------------
|
||||
NS_METHOD nsWidget::Show(PRBool bState)
|
||||
{
|
||||
printf("Show. bState=%s, mWidget=%p\n", bState?"true":"false", mWidget);
|
||||
if (!mWidget) {
|
||||
return NS_OK; // Will be null during printing
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче