/*****************************************************************************/ /* Enlightenment - The Window Manager that dares to do what others don't */ /*****************************************************************************/ /* Copyright (C) 1997 - 1999 Carsten Haitzler (The Rasterman) */ /* */ /* This program and utilites is free software; you can redistribute it */ /* and/or modify it under the terms of the License shown in COPYING */ /* */ /* This software 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. */ /*****************************************************************************/ #include "econfig.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "econfig.h" #ifndef ENLIGHTENMENT_ROOT #define ENLIGHTENMENT_ROOT "/usr/local/enlightenment" #endif #define ENLIGHTENMENT_SYSTEM_CONFIG ENLIGHTENMENT_ROOT"/system_config" #define ENLIGHTENMENT_SYSTEM_THEMES ENLIGHTENMENT_ROOT"/themes" #define ENLIGHTENMENT_SYSTEM_BGS ENLIGHTENMENT_ROOT"/backgrounds" #define LIST_FINDBY_NAME 0 #define LIST_FINDBY_ID 1 #define LIST_FINDBY_BOTH 2 #define LIST_FINDBY_NONE 3 #define LIST_TYPE_COUNT 18 #define LIST_TYPE_ANY 0 #define LIST_TYPE_CLIENT 1 typedef struct _list { int type; char *name; int id; void *item; struct _list *next; } List; typedef struct _client { char *name; Window win; char *msg; char *clientname; char *version; char *author; char *email; char *web; char *address; char *info; Pixmap pmap; } Client; typedef struct _root { Window win; Visual *vis; int depth; Colormap cmap; int scr; int w, h; Window focuswin; } Root; int EExit(void *code); void *Emalloc(int size); void *Erealloc(void *ptr, int size); void Efree(void *ptr); void *FindItem(char *name, int id, int find_by, int type); void AddItem(void *item, char *name, int id, int type); void *RemoveItem(char *name, int id, int find_by, int type); void **ListItemType(int *num, int type); char **ListItems(int *num, int type); void **ListItemTypeID(int *num, int type, int id); void SetupX(void); void CommsSetup(void); void CommsFindCommsWindow(void); void CommsSend(Client * c, char *s); char *CommsGet(Client ** c, XEvent * ev); Client *MakeClient(Window win); void ListFreeClient(void *ptr); void DeleteClient(Client * c); void HandleComms(XEvent * ev); #if defined(__FILE__) && defined(__LINE__) #define Efree(x) \ { \ if (x) \ __Efree(x); \ else \ Alert("%s:%d: Attempt to free a NULL pointer\n", __FILE__, __LINE__); \ } #define Emalloc(x) \ __Emalloc(x) #define Erealloc(x, y) \ __Erealloc(x, y) #else #define Efree(x) \ { \ if (x) \ __Efree(x); \ else \ Alert("??:??: Attempt to free a NULL pointer\n"); \ } #define Emalloc(x) \ __Emalloc(x) #define Erealloc(x, y) \ __Erealloc(x, y) #endif void *__Emalloc(int size); void *__Erealloc(void *ptr, int size); void __Efree(void *ptr); char *duplicate(char *s); #define FILEPATH_LEN_MAX 4096 /* This turns on E's internal stack tracking system for coarse debugging */ /* and being able to trace E for profiling/optimisation purposes (which */ /* believe it or not I'm actually doing) */ /* #define DEBUG 1 */ #ifdef DEBUG extern int call_level; extern int debug_level; #endif #ifdef DEBUG #define EDBUG(l,x) \ { \ int i_call_level; \ if (l