/*
* ion/ioncore/bindmaps.c
*
- * Copyright (c) Tuomo Valkonen 1999-2006.
+ * Copyright (c) Tuomo Valkonen 1999-2008.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/rb.h>
+#include <libextl/extl.h>
#include "common.h"
#include "conf-bindings.h"
#include "binding.h"
-#include <libextl/extl.h>
#include "framep.h"
#include "bindmaps.h"
+#include "global.h"
+#include "regbind.h"
/*
*/
-WBindmap *ioncore_rootwin_bindmap=NULL;
+WBindmap *ioncore_screen_bindmap=NULL;
WBindmap *ioncore_mplex_bindmap=NULL;
WBindmap *ioncore_mplex_toplevel_bindmap=NULL;
WBindmap *ioncore_frame_bindmap=NULL;
void ioncore_deinit_bindmaps()
{
- DO_FREE(rootwin, "WScreen");
+ DO_FREE(screen, "WScreen");
DO_FREE(mplex, "WMPlex");
DO_FREE(mplex_toplevel, "WMPlex.toplevel");
DO_FREE(frame, "WFrame");
if(known_bindmaps==NULL)
return FALSE;
- DO_ALLOC(rootwin, "WScreen", NULL);
+ DO_ALLOC(screen, "WScreen", NULL);
DO_ALLOC(mplex, "WMPlex", NULL);
DO_ALLOC(mplex_toplevel, "WMPlex.toplevel", NULL);
DO_ALLOC(frame, "WFrame", frame_areas);
return tab;
}
+
+WBindmap *ioncore_create_cycle_bindmap(uint kcb, uint state,
+ ExtlFn cycle, ExtlFn bcycle)
+{
+ WBindmap *bindmap=create_bindmap();
+ WBinding b;
+
+ if(bindmap==NULL)
+ return NULL;
+
+ b.ksb=XKeycodeToKeysym(ioncore_g.dpy, kcb, 0);
+ b.kcb=kcb;
+ b.state=state;
+ b.act=BINDING_KEYPRESS;
+ b.area=0;
+ b.wait=FALSE;
+ b.submap=NULL;
+ b.func=extl_ref_fn(cycle);
+
+ if(!bindmap_add_binding(bindmap, &b)){
+ extl_unref_fn(b.func);
+ bindmap_destroy(bindmap);
+ return NULL;
+ }
+
+ if((b.state&ShiftMask)==0 && bcycle!=extl_fn_none()){
+ b.func=extl_ref_fn(bcycle);
+ b.state|=ShiftMask;
+ bindmap_add_binding(bindmap, &b);
+ }
+
+ return bindmap;
+}
+
+
+WBindmap *region_add_cycle_bindmap(WRegion *reg, uint kcb, uint state,
+ ExtlFn cycle, ExtlFn bcycle)
+{
+ WBindmap *bindmap=ioncore_create_cycle_bindmap(kcb, state, cycle, bcycle);
+
+ if(bindmap!=NULL){
+ if(!region_add_bindmap(reg, bindmap)){
+ bindmap_destroy(bindmap);
+ return NULL;
+ }
+ }
+
+ return bindmap;
+}
+