Remove disp arg to manage(), add comments to manage() and rename setclienttrans to window_settrans

This commit is contained in:
Julien Danjou 2007-10-22 16:25:27 +02:00
parent dfcfa92994
commit f379de70ce
4 changed files with 74 additions and 38 deletions

View File

@ -152,7 +152,7 @@ scan(awesome_config *awesomeconf)
{ {
if(screen == 0) if(screen == 0)
real_screen = get_screen_bycoord(awesomeconf->display, wa.x, wa.y); real_screen = get_screen_bycoord(awesomeconf->display, wa.x, wa.y);
manage(awesomeconf->display, wins[i], &wa, &awesomeconf[real_screen]); manage(wins[i], &wa, &awesomeconf[real_screen]);
} }
} }
/* now the transients */ /* now the transients */
@ -165,7 +165,7 @@ scan(awesome_config *awesomeconf)
{ {
if(screen == 0) if(screen == 0)
real_screen = get_screen_bycoord(awesomeconf->display, wa.x, wa.y); real_screen = get_screen_bycoord(awesomeconf->display, wa.x, wa.y);
manage(awesomeconf->display, wins[i], &wa, &awesomeconf[real_screen]); manage(wins[i], &wa, &awesomeconf[real_screen]);
} }
} }
} }

102
client.c
View File

@ -178,21 +178,21 @@ window_setstate(Display *disp, Window win, long state)
* \param opacity opacity percentage * \param opacity opacity percentage
*/ */
static void static void
setclienttrans(Client *c, double opacity) window_settrans(Display *disp, Window win, double opacity)
{ {
unsigned int real_opacity = 0xffffffff; unsigned int real_opacity = 0xffffffff;
if(opacity >= 0 && opacity <= 100) if(opacity >= 0 && opacity <= 100)
{ {
real_opacity = ((opacity / 100.0) * 0xffffffff); real_opacity = ((opacity / 100.0) * 0xffffffff);
XChangeProperty(c->display, c->win, XChangeProperty(disp, win,
XInternAtom(c->display, "_NET_WM_WINDOW_OPACITY", False), XInternAtom(disp, "_NET_WM_WINDOW_OPACITY", False),
XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &real_opacity, 1L); XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &real_opacity, 1L);
} }
else else
XDeleteProperty(c->display, c->win, XInternAtom(c->display, "_NET_WM_WINDOW_OPACITY", False)); XDeleteProperty(disp, win, XInternAtom(disp, "_NET_WM_WINDOW_OPACITY", False));
XSync(c->display, False); XSync(disp, False);
} }
/** Swap two client in the linked list clients /** Swap two client in the linked list clients
@ -319,7 +319,6 @@ client_detach(Client **head, Client *c)
} }
/** Give focus to client, or to first client if c is NULL /** Give focus to client, or to first client if c is NULL
* \param disp Display ref
* \param c client * \param c client
* \param selscreen True if current screen is selected * \param selscreen True if current screen is selected
* \param awesomeconf awesome config * \param awesomeconf awesome config
@ -336,7 +335,7 @@ focus(Client *c, Bool selscreen, awesome_config *awesomeconf)
{ {
grabbuttons(*awesomeconf->client_sel, False, True, awesomeconf->modkey, awesomeconf->numlockmask); grabbuttons(*awesomeconf->client_sel, False, True, awesomeconf->modkey, awesomeconf->numlockmask);
XSetWindowBorder(awesomeconf->display, (*awesomeconf->client_sel)->win, awesomeconf->colors_normal[ColBorder].pixel); XSetWindowBorder(awesomeconf->display, (*awesomeconf->client_sel)->win, awesomeconf->colors_normal[ColBorder].pixel);
setclienttrans(*awesomeconf->client_sel, awesomeconf->opacity_unfocused); window_settrans(awesomeconf->display, (*awesomeconf->client_sel)->win, awesomeconf->opacity_unfocused);
} }
if(c) if(c)
{ {
@ -358,8 +357,8 @@ focus(Client *c, Bool selscreen, awesome_config *awesomeconf)
XSetInputFocus(awesomeconf->display, (*awesomeconf->client_sel)->win, RevertToPointerRoot, CurrentTime); XSetInputFocus(awesomeconf->display, (*awesomeconf->client_sel)->win, RevertToPointerRoot, CurrentTime);
for(c = *awesomeconf->clients; c; c = c->next) for(c = *awesomeconf->clients; c; c = c->next)
if(c != *awesomeconf->client_sel) if(c != *awesomeconf->client_sel)
setclienttrans(c, awesomeconf->opacity_unfocused); window_settrans(awesomeconf->display, (*awesomeconf->client_sel)->win, awesomeconf->opacity_unfocused);
setclienttrans(*awesomeconf->client_sel, -1); window_settrans(awesomeconf->display, (*awesomeconf->client_sel)->win, -1);
} }
else else
XSetInputFocus(awesomeconf->display, RootWindow(awesomeconf->display, awesomeconf->phys_screen), RevertToPointerRoot, CurrentTime); XSetInputFocus(awesomeconf->display, RootWindow(awesomeconf->display, awesomeconf->phys_screen), RevertToPointerRoot, CurrentTime);
@ -396,78 +395,115 @@ loadprops(Client * c, int ntags)
} }
/** Manage a new client /** Manage a new client
* \param disp Display ref
* \param w The window * \param w The window
* \param wa Window attributes * \param wa Window attributes
* \param awesomeconf awesome config * \param awesomeconf awesome config
*/ */
void void
manage(Display *disp, Window w, XWindowAttributes *wa, awesome_config *awesomeconf) manage(Window w, XWindowAttributes *wa, awesome_config *awesomeconf)
{ {
int i; int i;
Client *c, *t = NULL; Client *c, *t = NULL;
Window trans; Window trans;
Status rettrans; Status rettrans;
XWindowChanges wc; XWindowChanges wc;
ScreenInfo *si = get_display_info(disp, awesomeconf->phys_screen, &awesomeconf->statusbar); ScreenInfo *screen_info = get_screen_info(awesomeconf->display, awesomeconf->screen, NULL);
ScreenInfo *screen_info;
c = p_new(Client, 1); c = p_new(Client, 1);
c->win = w; c->win = w;
c->x = c->rw = wa->x; c->x = c->rw = wa->x;
c->y = c->ry = wa->y; c->y = c->ry = wa->y;
c->w = c->rw = wa->width; c->w = c->rw = wa->width;
c->h = c->rh = wa->height; c->h = c->rh = wa->height;
c->oldborder = wa->border_width; c->oldborder = wa->border_width;
c->display = disp;
c->phys_screen = get_phys_screen(c->display, c->screen); c->display = awesomeconf->display;
c->phys_screen = awesomeconf->phys_screen;
c->tab.isvisible = True; c->tab.isvisible = True;
screen_info = get_screen_info(c->display, c->screen, NULL);
/* if window request fullscreen mode */
if(c->w == screen_info[c->screen].width && c->h == screen_info[c->screen].height) if(c->w == screen_info[c->screen].width && c->h == screen_info[c->screen].height)
{ {
c->x = 0; c->x = 0;
c->y = 0; c->y = 0;
c->border = wa->border_width; c->border = wa->border_width;
} }
else else
{ {
if(c->x + c->w + 2 * c->border > si->x_org + si->width) ScreenInfo *display_info = get_display_info(c->display, c->phys_screen, &awesomeconf->statusbar);
c->x = c->rx = si->x_org + si->width - c->w - 2 * c->border;
if(c->y + c->h + 2 * c->border > si->y_org + si->height) if(c->x + c->w + 2 * c->border > display_info->x_org + display_info->width)
c->y = c->ry = si->y_org + si->height - c->h - 2 * c->border; c->x = c->rx = display_info->x_org + display_info->width - c->w - 2 * c->border;
if(c->x < si->x_org) if(c->y + c->h + 2 * c->border > display_info->y_org + display_info->height)
c->x = c->rx = si->x_org; c->y = c->ry = display_info->y_org + display_info->height - c->h - 2 * c->border;
if(c->y < si->y_org) if(c->x < display_info->x_org)
c->y = c->ry = si->y_org; c->x = c->rx = display_info->x_org;
if(c->y < display_info->y_org)
c->y = c->ry = display_info->y_org;
c->border = awesomeconf->borderpx; c->border = awesomeconf->borderpx;
p_delete(&display_info);
} }
p_delete(&si); p_delete(&screen_info);
/* set borders */
wc.border_width = c->border; wc.border_width = c->border;
XConfigureWindow(disp, w, CWBorderWidth, &wc); XConfigureWindow(c->display, w, CWBorderWidth, &wc);
XSetWindowBorder(disp, w, awesomeconf->colors_normal[ColBorder].pixel); XSetWindowBorder(c->display, w, awesomeconf->colors_normal[ColBorder].pixel);
/* propagates border_width, if size doesn't change */ /* propagates border_width, if size doesn't change */
window_configure(c->display, c->win, c->x, c->y, c->w, c->h, c->border); window_configure(c->display, c->win, c->x, c->y, c->w, c->h, c->border);
/* update sizehint */
updatesizehints(c); updatesizehints(c);
XSelectInput(disp, w, StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
XSelectInput(c->display, w, StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
/* handle xshape */
if(awesomeconf->have_shape) if(awesomeconf->have_shape)
{ {
XShapeSelectInput(disp, w, ShapeNotifyMask); XShapeSelectInput(c->display, w, ShapeNotifyMask);
set_shape(c); set_shape(c);
} }
/* grab buttons */
grabbuttons(c, False, True, awesomeconf->modkey, awesomeconf->numlockmask); grabbuttons(c, False, True, awesomeconf->modkey, awesomeconf->numlockmask);
/* update window title */
updatetitle(c); updatetitle(c);
/* move client to screen: this will set screen and create tags array */
move_client_to_screen(c, awesomeconf, False); move_client_to_screen(c, awesomeconf, False);
if((rettrans = XGetTransientForHint(disp, w, &trans) == Success)
/* check for transient and set tags like its parent */
if((rettrans = XGetTransientForHint(c->display, w, &trans) == Success)
&& (t = get_client_bywin(*awesomeconf->clients, trans))) && (t = get_client_bywin(*awesomeconf->clients, trans)))
for(i = 0; i < awesomeconf->ntags; i++) for(i = 0; i < awesomeconf->ntags; i++)
c->tags[i] = t->tags[i]; c->tags[i] = t->tags[i];
/* loadprops or apply rules if no props */
if(!loadprops(c, awesomeconf->ntags)) if(!loadprops(c, awesomeconf->ntags))
applyrules(c, awesomeconf); applyrules(c, awesomeconf);
/* should be floating if transsient or fixed) */
if(!c->isfloating) if(!c->isfloating)
c->isfloating = (rettrans == Success) || c->isfixed; c->isfloating = (rettrans == Success) || c->isfixed;
/* save new props */
saveprops(c, awesomeconf->ntags); saveprops(c, awesomeconf->ntags);
/* attach to the stack */
client_attach(awesomeconf->clients, c); client_attach(awesomeconf->clients, c);
XMoveResizeWindow(disp, c->win, c->x, c->y, c->w, c->h); /* some windows require this */
/* some windows require this */
XMoveResizeWindow(c->display, c->win, c->x, c->y, c->w, c->h);
/* rearrange to display new window */
arrange(awesomeconf); arrange(awesomeconf);
} }
@ -724,9 +760,9 @@ uicb_settrans(awesome_config *awesomeconf __attribute__ ((unused)),
} }
if(delta == 100.0 && !set_prop) if(delta == 100.0 && !set_prop)
setclienttrans(*awesomeconf->client_sel, -1); window_settrans((*awesomeconf->client_sel)->display, (*awesomeconf->client_sel)->win, -1);
else else
setclienttrans(*awesomeconf->client_sel, delta); window_settrans((*awesomeconf->client_sel)->display, (*awesomeconf->client_sel)->win, delta);
} }

View File

@ -35,7 +35,7 @@ void client_reattach_after(Client *, Client *);
void ban(Client *); /* bans c */ void ban(Client *); /* bans c */
void window_configure(Display *, Window, int, int, int, int, int); void window_configure(Display *, Window, int, int, int, int, int);
void focus(Client *, Bool, awesome_config *); void focus(Client *, Bool, awesome_config *);
void manage(Display *, Window, XWindowAttributes *, awesome_config *); void manage(Window, XWindowAttributes *, awesome_config *);
void resize(Client *, int, int, int, int, awesome_config *, Bool); /* resize with given coordinates c */ void resize(Client *, int, int, int, int, awesome_config *, Bool); /* resize with given coordinates c */
void unban(Client *); /* unbans c */ void unban(Client *); /* unbans c */
void unmanage(Client *, long, awesome_config *); /* unmanage c */ void unmanage(Client *, long, awesome_config *); /* unmanage c */

View File

@ -459,7 +459,7 @@ handle_event_maprequest(XEvent * e, awesome_config *awesomeconf)
screen = get_screen_bycoord(e->xany.display, x, y); screen = get_screen_bycoord(e->xany.display, x, y);
} }
manage(e->xany.display, ev->window, &wa, &awesomeconf[screen]); manage(ev->window, &wa, &awesomeconf[screen]);
} }
} }