Adding padding

This commit is contained in:
Nathan Hüsken 2007-11-27 23:03:55 +01:00 committed by Julien Danjou
parent 355dc7d556
commit 9524f15478
14 changed files with 88 additions and 32 deletions

View File

@ -214,7 +214,7 @@ setup_screen(awesome_config *awesomeconf, const char *confpath)
setup(awesomeconf);
initstatusbar(awesomeconf->display, awesomeconf->screen, &awesomeconf->statusbar,
awesomeconf->cursor[CurNormal], awesomeconf->font,
awesomeconf->layouts, awesomeconf->nlayouts);
awesomeconf->layouts, awesomeconf->nlayouts,&awesomeconf->padding);
}
/** Startup Error handler to check if another window manager

View File

@ -35,6 +35,14 @@ screen 0
# Focused foreground color (statusbar)
focus_fg = "#ffffff"
}
# Optionnal screen padding
#padding
#{
# left = 10
# right = 0
# top = 0
# bottom = 10
#}
statusbar
{
# Statusbar position

View File

@ -289,7 +289,7 @@ client_manage(Window w, XWindowAttributes *wa, awesome_config *awesomeconf)
if(!loadprops(c, awesomeconf->ntags))
tag_client_with_rules(c, current_acf);
screen_info = get_screen_info(current_acf->display, current_acf->screen, NULL);
screen_info = get_screen_info(current_acf->display, current_acf->screen, NULL, NULL);
/* if window request fullscreen mode */
if(c->w == screen_info[current_acf->screen].width && c->h == screen_info[current_acf->screen].height)
@ -301,7 +301,7 @@ client_manage(Window w, XWindowAttributes *wa, awesome_config *awesomeconf)
}
else
{
ScreenInfo *display_info = get_display_info(c->display, c->phys_screen, &current_acf->statusbar);
ScreenInfo *display_info = get_display_info(c->display, c->phys_screen, &current_acf->statusbar,&awesomeconf->padding);
if(c->x + c->w + 2 * c->border > display_info->x_org + display_info->width)
c->x = c->rx = display_info->x_org + display_info->width - c->w - 2 * c->border;
@ -419,7 +419,7 @@ client_resize(Client *c, int x, int y, int w, int h, awesome_config *awesomeconf
if(w <= 0 || h <= 0)
return;
/* offscreen appearance fixes */
si = get_display_info(c->display, c->phys_screen, NULL);
si = get_display_info(c->display, c->phys_screen, NULL, &awesomeconf->padding);
if(x > si->width)
x = si->width - w - 2 * c->border;
if(y > si->height)

View File

@ -221,6 +221,14 @@ parse_config(const char *confpatharg, awesome_config *awesomeconf)
CFG_SEC((char *) "layout", layout_opts, CFGF_TITLE | CFGF_MULTI),
CFG_END()
};
static cfg_opt_t padding_opts[] =
{
CFG_INT((char *) "top", 0, CFGF_NONE),
CFG_INT((char *) "bottom", 0, CFGF_NONE),
CFG_INT((char *) "right", 0, CFGF_NONE),
CFG_INT((char *) "left", 0, CFGF_NONE),
CFG_END()
};
static cfg_opt_t screen_opts[] =
{
CFG_SEC((char *) "general", general_opts, CFGF_NONE),
@ -228,6 +236,7 @@ parse_config(const char *confpatharg, awesome_config *awesomeconf)
CFG_SEC((char *) "tags", tags_opts, CFGF_NONE),
CFG_SEC((char *) "colors", colors_opts, CFGF_NONE),
CFG_SEC((char *) "layouts", layouts_opts, CFGF_NONE),
CFG_SEC((char *) "padding", padding_opts, CFGF_NONE),
};
static cfg_opt_t rule_opts[] =
{
@ -287,8 +296,8 @@ parse_config(const char *confpatharg, awesome_config *awesomeconf)
CFG_SEC((char *) "mouse", mouse_opts, CFGF_NONE),
CFG_END()
};
cfg_t *cfg, *cfg_general, *cfg_colors, *cfg_screen, *cfg_statusbar,
*cfg_tags, *cfg_layouts, *cfg_rules, *cfg_keys, *cfg_mouse, *cfgsectmp;
cfg_t *cfg, *cfg_general, *cfg_colors, *cfg_screen, *cfg_statusbar, *cfg_tags,
*cfg_layouts, *cfg_rules, *cfg_keys, *cfg_mouse, *cfgsectmp, *cfg_padding;
int i = 0, k = 0, ret;
unsigned int j = 0, l = 0;
const char *tmp, *homedir;
@ -335,6 +344,7 @@ parse_config(const char *confpatharg, awesome_config *awesomeconf)
cfg_colors = cfg_getsec(cfg_screen, "colors");
cfg_general = cfg_getsec(cfg_screen, "general");
cfg_layouts = cfg_getsec(cfg_screen, "layouts");
cfg_padding = cfg_getsec(cfg_screen, "padding");
/* get general sections */
cfg_rules = cfg_getsec(cfg, "rules");
@ -447,6 +457,11 @@ parse_config(const char *confpatharg, awesome_config *awesomeconf)
awesomeconf->tags[i].ncol = cfg_getint(cfgsectmp, "ncol");
}
/* padding */
awesomeconf->padding.top = cfg_getint(cfg_padding, "top");
awesomeconf->padding.bottom = cfg_getint(cfg_padding, "bottom");
awesomeconf->padding.left = cfg_getint(cfg_padding, "left");
awesomeconf->padding.right = cfg_getint(cfg_padding, "right");
if(!awesomeconf->ntags)
eprint("awesome: fatal: no tags found in configuration file\n");

View File

@ -153,6 +153,19 @@ typedef struct
int ncol;
} Tag;
/** Padding type */
typedef struct
{
/** Padding at top */
int top;
/** Padding at bottom */
int bottom;
/** Padding at left */
int left;
/** Padding at right */
int right;
} Padding;
/** Main configuration structure */
struct awesome_config
{
@ -210,6 +223,8 @@ struct awesome_config
XColor colors_selected[ColLast];
/** Cursors */
Cursor cursor[CurLast];
/** Padding */
Padding padding;
/** Font */
XftFont *font;
/** Clients list */

View File

@ -200,7 +200,7 @@ handle_event_configurenotify(XEvent * e, awesome_config *awesomeconf)
DisplayHeight(e->xany.display, screen) = ev->height;
/* update statusbar */
si = get_screen_info(e->xany.display, screen, NULL);
si = get_screen_info(e->xany.display, screen, NULL, &awesomeconf->padding);
awesomeconf[screen].statusbar.width = si[screen].width;
p_delete(&si);
@ -209,7 +209,7 @@ handle_event_configurenotify(XEvent * e, awesome_config *awesomeconf)
awesomeconf[screen].statusbar.width,
awesomeconf[screen].statusbar.height);
updatebarpos(e->xany.display, awesomeconf[screen].statusbar);
updatebarpos(e->xany.display, awesomeconf[screen].statusbar, &awesomeconf[screen].padding);
arrange(&awesomeconf[screen]);
}
}

View File

@ -254,7 +254,7 @@ void
uicb_client_togglemax(awesome_config *awesomeconf,
const char *arg __attribute__ ((unused)))
{
ScreenInfo *si = get_screen_info(awesomeconf->display, awesomeconf->screen, &awesomeconf->statusbar);
ScreenInfo *si = get_screen_info(awesomeconf->display, awesomeconf->screen, &awesomeconf->statusbar, &awesomeconf->padding);
maximize(si[awesomeconf->screen].x_org, si[awesomeconf->screen].y_org,
si[awesomeconf->screen].width - 2 * awesomeconf->borderpx,
@ -268,7 +268,7 @@ uicb_client_toggleverticalmax(awesome_config *awesomeconf,
const char *arg __attribute__ ((unused)))
{
Client *sel = get_current_tag(awesomeconf->tags, awesomeconf->ntags)->client_sel;
ScreenInfo *si = get_screen_info(awesomeconf->display, awesomeconf->screen, &awesomeconf->statusbar);
ScreenInfo *si = get_screen_info(awesomeconf->display, awesomeconf->screen, &awesomeconf->statusbar, &awesomeconf->padding);
if(sel)
maximize(sel->x,
@ -285,7 +285,7 @@ uicb_client_togglehorizontalmax(awesome_config *awesomeconf,
const char *arg __attribute__ ((unused)))
{
Client *sel = get_current_tag(awesomeconf->tags, awesomeconf->ntags)->client_sel;
ScreenInfo *si = get_screen_info(awesomeconf->display, awesomeconf->screen, &awesomeconf->statusbar);
ScreenInfo *si = get_screen_info(awesomeconf->display, awesomeconf->screen, &awesomeconf->statusbar, &awesomeconf->padding);
if(sel)
maximize(si[awesomeconf->screen].x_org,

View File

@ -28,7 +28,7 @@ void
layout_max(awesome_config *awesomeconf)
{
Client *c;
ScreenInfo *si = get_screen_info(awesomeconf->display, awesomeconf->screen, &awesomeconf->statusbar);
ScreenInfo *si = get_screen_info(awesomeconf->display, awesomeconf->screen, &awesomeconf->statusbar, &awesomeconf->padding);
for(c = *awesomeconf->clients; c; c = c->next)
if(IS_TILED(c, awesomeconf->screen, awesomeconf->tags, awesomeconf->ntags))

View File

@ -104,7 +104,7 @@ _tile(awesome_config *awesomeconf, const Bool right)
Client *c;
Tag *curtag = get_current_tag(awesomeconf->tags, awesomeconf->ntags);
screens_info = get_screen_info(awesomeconf->display, awesomeconf->screen, &awesomeconf->statusbar);
screens_info = get_screen_info(awesomeconf->display, awesomeconf->screen, &awesomeconf->statusbar, &awesomeconf->padding);
for(n = 0, c = *awesomeconf->clients; c; c = c->next)
if(IS_TILED(c, awesomeconf->screen, awesomeconf->tags, awesomeconf->ntags))

View File

@ -47,7 +47,7 @@ uicb_client_movemouse(awesome_config *awesomeconf, const char *arg __attribute__
else
restack(awesomeconf);
si = get_screen_info(c->display, c->screen, &awesomeconf->statusbar);
si = get_screen_info(c->display, c->screen, &awesomeconf->statusbar, &awesomeconf->padding);
ocx = nx = c->x;
ocy = ny = c->y;

View File

@ -32,7 +32,7 @@
* \return ScreenInfo struct array with all screens info
*/
ScreenInfo *
get_screen_info(Display *disp, int screen, Statusbar *statusbar)
get_screen_info(Display *disp, int screen, Statusbar *statusbar, Padding *padding)
{
int i, screen_number = 0;
ScreenInfo *si;
@ -50,6 +50,15 @@ get_screen_info(Display *disp, int screen, Statusbar *statusbar)
screen_number = screen + 1;
}
/* make padding corrections */
if(padding)
{
si[screen].x_org+=padding->left;
si[screen].y_org+=padding->top;
si[screen].width-=padding->left+padding->right;
si[screen].height-=padding->top+padding->bottom;
}
if(statusbar)
for(i = 0; i < screen_number; i++)
switch(statusbar->position)
@ -76,7 +85,7 @@ get_screen_info(Display *disp, int screen, Statusbar *statusbar)
* \return ScreenInfo struct pointer with all display info
*/
ScreenInfo *
get_display_info(Display *disp, int screen, Statusbar *statusbar)
get_display_info(Display *disp, int screen, Statusbar *statusbar, Padding *padding)
{
ScreenInfo *si;
@ -88,6 +97,15 @@ get_display_info(Display *disp, int screen, Statusbar *statusbar)
si->height = DisplayHeight(disp, screen) -
(statusbar && (statusbar->position == BarTop || statusbar->position == BarBot) ? statusbar->height : 0);
/* make padding corrections */
if(padding)
{
si[screen].x_org+=padding->left;
si[screen].y_org+=padding->top;
si[screen].width-=padding->left+padding->right;
si[screen].height-=padding->top+padding->bottom;
}
return si;
}
@ -107,7 +125,7 @@ get_screen_bycoord(Display *disp, int x, int y)
if(!XineramaIsActive(disp))
return DefaultScreen(disp);
si = get_screen_info(disp, 0, NULL);
si = get_screen_info(disp, 0, NULL, NULL);
for(i = 0; i < get_screen_count(disp); i++)
if((x < 0 || (x >= si[i].x_org && x < si[i].x_org + si[i].width))
@ -177,8 +195,8 @@ move_client_to_screen(Client *c, awesome_config *acf_new, Bool doresize)
{
ScreenInfo *si, *si_old;
si = get_screen_info(c->display, c->screen, NULL);
si_old = get_screen_info(c->display, old_screen, NULL);
si = get_screen_info(c->display, c->screen, NULL, NULL);
si_old = get_screen_info(c->display, old_screen, NULL, NULL);
/* compute new coords in new screen */
c->rx = (c->rx - si_old[old_screen].x_org) + si[c->screen].x_org;
@ -215,7 +233,7 @@ move_mouse_pointer_to_screen(Display *disp, int screen)
{
if(XineramaIsActive(disp))
{
ScreenInfo *si = get_screen_info(disp, screen, NULL);
ScreenInfo *si = get_screen_info(disp, screen, NULL, NULL);
XWarpPointer(disp, None, DefaultRootWindow(disp), 0, 0, 0, 0, si[screen].x_org, si[screen].y_org);
p_delete(&si);
}

View File

@ -28,8 +28,8 @@
typedef XineramaScreenInfo ScreenInfo;
ScreenInfo * get_screen_info(Display *, int, Statusbar *);
ScreenInfo * get_display_info(Display *, int, Statusbar *);
ScreenInfo * get_screen_info(Display *, int, Statusbar *, Padding *);
ScreenInfo * get_display_info(Display *, int, Statusbar *, Padding *);
int get_screen_bycoord(Display *, int, int);
int get_screen_count(Display *);
int get_phys_screen(Display *, int);

View File

@ -197,11 +197,11 @@ drawstatusbar(awesome_config *awesomeconf)
}
void
initstatusbar(Display *disp, int screen, Statusbar *statusbar, Cursor cursor, XftFont *font, Layout *layouts, int nlayouts)
initstatusbar(Display *disp, int screen, Statusbar *statusbar, Cursor cursor, XftFont *font, Layout *layouts, int nlayouts, Padding *padding)
{
XSetWindowAttributes wa;
int i, phys_screen = get_phys_screen(disp, screen);
ScreenInfo *si = get_screen_info(disp, screen, NULL);
ScreenInfo *si = get_screen_info(disp, screen, NULL, padding);
statusbar->height = font->height * 1.5;
@ -235,7 +235,7 @@ initstatusbar(Display *disp, int screen, Statusbar *statusbar, Cursor cursor, Xf
DefaultVisual(disp, phys_screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
XDefineCursor(disp, statusbar->window, cursor);
updatebarpos(disp, *statusbar);
updatebarpos(disp, *statusbar, padding);
XMapRaised(disp, statusbar->window);
for(i = 0; i < nlayouts; i++)
@ -244,10 +244,10 @@ initstatusbar(Display *disp, int screen, Statusbar *statusbar, Cursor cursor, Xf
}
void
updatebarpos(Display *disp, Statusbar statusbar)
updatebarpos(Display *disp, Statusbar statusbar, Padding *padding)
{
XEvent ev;
ScreenInfo *si = get_screen_info(disp, statusbar.screen, NULL);
ScreenInfo *si = get_screen_info(disp, statusbar.screen, NULL, padding);
XMapRaised(disp, statusbar.window);
switch (statusbar.position)
@ -278,7 +278,7 @@ uicb_togglebar(awesome_config *awesomeconf,
awesomeconf->statusbar.position = (awesomeconf->statusbar.dposition == BarOff) ? BarTop : awesomeconf->statusbar.dposition;
else
awesomeconf->statusbar.position = BarOff;
updatebarpos(awesomeconf->display, awesomeconf->statusbar);
updatebarpos(awesomeconf->display, awesomeconf->statusbar, &awesomeconf->padding);
arrange(awesomeconf);
}

View File

@ -24,9 +24,9 @@
#include "common.h"
void initstatusbar(Display *, int, Statusbar *, Cursor, XftFont *, Layout *, int);
void initstatusbar(Display *, int, Statusbar *, Cursor, XftFont *, Layout *, int, Padding *);
void drawstatusbar(awesome_config *);
void updatebarpos(Display *, Statusbar);
void updatebarpos(Display *, Statusbar, Padding *);
UICB_PROTO(uicb_togglebar);
UICB_PROTO(uicb_setstatustext);