-/*}}}*/
-
-
-/*{{{ Notifications */
-
-
-static void do_notify(WScreen *scr, Watch *watch, bool right,
- const char *str,
- char *style, const char *attr)
-{
-
- WInfoWin *iw=(WInfoWin*)(watch->obj);
- WFitParams fp;
-
- if(iw==NULL){
- WMPlexAttachParams param=MPLEXATTACHPARAMS_INIT;
-
- param.flags=(MPLEX_ATTACH_UNNUMBERED|
- MPLEX_ATTACH_SIZEPOLICY|
- MPLEX_ATTACH_GEOM|
- MPLEX_ATTACH_LEVEL);
- param.level=STACKING_LEVEL_ON_TOP;
-
- if(!right){
- param.szplcy=SIZEPOLICY_GRAVITY_NORTHWEST;
- param.geom.x=0;
- }else{
- param.szplcy=SIZEPOLICY_GRAVITY_NORTHEAST;
- param.geom.x=REGION_GEOM(scr).w-1;
- }
-
- param.geom.y=0;
- param.geom.w=1;
- param.geom.h=1;
-
- iw=(WInfoWin*)mplex_do_attach_new(&scr->mplex, ¶m,
- (WRegionCreateFn*)create_infowin,
- style);
-
- if(iw==NULL)
- return;
-
- watch_setup(watch, (Obj*)iw, NULL);
- }
-
- infowin_set_attr2(iw, attr, NULL);
- infowin_set_text(iw, str);
-}
-
-
-void screen_notify(WScreen *scr, const char *str)
-{
- do_notify(scr, &scr->notifywin_watch, FALSE, str, "actnotify", NULL);
-}
-
-
-void screen_windowinfo(WScreen *scr, const char *str, const char *attr)
-{
- do_notify(scr, &scr->infowin_watch, TRUE, str, "tab-info", attr);
-}
-
-
-void screen_unnotify(WScreen *scr)
-{
- Obj *iw=scr->notifywin_watch.obj;
- if(iw!=NULL){
- watch_reset(&(scr->notifywin_watch));
- mainloop_defer_destroy(iw);
- }
-}
-
-
-void screen_nowindowinfo(WScreen *scr)
-{
- Obj *iw=scr->infowin_watch.obj;
- if(iw!=NULL){
- watch_reset(&(scr->infowin_watch));
- mainloop_defer_destroy(iw);
- }
-}
-
-
-static char *addnot(char *str, WRegion *reg)
-{
- const char *nm=region_name(reg);
- char *nstr=NULL;
-
- if(nm==NULL)
- return str;
-
- if(str==NULL)
- return scat(TR("act: "), nm);
-
- nstr=scat3(str, ", ", nm);
- if(nstr!=NULL)
- free(str);
- return nstr;
-}
-
-
-static char *screen_managed_activity(WScreen *scr)
-{
- char *notstr=NULL;
- WMPlexIterTmp tmp;
- WRegion *reg;
-
- FOR_ALL_MANAGED_BY_MPLEX(&scr->mplex, reg, tmp){
- if(region_is_activity_r(reg) && !REGION_IS_MAPPED(reg))
- notstr=addnot(notstr, reg);
- }
-
- return notstr;
-}
-
-
-static void screen_notify_activity(WScreen *scr)
-{
- if(ioncore_g.screen_notify){
- char *notstr=screen_managed_activity(scr);
- if(notstr!=NULL){
- screen_notify(scr, notstr);
- free(notstr);
- return;
- }
- }
-
- screen_unnotify(scr);
-
- screen_update_infowin(scr);
-}
-
-
-static void screen_notify_tag(WScreen *scr)
-{
- screen_update_infowin(scr);
-}
-
-
-static void screen_update_infowin(WScreen *scr)
-{
- WRegion *reg=mplex_mx_current(&(scr->mplex));
- bool tag=(reg!=NULL && region_is_tagged(reg));
- bool act=(reg!=NULL && region_is_activity_r(reg));
-
- if(tag || act){
- const char *n=region_displayname(reg);
- char *attr=NULL;
-
- libtu_asprintf(&attr, "%s-selected-%s-not_dragged-%s",
- (REGION_IS_ACTIVE(scr) ? "active" : "inactive"),
- (tag ? "tagged" : "not_tagged"),
- (act ? "activity" : "no_activity"));
-
- screen_windowinfo(scr, n, attr); /* NULL attr ok */
- }else{
- screen_nowindowinfo(scr);
- }
-}
-
-
-static void screen_managed_notify(WScreen *scr, WRegion *reg, const char *how)
-{
- if(strcmp(how, "sub-activity")==0){
- /* TODO: multiple calls */
- mainloop_defer_action((Obj*)scr,
- (WDeferredAction*)screen_notify_activity);
- }else if(strcmp(how, "tag")==0){
- mainloop_defer_action((Obj*)scr,
- (WDeferredAction*)screen_notify_tag);
- }
-}
-
-
-/*}}}*/
-
-