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