Пример #1
0
/** Layout switching function
 * \param b Bool True : next False : previous
*/
void
layoutswitch(Bool b)
{
     int i;
     Client *c;

     screen_get_sel();

     if(tags[selscreen][seltag[selscreen]].layout.func == freelayout)
          for(c = clients; c && (c->tag != (uint)seltag[selscreen] && c->screen != selscreen); c = c->next)
          {
               c->ogeo = c->geo;
               c->free_geo = c->geo;
          }

     for(i = 0; i < conf.nlayout; ++i)
     {
          if(tags[selscreen][seltag[selscreen]].layout.func == conf.layout[i].func
             && tags[selscreen][seltag[selscreen]].layout.symbol == conf.layout[i].symbol)
          {
               if(b)
                    tags[selscreen][seltag[selscreen]].layout = conf.layout[(i + 1) % conf.nlayout];
               else
                    tags[selscreen][seltag[selscreen]].layout = conf.layout[(i + conf.nlayout - 1) % conf.nlayout];
               break;
          }
     }

     ewmh_update_current_tag_prop();
     tags[selscreen][seltag[selscreen]].layout.func(selscreen);
     infobar_draw(selscreen);

     return;
}
Пример #2
0
/** Rename the selected tag
  *\param cmd uicb_t type
*/
void
uicb_tag_rename(uicb_t cmd)
{
     screen_get_sel();
     char *str;
     size_t len;

     if(!cmd || !strlen(cmd))
          return;

     str = tags[selscreen][seltag[selscreen]].name;
     len = strlen(str);

     /* TODO: if strlen(cmd) > len, the tag name
      * will be truncated...
      * We can't do a realloc because if the pointer change
      * free() on paser will segfault.on free_conf()...
      */
     strncpy(str, cmd, len);

     infobar_update_taglist(selscreen);
     infobar_draw(selscreen);

     return;
}
Пример #3
0
/** Toggle abovefc option
  *\param cmd uicb_t type
  */
void
uicb_toggle_abovefc(uicb_t cmd)
{
     Client *c;
     (void)cmd;

     screen_get_sel();

     if(!(tags[selscreen][seltag[selscreen]].abovefc = !tags[selscreen][seltag[selscreen]].abovefc))
     {
          for(c = clients; c; c = c->next)
               if(c->flags & AboveFlag
                         && c->screen == selscreen
                         && c->tag == (uint)seltag[selscreen])
               {
                    c->flags &= ~AboveFlag;
                    break;
               }

          tags[selscreen][seltag[selscreen]].layout.func(selscreen);
     }

     client_focus(sel);

     return;
}
Пример #4
0
/** Toggle the selected client to free
 * \param cmd uicb_t type unused
*/
void
uicb_togglefree(uicb_t cmd)
{
     (void)cmd;

     if(!sel || sel->screen != screen_get_sel() || (sel->flags & FSSFlag))
          return;

     sel->flags ^= FreeFlag;

     if((sel->flags & FreeFlag))
     {
          sel->flags &= ~(TileFlag | MaxFlag | LMaxFlag);
          client_moveresize(sel, sel->free_geo, True);
          client_raise(sel);
     }
     else
     {
          sel->free_geo = sel->geo;
          sel->ogeo = sel->geo;
     }

     client_update_attributes(sel);

     tags[selscreen][seltag[selscreen]].layout.func(selscreen);

     return;
}
Пример #5
0
/* Transfert a client to a tag
 * \param c Client pointer
 * \param tag Tag
*/
void
tag_transfert(Client *c, int tag)
{
     screen_get_sel();

     CHECK(c);

     if(tag <= 0)
          tag = 1;

     if(tag > conf.ntag[selscreen])
          return;

     c->tag = tag;
     c->screen = selscreen;

     arrange(c->screen, True);

     client_focus_next(c);

     client_update_attributes(c);

     tags[c->screen][tag].request_update = True;

     return;
}
Пример #6
0
void
uicb_menu(uicb_t cmd)
{
    int i, d, u, x, y;
    Window w;

    if(!strcmp(cmd, "menulayout"))
        menu_draw(menulayout, menulayout.x, menulayout.y);

    for(i = 0; i < conf.nmenu; ++i)
        if(!strcmp(cmd, conf.menu[i].name))
        {
            if(conf.menu[i].place_at_mouse)
            {
                XQueryPointer(dpy, ROOT, &w, &w, &x, &y, &d, &d, (uint *)&u);
                conf.menu[i].x = x;
                conf.menu[i].y = y;
            }
            else
            {
                screen_get_sel();
                x = conf.menu[i].x + spgeo[selscreen].x;
                y = conf.menu[i].y + spgeo[selscreen].y;
            }
            menu_draw(conf.menu[i], x, y);
        }

    return;
}
Пример #7
0
/** Keep that tag the last one
  *\param cmd uicb_t type unused
*/
void
uicb_tag_stay_last(uicb_t cmd)
{
     (void)cmd;

     screen_get_sel();

     if(tags[selscreen][seltag[selscreen]].stay_last)
          tags[selscreen][seltag[selscreen]].stay_last = False;

     else
     {
          int i;
          remove_old_last_tag(selscreen);
          
          for(i = seltag[selscreen]; i <= conf.ntag[selscreen]; i++)
          {
               tag_swap(selscreen, seltag[selscreen], seltag[selscreen] + 1);
          }

          tag_set(conf.ntag[selscreen]);
          tags[selscreen][seltag[selscreen]].stay_last = True;
          arrange(selscreen, True);
     }


     return;
}
Пример #8
0
Файл: ewmh.c Проект: n4cht/kwm
/** Get the current desktop
*/
void
ewmh_update_current_tag_prop(void)
{
     int t;
     char s[8] = { 0 };

     screen_get_sel();
     t = seltag[selscreen] - 1;

     /* Get current desktop (tag) */
     XChangeProperty(dpy, ROOT, net_atom[net_current_desktop], XA_CARDINAL, 32,
                     PropModeReplace, (uchar*)&t, 1);

     /* Current tag name */
     XChangeProperty(dpy, ROOT, net_atom[wmfs_current_tag], net_atom[utf8_string], 8,
                     PropModeReplace, (uchar*)tags[selscreen][seltag[selscreen]].name,
                     strlen(tags[selscreen][seltag[selscreen]].name));

     sprintf(s, "%.3f", tags[selscreen][t + 1].mwfact);

     /* Current tag mwfact */
     XChangeProperty(dpy, ROOT, net_atom[wmfs_mwfact], XA_STRING, 8,
                     PropModeReplace, (uchar*)s, strlen(s));

     /* Current nmaster */
     XChangeProperty(dpy, ROOT, net_atom[wmfs_nmaster], XA_CARDINAL, 32,
                     PropModeReplace, (uchar*)&tags[selscreen][t + 1].nmaster, 1);

     /* Current layout */
     XChangeProperty(dpy, ROOT, net_atom[wmfs_current_layout], net_atom[utf8_string], 8,
               PropModeReplace, (uchar*)tags[selscreen][seltag[selscreen]].layout.symbol,
               strlen(tags[selscreen][seltag[selscreen]].layout.symbol));

     return;
}
Пример #9
0
/** Toggle the tag_autohide mode
 * \param cmd uicb_t type unused
*/
void
uicb_toggle_tagautohide(uicb_t cmd)
{
     int i, x;
     (void)cmd;

     screen_get_sel();
     conf.tagautohide = !conf.tagautohide;

     if(!conf.tagautohide)
     {
          for(i = 1, x = 0; i < conf.ntag[selscreen] + 1; ++i)
          {
               if(!infobar[selscreen].tags[i]->mapped)
                    barwin_map(infobar[selscreen].tags[i]);

               barwin_move(infobar[selscreen].tags[i], x, 0);
               x += infobar[selscreen].tags[i]->geo.width;
          }

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

     infobar_draw(selscreen);

     return;
}
Пример #10
0
/* Set the infobar position
 * \param pos Position of the bar
 */
void
infobar_set_position(int pos)
{
     screen_get_sel();

     switch(pos)
     {
     case IB_Hide:
          sgeo[selscreen].y = spgeo[selscreen].y + TBARH;
          sgeo[selscreen].height = spgeo[selscreen].height - TBARH;
          infobar[selscreen].geo.y = -(infobar[selscreen].geo.height) * 2;
          break;
     case IB_Bottom:
          sgeo[selscreen].y = spgeo[selscreen].y + TBARH;
          sgeo[selscreen].height = spgeo[selscreen].height - INFOBARH - TBARH;
          infobar[selscreen].geo.y = spgeo[selscreen].y + sgeo[selscreen].height + TBARH;
          break;
     default:
     case IB_Top:
          sgeo[selscreen].y = spgeo[selscreen].y + INFOBARH + TBARH;
          sgeo[selscreen].height = spgeo[selscreen].height - INFOBARH - TBARH;
          infobar[selscreen].geo.y = spgeo[selscreen].y;
          break;
     }

     tags[selscreen][seltag[selscreen]].barpos = pos;

     barwin_move(infobar[selscreen].bar, sgeo[selscreen].x - BORDH, infobar[selscreen].geo.y);
     infobar_draw(selscreen);
     arrange(selscreen, True);

     return;
}
Пример #11
0
/** Add an additional tag to the current tag
  *\param cmd uicb_t
 */
void
uicb_tag_toggle_additional(uicb_t cmd)
{
     screen_get_sel();

     tag_additional(selscreen, seltag[selscreen], atoi(cmd));

     return;
}
Пример #12
0
/** Swap current tag with a specified tag
  *\param cmd uicb_t type
*/
void
uicb_tag_swap(uicb_t cmd)
{
     screen_get_sel();

     tag_swap(selscreen, seltag[selscreen], atoi(cmd));

     return;
}
Пример #13
0
/** Adding a tag
  *\param cmd uicb_t type
*/
void
uicb_tag_new(uicb_t cmd)
{
     screen_get_sel();

     tag_new(selscreen, (char*)cmd);

     return;
}
Пример #14
0
/** Uicb: screen prev sel
  * \param cmd uicb_t type unused
  */
void
uicb_screen_prev_sel(uicb_t cmd)
{
     (void)cmd;
     screen_get_sel();

     screen_set_sel(prevselscreen);

     return;
}
Пример #15
0
/** Check layout type
 * \param cmd uicb_t type layout type
*/
Bool
uicb_checklayout(uicb_t cmd)
{
     screen_get_sel();

     if(!strcmp(cmd, tags[selscreen][seltag[selscreen]].layout.type))
          return True;

     return False;
}
Пример #16
0
/** Swap current tag with previous tag
  *\param cmd uicb_t type
*/
void
uicb_tag_swap_previous(uicb_t cmd)
{
     (void)cmd;
     screen_get_sel();

     tag_swap(selscreen, seltag[selscreen], seltag[selscreen] - 1);

     return;
}
Пример #17
0
/** Set the previous selected tag
  * \param cmd uicb_t type unused
  */
void
uicb_tag_prev_sel(uicb_t cmd)
{
     (void)cmd;
     screen_get_sel();

     tag_set(prevseltag[selscreen]);

     return;
}
Пример #18
0
/** Go to the last tag
  *\param cmd uicb_t type unused
*/
void
uicb_tag_last(uicb_t cmd)
{
     (void)cmd;
     screen_get_sel();

     tag_set(conf.ntag[selscreen]);

     return;
}
Пример #19
0
/** Set the previous tag
 * \param cmd uicb_t type unused
*/
void
uicb_tag_prev(uicb_t cmd)
{
     (void)cmd;
     screen_get_sel();

     tag_set(seltag[selscreen] - 1);

     return;
}
Пример #20
0
/** Set the next tag
 * \param cmd uicb_t type unused
*/
void
uicb_tag_next(uicb_t cmd)
{
     (void)cmd;
     screen_get_sel();

     tag_set(seltag[selscreen] + 1);

     return;
}
Пример #21
0
/** Uicb: screen prev
 * \param cmd Screen uicb_t type
*/
void
uicb_screen_prev(uicb_t cmd)
{
     (void)cmd;
     screen_get_sel();

     selscreen = (selscreen - 1 < 0) ? screen_count() - 1 : selscreen - 1;

     screen_set_sel(selscreen);

     return;
}
Пример #22
0
/** Toggle the resizehint
 * \param cmd uicb_t type
 */
void
uicb_toggle_resizehint(uicb_t cmd)
{
     screen_get_sel();
     (void)cmd;

     tags[selscreen][seltag[selscreen]].resizehint = !tags[selscreen][seltag[selscreen]].resizehint;

     tags[selscreen][seltag[selscreen]].layout.func(selscreen);

     return;
}
Пример #23
0
/** Toggle the infobar position
 * \param cmd uicb_t type unused
*/
void
uicb_infobar_togglepos(uicb_t cmd)
{
     (void)cmd;
     screen_get_sel();

     infobar_set_position((tags[selscreen][seltag[selscreen]].barpos
                           = (tags[selscreen][seltag[selscreen]].barpos < 2)
                           ? tags[selscreen][seltag[selscreen]].barpos + 1
                           : 0));

     return;
}
Пример #24
0
/** Delete a tag
  *\param cmd uicb_t type
*/
void
uicb_tag_del(uicb_t cmd)
{
     int n;

     screen_get_sel();

     if(cmd == NULL || !(n = atoi(cmd)))
          n = seltag[selscreen];

     tag_delete(selscreen, n);

     return;
}
Пример #25
0
/** Uicb: screen next
 * \param cmd Screen uicb_t type
*/
void
uicb_screen_next(uicb_t cmd)
{
     (void)cmd;
     screen_get_sel();

     if(screen_count() > 1)
     {
          selscreen = (selscreen + 1 > screen_count() - 1) ? 0 : selscreen + 1;

          screen_set_sel(selscreen);
     }

     return;
}
Пример #26
0
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;
}
Пример #27
0
/** Swap current tag with next tag
  *\param cmd uicb_t type
*/
void
uicb_tag_swap_next(uicb_t cmd)
{
     (void)cmd;
     screen_get_sel();

     /* Check if the next one does have the stay_last bool */
     if(!tags[selscreen][conf.ntag[selscreen]].stay_last)
     {
          tag_swap(selscreen, seltag[selscreen], seltag[selscreen] + 1);
     }
     else
     {
          warnx("The next tag is set to always stay the last one");
     }

     return;
}
Пример #28
0
/** Toggle hide/display infobar
 * \param cmd uicb_t type unused
*/
void
uicb_infobar_toggledisplay(uicb_t cmd)
{
     (void)cmd;
     screen_get_sel();
     int new_pos;

     new_pos = (tags[selscreen][seltag[selscreen]].barpos
               ? 0 : (tags[selscreen][seltag[selscreen]].prev_barpos
               ? tags[selscreen][seltag[selscreen]].prev_barpos : 2
               ));

     tags[selscreen][seltag[selscreen]].prev_barpos = tags[selscreen][seltag[selscreen]].barpos;
     tags[selscreen][seltag[selscreen]].barpos = new_pos;

     infobar_set_position(new_pos);

     return;
}
Пример #29
0
/** The free layout function
*/
void
freelayout(int screen)
{
     Client *c;
     (void)screen;

     for(c = clients; c; c = c->next)
          if(!ishide(c, selscreen)
             && c->screen == screen_get_sel()
             && !(c->flags & MaxFlag))
          {
               client_moveresize(c, c->free_geo, True);
               c->flags &= ~(TileFlag | LMaxFlag);
          }

     ewmh_update_current_tag_prop();

     return;
}
Пример #30
0
/** Set the client as master
 * \param c Client
 */
void
layout_set_client_master(Client *c)
{
     screen_get_sel();

     if(!c || (c->flags & HintFlag) || !(c->flags & TileFlag)
               || (c->flags & FSSFlag))
          return;

     if(c == tiled_client(selscreen, clients))
          CHECK((c = tiled_client(selscreen, c->next)));

     client_detach(c);
     client_attach(c);

     tags[selscreen][seltag[selscreen]].layout.func(selscreen);

     return;
}