void frame_update_attr(WFrame *frame, int i, WRegion *reg) { GrStyleSpec *spec; bool selected, tagged, dragged, activity; if(i>=frame->titles_n){ /* Might happen when deinitialising */ return; } ensure_create_attrs(); spec=&frame->titles[i].attr; selected=(reg==FRAME_CURRENT(frame)); tagged=(reg!=NULL && reg->flags®ION_TAGGED); dragged=(i==frame->tab_dragged_idx); activity=(reg!=NULL && region_is_activity_r(reg)); gr_stylespec_unalloc(spec); gr_stylespec_set(spec, selected ? GR_ATTR(selected) : GR_ATTR(unselected)); gr_stylespec_set(spec, tagged ? GR_ATTR(tagged) : GR_ATTR(not_tagged)); gr_stylespec_set(spec, dragged ? GR_ATTR(dragged) : GR_ATTR(not_dragged)); gr_stylespec_set(spec, activity ? GR_ATTR(activity) : GR_ATTR(no_activity)); }
int frame_press(WFrame *frame, XButtonEvent *ev, WRegion **reg_ret) { WRegion *sub=NULL; WRectangle g; p_tabnum=-1; window_p_resize_prepare((WWindow*)frame, ev); /* Check tab */ frame_bar_geom(frame, &g); /* Borders act like tabs at top of the parent region */ if(REGION_GEOM(frame).y==0){ g.h+=g.y; g.y=0; } if(frame->barmode!=FRAME_BAR_NONE && rectangle_contains(&g, ev->x, ev->y)){ p_tabnum=frame_tab_at_x(frame, ev->x); region_rootpos((WRegion*)frame, &p_tab_x, &p_tab_y); p_tab_x+=frame_nth_tab_x(frame, p_tabnum); p_tab_y+=g.y; sub=mplex_mx_nth(&(frame->mplex), p_tabnum); if(reg_ret!=NULL) *reg_ret=sub; return FRAME_AREA_TAB; }else{ WLListIterTmp tmp; FRAME_MX_FOR_ALL(sub, frame, tmp){ p_tabnum++; if(sub==FRAME_CURRENT(frame)) break; } if(sub!=NULL){ p_tab_x=ev->x_root-frame_nth_tab_w(frame, p_tabnum)/2; p_tab_y=ev->y_root-frame->bar_h/2; }else{ p_tabnum=-1; } }