+ mi->xlmft->hack_init (mi);
+
+ return mi;
+}
+
+static unsigned long
+xlockmore_draw (Display *dpy, Window window, void *closure)
+{
+ ModeInfo *mi = (ModeInfo *) closure;
+
+ unsigned long orig_pause = mi->pause;
+ unsigned long this_pause;
+
+ mi->xlmft->hack_draw (mi);
+
+ this_pause = mi->pause;
+ mi->pause = orig_pause;
+ return this_pause;
+}
+
+
+static void
+xlockmore_reshape (Display *dpy, Window window, void *closure,
+ unsigned int w, unsigned int h)
+{
+ ModeInfo *mi = (ModeInfo *) closure;
+ if (mi && mi->xlmft->hack_reshape)
+ {
+ XGetWindowAttributes (dpy, window, &mi->xgwa);
+ mi->xlmft->hack_reshape (mi, mi->xgwa.width, mi->xgwa.height);
+ }
+}
+
+static Bool
+xlockmore_event (Display *dpy, Window window, void *closure, XEvent *event)
+{
+ ModeInfo *mi = (ModeInfo *) closure;
+ if (mi && mi->xlmft->hack_handle_events)
+ return mi->xlmft->hack_handle_events (mi, event);
+ else
+ return False;
+}
+
+void
+xlockmore_do_fps (Display *dpy, Window w, fps_state *fpst, void *closure)
+{
+ ModeInfo *mi = (ModeInfo *) closure;
+ fps_compute (fpst, 0, mi ? mi->recursion_depth : -1);
+ fps_draw (fpst);
+}
+