зеркало из https://github.com/mozilla/pjs.git
Fix infinite loop on scrollbar resize from waterson@netscape.com
(Chris Waterson). The problem with resizing on XFE has to do with the fact that the widget resize callback is directly calling LO_RelayoutOnResize(), which causes the scrollbars to get remapped, which causes the resize callback to be called, which causes LO_RelayoutOnResize() to be called, which causes the scrollbars to get remapped...you get the idea.
This commit is contained in:
Родитель
866ca33912
Коммит
61902f4d90
|
@ -28,6 +28,8 @@
|
||||||
#include "new_manage.h"
|
#include "new_manage.h"
|
||||||
#include "new_manageP.h"
|
#include "new_manageP.h"
|
||||||
|
|
||||||
|
#include <Xfe/Xfe.h>
|
||||||
|
|
||||||
/* for XP_GetString() */
|
/* for XP_GetString() */
|
||||||
#include <xpgetstr.h>
|
#include <xpgetstr.h>
|
||||||
|
|
||||||
|
@ -1204,6 +1206,15 @@ fe_scroller_resize (Widget widget, XtPointer closure)
|
||||||
Dimension w = 0, h = 0;
|
Dimension w = 0, h = 0;
|
||||||
Boolean relayout_p = False;
|
Boolean relayout_p = False;
|
||||||
|
|
||||||
|
#ifdef ENABLE_MARINER
|
||||||
|
/* If we're already resizing (set below...), then DO NOT bother to
|
||||||
|
do anything in here. Doing so would cause an infinite recursion:
|
||||||
|
Mariner will resize the widget, which will call this, which will
|
||||||
|
call Mariner, which will resize the widget...you get the idea. */
|
||||||
|
if (CONTEXT_DATA(context)->is_resizing)
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
XtVaGetValues (widget, XmNwidth, &w, XmNheight, &h, 0);
|
XtVaGetValues (widget, XmNwidth, &w, XmNheight, &h, 0);
|
||||||
|
|
||||||
relayout_p = ((Dimension) fep->scrolled_width) != w;
|
relayout_p = ((Dimension) fep->scrolled_width) != w;
|
||||||
|
@ -1320,6 +1331,11 @@ fe_scroller_resize (Widget widget, XtPointer closure)
|
||||||
LO_GetDocumentMargins(context, &margin_w, &margin_h);
|
LO_GetDocumentMargins(context, &margin_w, &margin_h);
|
||||||
|
|
||||||
LO_RelayoutOnResize(context, w, h, margin_w, margin_h);
|
LO_RelayoutOnResize(context, w, h, margin_w, margin_h);
|
||||||
|
|
||||||
|
/* Since we won't ever re-load this page (it's Mariner,
|
||||||
|
see), we need to clear this flag in anticipation of the
|
||||||
|
next resize. */
|
||||||
|
CONTEXT_DATA(context)->is_resizing = FALSE;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/* As vidur suggested in Bug 59214: because JS generated content
|
/* As vidur suggested in Bug 59214: because JS generated content
|
||||||
|
|
Загрузка…
Ссылка в новой задаче