mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-01 03:22:48 -05:00
Add a general way to request an immediate top-level callback.
This is a little like schedule_timer, in that the callback you provide will be run from the top-level message loop of whatever application you're in; but unlike the timer mechanism, it will happen _immediately_. The aim is to provide a general way to avoid re-entrance of code, in cases where just _doing_ the thing you want done is liable to trigger a confusing recursive call to the function in which you came to the decision to do it; instead, you just request a top-level callback at the message loop's earliest convenience, and do it then. [originally from svn r10019]
This commit is contained in:
@ -869,6 +869,8 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
|
||||
} else
|
||||
sfree(handles);
|
||||
|
||||
run_toplevel_callbacks();
|
||||
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
|
||||
if (msg.message == WM_QUIT)
|
||||
goto finished; /* two-level break */
|
||||
@ -877,12 +879,11 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
|
||||
DispatchMessage(&msg);
|
||||
/* Send the paste buffer if there's anything to send */
|
||||
term_paste(term);
|
||||
/* If there's nothing new in the queue then we can do everything
|
||||
* we've delayed, reading the socket, writing, and repainting
|
||||
* the window.
|
||||
*/
|
||||
|
||||
if (must_close_session)
|
||||
close_session();
|
||||
|
||||
run_toplevel_callbacks();
|
||||
}
|
||||
|
||||
/* The messages seem unreliable; especially if we're being tricky */
|
||||
|
@ -738,6 +738,8 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
run_toplevel_callbacks();
|
||||
|
||||
if (n == WAIT_TIMEOUT) {
|
||||
now = next;
|
||||
} else {
|
||||
|
@ -585,6 +585,8 @@ int do_eventsel_loop(HANDLE other_event)
|
||||
|
||||
sfree(handles);
|
||||
|
||||
run_toplevel_callbacks();
|
||||
|
||||
if (n == WAIT_TIMEOUT) {
|
||||
now = next;
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user