diff --git a/mozilla/widget/src/gtk/nsWindow.cpp b/mozilla/widget/src/gtk/nsWindow.cpp index 141d988c0ec..e8c01cd2c01 100644 --- a/mozilla/widget/src/gtk/nsWindow.cpp +++ b/mozilla/widget/src/gtk/nsWindow.cpp @@ -64,6 +64,7 @@ nsWindow::nsWindow() mFont = nsnull; mSuperWin = 0; mMozArea = 0; + mMozAreaClosestParent = 0; mMenuBar = nsnull; mIsTooSmall = PR_FALSE; @@ -1915,20 +1916,28 @@ nsWindow::GetMozArea() GdkWindow *parent = mSuperWin->shell_window; GtkWidget *widget; - if (mMozArea == nsnull) - while (parent) - { - gdk_window_get_user_data (parent, (void **)&widget); - if (widget != nsnull && GTK_IS_MOZAREA (widget)) - { - mMozArea = widget; - break; - } - parent = gdk_window_get_parent (parent); - parent = gdk_window_get_parent (parent); - } + if (mMozAreaClosestParent) + { + return (GtkWidget *)mMozAreaClosestParent; + } + if ((mMozAreaClosestParent == nsnull) && mMozArea) + { + mMozAreaClosestParent = mMozArea; + return (GtkWidget *)mMozAreaClosestParent; + } + while (parent) + { + gdk_window_get_user_data (parent, (void **)&widget); + if (widget != nsnull && GTK_IS_MOZAREA (widget)) + { + mMozAreaClosestParent = widget; + break; + } + parent = gdk_window_get_parent (parent); + parent = gdk_window_get_parent (parent); + } - return (GtkWidget *)mMozArea; + return (GtkWidget *)mMozAreaClosestParent; } diff --git a/mozilla/widget/src/gtk/nsWindow.h b/mozilla/widget/src/gtk/nsWindow.h index e9c1ad403e9..5a27162e1b0 100644 --- a/mozilla/widget/src/gtk/nsWindow.h +++ b/mozilla/widget/src/gtk/nsWindow.h @@ -169,6 +169,7 @@ protected: GtkWidget *mShell; /* used for toplevel windows */ GdkSuperWin *mSuperWin; GtkWidget *mMozArea; + GtkWidget *mMozAreaClosestParent; nsIMenuBar *mMenuBar; private: