event: Check if the state_fullscreent is false to do configure notify event

This commit is contained in:
Martin Duquesnoy 2009-02-28 06:00:39 +01:00
parent 3d0b3410c1
commit f9a2c441f3
5 changed files with 30 additions and 12 deletions

View File

@ -509,8 +509,10 @@ client_moveresize(Client *c, XRectangle geo, Bool r)
/* Set the client screen */ /* Set the client screen */
c->screen = screen_get_with_geo(geo.x, geo.y); c->screen = screen_get_with_geo(geo.x, geo.y);
c->tag = seltag[c->screen];
frame_moveresize(c, c->geo); frame_moveresize(c, c->geo);
XMoveResizeWindow(dpy, c->win, BORDH, BORDH + TBARH, c->geo.width, c->geo.height); XMoveResizeWindow(dpy, c->win, BORDH, BORDH + TBARH, c->geo.width, c->geo.height);
client_configure(c); client_configure(c);
@ -537,9 +539,10 @@ client_maximize(Client *c)
geo.x = sgeo[c->screen].x; geo.x = sgeo[c->screen].x;
geo.y = sgeo[c->screen].y; geo.y = sgeo[c->screen].y;
geo.width = sgeo[c->screen].width - BORDH * 2; geo.width = sgeo[c->screen].width - BORDH * 2;
geo.height = sgeo[c->screen].height - BORDH * 2; geo.height = sgeo[c->screen].height - BORDH * 2;
if(c->state_fullscreen) if(c->state_fullscreen)
{ {
geo.y -= INFOBARH; geo.y -= INFOBARH;
@ -562,6 +565,7 @@ client_size_hints(Client *c)
if(!XGetWMNormalHints(dpy, c->win, &size, &msize) || !size.flags) if(!XGetWMNormalHints(dpy, c->win, &size, &msize) || !size.flags)
size.flags = PSize; size.flags = PSize;
/* base */ /* base */
if(size.flags & PBaseSize) if(size.flags & PBaseSize)
{ {
@ -618,6 +622,7 @@ client_size_hints(Client *c)
} }
else else
c->minax = c->maxax = c->minay = c->maxay = 0; c->minax = c->maxax = c->minay = c->maxay = 0;
c->hint = (c->maxw && c->minw && c->maxh && c->minh c->hint = (c->maxw && c->minw && c->maxh && c->minh
&& c->maxw == c->minw && c->maxh == c->minh); && c->maxw == c->minw && c->maxh == c->minh);

View File

@ -227,6 +227,7 @@ configureevent(XEvent *ev)
{ {
CHECK(!c->tile); CHECK(!c->tile);
CHECK(!c->lmax); CHECK(!c->lmax);
CHECK(!c->state_fullscreen);
} }
/* Configure Request Part {{{ */ /* Configure Request Part {{{ */

View File

@ -135,7 +135,7 @@ maxlayout(int screen)
{ {
Client *c; Client *c;
for(c = nexttiled(screen, clients); c; c = nexttiled(screen, c->next)) for(c = tiled_client(screen, clients); c; c = tiled_client(screen, c->next))
{ {
c->tile = False; c->tile = False;
c->lmax = True; c->lmax = True;
@ -151,7 +151,7 @@ maxlayout(int screen)
* \return a client pointer * \return a client pointer
*/ */
Client* Client*
nexttiled(int screen, Client *c) tiled_client(int screen, Client *c)
{ {
for(;c && (c->max for(;c && (c->max
|| c->free || c->free
@ -195,7 +195,7 @@ uicb_set_nmaster(uicb_t cmd)
screen_get_sel(); screen_get_sel();
for(nc = 0, c = nexttiled(selscreen, clients); c; c = nexttiled(selscreen, c->next), ++nc); for(nc = 0, c = tiled_client(selscreen, clients); c; c = tiled_client(selscreen, c->next), ++nc);
if(!nc || tags[selscreen][seltag[selscreen]].nmaster + n == 0 if(!nc || tags[selscreen][seltag[selscreen]].nmaster + n == 0
|| tags[selscreen][seltag[selscreen]].nmaster + n > nc) || tags[selscreen][seltag[selscreen]].nmaster + n > nc)
@ -218,7 +218,7 @@ grid(int screen)
unsigned int i, n, cols, rows, cpcols = 0; unsigned int i, n, cols, rows, cpcols = 0;
unsigned int border = BORDH * 2; unsigned int border = BORDH * 2;
for(n = 0, c = nexttiled(screen, clients); c; c = nexttiled(screen, c->next), ++n); for(n = 0, c = tiled_client(screen, clients); c; c = tiled_client(screen, c->next), ++n);
CHECK(n); CHECK(n);
for(rows = 0; rows <= n / 2; ++rows) for(rows = 0; rows <= n / 2; ++rows)
@ -229,7 +229,7 @@ grid(int screen)
? rows - 1 ? rows - 1
: rows; : rows;
for(i = 0, c = nexttiled(screen, clients); c; c = nexttiled(screen, c->next), ++i) for(i = 0, c =tiled_client(screen, clients); c; c = tiled_client(screen, c->next), ++i)
{ {
/* Set client property */ /* Set client property */
c->max = c->lmax = False; c->max = c->lmax = False;
@ -275,7 +275,7 @@ multi_tile(int screen, Position type)
uint i , n, tilesize, mwfact, nmaster = tags[screen][seltag[screen]].nmaster; uint i , n, tilesize, mwfact, nmaster = tags[screen][seltag[screen]].nmaster;
uint border = BORDH * 2; uint border = BORDH * 2;
for(n = 0, c = nexttiled(screen, clients); c; c = nexttiled(screen, c->next), ++n); for(n = 0, c = tiled_client(screen, clients); c; c = tiled_client(screen, c->next), ++n);
CHECK(n); CHECK(n);
/* FIX NMASTER */ /* FIX NMASTER */
@ -312,7 +312,7 @@ multi_tile(int screen, Position type)
} }
for(i = 0, c = nexttiled(screen, clients); c; c = nexttiled(screen, c->next), ++i) for(i = 0, c = tiled_client(screen, clients); c; c = tiled_client(screen, c->next), ++i)
{ {
/* Set client property */ /* Set client property */
c->max = c->lmax = False; c->max = c->lmax = False;
@ -445,8 +445,8 @@ uicb_tile_switch(uicb_t cmd)
if(!sel || sel->hint || !sel->tile || sel->state_fullscreen) if(!sel || sel->hint || !sel->tile || sel->state_fullscreen)
return; return;
if((c = sel) == nexttiled(selscreen, clients)) if((c = sel) == tiled_client(selscreen, clients))
CHECK((c = nexttiled(selscreen, c->next))); CHECK((c = tiled_client(selscreen, c->next)));
client_detach(c); client_detach(c);
client_attach(c); client_attach(c);
client_focus(c); client_focus(c);
@ -470,10 +470,12 @@ uicb_togglefree(uicb_t cmd)
{ {
sel->tile = sel->max = sel->lmax = False; sel->tile = sel->max = sel->lmax = False;
client_moveresize(sel, sel->ogeo, True); client_moveresize(sel, sel->ogeo, True);
client_raise(sel);
} }
else else
sel->ogeo = sel->geo; sel->ogeo = sel->geo;
tags[selscreen][seltag[selscreen]].layout.func(selscreen); tags[selscreen][seltag[selscreen]].layout.func(selscreen);
return; return;
@ -493,6 +495,7 @@ uicb_togglemax(uicb_t cmd)
{ {
sel->ogeo = sel->geo; sel->ogeo = sel->geo;
sel->tile = False; sel->tile = False;
sel->free = False;
client_maximize(sel); client_maximize(sel);
client_raise(sel); client_raise(sel);
sel->max = True; sel->max = True;

View File

@ -42,6 +42,7 @@ mouse_move(Client *c)
int ocy = c->geo.y; int ocy = c->geo.y;
int mx = c->geo.x; int mx = c->geo.x;
int my = c->geo.y; int my = c->geo.y;
int oscreen = c->screen;
int dint; int dint;
uint duint; uint duint;
Window dw; Window dw;
@ -67,7 +68,15 @@ mouse_move(Client *c)
geo.x = (ocx + (ev.xmotion.x - mx)); geo.x = (ocx + (ev.xmotion.x - mx));
geo.y = (ocy + (ev.xmotion.y - my)); geo.y = (ocy + (ev.xmotion.y - my));
client_moveresize(c, geo, True);
if(c->screen != oscreen)
arrange(c->screen);
if(c->free || tags[c->screen][c->tag].layout.func == freelayout)
client_moveresize(c, geo, True);
else
break;
} }
else if(ev.type == MapRequest else if(ev.type == MapRequest
|| ev.type == Expose || ev.type == Expose

View File

@ -255,7 +255,7 @@ void arrange(int screen);
void freelayout(int screen); void freelayout(int screen);
void layoutswitch(Bool b); void layoutswitch(Bool b);
void maxlayout(int screen); void maxlayout(int screen);
Client *nexttiled(int screen, Client *c); Client *tiled_client(int screen, Client *c);
/* tile {{{ */ /* tile {{{ */
void grid(int screen); void grid(int screen);
void tile(int screen); void tile(int screen);