event enternotify etc..
This commit is contained in:
parent
3da9117a8b
commit
861110c5a3
@ -61,6 +61,26 @@ client_unmap(Client *c)
|
|||||||
void
|
void
|
||||||
client_focus(Client *c)
|
client_focus(Client *c)
|
||||||
{
|
{
|
||||||
|
puts("foc");
|
||||||
|
|
||||||
|
/* Unfocus selected */
|
||||||
|
if(c->tag->sel && c->tag->sel != c)
|
||||||
|
{
|
||||||
|
XSetWindowBorder(W->dpy, c->win, 0xf0f0f0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Focus c */
|
||||||
|
if((c->tag->sel = c))
|
||||||
|
{
|
||||||
|
XSetWindowBorder(W->dpy, c->win, 0xffffff);
|
||||||
|
|
||||||
|
XSetInputFocus(W->dpy, c->win, RevertToPointerRoot, CurrentTime);
|
||||||
|
|
||||||
|
XRaiseWindow(W->dpy, c->win);
|
||||||
|
}
|
||||||
|
/* Else, set input focus to root window */
|
||||||
|
else
|
||||||
|
XSetInputFocus(W->dpy, W->root, RevertToPointerRoot, CurrentTime);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,7 +148,6 @@ Client*
|
|||||||
client_new(Window w, XWindowAttributes *wa)
|
client_new(Window w, XWindowAttributes *wa)
|
||||||
{
|
{
|
||||||
Client *c;
|
Client *c;
|
||||||
XSetWindowAttributes at;
|
|
||||||
|
|
||||||
c = xcalloc(1, sizeof(Client));
|
c = xcalloc(1, sizeof(Client));
|
||||||
|
|
||||||
@ -145,17 +164,20 @@ client_new(Window w, XWindowAttributes *wa)
|
|||||||
c->geo.h = wa->height;
|
c->geo.h = wa->height;
|
||||||
|
|
||||||
/* X window attributes */
|
/* X window attributes */
|
||||||
at.event_mask = PropertyChangeMask;
|
XSelectInput(W->dpy, w, EnterWindowMask | FocusChangeMask | PropertyChangeMask | StructureNotifyMask);
|
||||||
XChangeWindowAttributes(W->dpy, c->win, CWEventMask, &at);
|
|
||||||
|
XSetWindowBorder(W->dpy, w, 0xffffff);
|
||||||
|
XSetWindowBorderWidth(W->dpy, w, 1);
|
||||||
|
|
||||||
/* Attach */
|
/* Attach */
|
||||||
SLIST_INSERT_HEAD(&W->h.client, c, next);
|
SLIST_INSERT_HEAD(&W->h.client, c, next);
|
||||||
|
|
||||||
client_map(c);
|
client_map(c);
|
||||||
|
|
||||||
XMoveResizeWindow(W->dpy, c->win, c->geo.x, c->geo.y, c->geo.w, c->geo.h);
|
XMoveResizeWindow(W->dpy, w, c->geo.x, c->geo.y, c->geo.w, c->geo.h);
|
||||||
XRaiseWindow(W->dpy, w);
|
XRaiseWindow(W->dpy, w);
|
||||||
|
|
||||||
|
client_focus(c);
|
||||||
client_configure(c);
|
client_configure(c);
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
@ -167,8 +189,6 @@ client_remove(Client *c)
|
|||||||
XGrabServer(W->dpy);
|
XGrabServer(W->dpy);
|
||||||
XSetErrorHandler(wmfs_error_handler_dummy);
|
XSetErrorHandler(wmfs_error_handler_dummy);
|
||||||
|
|
||||||
XReparentWindow(W->dpy, c->win, W->root, c->geo.x, c->geo.y);
|
|
||||||
|
|
||||||
SLIST_REMOVE(&W->h.client, c, Client, next);
|
SLIST_REMOVE(&W->h.client, c, Client, next);
|
||||||
|
|
||||||
XUngrabServer(W->dpy);
|
XUngrabServer(W->dpy);
|
||||||
|
|||||||
@ -10,12 +10,18 @@
|
|||||||
|
|
||||||
#define EVDPY(e) (e)->xany.display
|
#define EVDPY(e) (e)->xany.display
|
||||||
|
|
||||||
|
static void
|
||||||
|
event_buttonpress(XEvent *e)
|
||||||
|
{
|
||||||
|
XButtonEvent *ev = &e->xbutton;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
event_enternotify(XEvent *e)
|
event_enternotify(XEvent *e)
|
||||||
{
|
{
|
||||||
XCrossingEvent *ev = &e->xcrossing;
|
XCrossingEvent *ev = &e->xcrossing;
|
||||||
Client *c;
|
Client *c;
|
||||||
int n;
|
|
||||||
|
|
||||||
if((ev->mode != NotifyNormal || ev->detail == NotifyInferior)
|
if((ev->mode != NotifyNormal || ev->detail == NotifyInferior)
|
||||||
&& ev->window != W->root)
|
&& ev->window != W->root)
|
||||||
@ -25,6 +31,12 @@ event_enternotify(XEvent *e)
|
|||||||
client_focus(c);
|
client_focus(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
event_clientmessageevent(XEvent *e)
|
||||||
|
{
|
||||||
|
XClientMessageEvent *ev = &e->xclient;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
event_configureevent(XEvent *e)
|
event_configureevent(XEvent *e)
|
||||||
{
|
{
|
||||||
@ -44,6 +56,8 @@ event_configureevent(XEvent *e)
|
|||||||
c->geo.h = ev->height;
|
c->geo.h = ev->height;
|
||||||
|
|
||||||
client_configure(c);
|
client_configure(c);
|
||||||
|
|
||||||
|
XMoveResizeWindow(EVDPY(e), c->win, c->geo.x, c->geo.y, c->geo.w, c->geo.h);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -204,8 +218,8 @@ event_init(void)
|
|||||||
while(i--)
|
while(i--)
|
||||||
event_handle[i] = event_dummy;
|
event_handle[i] = event_dummy;
|
||||||
|
|
||||||
/*event_handle[ButtonPress] = event_buttonpress;*/
|
event_handle[ButtonPress] = event_buttonpress;
|
||||||
/*event_handle[ClientMessage] = event_clientmessageevent;*/
|
event_handle[ClientMessage] = event_clientmessageevent;
|
||||||
event_handle[ConfigureRequest] = event_configureevent;
|
event_handle[ConfigureRequest] = event_configureevent;
|
||||||
event_handle[DestroyNotify] = event_destroynotify;
|
event_handle[DestroyNotify] = event_destroynotify;
|
||||||
event_handle[EnterNotify] = event_enternotify;
|
event_handle[EnterNotify] = event_enternotify;
|
||||||
|
|||||||
@ -18,6 +18,7 @@ screen_new(Geo *g)
|
|||||||
|
|
||||||
SLIST_INSERT_HEAD(&W->h.screen, s, next);
|
SLIST_INSERT_HEAD(&W->h.screen, s, next);
|
||||||
|
|
||||||
|
/* Set as selected screen */
|
||||||
W->screen = s;
|
W->screen = s;
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
@ -26,6 +27,7 @@ screen_new(Geo *g)
|
|||||||
void
|
void
|
||||||
screen_init(void)
|
screen_init(void)
|
||||||
{
|
{
|
||||||
|
Scr33n *s;
|
||||||
Geo g;
|
Geo g;
|
||||||
|
|
||||||
g.x = 0;
|
g.x = 0;
|
||||||
@ -35,7 +37,8 @@ screen_init(void)
|
|||||||
|
|
||||||
SLIST_INIT(&W->h.screen);
|
SLIST_INIT(&W->h.screen);
|
||||||
|
|
||||||
screen_new(&g);
|
s = screen_new(&g);
|
||||||
|
tag_screen(s, tag_new(s, "tag"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@ -203,7 +203,7 @@ wmfs_loop(void)
|
|||||||
|
|
||||||
W->running = true;
|
W->running = true;
|
||||||
|
|
||||||
while(W->running)
|
while(W->running || XPending(W->dpy))
|
||||||
{
|
{
|
||||||
XNextEvent(W->dpy, &ev);
|
XNextEvent(W->dpy, &ev);
|
||||||
HANDLE_EVENT(&ev);
|
HANDLE_EVENT(&ev);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user