only send resize events on windows that are toplevel or have been created with a native parent

git-svn-id: svn://10.0.0.236/branches/SUPERWIN@52930 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
blizzard%redhat.com
1999-11-07 19:31:15 +00:00
parent dfccc12330
commit 35d00c2c83
3 changed files with 35 additions and 27 deletions

View File

@@ -124,6 +124,7 @@ nsWidget::nsWidget()
mIC = nsnull;
mIMECompositionUniString = nsnull;
mIMECompositionUniStringSize = 0;
mListenForResizes = PR_FALSE;
}
@@ -1026,6 +1027,8 @@ nsresult nsWidget::CreateWidget(nsIWidget *aParent,
if (aNativeParent) {
parentWidget = GTK_OBJECT(aNativeParent);
// we've got a native parent so listen for resizes
mListenForResizes = PR_TRUE;
} else if (aParent) {
// this ups the refcount of the gtk widget, we must unref later.
parentWidget = GTK_OBJECT(aParent->GetNativeData(NS_NATIVE_WIDGET));

View File

@@ -373,6 +373,7 @@ protected:
PRBool mShown;
PRUint32 mPreferredWidth, mPreferredHeight;
PRBool mListenForResizes;
GdkICPrivate *mIC;
GdkICPrivate *GetXIC();

View File

@@ -525,6 +525,7 @@ gint nsWindow::ConvertBorderStyles(nsBorderStyle bs)
NS_METHOD nsWindow::CreateNative(GtkObject *parentWidget)
{
GdkSuperWin *superwin = 0;
GdkEventMask mask;
if (parentWidget) {
if (GDK_IS_SUPERWIN(parentWidget))
@@ -537,7 +538,6 @@ NS_METHOD nsWindow::CreateNative(GtkObject *parentWidget)
{
case eWindowType_dialog:
mIsToplevel = PR_TRUE;
mShell = gtk_window_new(GTK_WINDOW_DIALOG);
gtk_window_set_policy(GTK_WINDOW(mShell), PR_TRUE, PR_TRUE, PR_FALSE);
// gtk_widget_set_app_paintable(mShell, PR_TRUE);
@@ -604,17 +604,19 @@ NS_METHOD nsWindow::CreateNative(GtkObject *parentWidget)
break;
}
mask = (GdkEventMask)(GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_LEAVE_NOTIFY_MASK |
GDK_EXPOSURE_MASK |
GDK_FOCUS_CHANGE_MASK |
GDK_KEY_PRESS_MASK |
GDK_KEY_RELEASE_MASK |
GDK_POINTER_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK);
gdk_window_set_events(mSuperWin->bin_window,
(GdkEventMask)(GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_LEAVE_NOTIFY_MASK |
GDK_EXPOSURE_MASK |
GDK_FOCUS_CHANGE_MASK |
GDK_KEY_PRESS_MASK |
GDK_KEY_RELEASE_MASK |
GDK_POINTER_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK));
mask);
gtk_object_set_data (GTK_OBJECT (mSuperWin), "nsWindow", this);
gdk_window_set_user_data (mSuperWin->bin_window, (gpointer)mSuperWin);
@@ -1927,22 +1929,24 @@ nsWindow::HandleXlibConfigureNotifyEvent(XEvent *event)
gdk_superwin_clear_translate_queue(mSuperWin, event->xany.serial);
nsSizeEvent sevent;
sevent.message = NS_SIZE;
sevent.widget = this;
sevent.eventStructType = NS_SIZE_EVENT;
sevent.windowSize = new nsRect (event->xconfigure.x, event->xconfigure.y,
event->xconfigure.width, event->xconfigure.height);
sevent.point.x = event->xconfigure.x;
sevent.point.y = event->xconfigure.y;
sevent.mWinWidth = event->xconfigure.width;
sevent.mWinHeight = event->xconfigure.height;
// XXX fix this
sevent.time = 0;
AddRef();
OnResize(sevent);
Release();
delete sevent.windowSize;
if (mIsToplevel || mListenForResizes) {
nsSizeEvent sevent;
sevent.message = NS_SIZE;
sevent.widget = this;
sevent.eventStructType = NS_SIZE_EVENT;
sevent.windowSize = new nsRect (event->xconfigure.x, event->xconfigure.y,
event->xconfigure.width, event->xconfigure.height);
sevent.point.x = event->xconfigure.x;
sevent.point.y = event->xconfigure.y;
sevent.mWinWidth = event->xconfigure.width;
sevent.mWinHeight = event->xconfigure.height;
// XXX fix this
sevent.time = 0;
AddRef();
OnResize(sevent);
Release();
delete sevent.windowSize;
}
}
// Return the GtkMozArea that is the nearest parent of this widget