diff --git a/x11-wm/ion3/ChangeLog b/x11-wm/ion3/ChangeLog new file mode 100644 index 00000000..05a2751f --- /dev/null +++ b/x11-wm/ion3/ChangeLog @@ -0,0 +1,16 @@ +# ChangeLog for x11-wm/ion3 +# Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2 +# $Header: $ + + 18 Apr 2010; Rafael Goncalves Martins + ion3-20090110-r1.ebuild: + Fixed URLs of sources. The official website is offline. + +*ion3-20090110-r1 (24 Jan 2010) + + 24 Jan 2010; Rafael Goncalves Martins + +files/ion-3-20090526.diff, +files/ion-3plus.proportional.patch, + +files/ion3-fix_build_system.patch, +files/ion3.desktop, + +files/pwm3.desktop, +ion3-20090110-r1.ebuild: + Initial import. + diff --git a/x11-wm/ion3/Manifest b/x11-wm/ion3/Manifest new file mode 100644 index 00000000..b9412f0f --- /dev/null +++ b/x11-wm/ion3/Manifest @@ -0,0 +1,24 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +AUX ion-3-20090526.diff 5498 RMD160 f983bbd6785f3a3527a1cbf2cdb39135aebbfac1 SHA1 cdeba4e57b3d33f0585207cf8cb737a98f9ace9c SHA256 a4b8465aeb5627c29a8d7d35be6ba1013bcda5a0d7cf051300afa744d4315e48 +AUX ion-3plus.proportional.patch 11146 RMD160 80b3c31c95f3a3220e14cff3613bc7a99f44561c SHA1 0c53ee6ec69fc4b3b4cfa56e4a7d30883ed1daac SHA256 5744d219b98ca2fb2c6204546032172b76a9de7f3e671c42086f700881eeb878 +AUX ion3-fix_build_system.patch 2039 RMD160 24bd3ce9ad4415fb4098f0326099f9f3a5c71e3a SHA1 b865f06baa3f7dc346091a3e53e8c2bce5032940 SHA256 91148708cc116439b1f769bf634121ad9acdf46821bf7aa2b24dac20f860838c +AUX ion3.desktop 217 RMD160 438917d6c0370e7a368598ea611ec7658312627d SHA1 cf5cd1f09faf7530f8cb2f832a17c0cf893541c4 SHA256 4742797e200b956abf3d0b94d860aa7430c9f67a97f3640ef2c28168fa773bb9 +AUX pwm3.desktop 170 RMD160 7a33137ccf3857cacd7ff693df2e8952e16e3a84 SHA1 7ff6792b6e61a9a2fbb4f0fa7e3d9dbf856c8d28 SHA256 e068670634d31e58db4f54e703707f7908d30ced7f765e30ab590615b3d5dccd +DIST ion-3-20090110.tar.gz 643971 RMD160 b67f7731b0e86fa41486482aaac3e3476bf9b59c SHA1 01d1574060520abcb16f511fac25e4b9f20137e7 SHA256 daf6c43e67ec477fa274a57d7d20059dd76f66cce2ed3e9db706a59254d173da +DIST ion-doc-3-20090110.tar.gz 931777 RMD160 5ea4f16fbf2749be87a1411efe5f021bf9fb7d4a SHA1 4148ee777fbf7ed14e6e56b32b4fc116251d920a SHA256 52e9aafc545aeb564b73b947268c4a082d8044489ac446e568b69122bc5d7f53 +EBUILD ion3-20090110-r1.ebuild 2444 RMD160 d712d9eeea23d7224b56f373b81173748fe6f24a SHA1 8982972db807ba244f0ba2aff444ff9bc13acb97 SHA256 697254111a6ff1b29479f472d231fe89e2f1c53818a94e17b56e0523d46effb9 +MISC ChangeLog 565 RMD160 b6403fc2529bf3db30bae4110b78fa7a8675c445 SHA1 fb50fbb7c2083b76468b41951090145bd832ec8a SHA256 10b90b57048e8aef3cab3045d1c6c90725d54925e73d6a8d8b9717cf4dbd22fe +MISC metadata.xml 653 RMD160 ba334c164775604877496f35bdec6195d878a1e2 SHA1 faf4ce1cc50aad7f14abf035a19c2469825ba5c1 SHA256 f4d80290b4eb15f59066cbc3e72801cdd3982838f399a67ee7ef4c19f97e6b38 +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2.0.15 (GNU/Linux) + +iQEcBAEBAgAGBQJLy5m3AAoJEMmH5mwCk1NvnnsIAI1rk/vx0pguTKOTHCPfzxpn +KuvZSqi3gMTR66rR48SFpJqqn94yk2ZX3nlcSsX+mV7nzhVX1CWbdEhpNW5ItbnS +UrOnrbUnEPhrDdG76zwDvQr7bF4dopphTC1v9U6YorN3mY2rjRFxCnZQucPqZ2tS +iQOC7O2qtE7nK8jz0bYoVdDfD3Ia1K/aRk/U9nbi7g4LVp06v/WWfJPEv7V4ILcR +zaU2fLeDGqQlWkBZmvFGo0EsLuGOpHbiEuUVmAENBvTD3Q2NcRk4sLnV82gsIY7B +uY73T2e3HiLmnt7ig81AUBV1mHDgaUh6m+2ui1NGBNLaHkWXoiNkgGDJ7o0D1f0= +=peFD +-----END PGP SIGNATURE----- diff --git a/x11-wm/ion3/files/ion-3-20090526.diff b/x11-wm/ion3/files/ion-3-20090526.diff new file mode 100644 index 00000000..7a51cb22 --- /dev/null +++ b/x11-wm/ion3/files/ion-3-20090526.diff @@ -0,0 +1,142 @@ +Mon Mar 2 10:30:41 W. Europe Standard Time 2009 Tuomo Valkonen + * Don't symlink look.lua, but rather dopath from within +Mon Mar 2 10:09:36 W. Europe Standard Time 2009 Tuomo Valkonen + * Fix frame_clear_shape +Sun Feb 8 23:37:32 W. Europe Standard Time 2009 Tuomo Valkonen + * WM_TAKE_FOCUS tune +Fri Jan 9 23:19:32 W. Europe Standard Time 2009 Tuomo Valkonen + tagged ion-3-20090110 +diff -rN -u old-ion-3/config.h new-ion-3/config.h +--- old-ion-3/config.h 2009-05-26 19:09:08.172555900 +0200 ++++ new-ion-3/config.h 2009-05-26 19:09:15.984855900 +0200 +@@ -1,4 +1,4 @@ +-/* ++/* + * config.h + * + * Copyright (c) Tuomo Valkonen 1999-2009. +diff -rN -u old-ion-3/etc/Makefile new-ion-3/etc/Makefile +--- old-ion-3/etc/Makefile 2009-05-26 19:09:15.359871900 +0200 ++++ new-ion-3/etc/Makefile 2009-05-26 19:09:16.344221700 +0200 +@@ -11,6 +11,7 @@ + ETC = cfg_ion.lua cfg_ioncore.lua cfg_kludges.lua cfg_defaults.lua \ + cfg_tiling.lua cfg_query.lua cfg_menu.lua \ + cfg_statusbar.lua cfg_dock.lua cfg_layouts.lua \ ++ look.lua \ + look_brownsteel.lua look_clean.lua look_dusky.lua \ + look_greyviolet.lua look_ios.lua look_cleanviolet.lua \ + look_simpleblue.lua look_cleanios.lua look_newviolet.lua \ +@@ -24,5 +25,3 @@ + ###################################### + + _install: etc_install +- rm -f $(ETCDIR)/look.lua +- ln -s look_newviolet.lua $(ETCDIR)/look.lua +diff -rN -u old-ion-3/etc/look.lua new-ion-3/etc/look.lua +--- old-ion-3/etc/look.lua 1970-01-01 01:00:00.000000000 +0100 ++++ new-ion-3/etc/look.lua 2009-05-26 19:09:16.484843100 +0200 +@@ -0,0 +1 @@ ++dopath('look_newviolet') +diff -rN -u old-ion-3/ioncore/clientwin.c new-ion-3/ioncore/clientwin.c +--- old-ion-3/ioncore/clientwin.c 2009-05-26 19:09:15.562991700 +0200 ++++ new-ion-3/ioncore/clientwin.c 2009-05-26 19:09:17.125451700 +0200 +@@ -1015,10 +1015,11 @@ + { + if(cwin->flags&CLIENTWIN_P_WM_TAKE_FOCUS){ + Time stmp=ioncore_get_timestamp(); ++ region_finalise_focusing((WRegion*)cwin, cwin->win, warp, stmp); + send_clientmsg(cwin->win, ioncore_g.atom_wm_take_focus, stmp); ++ }else{ ++ region_finalise_focusing((WRegion*)cwin, cwin->win, warp, CurrentTime); + } +- +- region_finalise_focusing((WRegion*)cwin, cwin->win, warp); + + XSync(ioncore_g.dpy, 0); + } +diff -rN -u old-ion-3/ioncore/focus.c new-ion-3/ioncore/focus.c +--- old-ion-3/ioncore/focus.c 2009-05-26 19:09:15.531742500 +0200 ++++ new-ion-3/ioncore/focus.c 2009-05-26 19:09:18.219173700 +0200 +@@ -347,7 +347,7 @@ + /*Time ioncore_focus_time=CurrentTime;*/ + + +-void region_finalise_focusing(WRegion* reg, Window win, bool warp) ++void region_finalise_focusing(WRegion* reg, Window win, bool warp, Time time) + { + if(warp) + region_do_warp(reg); +@@ -356,10 +356,7 @@ + return; + + region_set_await_focus(reg); +- /*xwindow_do_set_focus(win);*/ +- XSetInputFocus(ioncore_g.dpy, win, RevertToParent, +- CurrentTime/*ioncore_focus_time*/); +- /*ioncore_focus_time=CurrentTime;*/ ++ XSetInputFocus(ioncore_g.dpy, win, RevertToParent, time); + } + + +diff -rN -u old-ion-3/ioncore/focus.h new-ion-3/ioncore/focus.h +--- old-ion-3/ioncore/focus.h 2009-05-26 19:09:15.484868700 +0200 ++++ new-ion-3/ioncore/focus.h 2009-05-26 19:09:18.250422900 +0200 +@@ -23,7 +23,7 @@ + extern void region_warp(WRegion *reg); /* maybewarp TRUE */ + extern void region_set_focus(WRegion *reg); /* maybewarp FALSE */ + +-extern void region_finalise_focusing(WRegion* reg, Window win, bool warp); ++extern void region_finalise_focusing(WRegion* reg, Window win, bool warp, Time time); + + DYNFUN void region_do_set_focus(WRegion *reg, bool warp); + extern void region_do_warp(WRegion *reg); +diff -rN -u old-ion-3/ioncore/frame-draw.c new-ion-3/ioncore/frame-draw.c +--- old-ion-3/ioncore/frame-draw.c 2009-05-26 19:09:15.422370300 +0200 ++++ new-ion-3/ioncore/frame-draw.c 2009-05-26 19:09:18.266047500 +0200 +@@ -219,7 +219,8 @@ + + void frame_clear_shape(WFrame *frame) + { +- grbrush_set_window_shape(frame->brush, TRUE, 0, NULL); ++ if(frame->brush!=NULL) ++ grbrush_set_window_shape(frame->brush, TRUE, 0, NULL); + } + + +diff -rN -u old-ion-3/ioncore/group.c new-ion-3/ioncore/group.c +--- old-ion-3/ioncore/group.c 2009-05-26 19:09:15.453619500 +0200 ++++ new-ion-3/ioncore/group.c 2009-05-26 19:09:18.969154500 +0200 +@@ -241,7 +241,7 @@ + if(st!=NULL && st->reg!=NULL) + region_do_set_focus(st->reg, warp); + else +- region_finalise_focusing((WRegion*)ws, ws->dummywin, warp); ++ region_finalise_focusing((WRegion*)ws, ws->dummywin, warp, CurrentTime); + } + + +diff -rN -u old-ion-3/ioncore/window.c new-ion-3/ioncore/window.c +--- old-ion-3/ioncore/window.c 2009-05-26 19:09:15.437994900 +0200 ++++ new-ion-3/ioncore/window.c 2009-05-26 19:09:21.562838100 +0200 +@@ -182,7 +182,7 @@ + + void window_do_set_focus(WWindow *wwin, bool warp) + { +- region_finalise_focusing((WRegion*)wwin, wwin->win, warp); ++ region_finalise_focusing((WRegion*)wwin, wwin->win, warp, CurrentTime); + } + + +diff -rN -u old-ion-3/mod_tiling/tiling.c new-ion-3/mod_tiling/tiling.c +--- old-ion-3/mod_tiling/tiling.c 2009-05-26 19:09:15.437994900 +0200 ++++ new-ion-3/mod_tiling/tiling.c 2009-05-26 19:09:24.609635100 +0200 +@@ -158,7 +158,7 @@ + + void tiling_fallback_focus(WTiling *ws, bool warp) + { +- region_finalise_focusing((WRegion*)ws, ws->dummywin, warp); ++ region_finalise_focusing((WRegion*)ws, ws->dummywin, warp, CurrentTime); + } + + + diff --git a/x11-wm/ion3/files/ion-3plus.proportional.patch b/x11-wm/ion3/files/ion-3plus.proportional.patch new file mode 100644 index 00000000..0b1edbb1 --- /dev/null +++ b/x11-wm/ion3/files/ion-3plus.proportional.patch @@ -0,0 +1,350 @@ +diff -rN -ubp old-ion-3plus/ioncore/frame.c new-ion-3plus/ioncore/frame.c +--- old-ion-3plus/ioncore/frame.c 2009-03-15 11:57:04.000000000 +0100 ++++ new-ion-3plus/ioncore/frame.c 2009-03-15 11:57:04.000000000 +0100 +@@ -100,7 +100,8 @@ bool frame_init(WFrame *frame, WWindow * + frame->brush=NULL; + frame->bar_brush=NULL; + frame->mode=mode; +- frame->tab_min_w=0; ++ frame->float_tab_min_w=0; ++ frame->propor_tab_min_w=0; + frame->bar_max_width_q=1.0; + + gr_stylespec_init(&frame->baseattr); +@@ -282,29 +283,61 @@ int frame_nth_tab_x(WFrame *frame, int n + } + + ++void frame_get_max_width_and_elastic(WFrame * frame,int bar_w,int *maxw,int *elastic,int *minw);//FIXME ++ + static int frame_nth_tab_w_iw(WFrame *frame, int n, bool inner) + { + WRectangle bg; + GrBorderWidths bdw=GR_BORDER_WIDTHS_INIT; + int m=FRAME_MCOUNT(frame); ++ int maxw,elastic,textw,minw; + uint w; ++ WRegion *sub; ++ const char * p; + +- frame_bar_geom(frame, &bg); ++//fprintf(stderr,"HERE\n"); + +- if(m==0) +- m=1; ++ frame_bar_geom(frame, &bg); + + if(frame->bar_brush!=NULL) + grbrush_get_border_widths(frame->bar_brush, &bdw); + ++ if(m==0){ ++ m=1; ++ w=bg.w-bdw.left-bdw.right; ++ }else{ ++ frame_get_max_width_and_elastic(frame, bg.w, &maxw, &elastic, &minw); ++ if ((maxw > 0) && (maxw <= frame->propor_tab_min_w)) { + /* Remove borders */ + w=bg.w-bdw.left-bdw.right-(bdw.tb_ileft+bdw.tb_iright+bdw.spacing)*(m-1); +- ++//fprintf(stderr,"HEREmin maxw:%i minw:%i totalw:%i pad:%i w:%i (????)\n",maxw,minw,bg.w,elastic,w); + if(w<=0) + return 0; +- + /* Get n:th tab's portion of free area */ + w=(((n+1)*w)/m-(n*w)/m); ++ }else{ ++ ++ /* Get n:th tab's portion of elastic area */ ++ elastic=(((n+1)*elastic)/m-(n*elastic)/m); ++ ++ sub = mplex_mx_nth((WMPlex*)frame, n); ++ p=region_displayname(sub); ++ if(p==NULL) ++ textw=0; ++ else ++ textw=grbrush_get_text_width(frame->bar_brush, ++ p, strlen(p)); ++ if (textwpropor_tab_min_w) ++ textw=frame->propor_tab_min_w; ++ ++ if (maxw>0 && (textw>maxw)) ++ textw=maxw; ++ w=elastic+textw; ++//fprintf(stderr,"HEREsub %p maxw:%i minw:%i totalw:%i pad:%i w:%i (%s)\n",(void *)sub,maxw,minw,bg.w,elastic,w,p); ++ } ++ } + + /* Add n:th tab's borders back */ + if(!inner){ +@@ -312,6 +345,7 @@ static int frame_nth_tab_w_iw(WFrame *fr + w+=(n==m-1 ? bdw.right : bdw.tb_iright+bdw.spacing); + } + ++//fprintf(stderr,"THERE\n"); + return w; + } + +diff -rN -ubp old-ion-3plus/ioncore/frame-draw.c new-ion-3plus/ioncore/frame-draw.c +--- old-ion-3plus/ioncore/frame-draw.c 2009-03-15 11:57:04.000000000 +0100 ++++ new-ion-3plus/ioncore/frame-draw.c 2009-03-15 11:57:04.000000000 +0100 +@@ -225,10 +225,11 @@ void frame_clear_shape(WFrame *frame) + + #define CF_TAB_MAX_TEXT_X_OFF 10 + ++void frame_get_max_width_and_elastic(WFrame * frame,int bar_w,int *maxw,int *elastic, int *minw);//FIXME + + static void frame_shaped_recalc_bar_size(WFrame *frame, bool complete) + { +- int bar_w=0, textw=0, tmaxw=frame->tab_min_w, tmp=0; ++ int bar_w=0, textw, w, tmaxw, tminw, tmp=0; + WLListIterTmp itmp; + WRegion *sub; + const char *p; +@@ -241,43 +242,41 @@ static void frame_shaped_recalc_bar_size + return; + + m=FRAME_MCOUNT(frame); ++ bar_w=frame->bar_max_width_q*REGION_GEOM(frame).w; + + if(m>0){ +- grbrush_get_border_widths(frame->bar_brush, &bdw); +- bdtotal=((m-1)*(bdw.tb_ileft+bdw.tb_iright+bdw.spacing) +- +bdw.right+bdw.left); ++ ++ frame_get_max_width_and_elastic(frame, bar_w, &tmaxw, &tmp, &tminw); ++//fprintf(stderr," * WID total:%i maxw:%i minw:%i elastic:%i m:%i\n",bar_w,tmaxw,tminw,tmp,m); ++ if ((tmaxw < 0) && (tminw == frame->float_tab_min_w)) { ++ /* No label truncation needed, good. See how much can be padded. */ ++ w=bar_w-tmp; + + FRAME_MX_FOR_ALL(sub, frame, itmp){ + p=region_displayname(sub); + if(p==NULL) + continue; + +- textw=grbrush_get_text_width(frame->bar_brush, +- p, strlen(p)); +- if(textw>tmaxw) +- tmaxw=textw; ++ textw=2*CF_TAB_MAX_TEXT_X_OFF+ ++ grbrush_get_text_width(frame->bar_brush, ++ p, strlen(p))- ++ frame->float_tab_min_w; ++//fprintf(stderr," * WID addtextw:%i\n",textw); ++ if (textw>=2*CF_TAB_MAX_TEXT_X_OFF) ++ w+=2*CF_TAB_MAX_TEXT_X_OFF; ++ else if (textw >=0) ++ w+=textw; + } ++ if (bar_w>w)/*Padded to much*/ ++ bar_w=w; + +- bar_w=frame->bar_max_width_q*REGION_GEOM(frame).w; +- if(bar_wtab_min_w && +- REGION_GEOM(frame).w>frame->tab_min_w) +- bar_w=frame->tab_min_w; +- +- tmp=bar_w-bdtotal-m*tmaxw; +- +- if(tmp>0){ +- /* No label truncation needed, good. See how much can be padded. */ +- tmp/=m*2; +- if(tmp>CF_TAB_MAX_TEXT_X_OFF) +- tmp=CF_TAB_MAX_TEXT_X_OFF; +- bar_w=(tmaxw+tmp*2)*m+bdtotal; +- }else{ ++ } else { + /* Some labels must be truncated */ + } ++ + }else{ +- bar_w=frame->tab_min_w; +- if(bar_w>frame->bar_max_width_q*REGION_GEOM(frame).w) +- bar_w=frame->bar_max_width_q*REGION_GEOM(frame).w; ++ if(bar_w>frame->float_tab_min_w) ++ bar_w=frame->float_tab_min_w; + } + + if(complete || frame->bar_w!=bar_w){ +@@ -302,9 +301,133 @@ static int init_title(WFrame *frame, int + } + + ++/* Proportional tabs algorithm: ++ * Sort tabs by text sizes. ++ * From smallest to largest do: ++ * Compare current tab width with remaining width (incl. current) ++ divided by no. of remaining tabs (incl. current). ++ * If larger or equal, then set maximum width to the number computed ++ above and set elastic space to zero (resp. to remain after division). ++ (Return.) ++ * If smaller, subctract current width from remaining width and ++ subtract one from no. of remaining tabs. If this is the last ++ tab, then set additional padding to remaining width divided ++ by total number of tabs. ++ ++ Do not use w for shaped frames. ++*/ ++void frame_get_max_width_and_elastic(WFrame * frame,int bar_w,int *maxw,int *elastic, int *minw){ ++ /* Dummy implementation O(n^2), instead of O(n*log(n)) */ ++ int textw=0,tmp,tmaxw,tminw=frame->propor_tab_min_w; ++ WLListIterTmp itmp; ++ WRegion *sub; ++ const char *p; ++ GrBorderWidths bdw; ++ //char *title; ++ uint bdtotal,curw,nextw; ++ int i, m, n; ++ ++ m=FRAME_MCOUNT(frame); ++ *minw=0; ++ ++// if(frame->bar_brush==NULL) ++// *elastic=0; ++// *maxw=-1; ++//fprintf(stderr,"ZERR\n"); ++// return; ++ if(m>0){ ++ grbrush_get_border_widths(frame->bar_brush, &bdw); ++ bdtotal=((m-1)*(bdw.tb_ileft+bdw.tb_iright+bdw.spacing) ++ +bdw.right+bdw.left); ++ tmp = bar_w - bdtotal; ++//fprintf(stderr,"TMPST:%i barw:%i bdt:%i\n",tmp,bar_w,bdtotal); ++ ++ curw=0; ++ n=m; ++ ++ while (n>0) { ++ nextw=(uint)-1;/*FIXME: MAXINT*/ ++ if ((signed)curw*n >= tmp) { ++ /*Remainig tabs are too large => equal width.*/ ++ *maxw=tmp/n; ++ *elastic=tmp-(*maxw)*n; ++//fprintf(stderr,"TRUNC maxw:%i elastic:%i tmp:%i n:%i\n",*maxw,*elastic,tmp,n); ++ return; ++ } ++ FRAME_MX_FOR_ALL(sub, frame, itmp){ ++ p=region_displayname(sub); ++ if(p==NULL) ++ continue; ++ ++ textw=grbrush_get_text_width(frame->bar_brush, ++ p, strlen(p)); ++ if (textwcurw){ ++ if ((unsigned)textwbar_brush, ++ p, strlen(p)); ++ if (textwcurw){ ++ if ((unsigned)textw(unsigned)frame->float_tab_min_w) ++ nextw=frame->float_tab_min_w; ++//fprintf(stderr,"TMP --- tmp:%i n:%i curw:%i nextw:%i min:%i\n",tmp,n,curw,nextw,*minw); ++ if (n*(nextw-curw)<(unsigned)tmp) { ++ /*we can extend small tabs to 'nextw'*/ ++ *minw=nextw; ++ tmp-=n*(nextw-curw); ++//fprintf(stderr,"TMPSUBGO tmp:%i n:%i curw:%i nextw:%i min:%i\n",tmp,n,curw,nextw,*minw); ++ } else { ++ /*we can extend small tabs only to 'curw+tmp/n'*/ ++ *minw+=tmp/n; ++ tmp-=(*minw-curw)*n; ++//fprintf(stderr,"TMPSUBBRK tmp:%i n:%i curw:%i nextw:%i min:%i\n",tmp,n,curw,nextw,*minw); ++ break; ++ } ++ if (nextw==(unsigned)frame->float_tab_min_w) ++ break; ++ curw=nextw; ++ } ++ ++//fprintf(stderr,"TMP elastic:%i min:%i\n",tmp,*minw); ++ *elastic=tmp; ++ } else { ++ *elastic=0; ++ } ++ *maxw=-1; ++} ++ + void frame_recalc_bar(WFrame *frame, bool complete) + { +- int textw, i; ++ int textw, i, maxw, padding; + WLListIterTmp tmp; + WRegion *sub; + char *title; +@@ -357,7 +480,8 @@ void frame_draw_bar(const WFrame *frame, + grbrush_init_attr(frame->bar_brush, &frame->baseattr); + + grbrush_draw_textboxes(frame->bar_brush, &geom, frame->titles_n, +- frame->titles, complete); ++ //frame->titles, complete); ++ frame->titles, TRUE); + + grbrush_end(frame->bar_brush); + } +@@ -427,14 +551,17 @@ void frame_brushes_updated(WFrame *frame + frame->bar_h=bdw.top+bdw.bottom+fnte.max_height; + } + ++ //FIXME ++ frame->propor_tab_min_w=30; ++ + /* shaped mode stuff */ +- frame->tab_min_w=100; ++ frame->float_tab_min_w=100; + frame->bar_max_width_q=0.95; + + if(grbrush_get_extra(frame->brush, "floatframe_tab_min_w", +- 'i', &(frame->tab_min_w))){ +- if(frame->tab_min_w<=0) +- frame->tab_min_w=1; ++ 'i', &(frame->float_tab_min_w))){ ++ if(frame->float_tab_min_w<=0) ++ frame->float_tab_min_w=1; + } + + if(grbrush_get_extra(frame->brush, "floatframe_bar_max_w_q", +diff -rN -ubp old-ion-3plus/ioncore/frame.h new-ion-3plus/ioncore/frame.h +--- old-ion-3plus/ioncore/frame.h 2009-03-15 11:57:04.000000000 +0100 ++++ new-ion-3plus/ioncore/frame.h 2009-03-15 11:57:04.000000000 +0100 +@@ -76,7 +76,8 @@ DECLCLASS(WFrame){ + WFrameBarMode barmode; + int bar_w, bar_h; + double bar_max_width_q; +- int tab_min_w; ++ int float_tab_min_w; ++ int propor_tab_min_w; + }; + + diff --git a/x11-wm/ion3/files/ion3-fix_build_system.patch b/x11-wm/ion3/files/ion3-fix_build_system.patch new file mode 100644 index 00000000..ffc29ab9 --- /dev/null +++ b/x11-wm/ion3/files/ion3-fix_build_system.patch @@ -0,0 +1,69 @@ +diff -uNr ion-3-20090110.orig/build/rules.mk ion-3-20090110/build/rules.mk +--- ion-3-20090110.orig/build/rules.mk 2010-01-03 18:25:15.790364065 -0200 ++++ ion-3-20090110/build/rules.mk 2010-01-03 18:31:38.746612387 -0200 +@@ -267,5 +267,5 @@ + # Defaults + ###################################### + +-INSTALL_STRIP ?= -s ++INSTALL_STRIP ?= + INSTALLBIN ?= $(INSTALL) $(INSTALL_STRIP) -m $(BIN_MODE) +diff -uNr ion-3-20090110.orig/system.mk ion-3-20090110/system.mk +--- ion-3-20090110.orig/system.mk 2010-01-03 18:25:15.815367048 -0200 ++++ ion-3-20090110/system.mk 2010-01-03 18:29:55.384633453 -0200 +@@ -8,7 +8,7 @@ + + # Installation path prefix. Unless you know what you're doing, the default + # of /usr/local is likely the correct choice. +-PREFIX=/usr/local ++PREFIX=/usr + + # Unless you are creating a package conforming to some OS's standards, you + # probably do not want to modify the following directories: +@@ -16,7 +16,7 @@ + # Main binaries + BINDIR=$(PREFIX)/bin + # Configuration .lua files +-ETCDIR=$(PREFIX)/etc/ion3 ++ETCDIR=/etc/ion3 + # Some .lua files and ion-* shell scripts + SHAREDIR=$(PREFIX)/share/ion3 + # Manual pages +@@ -62,7 +62,7 @@ + + # If you have installed Lua 5.1 from the official tarball without changing + # paths, this should do it. +-LUA_DIR=/usr/local ++LUA_DIR=/usr + LUA_LIBS = -L$(LUA_DIR)/lib -llua + LUA_INCLUDES = -I$(LUA_DIR)/include + LUA=$(LUA_DIR)/bin/lua +@@ -81,7 +81,7 @@ + ## + + # Paths +-X11_PREFIX=/usr/X11R6 ++X11_PREFIX=/usr + # SunOS/Solaris + #X11_PREFIX=/usr/openwin + +@@ -157,8 +157,8 @@ + -Wtrigraphs -Wformat -Wchar-subscripts \ + -Wparentheses -pedantic -Wuninitialized + +-CFLAGS=-Os $(WARN) $(DEFINES) $(INCLUDES) $(EXTRA_INCLUDES) +-LDFLAGS=$(LIBS) $(EXTRA_LIBS) ++CFLAGS += $(WARN) $(DEFINES) $(INCLUDES) $(EXTRA_INCLUDES) ++LDFLAGS += $(LIBS) $(EXTRA_LIBS) + EXPORT_DYNAMIC=-Xlinker --export-dynamic + + # The following options are mainly for development use and can be used +@@ -208,7 +208,7 @@ + ## + + INSTALL=sh $(TOPDIR)/install-sh -c +-INSTALL_STRIP=-s ++INSTALL_STRIP= + INSTALLDIR=mkdir -p + + BIN_MODE=755 diff --git a/x11-wm/ion3/files/ion3.desktop b/x11-wm/ion3/files/ion3.desktop new file mode 100644 index 00000000..ba4103ec --- /dev/null +++ b/x11-wm/ion3/files/ion3.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Ion3 +Comment=A tiling tabbed window manager designed with keyboard users in mind. +Exec=ion3 +TryExec=ion3 +# no icon yet, only the top three are currently used +Icon= +Type=Application diff --git a/x11-wm/ion3/files/pwm3.desktop b/x11-wm/ion3/files/pwm3.desktop new file mode 100644 index 00000000..072f169f --- /dev/null +++ b/x11-wm/ion3/files/pwm3.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=PWM3 +Comment=An X11 window manager +Exec=pwm3 +TryExec=pwm3 +# no icon yet, only the top three are currently used +Icon= +Type=Application diff --git a/x11-wm/ion3/ion3-20090110-r1.ebuild b/x11-wm/ion3/ion3-20090110-r1.ebuild new file mode 100644 index 00000000..c98733bd --- /dev/null +++ b/x11-wm/ion3/ion3-20090110-r1.ebuild @@ -0,0 +1,113 @@ +# Copyright 1999-2010 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI="2" + +inherit eutils + +PATCH_VERSION="20090526" + +MY_PN="ion-3" +MY_P="${MY_PN}-${PV}" +MY_P_DOC="ion-doc-3-${PV}" + +DESCRIPTION="A tiling tabbed window manager designed with keyboard users in mind" +HOMEPAGE="http://modeemi.fi/~tuomov/ion/" +SRC_URI="http://files.rafaelmartins.eng.br/distfiles/${MY_P}.tar.gz + doc? ( http://files.rafaelmartins.eng.br/distfiles/${MY_P_DOC}.tar.gz )" + +LICENSE="LGPL-2" +SLOT="0" +KEYWORDS="~x86 ~amd64" +IUSE="proportional-tabs xscreensaver systray wallpaper doc" + +DEPEND="dev-lang/lua + x11-libs/libX11 + x11-libs/libSM + x11-libs/libXext + x11-libs/libICE" + +RDEPEND="x11-apps/xrdb + systray? ( x11-misc/trayion ) + xscreensaver? ( x11-misc/xscreensaver ) + wallpaper? ( media-gfx/imagemagick )" + +S="${WORKDIR}/${MY_P}" +S_DOC="${WORKDIR}/${MY_P_DOC}" + +src_prepare(){ + epatch "${FILESDIR}/${PN}-fix_build_system.patch" + + if [ "${PATCH_VERSION:-}" != "" ]; then + epatch "${FILESDIR}/${MY_PN}-${PATCH_VERSION}.diff" + fi + + if use proportional-tabs; then + epatch "${FILESDIR}/${MY_PN}plus.proportional.patch" + fi + + if use systray; then + sed -i \ + -e 's/max_/--max_/' \ + -e 's/min_/--min_/' \ + etc/cfg_kludges.lua || die 'sed failed.' + fi + + if use xscreensaver; then + sed -i -e 's/xlock/xscreensaver-command -lock/' \ + etc/cfg_ioncore.lua || die 'sed failed.' + fi +} + +src_compile(){ + emake -j1 || die 'emake failed.' +} + +src_install(){ + emake \ + PREFIX="${D}/usr" \ + ETCDIR="${D}/etc/${PN}" \ + DOCDIR="${D}/usr/share/doc/${PF}" \ + install || die 'emake install failed.' + + ecompressdir "/usr/share/doc/${PF}" + + insinto /usr/share/xsessions + doins "${FILESDIR}"/*.desktop + + use doc && cd "${S_DOC}" && dodoc *.pdf + + for i in ion3 pwm3; do + mv "${D}/usr/bin/${i}"{,-bin} + + echo -e "#!/bin/bash\n\n[ -f ~/.Xresources ] && xrdb ~/.Xresources" \ + > ${i} + + if use wallpaper; then + echo -n "[ -f ~/.ion3/wallpaper ] && " >> ${i} + echo "display -window root ~/.ion3/wallpaper" >> ${i} + fi + + if use systray; then + echo "(trayion&)" >> ${i} + fi + + if use xscreensaver; then + echo "(xscreensaver&)" >> ${i} + fi + + echo "exec ${i}-bin" >> ${i} + + dobin ${i} + done +} + +pkg_postinst() { + einfo 'Save your X settings to ~/.Xresources.' + if use wallpaper; then + einfo + einfo 'You have enabled the wallpaper USE flag.' + einfo 'Save your wallpaper at ~/.ion3/ with the name "wallpaper"' + fi +} diff --git a/x11-wm/ion3/metadata.xml b/x11-wm/ion3/metadata.xml new file mode 100644 index 00000000..c5659026 --- /dev/null +++ b/x11-wm/ion3/metadata.xml @@ -0,0 +1,19 @@ + + + + no-herd + + rafael@rafaelmartins.eng.br + Rafael Goncalves Martins + + + Ion is a tiling tabbed window manager designed with keyboard users in + mind. + + + Adds support to proportionally sized tabs + Adds support to trayion, a systray aplication for Ion3 + Adds support to use wallpapers + + +