Ewmh/Event/Frame: Fix bug with mplayer in fullscreen and FREE layout reported by philpep and remove titlebar limit for title drawing.
This commit is contained in:
parent
7957618a26
commit
fba8e7b25f
84
src/event.c
84
src/event.c
@ -244,57 +244,47 @@ clientmessageevent(XClientMessageEvent *ev)
|
|||||||
* \param ev XEvent pointer
|
* \param ev XEvent pointer
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
configureevent(XEvent *ev)
|
configureevent(XConfigureRequestEvent *ev)
|
||||||
{
|
{
|
||||||
XWindowChanges wc;
|
XWindowChanges wc;
|
||||||
XWindowAttributes win_at, ev_at;
|
|
||||||
XRectangle geo = { 0 };
|
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
/* Check part */
|
/* Check part */
|
||||||
if((c = client_gb_win(ev->xconfigurerequest.window))
|
if((c = client_gb_win(ev->window))
|
||||||
|| (c = client_gb_win(ev->xconfigure.window)))
|
|| (c = client_gb_win(ev->window)))
|
||||||
{
|
{
|
||||||
CHECK(!c->tile);
|
CHECK(!c->tile);
|
||||||
CHECK(!c->lmax);
|
CHECK(!c->lmax);
|
||||||
|
CHECK(!c->max);
|
||||||
CHECK(!c->state_fullscreen);
|
CHECK(!c->state_fullscreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Configure Request Part {{{ */
|
/* Configure Request Part {{{ */
|
||||||
wc.x = ev->xconfigurerequest.x;
|
if((c= client_gb_win(ev->window)))
|
||||||
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)))
|
|
||||||
{
|
{
|
||||||
XGetWindowAttributes(dpy, ev->xconfigure.window, &win_at);
|
if(ev->value_mask & CWX)
|
||||||
XGetWindowAttributes(dpy, ev->xconfigure.event, &ev_at);
|
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 */
|
client_moveresize(c, c->geo, False);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
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;
|
return;
|
||||||
}
|
}
|
||||||
@ -545,18 +535,18 @@ getevent(XEvent ev)
|
|||||||
|
|
||||||
switch(ev.type)
|
switch(ev.type)
|
||||||
{
|
{
|
||||||
case ButtonPress: buttonpress(&ev.xbutton); break;
|
case ButtonPress: buttonpress(&ev.xbutton); break;
|
||||||
case ClientMessage: clientmessageevent(&ev.xclient); break;
|
case ClientMessage: clientmessageevent(&ev.xclient); break;
|
||||||
case ConfigureRequest: configureevent(&ev); break;
|
case ConfigureRequest: configureevent(&ev.xconfigurerequest); break;
|
||||||
case DestroyNotify: destroynotify(&ev.xdestroywindow); break;
|
case DestroyNotify: destroynotify(&ev.xdestroywindow); break;
|
||||||
case EnterNotify: enternotify(&ev.xcrossing); break;
|
case EnterNotify: enternotify(&ev.xcrossing); break;
|
||||||
case Expose: expose(&ev.xexpose); break;
|
case Expose: expose(&ev.xexpose); break;
|
||||||
case FocusIn: focusin(&ev.xfocus); break;
|
case FocusIn: focusin(&ev.xfocus); break;
|
||||||
case KeyPress: keypress(&ev.xkey); break;
|
case KeyPress: keypress(&ev.xkey); break;
|
||||||
case MapRequest: maprequest(&ev.xmaprequest); break;
|
case MapRequest: maprequest(&ev.xmaprequest); break;
|
||||||
case MappingNotify: mappingnotify(&ev.xmapping); break;
|
case MappingNotify: mappingnotify(&ev.xmapping); break;
|
||||||
case PropertyNotify: propertynotify(&ev.xproperty); break;
|
case PropertyNotify: propertynotify(&ev.xproperty); break;
|
||||||
case UnmapNotify: unmapnotify(&ev.xunmap); break;
|
case UnmapNotify: unmapnotify(&ev.xunmap); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
wait(&st);
|
wait(&st);
|
||||||
|
|||||||
@ -304,7 +304,6 @@ ewmh_manage_net_wm_state(long data_l[], Client *c)
|
|||||||
client_map(c);
|
client_map(c);
|
||||||
XReparentWindow(dpy, c->win, c->frame, BORDH, TBARH);
|
XReparentWindow(dpy, c->win, c->frame, BORDH, TBARH);
|
||||||
client_moveresize(c, c->tmp_geo, False);
|
client_moveresize(c, c->tmp_geo, False);
|
||||||
tags[selscreen][seltag[selscreen]].layout.func(selscreen);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Manage _NET_WM_STATE_DEMANDS_ATTENTION */
|
/* Manage _NET_WM_STATE_DEMANDS_ATTENTION */
|
||||||
@ -316,6 +315,7 @@ ewmh_manage_net_wm_state(long data_l[], Client *c)
|
|||||||
if(c == sel)
|
if(c == sel)
|
||||||
client_focus(NULL);
|
client_focus(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -248,7 +248,7 @@ frame_update(Client *c)
|
|||||||
XClearWindow(dpy, c->bottom);
|
XClearWindow(dpy, c->bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
if((TBARH - BORDH) && (TBARH + BORDH + 1) > font->height)
|
if(TBARH - BORDH)
|
||||||
barwin_draw_text(c->titlebar,
|
barwin_draw_text(c->titlebar,
|
||||||
(c->frame_geo.width / 2) - (textw(c->title) / 2),
|
(c->frame_geo.width / 2) - (textw(c->title) / 2),
|
||||||
((font->height - font->descent) + (TBARH - font->height) / 2),
|
((font->height - font->descent) + (TBARH - font->height) / 2),
|
||||||
|
|||||||
@ -51,10 +51,6 @@ init(void)
|
|||||||
ewmh_update_current_tag_prop();
|
ewmh_update_current_tag_prop();
|
||||||
grabkeys();
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -65,7 +65,9 @@ freelayout(int screen)
|
|||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
for(c = clients; c; c = c->next)
|
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);
|
client_moveresize(c, c->ogeo, True);
|
||||||
c->tile = c->lmax = False;
|
c->tile = c->lmax = False;
|
||||||
|
|||||||
@ -188,7 +188,7 @@ void init_conf(void);
|
|||||||
|
|
||||||
/* event.c */
|
/* event.c */
|
||||||
void buttonpress(XButtonEvent *ev);
|
void buttonpress(XButtonEvent *ev);
|
||||||
void configureevent(XEvent *ev);
|
void configureevent(XConfigureRequestEvent *ev);
|
||||||
void clientmessageevent(XClientMessageEvent *ev);
|
void clientmessageevent(XClientMessageEvent *ev);
|
||||||
void destroynotify(XDestroyWindowEvent *ev);
|
void destroynotify(XDestroyWindowEvent *ev);
|
||||||
void enternotify(XCrossingEvent *ev);
|
void enternotify(XCrossingEvent *ev);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user