mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 561817 part C - restore the NestableTasksAllowed munging that was removed in patch B: I thought it was vestigial, but it's necessary, r=bent
This commit is contained in:
parent
e24771ce97
commit
5eb0c6e687
@ -1860,15 +1860,19 @@ PluginModuleChild::NPN_IntFromIdentifier(NPIdentifier aIdentifier)
|
||||
void
|
||||
PluginModuleChild::EnteredCall()
|
||||
{
|
||||
mIncallPumpingStack.AppendElement(false);
|
||||
mIncallPumpingStack.AppendElement();
|
||||
}
|
||||
|
||||
void
|
||||
PluginModuleChild::ExitedCall()
|
||||
{
|
||||
NS_ASSERTION(mIncallPumpingStack.Length(), "mismatched entered/exited");
|
||||
PRUint32 len = mIncallPumpingStack.Length() - 1;
|
||||
mIncallPumpingStack.TruncateLength(len);
|
||||
PRUint32 len = mIncallPumpingStack.Length();
|
||||
const IncallFrame& f = mIncallPumpingStack[len - 1];
|
||||
if (f._spinning)
|
||||
MessageLoop::current()->SetNestableTasksAllowed(f._savedNestableTasksAllowed);
|
||||
|
||||
mIncallPumpingStack.TruncateLength(len - 1);
|
||||
}
|
||||
|
||||
LRESULT CALLBACK
|
||||
@ -1876,9 +1880,13 @@ PluginModuleChild::NestedInputEventHook(int nCode, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PluginModuleChild* self = current();
|
||||
PRUint32 len = self->mIncallPumpingStack.Length();
|
||||
if (nCode >= 0 && len && !self->mIncallPumpingStack[len - 1]) {
|
||||
if (nCode >= 0 && len && !self->mIncallPumpingStack[len - 1]._spinning) {
|
||||
self->SendProcessNativeEventsInRPCCall();
|
||||
self->mIncallPumpingStack[len - 1] = true;
|
||||
IncallFrame& f = self->mIncallPumpingStack[len - 1];
|
||||
f._spinning = true;
|
||||
MessageLoop* loop = MessageLoop::current();
|
||||
f._savedNestableTasksAllowed = loop->NestableTasksAllowed();
|
||||
loop->SetNestableTasksAllowed(true);
|
||||
}
|
||||
|
||||
return CallNextHookEx(NULL, nCode, wParam, lParam);
|
||||
|
@ -307,7 +307,18 @@ private:
|
||||
|
||||
// Entered/ExitedCall notifications keep track of whether the plugin has
|
||||
// entered a nested event loop within this RPC call.
|
||||
nsAutoTArray<bool, 8> mIncallPumpingStack;
|
||||
struct IncallFrame
|
||||
{
|
||||
IncallFrame()
|
||||
: _spinning(false)
|
||||
, _savedNestableTasksAllowed(false)
|
||||
{ }
|
||||
|
||||
bool _spinning;
|
||||
bool _savedNestableTasksAllowed;
|
||||
};
|
||||
|
||||
nsAutoTArray<IncallFrame, 8> mIncallPumpingStack;
|
||||
|
||||
static LRESULT CALLBACK NestedInputEventHook(int code,
|
||||
WPARAM wParam,
|
||||
|
Loading…
Reference in New Issue
Block a user