コード例 #1
0
ファイル: tag.c プロジェクト: wavebeem/wmfs
/** Add an additional tag to the current tag
  *\param sc Screen
  *\param tag Tag where apply additional tag
  *\param adtag Additional tag to apply in tag
 */
void
tag_additional(int sc, int tag, int adtag)
{
     if(tag < 0 || tag > conf.ntag[sc]
       || adtag < 1 || adtag > conf.ntag[sc] || adtag == seltag[sc])
          return;

     tags[sc][tag].tagad ^= TagFlag(adtag);
     tags[sc][adtag].request_update = True;
     arrange(sc, True);

     return;
}
コード例 #2
0
ファイル: tag.c プロジェクト: krmnn/wmfs-samoht
void
uicb_tag_toggle_expose(uicb_t cmd)
{
     (void)cmd;
     int i, j;

     screen_get_sel();

     for(i = 1; i <= conf.ntag[selscreen]; i++)
     {
          if(strcmp(tags[selscreen][i].name, conf.tag_expose_name) == 0)
          {
               if(clients && sel->tag)
                    tag_set(sel->tag);

               tag_delete(selscreen, i);

               for(j = 0; j < conf.ntag[selscreen]; j++)
                    tags[selscreen][j].request_update = True;

               arrange(selscreen, True);

               return;
          }
     }
     
     tag_new(selscreen, conf.tag_expose_name);

     for(i = 0; i < conf.nlayout; ++i)
     {
          if(strcmp(conf.expose_layout, conf.layout[i].type) == 0)
          {
               tags[selscreen][conf.ntag[selscreen]].layout = conf.layout[i];
          }
     }

     for(i = 1; i < conf.ntag[selscreen]; ++i)
     {
          tags[selscreen][conf.ntag[selscreen]].tagad ^= TagFlag(i);
     }
     
     tags[selscreen][conf.ntag[selscreen]].request_update = True;
     arrange(selscreen, True);

     return;
}
コード例 #3
0
ファイル: tag.c プロジェクト: wavebeem/wmfs
/* Set the tag
 * \param tag The tag number
*/
void
tag_set(int tag)
{
     Client *c;
     Bool al = False;
     int i;

     if(tag < 0 || tag > MAXTAG)
          return;

     screen_get_sel();

     if(seltag[selscreen] != tag)
          prevseltag[selscreen] = seltag[selscreen];
     else if(tag == seltag[selscreen] && tag != prevseltag[selscreen] && conf.tag_auto_prev)
          tag = seltag[selscreen] = prevseltag[selscreen];
     else
          seltag[selscreen] = tag;

     if(conf.tag_round)
     {
          if(tag <= 0)
               seltag[selscreen] = conf.ntag[selscreen];
          else if(tag > conf.ntag[selscreen])
               seltag[selscreen] = 1;
          else
               seltag[selscreen] = tag;
     }
     else
     {
          if(!tag || tag > conf.ntag[selscreen])
               return;

          seltag[selscreen] = tag;
     }

     ewmh_update_current_tag_prop();

     /* Arrange infobar position */
     if(tags[selscreen][prevseltag[selscreen]].barpos != tags[selscreen][seltag[selscreen]].barpos
               || prevseltag[selscreen] == seltag[selscreen])
          infobar_set_position(tags[selscreen][seltag[selscreen]].barpos);

     /* Check if a layout update is needed with additional tags */
     if(tags[selscreen][seltag[selscreen]].tagad)
          al = True;
     else if(tags[selscreen][seltag[selscreen]].request_update)
     {
          al = True;
          tags[selscreen][seltag[selscreen]].request_update = False;
     }

     for(i = 1; i < conf.ntag[selscreen] + 1; ++i)
          if(tags[selscreen][i].tagad & TagFlag(seltag[selscreen]))
          {
               al = True;
               break;
          }

     /* Check for ignore_tag clients */
     for(c = clients; c; c = c->next)
          if(c->tag == MAXTAG + 1 && c->screen == selscreen)
          {
               al = True;
               break;
          }

     arrange(selscreen, al);

     if(tags[selscreen][tag].request_update)
     {
          tags[selscreen][seltag[selscreen]].layout.func(selscreen);
          tags[selscreen][tag].request_update = False;
     }

     /* To focus selected client of the via focusontag option */
     for(c = clients; c; c = c->next)
          if(c->focusontag == tag && c->screen == selscreen)
               break;

     /* No focusontag option found on any client, try to find the first of the tag */
     if(!c)
          for(c = clients; c; c = c->next)
               if(c->tag == (uint)seltag[selscreen] && c->screen == selscreen)
                    break;

     client_focus((c) ? c : NULL);

     return;
}
コード例 #4
0
ファイル: infobar.c プロジェクト: n4cht/nnwm
/** Draw the taglist in the InfoBar
 *\param sc Screen number
*/
void
infobar_draw_taglist(int sc)
{
     int i, x;
     Client *c = NULL;
     Bool is_occupied[MAXTAG + 1];

     if(conf.layout_placement)
          barwin_move(infobar[sc].tags_board, ((conf.layout_button_width > 0) ? (uint)conf.layout_button_width : (textw(tags[sc][seltag[sc]].layout.symbol) + PAD)) + PAD / 2, 0);

     for(i = 0; i < MAXTAG; i++)
          is_occupied[i] = False;

     for(c = clients; c; c = c->next)
          if(c->screen == sc && c->tag != MAXTAG + 1)
               is_occupied[c->tag] = True;

     for(i = 1, x = 0; i < conf.ntag[sc] + 1; ++i)
     {
          /* Autohide tag feature */
          if(conf.tagautohide)
          {
               if(!is_occupied[i] && i != seltag[sc])
               {
                    barwin_unmap(infobar[sc].tags[i]);

                    continue;
               }

               if(!infobar[sc].tags[i]->mapped)
                    barwin_map(infobar[sc].tags[i]);

               barwin_move(infobar[sc].tags[i], x, 0);

               x += infobar[sc].tags[i]->geo.width;

               barwin_resize(infobar[sc].tags_board, x, infobar[sc].geo.height);
          }

          infobar[sc].tags[i]->bg = tags[sc][i].urgent
               ? conf.colors.tagurbg
               : ((i == seltag[sc] || tags[sc][seltag[sc]].tagad & TagFlag(i))
                    ? conf.colors.tagselbg
                    : (is_occupied[i]
                         ? conf.colors.tag_occupied_bg
                         : conf.colors.bar));

          infobar[sc].tags[i]->fg = tags[sc][i].urgent
               ? conf.colors.tagurfg
               : ((i == seltag[sc] || tags[sc][seltag[sc]].tagad & TagFlag(i))
                    ? conf.colors.tagselfg
                    : (is_occupied[i]
                         ? conf.colors.tag_occupied_fg
                         : conf.colors.text));

          barwin_color_set(infobar[sc].tags[i], infobar[sc].tags[i]->bg, infobar[sc].tags[i]->fg);
          barwin_refresh_color(infobar[sc].tags[i]);

          if(tags[sc][i].name)
               barwin_draw_text(infobar[sc].tags[i], PAD / 2, FHINFOBAR, tags[sc][i].name);
     }

     return;
}