diff --git a/mozilla/widget/src/gtk/nsWidget.cpp b/mozilla/widget/src/gtk/nsWidget.cpp index ffb597d2e38..acc91ed6945 100644 --- a/mozilla/widget/src/gtk/nsWidget.cpp +++ b/mozilla/widget/src/gtk/nsWidget.cpp @@ -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)); diff --git a/mozilla/widget/src/gtk/nsWidget.h b/mozilla/widget/src/gtk/nsWidget.h index 25b7355885f..6a2c98c156c 100644 --- a/mozilla/widget/src/gtk/nsWidget.h +++ b/mozilla/widget/src/gtk/nsWidget.h @@ -373,6 +373,7 @@ protected: PRBool mShown; PRUint32 mPreferredWidth, mPreferredHeight; + PRBool mListenForResizes; GdkICPrivate *mIC; GdkICPrivate *GetXIC(); diff --git a/mozilla/widget/src/gtk/nsWindow.cpp b/mozilla/widget/src/gtk/nsWindow.cpp index 33904203f75..e038b957815 100644 --- a/mozilla/widget/src/gtk/nsWindow.cpp +++ b/mozilla/widget/src/gtk/nsWindow.cpp @@ -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