On Wed, Sep 11, 2013 at 12:45 PM, Robert Heller <hel...@deepsoft.com> wrote: > At Wed, 11 Sep 2013 03:25:57 +0200 Enlightenment developer list > <enlightenment-devel@lists.sourceforge.net> wrote: >> On Tue, Sep 10, 2013 at 7:45 PM, Robert Heller <hel...@deepsoft.com> wrote: >> > At Tue, 10 Sep 2013 17:51:38 +0100 Michael Blumenkrantz >> > <michael.blumenkra...@gmail.com> wrote: >> >> On Tue, 10 Sep 2013 12:34:21 -0400 >> >> Robert Heller <hel...@deepsoft.com> wrote: >> >> >> >> > I am in the process of modifying E17 (I want to add so additional >> >> > functionality to the file manager). One of the things I need to be >> >> > able to do >> >> > is have a 'modal' dialog, that is a dislog box that grabs the focus and >> >> > causes >> >> > the program (the file manager) to wait. I want events to be processed, >> >> > but I >> >> > want psuedo code like this: >> >> > >> >> > dialog = make_dialog(...); >> >> > show(dialog); >> >> > wait_for(dialog); >> >> > >> >> > The 'wait_for()' call would not return until the OK button or Cancel >> >> > (close) >> >> > button on the dialog has been clicked. It is not clear how to do this >> >> > -- the >> >> > documentation does not seem to cover this case (or I can't it in the >> >> > documentation). >> >> > >> >> > Any pointers would be helpful. Thanks in advance. >> >> >> >> yeahhh you can't do that. >> >> >> >> what you CAN do is something like the >> >> uhh...modules/conf_theme/e_int_config_wallpaper.c dialog does. you set the >> >> parent dialog (though make sure you do this AFTER you show both dialogs or >> >> it won't work) to set up your modal: the first param is your intended >> >> modal, >> >> the second is the parent window which is getting blocked. then you can >> >> basically just wait for the modal to die and you'll know that there will >> >> be >> >> no events on the parent. >> >> >> >> I'll say this, however: we STRONGLY discourage the use of modal dialogs in >> >> e. unless you have a really good reason for it, I'm unlikely to accept any >> >> patches which introduce modal dialogs. >> > >> > Yes, I fully understand the 'evils' of modal dialogs, but there are times >> > when >> > it is the only option. In this case I am interfacing to a library that has >> > a >> > callback that wants some input (a passphrase) and I cannot just return >> > without >> > the passphrase and I don't know (in advance) if the passphrase is even >> > needed >> > or what the hint for the passphrase is (this info gets passed into the >> > callback). And the callback might be called again if the passphrase is >> > wrong. >> > I may implement this with a subprocess, but then the subprocess itself will >> > need to have a modal dialog. I am only interested a *local* type modal >> > dialog. >> >> I did have exactly the same problem with all the stupid ssh library >> out there that where never designed to be integrated into a GUI. At >> the end, solution where tested in that order : >> - Use the library from a thread. >> - Implementation of ecore_coroutine, to be able to put a function in >> standby and go back to the main loop. >> - Use ssh binary and ecore_exe. >> - Implement a ssh library that does it right. >> >> I am now working on the fourth solution, all previous attemps resulted >> in failure. Take it as an hint on what you are trying to do and maybe >> jump directly to that solution. I have no idea what your library is >> doing, but I can tell you, it will be painful ! > > It was *easy* when I interfaced this library with Tcl/Tk. (Tcl/Tk handles > events and event loops differently -- one of the big advanges of a scripting > language.) The library is actually libgpgme. I *guess* I could fork a Tcl/Tk > script, except the dialog box that will pop up for the passphrase will look > totally out-of-place (won't be visually compatible with E).
Tcl/Tk was a scripting language :-) That can hide a lot of things. As for libgpgme, it is yet another library that wasn't designed for GUI in mind. So you can try with Ecore coroutine if you want. Also according to the documentation, it seems possible that libgpgme trigger the execution of a daemon to ask for the pass phrase. That smell like it could completely block E if that code was triggered from E... -- Cedric BAIL ------------------------------------------------------------------------------ How ServiceNow helps IT people transform IT departments: 1. Consolidate legacy IT systems to a single system of record for IT 2. Standardize and globalize service processes across IT 3. Implement zero-touch automation to replace manual, redundant tasks http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel