Easier will be to disable the IupFlush on the close of that dialog. Set
NOFLUSH=Yes.

 But it seems to me that your timer is doing something that prevents the
popup loop to end.

Best,
Scuri


Em qui., 27 de mai. de 2021 às 18:11, Isaac Raway <is...@mm.st> escreveu:

> Scuri,
>
> Ah great, this was enough for me to figure out what was going on, well...
> sort of.
>
> I did have 3 timers, one of which had a very small interval of 1 (TIME=1).
>
> If I change this to TIME=100 the problem seemed to go away, but would
> impact performance of the module that it was calling (a web server's
> polling function).
>
> So instead I implemented my own message loop:
>
> However there are two issues:
>
> 1. I'm not sure how to know when to exit the loop
> 2. The documentation for IupLoopStep says:
>
> "Note that this function does not replace IupMainLoop."
>
> So, are there things that IupLoopStep doesn't do that are needed for IUP
> to be healthy? Is there an example on completely replacing IupMainLoop with
> a custom event loop?
>
>
>
> On Wed, May 26, 2021, at 10:19 PM, Antonio Scuri wrote:
>
>   Hi,
>
>   IupPopup starts a new message loop that will return only when one of the
> following occurs: "a callback returns IUP_CLOSE, IupExitLoop is called, or
> when the popup dialog is hidden, for example using IupHide".
>
>   It looks that you are doing it right, but this: "IupHide never returns
> and all following events are handled inside IupHide." Is quite weird. There
> is no message processing in IupHide, but IupFlush is called. So pending
> messages are processed. I noticed you have a timer, it may process the
> timer and call the timer callback.
>
>   If this does not help you find the problem, then to be able to reproduce
> the problem here I'll need a small example code. For instance, you can
> change one of the pre-defined samples.
>
>   Sorry for taking so long.
>
> Best,
> Scuri
>
>
>
> Em qua., 26 de mai. de 2021 às 14:14, Antonio Scuri <
> antonio.sc...@gmail.com> escreveu:
>
>  Later today, I'll see this.
>
> Best,
> Scuri
>
> Em qua., 26 de mai. de 2021 às 14:12, Isaac Raway <is...@mm.st> escreveu:
>
>
> Could really use some help with this. This bug is bad enough and hard
> enough to track down I'm being forced to consider using a different
> toolkit, which would be a ton of work and isn't really something I want to
> do. Is there any way to figure out why these functions aren't returning as
> documented?
>
> IJR
>
> On Thu, May 13, 2021, at 10:27 AM, Isaac Raway wrote:
>
> I should clarify that the callback below is on CLOSE_CB as well as ACTION
> of the OK button on the form. When I close the dialog box with the windows
> close button, it works correctly (callback is fired, and IupPopup returns,
> where the data is saved). But it does *not* work when clicking the OK
> button -- IupHide never returns and all following events are handled inside
> IupHide.
>
> I tried removing the event callback from CLOSE_CB but the result is the
> same when clicking the OK button:
>
> > stonenotes_nt.exe!win_dialog_ok_cb(Ihandle_ * self) Line 125 C
> [External Code]
> stonenotes_nt.exe!win_dialog_show(const char * id, const char *
> ledFilename, int(*)(Ihandle_ *) callback, int(*)(WIN_DIALOG *, void *)
> value_callback, void * data) Line 120 C
> stonenotes_nt.exe!win_options_categories(Ihandle_ * self) Line 2748 C
> [External Code]
> stonenotes_nt.exe!win_dialog_ok_cb(Ihandle_ * self) Line 133 C
> [External Code]
> stonenotes_nt.exe!win_dialog_show(const char * id, const char *
> ledFilename, int(*)(Ihandle_ *) callback, int(*)(WIN_DIALOG *, void *)
> value_callback, void * data) Line 120 C
> stonenotes_nt.exe!win_options_categories(Ihandle_ * self) Line 2748 C
> [External Code]
> stonenotes_nt.exe!main(int argc, char * * argv) Line 136 C++
> [External Code]
>
>
> Also here is the dialog setup code in case that helps:
>
>
> tWIN_DIALOG *win_dialog_show(const char *id, const char *ledFilename,
> Icallback callback, dialog_value_callback value_callback, void *data)
> {
>     tWIN_DIALOG *result = calloc(1, sizeof(tWIN_DIALOG));
>     Ihandle *config = get_config();
>     sds attr;
>     int immediate_show = 0;
>     int x = 0, y = 0;
>
>    char *error = sys_load_led(ledFilename); // this function calls IupLoad
> and returns the result after locating the file
>     if (NULL == error) {
>         sds key = NULL;
>
>         // get handles from loaded LED file
>         result->ok = IupGetHandle(key = sdscatfmt(sdsempty(), "IDC_%s_OK",
> id));
>         sdsfree(key);
>
>         result->cancel = IupGetHandle(key = sdscatfmt(sdsempty(),
> "IDC_%s_CANCEL", id));
>         sdsfree(key);
>
>         result->dlg = IupGetHandle(key = sdscatfmt(sdsempty(), "IDD_%s",
> id));
>         sdsfree(key);
>     } else {
>         result->dlg = IupSetAttributes(IupDialog(IupLabel(error)),
> "TITLE=\"StoneNotes Dialog Load - ERROR\", SIZE=400x200,
> EXPANDCHILDREN=YES, RESIZE=YES");
>     }
>
>     IupSetAttribute(result->dlg, "MINBOX", "NO");
>
>     //IupSetCallback(result->dlg, "CLOSE_CB", (Icallback)win_dialog_ok_cb);
>     //IupSetAttribute(result->dlg, "WIND", (char *)result);
>
>     IupSetCallback(result->ok, "ACTION", (Icallback)win_dialog_ok_cb);
>     IupSetAttribute(result->ok, "WIND", (char *)result);
>
>     IupSetCallback(result->cancel, "ACTION",
> (Icallback)win_dialog_cancel_cb);
>     IupSetAttribute(result->cancel, "WIND", (char *)result);
>
>     // .. snip .. removed additional elements on the form
>
>     IupPopup(result->dlg, IUP_CENTER, IUP_CENTER);
>     return result;
> }
>
> IJR
>
> On Wed, May 12, 2021, at 12:31 PM, Isaac Raway wrote:
>
> For some reason I've noticed that calls to IupPopup have stopped returning.
>
> My dialogs have a callback for CLOSE_CB like this:
>
> int win_dialog_ok_cb(Ihandle *self)
> {
>     tWIN_DIALOG *dialog = (tWIN_DIALOG *)IupGetAttribute(self, "WIND");
>     Ihandle *config = get_config();
>     sds val;
>
>     dialog->ok_clicked = 1;
>
>     IupHide(dialog->dlg);
>
>     return IUP_DEFAULT;
> }
>
>
> This has always worked before, but now it seems that the IupHide call
> enters a new loop which processes events from my main window.
>
> I tried returning IUP_CLOSE instead and commenting out IupHide, but the
> loop appears to be entered instead after the callback returns.
>
> [External Code]
> ... snip, below is a IUP timer callback ..
> stonenotes_nt.exe!win_ipc_timer(Ihandle_ * self) Line 4203 C
> [External Code]
> > stonenotes_nt.exe!win_dialog_show(const char * id, const char *
> ledFilename, int(*)(Ihandle_ *) callback, int(*)(WIN_DIALOG *, void *)
> value_callback, void * data) Line 120 C
> stonenotes_nt.exe!win_options_categories(Ihandle_ * self) Line 2748 C
> [External Code]
> stonenotes_nt.exe!main(int argc, char * * argv) Line 136 C++
> [External Code]
>
>
> My win_dialog_show function is what calls IupPopup. This function is never
> returned to, the rest of the execution happens inside the IupPopup call
> (2nd External Code above).
>
> Any ideas why this would have changed?
>
> _______________________________________________
> Iup-users mailing list
> Iup-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/iup-users
>
>
>
> _______________________________________________
> Iup-users mailing list
> Iup-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/iup-users
>
>
> _______________________________________________
> Iup-users mailing list
> Iup-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/iup-users
>
>
> _______________________________________________
> Iup-users mailing list
> Iup-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/iup-users
>
>
> _______________________________________________
> Iup-users mailing list
> Iup-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/iup-users
>
_______________________________________________
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to