Hi Josh,

Admittedly this isn't obvious from the documentation, but windows
should be destroyed this way:

        AG_ObjectDetach(win);

Detached windows are automatically freed by the event loop, so calls
such as AG_ObjectDestroy() or free() must not be used. To pass a
pointer to the window to your event handler routine:

        AG_ButtonNewFn(win, 0,
            "Button Function", Button_Function, "%p", win);

        static void
        Button_Function(AG_Event *event)
        {
                AG_Window *win = AG_PTR(1);
        
                AG_ObjectDetach(win);
         }

On Wed, Nov 07, 2012 at 01:30:46AM +0000, Josh Branning wrote:
> Hello all, I've got agar working on Debian now, I had to do ldconfig
> after installing.
> 
> I now attempting to close a window, using a function that is triggered
> from a button, but I am running into difficulties. If anyone knows what
> I need to replace /* Close "win" */ with in order to close the window
> named "win", I'd be a very happy person! :)
> 
> #include <string.h>
> 
> static void
> Button_Function(AG_Event *event)
> {
> 
>       /* Do something then ... */
>       
>       /* Close "win" */
> }
> 
> static void
> Button(AG_Event *event)
> {
>       AG_Window *winParent = AG_PTR(1);
>       AG_Window *win;
> 
>       /* Create our window. */
>       if ((win = AG_WindowNew(0)) == NULL) {
>               return;
>       }
>       AG_WindowSetCaption(win, "This is the window I would like to close from
> Button_Function");
> 
>       AG_ButtonNewFn(win, 0,
>           "Button Function", Button_Function, "%p", 0);
> 
>       AG_WindowSetGeometryAligned(win, AG_WINDOW_ML, 320, 240);
>       AG_WindowAttach(winParent, win);
>       AG_WindowShow(win);
> }
> 
> int
> main(int argc, char *argv[])
> {
> 
>       if (AG_InitCore(NULL, 0) == -1 ||
>           AG_InitGraphics(0) == -1)
>               return (1);
> 
>       AG_Window *mainWin;
> 
>       /* Create our window. */
>       if ((mainWin = AG_WindowNew(0)) == NULL) {
>               return -1;
>       }
>       AG_WindowSetCaption(mainWin, "Test");
> 
>       /* Create a polled table. */
>       AG_ButtonNewFn(mainWin, 0,
>           "Button", Button, NULL, 0);
> 
>       /* Display and resize our window. */
>       AG_WindowSetGeometryAligned(mainWin, AG_WINDOW_ML, 640, 480);
>       AG_WindowShow(mainWin);
> 
>       AG_EventLoop();
>       return (0);
> }
> 
> _______________________________________________
> Agar mailing list
> [email protected]
> http://libagar.org/lists.html

_______________________________________________
Agar mailing list
[email protected]
http://libagar.org/lists.html

Reply via email to