wmdrawer-0.10.5.orig/0000755000175000017500000000000010067336552015225 5ustar matrixmatrix00000000000000wmdrawer-0.10.5.orig/doc/0000755000175000017500000000000010067336544015773 5ustar matrixmatrix00000000000000wmdrawer-0.10.5.orig/doc/wmdrawer-it.sgml0000644000175000017500000001663610067336544021135 0ustar matrixmatrix00000000000000 manpage.1'. You may view the manual page with: `docbook-to-man manpage.sgml | nroff -man | less'. A typical entry in a Makefile or Makefile.am is: manpage.1: manpage.sgml docbook-to-man $< > $@ The docbook-to-man binary is found in the docbook-to-man package. Please remember that if you create the nroff version in one of the debian/rules file targets (such as build), you will need to include docbook-to-man in your Build-Depends control field. --> Chris"> Wesley"> September 29, 2002"> 1"> chris@cwwesley.net"> WMDRAWER"> Debian"> GNU"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2002 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; Applicazione per Window Maker che fornisce un "cassetto" &dhpackage; DESCRIZIONE &dhpackage; un'applicazione per WindowMaker che fornisce un'icona-cassetto (men rientrante) per lanciare comodamente le applicazioni usate pi frequentemente. Il cassetto retraibile ed animato. Nel cassetto possono essere definite pi colonne di pulsanti. Il file di configurazione automaticamente riletto ogni volta si effettua una modifica. Si possono eseguire istanze multiple del programma contemporaneamente. Caratteristiche configurabili: apertura e chiusura manuale/automatica del cassetto, forma del cursore all'interno del cassetto, direzione di apertura e velocit di animazione del cassetto, icona del cassetto ed immagine di sfondo delle icone. OPZIONI Usa config_file come file di configurazione al posto del default (~/.wmdrawerrc) Esegui in una finestra. Utile per gli utenti di AfterStep, Fvwm2, Sawfish e KDE. Mostra l'elenco delle opzioni. Mostra la versione del programma. FILES ~/.wmdrawerrc il file di configurazione di default per ogni utente. Ecco un esempio completamente commentato: # Esempio di file di configurazione per wmdrawer [general] # Icona dell'applicazione [opzionale] dock_icon panel-drawer.png # Immagine usata per lo sfondo delle icone [opzionale] icons_bg defaultTile.xpm # Direzione di apertura del cassetto # Dall'alto verso il basso = 0 # Da destra verso sinistra = 1 # Dal basso verso l'alto = 2 # Da sinistra verso destra = 3 direction 2 # Velocit di animazione del cassetto: 1, 2, 3, 4 [opzionale, default 1] animation_speed 1 # Modo del cursore nel cassetto: 0, 1, 2 [opzionale, default 2] cursor 2 # Apertura automatica del cassetto: 0, 1 [opzionale, default 0] show_on_hover 0 # Chiusura automatica del cassetto: 0, 1 [opzionale, default 0] hide_on_out 0 # Lancia l'applicazione in una finestra: 0, 1 [opzionale, default 0] # (Utile se si usa Fvwm2, AfterStep, Sawmill, KDE) windowed_mode 0 # Cartelle delle icone [images_paths] /usr/share/pixmaps /usr/local/share/pixmaps/ # Una prima colonna con 5 pulsanti # Ogni pulsante deve essere definito secondo la seguente sintassi: # immagine<SPAZIO e/o TABS>comando [column] gnome-term.png xterm galeon.xpm galeon -s sylpheed-vanilla.xpm sylpheed xchat.png xchat gnome-multimedia.png mplayer # Una seconda colonna con 5 pulsanti [column] gnome-audio2.png xmms gnome-gimp.png gimp gqview.png gqview gnome-calc2.png xcalc gftp.png gftp Una copia di questo esempio la si pu trovare in /usr/share/doc/wmdrawer/wmdrawerrc.example. VEDERE ANCHE wmaker (1) AUTORI Questo programma scritto e mantenuto da Valry Febvre (vfebvre@vfebvre.lautre.net). Questa pagina di manuale stata scritta da &dhusername; (&dhemail;) per il sistema &debian; (ma pu essere usata da altri). permessa la copia, la distribuzione e/o la modifica di questo documento sotto i termini della GNU Free Documentation License, Versione 1.1 o ogni versione successiva pubblicata dalla Free Software Foundation; senza Invariant Sections, Front-Cover Texts e Back-Cover Texts. La traduzione italiana stata effettuata da Fabio Stumbo (fabio.stumbo@unife.it). ALTRE INFORMAZIONI La webpage di wmdrawer http://people.easter-eggs.org/~valos/wmdrawer/wmdrawer.html. Sul sito si possono trovare informazioni varie su wmdrawer e scaricare l'ultima versione.
wmdrawer-0.10.5.orig/doc/wmdrawer.sgml0000644000175000017500000002264010067336544020513 0ustar matrixmatrix00000000000000 wmdrawer.1x'. You may view the manual page with: `docbook-to-man manpage.sgml | nroff -man | less'. A typical entry in a Makefile or Makefile.am is: manpage.1: manpage.sgml docbook-to-man $< > $@ The docbook-to-man binary is found in the docbook-to-man package. Please remember that if you create the nroff version in one of the debian/rules file targets (such as build), you will need to include docbook-to-man in your Build-Depends control field. --> Chris"> Wesley"> April 7, 2003"> 1"> chris@cwwesley.net"> WMDRAWER"> Debian"> GNU"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2002-2004 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; a dockapp providing a drawer to launch applications &dhpackage; [] DESCRIPTION &dhpackage; is a dock application (dockapp) that provides a drawer (retractable button bar) to conveniently launch applications. The drawer is retractable and animated. Several columns of buttons can been defined in the drawer. The configuration file is automaticaly reloaded if it changes. Multiple instances of the program can run at the same time. The buttons can be highlighted under the mouse cursor. A tooltip can be defined for each button. The drawer can be transparent (need SHAPE extension). Ability to launch several apps at once from the drawer. By holding down the key Shift or by using mouse buttons middle or right instead of left, you can keep the drawer opened. Adjustable behaviors: dock's image (logo), dock's width and height (for both min=12, max=128), automatic/manual opening and closing of the drawer, timeout value in miliseconds if automatic closing selected, drawer's opening direction and animation speed, mouse cursor type in the drawer, drawer's pseudo-transparency, icons' background image (only if transparency isn't activated), buttons' size (min=12, max=128), buttons' highlight type (0:none, 1:target, 2:shading), image used as highlight (target type only), color and darkening level for highlight (shading type only), drawer's border size, buttons' tooltips and tooltips' font OPTIONS Use FILE as config file instead of the default (~/.wmdrawerrc) and optionaly set instance name. Run in windowed mode. Useful for AfterStep, Fvwm, Sawfish and KDE users. Show summary of options. Show version of program. FILES ~/.wmdrawerrc is the default per-user configuration file. Here is a completely commented example. # Config file example for wmdrawer [general] # Dock's icon [optional] #dock_icon panel-drawer.png # Drawer's opening direction [required] # Top to bottom = 0 # Right to Left = 1 # Bottom to Top = 2 # Left to Right = 3 direction 2 # Image used for icons' background [optional] #icons_bg defaultTile.xpm # Allow icons' enlargement to fit them to buttons' size [optional, default 1] # 0 indicate that icons should never be larger than their original size. #icons_expand 1 # Activate the drawer's pseudo-transparency [optional, default 0] # if you choose transparency, icons_bg will be ignored #transparency 0 # dock's width: min=12, max=128 [optional, default=64] #dock_width 64 # dock's height: min=12, max=128 [optional, default=64] #dock_height 64 # buttons' size: min=12, max=128 [optional] # Useful for the people who want for example to have big icons # and to define several columns. #btns_size 32 # Icon's highlight type: 0, 1 or 2 [optional, default 2] # 0 : no highlight # 1 : target (unavailable if transparency is activated) # 2 : shading #highlight 2 # Image used as highlight [optional] # only used if you choice target type #highlight_img highlight.xpm # Tint icons by a specified color [optional, default #ffffff] # only used if you choice shading type #highlight_tint #ffffff # Shade icons at a specified level [optional, default 60] # only used if you choice shading type #highlight_sh 60 # Display buttons' tooltips [optional, default 1] #tooltips 1 # Tooltips' font [optional, default fixed] #tooltips_font fixed # Drawer's animation speed: 0, 1, 2, 3, 4 [optional, default 1] #animation_speed 1 # Mouse cursor in drawer: 0, 1, ..., 76 [optional, default 30] #cursor 30 # Auto opening of the drawer: 0, 1 [optional, default 0] #show_on_hover 0 # Auto closing of the drawer: 0, 1 [optional, default 0] #hide_on_out 0 # drawer's hiding timeout in miliseconds [optional, default 1000] #hide_timeout 1000 # Runs the dockapp in windowed mode: 0, 1 [optional, default 0] # Useful for AfterStep, Fvwm, Sawfish or KDE users. #windowed_mode 0 # Instance name so window manager can distinguish between multiple copies #instance_name distinguish_name # Drawer's border size in pixels [optional, default 1] #border_size 1 # Images directories [images_paths] /usr/share/pixmaps /usr/local/share/pixmaps/ # A first column with 5 buttons # Each button must be defined with this syntax: # (tooltip) (image) (command) [column] (X Terminal) (gnome-term.png) (xterm -bg black -fg wheat) (Galeon) (galeon.xpm) (galeon -s) (Sylpheed) (sylpheed.png) (sylpheed) (XChat) (xchat.png) (xchat) (MPlayer) (gnome-multimedia.png) (mplayer) # A second column with 5 buttons [column] (Xmms) (gnome-audio2.png) (xmms) (Gimp) (gnome-gimp.png) (gimp) (GQview) (gqview.png) (gqview) (Xcalc) (gnome-calc3.png) (xcalc) (GFtp) (gftp.png) (gftp) Look at /usr/share/doc/wmdrawer/wmdrawerrc.example for a copy of this example. SEE ALSO wmaker (1) AUTHOR This software is written and maintained by Valéry Febvre (vfebvre@vfebvre.lautre.net). This manual page was written by &dhusername; (&dhemail;) for the &debian; system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. OTHER INFO wmDrawer's webpage is at http://people.easter-eggs.org/~valos/wmdrawer/. Here you can find info about wmdrawer and download the latest version.
wmdrawer-0.10.5.orig/doc/wmdrawer.1x.gz0000644000175000017500000000567610067336544020532 0ustar matrixmatrix00000000000000"@wmdrawer.1xY{s3#~쩨 >$;Zm)V**jā !8I>{{wArRC Lk)BY@$ ˁ)惗Of&PgZKOE6=P`ޒF_5#NF'Opv]NO:t{e!23/T^\(L%\S ʵ)bedus QpDC%]>Qҙ>z4"#E!0EqksI6UQȬ*dTF,% r$y7)QkDIR&֫\,Ͽf#2/tNH}IfMOF*[-3W֣ԅvy'Ptn4 BC n2!qz}{^?ڽ~\o)d.e%z=vO]6><{!xqn{4m&:DG?!{DOFhth* =rP jEf8:A)諌F2gt4x/`O{ؗ5gW?lػӷgx^a!VueJ"*daQek $jxԙ&|rr1aԙF/j>?Q?Yϧś3OK1L)DjXU#9T yc2[%f:SwhH{6:28 g*i6>/,e (لRf )!Yg@u,kPRd!*E" =آH?RdCsRfT PM¶v\\k}lȵhHp-zX1 nEe$Ĩ -~u9({h7s#΅hDGGuO+@8\XAU4*e1)eޣ*D"e\ oa K2Ub;u{آW&w1 ۶][Hۺ,kYcDc K;M:swEzu>,4?2+.}W8;0x/L>%|8-}(OB+Z\JP9\kz/ L 9tl$it OlOO.OkBf g>%$R[E3]#` Qqump lVo ,Z+f. VCdu[dcP 1$ZdBm1'>[f֮'?;n\Εc<;# ;kVڲOXJl -:΄cűx*ۆExBqi햄.66yͷ μ&7=s)u~]GY5:%yN PWV5;Tx6g>^)'bMv }|UvG%t{^|][ztj ٍ%u{]EdV3 G_>Z[uSsRE14Ͳ4Y-kS^ ,9ndd5z1ߞۏo(6ǵN^L,*x[Tu&i=xu$'պ1aN{- 瞭^&ƒa7xp78(ɬ;\2q\dA`d{eTWuf(~LgffkemY)Nk/Q?8Iж#]"pj>N7;~>*,AD?":c2p~a:c5t7K4C ư/NR*LsPӅCmo?MUU;/6UoPxhTrŀ޽vT KtR2o8kAco`izPw`]8UpA^rzY▯F%;+UR Td 뤨ߋd=l Nw٧o U?,=@/?H5<߾V2p惽^əv3k)u`怲,5  #yB:tf8sÜq rAHt*Z;D*;) =Ss_輐G/g :}QThԼ,Nofiu&cl) =NҖε+uV^ gWt,M]ə=.e[,5́}ї t(;w}s|i3kk/t*Z}7+:ݧy!eQҀwףJ)X=h8</"7kwmdrawer-0.10.5.orig/TODO0000644000175000017500000000036210067336544015717 0ustar matrixmatrix00000000000000My ideas: --------- * Translate the manpage * Add other button animations ? * Better drawer animation for directions 0 and 3 ? External suggestions: --------------------- * Anti-aliasing on icons and fonts * ... all suggestions are welcome. wmdrawer-0.10.5.orig/wmdrawer.c0000644000175000017500000007706710067336544017243 0ustar matrixmatrix00000000000000/* wmDrawer (c) 2002-2004 Valery Febvre * * wmDrawer is a dock application (dockapp) which provides a * drawer (button bar) to launch applications from. * * 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 #include #include #include #include #if defined SOLARIS #include #include #endif #include "types_defs.h" #include #include #include "config.h" #include "graphics.h" #include "images.h" #include "pixmaps/defaultDockIcon.xpm" #include "pixmaps/defaultIconsBg.xpm" #include "pixmaps/defaultIcon.xpm" #include "pixmaps/defaultHighlightImg.xpm" static void signalHandler (int signum); static void quit (int status); static void xfreeAllMemory (void); static void buildDock (int argc, char *argv[]); static void setDockIcon (void); static void getDockPosition (void); static void getDrawerPosition (int *x, int *y); static void showDrawer (void); static void hideDrawer (void); static void buildDrawer (void); static void buildTooltip (void); static void highlightBtn (int col, int row); static void highlightBtnShading (int col, int row); static void highlightBtnTarget (int col, int row); static void unhighlightBtn (Window btnWin); static void rebuildApp (void); static void execCmd (const char *cmd); static void mySleep (unsigned long msec); static int xEnterEventOrTimeout (XEvent *e, unsigned long msec); static void convertMCoordIntoBCoord (int mcol, int mrow, int *bcol, int *brow); static void eventLoop (void); Display *display; static Window dockWin, dockIconWin; static drawingArea drawer, subDrawer, tooltip; static XFontStruct *font; drawerButton **btns; static Cursor cursor; static Pixmap highlightImgPix, highlightImgMask; static unsigned int drawerOpened = 0; static unsigned int dpyWidth, dpyHeight; static unsigned int dockX, dockY; static unsigned int drawerW, drawerH; static unsigned int btnDim = 0; static int highlightCol, highlightRow; extern drawerConfig config; extern unsigned int nbRows, nbCols, drawerOK; extern unsigned int useDefaultIconsBg, useDefaultDockIcon, useDefaultHighlightImg; int main (int argc, char **argv) { struct sigaction action; parseOptions (argc, argv); parseConfig (); buildDock (argc, argv); setDockIcon (); buildDrawer (); buildTooltip (); action.sa_handler = signalHandler; sigemptyset (&action.sa_mask); action.sa_flags = SA_NOCLDSTOP | SA_NODEFER; sigaction (SIGTERM, &action, NULL); sigaction (SIGINT, &action, NULL); sigaction (SIGCHLD, &action, NULL); eventLoop (); return 0; } static void signalHandler (int signum) { switch (signum) { case SIGINT: case SIGTERM: quit (EXIT_SUCCESS); break; case SIGCHLD: while (waitpid (-1, NULL, WNOHANG | WUNTRACED) > 0); break; default: quit (EXIT_FAILURE); } } static void quit (int status) { printf ("Bye bye, thx to use %s\n", PACKAGE); xfreeAllMemory (); freeAllMemory (); XCloseDisplay (display); exit (status); } void xfreeAllMemory (void) { unsigned int col, row; /* free buttons' pixmap and GC */ for (col=0; col 0) { printf ("%s warning: SHAPE extension not supported\n", PACKAGE); config.transparency = 0; } // create dock wins dockWin = XCreateSimpleWindow (display, DefaultRootWindow (display), 0, 0, config.dockW, config.dockH, 0, 0, 0); dockIconWin = XCreateSimpleWindow (display, DefaultRootWindow (display), 0, 0, config.dockW, config.dockH, 0, 0, 0); /* set ClassHint */ classhint = XAllocClassHint (); if (!classhint) { printf ("%s error: can't allocate memory for class hints!\n", PACKAGE); exit (EXIT_FAILURE); } classhint->res_class = PACKAGE; /* Ed Goforth */ /* Get the instanceName from the config file or command-line */ /* to set the client instance name (application name) */ /* so the window manager can differentiate between multiple instances. */ classhint->res_name = config.instanceName; XSetClassHint (display, dockWin, classhint); XSetClassHint (display, dockIconWin, classhint); XFree (classhint); // set name and icon name for dock wins XStoreName (display, dockWin, PACKAGE); XStoreName (display, dockIconWin, PACKAGE); XSetIconName (display, dockWin, PACKAGE); XSetIconName (display, dockIconWin, PACKAGE); /* set WMHints */ wmhints = XAllocWMHints (); if (!wmhints) { printf ("%s error: can't allocate memory for wm hints!\n", PACKAGE); exit (EXIT_FAILURE); } wmhints->flags = IconWindowHint | WindowGroupHint; if (config.windowedMode == 0) { wmhints->flags |= StateHint; wmhints->initial_state = WithdrawnState; } wmhints->window_group = dockWin; wmhints->icon_window = dockIconWin; XSetWMHints (display, dockWin, wmhints); XFree (wmhints); /* set SizeHints */ sizehints = XAllocSizeHints (); sizehints->flags = USSize; if (config.windowedMode == 0) { sizehints->flags |= USPosition; sizehints->x = sizehints->y = 0; } else { sizehints->flags |= PMinSize | PMaxSize; sizehints->min_width = sizehints->max_width = config.dockW; sizehints->min_height = sizehints->max_height = config.dockH; } sizehints->width = config.dockW; sizehints->height = config.dockH; XSetWMNormalHints (display, dockWin, sizehints); XFree (sizehints); /* Ed Goforth */ /* This allows window managers (such as WindowMaker) to pick up the */ /* command-line arguments that were used when the app was launched. */ /* This is particularly useful when docking. */ XSetCommand (display, dockWin, argv, argc); XSetCommand (display, dockIconWin, argv, argc); #define INPUT_MASK ButtonPressMask | ButtonReleaseMask | ExposureMask | EnterWindowMask | LeaveWindowMask | StructureNotifyMask | SubstructureNotifyMask XSelectInput (display, dockWin, INPUT_MASK); XSelectInput (display, dockIconWin, INPUT_MASK); #undef INPUT_MASK } static void setDockIcon (void) { Pixmap dockIconPix, dockIconMask, icon; int dockIconW, dockIconH; unsigned int dx, dy, res = 0; GC gc; XGCValues xgcv; if (useDefaultDockIcon == 0) res = createPixmapFromFile (config.dockIcon, &dockIconPix, &dockIconMask, &dockIconW, &dockIconH, config.dockW, config.dockH, RESIZE_SMALLER); if (useDefaultDockIcon == 1 || res == 0) createPixmapFromData ((const char **)defaultDockIcon_xpm, &dockIconPix, &dockIconMask, &dockIconW, &dockIconH, config.dockW, config.dockH, RESIZE_SMALLER); dx = (config.dockW - dockIconW) / 2; dy = (config.dockH - dockIconH) / 2; XShapeCombineMask (display, dockIconWin, ShapeBounding, dx, dy, dockIconMask, ShapeSet); XShapeCombineMask (display, dockWin, ShapeBounding, dx, dy, dockIconMask, ShapeSet); icon = XCreatePixmap (display, dockWin, config.dockW, config.dockH, (unsigned int)DefaultDepth (display, 0)); xgcv.clip_x_origin = dx; xgcv.clip_y_origin = dy; xgcv.clip_mask = dockIconMask; /* could be omitted */ xgcv.graphics_exposures = False; gc = XCreateGC (display, dockWin, GCClipMask|GCClipXOrigin|GCClipYOrigin|GCGraphicsExposures, &xgcv); XCopyArea (display, dockIconPix, icon, gc, 0, 0, dockIconW, dockIconH, dx, dy); XSetWindowBackgroundPixmap (display, dockWin, icon); XSetWindowBackgroundPixmap (display, dockIconWin, icon); if (icon != None) XFreePixmap (display, icon); XFreeGC (display, gc); if (dockIconPix != None) XFreePixmap (display, dockIconPix); if (dockIconMask != None) XFreePixmap (display, dockIconMask); XMapWindow (display, dockWin); XClearWindow (display, dockWin); XClearWindow (display, dockIconWin); XFlush (display); } static void getDockPosition (void) { Window win, frame, parent, root, *children; unsigned int nchildren; XWindowAttributes waP, waC; dpyWidth = DisplayWidth (display, XDefaultScreen (display)); dpyHeight = DisplayHeight (display, XDefaultScreen (display)); if (config.windowedMode == 1) { win = dockWin; } else { win = dockIconWin; } /* get frame win */ root = 0; frame = parent = win; while (parent != root) { frame = parent; XQueryTree (display, frame, &root, &parent, &children, &nchildren); dbg_msg (1, "Parent win: 0x%x\n", parent); if (children != None) XFree (children); } XGetWindowAttributes (display, frame, &waP); XGetWindowAttributes (display, win, &waC); dockX = waP.x + waC.x; dockY = waP.y + waC.y; dbg_msg (1, "Dock position: %d, %d\n", dockX, dockY); } static void getDrawerPosition (int *x, int *y) { getDockPosition (); switch (config.direction) { case topToBottom: *x = dockX - (int) (drawerW + config.borderSize*2 - config.dockW) / 2; *y = dockY + config.dockH; break; case rightToLeft: *x = dockX - (drawerW + config.borderSize*2); *y = dockY - (int) (drawerH + config.borderSize*2 - config.dockH) / 2; break; case bottomToTop: *x = dockX - (int) (drawerW + config.borderSize*2 - config.dockW) / 2; *y = dockY - (drawerH + config.borderSize*2); break; case leftToRight: *x = dockX + config.dockW; *y = dockY - (int) (drawerH + config.borderSize*2 - config.dockH) / 2; break; } if (*x < 0) *x = 0; if (*x + drawerW + config.borderSize*2 > dpyWidth - 1) { *x = dpyWidth - (drawerW + config.borderSize*2); } if (*y < 0) *y = 0; if (*y + drawerH + config.borderSize*2 > dpyHeight - 1) { *y = dpyHeight - (drawerH + config.borderSize*2); } } static void showDrawer (void) { int x, y; unsigned int dw, dh, inc; if (!drawerOK) return; drawerOpened = 1; highlightCol = highlightRow = -1; getDrawerPosition(&x, &y); // if no animation for drawer if (config.animationSpeed == 0) { XMoveResizeWindow (display, drawer.win, x, y, drawerW, drawerH); XMapRaised (display, drawer.win); return; } inc = (nbRows * btnDim) / ((5 - config.animationSpeed) * 4); switch (config.direction) { case topToBottom: for (dh = inc; dh < drawerH+inc; dh = dh+inc) { if (dh >= drawerH) { XMoveResizeWindow (display, drawer.win, x, y, drawerW, drawerH); } else { XMoveResizeWindow (display, drawer.win, x, y, drawerW, dh); } XMapRaised (display, drawer.win); XClearWindow (display, subDrawer.win); XSync (display, 0); mySleep (15); } break; case rightToLeft: for (dw = inc; dw < drawerW+inc; dw = dw+inc) { if (dw >= drawerW) { XMoveResizeWindow (display, drawer.win, x, y, drawerW, drawerH); } else { XMoveResizeWindow (display, drawer.win, dockX - dw - config.borderSize*2, y, dw, drawerH); } XMapRaised (display, drawer.win); XClearWindow (display, subDrawer.win); XSync (display, 0); mySleep (15); } break; case bottomToTop: for (dh = inc; dh < drawerH+inc; dh = dh+inc) { if (dh >= drawerH) { XMoveResizeWindow (display, drawer.win, x, y, drawerW, drawerH); } else { XMoveResizeWindow (display, drawer.win, x, dockY - dh - config.borderSize*2, drawerW, dh); } XMapRaised (display, drawer.win); XClearWindow (display, subDrawer.win); XSync (display, 0); mySleep (15); } break; case leftToRight: for (dw = inc; dw < drawerW+inc; dw = dw+inc) { if (dw >= drawerW) { XMoveResizeWindow (display, drawer.win, x, y, drawerW, drawerH); } else { XMoveResizeWindow (display, drawer.win, x, y, dw, drawerH); } XMapRaised (display, drawer.win); XClearWindow (display, subDrawer.win); XSync (display, 0); mySleep (15); } break; default: XMapWindow (display, drawer.win); } } static void hideDrawer (void) { int x, y; unsigned int dw, dh, inc; if (!drawerOK) return; drawerOpened = 0; XUnmapWindow (display, tooltip.win); // if no animation for drawer if (config.animationSpeed == 0) { XUnmapWindow (display, drawer.win); return; } inc = (nbRows * btnDim) / ((5 - config.animationSpeed) * 4); switch (config.direction) { case topToBottom: x = dockX - (int) (drawerW + config.borderSize*2 - config.dockW) / 2; if (x + drawerW + config.borderSize*2 > dpyWidth - 1) { x = dpyWidth - (drawerW + config.borderSize*2); } if (x < 0) x = 0; for (dh = drawerH - inc; dh >= inc; dh=dh-inc) { XMoveResizeWindow (display, drawer.win, x, dockY + config.dockH, drawerW, dh); XMapRaised (display, drawer.win); XSync (display, 0); mySleep (15); } break; case rightToLeft: y = dockY - (int) (drawerH + config.borderSize*2 - config.dockH) / 2; if (y + drawerH + config.borderSize*2 > dpyHeight - 1) { y = dpyHeight - (drawerH + config.borderSize*2); } if (y < 0) y = 0; for (dw = drawerW - inc; dw >= inc; dw=dw-inc) { XMoveResizeWindow (display, drawer.win, dockX - dw - config.borderSize*2, y, dw, drawerH); XMapRaised (display, drawer.win); XSync (display, 0); mySleep (15); } break; case bottomToTop: x = dockX - (int) (drawerW + config.borderSize*2 - config.dockW) / 2; if (x + drawerW + config.borderSize*2 > dpyWidth - 1) { x = dpyWidth - (drawerW + config.borderSize*2); } if (x < 0) x = 0; for (dh = drawerH - inc; dh >= inc; dh = dh-inc) { XMoveResizeWindow (display, drawer.win, x, dockY - dh - config.borderSize*2, drawerW, dh); XMapRaised (display, drawer.win); XSync (display, 0); mySleep (15); } break; case leftToRight: y = dockY - (int) (drawerH + config.borderSize*2 - config.dockH) / 2; if (y + drawerH + config.borderSize*2 > dpyHeight - 1) { y = dpyHeight - (drawerH + config.borderSize*2); } if (y < 0) y = 0; for (dw = drawerW - inc; dw >= inc; dw=dw-inc) { XMoveResizeWindow (display, drawer.win, dockX + config.dockW, y, dw, drawerH); XMapRaised (display, drawer.win); XSync (display, 0); mySleep (15); } break; } XUnmapWindow (display, drawer.win); } static void buildDrawer (void) { /* XColor cursor_color; */ unsigned int res = 0, x, y, xr, yr, row, col; int pixmapW, pixmapH; unsigned long resizeMask; Pixmap bgImgPix, bgImgMask; Pixmap iconPix, iconMask; if (!drawerOK) return; btns = config.entries; resizeMask = RESIZE_SMALLER; if (config.iconsExpand == 1) resizeMask |= RESIZE_GREATER; if (config.btnsSize == 0) { btnDim = config.dockW / nbCols; if (btnDim < MIN_ICON_SIZE) btnDim = MIN_ICON_SIZE; } else { btnDim = config.btnsSize; } if (config.direction == leftToRight || config.direction == rightToLeft) { drawerW = nbRows * btnDim; drawerH = nbCols * btnDim; } else { drawerW = nbCols * btnDim; drawerH = nbRows * btnDim; } dbg_msg(1, "drawerW = %d, drawerH = %d, btn dim = %d\n", drawerW, drawerH, btnDim); /* create drawer's root window */ drawer.win = XCreateSimpleWindow (display, DefaultRootWindow (display), 0, 0, drawerW, drawerH, config.borderSize, 0, 0); drawer.xswa.event_mask = EnterWindowMask | LeaveWindowMask; drawer.xswa.override_redirect = True; XChangeWindowAttributes (display, drawer.win, CWEventMask | CWOverrideRedirect, &(drawer.xswa)); if (config.transparency == 1) { XSetWindowBackgroundPixmap (display, drawer.win, ParentRelative); } /* create drawer's subwindow */ subDrawer.win = XCreateSimpleWindow (display, drawer.win, 0, 0, drawerW, drawerH, 0, 0, 0); subDrawer.xswa.event_mask = ButtonPressMask|ButtonReleaseMask|PointerMotionMask; subDrawer.xswa.override_redirect = False; XChangeWindowAttributes (display, subDrawer.win, CWEventMask | CWOverrideRedirect, &(subDrawer.xswa)); if (config.transparency == 1) { XSetWindowBackgroundPixmap (display, subDrawer.win, ParentRelative); } XMapWindow (display, subDrawer.win); /* highlight mask pixmap */ if (useDefaultHighlightImg == 0) { res = createPixmapFromFile (config.highlightImg, &highlightImgPix, &highlightImgMask, &pixmapW, &pixmapH, btnDim, btnDim, resizeMask); } if (useDefaultHighlightImg == 1 || res == 0) { createPixmapFromData ((const char **)defaultHighlightImg_xpm, &highlightImgPix, &highlightImgMask, &pixmapW, &pixmapH, btnDim, btnDim, resizeMask); } /* btn's background pixmap */ if (useDefaultIconsBg == 0) { res = createPixmapFromFile (config.iconsBg, &bgImgPix, &bgImgMask, &pixmapW, &pixmapH, btnDim, btnDim, resizeMask); } if (useDefaultIconsBg == 1 || res == 0) { createPixmapFromData ((const char **)defaultIconsBg_xpm, &bgImgPix, &bgImgMask, &pixmapW, &pixmapH, btnDim, btnDim, resizeMask); } /* Create boutons windows and set bg */ for (col=0; colfid); XSetForeground (display, tooltip.gc, BlackPixel (display, DefaultScreen (display))); XSetBackground (display, tooltip.gc, WhitePixel (display, DefaultScreen (display))); tooltip.xswa.event_mask = 0; tooltip.xswa.override_redirect = True; XChangeWindowAttributes (display, tooltip.win, CWEventMask | CWOverrideRedirect, &(tooltip.xswa)); } static void highlightBtn (int col, int row) { /* if transparency = 1 (pseudo transparency), only highlight shading works */ if (config.transparency == 1 && config.highlight == 1) { config.highlight = 2; } switch (config.highlight) { case 1: highlightBtnTarget (col, row); break; case 2: highlightBtnShading (col, row); break; } } static void highlightBtnShading (int col, int row) { XImage *img; ShadingInfo shade; img = XGetImage (display, btns[col][row].da.win, 0, 0, btnDim, btnDim, AllPlanes, ZPixmap); shade.shading = config.highlightShading.shading; shade.tintColor.red = config.highlightShading.tintColor.red * 256; shade.tintColor.green = config.highlightShading.tintColor.green * 256; shade.tintColor.blue = config.highlightShading.tintColor.blue * 256; ShadeXImage (display, img, &shade); /* gc is OK, nothing to do */ XPutImage (display, btns[col][row].da.win, btns[col][row].da.gc, img, 0, 0, 0, 0, btnDim, btnDim); XDestroyImage (img); if( !XCopyArea (display, btns[col][row].da.win, btns[col][row].da.win, btns[col][row].da.gc, 0, 0, btnDim, btnDim, 0, 0)) { XFillRectangle ( display, btns[col][row].da.win, btns[col][row].da.gc, 0, 0, btnDim, btnDim); } } static void highlightBtnTarget (int col, int row) { XGCValues xgcv; GC highlightGC; xgcv.clip_mask = highlightImgMask; highlightGC = XCreateGC (display, btns[col][row].da.win, GCClipMask, &xgcv); XCopyArea (display, highlightImgPix, btns[col][row].da.win, highlightGC, 0, 0, btnDim, btnDim, 0, 0); XFreeGC (display, highlightGC); } static void unhighlightBtn (Window btnWin) { //XClearArea (display, btnWin, 0, 0, btnDim, btnDim, False); XClearWindow (display, btnWin); } static void rebuildApp (void) { if (configChanged ()) { if (drawerOpened == 1) hideDrawer (); /* restore mouse cursor */ XUndefineCursor (display, drawer.win); xfreeAllMemory (); freeAllMemory (); parseConfig (); XResizeWindow(display, dockWin, config.dockW, config.dockH); XResizeWindow(display, dockIconWin, config.dockW, config.dockH); setDockIcon (); buildDrawer (); buildTooltip (); } } void execCmd (const char *cmd) { int cpid; cpid = fork (); if (cpid == -1) { printf ("%s error: can't fork\n", PACKAGE); } else if (cpid == 0) { setsid (); execl ("/bin/sh", "/bin/sh", "-c", cmd, NULL); exit (EXIT_SUCCESS); } } /* msec is miliseconds, msec <= 999 */ static void mySleep (unsigned long msec) { struct timespec req, rem; req.tv_sec = 0; req.tv_nsec = msec * 1000000; while (nanosleep (&req, &rem) != 0) { req = rem; } } static int xEnterEventOrTimeout (XEvent *e, unsigned long msec) { struct timeval timeout; fd_set rset; dbg_msg (1, "Enter xNextEventOrTimeout function\n"); XSync (display, False); if (XPending (display)) { XNextEvent (display, e); dbg_msg (1, "Event type = %d\n", e->type); if (e->type == EnterNotify) return 1; } timeout.tv_sec = msec / 1000; timeout.tv_usec = (msec % 1000) * 1000; FD_ZERO (&rset); FD_SET (ConnectionNumber (display), &rset); if (select (ConnectionNumber (display)+1, &rset, NULL, NULL, &timeout) > 0) { XNextEvent (display, e); return 1; } return 0; } /* Convert mouse coordinate into button coordinate */ static void convertMCoordIntoBCoord (int mcol, int mrow, int *bcol, int *brow) { switch (config.direction) { case topToBottom: case bottomToTop: *bcol = (int)((float)mcol / btnDim); *brow = (int)((float)mrow / btnDim); break; case rightToLeft: case leftToRight: *bcol = (int)((float)mrow / btnDim); *brow = (int)((float)mcol / btnDim); break; } } static void eventLoop (void) { XEvent e; int x, y, w ,h; /* coord of btn pressed */ int prow = 0, pcol = 0; /* btn's coord during motion */ int mrow = 0, mcol = 0; /* coord when btn released */ int rrow = 0, rcol = 0; /* X btn's coord */ int xbtn = 0, ybtn = 0; unsigned int delta, btnIsPressed = 0; while (True) { XNextEvent (display, &e); rebuildApp (); /* look at X.h & Xlib.h in /usr/X11R6/include/X11/ */ switch (e.type) { case Expose: dbg_msg (2, "Expose event: count = %d, win = 0x%x\n", e.xexpose.count, e.xexpose.window); break; case ReparentNotify : case ConfigureNotify: dbg_msg (1, "ConfigureNotify event\n"); if (drawerOpened == 1) { getDrawerPosition (&x, &y); XMoveWindow (display, drawer.win, x, y); } break; case MotionNotify: if (config.highlight == 0 || btnIsPressed == 1 || drawerOpened == 0) break; convertMCoordIntoBCoord(e.xmotion.x, e.xmotion.y, &mcol, &mrow); if (highlightCol == mcol && highlightRow == mrow) break; dbg_msg (1, "Motion event: win=0x%x, subwin=0x%x, (%d, %d) (%d, %d)\n", e.xmotion.window, e.xmotion.subwindow, highlightCol, highlightRow, mcol, mrow); if (mcol < 0 || mcol >= nbCols || mrow < 0 || mrow >= nbRows) break; /* Ok, first raise drawer */ XRaiseWindow (display, drawer.win); /* tooltips */ if (config.tooltips == 1) { if (!btns[mcol][mrow].isEmpty && strlen (btns[mcol][mrow].tooltip) > 0) { getDrawerPosition (&x, &y); w = XTextWidth (font, btns[mcol][mrow].tooltip, strlen(btns[mcol][mrow].tooltip)) + 8; h = font->max_bounds.ascent + font->max_bounds.descent + 4; switch (config.direction) { case rightToLeft: case leftToRight: x = x + mrow * btnDim + btnDim / 2; y = y + mcol * btnDim - h - 4; break; case bottomToTop: case topToBottom: x = x + mcol * btnDim + btnDim / 2; y = y + mrow * btnDim - h - 4; break; } if (x < 0) x = 0; if (x + w + 2 > dpyWidth - 1) x = dpyWidth - (w + 2); XMoveResizeWindow (display, tooltip.win, x, y, w, h); XMapRaised (display, tooltip.win); XClearWindow (display, tooltip.win); XDrawString (display, tooltip.win, tooltip.gc, 0 + 4, font->max_bounds.ascent + font->max_bounds.descent, btns[mcol][mrow].tooltip, strlen(btns[mcol][mrow].tooltip)); } else { XUnmapWindow (display, tooltip.win); } } /* highlight */ if (highlightCol >= 0 && highlightRow >= 0) { if (btns[highlightCol][highlightRow].isEmpty == 0) { unhighlightBtn (btns[highlightCol][highlightRow].da.win); } } if (btns[mcol][mrow].isEmpty == 0) { highlightBtn (mcol, mrow); highlightCol = mcol; highlightRow = mrow; } else highlightCol = highlightRow = -1; break; case ButtonPress: dbg_msg (1, "Button press event: win = 0x%x, cursor = (%d,%d)\n", e.xbutton.window, e.xbutton.y, e.xbutton.y); if (drawerOpened == 0) { showDrawer (); } else if (drawerOpened == 1 && e.xbutton.window != subDrawer.win) { hideDrawer (); } else if (drawerOpened == 1 && e.xbutton.window == subDrawer.win) { xbtn = e.xbutton.x / btnDim; ybtn = e.xbutton.y / btnDim; convertMCoordIntoBCoord (e.xbutton.x, e.xbutton.y, &pcol, &prow); delta = 1; if (btns[pcol][prow].isEmpty == 0) { btnIsPressed = 1; XMoveWindow (display, btns[pcol][prow].da.win, xbtn * btnDim + delta, ybtn * btnDim + delta); XMapRaised (display, btns[pcol][prow].da.win); XSync (display, 0); } } break; case ButtonRelease: dbg_msg (1, "Button release event: win = 0x%x, cursor = (%d,%d)\n", e.xbutton.window, e.xbutton.y, e.xbutton.y); btnIsPressed = 0; if (drawerOpened == 1 && e.xbutton.window == subDrawer.win) { convertMCoordIntoBCoord(e.xbutton.x, e.xbutton.y, &rcol, &rrow); if (btns[pcol][prow].isEmpty == 0) { XMoveWindow (display, btns[pcol][prow].da.win, xbtn * btnDim, ybtn * btnDim); XMapRaised (display, btns[pcol][prow].da.win); XSync (display, False); } if (prow == rrow && pcol == rcol && btns[pcol][prow].isEmpty == 0) { /* if release coord = press coord => OK exec cmd */ dbg_msg (1, "Command executed : %s (%d, %d)\n", btns[pcol][prow].command, pcol, prow); execCmd (btns[pcol][prow].command); if ((e.xbutton.state & ShiftMask) != 0 || e.xbutton.button != 1) { /* If Shift is down whilst selecting app keep the drawer open */ /* or mouse button != 1 => nothing */ } else { XUnmapWindow (display, tooltip.win); mySleep (500); hideDrawer (); } } } break; case EnterNotify: dbg_msg (1, "Enter window: 0x%x 0x%x, mode=%d, detail=%d\n", (unsigned int)e.xcrossing.window, drawer.win, e.xcrossing.mode, e.xcrossing.detail); /* mode != 2 to avoid EnterNotify event emit after ButtonRelease in windowed mode */ if (drawerOpened == 0 && config.showOnHover == 1 && e.xcrossing.mode != 2) { showDrawer (); } break; case LeaveNotify: dbg_msg (1, "Leave window: win=0x%x, mode=%d, detail=%d\n", (unsigned int)e.xcrossing.window, e.xcrossing.mode, e.xcrossing.detail); /* if we leave drawer => unhighlight the last button highlighted and unmap tooltip window */ if (config.highlight > 0 && btnIsPressed == 0 && drawerOpened == 1 && e.xcrossing.window == drawer.win && highlightCol >= 0 && highlightRow >= 0) { XUnmapWindow (display, tooltip.win); unhighlightBtn (btns[highlightCol][highlightRow].da.win); highlightCol = highlightRow = -1; } /* mode = NotifyNormal:0, NotifyGrab:1, NotifyUngrab:2, NotifyWhileGrabbed:3 mode != 1 to avoid LeaveNotify event emit before ButtonPress in windowed mode */ if (drawerOpened == 1 && config.hideOnOut == 1 && e.xcrossing.mode != 1) { if (! xEnterEventOrTimeout (&e, config.hideTimeout)) { hideDrawer (); } } break; case DestroyNotify: quit (EXIT_SUCCESS); } } } wmdrawer-0.10.5.orig/wmdrawer-redhat.spec0000644000175000017500000000227110067336544021201 0ustar matrixmatrix00000000000000%define name wmdrawer %define version 0.10.5 %define release 1 Summary: Retractable button bar launcher dockapp Name: %{name} Version: %{version} Release: %{release} Source: http://people.easter-eggs.org/~valos/wmdrawer/%{name}-%{version}.tar.gz License: GPL Group: X11/WindowMaker Applets URL: http://people.easter-eggs.org/~valos/wmdrawer/ #Distribution: BuildRoot: %{_tmppath}/%{name}-buildroot Prefix: %{_prefix} %description wmDrawer is a dock application (dockapp) which provides a drawer (retractable button bar) to launch applications. %prep rm -rf $RPM_BUILD_ROOT %setup %build make %install mkdir -p $RPM_BUILD_ROOT%{prefix}/bin mkdir -p $RPM_BUILD_ROOT%{prefix}/man/man1 install -m 755 wmdrawer $RPM_BUILD_ROOT%{prefix}/bin install -m 644 doc/wmdrawer.1x.gz $RPM_BUILD_ROOT%{prefix}/man/man1 %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,0755) %doc wmdrawerrc.example AUTHORS ChangeLog COPYING INSTALL README TODO %{prefix}/bin/* %{prefix}/man/man1/* %changelog * Mon Nov 11 2002 Kevin Burtch - Created spec file (for RedHat 8.0, should work on others). * Fri Feb 7 2003 Valry Febvre - Rename file CHANGES to Changelog wmdrawer-0.10.5.orig/Makefile0000644000175000017500000000306710067336544016674 0ustar matrixmatrix00000000000000SHELL = /bin/sh CC = gcc # Operating system OS = -DLINUX #OS = -DSOLARIS #OS = -DFREEBSD INSTALL = /usr/bin/install RM = rm -f DESTDIR = PREFIX = $(DESTDIR)/usr/local MANDIR = $(PREFIX)/man/man1 DOCDIR = $(PREFIX)/share/doc # Image library USE_GDKPIXBUF = 1 #USE_GDKPIXBUF2 = 1 #USE_IMLIB = 1 DEFS = $(OS) ifdef USE_GDKPIXBUF IMGLIB_DEF = -DUSE_GDKPIXBUF CFLAGS = -O3 -Wall `gdk-pixbuf-config --cflags` LDFLAGS = `gdk-pixbuf-config --libs` -lgdk_pixbuf_xlib endif ifdef USE_GDKPIXBUF2 IMGLIB_DEF = -DUSE_GDKPIXBUF2 CFLAGS = -O3 -Wall `pkg-config --cflags gdk-pixbuf-xlib-2.0` -I/usr/X11R6/include LDFLAGS = `pkg-config --libs gdk-pixbuf-xlib-2.0` -rdynamic -lX11 -lXi -lXext -L/usr/X11R6/lib endif ifdef USE_IMLIB IMGLIB_DEF = -DUSE_IMLIB CFLAGS = -O3 -Wall `imlib-config --cflags` LDFLAGS = `imlib-config --libs` endif DEFS += $(IMGLIB_DEF) ifeq ($(OS),-DSOLARIS) LDFLAGS += -lposix4 -lz -ltiff -ljpeg DEFS += -DUSE_GETOPT endif ifeq ($(OS),-DFREEBSD) LDFLAGS += -lgnugetopt endif PRGS = wmdrawer SRCS = utils.c config.c graphics.c images.c wmdrawer.c OBJS = $(SRCS:.c=.o) all : $(PRGS) .c.o : $(CC) $(CFLAGS) $(DEFS) -c $< wmdrawer : $(OBJS) $(CC) $(LDFLAGS) -o $@ $(OBJS) strip $@ clean : $(RM) *.o $(PRGS) install : wmdrawer $(INSTALL) -m 755 wmdrawer $(PREFIX)/bin $(INSTALL) -m 644 doc/wmdrawer.1x.gz $(MANDIR) $(INSTALL) -d $(DOCDIR)/wmdrawer $(INSTALL) -m 644 wmdrawerrc.example AUTHORS ChangeLog COPYING INSTALL README TODO $(DOCDIR)/wmdrawer uninstall: clean $(RM) $(PREFIX)/bin/wmdrawer $(RM) $(MANDIR)/wmdrawer.1x.gz $(RM) -rf $(DOCDIR)/wmdrawer wmdrawer-0.10.5.orig/README0000644000175000017500000000500510067336544016106 0ustar matrixmatrix00000000000000Description ------------------------------------------------------------- wmDrawer is a dock application (dockapp) which provides a drawer (retractable button bar) to launch applications. Homepage : http://people.easter-eggs.org/~valos/wmdrawer/ IRC : irc.freenode.net, #wmdrawer # The drawer is retractable and animated. # Several columns of buttons can be defined in the drawer. # The config file is automaticaly reloaded if it changes. # Multiple instances of the program can run at the same time. # The buttons can be highlighted under the mouse cursor. # A tooltip can be defined for each button. # The drawer can be transparent (need SHAPE extension). # Ability to launch several apps at once from the drawer. By holding down the key Shift or by using mouse buttons middle or right instead of left, you can keep the drawer opened. # Adjustable behaviors: - dock's image (logo) - dock's width and height (for both min=12, max=128) - automatic/manual opening and closing of the drawer - timeout value in miliseconds if automatic closing selected - drawer's opening direction and animation speed - mouse cursor type in the drawer - drawer's pseudo-transparency - icons' background image (only if transparency isn't activated) - buttons' size (min=12, max=128) - buttons' highlight type (0:none, 1:target, 2:shading) - image used as highlight (target type only) - color and darkening level for highlight (shading type only) - drawer's border size - buttons' tooltips and tooltips' font Bugs ------------------------------------------------------------- If you discover any bug in this software, please send a bugreport to vfebvre@vfebvre.lautre.net and describe the problem with as many details as possible. Copyright ------------------------------------------------------------- wmDrawer is Copyright (C) 2002-2004 by Valery Febvre, FRANCE wmDrawer is licensed through the GNU General Public License. Read the COPYING file for the complete GNU license. Usage ------------------------------------------------------------- Simply launch wmdrawer binary: $ wmdrawer You need to write a config file (.wmdrawerrc) and put it in your home directory (look at INSTALL and wmdrawerrc.example files for futher information). To launch wmDrawer with a specific configuration file (useful if you want to launch several instances of wmDrawer) $ wmdrawer -c config_file [-n instance_name] To launch wmDrawer in windowed mode (useful for AfterStep, Fvwm, Sawfish or KDE users) $ wmdrawer -w To display the version of wmDrawer $ wmdrawer -v wmdrawer-0.10.5.orig/wmdrawerrc.example0000644000175000017500000000545610067336544020772 0ustar matrixmatrix00000000000000# Config file example for wmdrawer [general] # Dock's icon [optional] #dock_icon panel-drawer.png # Drawer's opening direction [required] # Top to bottom = 0 # Right to Left = 1 # Bottom to Top = 2 # Left to Right = 3 direction 2 # Image used for icons' background [optional] #icons_bg defaultTile.xpm # Allow icons' enlargement to fit them to buttons' size [optional, default 1] # 0 indicate that icons should never be larger than their original size. #icons_expand 1 # Activate the drawer's pseudo-transparency [optional, default 0] # if you choose transparency, icons_bg will be ignored #transparency 0 # dock's width: min=12, max=128 [optional, default=64] #dock_width 64 # dock's height: min=12, max=128 [optional, default=64] #dock_height 64 # buttons' size: min=12, max=128 [optional] # Useful for the people who want for example to have big icons # and to define several columns. #btns_size 32 # Icon's highlight type: 0, 1 or 2 [optional, default 2] # 0 : no highlight # 1 : target (unavailable if transparency is activated) # 2 : shading #highlight 2 # Image used as highlight [optional] # only used if you choice target type #highlight_img highlight.xpm # Tint icons by a specified color [optional, default #ffffff] # only used if you choice shading type #highlight_tint #ffffff # Shade icons at a specified level [optional, default 60] # only used if you choice shading type #highlight_sh 60 # Display buttons' tooltips [optional, default 1] #tooltips 1 # Tooltips' font [optional, default fixed] #tooltips_font fixed # Drawer's animation speed: 0, 1, 2, 3, 4 [optional, default 1] #animation_speed 1 # Mouse cursor in drawer: 0, 1, ..., 76 [optional, default 30] #cursor 30 # Auto opening of the drawer: 0, 1 [optional, default 0] #show_on_hover 0 # Auto closing of the drawer: 0, 1 [optional, default 0] #hide_on_out 0 # drawer's hiding timeout in miliseconds [optional, default 1000] #hide_timeout 1000 # Runs the dockapp in windowed mode: 0, 1 [optional, default 0] # Useful for AfterStep, Fvwm, Sawfish or KDE users. #windowed_mode 0 # Instance name so window manager can distinguish between multiple copies #instance_name distinguish_name # Drawer's border size in pixels [optional, default 1] #border_size 1 # Images directories [images_paths] /usr/share/pixmaps /usr/local/share/pixmaps/ # A first column with 5 buttons # Each button must be defined with this syntax: # (tooltip) (image) (command) [column] (X Terminal) (gnome-term.png) (xterm -bg black -fg wheat) (Galeon) (galeon.xpm) (galeon -s) (Sylpheed) (sylpheed.png) (sylpheed) (XChat) (xchat.png) (xchat) (MPlayer) (gnome-multimedia.png) (mplayer) # A second column with 5 buttons [column] (Xmms) (gnome-audio2.png) (xmms) (Gimp) (gnome-gimp.png) (gimp) (GQview) (gqview.png) (gqview) (Xcalc) (gnome-calc3.png) (xcalc) (GFtp) (gftp.png) (gftp) wmdrawer-0.10.5.orig/config.c0000644000175000017500000005526710067337514016654 0ustar matrixmatrix00000000000000/* wmDrawer (c) 2002-2004 Valery Febvre * * wmDrawer is a dock application (dockapp) which provides a * drawer (button bar) to launch applications from. * * 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 #include #if defined USE_GETOPT #include #else #include #endif #include "types_defs.h" #include "config.h" static void parseLine (char *line, int line_num); static void usage (void); static void freeUnusedMemory (void); enum section { general, images_paths, column }; drawerConfig config; drawerButton **entries; static char configFilePath[FILENAME_MAX]; struct stat buf; static unsigned int currentSection; static unsigned int rowsCnt; static unsigned int *nbRowsPerCol; static char *line; unsigned int nbEntries, nbImagesPaths; unsigned int nbCols, nbRows; unsigned int useDefaultIconsBg, useDefaultDockIcon, useDefaultHighlightImg; unsigned int drawerOK; void parseConfig () { FILE *f = NULL; const char *home; unsigned char c; unsigned int col, row; unsigned int line_num = 0; unsigned int line_point = 0; /* init vars */ currentSection = -1; nbEntries = nbCols = rowsCnt = nbRows = nbImagesPaths = 0; useDefaultIconsBg = useDefaultDockIcon = useDefaultHighlightImg = drawerOK = 1; entries = NULL; freeAllMemory (); /* default adjustments */ config.iconsExpand = 1; config.transparency = 0; config.dockW = 64; config.dockH = 64; config.btnsSize = 0; config.direction = -1; config.animationSpeed = 1; config.cursor = 30; /* XC_hand2 / 2 */ config.borderSize = 1; config.showOnHover = 0; config.hideOnOut = 0; config.hideTimeout = 800; config.highlight = 2; config.highlightShading.shading = 60; config.highlightShading.tintColor.red = 255; config.highlightShading.tintColor.green = 255; config.highlightShading.tintColor.blue = 255; config.tooltips = 1; config.tooltipsFont = (char *) malloc (6 * sizeof (char)); sprintf (config.tooltipsFont, "fixed"); if (*configFilePath == '\0') { if ((home = getenv ("HOME")) != NULL && *home != '\0') sprintf (configFilePath, "%s/%s", home, ".wmdrawerrc"); else { printf ("%s error: can't find HOME directory\n", PACKAGE); exit (EXIT_FAILURE); } } if ((f = fopen (configFilePath, "r")) == NULL) { printf ("%s error: can't open config file %s\n", PACKAGE, configFilePath); exit (EXIT_FAILURE); } if (stat (configFilePath, &buf) == 0) { config.lastModif = buf.st_mtime; } line = xcalloc (FILENAME_MAX, sizeof (char)); /* fgets ??? */ while (fscanf (f, "%c", &c) != EOF) { if (c != '\n') { line[line_point++] = c; } else { line_num++; parseLine (line, line_num); free (line); line_point = 0; line = xcalloc (FILENAME_MAX, sizeof (char)); } } fclose (f); if (config.direction < 0) { freeUnusedMemory (); exit (EXIT_FAILURE); } if (nbRows * nbCols > 0) { /* create and alloc an (nbCols x nbRows) array */ config.entries = (drawerButton **) xcalloc (nbCols, sizeof (drawerButton *)); for (col = 0; col < nbCols; col++) config.entries[col] = (drawerButton *) xcalloc (nbRows, sizeof (drawerButton)); /* Add empty buttons to array entries */ for (col = 0; col < nbCols; col++) { if (nbRowsPerCol[col] < nbRows) { entries[col] = xrealloc (entries[col], sizeof (drawerButton) * nbRows); for (row = nbRowsPerCol[col]; row < nbRows; row++) { /* alloc empty string for tooltip, image, command */ entries[col][row].tooltip = (char *) malloc (sizeof (char)); entries[col][row].image = (char *) malloc (sizeof (char)); entries[col][row].command = (char *) malloc (sizeof (char)); entries[col][row].isEmpty = 1; } } } /* rotate array */ for (col = 0; col < nbCols; col++) { for (row = 0; row < nbRows; row++) { switch (config.direction) { case leftToRight: case topToBottom: config.entries[col][row].isEmpty = entries[col][row].isEmpty; config.entries[col][row].tooltip = (char *) malloc ((strlen (entries[col][row].tooltip)+1) * sizeof (char)); sprintf (config.entries[col][row].tooltip, "%s", entries[col][row].tooltip); config.entries[col][row].image = (char *) malloc((strlen (entries[col][row].image)+1) * sizeof (char)); sprintf (config.entries[col][row].image, "%s", entries[col][row].image); config.entries[col][row].command = (char *) malloc((strlen (entries[col][row].command)+1) * sizeof(char)); sprintf (config.entries[col][row].command, "%s", entries[col][row].command); break; case rightToLeft: case bottomToTop: config.entries[col][row].isEmpty = entries[col][nbRows - row - 1].isEmpty; config.entries[col][row].tooltip = (char *) malloc ((strlen (entries[col][nbRows-row-1].tooltip)+1) * sizeof (char)); sprintf (config.entries[col][row].tooltip, "%s", entries[col][nbRows-row-1].tooltip); config.entries[col][row].image = (char *) malloc((strlen (entries[col][nbRows-row-1].image)+1) * sizeof (char)); sprintf (config.entries[col][row].image, "%s", entries[col][nbRows-row-1].image); config.entries[col][row].command = (char *) malloc((strlen (entries[col][nbRows-row-1].command)+1) * sizeof (char)); sprintf (config.entries[col][row].command, "%s", entries[col][nbRows - row - 1].command); break; } dbg_msg (1, "(%d,%d) %s %s %s %d\n", col, row, config.entries[col][row].tooltip, config.entries[col][row].image, config.entries[col][row].command, config.entries[col][row].isEmpty); } } } else { printf ("%s warning: any button defined !!!\n", PACKAGE); drawerOK = nbCols = 0; } freeUnusedMemory (); } static void parseLine (char *line, int line_num) { unsigned int i, empty, error = 0, flag = 0, cntc = 0, cnte = 0; char c; const char *regex_general = "^[[:space:]]*[a-z_]+[[:space:]]+.+$"; const char *regex_column = "^[[:space:]]*\\(.*\\)[[:space:]]*\\(.*\\)[[:space:]]*\\(.*\\)[[:space:]]*$"; char *param, *field; int field_point = 0; /* detect comment lines and empty lines */ empty = 1; for(i=0; i MAX_ICON_SIZE) { printf ("%s warning: bad value for 'dock_width' param, max=%d (use max value: %d)\n", PACKAGE, MAX_ICON_SIZE, MAX_ICON_SIZE); config.dockW = MAX_ICON_SIZE; } if (config.dockW < MIN_ICON_SIZE) { printf ("%s warning: bad value for 'dock_width' param, min=%d (use min value: %d)\n", PACKAGE, MIN_ICON_SIZE, MIN_ICON_SIZE); config.dockW = MIN_ICON_SIZE; } break; } else if (strstr (line, "dock_height")) { sscanf (line, "%s %d", param, &(config.dockH)); if (config.dockH > MAX_ICON_SIZE) { printf ("%s warning: bad value for 'dock_height' param, max=%d (use max value: %d)\n", PACKAGE, MAX_ICON_SIZE, MAX_ICON_SIZE); config.dockH = MAX_ICON_SIZE; } if (config.dockH < MIN_ICON_SIZE) { printf ("%s warning: bad value for 'dock_height' param, min=%d (use min value: %d)\n", PACKAGE, MIN_ICON_SIZE, MIN_ICON_SIZE); config.dockH = MIN_ICON_SIZE; } break; } else if (strstr (line, "btns_size")) { sscanf (line, "%s %d", param, &(config.btnsSize)); if (config.btnsSize > MAX_ICON_SIZE) { printf ("%s warning: bad value for 'btns_size' param, max=%d (use max value: %d)\n", PACKAGE, MAX_ICON_SIZE, MAX_ICON_SIZE); config.btnsSize = MAX_ICON_SIZE; } if (config.btnsSize < MIN_ICON_SIZE) { printf ("%s warning: bad value for 'btns_size' param, min=%d (use min value: %d)\n", PACKAGE, MIN_ICON_SIZE, MIN_ICON_SIZE); config.btnsSize = MIN_ICON_SIZE; } break; } else if (strstr (line, "direction")) { sscanf (line, "%s %d", param, &(config.direction)); if (config.direction < 0 || config.direction > 3) { printf ("%s error: bad value for 'direction' param, it must be 0, 1, 2 or 3\n", PACKAGE); config.direction = -1; } break; } else if (strstr (line, "animation_speed")) { sscanf (line, "%s %d", param, &(config.animationSpeed)); if (config.animationSpeed < 0) { printf ("%s warning: bad value for 'animation_speed' param, it must be 0, 1, 2, 3 or 4 (use default value: 1)\n", PACKAGE); config.animationSpeed = 1; } if (config.animationSpeed > 4) { printf ("%s warning: bad value for 'animation_speed' param, it must be 0, 1, 2, 3 or 4 (use max value: 4)\n", PACKAGE); config.animationSpeed = 4; } break; } else if (strstr (line, "cursor")) { sscanf (line, "%s %d", param, &(config.cursor)); if (config.cursor < 0 || config.cursor > 76) { printf ("%s warning: bad value for 'cursor' param, it must be >= 0 and <= 76 (use default value: 30)\n", PACKAGE); config.cursor = 30; /* XC_hand2 / 2 */ } break; } else if (strstr (line, "border_size")) { sscanf (line, "%s %d", param, &(config.borderSize)); if (config.borderSize < 0 || config.borderSize > 8) { printf ("%s warning: bad value for 'border_size' param, it must be >= 0 and not too big (use default value: 1)\n", PACKAGE); config.borderSize = 1; } break; } else if (strstr (line, "show_on_hover") || strstr (line, "show_on_over")) { sscanf (line, "%s %d", param, &(config.showOnHover)); if (config.showOnHover != 0 && config.showOnHover != 1) { printf ("%s warning: bad value for 'show_on_hover' param, it must be 0 or 1 (use default value: 0)\n", PACKAGE); config.showOnHover = 0; } break; } else if (strstr (line, "hide_on_out")) { sscanf (line, "%s %d", param, &(config.hideOnOut)); if (config.hideOnOut != 0 && config.hideOnOut != 1) { printf ("%s warning: bad value for 'hide_on_out' param, it must be 0 or 1 (use default value: 0)\n", PACKAGE); config.hideOnOut = 0; } break; } else if (strstr (line, "hide_timeout")) { sscanf (line, "%s %d", param, &(config.hideTimeout)); if (config.hideTimeout < 0) { printf ("%s warning: bad value for 'hide_timeout' param, it must be >= to 0 (use default value: 1000)\n", PACKAGE); config.hideTimeout = 1000; } break; } else if (strstr (line, "windowed_mode")) { if (config.windowedModeLocked == 0) { sscanf (line, "%s %d", param, &(config.windowedMode)); if (config.windowedMode != 0 && config.windowedMode != 1) { printf ("%s warning: bad value for 'windowed_mode' param, it must be 0 or 1 (use default value: 0)\n", PACKAGE); config.windowedMode = 0; } } break; } else if (strstr (line, "instance_name")) { /* Ed Goforth */ /* Allow to specify instance name for multiple clients in their */ /* config file. This will override a -n given on the command line. */ sscanf (line, "%s %s", param, field); config.instanceName = (char *) malloc ((strlen (field)+1)*sizeof (char)); sprintf(config.instanceName, "%s", field); break; } else if (strstr (line, "highlight_img")) { sscanf (line, "%s %s", param, field); config.highlightImg = (char *) malloc ((strlen (field)+1)*sizeof (char)); sprintf(config.highlightImg, "%s", field); useDefaultHighlightImg = 0; break; } else if (strstr (line, "highlight_sh")) { sscanf (line, "%s %d", param, &(config.highlightShading.shading)); if (config.highlightShading.shading < 0 || config.highlightShading.shading > 100) { printf ("%s warning: bad value for 'highlight_sh' param, it must be >= 0 and <= 100 (use default value: 60)\n", PACKAGE); config.highlightShading.shading = 60; } break; } else if (strstr (line, "highlight_tint")) { unsigned int r,g,b; sscanf (line, "%s %c%02X%02X%02X", param, &c, &r, &g, &b); if (c != '#') { printf ("%s warning: bad value for 'highlight_tint' param (use default value: #ffffff)\n", PACKAGE); config.highlightShading.tintColor.red = 255; config.highlightShading.tintColor.green = 255; config.highlightShading.tintColor.blue = 255; } else { config.highlightShading.tintColor.red = (unsigned short) r; config.highlightShading.tintColor.green = (unsigned short) g; config.highlightShading.tintColor.blue = (unsigned short) b; } break; } else if (strstr (line, "highlight")) { sscanf (line, "%s %d", param, &(config.highlight)); if (config.highlight < 0 || config.highlight > 2) { printf ("%s warning: bad value for 'highlight' param, it must be 0, 1 or 2 (use default value: 2)\n", PACKAGE); config.highlight = 2; } break; } else if (strstr (line, "tooltips_font")) { free (config.tooltipsFont); sscanf (line, "%s %s", param, field); config.tooltipsFont = (char *) malloc ((strlen (field)+1)*sizeof (char)); sprintf(config.tooltipsFont, "%s", field); break; } else if (strstr (line, "tooltips")) { sscanf (line, "%s %d", param, &(config.tooltips)); if (config.tooltips != 0 && config.tooltips != 1) { printf ("%s warning: bad value for 'tooltips' param, it must be 0 or 1 (use default value: 1)\n", PACKAGE); config.tooltips = 1; } break; } break; case images_paths: nbImagesPaths++; if (config.imagesPaths == NULL && nbImagesPaths == 1) { config.imagesPaths = (char **) xcalloc (1, sizeof (char *)); } else { config.imagesPaths = (char **) xrealloc (config.imagesPaths, sizeof (char *) * nbImagesPaths); } config.imagesPaths[nbImagesPaths - 1] = (char *) xcalloc (strlen(line)+1, sizeof (char)); sscanf (line, "%s", config.imagesPaths[nbImagesPaths - 1]); break; case column: /* if a line don't match regexp => it's skipped */ if (match_regex (line, regex_column) == 0) { printf ("%s warning: line %d is invalid (skipped)\n", PACKAGE, line_num); printf ("Line %d: %s\n", line_num, line); break; } rowsCnt++; if (rowsCnt == 1) { /* alloc memory for first button */ entries[nbCols-1] = (drawerButton *) xcalloc (1, sizeof (drawerButton)); } else { /* realloc memory for new button */ entries[nbCols-1] = (drawerButton *) xrealloc (entries[nbCols - 1], sizeof (drawerButton) * rowsCnt); } /* parse entry line */ while (sscanf (line + cntc, "%c", &c)) { switch (c) { case '(': flag = 1; break; case ')': flag = 0; field[field_point] = '\0'; switch (cnte++) { case 0: entries[nbCols - 1][rowsCnt - 1].tooltip = (char *) xcalloc (strlen (field)+1, sizeof (char)); sprintf (entries[nbCols - 1][rowsCnt - 1].tooltip, "%s", field); break; case 1: entries[nbCols - 1][rowsCnt - 1].image = (char *) xcalloc (strlen (field)+1, sizeof (char)); sprintf (entries[nbCols - 1][rowsCnt - 1].image, "%s", field); break; case 2: entries[nbCols - 1][rowsCnt - 1].command = (char *) xcalloc (strlen (field)+1, sizeof (char)); sprintf (entries[nbCols - 1][rowsCnt - 1].command, "%s", field); break; } field_point = 0; break; default: if (flag == 1) { field[field_point++] = c; field[field_point] = '\0'; } break; } cntc++; dbg_msg (1, "%c %d %d %d %s\n", c, flag, cnte, cntc, field); if (cnte == 3) { dbg_msg (1, "%d %d %d | %s | %s | %s\n", flag, cnte, cntc, entries[nbCols - 1][rowsCnt - 1].tooltip, entries[nbCols - 1][rowsCnt - 1].image, entries[nbCols - 1][rowsCnt - 1].command); } if (cntc >= strlen (line)) break; } dbg_msg (1, "%s\t%s\t%s\n", entries[nbCols - 1][rowsCnt - 1].tooltip, entries[nbCols - 1][rowsCnt - 1].image, entries[nbCols - 1][rowsCnt - 1].command); entries[nbCols - 1][rowsCnt - 1].isEmpty = 0; /* we count the number of buttons per column */ nbRowsPerCol[nbCols - 1]++; if (rowsCnt > nbRows) { nbRows = rowsCnt; } break; default: error++; } free (field); free (param); if (error > 0) { dbg_msg (1, "%s\n", line); printf ("%s error: parsing error.\n", PACKAGE); printf ("Line %d: %s\n", line_num, line); freeAllMemory (); exit (EXIT_FAILURE); } } int configChanged (void) { struct stat buf; if (stat (configFilePath, &buf) == 0 && buf.st_mtime > config.lastModif) { return 1; } else { return 0; } } static void usage (void) { #if defined USE_GETOPT printf ("Usage: %s [OPTIONS]\n\n" "Valid options are:\n" " -c FILE config file to use (default ~/.wmdrawerrc)\n" " -n NAME set dock instance name\n" " -w runs the application in windowed mode\n" " -v show program version and exit\n" " -h show this help text and exit\n\n", PACKAGE); #else printf ("Usage: %s [OPTIONS]\n\n" "Valid options are:\n" " -c, --configfile=FILE config file to use (default ~/.wmdrawerrc)\n" " -n, --instancename=NAME set dock instance name\n" " -w, --windowed runs the application in windowed mode\n" " -v, --version show program version and exit\n" " -h, --help show this help text and exit\n\n", PACKAGE); #endif } void parseOptions (int argc, char **argv) { int opt; #if defined USE_GETOPT #else int longopt_index = 0; static struct option long_options[] = { {"configfile", 1, NULL, 'c'}, {"help", 0, NULL, 'h'}, {"instancename", 1, NULL, 'n'}, {"version", 0, NULL, 'v'}, {"windowed", 0, NULL, 'w'}, {NULL, 0, NULL, 0} /* marks end-of-list */ }; #endif config.windowedMode = 0; /* Ed Goforth */ /* use the package name as the default instance name */ config.instanceName=(char *)malloc((strlen(PACKAGE)+1)*sizeof(char)); sprintf (config.instanceName, "%s", PACKAGE); #if defined USE_GETOPT while ((opt = getopt (argc, argv, "hvw?c:n:")) != EOF) { #else while ((opt = getopt_long (argc, argv, "c:h?n:vw", long_options, &longopt_index)) > 0) { #endif dbg_msg (1, "Between while & switch: opt = '%c'\n", opt); switch (opt) { case '?': case 'h': usage (); exit (EXIT_SUCCESS); case 'w': config.windowedMode = 1; config.windowedModeLocked = 1; break; case 'v': printf ("Version %s, %s\n" "%s (c) 2002-2004 Valry Febvre \n\n", VERSION, RELEASE_DATE, PACKAGE); exit (EXIT_SUCCESS); case 'c': sprintf (configFilePath, "%s", optarg); break; case 'n': /* Ed Goforth */ /* allow on command-line, but config file overrides it if given there */ config.instanceName = (char *) malloc ((strlen (optarg)+1)*sizeof(char)); sprintf (config.instanceName, "%s", optarg); break; } } } void freeUnusedMemory (void) { unsigned int i, j; free (line); free (nbRowsPerCol); for (i=0; i * * wmDrawer is a dock application (dockapp) which provides a * drawer (button bar) to launch applications from. * * 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. */ void parseConfig (); int configChanged (void); void parseOptions (int argc, char **argv); void freeAllMemory (void); wmdrawer-0.10.5.orig/types_defs.h0000644000175000017500000000422210067336544017544 0ustar matrixmatrix00000000000000/* wmDrawer (c) 2002-2004 Valery Febvre * * wmDrawer is a dock application (dockapp) which provides a * drawer (button bar) to launch applications from. * * 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 #include #include #include #include #include #include "utils.h" #define PACKAGE "wmdrawer" #define VERSION "0.10.5" #define RELEASE_DATE "2004-06-14" #define MAX_ICON_SIZE 128 #define MIN_ICON_SIZE 12 #define DBG_LEVEL 0 enum dir { topToBottom, rightToLeft, bottomToTop, leftToRight }; typedef struct ShadingInfo { XColor tintColor; int shading; } ShadingInfo; typedef struct _drawingArea { Window win; Pixmap pixmap; GC gc; XGCValues xgcv; XSetWindowAttributes xswa; } drawingArea; typedef struct _drawerButton { drawingArea da; unsigned int isEmpty; char *tooltip; char *image; char *command; } drawerButton; typedef struct _drawerConfig { char *dockIcon; char *iconsBg; int iconsExpand; int transparency; int dockW; int dockH; int btnsSize; int direction; int animationSpeed; int cursor; int borderSize; int showOnHover; int hideOnOut; int hideTimeout; int windowedMode; int windowedModeLocked; char *instanceName; int highlight; char *highlightImg; ShadingInfo highlightShading; int tooltips; char *tooltipsFont; time_t lastModif; char **imagesPaths; drawerButton **entries; } drawerConfig; wmdrawer-0.10.5.orig/images.c0000644000175000017500000001462310067336544016645 0ustar matrixmatrix00000000000000/* wmDrawer (c) 2002-2004 Valery Febvre * * wmDrawer is a dock application (dockapp) which provides a * drawer (button bar) to launch applications from. * * 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 "types_defs.h" #include "images.h" #ifdef USE_GDKPIXBUF #include #endif #ifdef USE_GDKPIXBUF2 #include #endif #ifdef USE_IMLIB #include ImlibData *id; #endif unsigned int imageLibIsInit = 0; extern Display *display; extern drawerConfig config; extern int nbImagesPaths; static int initImgLib (void) { if (imageLibIsInit == 0) { #ifdef USE_GDKPIXBUF gdk_pixbuf_xlib_init (display, DefaultScreen (display)); imageLibIsInit = 1; #endif #ifdef USE_GDKPIXBUF2 g_type_init (); gdk_pixbuf_xlib_init (display, DefaultScreen (display)); imageLibIsInit = 1; #endif #ifdef USE_IMLIB id = Imlib_init (display); imageLibIsInit = 1; #endif } return imageLibIsInit; } static char *loadImageFromFile (char *file) { #ifdef USE_GDKPIXBUF return (char *)gdk_pixbuf_new_from_file (file); #endif #ifdef USE_GDKPIXBUF2 GError *error = NULL; return (char *)gdk_pixbuf_new_from_file (file, &error); #endif #ifdef USE_IMLIB return (char *)Imlib_load_image (id, file); #endif } static char *loadImageFromXpmData (const char **data) { #ifdef USE_GDKPIXBUF return (char *)gdk_pixbuf_new_from_xpm_data (data); #endif #ifdef USE_GDKPIXBUF2 return (char *)gdk_pixbuf_new_from_xpm_data (data); #endif #ifdef USE_IMLIB return (char *)Imlib_create_image_from_xpm_data(id, (char **)data); #endif } static int getImageWidth (char *img) { #ifdef USE_GDKPIXBUF return gdk_pixbuf_get_width ((GdkPixbuf *)img); #endif #ifdef USE_GDKPIXBUF2 return gdk_pixbuf_get_width ((GdkPixbuf *)img); #endif #ifdef USE_IMLIB return ((ImlibImage *)img)->rgb_width; #endif } static int getImageHeight (char *img) { #ifdef USE_GDKPIXBUF return gdk_pixbuf_get_height ((GdkPixbuf *)img); #endif #ifdef USE_GDKPIXBUF2 return gdk_pixbuf_get_height ((GdkPixbuf *)img); #endif #ifdef USE_IMLIB return ((ImlibImage *)img)->rgb_height; #endif } static char *scaleImage (char *img, int w, int h) { #ifdef USE_GDKPIXBUF return (char *)gdk_pixbuf_scale_simple ((GdkPixbuf *)img, w, h, GDK_INTERP_HYPER); #endif #ifdef USE_GDKPIXBUF2 return (char *)gdk_pixbuf_scale_simple ((GdkPixbuf *)img, w, h, GDK_INTERP_HYPER); #endif #ifdef USE_IMLIB return (char *)Imlib_clone_scaled_image (id, (ImlibImage *)img, w, h); #endif } static void unrefImage (char *img) { #ifdef USE_GDKPIXBUF gdk_pixbuf_unref ((GdkPixbuf *)img); #endif #ifdef USE_GDKPIXBUF2 g_object_unref ((GdkPixbuf *)img); #endif #ifdef USE_IMLIB Imlib_kill_image (id, (ImlibImage *)img); #endif } static void createPixmapAndMask (char *img, Pixmap *pixmap, Pixmap *mask) { #ifdef USE_GDKPIXBUF gdk_pixbuf_xlib_render_pixmap_and_mask ((GdkPixbuf *)img, pixmap, mask, 128); #endif #ifdef USE_GDKPIXBUF2 gdk_pixbuf_xlib_render_pixmap_and_mask ((GdkPixbuf *)img, pixmap, mask, 128); #endif #ifdef USE_IMLIB Imlib_render (id, (ImlibImage *)img, ((ImlibImage *)img)->rgb_width, ((ImlibImage *)img)->rgb_height); *pixmap = Imlib_move_image (id, (ImlibImage *)img); *mask = Imlib_move_mask (id, (ImlibImage *)img); #endif } /* Create pixmap from image data and resize it to fit (dimW x dimH) img : image data imgPix : pixmap result imgMask : mask result w : pixmap width result h : pixmap height result dimW : max width allows dimH : max height allows resizeMask : resize mask */ void createAndResizePixmap (char *img, Pixmap *imgPix, Pixmap *imgMask, int *w, int *h, int dimW, int dimH, unsigned long resizeMask) { char *imgScaled = NULL; *w = getImageWidth (img); *h = getImageHeight (img); if (resizeMask > 0) { /* resize smaller ? */ if ((*w > dimW || *h > dimH) && ((resizeMask >> (RESIZE_SMALLER-1)) % 2)) { if ((float) *w / (float) dimW > (float) *h / (float) dimH) { *h = (int) ((*h * dimW) / *w); *w = dimW; } else { *w = (int) ((*w * dimH) / *h); *h = dimH; } } /* resize greater ? */ if ((*w < dimW && *h < dimH) && ((resizeMask >> (RESIZE_GREATER-1)) % 2)) { if (*w >= *h) { *h = (int) ((*h * dimW) / *w); *w = dimW; } else { *w = (int) ((*w * dimH) / *h); *h = dimH; } } /* ready for resizing */ imgScaled = scaleImage (img, *w, *h); unrefImage (img); img = imgScaled; } createPixmapAndMask (img, imgPix, imgMask); unrefImage (img); } int createPixmapFromFile (char *file, Pixmap *imgPix, Pixmap *imgMask, int *w, int *h, int dimW, int dimH, unsigned long resizeMask) { int i; char *img; char path[FILENAME_MAX]; if (initImgLib() == 0) { printf ("%s warning: can't init image library.\n", PACKAGE); return 0; } if (file == NULL) { printf ("%s warning: a file path is (null)!\n", PACKAGE); return 0; } /* quick test for absolute path */ img = loadImageFromFile (file); if (file[0] != '/' || img == NULL) { /* else try all paths */ for (i=0; i * * wmDrawer is a dock application (dockapp) which provides a * drawer (button bar) to launch applications from. * * 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. */ #define RESIZE_SMALLER (1UL << 0) #define RESIZE_GREATER (1UL << 1) int createPixmapFromFile (char *file, Pixmap *imgPix, Pixmap *imgMask, int *w, int *h, int dimW, int dimH, unsigned long resizeMask); void createPixmapFromData (const char **data, Pixmap *imgPix, Pixmap *imgMask, int *w, int *h, int dimW, int dimH, unsigned long resizeMask); wmdrawer-0.10.5.orig/AUTHORS0000644000175000017500000000465210067340167016301 0ustar matrixmatrix00000000000000Authors: ------- Valry Febvre (aka valos/ckix) Main author: coding, docs and website. Contributors: ------------ Christopher W. Wesley Initial manual page (English) author. Fabio Stumbo Italian manual page author. Oliwier 'aLEczapKA' Ptak A patch to add a new behavior : automatic opening of the drawer when the mouse enters the dockapp. This behavior can be control with option show_on_hover (0/1) in the configuration file. Konstantin Malakhanov A patch to support absolute image paths in the configuration file. Franciso Jose Oviedo A patch to improve the execution's process of commands. Scott Morgan Send a patch which allows to launch several apps at once from the drawer. By holding down the key Shift, you can keep the drawer opened. Ed Goforth A patch which allows to set the client instance name (application name) so the window manager can differentiate between multiple instances. This behavior can be control with option instance_name in the configuration file or from command-line with -n option. A patch which add XSetCommand() so that the window manager can grab the command-line args wmdrawer was started with. This is helpful for WindowMaker so it won't have to ask you to type the command-line in when docking. Christopher T King A patch which fixes a highlight bug for horizontal directions. Jan Gregor (aka pAmela) A patch which allows ' ' or '\t' before comment characters, adds line number in warning/error messages, replaces last static arrays by dynamic arrays, replaces option dock_size by options dock_width & dock_height (dock can be now rectangular!). A patch which allows to set dock's size. This can be controlled with option dock_size in the configuration file. A patch which adds line number in error and warning messages of the config file parsing. Tomek Grzejszczyk A patch to fix a drawer animation speed problem with 2.6.x kernels. Packages maintainers: -------------------- Debian i386 (unstable): Christopher W. Wesley RedHat i386: Kevin Burtch Slackware i386: Ed Goforth Solaris SPARC: Ed Goforth FreeBSD i386, Alpha: Josef El-Rayes wmdrawer-0.10.5.orig/wmdrawer-slackware.spec0000644000175000017500000000100610067336544021701 0ustar matrixmatrix00000000000000wmdrawer: wmdrawer (WindowMaker dockapp) wmdrawer: wmdrawer: wmdrawer is a dock application (dockapp) which provides a drawer wmdrawer: (retractable button bar) to launch applications. wmdrawer: wmdrawer: wmdrawer requires gdk-pixbuf, gtk+ and glib. wmdrawer: wmdrawer: wmDrawer is Copyright (C) 2002-2004 by Valery Febvre, FRANCE wmdrawer: wmdrawer: Homepage : http://people.easter-eggs.org/~valos/wmdrawer/ wmdrawer: Slackware packaging provided by Ed Goforth wmdrawer-0.10.5.orig/utils.c0000644000175000017500000000400310067336544016527 0ustar matrixmatrix00000000000000/* wmDrawer (c) 2002-2004 Valery Febvre * * wmDrawer is a dock application (dockapp) which provides a * drawer (button bar) to launch applications from. * * 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 #include #include #include "types_defs.h" #include "utils.h" void dbg_msg (int level, const char *format, ...) { if (level <= DBG_LEVEL) { va_list va; assert (format != NULL); va_start (va, format); vprintf (format, va); va_end (va); } } void *xcalloc (size_t nmemb, size_t size) { register void *value = calloc (nmemb, size); if (value == 0) { printf ("%s error: virtual memory exhausted\n", PACKAGE); } return value; } void *xrealloc (void *ptr, size_t size) { register void *value = realloc (ptr, size); if (value == 0) { printf ("%s error: virtual memory exhausted\n", PACKAGE); } return value; } int match_regex (char *string, const char *regex) { regex_t preg; int res; /* compile regex */ res = regcomp (&preg, regex, REG_EXTENDED | REG_NOSUB); if (res != 0) { printf ("%s error: could not compile regex\n", PACKAGE); exit (EXIT_FAILURE); } /* execute regex */ res = regexec (&preg, string, 0, NULL, 0); /* free compiled regex */ regfree (&preg); if (res == 0) { return 1; } else return 0; } wmdrawer-0.10.5.orig/utils.h0000644000175000017500000000216010067336544016536 0ustar matrixmatrix00000000000000/* wmDrawer (c) 2002-2004 Valery Febvre * * wmDrawer is a dock application (dockapp) which provides a * drawer (button bar) to launch applications from. * * 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. */ #define MAX (a,b) ((a) > (b) ? (a) : (b)) void dbg_msg (int level, const char *format, ...); void *xcalloc (size_t nmemb, size_t size); void *xrealloc (void *ptr, size_t size); int match_regex (char *string, const char *regex); wmdrawer-0.10.5.orig/INSTALL0000644000175000017500000000216410067336544016262 0ustar matrixmatrix00000000000000Requirements ------------------------------------------------------ - glibc ( >= 2.1 ) - Xlib - gdk-pixbuf OR gdk-pixbuf-2.0 OR Imlib - root access for install Installation ------------------------------------------------------ 1) Untar/gunzip sources $ tar zxvf wmdrawer-x.x.x.tar.gz 2) Edit Makefile Choice the image library: gdk-pixbuf : uncomment USE_GDKPIXBUF = 1 gdk-pixbuf-2.0 : uncomment USE_GDKPIXBUF2 = 1 Imlib : uncomment USE_IMLIB = 1 If you are running Solaris, comment lines : OS = -DLINUX OS = -DFREEBSD and uncomment line : OS = -DSOLARIS If you are running FreeBSD, comment lines : OS = -DLINUX OS = -DSOLARIS and uncomment line : OS = -DFREEBSD 3) Compilation $ make $ su -c 'make install' 4) Config file creation and syntax A configuration file is needed to launch wmdrawer. Its default name is .wmdrawerrc and it must be copied in your home directory. It's also possible to put this file in another directory with a different name but in this case, you must use the -c command line option. Look at wmdrawerrc.example file for an example. wmdrawer-0.10.5.orig/pixmaps/0000755000175000017500000000000010067336544016707 5ustar matrixmatrix00000000000000wmdrawer-0.10.5.orig/pixmaps/defaultIconsBg.xpm0000644000175000017500000002455610067336544022342 0ustar matrixmatrix00000000000000/* XPM */ static char * defaultIconsBg_xpm[] = { "64 64 131 2", " c None", ". c #FFFFFF", "+ c #A7A7B2", "@ c #A6A6B2", "# c #A6A6B1", "$ c #A5A5B0", "% c #A4A4B0", "& c #A4A4AF", "* c #A3A3AF", "= c #A3A3AE", "- c #A2A2AE", "; c #A1A1AD", "> c #A1A1AC", ", c #A0A0AC", "' c #9F9FAB", ") c #9E9EAA", "! c #9D9DAA", "~ c #9D9DA9", "{ c #9C9CA8", "] c #9B9BA7", "^ c #9A9AA7", "/ c #9A9AA6", "( c #9999A5", "_ c #9898A5", ": c #9898A4", "< c #9797A4", "[ c #9797A3", "} c #9696A3", "| c #9595A2", "1 c #9595A1", "2 c #9494A1", "3 c #9393A0", "4 c #92929F", "5 c #91919F", "6 c #91919E", "7 c #90909D", "8 c #8F8F9C", "9 c #8E8E9C", "0 c #8E8E9B", "a c #8D8D9A", "b c #8C8C9A", "c c #8C8C99", "d c #8B8B99", "e c #8A8A98", "f c #898997", "g c #898996", "h c #888896", "i c #878795", "j c #868694", "k c #858594", "l c #858593", "m c #848492", "n c #838391", "o c #828291", "p c #828290", "q c #818190", "r c #474755", "s c #80808F", "t c #80808E", "u c #7F7F8E", "v c #7E7E8D", "w c #7D7D8C", "x c #A2A2AD", "y c #9B9BA8", "z c #8F8F9D", "A c #838392", "B c #81818F", "C c #7C7C8B", "D c #7B7B8A", "E c #7A7A89", "F c #797988", "G c #787887", "H c #9696A2", "I c #8D8D9B", "J c #8A8A97", "K c #7E7E8C", "L c #777787", "M c #777786", "N c #767686", "O c #757585", "P c #757584", "Q c #747484", "R c #747483", "S c #7A7A8A", "T c #767685", "U c #737383", "V c #727282", "W c #727281", "X c #717181", "Y c #707080", "Z c #6F6F7F", "` c #6E6E7F", " . c #8B8B98", ".. c #848493", "+. c #7F7F8D", "@. c #787888", "#. c #737382", "$. c #6E6E7E", "%. c #6D6D7D", "&. c #6C6C7D", "*. c #6C6C7C", "=. c #6B6B7C", "-. c #6B6B7B", ";. c #6A6A7A", ">. c #69697A", ",. c #888895", "'. c #6A6A7B", "). c #696979", "!. c #686879", "~. c #676778", "{. c #676777", "]. c #666677", "^. c #656576", "/. c #646475", "(. c #636374", "_. c #626273", ":. c #616172", "<. c #606072", "[. c #606071", "}. c #5F5F70", "|. c #797989", "1. c #6D6D7E", "2. c #686878", "3. c #616173", "4. c #5E5E70", "5. c #5E5E6F", "6. c #5D5D6F", "7. c #5C5C6E", "8. c #5C5C6D", "9. c #5B5B6D", "0. c #000000", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". + + @ # $ % & * = - ; > , ' ) ) ! ~ { ] ] ^ / ( _ : < [ } | 1 2 3 4 4 5 6 7 8 8 9 0 a b c d e f f g h i j j k l m n n o p q r ", ". + @ # $ % & * = - ; > , ' ) ) ! ~ { ] ] ^ / ( _ : < [ } | 1 2 3 4 4 5 6 7 8 8 9 0 a b c d e f f g h i j j k l m n n o p q r r ", ". @ # $ % & * = - ; > , ' ) ) ! ~ { ] ] ^ / ( _ : < [ } | 1 2 3 4 4 5 6 7 8 8 9 0 a b c d e f f g h i j j k l m n n o p q s r r ", ". # $ % & * = - ; > , ' ) ) ! ~ { ] ] ^ / ( _ : < [ } | 1 2 3 4 4 5 6 7 8 8 9 0 a b c d e f f g h i j j k l m n n o p q s t r r ", ". $ % & * = - ; > , ' ) ) ! ~ { ] ] ^ / ( _ : < [ } | 1 2 3 4 4 5 6 7 8 8 9 0 a b c d e f f g h i j j k l m n n o p q s t u r r ", ". % & * = - ; > , ' ) ) ! ~ { ] ] ^ / ( _ : < [ } | 1 2 3 4 4 5 6 7 8 8 9 0 a b c d e f f g h i j j k l m n n o p q s t u v r r ", ". & * = - ; > , ' ) ) ! ~ { ] ] ^ / ( _ : < [ } | 1 2 3 4 4 5 6 7 8 8 9 0 a b c d e f f g h i j j k l m n n o p q s t u v w r r ", ". * - x ; > , ' ) ) ~ { { y ] ^ / ( _ : < } | | 1 2 3 4 4 6 7 7 z 8 9 0 a b c d e f f g h i j j l m m A n o p B s t u v w w r r ", ". - x ; > , ' ) ) ~ { { y ] ^ / ( _ : < } | | 1 2 3 4 4 6 7 7 z 8 9 0 a b c d e f f g h i j j l m m A n o p B s t u v w w C r r ", ". x ; > , ' ) ) ~ { { y ] ^ / ( _ : < } | | 1 2 3 4 4 6 7 7 z 8 9 0 a b c d e f f g h i j j l m m A n o p B s t u v w w C D r r ", ". ; > , ' ) ) ~ { { y ] ^ / ( _ : < } | | 1 2 3 4 4 6 7 7 z 8 9 0 a b c d e f f g h i j j l m m A n o p B s t u v w w C D D r r ", ". > , ' ) ) ~ { { y ] ^ / ( _ : < } | | 1 2 3 4 4 6 7 7 z 8 9 0 a b c d e f f g h i j j l m m A n o p B s t u v w w C D D E r r ", ". , ' ) ) ~ { { y ] ^ / ( _ : < } | | 1 2 3 4 4 6 7 7 z 8 9 0 a b c d e f f g h i j j l m m A n o p B s t u v w w C D D E E r r ", ". ' ) ) ~ { { y ] ^ / ( _ : < } | | 1 2 3 4 4 6 7 7 z 8 9 0 a b c d e f f g h i j j l m m A n o p B s t u v w w C D D E E F r r ", ". ) ) ~ { { y ] ^ / ( _ : < } | | 1 2 3 4 4 6 7 7 z 8 9 0 a b c d e f f g h i j j l m m A n o p B s t u v w w C D D E E F G r r ", ". ) ~ { { y ] / ( ( _ : < } H | 2 3 3 4 4 6 7 7 z 8 0 I a b c d e J f h i i j j l m m A n o q B s t u v K w C D D E E F G G r r ", ". ~ { { y ] / ( ( _ : < } H | 2 3 3 4 4 6 7 7 z 8 0 I a b c d e J f h i i j j l m m A n o q B s t u v K w C D D E E F G G L r r ", ". { { y ] / ( ( _ : < } H | 2 3 3 4 4 6 7 7 z 8 0 I a b c d e J f h i i j j l m m A n o q B s t u v K w C D D E E F G G L M r r ", ". { y ] / ( ( _ : < } H | 2 3 3 4 4 6 7 7 z 8 0 I a b c d e J f h i i j j l m m A n o q B s t u v K w C D D E E F G G L M N r r ", ". y ] / ( ( _ : < } H | 2 3 3 4 4 6 7 7 z 8 0 I a b c d e J f h i i j j l m m A n o q B s t u v K w C D D E E F G G L M N O r r ", ". ] / ( ( _ : < } H | 2 3 3 4 4 6 7 7 z 8 0 I a b c d e J f h i i j j l m m A n o q B s t u v K w C D D E E F G G L M N O P r r ", ". / ( ( _ : < } H | 2 3 3 4 4 6 7 7 z 8 0 I a b c d e J f h i i j j l m m A n o q B s t u v K w C D D E E F G G L M N O P Q r r ", ". ( ( _ : < } H | 2 3 3 4 4 6 7 7 z 8 0 I a b c d e J f h i i j j l m m A n o q B s t u v K w C D D E E F G G L M N O P Q R r r ", ". ( _ : < } H | 2 3 3 4 6 6 7 7 z 8 0 I a b c d e J f h i i j l l m m A n p q B s u v v K w C D D S E F G G L M T O P Q U V r r ", ". _ : < } H | 2 3 3 4 6 6 7 7 z 8 0 I a b c d e J f h i i j l l m m A n p q B s u v v K w C D D S E F G G L M T O P Q U V V r r ", ". : < } H | 2 3 3 4 6 6 7 7 z 8 0 I a b c d e J f h i i j l l m m A n p q B s u v v K w C D D S E F G G L M T O P Q U V V W r r ", ". < } H | 2 3 3 4 6 6 7 7 z 8 0 I a b c d e J f h i i j l l m m A n p q B s u v v K w C D D S E F G G L M T O P Q U V V W X r r ", ". } H | 2 3 3 4 6 6 7 7 z 8 0 I a b c d e J f h i i j l l m m A n p q B s u v v K w C D D S E F G G L M T O P Q U V V W X Y r r ", ". H | 2 3 3 4 6 6 7 7 z 8 0 I a b c d e J f h i i j l l m m A n p q B s u v v K w C D D S E F G G L M T O P Q U V V W X Y Z r r ", ". | 2 3 3 4 6 6 7 7 z 8 0 I a b c d e J f h i i j l l m m A n p q B s u v v K w C D D S E F G G L M T O P Q U V V W X Y Z Z r r ", ". 2 3 3 4 6 6 7 7 z 8 0 I a b c d e J f h i i j l l m m A n p q B s u v v K w C D D S E F G G L M T O P Q U V V W X Y Z Z ` r r ", ". 3 3 4 6 6 7 7 z 8 0 I a b d .e J f h i i j l l ..m A n p q B s u +.v K w C D D E F F @.G L M T O P Q U #.V X Y Y Z Z $.%.r r ", ". 3 4 6 6 7 7 z 8 0 I a b d .e J f h i i j l l ..m A n p q B s u +.v K w C D D E F F @.G L M T O P Q U #.V X Y Y Z Z $.%.%.r r ", ". 4 6 6 7 7 z 8 0 I a b d .e J f h i i j l l ..m A n p q B s u +.v K w C D D E F F @.G L M T O P Q U #.V X Y Y Z Z $.%.%.&.r r ", ". 6 6 7 7 z 8 0 I a b d .e J f h i i j l l ..m A n p q B s u +.v K w C D D E F F @.G L M T O P Q U #.V X Y Y Z Z $.%.%.&.*.r r ", ". 6 7 7 z 8 0 I a b d .e J f h i i j l l ..m A n p q B s u +.v K w C D D E F F @.G L M T O P Q U #.V X Y Y Z Z $.%.%.&.*.=.r r ", ". 7 7 z 8 0 I a b d .e J f h i i j l l ..m A n p q B s u +.v K w C D D E F F @.G L M T O P Q U #.V X Y Y Z Z $.%.%.&.*.=.-.r r ", ". 7 z 8 0 I a b d .e J f h i i j l l ..m A n p q B s u +.v K w C D D E F F @.G L M T O P Q U #.V X Y Y Z Z $.%.%.&.*.=.-.;.r r ", ". z 8 0 I a b d .e J f h i i j l l ..m A n p q B s u +.v K w C D D E F F @.G L M T O P Q U #.V X Y Y Z Z $.%.%.&.*.=.-.;.>.r r ", ". 0 0 I a b d .e f h h ,.i j l l ..m n p p q B s u +.v w C C D D E F F @.G M N T O P Q U #.V X Y Y Z Z $.%.%.&.*.-.'.;.>.).r r ", ". 0 I a b d .e f h h ,.i j l l ..m n p p q B s u +.v w C C D D E F F @.G M N T O P Q U #.V X Y Y Z Z $.%.%.&.*.-.'.;.>.).!.r r ", ". I a b d .e f h h ,.i j l l ..m n p p q B s u +.v w C C D D E F F @.G M N T O P Q U #.V X Y Y Z Z $.%.%.&.*.-.'.;.>.).!.~.r r ", ". a b d .e f h h ,.i j l l ..m n p p q B s u +.v w C C D D E F F @.G M N T O P Q U #.V X Y Y Z Z $.%.%.&.*.-.'.;.>.).!.~.{.r r ", ". b d .e f h h ,.i j l l ..m n p p q B s u +.v w C C D D E F F @.G M N T O P Q U #.V X Y Y Z Z $.%.%.&.*.-.'.;.>.).!.~.{.].r r ", ". d .e f h h ,.i j l l ..m n p p q B s u +.v w C C D D E F F @.G M N T O P Q U #.V X Y Y Z Z $.%.%.&.*.-.'.;.>.).!.~.{.].^.r r ", ". .e f h h ,.i j l l ..m n p p q B s u +.v w C C D D E F F @.G M N T O P Q U #.V X Y Y Z Z $.%.%.&.*.-.'.;.>.).!.~.{.].^./.r r ", ". e f h h ,.i j l l ..m n p p q B s u +.v w C C D D E F F @.G M N T O P Q U #.V X Y Y Z Z $.%.%.&.*.-.'.;.>.).!.~.{.].^././.r r ", ". f h h i j j l l ..m n o p q B t u +.v w C C D E E F F @.G M N T O P Q U #.V X Y Y Z $.$.%.%.&.*.-.'.;.>.!.~.~.{.].^././.(.r r ", ". h h i j j l l ..m n o p q B t u +.v w C C D E E F F @.G M N T O P Q U #.V X Y Y Z $.$.%.%.&.*.-.'.;.>.!.~.~.{.].^././.(._.r r ", ". h i j j l l ..m n o p q B t u +.v w C C D E E F F @.G M N T O P Q U #.V X Y Y Z $.$.%.%.&.*.-.'.;.>.!.~.~.{.].^././.(._._.r r ", ". i j j l l ..m n o p q B t u +.v w C C D E E F F @.G M N T O P Q U #.V X Y Y Z $.$.%.%.&.*.-.'.;.>.!.~.~.{.].^././.(._._.:.r r ", ". j j l l ..m n o p q B t u +.v w C C D E E F F @.G M N T O P Q U #.V X Y Y Z $.$.%.%.&.*.-.'.;.>.!.~.~.{.].^././.(._._.:.:.r r ", ". j l l ..m n o p q B t u +.v w C C D E E F F @.G M N T O P Q U #.V X Y Y Z $.$.%.%.&.*.-.'.;.>.!.~.~.{.].^././.(._._.:.:.<.r r ", ". l l ..m n o p q B t u +.v w C C D E E F F @.G M N T O P Q U #.V X Y Y Z $.$.%.%.&.*.-.'.;.>.!.~.~.{.].^././.(._._.:.:.<.[.r r ", ". l ..m n o p q B t u +.v w C C D E E F F @.G M N T O P Q U #.V X Y Y Z $.$.%.%.&.*.-.'.;.>.!.~.~.{.].^././.(._._.:.:.<.[.}.r r ", ". m n n o p q s t u +.v w C C D E E |.F G M M N T O Q R U #.V X Y Y Z $.$.1.%.*.-.-.'.;.>.!.2.~.{.].^././.(._._.3.:.<.[.}.4.r r ", ". n n o p q s t u +.v w C C D E E |.F G M M N T O Q R U #.V X Y Y Z $.$.1.%.*.-.-.'.;.>.!.2.~.{.].^././.(._._.3.:.<.[.}.4.5.r r ", ". n o p q s t u +.v w C C D E E |.F G M M N T O Q R U #.V X Y Y Z $.$.1.%.*.-.-.'.;.>.!.2.~.{.].^././.(._._.3.:.<.[.}.4.5.6.r r ", ". o p q s t u +.v w C C D E E |.F G M M N T O Q R U #.V X Y Y Z $.$.1.%.*.-.-.'.;.>.!.2.~.{.].^././.(._._.3.:.<.[.}.4.5.6.7.r r ", ". p q s t u +.v w C C D E E |.F G M M N T O Q R U #.V X Y Y Z $.$.1.%.*.-.-.'.;.>.!.2.~.{.].^././.(._._.3.:.<.[.}.4.5.6.7.8.r r ", ". q s t u +.v w C C D E E |.F G M M N T O Q R U #.V X Y Y Z $.$.1.%.*.-.-.'.;.>.!.2.~.{.].^././.(._._.3.:.<.[.}.4.5.6.7.8.9.r r ", ". r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r ", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0."}; wmdrawer-0.10.5.orig/pixmaps/defaultIconsBg2.xpm0000644000175000017500000002447610067336544022425 0ustar matrixmatrix00000000000000/* XPM */ static char * defaultIconsBg_xpm[] = { "64 64 128 2", " c None", ". c #000104", "+ c #383847", "@ c #636775", "# c #888C9B", "$ c #ADB1C0", "% c #DBE0E3", "& c #9B9FAE", "* c #757A88", "= c #C3C7D6", "- c #1D1E25", "; c #EFEEF3", "> c #4E525F", ", c #9296A5", "' c #A3A7B7", ") c #B8BCCC", "! c #818594", "~ c #17181E", "{ c #A6A6A9", "] c #6E7381", "^ c #AA9CA9", "/ c #979599", "( c #A09DAE", "_ c #8A8B94", ": c #5B5D72", "< c #ADADB0", "[ c #94949E", "} c #FDFFFC", "| c #A8A9B3", "1 c #82838C", "2 c #B4B4B7", "3 c #B1B2BC", "4 c #D1D1DB", "5 c #9BA3AB", "6 c #7A7A83", "7 c #46485C", "8 c #6A6972", "9 c #5E5F68", "0 c #9D92A4", "a c #9794A5", "b c #8D869D", "c c #8A8AA0", "d c #7A7A90", "e c #CEC9C7", "f c #757377", "g c #C0B9C6", "h c #CCC9CE", "i c #71727B", "j c #ABA8B9", "k c #E3E7E9", "l c #29282E", "m c #47474F", "n c #8A829A", "o c #6B647A", "p c #000100", "q c #84849A", "r c #B6B0BB", "s c #B0A9B4", "t c #8F8994", "u c #A7A0AB", "v c #BFBEC2", "w c #67677C", "x c #999AA3", "y c #707085", "z c #5B5F6C", "A c #514F5F", "B c #B4B1C2", "C c #A6A3B4", "D c #D3D2D0", "E c #22232B", "F c #CDC6D2", "G c #A1A5B4", "H c #8D8A9A", "I c #90919B", "J c #9F9FA9", "K c #C0C1CB", "L c #858292", "M c #9A9AB0", "N c #D3D1D6", "O c #7B7F8D", "P c #7B7888", "Q c #676474", "R c #CACBD5", "S c #A3A4AD", "T c #89828D", "U c #5F5C6C", "V c #4E5255", "W c #AFABBD", "X c #99929D", "Y c #F1F3F0", "Z c #928F9F", "` c #B8B5C6", " . c #807D8D", ".. c #BDB6C2", "+. c #C6C6D0", "@. c #1D1D20", "#. c #979BAA", "$. c #E6E4E8", "%. c #464855", "&. c #8D91A0", "*. c #726E7E", "=. c #B7B8C1", "-. c #676C7A", ";. c #DDD7E3", ">. c #AAAEBD", ",. c #ACADB7", "'. c #3F3F4C", "). c #242326", "!. c #9E98A3", "~. c #655E74", "{. c #585564", "]. c #7F7F88", "^. c #DDDCE1", "/. c #958F9A", "(. c #9C99AA", "_. c #655F69", ":. c #767383", "<. c #4E5259", "[. c #898696", "}. c #C6BFCB", "|. c #6D6A7A", "1. c #040107", "2. c #78727C", "3. c #BBBCC6", "4. c #D4CDD9", "5. c #ECE9EE", "6. c #B3B7C6", "7. c #868790", "} } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } Y D 2 ", "} } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } Y h < ", "} } } Y Y Y Y Y Y Y Y Y ; ; ; ; ; Y ; Y ; ; ; ; ; ; ; ; Y 5.5.k Y k 5.5.k k 5.5.5.5.5.$.k $.$.$.$.$.$.$.$.$.$.$.^.^.^.$.$.e / f ", "} } Y k % ^.^.% % % $.^.^.$.^.^.^.N % N N N N N 4 4 N N h N N h h h h N N h h h h +.K +.v K }.` ` ` ........r r r s s G S 1 m @.", "} } Y % N 4 N N ^.N N N 4 4.4.4.4.h R h F R +.+.+.) K +.v }.}.3.3.3.6.6.3.v 2 3 3 3 3 B | ' j j j j u u u ^ ^ 0 0 c 0 c ! 9 @.p ", "} } ; % R N 4 4 D 4 4 N h N 4 4 R 4.h F F }.+.+.= +.3.3.3.=.v g r ` B B =.3 ..r r B ,.,.,.' C ^ u S S S S G G & a Z # ! ! z E p ", "} } Y % R N N R 4 4 4 N h N h 4.R 4.R R F R v h v h v g g ..v g ..` ` B ` ` ..r 3 r 3 < < C C C u { { 5 { { J J x a Z c ! z l p ", "} } ; ;.= +.R 4 4 4 N R R +.R R F +.F F = K K v }.}.` g v =.` ..` ` B ` ` ` 3 3 r $ ,.,.| | j G | S 5 { 5 5 5 5 a I &.# ! Q E p ", "} } ; ;.4 R +.= 4 R N N R = +.h R = = }.F v K K K K 3.=.=.=.` B B ` ..` ` B B >.W W W r s s W S S S & & S S J x a X I # 1 9 ).p ", "} } Y ;.F R R 4.4.4.R R R F = R F F }.= K K v v 3.) K ` ` ` B B B B B ..B W W s ,.>.' | | ' u C S u ( ( & J x #.[ &.H H ! 8 l p ", "} } Y % +.R R R 4 N h 4.+.F = = = = K K ) K 3.3.v 3.3.3.` ` ` W B ..r r B B $ $ W W W s < | { G 5 S u 0 & & x x I &.Z [.].9 ).p ", "} } ; 4 R R R R N h R +.= = F = +.+.K ) K ) v v v v v 6.6.B B W r s W B W r B W W W j W j u ( J S J ( ( M & & &.&.Z # [.q z l p ", "} } Y N +.+.R R R R R F F = F = +.h v 3.3.6.=.=.6.6.r r B B ..W W W W r W j j ' j j S S | S J & & #.#.!.( , x I _ H # ! .z E p ", "} } ; ;.F +.v K R = F = = }.K K 3.3.K v v 3.) 6.=.=.6.B r W W W W W j W W W j C u u u u J S ( ( M (.!.x x !.a Z Z H L L d : E p ", "} } Y N +.+.h R R = +.+.K v v h v v g =.=...` ` ` B B W r r W W j j j ' j s C C u S { S J J x x #.#.#.x x !.!.X _ H ! 1 P U E p ", "} } ; 4 +.K +.v 4.R +.h v F K 3.v =.=.g ..r B B 6.=.$ r W W s j G j C ' s | s S 5 { 5 5 J J !.( !.!.!.!.!.x [ I _ _ 1 .* <.).p ", "} } Y 4 R K +.+.R R +.+.K }.v K v v 3.g ` ` W B ` ..B r j W j j S C | ' | S < { | | { 5 5 & !.x x x x #.#.#.x / 7.7.1 T P z ).p ", "} } 5.^.F }.= +.F +.+.+.K +.) 3.3.g g ` ` ` B ` B >.r W W j ' s ' | j C C j G { { { 5 G J S / !.#., , a a a &.# _ 7.].].6 _.E p ", "} } 5.N +.}.3.K F +.K K ) }.g ..=.=.=.` W ` W W B W W s W W j j G S | G & C s { S S 5 #.& & J x x &.&.a , &.&._ _ # O ].6 9 ).p ", "} } Y 4.}.v K +.= }.}.}.3.3.3.=.) =.6.` ` W ` $ W W j j ' j ' | s s S s | S & & 5 5 x J x , , , , , , &.Z a t # 1 1 1 .] <.E p ", "} } Y N K 3.3.v +.+.3.g g g g ..` ` W B B W B r W W j j ' ' G S { { S { S 5 5 & x J / J !.X Z a , [ [ [ /.Z H # ! L O d d > E p ", "} } 5.h g v v 3.}.g v v 3.=.=.=.` B $ B W 3 s W s j j G S j u S S S { S S { S x & x 5 x x , a &.a a I I &.Z t t 1 O .* ] > - p ", "} } 5.R 6.=.}.3.v g 3.v g g ` =.6.B W r s B s ' s C C C u S S S S & S S & & J 5 x !.[ , , [ &.I H 0 H t [ Z H t T T P :.y > E p ", "} } ; = ) ` v ....=.v =.=.` ..` ` B r W W s ,.s S ' j ^ C G S J J 5 J J ( ( J / x , (.a , &.I # # c H &.Z Z t L T P 2.:.i <.@.p ", "} } 5.+.=...v g g 6.3.3.=.B B $ B >.>.W W s < | | C ' C ^ ^ & J & & & 5 J & & 5 !.X x , , &.I t _ t H # # Z [.O ]. .2.*.-.> - p ", "} } Y h =.=...=.=...3.=.` B ` ` $ W j W W W j s | | C C C ( ^ & & & & ( & J x x x , a Z Z &.# # _ _ # H c # # ! O 2.P ] 8 <.@.. ", "} } k }...=.g ` ....g g ` B B B W W W j s | ' s G G G G S S u u #.#.#.(.(.( !.x x , (., a &.&.# H [.c c c c [.q d P * ] @ > - p ", "} } 5.h 3 =.=.3.3.3.v =.g ` ` ` $ $ >.,.' s s G j ' G S | S & & & & (.M M #.(., x X , , , &.# # H b b n c H c L q d y y w > - p ", "} } k h ..=.g =.g g g 3.` ` B B W >.>.,.| | s u C G ' S S S J 5 #.& #.#.(.#.!.!.#.X a [ x &.# # t H H [.q [.c . .P *.:.w > - p ", "} } Y h =.` =...v =.3.....r B W $ ,.< < | s C ' C C S 5 S J & ( & x { J ( M (., X [ [ [ Z I Z H # t [.q [.H 1 ! d .y y -.%.@.. ", "} } 5.F =.$ 6.6.=.=.6.$ B W $ $ ,.,.,.,.| | j ' ^ C u & & J !.( & & / x x M (., X X [ [ /.H c H _ _ _ ! ! [.O 1 d * ] |.-.> - . ", "} } $.+.r =.=.=.g ` B ` B $ W ,.,.,.< < ' ' G C ' C & G u ( M ( (.!.#.x (.(.(., , I / I Z Z H H ! ! L 7.7.! L d * P i ] Q A @.p ", "} } $.F r 3 3 =...` W ) W 6.3 < < < ,.| s C G M C C ( & ( ( (.(.a !.a (.X X !.[ [ Z /._ /.Z c H _ ! [.! # # ! d y *.i ] w A - p ", "} } 5.) W ,.3 3 6.` $ $ $ W W >.,.,.| s G u C C ' M & M ( & !.!.!.a (.X , , , , [ [ _ Z H # ! # L T ! ! 1 O O .P :.2.8 -.%.- p ", "} } $.K s ,.$ B 6.6.,.,.W W j | ' s S S S u u ^ C ( & #.(.(.x , x [ , , , a [ [ &.Z b c c # q ! 7.T 1 ! 1 T .P P *.2._.@ m @.. ", "} } $.}.W j W W W W 3 ,.,.W s j S G G C u u ( & & J ( (.!.x , !.a , , x a [ [ I /.b H H H [.1 1 T ].T ].1 1 ].2.2.2.8 8 _.m - . ", "} } k 3.s j >.B $ W r W s W s j C C u G & ( ( !.( (.(.#.x !., , X [ Z [ I [ &.H &.Z c [.! ! ! O 1 O ].O O L .2.2.2.8 8 8 m @.. ", "} } $.}.j j W >.>.>.j s | | | | u u ( ( ( J 5 M #.#.x x (., , [ , [ [ / [ [ I I H c H H t 7.1 ]. .O O . .O 6 * -.-.|.@ z m - . ", "} } k v | C W W s >.>.W | s S ' C u ^ u (.(.& #.(.(.(.[ !.a a &., [ X [ /./.Z H H t t [.[.T ! ]. . .O O P d P 2.2.8 8 Q U m @.. ", "} } k 3.{ j W W $ W | | | | >.G G ( !.(.(.M M (.x x [ x a 0 a X /.[ &.I Z H H H # # ! t t 7.1 O O O O O O O P d ] ] Q 8 z '.- . ", "} } k 3.S C s W ,.W s s ' | | S | C ( ( (.( M M x x , [ [ a , [ I / /.I X Z Z H t t # [.[.T 7.T . .O O P d * y y -.@ Q z m @.. ", "} } $.3.j j ' j W W W W s u ' ' C C C ( ( #.( J & x !.x #.a a [ / [ I X [ X &.Z # Z H t t 7.1 O O O . .O O d * ] ] 8 8 9 %.- . ", "} } $.` j s < s W W j W >.| ' C C C C J u J & ( J x x / J !.[ x / X /./.I X I Z H H H # _ 7.1 1 O O O .O ].O * *.*.8 8 _.m @.. ", "} } $.}.u S ' ' ,.W s j j C C S C ^ ( ( & & & x #.x J !.x , a Z I / [ X X t t _ # t # _ # 7.1 .O . .O 6 * * P ] -.-.Q z m - . ", "} } k ) >.s ,.s ,.$ ,.s | | C C C ^ u u u ( & J J x x !.a a &.X I I I I Z Z H _ _ t t t t 7.1 T * O d O ].6 6 P y |.@ Q : m ~ . ", "} } $.K j | | >.W W s { s C j C C C ^ ( #.#.& #.#.(.& , x , a &.I / [ I [ I &.t ! ! 7._ ! T 1 ].O * O d * 6 * ] ] -.Q @ U '.@.p ", "} } $.` ^ s s | W W r s s u s G S G u 0 ( M M (.x x x a a , [ X /.I /.[ [ /.# H H [.[.t # T 1 T O O O d d O 6 i i ] w @ ~.%.- 1.", "} } $.` ' j | W ' ' j S s j G G G ( ^ & (.a (.!.x X !.[ , [ , &.Z /.&.&./.I Z # H H [.L T L L ].T T P * O * O ] ] -.-.Q _.'.@.. ", "} } $.` ( s < | s | s G G C ( ( u M 0 u x x , a x [ [ [ &.I /.Z H H H H H H Z _ T t [.T 1 T P P * 6 * P d d * ] -.|.@ z _.'.@.1.", "} } k =.S G ' j G G G j C M G & & ( ( , #.[ a a [ /.X /.X # # H c 0 H c b H [.7.# L T ! ].P . .2.6 2.] * * * *.2.-.|.Q <.'.@.. ", "} } k 3 ( S | ' u ' S G G ( ( M #.M M (.a a a Z [ I I _ X Z # H c H _ t b c b 1 ! ! 1 T T P P P * * ] ] ] ] i *.8 _.8 _._.'.@.. ", "} } $.=.& M M j G ' ' G C & ( (.( #.( a , a &.a Z [ _ Z # # H c # H _ # H b q q ! 1 1 O . .P ] ] ] :.:.:.i ] 8 2.8 _.U > '.~ . ", "} } $.=.& & ( ' G G C J J J x (.(.a (.a &.a &.&.I [ &._ H c [.q [.[.t ! ! L L .O .].O P 2.2.2.] *.y y y i -.@ Q Q _.U A '.~ . ", "} } k 6.& M & M M C & #.( x ( !.a (.a a [ [ [ [ &.# _ # 7.T q [.q q ! [.T 1 O d P 6 O P .P 6 ] y -.Q o Q w |.Q z U : U A + ~ . ", "} } k ..& M #.( ( ( M , , [ [ !.0 Z Z Z _ I _ I # # _ ! ! T . . .d O O O .].P * 2.* * ] y 2.8 y w w o o -.|.w Q U : {.A + ~ . ", "} } % ,.a Z a (.& & (.a X [ Z c # H H [.H ! # [.T T .L O * .* P P d P .6 P ] *.6 i ] ] ] w w Q Q Q w Q Q z U : {.{.{.7 + ~ . ", "} } ^.s Z c &., !.[ a &.Z &.H c H ! T L L d q ! d .P P P 2.6 P 2.2.* ] :.i 2.i i i i |.|.|.o |.Q @ Q Q _._._.U ~.{.> A 7 + ~ . ", "} } $.u H H b Z &., c b c [.H L ! 1 ! .q .d d ].P P d P * 2.2.] ] :.2.] :.i 8 8 |.|.8 8 w w : @ Q : : w @ z {.> {.A > 7 + ~ . ", "} } ^.( q q b H H H c [.b L q q q O .P d O d d * P *.y *.*.*.*.*.-.] *.] |.-.Q @ @ -.-.Q Q o : z z Q ~.U z z U <.{.A A 7 + ~ . ", "} } k u L n q n c c b n L q L ! O .O * O ] * ] P :.:.P *.y |.] -.] |.-.|.-.w @ @ Q U Q @ : : {.z U : : : : z > A > A 7 7 + ~ . ", "} } 5.& * P O 1 _ ! L .O O O O O * 6 ] d ] i ] ] :.*.y |.w |.8 8 @ @ @ @ @ @ : : : : : : : {.A : {.{.{.{.: {.A A 7 7 7 7 + ~ . ", "D N < 6 z 9 _.z @ _._._._.z z z z <.z z > A _.V {.{.{.{.<.> > > m <.%.%.> m 7 %.%.7 7 7 7 '.'.'.'.'.'.'.'.'.7 + + + + '.+ E ~ 1.", "V V m l l l l ).l l E E E E l ).l ).- E ).- ).).E - ).E ).- - - @.@.@.- - @.- - ~ ~ ~ ~ - - ~ - - ~ @.~ ~ @.@.~ ~ ~ ~ ~ ~ ~ 1.1.", "p p p p . . p 1.p . p p p p . . p . p p 1.1.1.p p p . p 1.1.. . . . . p . . . . . . . 1.. . p p 1.1.. p p 1.1.p p p 1.1.1.1.p 1."}; wmdrawer-0.10.5.orig/pixmaps/defaultDockIcon.xpm0000644000175000017500000000667610067336544022512 0ustar matrixmatrix00000000000000/* XPM */ static char * defaultDockIcon_xpm[] = { "48 48 64 1", " c None", ". c #9E9A9E", "+ c #868286", "@ c #000000", "# c #717171", "$ c #303030", "% c #080808", "& c #383838", "* c #A6A2AE", "= c #696969", "- c #AEAAAE", "; c #515151", "> c #414141", ", c #181818", "' c #413428", ") c #202020", "! c #494949", "~ c #8E8A8E", "{ c #BEBABE", "] c #281C10", "^ c #969296", "/ c #616161", "( c #693C00", "_ c #8E5100", ": c #D77900", "< c #282828", "[ c #594118", "} c #F78E08", "| c #101010", "1 c #080400", "2 c #C7C3C7", "3 c #595959", "4 c #A6A2A6", "5 c #DFD3DF", "6 c #D7D3D7", "7 c #101810", "8 c #B6B2B6", "9 c #C7C7C7", "0 c #181018", "a c #E7E7E7", "b c #FFFBFF", "c c #F7F3F7", "d c #EFEBEF", "e c #D7DBD7", "f c #F7F7F7", "g c #282028", "h c #CFCBCF", "i c #717971", "j c #202820", "k c #DFDBDF", "l c #797979", "m c #414541", "n c #868686", "o c #EFE3EF", "p c #595D59", "q c #716D69", "r c #96969E", "s c #303830", "t c #9E9E9E", "u c #968A96", "v c #616561", "w c #515551", "x c #514951", "y c #797179", " ", " .+++. @ ", " #$%@@@%&. @@@ ", " *=@@+-;@>>,. @@@@@ ", " +;'%)!~~{@]>$! @@@@@@@ ", " ^/'(_:_<$$.-+@@)&,. @@@@@@@@@ ", " #[:}}}:@|,))|@@@@<%# @@@@@@@@@@@", " [}:_(1@@@@@1@@@@@|%$ ", " ^;>](_@@@@@@@@@@@@@< ", " =@@@@@@@@@@@@@) ", " )@@@@@+23@@@@@# ", " ^%,@@@456^@@@|&7. ", " <=68+9666{@@@,;0; ", " /,9abbcdad6~@%$;&7. ", " !=abbbbbbbe{@&;!>0! ", " .$%.fbbbbbbbb.%!<@+ ", " >g&*dbbbbbbbh||&1)&;0) ", " 3)i>4abbbbbb+|%<)@@<;>@~ ", " !ji;>4kbbbbb-@|>)@@@,>!@$ ", " ;l{+);^5fbbbb)|!)@@@@@$;$%. ", " ~$6++)i+4kbbb-@&,@@@@@@|m!@/ ", " <94++);+nhbbb;|$@@@@@@@@<;%| ", " #+2+++)>8{-obk@,|@@@@@p&@@;,@+ ", " ;d++n+)=hkked{@@@@@@@@q/@@&&@$ ", " +/2+++~|=eakkd~@@@@@@@@q~@@%!@@^ ", " !.255^.@labffc+@@@@@@|g/r%@@,)@# ", " @> ", " @bbbbkt&8kbbbb+@@@@@|#..t$@@@$%@ ", " ~$bbbba{&4kbbbb+@@@@@$^^88;@@@%@@~ ", " +>bbbke- ", " ;>dkh#~ $!2abbbd|@@@|+^666{;@@@@@) ", " #;a5#. ;>86bbbb>@@@<+-6666#@@@@@@. ", " .|d8+ ~,t6dbbb#@@@<+86666#@@@@@@+ ", " %h^ |/heccb6@@@&^-6666n$@@@@@; ", " $.^ =)8665d63@@<~.66664m@@@@@< ", " ~;{ )l66e66{g@<.r6666-v|@@@@) ", " { #%^6k666{gq-{6666h#)@@@@@ ", " $'^66656666666666#$@@@@@. ", " ^%%~hk66666666666#!@@@@@+ ", " +%%q!9663-66666{~3|@@,$= ", " ;@>q#r^>,^26662+=>@@);,^ ", " ~;;;$+>,w+x)@0i^8h{+l;$@@&!$# ", " ,vw/{2^~$7;3@@@7>w;><,@@@@@,@)~ ", " =/+4=y=;m//s^;)@@@@@@@+ ", " ^;<))!gmpkkh{{{{-.+## .+=;;;;. ", " .. ^;!!!!!!!))|<# ", " "}; wmdrawer-0.10.5.orig/pixmaps/defaultUp.xpm0000644000175000017500000000502510067336544021370 0ustar matrixmatrix00000000000000/* XPM */ static char * defaultUp_xpm[] = { "48 48 2 1", " c None", ". c #000000", " ", " . ", " ... ", " ..... ", " ....... ", " ......... ", " ...........", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; wmdrawer-0.10.5.orig/pixmaps/defaultHighlightImg.xpm0000644000175000017500000001053510067336544023352 0ustar matrixmatrix00000000000000/* XPM */ static char * defaultHighlightImg_xpm[] = { "64 64 2 1", " c None", ". c black", " ", " ............. ............. ", " ............ ............ ", " ........... ........... ", " .... .... ", " ... ... ", " ... ... ", " ... ... ", " ... ... ", " ... ... ", " ... ... ", " ... ... ", " .. .. ", " . . ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " . . ", " .. .. ", " ... ... ", " ... ... ", " ... ... ", " ... ... ", " ... ... ", " ... ... ", " ... ... ", " .... .... ", " ........... ........... ", " ............ ............ ", " ............. ............. ", " "}; wmdrawer-0.10.5.orig/pixmaps/defaultIcon.xpm0000644000175000017500000000712010067336544021672 0ustar matrixmatrix00000000000000/* XPM */ static char * defaultIcon_xpm[] = { "48 48 74 1", " c None", ". c #000000", "+ c #A27F3B", "@ c #B89243", "# c #D8AB4E", "$ c #9D7D3A", "% c #A6823C", "& c #7C622D", "* c #F7D899", "= c #F7E2B8", "- c #D8BA7B", "; c #BE9B53", "> c #F7C35A", ", c #F7DFAF", "' c #F7E5C0", ") c #F7D48C", "! c #F7CF7E", "~ c #D8B15F", "{ c #6E5526", "] c #F7DCA5", "^ c #A8843D", "/ c #937435", "( c #AA863E", "_ c #D8B66E", ": c #BEA363", "< c #947536", "[ c #927335", "} c #F7C96D", "| c #80632D", "1 c #C39F57", "2 c #A38E55", "3 c #A48B5A", "4 c #D2A64D", "5 c #82662F", "6 c #654F24", "7 c #DCB463", "8 c #BE9544", "9 c #C3A466", "0 c #8C6D31", "a c #D2B06C", "b c #D8BE86", "c c #715929", "d c #B99344", "e c #B38D40", "f c #D8B56E", "g c #D8AC58", "h c #997A3B", "i c #000001", "j c #6B5527", "k c #C39F55", "l c #DCC494", "m c #DAB872", "n c #C9AC73", "o c #BFA16A", "p c #19150D", "q c #876A31", "r c #C9A45B", "s c #C6A76A", "t c #7F6941", "u c #977737", "v c #D8B165", "w c #D8AC5B", "x c #BEA272", "y c #C09745", "z c #D8B163", "A c #927C52", "B c #735F3B", "C c #A68748", "D c #1A1A1A", "E c #393939", "F c #221C12", "G c #DDBC74", "H c #D2A64C", "I c #705627", " ", " ", " ", " ", " ", " ", " ", " ", " ........ ", " ...+@#$%&... ", " ..#**=*---;%... ", " ..>,'*)>>>!-~%{.. ", " .>,]>^//(>>!_~%.. ", " .:*=><....[>>}~~|.. ", " .}'!<.. .1>!#~%.. ", " .2),#.. .3>}~#%.. ", " .4!>%.. .3}}_#5.. ", " .>!>%.. .3>__#6.. ", " .7~85.. .9}-#%... ", " ....... 0ab~#c.. ", " ..... .d)b#8... ", " .e}b##... ", " ..>)fgh..i ", " jklmnop.. ", " .qafrst.. ", " .u-vwx.. ", " .y-zwA.. ", " .#b~#B.. ", " .;-#8.. ", " .CC%|.. ", " .DE... ", " .... ", " ", " F.... ", " .G!)8.. ", " .!**#.. ", " .))~8.. ", " .)_#8.. ", " .H~8I.. ", " ...... ", " .... ", " ", " ", " ", " ", " ", " ", " "}; wmdrawer-0.10.5.orig/ChangeLog0000644000175000017500000002432410067336544017005 0ustar matrixmatrix000000000000002004-06-09 Valry Febvre * version: 0.10.5 * config.c: 2 minor bugs in config parsing were fixed. 2004-06-03 Tomek Grzejszczyk * wmdrawer.c: Fixed drawer animation speed problem with 2.6.x kernels. 2003-08-27 Valry Febvre * version: 0.10.4.1 - Major bugfixe release * config.c: Fixed a segfault which occurs when number of buttons was not equal in all columns (memory dynamic allocation bug). 2003-08-27 Valry Febvre * version: 0.10.4 * images.c: Rewrite createAndResizePixmap() function. Images can be fit now to a rectangular shape. * config.c: Some code clean-up. 2003-08-24 Jan Gregor * config.c: Possibility to add ' ' or '\t' before comment characters. When notifying about warning/error in config file, number of line on which warning/error happened is now printed. All arrays have now dynamic length. The dock can be now rectangular. Option dock_size was replaced by 2 new options: dock_width and dock_height. 2003-08-23 Valry Febvre * version: 0.10.3 * images.c: Add param resizeMask to createAndResizePixmap() function. * config.c, wmdrawer.c: a new behavior, icons' auto-expand. Allows icons' enlargement to fit them to buttons' size. This behavior can be controlled with the option icons_expand (0/1). 2003-08-21 Valry Febvre * config.c: Changed min and max values for dock_size and btns_size to MIN_ICON_SIZE and MAX_ICON_SIZE (types_defs.h). * images.c: the createAndResizePixmap() function now resizes the image (greater or smaller) to fit exactly with dimension "dim x dim" 2003-08-20 Jan Gregor * config.c, wmdrawer.c: a new behavior, dock's size This can be controlled with option dock_size in the configuration file. 2003-06-23 Valry Febvre * Makefile: a compilation problem on FreeBSD was fixed. 2003-06-08 Valry Febvre * wmdrawer.c: a bug in the drawer's opening was fixed (windowed mode only). 2003-06-04 Valry Febvre * version: 0.10.2 * wmdrawer.c, config.c: the drawer's animation can now be disabled with value 0 for option animation_speed in the configuration file. 2003-05-24 Valry Febvre * wmdrawer.c: one more auto-hide bug was fixed (Thx to Joerg Desch for the bug report). 2003-05-20 Valry Febvre * version: 0.10.1 * wmdrawer.c: a new auto-hide bug was fixed. The last! I hope. * images.c, Makefile: It's now possible to use Imlib as image library (Makefile option). * wmdrawer.c, images.c: Some minor improvements were made. 2003-04-07 Valry Febvre * version: 0.10.0 * config.c, wmdrawer.c: a new feature, tooltips for buttons This feature can be controlled with the option tooltips (0/1) and the tootlips' font can be changed with the option tooltips_font. 2003-04-05 Valry Febvre * config.c, wmdrawer.c: events management and config file parsing codes were partially rewritten. Config file syntax was changed to support the future tooltips feature. 2003-04-01 Valry Febvre * wmdrawer.c: a new auto-hide bug was fixed. A sleep was removed in commands' execution process. So the applications are now launched without delay. 2003-03-29 Valry Febvre * config.c, Makefile: several modifications to solve compilation problems under Solaris (openwin, getopt_long) 2003-03-29 Valry Febvre * wmdrawer.c: the highlight was improved and an auto-hide bug was fixed. 2003-03-28 Ed Goforth * version: 0.9.17.1 * config.c: a bug in the config.imagesPaths dynamic allocation was fixed. 2003-03-27 Valry Febvre * version: 0.9.17 2003-03-23 Valry Febvre * wmdrawer.c: an auto-hide bug fixed. * config.c: support for long options in command line options added 2003-03-19 Valry Febvre * wmdrawer.c: add XSetCommand() for dockIconWin * config.c, wmdrawer.c: a new behavior, drawer's pseudo-transparency This can be controlled with option transparency (0/1) in the configuration file. * config.c, wmdrawer.c, graphics.c: a new highlight type, shading This can be controlled with value 2 for option highlight in the configuration file. This highlight has 2 associated options, highlight_tint and highlight_sh highlight_sh : icon's darkening level highlight_tint : icon's tinting color 2003-03-16 Valry Febvre * config.c, wmdrawer.c: a large piece of code rewritten. Now the code is a little bit easier and the app uses less memory. 2003-03-10 Ed Goforth * config.c, wmdrawer.c: a patch which allows to set the client instance name (application name) so the window manager can differentiate between multiple instances. This behavior can be control with option instance_name in the configuration file or from command-line with -n option. * wmdrawer.c: another patch which add XSetCommand() so that the window manager can grab the command-line args wmdrawer was started with. This is helpful for WindowMaker so it won't have to ask you to type the command-line in when docking. 2003-03-04 Valry Febvre * wmdrawer.c: highlight bug fixed (direction 1 and 3) * wmdrawer.c: buttons' press/release animation improved * config.c, wmdrawer.c: a new behavior, drawer's border size This can be controlled with option border_size (pixels) in the configuration file. 2003-02-27 Valry Febvre * version: 0.9.16 * config.c, wmdrawer.c: cursor's choice extended to all X standard cursors. * wmdrawer.c: buttons' press/release animation completely rewritten. 2003-01-24 Valry Febvre * version: 0.9.15 * wmdrawer.c: an auto-hide bug fixed. 2003-01-23 Valry Febvre * version: 0.9.14 * images.c: a bug with the gdk-pixbuf2 image loading library fixed. 2003-01-11 Valry Febvre * version: 0.9.13 * wmdrawer.c: a memory leak in buttons' highlight fixed. 2002-11-27 Valry Febvre * version: 0.9.12 * config.c, wmdrawer.c: a new feature, ability to launch several apps at once from the drawer. By holding down the key Shift or by using mouse buttons middle or right instead of left, you can keep the drawer opened. * wmdrawer.c: Auto shifting of the drawer if it leaves the screen. 2002-11-23 Scott Morgan * wmdrawer.c: a patch which allows to launch several apps at once from the drawer. By holding down the key Shift, you can keep the drawer opened. 2002-11-08 Valry Febvre * version: 0.9.11 * wmdrawer.c: a bug in 'show_on_hover' mode fixed. * config.c, wmdrawer.c: a new behavior, highlight icon under cursor. This can be controlled with option highlight (0/1) in the configuration file. * config.c, wmdrawer.c: a new adjustment, choice of the drawer's hiding timeout. This can be controlled with option hide_timeout (value in miliseconds, default 1000). 2002-10-30 Valry Febvre * version: 0.9.10 * config.c, wmdrawer.c: a new adjustment: buttons' size This can be changed with option btns_size (min=8, max=64) in the configuration file. 2002-10-27 Valry Febvre * version: 0.9.9 * config.c, wmdrawer.c: a new behavior, windowed mode Use command line option -w or config file option windowed_mode. Useful for AfterStep, Fvwm, Sawfish and KDE users * wmdrawer.c: minor bugs fixes. 2002-10-23 Valry Febvre * version: 0.9.8 * config.c: Oops! This version only fixes a bug introduced into the version 0.9.7. It was no longer possible to use long commands in the configuration file ([column] section). 2002-10-23 Valry Febvre * version: 0.9.7 * doc/wmdrawer.sgml: a first manpage version (english) added. * config.c: improvement in the parsing of the config file. * wmdrawer.c: minor bugs fixes. 2002-10-21 Valry Febvre * version: 0.9.6 * config.c, wmdrawer.c: automatic reloading of the config file if it changes. * wmdrawer.c: the character '&' isn't necessary any more at the end of commands. 2002-10-16 Franciso Jose Oviedo * wmdrawer.c: a patch to improve the commands' execution process. 2002-10-13 Valry Febvre * version: 0.9.5 * wmdrawer.c: better management of mouse events. * config.c, wmdrawer.c: a new adjustment, choice of the mouse cursor in the drawer. This can be controlled with option cursor (0/1/2) in the configuration file. 2002-10-08 Valry Febvre * version: 0.9.4 * config.c, wmdrawer.c: a new behavior, automatic closing of the drawer when the mouse leaves the drawer. This can be controlled with option hide_on_out (0/1) in the configuration file. 2002-10-01 Valry Febvre * version: 0.9.3 * images.c: add ability to build wmDrawer with gdk-pixbuf-2.0 library instead of gdk-pixbuf (Makefile option) * config.c: one bug fixed, if several columns were defined and hadn't the same number of buttons, a shift between buttons and commands could occur. 2002-09-23 Valry Febvre * version: 0.9.2 * config.c: multi-instances support with command line option -c 2002-09-23 Konstantin Malakhanov * images.c: support for absolute image paths in the configuration file 2003-09-20 Oliwier 'aLEczapKA' Ptak * config.c, wmdrawer.c: a new behavior, automatic opening of the drawer when the mouse enters in the dockapp. This can be controlled with option show_on_hover (0/1) in the configuration file. 2002-09-16 Valry Febvre * version: 0.9.1 * wmdrawer.c: some bugs in the drawer's animation fixed. * wmdrawer.c: the problem with directions 0 and 3 was solved. 2002-09-15 Valry Febvre * version: 0.9.0 First public release wmdrawer-0.10.5.orig/wmdrawer-gentoo.ebuild0000644000175000017500000000127310067336544021540 0ustar matrixmatrix00000000000000# Copyright 1999-2003 Gentoo Technologies, Inc. # Distributed under the terms of the GNU General Public License v2 IUSE="" S=${WORKDIR}/${P} DESCRIPTION="wmDrawer is a dock application (dockapp) which provides a drawer (retractable button bar) to launch applications" SRC_URI="http://people.easter-eggs.org/~valos/wmdrawer/${P}.tar.gz" HOMEPAGE="http://people.easter-eggs.org/~valos/wmdrawer/" SLOT="0" LICENSE="GPL-2" KEYWORDS="~x86" DEPEND="virtual/x11 media-libs/gdk-pixbuf" src_compile() { emake || die "make failed!" } src_install() { dobin wmdrawer dodoc COPYING INSTALL README TODO AUTHORS ChangeLog wmdrawerrc.example gzip -cd doc/wmdrawer.1x.gz > wmdrawer.1 doman wmdrawer.1 } wmdrawer-0.10.5.orig/graphics.c0000644000175000017500000000567210067336544017204 0ustar matrixmatrix00000000000000/* wmDrawer (c) 2002-2004 Valery Febvre * * wmDrawer is a dock application (dockapp) which provides a * drawer (button bar) to launch applications from. * * 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 "types_defs.h" #include "graphics.h" /* This function come from aterm 0.4.2 (src/ximage_utils.c) * Copyright (c) 2001 Ren Scharfe * Copyright (c) 2001,1999 Sasha Vasko */ void ShadeXImage (Display *dpy, XImage* srcImage, ShadingInfo* shading) { unsigned int int_rm, int_gm, int_bm ; int shade = 0; register unsigned long p, x; unsigned long y; unsigned int rb_mask, g_mask; unsigned char r_shift=16, g_shift=8, b_shift; Visual* visual = DefaultVisual(dpy, DefaultScreen(dpy)); if( visual->class != TrueColor || srcImage->format != ZPixmap ) return ; if( srcImage->bits_per_pixel <= 8 ) return ; if( shading->shading < 0 ) shade = 100-shading->shading ; /*we want to lighten instead of darken */ else shade = shading->shading ; if( shade > 200 ) shade = 200 ; int_rm = (shading->tintColor.red>>8)*shade/100; int_gm = (shading->tintColor.green>>8)*shade/100; int_bm = (shading->tintColor.blue>>8)*shade/100; g_mask = rb_mask = 0xf8 ; b_shift = 3 ; switch (srcImage->bits_per_pixel) { case 15: r_shift = 7 ; g_shift = 2 ; break ; case 16: g_mask = 0xfc ; r_shift = 8 ; g_shift = 3 ; break ; case 32: case 24: g_mask = rb_mask = 0xff ; r_shift = 16 ; g_shift = 8 ; break ; } if (srcImage->bits_per_pixel<=16) { /* for better speed we don't want to check for it inside the loop */ for (y = 0; y < srcImage->height; y++) for (x = 0; x < srcImage->width; x++) { p = XGetPixel(srcImage, x, y); XPutPixel(srcImage, x, y, ((((((p>>r_shift)&rb_mask)*int_rm)/255)&rb_mask)<>g_shift)&g_mask)*int_gm)/255)&g_mask)<>b_shift)); } } else { for (y = 0; y < srcImage->height; y++) for (x = 0; x < srcImage->width; x++) { p = XGetPixel(srcImage, x, y); XPutPixel(srcImage, x, y, ((((((p>>r_shift)&rb_mask)*int_rm)/255)&rb_mask)<>g_shift)&g_mask)*int_gm)/255)&g_mask)< * * wmDrawer is a dock application (dockapp) which provides a * drawer (button bar) to launch applications from. * * 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. */ void ShadeXImage (Display *dpy, XImage* srcImage, ShadingInfo* shading); wmdrawer-0.10.5.orig/COPYING0000644000175000017500000004310510067336544016264 0ustar matrixmatrix00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy 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 Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.