ion3 added
This commit is contained in:
parent
bbfa5bfbc0
commit
0579b56dcd
|
@ -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 <rafael@rafaelmartins.eng.br>
|
||||||
|
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 <rafael@rafaelmartins.eng.br>
|
||||||
|
+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.
|
||||||
|
|
|
@ -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-----
|
|
@ -0,0 +1,142 @@
|
||||||
|
Mon Mar 2 10:30:41 W. Europe Standard Time 2009 Tuomo Valkonen <tuomov@iki.fi>
|
||||||
|
* Don't symlink look.lua, but rather dopath from within
|
||||||
|
Mon Mar 2 10:09:36 W. Europe Standard Time 2009 Tuomo Valkonen <tuomov@iki.fi>
|
||||||
|
* Fix frame_clear_shape
|
||||||
|
Sun Feb 8 23:37:32 W. Europe Standard Time 2009 Tuomo Valkonen <tuomov@iki.fi>
|
||||||
|
* WM_TAKE_FOCUS tune
|
||||||
|
Fri Jan 9 23:19:32 W. Europe Standard Time 2009 Tuomo Valkonen <tuomov@iki.fi>
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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 (textw<minw)
|
||||||
|
+ textw=minw;
|
||||||
|
+ if (textw<frame->propor_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_w<frame->tab_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 (textw<tminw)
|
||||||
|
+ textw=tminw;
|
||||||
|
+ if((unsigned)textw == curw){
|
||||||
|
+//fprintf(stderr,"TW:%i (%s)\n",textw,p);
|
||||||
|
+ tmp-=textw;
|
||||||
|
+ n--;
|
||||||
|
+ } else if((unsigned)textw>curw){
|
||||||
|
+ if ((unsigned)textw<nextw)
|
||||||
|
+ nextw=textw;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ curw = nextw;
|
||||||
|
+ }
|
||||||
|
+//fprintf(stderr,"TMP elastic:%i\n",tmp);
|
||||||
|
+
|
||||||
|
+ n=0;
|
||||||
|
+ curw=0;
|
||||||
|
+ /*We have some padding left. Try to enlarge small tabs*/
|
||||||
|
+ while (n<m) {
|
||||||
|
+ nextw=(uint)-1;/*FIXME: MAXINT*/
|
||||||
|
+ 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<tminw)
|
||||||
|
+ textw=tminw;
|
||||||
|
+ if((unsigned)textw == curw){
|
||||||
|
+ n++;
|
||||||
|
+ } else if((unsigned)textw>curw){
|
||||||
|
+ if ((unsigned)textw<nextw)
|
||||||
|
+ nextw=textw;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (nextw>(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;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
|
||||||
|
<pkgmetadata>
|
||||||
|
<herd>no-herd</herd>
|
||||||
|
<maintainer>
|
||||||
|
<email>rafael@rafaelmartins.eng.br</email>
|
||||||
|
<name>Rafael Goncalves Martins</name>
|
||||||
|
</maintainer>
|
||||||
|
<longdescription lang="en">
|
||||||
|
Ion is a tiling tabbed window manager designed with keyboard users in
|
||||||
|
mind.
|
||||||
|
</longdescription>
|
||||||
|
<use>
|
||||||
|
<flag name="proportional-tabs">Adds support to proportionally sized tabs</flag>
|
||||||
|
<flag name="systray">Adds support to trayion, a systray aplication for Ion3</flag>
|
||||||
|
<flag name="wallpaper">Adds support to use wallpapers</flag>
|
||||||
|
</use>
|
||||||
|
</pkgmetadata>
|
||||||
|
|
Loading…
Reference in New Issue