-#include <X11/Xlib.h>
-#include <stdlib.h>
-#include <stdint.h>
+#include "anvil.h"
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-
-struct {
- Display* disp;
- Window root;
- void (*eventfns[LASTEvent])(XEvent*);
-} X;
-XWindowAttributes attr;
-XButtonEvent start;
+XConf X;
static void check(intptr_t stat)
{
}
}
-void xkeypress(XEvent* ev)
+static void xbtnpress(XEvent* e)
{
- if (ev->xbutton.subwindow != None)
- {
- XRaiseWindow(X.disp, ev->xkey.subwindow);
- }
+ (void)e;
}
-void xbtnpress(XEvent* ev)
+static void xbtnrelease(XEvent* e)
{
- if (ev->xbutton.subwindow != None)
- {
- XGrabPointer(X.disp, ev->xbutton.subwindow, True,
- PointerMotionMask|ButtonReleaseMask, GrabModeAsync,
- GrabModeAsync, None, None, CurrentTime);
- XGetWindowAttributes(X.disp, ev->xbutton.subwindow, &attr);
- start = ev->xbutton;
- }
+ (void)e;
+}
+
+static void xconfigrequest(XEvent* e)
+{
+ (void)e;
+}
+
+static void xmaprequest(XEvent* e)
+{
+ (void)e;
+}
+
+static void xunmapnotify(XEvent* e)
+{
+ (void)e;
}
-void xbtnrelease(XEvent* ev)
+static void xdestroynotify(XEvent* e)
{
- XUngrabPointer(X.disp, CurrentTime);
+ (void)e;
}
-void xmotionnotify(XEvent* ev)
+static void xclientmsg(XEvent* e)
{
- int xdiff, ydiff;
- while (XCheckTypedEvent(X.disp, MotionNotify, ev));
- xdiff = ev->xbutton.x_root - start.x_root;
- ydiff = ev->xbutton.y_root - start.y_root;
- XMoveResizeWindow(X.disp, ev->xmotion.window,
- attr.x + (start.button==1 ? xdiff : 0),
- attr.y + (start.button==1 ? ydiff : 0),
- MAX(1, attr.width + (start.button==3 ? xdiff : 0)),
- MAX(1, attr.height + (start.button==3 ? ydiff : 0)));
+ (void)e;
}
-int main(int argc, char** argv)
+static void xpropnotify(XEvent* e)
{
- XWindowAttributes attr;
- XButtonEvent start;
- XEvent ev;
+ (void)e;
+}
+
+static void xenternotify(XEvent* e)
+{
+ (void)e;
+}
+
+static void xexpose(XEvent* e)
+{
+ (void)e;
+}
+static void xkeypress(XEvent* e)
+{
+ (void)e;
+}
+
+int main(void)
+{
/* Initialize X server*/
check( !(X.disp = XOpenDisplay(0)) );
X.root = DefaultRootWindow(X.disp);
- XGrabKey(X.disp, XKeysymToKeycode(X.disp, XStringToKeysym("F1")), Mod1Mask, X.root,
- True, GrabModeAsync, GrabModeAsync);
- XGrabButton(X.disp, 1, Mod1Mask, X.root, True, ButtonPressMask, GrabModeAsync,
- GrabModeAsync, None, None);
- XGrabButton(X.disp, 3, Mod1Mask, X.root, True, ButtonPressMask, GrabModeAsync,
- GrabModeAsync, None, None);
- X.eventfns[KeyPress] = xkeypress;
+
+ /* setup event handlers */
X.eventfns[ButtonPress] = xbtnpress;
X.eventfns[ButtonRelease] = xbtnrelease;
- X.eventfns[MotionNotify] = xmotionnotify;
+ X.eventfns[KeyPress] = xkeypress;
+ X.eventfns[ConfigureRequest] = xconfigrequest;
+ X.eventfns[MapRequest] = xmaprequest;
+ X.eventfns[UnmapNotify] = xunmapnotify;
+ X.eventfns[DestroyNotify] = xdestroynotify;
+ X.eventfns[ClientMessage] = xclientmsg;
+ X.eventfns[PropertyNotify] = xpropnotify;
+ X.eventfns[EnterNotify] = xenternotify;
+ X.eventfns[Expose] = xexpose;
+ /* main event loop */
for (;;)
{
+ XEvent ev;
XNextEvent(X.disp, &ev);
if (X.eventfns[ev.type])
{
+++ /dev/null
-#include <X11/Xlib.h>
-#include <stdlib.h>
-#include <stdint.h>
-
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-
-struct {
- Display* disp;
- Window root;
- void (*eventfns[LASTEvent])(XEvent*);
-} X;
-XWindowAttributes attr;
-XButtonEvent start;
-
-static void check(intptr_t stat)
-{
- if (!stat)
- {
- exit(1);
- }
-}
-
-void xkeypress(XEvent* ev)
-{
- if (ev->xbutton.subwindow != None)
- {
- XRaiseWindow(X.disp, ev->xkey.subwindow);
- }
-}
-
-void xbtnpress(XEvent* ev)
-{
- if (ev->xbutton.subwindow != None)
- {
- XGrabPointer(X.disp, ev->xbutton.subwindow, True,
- PointerMotionMask|ButtonReleaseMask, GrabModeAsync,
- GrabModeAsync, None, None, CurrentTime);
- XGetWindowAttributes(X.disp, ev->xbutton.subwindow, &attr);
- start = ev->xbutton;
- }
-}
-
-void xbtnrelease(XEvent* ev)
-{
- XUngrabPointer(X.disp, CurrentTime);
-}
-
-void xmotionnotify(XEvent* ev)
-{
- int xdiff, ydiff;
- while (XCheckTypedEvent(X.disp, MotionNotify, ev));
- xdiff = ev->xbutton.x_root - start.x_root;
- ydiff = ev->xbutton.y_root - start.y_root;
- XMoveResizeWindow(X.disp, ev->xmotion.window,
- attr.x + (start.button==1 ? xdiff : 0),
- attr.y + (start.button==1 ? ydiff : 0),
- MAX(1, attr.width + (start.button==3 ? xdiff : 0)),
- MAX(1, attr.height + (start.button==3 ? ydiff : 0)));
-}
-
-int main(int argc, char** argv)
-{
- XWindowAttributes attr;
- XButtonEvent start;
- XEvent ev;
-
- /* Initialize X server*/
- check( !(X.disp = XOpenDisplay(0)) );
- X.root = DefaultRootWindow(X.disp);
- XGrabKey(X.disp, XKeysymToKeycode(X.disp, XStringToKeysym("F1")), Mod1Mask, X.root,
- True, GrabModeAsync, GrabModeAsync);
- XGrabButton(X.disp, 1, Mod1Mask, X.root, True, ButtonPressMask, GrabModeAsync,
- GrabModeAsync, None, None);
- XGrabButton(X.disp, 3, Mod1Mask, X.root, True, ButtonPressMask, GrabModeAsync,
- GrabModeAsync, None, None);
- X.eventfns[KeyPress] = xkeypress;
- X.eventfns[ButtonPress] = xbtnpress;
- X.eventfns[ButtonRelease] = xbtnrelease;
- X.eventfns[MotionNotify] = xmotionnotify;
-
- for (;;)
- {
- XNextEvent(X.disp, &ev);
- if (X.eventfns[ev.type])
- {
- X.eventfns[ev.type](&ev);
- }
- }
-}
\ No newline at end of file