terminology - add tab bar at the top that looks like normal tabs

this makes the default (and solarized) themes have a tab bar at the
top that look and behave like normal tabs. option to disable these.

other themes might need some updating if they dont follow default by
 #including it.
This commit is contained in:
Carsten Haitzler 2014-12-09 22:32:47 +09:00
parent eb80949921
commit 5ed68d82b2
26 changed files with 1004 additions and 40 deletions

View File

@ -173,19 +173,29 @@ collections {
action: STATE_SET "movie" 0.0; action: STATE_SET "movie" 0.0;
target: "terminology.background"; target: "terminology.background";
} }
part { name: "terminology.tabregion"; type: SWALLOW;
description { state: "default" 0.0;
fixed: 1 1;
rel2.relative: 1.0 0.0;
min: 1 1;
align: 0.0 0.0;
}
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// actual text grid for chars, cursors, selectiond etc. goes here // actual text grid for chars, cursors, selectiond etc. goes here
part { name: "terminology.content"; type: SWALLOW; part { name: "terminology.content"; type: SWALLOW;
description { state: "default" 0.0; description { state: "default" 0.0;
rel1.offset: 1 1; rel1.offset: 1 0;
rel1.relative: 0.0 1.0;
rel1.to_y: "terminology.tabregion";
rel2.offset: -2 -2; rel2.offset: -2 -2;
} }
} }
} }
} }
//// the background and general container for the terminal //// the background and general container for the terminal
group { name: "terminology/background"; group { name: "terminology/background";
images { images {
@ -201,6 +211,20 @@ collections {
image: "pm_overlay.png" COMP; image: "pm_overlay.png" COMP;
image: "pm_fill.png" COMP; image: "pm_fill.png" COMP;
image: "cr_glow.png" COMP; image: "cr_glow.png" COMP;
image: "tab_base_bottom.png" COMP;
image: "tab_base_l0.png" COMP;
image: "tab_base_l1.png" COMP;
image: "tab_base_m.png" COMP;
image: "tab_base_r0.png" COMP;
image: "tab_base_r1.png" COMP;
image: "tab_bg_l0.png" COMP;
image: "tab_bg_l1.png" COMP;
image: "tab_bg_r0.png" COMP;
image: "tab_bg_r1.png" COMP;
image: "tab_shad_l0.png" COMP;
image: "tab_shad_l1.png" COMP;
image: "tab_shad_r0.png" COMP;
image: "tab_shad_r1.png" COMP;
} }
set { name: "bg_shadow"; set { name: "bg_shadow";
image { image: "bg_shadow.png" COMP; size: 0 0 200 150; } image { image: "bg_shadow.png" COMP; size: 0 0 200 150; }
@ -255,6 +279,11 @@ collections {
part { name: "terminology.content"; type: SWALLOW; part { name: "terminology.content"; type: SWALLOW;
description { state: "default" 0.0; description { state: "default" 0.0;
} }
description { state: "tab" 0.0;
inherit: "default" 0.0;
// rel1.to_y: "tabmiddle";
// rel1.relative: 0.0 1.0;
}
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -459,8 +488,10 @@ collections {
fixed: 1 1; fixed: 1 1;
rel1.relative: 1.0 0.0; rel1.relative: 1.0 0.0;
rel1.offset: -3 2; rel1.offset: -3 2;
rel1.to: "viewregion";
rel2.relative: 1.0 0.0; rel2.relative: 1.0 0.0;
rel2.offset: -3 2; rel2.offset: -3 2;
rel2.to: "viewregion";
align: 1.0 0.0; align: 1.0 0.0;
min: 16 16; min: 16 16;
} }
@ -475,6 +506,27 @@ collections {
} }
} }
part { name: "terminology.tabregion"; type: SWALLOW;
description { state: "default" 0.0;
fixed: 1 1;
rel1.to: "terminology.content";
rel2.to: "viewregion";
rel2.relative: 1.0 0.0;
}
}
part { name: "viewregion"; type: SWALLOW;
description { state: "default" 0.0;
fixed: 1 1;
rel1.to: "terminology.content";
rel2.to: "terminology.content";
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
rel1.to_y: "tabmiddle";
rel1.relative: 0.0 1.0;
}
}
program { program {
signal: "mouse,in"; source: "tabcount_ev"; signal: "mouse,in"; source: "tabcount_ev";
action: STATE_SET "over" 0.0; action: STATE_SET "over" 0.0;
@ -509,14 +561,14 @@ collections {
signal: "mouse,clicked,1"; source: "tabcount_ev"; signal: "mouse,clicked,1"; source: "tabcount_ev";
action: SIGNAL_EMIT "tabcount,go" "terminology"; action: SIGNAL_EMIT "tabcount,go" "terminology";
} }
program { program {
signal: "mouse,wheel,0,-1"; source: "tabcount_ev"; signal: "mouse,wheel,0,-1"; source: "tabcount_ev";
action: SIGNAL_EMIT "tabcount,prev" "terminology"; action: SIGNAL_EMIT "tabcount,prev" "terminology";
} }
program { program {
signal: "mouse,wheel,0,1"; source: "tabcount_ev"; signal: "mouse,wheel,0,1"; source: "tabcount_ev";
action: SIGNAL_EMIT "tabcount,next" "terminology"; action: SIGNAL_EMIT "tabcount,next" "terminology";
} }
program { program {
signal: "tabcount,off"; source: "terminology"; signal: "tabcount,off"; source: "terminology";
action: STATE_SET "default" 0.0; action: STATE_SET "default" 0.0;
@ -553,8 +605,12 @@ collections {
// miniview // miniview
part { name: "terminology.miniview"; type: SWALLOW; part { name: "terminology.miniview"; type: SWALLOW;
description { state: "default" 0.0; description { state: "default" 0.0;
rel1.to_x: "terminology.content";
rel1.to_y: "viewregion";
rel2.to: "terminology.content";
//color: 255 255 255 0; //color: 255 255 255 0;
visible: 0; visible: 0;
fixed: 1 1;
} }
description { state: "on" 0.0; description { state: "on" 0.0;
inherit: "default" 0.0; inherit: "default" 0.0;
@ -602,10 +658,34 @@ collections {
image.middle: 0; image.middle: 0;
fill.smooth: 0; fill.smooth: 0;
} }
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 0;
}
}
part { name: "shine";
mouse_events: 0;
description { state: "default" 0.0;
rel1.offset: 0 0;
rel2.offset: -1 -1;
image.normal: "bg_shine.png";
fill.smooth: 0;
align: 0.5 0.0;
aspect: (255/120) (255/120);
aspect_preference: HORIZONTAL;
color: 255 255 255 64;
}
description { state: "focused" 0.0;
inherit: "default" 0.0;
color: 255 255 255 255;
}
} }
part { name: "glintclip"; type: RECT; part { name: "glintclip"; type: RECT;
description { state: "default" 0.0; description { state: "default" 0.0;
} }
description { state: "tab" 0.0;
inherit: "default" 0.0;
}
} }
part { name: "glint"; part { name: "glint";
mouse_events: 0; mouse_events: 0;
@ -630,21 +710,260 @@ collections {
color: 255 255 255 255; color: 255 255 255 255;
} }
} }
part { name: "shine";
part { name: "tab_bevel_bottom";
mouse_events: 0; mouse_events: 0;
description { state: "default" 0.0; description { state: "default" 0.0;
rel1.offset: 0 0; rel1.to_y: "tabmiddle";
rel2.offset: -1 -1; rel1.relative: 0.0 1.0;
image.normal: "bg_shine.png"; image.normal: "tab_base_bottom.png";
image.border: 2 2 0 2;
image.middle: 0;
fill.smooth: 0; fill.smooth: 0;
align: 0.5 0.0; visible: 0;
aspect: (255/120) (255/120); fixed: 1 1;
aspect_preference: HORIZONTAL;
color: 255 255 255 64;
} }
description { state: "focused" 0.0; description { state: "tab" 0.0;
inherit: "default" 0.0; inherit: "default" 0.0;
color: 255 255 255 255; visible: 1;
}
}
part { name: "tab_bevel_top0";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "tableft";
rel2.to_y: "tableft";
rel2.to_x: "tab_bevel_top1";
rel2.relative: 0.0 1.0;
image.normal: "tab_base_l0.png";
image.border: 0 0 0 4;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tab_bevel_top1";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "tabmiddle";
rel1.offset: -4 0;
rel2.to: "tabmiddle";
align: 0.0 0.0;
max: 12 99999;
min: 12 0;
image.normal: "tab_base_l1.png";
image.border: 0 0 4 4;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tab_bevel_top2";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "tab_bevel_top1";
rel1.relative: 1.0 0.0;
rel2.to: "tab_bevel_top3";
rel2.relative: 0.0 1.0;
image.normal: "tab_base_m.png";
image.border: 0 0 4 0;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tab_bevel_top3";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "tabmiddle";
rel2.to: "tabmiddle";
rel2.offset: 3 -1;
align: 1.0 0.0;
max: 12 99999;
min: 12 0;
image.normal: "tab_base_r1.png";
image.border: 0 0 4 4;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tab_bevel_top4";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to_y: "tabright";
rel1.to_x: "tab_bevel_top3";
rel1.relative: 1.0 0.0;
rel2.to: "tabright";
image.normal: "tab_base_r0.png";
image.border: 0 0 0 4;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tab_bevel_bg0";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "tab_bevel_top0";
rel2.to: "tab_bevel_top0";
image.normal: "tab_bg_l0.png";
image.border: 2 0 4 4;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tab_bevel_bg1";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "tab_bevel_top1";
rel2.to: "tab_bevel_top1";
image.normal: "tab_bg_l1.png";
image.border: 0 0 4 4;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tab_bevel_bg3";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "tab_bevel_top3";
rel2.to: "tab_bevel_top3";
image.normal: "tab_bg_r1.png";
image.border: 0 0 4 4;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tab_bevel_bg4";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "tab_bevel_top4";
rel2.to: "tab_bevel_top4";
image.normal: "tab_bg_r0.png";
image.border: 0 2 4 4;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "terminology.tabl.content"; type: SWALLOW;
description { state: "default" 0.0;
rel1.to: "tableft";
rel2.to: "tableft";
fixed: 1 1;
}
}
part { name: "terminology.tabr.content"; type: SWALLOW;
description { state: "default" 0.0;
rel1.to: "tabright";
rel2.to: "tabright";
fixed: 1 1;
}
}
part { name: "tab_bevel_shad0";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "tab_bevel_top0";
rel2.to: "tab_bevel_top0";
image.normal: "tab_shad_l0.png";
image.border: 0 0 0 10;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tab_bevel_shad1";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "tab_bevel_top1";
rel2.to: "tab_bevel_top1";
image.normal: "tab_shad_l1.png";
image.border: 0 0 10 10;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tab_bevel_shad3";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "tab_bevel_top3";
rel2.to: "tab_bevel_top3";
image.normal: "tab_shad_r1.png";
image.border: 0 0 10 10;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tab_bevel_shad4";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "tab_bevel_top4";
rel2.to: "tab_bevel_top4";
image.normal: "tab_shad_r0.png";
image.border: 0 0 0 10;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
} }
} }
program { program {
@ -668,6 +987,202 @@ collections {
target: "shine"; target: "shine";
} }
////////////////////////////////////////////////////////////////////
// a swallow to hold a finger size rect for min tab size
program {
signal: "tabbar,on"; source: "terminology";
action: STATE_SET "tab" 0.0;
target: "viewregion";
target: "tableft";
target: "tabmiddle";
target: "tabright";
target: "bevel";
target: "glintclip";
target: "tab_bevel_bottom";
target: "tab_bevel_top0";
target: "tab_bevel_top1";
target: "tab_bevel_top2";
target: "tab_bevel_top3";
target: "tab_bevel_top4";
target: "tab_bevel_bg0";
target: "tab_bevel_bg1";
target: "tab_bevel_bg3";
target: "tab_bevel_bg4";
target: "tab_bevel_shad0";
target: "tab_bevel_shad1";
target: "tab_bevel_shad3";
target: "tab_bevel_shad4";
target: "tabtitle";
}
program {
signal: "tabbar,off"; source: "terminology";
action: STATE_SET "default" 0.0;
target: "viewregion";
target: "tableft";
target: "tabmiddle";
target: "tabright";
target: "bevel";
target: "glintclip";
target: "tab_bevel_bottom";
target: "tab_bevel_top0";
target: "tab_bevel_top1";
target: "tab_bevel_top2";
target: "tab_bevel_top3";
target: "tab_bevel_top4";
target: "tab_bevel_bg0";
target: "tab_bevel_bg1";
target: "tab_bevel_bg3";
target: "tab_bevel_bg4";
target: "tab_bevel_shad0";
target: "tab_bevel_shad1";
target: "tab_bevel_shad3";
target: "tab_bevel_shad4";
target: "tabtitle";
}
part { name: "terminology.tab"; type: SWALLOW;
mouse_events: 0;
description { state: "default" 0.0;
rel1.relative: 1.0 0.0;
rel1.to_x: "terminology.tabl";
rel2.relative: 0.0 0.0;
rel2.to_x: "terminology.tabr";
align: 0.5 0.0;
visible: 0;
fixed: 1 1;
}
}
// some slot for dragable parts to stayt in along top edge of bg
part { name: "tabdrag"; type: SPACER;
description { state: "default" 0.0;
rel2.relative: 1.0 0.0;
fixed: 1 1;
}
}
// left boundary of the active tab (ragable 0.0 -> 1.0)
part { name: "terminology.tabl"; type: SPACER;
dragable.x: 1 1 0;
dragable.confine: "tabdrag";
description { state: "default" 0.0;
rel2.relative: 1.0 0.0;
max: 1 1;
fixed: 1 1;
}
}
// right boundary of the active tab (ragable 0.0 -> 1.0)
part { name: "terminology.tabr"; type: SPACER;
dragable.x: 1 1 0;
dragable.confine: "tabdrag";
description { state: "default" 0.0;
rel2.relative: 1.0 0.0;
max: 1 1;
fixed: 1 1;
}
}
part { name: "terminology.tab.title"; type: TEXT; mouse_events: 0;
scale: 1;
effect: SOFT_SHADOW BOTTOM;
mouse_events: 0;
description { state: "default" 0.0;
color: 255 255 255 255;
color3: 0 0 0 18;
text { font: "Sans:style=Bold"; size: 10;
align: 0.5 0.0;
min: 0 1;
}
align: 0.5 0.0;
rel1.to_x: "tab_bevel_top2";
rel1.offset: 0 2;
rel2.to_x: "tab_bevel_top2";
rel2.offset: -1 2;
rel2.relative: 1.0 0.0;
visible: 0;
fixed: 1 1;
}
}
part { name: "tabtitle"; type: TEXT; mouse_events: 0;
scale: 1;
effect: SOFT_SHADOW BOTTOM;
mouse_events: 0;
description { state: "default" 0.0;
color: 255 255 255 255;
color3: 0 0 0 18;
text { font: "Sans:style=Bold"; size: 10;
align: 0.5 0.5;
min: 0 1;
text_source: "terminology.tab.title";
}
align: 0.5 0.5;
rel1.to_x: "tab_bevel_top2";
rel1.to_y: "tabmiddle";
rel2.to_x: "tab_bevel_top2";
rel2.to_y: "tabmiddle";
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tablimit0"; type: SPACER;
description { state: "default" 0.0;
rel1.to_y: "terminology.tab";
rel1.relative: 0.0 1.0;
rel2.to_y: "terminology.tab.title";
align: 0.0 0.0;
fixed: 1 1;
}
}
part { name: "tableft"; type: RECT;
mouse_events: 0;
description { state: "default" 0.0;
rel2.to_x: "terminology.tab";
rel2.to_y: "tabmiddle";
rel2.relative: 0.0 1.0;
color: 0 0 0 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tabright"; type: RECT;
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "terminology.tab";
rel1.relative: 1.0 0.0;
rel2.to_y: "tabmiddle";
color: 0 0 0 0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "tabmiddle"; type: RECT;
description { state: "default" 0.0;
rel1.to: "terminology.tab";
rel2.to_x: "terminology.tab";
rel2.to_y: "tablimit0";
rel2.offset: -1 0;
color: 0 0 0 0;
align: 0.0 0.0;
visible: 0;
fixed: 1 1;
}
description { state: "tab" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// visual bell - spinning red siren light // visual bell - spinning red siren light
part { name: "bell_glow"; part { name: "bell_glow";
@ -813,7 +1328,7 @@ collections {
transition: LINEAR 0.9; transition: LINEAR 0.9;
target: "bell_strobe"; target: "bell_strobe";
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// popup media over the terminal (until dismissed) // popup media over the terminal (until dismissed)
part { name: "popmedia_clip"; type: RECT; part { name: "popmedia_clip"; type: RECT;
@ -1111,6 +1626,146 @@ collections {
} }
} }
group { name: "terminology/tabbar_back";
images {
image: "tab_base_l1.png" COMP;
image: "tab_base_m.png" COMP;
image: "tab_base_r1.png" COMP;
image: "tab_other_l.png" COMP;
image: "tab_other_m.png" COMP;
image: "tab_other_r.png" COMP;
image: "tab_shad_l2.png" COMP;
image: "tab_shad_r2.png" COMP;
}
parts {
part { name: "tab_bevel_shad1";
mouse_events: 0;
clip_to: "clip";
description { state: "default" 0.0;
rel1.to: "tab_bevel_top1";
rel2.to: "tab_bevel_top1";
image.normal: "tab_shad_l2.png";
image.border: 0 0 10 10;
fill.smooth: 0;
}
}
part { name: "tab_bevel_shad3";
mouse_events: 0;
clip_to: "clip";
description { state: "default" 0.0;
rel1.to: "tab_bevel_top3";
rel2.to: "tab_bevel_top3";
image.normal: "tab_shad_r2.png";
image.border: 0 0 10 10;
fill.smooth: 0;
}
}
part { name: "tab_base_top1";
mouse_events: 0;
clip_to: "clip";
description { state: "default" 0.0;
rel1.to: "tab_bevel_top1";
rel2.to: "tab_bevel_top1";
image.normal: "tab_other_l.png";
image.border: 0 0 4 4;
fill.smooth: 0;
}
}
part { name: "tab_base_top2";
mouse_events: 0;
clip_to: "clip";
description { state: "default" 0.0;
rel1.to: "tab_bevel_top2";
rel2.to: "tab_bevel_top2";
image.normal: "tab_other_m.png";
image.border: 0 0 4 4;
fill.smooth: 0;
}
}
part { name: "tab_base_top3";
mouse_events: 0;
clip_to: "clip";
description { state: "default" 0.0;
rel1.to: "tab_bevel_top3";
rel2.to: "tab_bevel_top3";
image.normal: "tab_other_r.png";
image.border: 0 0 4 4;
fill.smooth: 0;
}
}
part { name: "tab_bevel_top1";
mouse_events: 0;
clip_to: "clip";
description { state: "default" 0.0;
align: 0.0 0.0;
rel1.offset: -4 0;
max: 12 99999;
min: 12 0;
image.normal: "tab_base_l1.png";
image.border: 0 0 4 4;
fill.smooth: 0;
fixed: 1 0;
}
}
part { name: "tab_bevel_top2";
mouse_events: 0;
clip_to: "clip";
description { state: "default" 0.0;
rel1.to: "tab_bevel_top1";
rel1.relative: 1.0 0.0;
rel2.to: "tab_bevel_top3";
rel2.relative: 0.0 1.0;
image.normal: "tab_base_m.png";
image.border: 0 0 4 4;
fill.smooth: 0;
}
}
part { name: "tab_bevel_top3";
mouse_events: 0;
clip_to: "clip";
description { state: "default" 0.0;
align: 1.0 0.0;
rel2.offset: 3 -1;
max: 12 99999;
min: 12 0;
image.normal: "tab_base_r1.png";
image.border: 0 0 4 4;
fill.smooth: 0;
fixed: 1 0;
}
}
part { name: "terminology.title"; type: TEXT; mouse_events: 0;
scale: 1;
effect: SHADOW BOTTOM;
description { state: "default" 0.0;
text { font: "Sans:style=Bold"; size: 10;
align: 0.5 0.5;
min: 0 1;
}
align: 0.5 0.5;
color: 0 0 0 255;
color3: 255 255 255 25;
rel1.to: "tab_bevel_top2";
rel2.to: "tab_bevel_top2";
}
}
part { name: "clip"; type: RECT;
description { state: "default" 0.0;
rel2.offset: -1 -2;
}
}
part { name: "event"; type: RECT;
description { state: "default" 0.0;
color: 0 0 0 0;
}
}
program {
signal: "mouse,clicked,1"; source: "event";
action: SIGNAL_EMIT "tab,activate" "terminology";
}
}
}
group { name: "terminology/base"; group { name: "terminology/base";
images.image: "pm_shadow.png" COMP; images.image: "pm_shadow.png" COMP;
images.image: "bg_bevel.png" COMP; images.image: "bg_bevel.png" COMP;

BIN
data/themes/images/tab.xcf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

View File

@ -160,6 +160,8 @@ config_init(void)
(edd_base, Config, "keys", keys, edd_keys); (edd_base, Config, "keys", keys, edd_keys);
EET_DATA_DESCRIPTOR_ADD_BASIC EET_DATA_DESCRIPTOR_ADD_BASIC
(edd_base, Config, "gravatar", gravatar, EET_T_UCHAR); (edd_base, Config, "gravatar", gravatar, EET_T_UCHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC
(edd_base, Config, "notabs", notabs, EET_T_UCHAR);
} }
void void
@ -259,6 +261,7 @@ config_sync(const Config *config_src, Config *config)
config->mouse_over_focus = config_src->mouse_over_focus; config->mouse_over_focus = config_src->mouse_over_focus;
/* TODO: config->keys */ /* TODO: config->keys */
config->gravatar = config_src->gravatar; config->gravatar = config_src->gravatar;
config->notabs = config_src->notabs;
} }
static void static void
@ -527,6 +530,7 @@ config_load(const char *key)
config->mouse_over_focus = EINA_TRUE; config->mouse_over_focus = EINA_TRUE;
config->colors_use = EINA_FALSE; config->colors_use = EINA_FALSE;
config->gravatar = EINA_TRUE; config->gravatar = EINA_TRUE;
config->notabs = EINA_FALSE;
for (j = 0; j < 4; j++) for (j = 0; j < 4; j++)
{ {
for (i = 0; i < 12; i++) for (i = 0; i < 12; i++)
@ -616,6 +620,7 @@ config_fork(Config *config)
SCPY(config_key); SCPY(config_key);
CPY(font_set); CPY(font_set);
CPY(gravatar); CPY(gravatar);
CPY(notabs);
EINA_LIST_FOREACH(config->keys, l, key) EINA_LIST_FOREACH(config->keys, l, key)
{ {

View File

@ -73,6 +73,7 @@ struct _Config
Eina_Bool mouse_over_focus; Eina_Bool mouse_over_focus;
Eina_Bool colors_use; Eina_Bool colors_use;
Eina_Bool gravatar; Eina_Bool gravatar;
Eina_Bool notabs;
Config_Color colors[(4 * 12)]; Config_Color colors[(4 * 12)];
Eina_List *keys; Eina_List *keys;

View File

@ -21,6 +21,7 @@ _cb_op_behavior_##_cfg_name(void *data, Evas_Object *obj, \
else \ else \
config->_cfg_name = elm_check_state_get(obj); \ config->_cfg_name = elm_check_state_get(obj); \
termio_config_update(term); \ termio_config_update(term); \
windows_update(); \
config_save(config, NULL); \ config_save(config, NULL); \
} }
@ -39,6 +40,7 @@ CB(drag_links, 0);
CB(login_shell, 0); CB(login_shell, 0);
CB(mouse_over_focus, 0); CB(mouse_over_focus, 0);
CB(gravatar, 0); CB(gravatar, 0);
CB(notabs, 1);
#undef CB #undef CB
@ -247,6 +249,7 @@ options_behavior(Evas_Object *opbox, Evas_Object *term)
CX(_("Start as login shell"), login_shell, 0); CX(_("Start as login shell"), login_shell, 0);
CX(_("Focus split under the Mouse"), mouse_over_focus, 0); CX(_("Focus split under the Mouse"), mouse_over_focus, 0);
CX(_("Gravatar integration"), gravatar, 0); CX(_("Gravatar integration"), gravatar, 0);
CX(_("Show tabs"), notabs, 1);
/* /*
CX(_("Enable application server"), application_server, 0); CX(_("Enable application server"), application_server, 0);

View File

@ -25,6 +25,15 @@
/* {{{ Structs */ /* {{{ Structs */
typedef struct _Split Split; typedef struct _Split Split;
typedef struct _Tabbar Tabbar;
struct _Tabbar
{
struct {
Evas_Object *box;
Eina_List *tabs;
} l, r;
};
struct _Term struct _Term
{ {
@ -38,8 +47,12 @@ struct _Term
Evas_Object *miniview; Evas_Object *miniview;
Evas_Object *sel; Evas_Object *sel;
Evas_Object *tabcount_spacer; Evas_Object *tabcount_spacer;
Evas_Object *tab_spacer;
Evas_Object *tab_region_base;
Evas_Object *tab_region_bg;
Eina_List *popmedia_queue; Eina_List *popmedia_queue;
Media_Type poptype, mediatype; Media_Type poptype, mediatype;
Tabbar tabbar;
int step_x, step_y, min_w, min_h, req_w, req_h; int step_x, step_y, min_w, min_h, req_w, req_h;
struct { struct {
int x, y; int x, y;
@ -570,6 +583,7 @@ main_close(Evas_Object *win, Evas_Object *term)
} }
_term_focus(tm); _term_focus(tm);
_term_focus_show(sp, tm); _term_focus_show(sp, tm);
_split_tabcount_update(sp, tm);
} }
} }
else else
@ -583,6 +597,7 @@ main_close(Evas_Object *win, Evas_Object *term)
{ {
_term_focus(sp->term); _term_focus(sp->term);
_term_focus_show(sp, sp->term); _term_focus_show(sp, sp->term);
_split_tabcount_update(sp, sp->term);
} }
} }
if (sp) _split_tabcount_update(sp, sp->term); if (sp) _split_tabcount_update(sp, sp->term);
@ -615,6 +630,7 @@ main_close(Evas_Object *win, Evas_Object *term)
evas_object_show(sp->term->bg); evas_object_show(sp->term->bg);
_term_focus(sp->term); _term_focus(sp->term);
_term_focus_show(sp, sp->term); _term_focus_show(sp, sp->term);
_split_tabcount_update(sp, sp->term);
} }
if (!sp->wn->terms) evas_object_del(sp->wn->win); if (!sp->wn->terms) evas_object_del(sp->wn->win);
else _split_tabcount_update(sp, sp->term); else _split_tabcount_update(sp, sp->term);
@ -833,6 +849,107 @@ _split_free(Split *sp)
free(sp); free(sp);
} }
static void
_tabbar_clear(Term *tm)
{
Evas_Object *o;
if (tm->tabbar.l.box)
{
EINA_LIST_FREE(tm->tabbar.l.tabs, o) evas_object_del(o);
evas_object_del(tm->tabbar.l.box);
tm->tabbar.l.box = NULL;
}
if (tm->tabbar.r.box)
{
EINA_LIST_FREE(tm->tabbar.r.tabs, o) evas_object_del(o);
evas_object_del(tm->tabbar.r.box);
tm->tabbar.r.box = NULL;
}
}
static void
_cb_tab_activate(void *data, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
{
Split *sp = data;
Term *term = evas_object_data_get(obj, "term");
if (term)
{
_term_focus(term);
if (sp)
{
_term_focus_show(sp, term);
_split_tabcount_update(sp, term);
}
}
}
static void
_split_tabbar_fill(Split *sp, Term *tm)
{
Eina_List *l;
Term *term;
Evas_Object *o;
int n = eina_list_count(sp->terms);
int i = 0, j = 0;
EINA_LIST_FOREACH(sp->terms, l, term)
{
if (term == tm) break;
i++;
}
if (i > 0)
{
tm->tabbar.l.box = o = elm_box_add(sp->wn->win);
elm_box_horizontal_set(o, EINA_TRUE);
elm_box_homogeneous_set(o, EINA_TRUE);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
edje_object_part_swallow(term->bg, "terminology.tabl.content", o);
evas_object_show(o);
}
if (i < (n - 1))
{
tm->tabbar.r.box = o = elm_box_add(sp->wn->win);
elm_box_horizontal_set(o, EINA_TRUE);
elm_box_homogeneous_set(o, EINA_TRUE);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
edje_object_part_swallow(term->bg, "terminology.tabr.content", o);
evas_object_show(o);
}
EINA_LIST_FOREACH(sp->terms, l, term)
{
if (term != tm)
{
Evas_Coord w, h;
o = edje_object_add(evas_object_evas_get(sp->wn->win));
theme_apply(o, term->config, "terminology/tabbar_back");
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
edje_object_part_text_set(o, "terminology.title", termio_title_get(term->term));
edje_object_size_min_calc(o, &w, &h);
evas_object_size_hint_min_set(o, w, h);
if (j < i)
{
tm->tabbar.l.tabs = eina_list_append(tm->tabbar.l.tabs, o);
elm_box_pack_end(tm->tabbar.l.box, o);
}
else if (j > i)
{
tm->tabbar.r.tabs = eina_list_append(tm->tabbar.r.tabs, o);
elm_box_pack_end(tm->tabbar.r.box, o);
}
evas_object_data_set(o, "term", term);
evas_object_show(o);
edje_object_signal_callback_add(o, "tab,activate", "terminology",
_cb_tab_activate, sp);
}
j++;
}
}
static void static void
_split_tabcount_update(Split *sp, Term *tm) _split_tabcount_update(Split *sp, Term *tm)
{ {
@ -840,6 +957,7 @@ _split_tabcount_update(Split *sp, Term *tm)
int n = eina_list_count(sp->terms); int n = eina_list_count(sp->terms);
int missed = 0; int missed = 0;
int cnt = 0, term_cnt = 0; int cnt = 0, term_cnt = 0;
int i = 0;
Eina_List *l; Eina_List *l;
Term *term; Term *term;
@ -870,13 +988,64 @@ _split_tabcount_update(Split *sp, Term *tm)
edje_object_part_text_set(term->bg, "terminology.tabcount.label", buf); edje_object_part_text_set(term->bg, "terminology.tabcount.label", buf);
edje_object_part_text_set(term->bg, "terminology.tabmissed.label", bufm); edje_object_part_text_set(term->bg, "terminology.tabmissed.label", bufm);
edje_object_signal_emit(term->bg, "tabcount,on", "terminology"); edje_object_signal_emit(term->bg, "tabcount,on", "terminology");
// this is all below just for tab bar at the top
if (!term->config->notabs)
{
double v1, v2;
v1 = (double)i / (double)n;
v2 = (double)(i + 1) / (double)n;
if (!term->tab_spacer)
{
term->tab_spacer = evas_object_rectangle_add(evas_object_evas_get(term->bg));
evas_object_color_set(term->tab_spacer, 0, 0, 0, 0);
elm_coords_finger_size_adjust(1, &w, 1, &h);
evas_object_size_hint_min_set(term->tab_spacer, w, h);
edje_object_part_swallow(term->bg, "terminology.tab", term->tab_spacer);
edje_object_part_drag_value_set(term->bg, "terminology.tabl", v1, 0.0);
edje_object_part_drag_value_set(term->bg, "terminology.tabr", v2, 0.0);
edje_object_part_text_set(term->bg, "terminology.tab.title", termio_title_get(term->term));
edje_object_signal_emit(term->bg, "tabbar,on", "terminology");
edje_object_message_signal_process(term->bg);
}
else
{
edje_object_part_drag_value_set(term->bg, "terminology.tabl", v1, 0.0);
edje_object_part_drag_value_set(term->bg, "terminology.tabr", v2, 0.0);
edje_object_message_signal_process(term->bg);
}
_tabbar_clear(term);
if (sp->term == term) _split_tabbar_fill(sp, term);
}
else
{
_tabbar_clear(term);
if (term->tab_spacer)
{
edje_object_signal_emit(term->bg, "tabbar,off", "terminology");
evas_object_del(term->tab_spacer);
term->tab_spacer = NULL;
edje_object_message_signal_process(term->bg);
}
}
} }
else else
edje_object_signal_emit(term->bg, "tabcount,off", "terminology"); {
_tabbar_clear(term);
edje_object_signal_emit(term->bg, "tabcount,off", "terminology");
if (term->tab_spacer)
{
edje_object_signal_emit(term->bg, "tabbar,off", "terminology");
evas_object_del(term->tab_spacer);
term->tab_spacer = NULL;
edje_object_message_signal_process(term->bg);
}
}
if (missed > 0) if (missed > 0)
edje_object_signal_emit(term->bg, "tabmissed,on", "terminology"); edje_object_signal_emit(term->bg, "tabmissed,on", "terminology");
else else
edje_object_signal_emit(term->bg, "tabmissed,off", "terminology"); edje_object_signal_emit(term->bg, "tabmissed,off", "terminology");
i++;
} }
} }
@ -1279,7 +1448,8 @@ _term_focus(Term *term)
if (sp) _split_tabcount_update(sp, term); if (sp) _split_tabcount_update(sp, term);
} }
void term_prev(Term *term) void
term_prev(Term *term)
{ {
Term *term2 = NULL; Term *term2 = NULL;
Config *config = termio_config_get(term->term); Config *config = termio_config_get(term->term);
@ -1291,18 +1461,23 @@ void term_prev(Term *term)
sp0 = _split_find(term->wn->win, term->term, NULL); sp0 = _split_find(term->wn->win, term->term, NULL);
sp = _split_find(term2->wn->win, term2->term, NULL); sp = _split_find(term2->wn->win, term2->term, NULL);
if (sp == sp0 && config->tab_zoom >= 0.01) if ((sp == sp0) && (config->tab_zoom >= 0.01) && (config->notabs))
_sel_go(sp, term2); _sel_go(sp, term2);
else else
{ {
_term_focus(term2); _term_focus(term2);
if (sp) _term_focus_show(sp, term2); if (sp)
{
_term_focus_show(sp, term2);
_split_tabcount_update(sp, term2);
}
} }
} }
_term_miniview_check(term); _term_miniview_check(term);
} }
void term_next(Term *term) void
term_next(Term *term)
{ {
Term *term2 = NULL; Term *term2 = NULL;
Config *config = termio_config_get(term->term); Config *config = termio_config_get(term->term);
@ -1314,12 +1489,16 @@ void term_next(Term *term)
sp0 = _split_find(term->wn->win, term->term, NULL); sp0 = _split_find(term->wn->win, term->term, NULL);
sp = _split_find(term2->wn->win, term2->term, NULL); sp = _split_find(term2->wn->win, term2->term, NULL);
if (sp == sp0 && config->tab_zoom >= 0.01) if ((sp == sp0) && (config->tab_zoom >= 0.01) && (config->notabs))
_sel_go(sp, term2); _sel_go(sp, term2);
else else
{ {
_term_focus(term2); _term_focus(term2);
if (sp) _term_focus_show(sp, term2); if (sp)
{
_term_focus_show(sp, term2);
_split_tabcount_update(sp, term2);
}
} }
} }
_term_miniview_check(term); _term_miniview_check(term);
@ -1682,6 +1861,33 @@ _cb_title(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
Term *term = data; Term *term = data;
if (term->focused) if (term->focused)
elm_win_title_set(term->wn->win, termio_title_get(term->term)); elm_win_title_set(term->wn->win, termio_title_get(term->term));
edje_object_part_text_set(term->bg, "terminology.tab.title", termio_title_get(term->term));
if (term->config->notabs)
{
Split *sp = _split_find(term->wn->win, term->term, NULL);
if (sp)
{
Eina_List *l, *ll;
Evas_Object *o;
Term *term2;
EINA_LIST_FOREACH(sp->terms, l, term)
{
EINA_LIST_FOREACH(term->tabbar.l.tabs, ll, o)
{
term2 = evas_object_data_get(o, "term");
if (term2)
edje_object_part_text_set(o, "terminology.title", termio_title_get(term2->term));
}
EINA_LIST_FOREACH(term->tabbar.r.tabs, ll, o)
{
term2 = evas_object_data_get(o, "term");
if (term2)
edje_object_part_text_set(o, "terminology.title", termio_title_get(term2->term));
}
}
}
}
} }
static void static void
@ -2060,33 +2266,52 @@ term_free(Term *term)
{ {
eina_stringshare_del(s); eina_stringshare_del(s);
} }
_tabbar_clear(term);
if (term->media) if (term->media)
{ {
evas_object_event_callback_del(term->media, evas_object_event_callback_del(term->media,
EVAS_CALLBACK_DEL, EVAS_CALLBACK_DEL,
_cb_media_del); _cb_media_del);
evas_object_del(term->media); evas_object_del(term->media);
term->media = NULL;
} }
term->media = NULL; if (term->popmedia)
if (term->popmedia) evas_object_del(term->popmedia); {
evas_object_del(term->popmedia);
term->popmedia = NULL;
}
term->popmedia_deleted = EINA_FALSE;
if (term->miniview) if (term->miniview)
{ {
evas_object_del(term->miniview); evas_object_del(term->miniview);
term->miniview = NULL; term->miniview = NULL;
} }
term->popmedia = NULL; if (term->tabcount_spacer)
term->popmedia_deleted = EINA_FALSE; {
evas_object_del(term->tabcount_spacer);
term->tabcount_spacer = NULL;
}
if (term->tab_spacer)
{
evas_object_del(term->tab_spacer);
term->tab_spacer = NULL;
}
if (term->tab_region_bg)
{
evas_object_del(term->tab_region_bg);
term->tab_region_bg = NULL;
}
if (term->tab_region_base)
{
evas_object_del(term->tab_region_base);
term->tab_region_base = NULL;
}
evas_object_del(term->term); evas_object_del(term->term);
term->term = NULL; term->term = NULL;
evas_object_del(term->base); evas_object_del(term->base);
term->base = NULL; term->base = NULL;
evas_object_del(term->bg); evas_object_del(term->bg);
term->bg = NULL; term->bg = NULL;
if (term->tabcount_spacer)
{
evas_object_del(term->tabcount_spacer);
term->tabcount_spacer = NULL;
}
free(term); free(term);
} }
@ -2187,16 +2412,60 @@ main_term_bg_config(Term *term)
edje_object_signal_emit(term->bg, "miniview,on", "terminology"); edje_object_signal_emit(term->bg, "miniview,on", "terminology");
} }
static void
_cb_tabregion_change(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *info EINA_UNUSED)
{
Term *term = data;
Evas_Coord w, h;
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
evas_object_size_hint_min_set(term->tab_region_base, w, h);
edje_object_part_swallow(term->base, "terminology.tabregion", term->tab_region_base);
}
static void
_term_tabregion_setup(Term *term)
{
Evas_Object *o;
if (term->tab_region_bg) return;
term->tab_region_bg = o = evas_object_rectangle_add(evas_object_evas_get(term->bg));
evas_object_color_set(o, 0, 0, 0, 0);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, _cb_tabregion_change, term);
evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, _cb_tabregion_change, term);
edje_object_part_swallow(term->bg, "terminology.tabregion", o);
term->tab_region_base = o = evas_object_rectangle_add(evas_object_evas_get(term->bg));
evas_object_color_set(o, 0, 0, 0, 0);
edje_object_part_swallow(term->base, "terminology.tabregion", o);
}
static void static void
_main_term_bg_redo(Term *term) _main_term_bg_redo(Term *term)
{ {
Evas_Object *o; Evas_Object *o;
_tabbar_clear(term);
if (term->tabcount_spacer) if (term->tabcount_spacer)
{ {
evas_object_del(term->tabcount_spacer); evas_object_del(term->tabcount_spacer);
term->tabcount_spacer = NULL; term->tabcount_spacer = NULL;
} }
if (term->tab_spacer)
{
evas_object_del(term->tab_spacer);
term->tab_spacer = NULL;
}
if (term->tab_region_bg)
{
evas_object_del(term->tab_region_bg);
term->tab_region_bg = NULL;
}
if (term->tab_region_base)
{
evas_object_del(term->tab_region_base);
term->tab_region_base = NULL;
}
if (term->miniview) if (term->miniview)
{ {
edje_object_part_unswallow(term->bg, term->miniview); edje_object_part_unswallow(term->bg, term->miniview);
@ -2205,7 +2474,7 @@ _main_term_bg_redo(Term *term)
} }
evas_object_del(term->base); evas_object_del(term->base);
evas_object_del(term->bg); evas_object_del(term->bg);
term->base = o = edje_object_add(evas_object_evas_get(term->wn->win)); term->base = o = edje_object_add(evas_object_evas_get(term->wn->win));
theme_apply(o, term->config, "terminology/core"); theme_apply(o, term->config, "terminology/core");
@ -2219,6 +2488,8 @@ _main_term_bg_redo(Term *term)
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
theme_apply(o, term->config, "terminology/background"); theme_apply(o, term->config, "terminology/background");
_term_tabregion_setup(term);
term->miniview = o = miniview_add(term->wn->win, term->term); term->miniview = o = miniview_add(term->wn->win, term->term);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
@ -2231,7 +2502,7 @@ _main_term_bg_redo(Term *term)
evas_object_show(o); evas_object_show(o);
main_term_bg_config(term); main_term_bg_config(term);
if (term->miniview_shown) if (term->miniview_shown)
edje_object_signal_emit(term->bg, "miniview,on", "terminology"); edje_object_signal_emit(term->bg, "miniview,on", "terminology");
} }
Eina_Bool Eina_Bool
@ -2294,6 +2565,7 @@ _cb_bell(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
{ {
if (!term->wn->focused) elm_win_urgent_set(term->wn->win, EINA_TRUE); if (!term->wn->focused) elm_win_urgent_set(term->wn->win, EINA_TRUE);
} }
// XXX: update tabbars to have bell status in them
} }
@ -2384,6 +2656,8 @@ term_new(Win *wn, Config *config, const char *cmd,
evas_object_data_set(o, "theme_reload_func_data", term); evas_object_data_set(o, "theme_reload_func_data", term);
evas_object_show(o); evas_object_show(o);
_term_tabregion_setup(term);
if (term->config->translucent) if (term->config->translucent)
msg.val = term->config->opacity; msg.val = term->config->opacity;
else else
@ -2505,6 +2779,7 @@ _sel_cb_selected(void *data,
{ {
_term_focus(tm); _term_focus(tm);
_term_focus_show(sp, tm); _term_focus_show(sp, tm);
_split_tabcount_update(sp, tm);
_sel_restore(sp); _sel_restore(sp);
_term_miniview_check(tm); _term_miniview_check(tm);
return; return;
@ -2513,6 +2788,7 @@ _sel_cb_selected(void *data,
_sel_restore(sp); _sel_restore(sp);
_term_focus(sp->term); _term_focus(sp->term);
_term_focus_show(sp, sp->term); _term_focus_show(sp, sp->term);
_split_tabcount_update(sp, sp->term);
_term_miniview_check(tm); _term_miniview_check(tm);
} }
@ -2525,6 +2801,7 @@ _sel_cb_exit(void *data,
_sel_restore(sp); _sel_restore(sp);
_term_focus(sp->term); _term_focus(sp->term);
_term_focus_show(sp, sp->term); _term_focus_show(sp, sp->term);
_split_tabcount_update(sp, sp->term);
} }
static void static void
@ -2628,3 +2905,25 @@ windows_free(void)
} }
} }
static void
_split_update(Split *sp)
{
Eina_List *l;
Term *tm;
EINA_LIST_FOREACH(sp->terms, l, tm)
{
_split_tabcount_update(sp, tm);
}
if (sp->s1) _split_update(sp->s1);
if (sp->s2) _split_update(sp->s2);
}
void
windows_update(void)
{
Eina_List *l;
Win *wn;
EINA_LIST_FOREACH(wins, l, wn) _split_update(wn->split);
}

View File

@ -25,6 +25,7 @@ win_new(const char *name, const char *role, const char *title,
Eina_Bool maximized); Eina_Bool maximized);
void win_free(Win *wn); void win_free(Win *wn);
void windows_free(void); void windows_free(void);
void windows_update(void);
Term *term_new(Win *wn, Config *config, const char *cmd, Eina_Bool login_shell, const char *cd, int size_w, int size_h, Eina_Bool hold); Term *term_new(Win *wn, Config *config, const char *cmd, Eina_Bool login_shell, const char *cd, int size_w, int size_h, Eina_Bool hold);