I've found the problem.
It was due to the clock update fnct.
What I think is the following:
- due to speed of the EZ, the sysIdle() fnct that update the clock take a non
negligible time.
- conflicts could then occures when both the time and finder need to be
refresh.
Philippe
> Hi Micah,
>
> I'm tracing a bug in my program.
> I got very often the 2 following errors (not at the same time):
>
> *** PicoGUI ERROR (HANDLE) : Bad handle for widget text property
>
> This one appear when I close a popup -> I think that could occure when refresh
> of the background
>
> *** PicoGUI ERROR (INTERNAL) : Invalid widget in widget_set
>
> This one occure when I come back from a vforked app to my finder.
> And I think as before when refresh of the bkg.
>
> The most strange is that the errors doesn't occure when using XCopilot or the pc
> but only on the ChipSlice module... ??
>
> Do you have any clue?
> Could you tell me more about the signification of this errors?
> Thanks in advance
>
> Philippe
>
> ---------8<-----------------------------------------------------------
> /* $Id: sd_toolbar.c,v 1.7 2001/04/08 18:42:53 philippe Exp $
> *
> * sd_toolbar.c - Toolbar main app for SMARTDATA demo V0.4.
> * Derived from omnibar.c
> *
> * Author: Philippe Ney <[EMAIL PROTECTED]>
> * Copyright (C) 2001 SMARTDATA <www.smartdata.ch>
> *
> * omnibar.c - hopefully this will grow into a general interface
> * for starting and manipulating applications, but
> * for now it's pretty simple.
> * Copyright (C) 2000, 2001 Micah Dowty
> * <[EMAIL PROTECTED]>
> *
> * PicoGUI small and efficient client/server GUI
> * Copyright (C) 2000 Micah Dowty <[EMAIL PROTECTED]>
> *
> * This program is free software; you can redistribute it and/or
> * modify it under the terms of the GNU General Public License
> * as published by the Free Software Foundation; either version 2
> * of the License, or (at your option) any later version.
> *
> * This program is distributed in the hope that it will be useful,
> * but WITHOUT ANY WARRANTY; without even the implied warranty of
> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> * GNU General Public License for more details.
> *
> * You should have received a copy of the GNU General Public License
> * along with this program; if not, write to the Free Software
> * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
> *
> *
> */
>
> #include <sys/types.h> /* For making directory listings */
>
> #include <signal.h> /* for SIGKILL */
>
> #include <unistd.h> /* for vfork */
> #include <linux/wait.h> /* for WNOHANG */
>
> #include <time.h> /* For clock */
>
> #include <malloc.h> /* Dynamic memory is used for the array */
>
> #include <picogui.h>
>
> #define DEBUG
> #ifdef DEBUG
> # define DPRINTF printf
> #else
> # define DPRINTF __dummy__
> static inline __dummy__(const char* fmt, ...) {}
> #endif
>
> #ifdef UCLINUX
> static const char* PATH="/opt/desktop/";
> #else
> static const char*
> PATH="/home/philippe/SourceForge_dev/pc/cli_c/demos/data_finder/";
> #endif
>
> pghandle wClock;
> pid_t pid;
> char path[100];
> pghandle wGridbox,wRow,wButton;
> int iIsFinderDisplayed;
> int theme=0;
>
> /*
> * define the grid of the button for the Finder
> * a 'NULL' define a new line and a double 'NULL' for the end of the grid
> * (this is due to the algo for grid construction)
> */
> static char *buttongrid[] = {
> NULL,"ToDo","Web","Games",
> NULL,"Calculator","Mail","Expenses",
> NULL,"Adresses","Calendar","Notes",
> NULL,NULL
> };
>
> /* initialisation of variables */
> int Init(void) {
> iIsFinderDisplayed = 0;
> return 0;
> }
>
> int btnHandler(struct pgEvent *evt) {
> char appPath[100];
> char *c = (char *)pgGetPayload(evt->from);
> int status;
>
> sprintf(appPath,"%s%s/%s.app",PATH,c,c);
>
> pgLeaveContext();
> iIsFinderDisplayed = 0;
>
> pid = vfork();
> printf("vfork -> child pid: %i\n",pid);
> switch(pid) {
> case -1: /* error */
> printf("vfork failed\n");
> exit(1);
> break;
> case 0: /* child */
> DPRINTF("%s -- 1\n",__FUNCTION__);
> execlp(appPath,appPath,NULL);
> pgMessageDialogFmt("Error",0,"There was an error starting the\nfollowing
> program:\n%s",appPath);
> exit(1);
> }
> DPRINTF("%s -- 2\n",__FUNCTION__);
> /*
> * here we are in the parent so we have to reload the theme because the child
> * will load the default theme
> */
> strcpy(appPath,PATH);
> switch(theme) {
> case 0:
> strcat(appPath,"_Preferences/skins/sd_simple.th");
> break;
> case 1:
> strcat(appPath,"_Preferences/skins/sd_mono.th");
> break;
> case 2:
> strcat(appPath,"_Preferences/skins/sd_3D.th");
> break;
> default:
> strcat(appPath,"_Preferences/skins/sd_simple.th");
> break;
> }
> DPRINTF("%s -- 3\n",__FUNCTION__);
> pgLoadTheme(pgFromFile(appPath));
> DPRINTF("%s -- 4\n",__FUNCTION__);
> return 0;
> }
>
> /*----------------------------------------------------------------------------*/
> /* Popup window for contrast changes and theme chooser */
> /*----------------------------------------------------------------------------*/
>
> /* Exit popup button */
> int btnExitPopup(struct pgEvent *evt) {
> char themePath[100];
>
> DPRINTF("%s -- 1\n",__FUNCTION__);
> pgLeaveContext();
> DPRINTF("%s -- 2\n",__FUNCTION__);
> strcpy(themePath,PATH);
> switch(theme) {
> case 0:
> strcat(themePath,"_Preferences/skins/sd_simple.th");
> break;
> case 1:
> strcat(themePath,"_Preferences/skins/sd_mono.th");
> break;
> case 2:
> strcat(themePath,"_Preferences/skins/sd_3D.th");
> break;
> default:
> strcat(themePath,"_Preferences/skins/sd_simple.th");
> break;
> }
> DPRINTF("%s -- 3\n",__FUNCTION__);
> pgLoadTheme(pgFromFile(themePath));
> DPRINTF("%s -- 4\n",__FUNCTION__);
> return 0;
> }
>
> int btnMoreContrast(struct pgEvent *evt) {
> int i;
> pghandle *label = (pghandle *) evt->extra;
>
> DPRINTF("%s -- 1\n",__FUNCTION__);
> i = atoi(pgGetString(pgGetWidget(*label,PG_WP_TEXT)));
> DPRINTF("%s -- 2\n",__FUNCTION__);
> if(i<10) i++;
> DPRINTF("%s -- 3\n",__FUNCTION__);
> pgReplaceTextFmt(*label,"%i",i);
> printf("More Contrast: %i\n",i);
> return 0;
> }
> int btnLessContrast(struct pgEvent *evt) {
> int i;
> pghandle *label = (pghandle *) evt->extra;
>
> DPRINTF("%s -- 1\n",__FUNCTION__);
> i = atoi(pgGetString(pgGetWidget(*label,PG_WP_TEXT)));
> DPRINTF("%s -- 2\n",__FUNCTION__);
> if(i>0) i--;
> DPRINTF("%s -- 3\n",__FUNCTION__);
> pgReplaceTextFmt(*label,"%i",i);
> printf("Less Contrast\n");
> return 0;
> }
>
> int btnLoadSimpleSkin(struct pgEvent *evt) {
> char themePath[100];
>
> DPRINTF("%s -- 1\n",__FUNCTION__);
> strcpy(themePath,PATH);
> DPRINTF("%s -- 2\n",__FUNCTION__);
> strcat(themePath,"_Preferences/skins/sd_simple.th");
> DPRINTF("%s -- 3\n",__FUNCTION__);
> pgLoadTheme(pgFromFile(themePath));
> DPRINTF("%s -- 4\n",__FUNCTION__);
> theme=0;
> return 0;
> }
> int btnLoadMonoSkin(struct pgEvent *evt) {
> char themePath[100];
>
> DPRINTF("%s -- 1\n",__FUNCTION__);
> strcpy(themePath,PATH);
> DPRINTF("%s -- 2\n",__FUNCTION__);
> strcat(themePath,"_Preferences/skins/sd_mono.th");
> DPRINTF("%s -- 3\n",__FUNCTION__);
> pgLoadTheme(pgFromFile(themePath));
> DPRINTF("%s -- 4\n",__FUNCTION__);
> theme=1;
> return 0;
> }
> int btnLoad3DSkin(struct pgEvent *evt) {
> char themePath[100];
>
> DPRINTF("%s -- 1\n",__FUNCTION__);
> strcpy(themePath,PATH);
> DPRINTF("%s -- 2\n",__FUNCTION__);
> strcat(themePath,"_Preferences/skins/sd_3D.th");
> DPRINTF("%s -- 3\n",__FUNCTION__);
> pgLoadTheme(pgFromFile(themePath));
> DPRINTF("%s -- 4\n",__FUNCTION__);
> theme=2;
> return 0;
> }
>
> /* Prefs popup */
> int btnPrefs(struct pgEvent *evt) {
> pghandle wPopup;
> pghandle wPopupTb;
> pghandle wContrastTextBox;
> pghandle wContrastLevel;
> pghandle wSkinTitleBox;
> pghandle wSkinTypesBox;
> char path[150];
>
> DPRINTF("%s -- 1\n",__FUNCTION__);
> /* Create a Context for the popup */
> pgEnterContext();
>
> DPRINTF("%s -- 2\n",__FUNCTION__);
> wPopup = pgNewPopup(150,170);
>
> DPRINTF("%s -- 3\n",__FUNCTION__);
> wPopupTb = pgNewWidget(PG_WIDGET_TOOLBAR,0,0);
> pgSetWidget(PGDEFAULT,PG_WP_SIDE,PG_S_BOTTOM,0);
> pgNewWidget(PG_WIDGET_BUTTON,PG_DERIVE_INSIDE,wPopupTb);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString("Exit"),
> PG_WP_SIDE,PG_S_LEFT,
> 0);
> pgBind(PGDEFAULT,PG_WE_ACTIVATE,&btnExitPopup,NULL); /* handler */
>
> DPRINTF("%s -- 4\n",__FUNCTION__);
> pgNewWidget(PG_WIDGET_LABEL,PG_DERIVE_AFTER,wPopupTb);
> pgSetWidget(PGDEFAULT,PG_WP_TEXT,pgNewString(""),PG_WP_SIDE,PG_S_TOP,0);
>
> DPRINTF("%s -- 5\n",__FUNCTION__);
> /* A box that contain title and level of contrast as label widgets */
> wContrastTextBox = pgNewWidget(PG_WIDGET_BOX,PG_DERIVE_AFTER,0);
> pgSetWidget(PGDEFAULT,PG_WP_SIDE,PG_S_TOP,0);
>
> DPRINTF("%s -- 6\n",__FUNCTION__);
> /* The title and level in label widgets */
> pgNewWidget(PG_WIDGET_LABEL,PG_DERIVE_INSIDE,0);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString("Contrast: "),
> PG_WP_SIDE,PG_S_LEFT,
> 0);
> DPRINTF("%s -- 7\n",__FUNCTION__);
> wContrastLevel = pgNewWidget(PG_WIDGET_LABEL,PG_DERIVE_AFTER,0);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString("5"),
> PG_WP_SIDE,PG_S_LEFT,
> 0);
> DPRINTF("%s -- 8\n",__FUNCTION__);
> pgNewWidget(PG_WIDGET_LABEL,PG_DERIVE_AFTER,0);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString(" "),
> PG_WP_SIDE,PG_S_LEFT,
> 0);
>
> DPRINTF("%s -- 9\n",__FUNCTION__);
> /* Buttons to change contrast level */
> pgNewWidget(PG_WIDGET_BUTTON,PG_DERIVE_AFTER,0);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString("+"),
> PG_WP_SIDE,PG_S_RIGHT,
> 0);
> pgBind(PGDEFAULT,PG_WE_ACTIVATE,&btnMoreContrast,&wContrastLevel);
>
> DPRINTF("%s -- 10\n",__FUNCTION__);
> pgNewWidget(PG_WIDGET_BUTTON,PG_DERIVE_AFTER,0);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString("-"),
> PG_WP_SIDE,PG_S_RIGHT,
> 0);
> pgBind(PGDEFAULT,PG_WE_ACTIVATE,&btnLessContrast,&wContrastLevel);
>
> DPRINTF("%s -- 11\n",__FUNCTION__);
> pgNewWidget(PG_WIDGET_LABEL,PG_DERIVE_AFTER,wContrastTextBox);
> pgSetWidget(PGDEFAULT,PG_WP_TEXT,pgNewString("_________________________"),0);
> pgNewWidget(PG_WIDGET_LABEL,PG_DERIVE_AFTER,0);
> pgSetWidget(PGDEFAULT,PG_WP_TEXT,pgNewString(""),PG_WP_SIDE,PG_S_TOP,0);
>
> DPRINTF("%s -- 12\n",__FUNCTION__);
> wSkinTitleBox = pgNewWidget(PG_WIDGET_BOX,PG_DERIVE_AFTER,0);
> pgSetWidget(PGDEFAULT,PG_WP_SIDE,PG_S_TOP,0);
> pgNewWidget(PG_WIDGET_LABEL,PG_DERIVE_INSIDE,0);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString("Skins:"),
> PG_WP_SIDE,PG_S_LEFT,
> 0);
>
> DPRINTF("%s -- 13\n",__FUNCTION__);
> wSkinTypesBox = pgNewWidget(PG_WIDGET_BOX,PG_DERIVE_AFTER,wSkinTitleBox);
> pgSetWidget(PGDEFAULT,PG_WP_SIDE,PG_S_TOP,0);
>
> pgNewWidget(PG_WIDGET_BUTTON,PG_DERIVE_INSIDE,0);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString("Simple"),
> PG_WP_SIDE,PG_S_LEFT,
> 0);
> pgBind(PGDEFAULT,PG_WE_ACTIVATE,&btnLoadSimpleSkin,NULL);
>
> DPRINTF("%s -- 14\n",__FUNCTION__);
> pgNewWidget(PG_WIDGET_BUTTON,PG_DERIVE_AFTER,0);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString("Mono"),
> PG_WP_SIDE,PG_S_LEFT,
> 0);
> pgBind(PGDEFAULT,PG_WE_ACTIVATE,&btnLoadMonoSkin,NULL);
>
> DPRINTF("%s -- 15\n",__FUNCTION__);
> pgNewWidget(PG_WIDGET_BUTTON,PG_DERIVE_AFTER,0);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString("3D"),
> PG_WP_SIDE,PG_S_LEFT,
> 0);
> pgBind(PGDEFAULT,PG_WE_ACTIVATE,&btnLoad3DSkin,NULL);
>
> DPRINTF("%s -- 16\n",__FUNCTION__);
> pgNewWidget(PG_WIDGET_LABEL,PG_DERIVE_AFTER,wSkinTypesBox);
> pgSetWidget(PGDEFAULT,PG_WP_TEXT,pgNewString("_________________________"),0);
>
> DPRINTF("%s -- 17\n",__FUNCTION__);
> pgEventLoop();
> return 0;
> }
>
> /* Finder */
> int btnFinder(struct pgEvent *evt) {
> char* s;
> int i,status;
> char imgPath[100],maskPath[100];
>
> if(iIsFinderDisplayed) return 0;
>
> DPRINTF("%s -- 1\n",__FUNCTION__);
> if(pid) {
> kill(pid,SIGKILL);
> // printf("%s %s: KILL (SIGKILL) pid: %i\n",__FILE__,__FUNCTION__,pid);
> wait(&status); /* to get the zombie process of the child */
> }
>
> DPRINTF("%s -- 2\n",__FUNCTION__);
> /* Make panel */
> pgEnterContext();
> DPRINTF("%s -- 3\n",__FUNCTION__);
> pgRegisterApp(PG_APP_NORMAL,"Finder Panel",0);
>
> /* Init widgets */
> wGridbox=0;wRow=0;wButton=0;
>
> /* Box widget that occupies ... */
> DPRINTF("%s -- 4\n",__FUNCTION__);
> wGridbox = pgNewWidget(PG_WIDGET_BOX,0,0);
> pgSetWidget(PGDEFAULT,PG_WP_SIDE,PG_S_ALL,0); /* ... all the free space */
>
> /* The Finder panel */
> for (i=0;;i++) {
> s = buttongrid[i];
> if (s) { /* Add a button to the row */
> // sprintf(imgPath,"%s%s/%s.pnm",PATH,s,s);
> // sprintf(maskPath,"%s%s/%s_mask.pnm",PATH,s,s);
>
> DPRINTF("%s -- 5\n",__FUNCTION__);
> wButton = pgNewWidget(PG_WIDGET_FLATBUTTON,
> wButton ? PG_DERIVE_AFTER : PG_DERIVE_INSIDE,
> wButton ? wButton : wRow);
> DPRINTF("Set widget: %s\n",s);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString(s),
> // PG_WP_BITMAP,pgNewBitmap(pgFromFile(imgPath)),
> // PG_WP_BITMASK,pgNewBitmap(pgFromFile(maskPath)),
> PG_WP_SIZEMODE,PG_SZMODE_CNTFRACT,
> PG_WP_SIZE,pgFraction(1,3),
> 0);
> DPRINTF("%s setted\n",s);
> pgSetPayload(PGDEFAULT,(unsigned long) s);
> pgBind(PGDEFAULT,PG_WE_ACTIVATE,&btnHandler,NULL); /* handler */
> }
> else { /* Add a row */
> if (!buttongrid[i+1]) /* Two consecutive NULLs, exit */
> break;
> DPRINTF("%s -- 6\n",__FUNCTION__);
> wRow = pgNewWidget(PG_WIDGET_BOX,
> wRow ? PG_DERIVE_AFTER : PG_DERIVE_INSIDE,
> wRow ? wRow : wGridbox);
> pgSetWidget(PGDEFAULT,
> PG_WP_TRANSPARENT,1,
> PG_WP_SIDE,PG_S_BOTTOM,
> PG_WP_SIZEMODE,PG_SZMODE_CNTFRACT,
> PG_WP_SIZE,pgFraction(1,3),
> 0);
> wButton = 0;
> }
> }
> iIsFinderDisplayed = 1;
> return 0;
> }
>
> /* Called to update the clock */
> void sysIdle(void) {
> time_t now;
> struct tm *tt;
> char ct[30];
>
> time(&now); /* Get time */
> tt = localtime(&now);
> sprintf(ct,"%02i:%02i:%02i",tt->tm_hour,tt->tm_min,tt->tm_sec);
> pgReplaceText(wClock,ct);
> pgUpdate();
> }
>
> /* Main program */
> int main(int argc, char **argv) {
> pghandle fntLabel,fntLabelBold;
> char buf[20];
> int i;
> int help=0;
> int toolbarside=0;
> char themePath[100];
>
> /* Parse args */
> for(i=1; i<argc; ++i) {
>
> if( argv[i][0]=='-' ) {
> const char* arg = &argv[i][1];
>
> if(!strcmp(arg, "-help") || !strcmp(arg, "?") || !strcmp(arg, "h"))
> help = 1;
>
> else if(!strcmp(arg, "r"))
> toolbarside = 1;
>
> else if(!strcmp(arg, "l"))
> toolbarside = 2;
>
> else if(!strcmp(arg, "s"))
> theme = 0;
>
> else if(!strcmp(arg, "m"))
> theme = 1;
>
> else if(!strcmp(arg, "d"))
> theme = 2;
>
> else {
> puts("%s: bad option");
> printf("Try `%s --help' for more information.\n", argv[0]);
> exit(1);
> }
> }
> }
>
> /* Help */
> if(help) {
> printf("Usage: %s [OPTION]...\n", argv[0]);
> puts("ChipSlice demo V0.4");
> puts("");
> puts("options:");
> puts(" -?, -h, --help display this help");
> puts(" -r create an empty toolbar at the right side");
> puts(" -l create an empty toolbar at the left side");
> puts(" -s launch app with theme sd_simple (default)");
> puts(" -m launch app with theme sd_mono");
> puts(" -d launch app with theme sd_3D");
> exit(0);
> }
>
> /*
> * if toolbarside is 0, we are in the parent, then vfork to create child
> * process that will launch the sided toolbars
> */
> if(toolbarside == 0) {
> pid_t LeftTBpid,RightTBpid;
> long ltimer;
>
> LeftTBpid = vfork();
> printf("vfork -> child pid: %i\n",LeftTBpid);
> switch(LeftTBpid) {
> case -1: /* error */
> printf("vfork failed\n");
> exit(1);
> break;
> case 0: /* child */
> execlp(argv[0],argv[0],"-l",NULL);
> pgMessageDialogFmt("Error",0,"There was an error starting the\nfollowing
> program:\n%s",argv[0]);
> exit(1);
> break;
> }
> RightTBpid = vfork();
> printf("vfork -> child pid: %i\n",RightTBpid);
> switch(RightTBpid) {
> case -1: /* error */
> printf("vfork failed\n");
> exit(1);
> break;
> case 0: /* child */
> execlp(argv[0],argv[0],"-r",NULL);
> pgMessageDialogFmt("Error",0,"There was an error starting the\nfollowing
> program:\n%s",argv[0]);
> exit(1);
> break;
> default: /* parent */
> /*
> * delay to let the child construct the right toolbar otherwise, the
> * bottom right corner is taken by the main toolbar.
> */
> for(ltimer=0;ltimer<100;ltimer++) {
> DPRINTF(".");
> }
> break;
> }
> }
>
> /*
> * start of initialisations and graphical definitions
> */
> Init();
> pgInit(argc,argv);
>
> switch(toolbarside) {
>
> case 2:
> pgRegisterApp(PG_APP_TOOLBAR,"ToolBar",PG_APPSPEC_SIDE,PG_S_LEFT,0);
> pgEventLoop();
> return 0;
> break;
>
> case 1:
> pgRegisterApp(PG_APP_TOOLBAR,"ToolBar",PG_APPSPEC_SIDE,PG_S_RIGHT,0);
> pgEventLoop();
> return 0;
> break;
>
> case 0:
> strcpy(themePath,PATH);
> switch(theme) {
> case 0:
> strcat(themePath,"_Preferences/skins/sd_simple.th");
> break;
> case 1:
> strcat(themePath,"_Preferences/skins/sd_mono.th");
> break;
> case 2:
> strcat(themePath,"_Preferences/skins/sd_3D.th");
> break;
> default:
> strcat(themePath,"_Preferences/skins/sd_simple.th");
> break;
> }
> pgLoadTheme(pgFromFile(themePath));
> strcpy(themePath,PATH);
> strcat(themePath,"_Preferences/skins/sd_finder.th");
> pgLoadTheme(pgFromFile(themePath));
>
> DPRINTF("%s -- 1\n",__FUNCTION__);
> pgRegisterApp(PG_APP_TOOLBAR,"ToolBar",
> PG_APPSPEC_SIDE,PG_S_BOTTOM,
> 0);
>
> DPRINTF("%s -- 2\n",__FUNCTION__);
> pgNewWidget(PG_WIDGET_BUTTON,0,0);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString("Prefs"),
> 0);
> pgBind(PGDEFAULT,PG_WE_ACTIVATE,&btnPrefs,NULL);
>
> DPRINTF("%s -- 3\n",__FUNCTION__);
> pgNewWidget(PG_WIDGET_BUTTON,0,0);
> pgSetWidget(PGDEFAULT,
> PG_WP_TEXT,pgNewString("Finder"),
> 0);
> pgBind(PGDEFAULT,PG_WE_ACTIVATE,&btnFinder,NULL);
>
> DPRINTF("%s -- 4\n",__FUNCTION__);
> wClock = pgNewWidget(PG_WIDGET_LABEL,0,0);
> pgSetWidget(PGDEFAULT,
> PG_WP_SIDE,PG_S_RIGHT,
> PG_WP_TRANSPARENT,0,
> 0);
>
> /* Call the Finder panel */
> btnFinder(NULL);
>
> /* Run it. */
> pgSetIdle(1000,&sysIdle); /* This should make the clock run, but ... */
> pgEventLoop();
> return 0;
> break;
> }
> }
>
> /* The End */
> ---------8<-----------------------------------------------------------
>
> _______________________________________________
> Pgui-devel mailing list
> [EMAIL PROTECTED]
> http://lists.sourceforge.net/lists/listinfo/pgui-devel
_______________________________________________
Pgui-devel mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/pgui-devel