I just need to set NOFLUSH on the dialog element itself?

On Thu, May 27, 2021, at 4:13 PM, Antonio Scuri wrote:
>  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 
>>>>>>> <mailto:Iup-users%40lists.sourceforge.net>
>>>>>>> https://lists.sourceforge.net/lists/listinfo/iup-users
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> Iup-users mailing list
>>>>>> Iup-users@lists.sourceforge.net 
>>>>>> <mailto:Iup-users%40lists.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 <mailto:Iup-users%40lists.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 <mailto:Iup-users%40lists.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