raster pushed a commit to branch master.
commit d201252033eb975ae1de8498ab8b1c37bc0c6047
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date: Wed Apr 17 00:35:44 2013 +0900
track if a bell was missed in a background tab and display a "missed"
count and emit a signal to indicate you missed something. right now
you dont know which though has the missed bell. thats another stage -
pass missed flag to sel and display it in the theme.
---
data/themes/default.edc | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
src/bin/main.c | 33 ++++++++++++++++++++++++++++++++-
2 files changed, 80 insertions(+), 1 deletion(-)
diff --git a/data/themes/default.edc b/data/themes/default.edc
index c28def1..5e9200d 100644
--- a/data/themes/default.edc
+++ b/data/themes/default.edc
@@ -155,6 +155,33 @@ collections {
color: 255 255 255 255;
}
}
+ part { name: "terminology.tabmissed.label"; type: TEXT; mouse_events:
0;
+ effect: GLOW;
+ scale: 1;
+ clip_to: "tabcount_clip";
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ rel1.to: "terminology.tabcount.label";
+ rel2.to: "terminology.tabcount.label";
+ rel1.offset: -4 0;
+ rel2.relative: 0.0 1.0;
+ rel2.offset: -5 -1;
+ color: 255 153 51 64;
+ color2: 255 51 0 18;
+ color3: 255 0 0 8;
+ align: 1.0 0.5;
+ text { font: "Sans"; size: 8;
+ align: 1.0 0.5;
+ min: 1 1;
+ }
+ }
+ description { state: "over" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 64 255;
+ color2: 255 153 51 128;
+ color3: 255 0 0 20;
+ }
+ }
part { name: "terminology.tabcount.label"; type: TEXT; mouse_events:
0;
effect: GLOW;
scale: 1;
@@ -343,6 +370,7 @@ collections {
target: "tabcount_glow_r2";
target: "tabcount_glow_r3";
target: "terminology.tabcount.label";
+ target: "terminology.tabmissed.label";
}
program {
signal: "mouse,out"; source: "tabcount_ev";
@@ -357,6 +385,7 @@ collections {
target: "tabcount_glow_r2";
target: "tabcount_glow_r3";
target: "terminology.tabcount.label";
+ target: "terminology.tabmissed.label";
}
program {
signal: "mouse,clicked,1"; source: "tabcount_ev";
@@ -374,6 +403,25 @@ collections {
transition: DECELERATE 0.5;
target: "tabcount_clip";
}
+ program {
+ signal: "tabmissed,off"; source: "terminology";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 0.5;
+ target: "terminology.tabmissed.label";
+ }
+ program {
+ signal: "tabmissed,on"; source: "terminology";
+ action: STATE_SET "over" 0.0;
+ transition: DECELERATE 0.2;
+ target: "terminology.tabmissed.label";
+ after: "tabmissed2";
+ }
+ program { name: "tabmissed2";
+ signal: "tabmissed,on"; source: "terminology";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 3.0;
+ target: "terminology.tabmissed.label";
+ }
////////////////////////////////////////////////////////////////////
// overlayed prettiness
diff --git a/src/bin/main.c b/src/bin/main.c
index 89d9c8d..15ff61f 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -63,6 +63,7 @@ struct _Term
Eina_Bool focused : 1;
Eina_Bool hold : 1;
Eina_Bool unswallowed : 1;
+ Eina_Bool missed_bell : 1;
};
struct _Split
@@ -106,12 +107,19 @@ _split_free(Split *sp)
static void
_split_tabcount_update(Split *sp)
{
- char buf[32];
+ char buf[32], bufm[32];
int n = eina_list_count(sp->terms);
+ int missed = 0;
Eina_List *l;
Term *term;
+ EINA_LIST_FOREACH(sp->terms, l, term)
+ {
+ if (term->missed_bell) missed++;
+ }
snprintf(buf, sizeof(buf), "%i", n);
+ if (missed > 0) snprintf(bufm, sizeof(bufm), "%i", missed);
+ else bufm[0] = 0;
EINA_LIST_FOREACH(sp->terms, l, term)
{
Evas_Coord w = 0, h = 0;
@@ -127,10 +135,15 @@ _split_tabcount_update(Split *sp)
if (n > 1)
{
edje_object_part_text_set(term->bg, "terminology.tabcount.label",
buf);
+ edje_object_part_text_set(term->bg,
"terminology.tabmissed.label", bufm);
edje_object_signal_emit(term->bg, "tabcount,on", "terminology");
}
else
edje_object_signal_emit(term->bg, "tabcount,off", "terminology");
+ if (missed > 0)
+ edje_object_signal_emit(term->bg, "tabmissed,on", "terminology");
+ else
+ edje_object_signal_emit(term->bg, "tabmissed,off", "terminology");
}
}
@@ -516,6 +529,13 @@ _term_focus(Term *term)
if (term->wn->cmdbox) elm_object_focus_set(term->wn->cmdbox, EINA_FALSE);
elm_object_focus_set(term->term, EINA_TRUE);
elm_win_title_set(term->wn->win, termio_title_get(term->term));
+ if (term->missed_bell)
+ {
+ Split *sp = _split_find(term->wn->win, term->term);
+
+ term->missed_bell = EINA_FALSE;
+ if (sp) _split_tabcount_update(sp);
+ }
}
void
@@ -913,8 +933,19 @@ _cb_bell(void *data, Evas_Object *obj __UNUSED__, void
*event __UNUSED__)
if (!config) return;
if (!config->disable_visual_bell)
{
+ Split *sp;
+
edje_object_signal_emit(term->bg, "bell", "terminology");
edje_object_signal_emit(term->base, "bell", "terminology");
+ sp = _split_find(term->wn->win, term->term);
+ if (sp)
+ {
+ if (sp->term != term)
+ {
+ term->missed_bell = EINA_TRUE;
+ _split_tabcount_update(sp);
+ }
+ }
}
if (config->urg_bell)
{
--
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter