diff --git a/src/event.c b/src/event.c index 28926bd..b3ac6e5 100644 --- a/src/event.c +++ b/src/event.c @@ -244,57 +244,47 @@ clientmessageevent(XClientMessageEvent *ev) * \param ev XEvent pointer */ void -configureevent(XEvent *ev) +configureevent(XConfigureRequestEvent *ev) { XWindowChanges wc; - XWindowAttributes win_at, ev_at; - XRectangle geo = { 0 }; Client *c; /* Check part */ - if((c = client_gb_win(ev->xconfigurerequest.window)) - || (c = client_gb_win(ev->xconfigure.window))) + if((c = client_gb_win(ev->window)) + || (c = client_gb_win(ev->window))) { CHECK(!c->tile); CHECK(!c->lmax); + CHECK(!c->max); CHECK(!c->state_fullscreen); } /* Configure Request Part {{{ */ - wc.x = ev->xconfigurerequest.x; - wc.y = ev->xconfigurerequest.y; - wc.width = ev->xconfigurerequest.width; - wc.height = ev->xconfigurerequest.height; - wc.border_width = ev->xconfigurerequest.border_width; - wc.sibling = ev->xconfigurerequest.above; - wc.stack_mode = ev->xconfigurerequest.detail; - XConfigureWindow(dpy, ev->xconfigurerequest.window, - ev->xconfigurerequest.value_mask, &wc); - /* }}} */ - - /* Configure Notify Part {{{*/ - if((c = client_gb_win(ev->xconfigure.window))) + if((c= client_gb_win(ev->window))) { - XGetWindowAttributes(dpy, ev->xconfigure.window, &win_at); - XGetWindowAttributes(dpy, ev->xconfigure.event, &ev_at); + if(ev->value_mask & CWX) + c->geo.x = ev->x + BORDH; + if(ev->value_mask & CWY) + c->geo.y = ev->y + TBARH; + if(ev->value_mask & CWWidth) + c->geo.width = ev->width; + if(ev->value_mask & CWHeight) + c->geo.height = ev->height; - /* Frame config */ - if(win_at.width != ev_at.width - || win_at.height != ev_at.height) - { - c->ogeo.width = c->geo.width = geo.width = ev->xconfigure.width; - c->ogeo.height = c->geo.height = geo.height = ev->xconfigure.height; - frame_moveresize(c, geo); - client_moveresize(c, c->geo, False); - } - - /* Win config (re-adjust it with the frame) */ - if(ev->xconfigure.x != BORDH - || ev->xconfigure.y != BORDH + TBARH) - XMoveWindow(dpy, ev->xconfigure.window, BORDH, TBARH); + client_moveresize(c, c->geo, False); } - /* }}} */ + else + { + wc.x = ev->x; + wc.y = ev->y; + wc.width = ev->width; + wc.height = ev->height; + wc.border_width = ev->border_width; + wc.sibling = ev->above; + wc.stack_mode = ev->detail; + XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); + } return; } @@ -545,18 +535,18 @@ getevent(XEvent ev) switch(ev.type) { - case ButtonPress: buttonpress(&ev.xbutton); break; - case ClientMessage: clientmessageevent(&ev.xclient); break; - case ConfigureRequest: configureevent(&ev); break; - case DestroyNotify: destroynotify(&ev.xdestroywindow); break; - case EnterNotify: enternotify(&ev.xcrossing); break; - case Expose: expose(&ev.xexpose); break; - case FocusIn: focusin(&ev.xfocus); break; - case KeyPress: keypress(&ev.xkey); break; - case MapRequest: maprequest(&ev.xmaprequest); break; - case MappingNotify: mappingnotify(&ev.xmapping); break; - case PropertyNotify: propertynotify(&ev.xproperty); break; - case UnmapNotify: unmapnotify(&ev.xunmap); break; + case ButtonPress: buttonpress(&ev.xbutton); break; + case ClientMessage: clientmessageevent(&ev.xclient); break; + case ConfigureRequest: configureevent(&ev.xconfigurerequest); break; + case DestroyNotify: destroynotify(&ev.xdestroywindow); break; + case EnterNotify: enternotify(&ev.xcrossing); break; + case Expose: expose(&ev.xexpose); break; + case FocusIn: focusin(&ev.xfocus); break; + case KeyPress: keypress(&ev.xkey); break; + case MapRequest: maprequest(&ev.xmaprequest); break; + case MappingNotify: mappingnotify(&ev.xmapping); break; + case PropertyNotify: propertynotify(&ev.xproperty); break; + case UnmapNotify: unmapnotify(&ev.xunmap); break; } wait(&st); diff --git a/src/ewmh.c b/src/ewmh.c index 8638d4a..4bae38b 100644 --- a/src/ewmh.c +++ b/src/ewmh.c @@ -304,7 +304,6 @@ ewmh_manage_net_wm_state(long data_l[], Client *c) client_map(c); XReparentWindow(dpy, c->win, c->frame, BORDH, TBARH); client_moveresize(c, c->tmp_geo, False); - tags[selscreen][seltag[selscreen]].layout.func(selscreen); } } /* Manage _NET_WM_STATE_DEMANDS_ATTENTION */ @@ -316,6 +315,7 @@ ewmh_manage_net_wm_state(long data_l[], Client *c) if(c == sel) client_focus(NULL); } + return; } diff --git a/src/frame.c b/src/frame.c index 62840b3..79e5d7f 100644 --- a/src/frame.c +++ b/src/frame.c @@ -248,7 +248,7 @@ frame_update(Client *c) XClearWindow(dpy, c->bottom); } - if((TBARH - BORDH) && (TBARH + BORDH + 1) > font->height) + if(TBARH - BORDH) barwin_draw_text(c->titlebar, (c->frame_geo.width / 2) - (textw(c->title) / 2), ((font->height - font->descent) + (TBARH - font->height) / 2), diff --git a/src/init.c b/src/init.c index a0119a7..9faa962 100644 --- a/src/init.c +++ b/src/init.c @@ -51,10 +51,6 @@ init(void) ewmh_update_current_tag_prop(); grabkeys(); - /* Warning about font */ - if(TBARH + BORDH < font->height) - fprintf(stderr, "WMFS Warning: Font too big, can't draw any text in the titlebar.\n"); - return; } diff --git a/src/layout.c b/src/layout.c index 3ab8b0b..5b09a40 100644 --- a/src/layout.c +++ b/src/layout.c @@ -65,7 +65,9 @@ freelayout(int screen) Client *c; for(c = clients; c; c = c->next) - if(!ishide(c, selscreen) && c->screen == screen_get_sel()) + if(!ishide(c, selscreen) + && c->screen == screen_get_sel() + && !c->state_fullscreen) { client_moveresize(c, c->ogeo, True); c->tile = c->lmax = False; diff --git a/src/wmfs.h b/src/wmfs.h index 52c4959..c4c449f 100644 --- a/src/wmfs.h +++ b/src/wmfs.h @@ -188,7 +188,7 @@ void init_conf(void); /* event.c */ void buttonpress(XButtonEvent *ev); -void configureevent(XEvent *ev); +void configureevent(XConfigureRequestEvent *ev); void clientmessageevent(XClientMessageEvent *ev); void destroynotify(XDestroyWindowEvent *ev); void enternotify(XCrossingEvent *ev);