]> git.decadent.org.uk Git - ion3.git/blobdiff - mod_menu/grabmenu.c
[svn-upgrade] Integrating new upstream version, ion3 (20070203)
[ion3.git] / mod_menu / grabmenu.c
index cc94437677fb0c57cc915d444c236162b9feb5f8..79a01ce4b47ea926ebd37e6d66bfc1d81fdf5c0d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * ion/mod_menu/grabmenu.c
  *
- * Copyright (c) Tuomo Valkonen 1999-2006
+ * Copyright (c) Tuomo Valkonen 1999-2007
  *
  * 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
@@ -37,8 +37,10 @@ static bool grabmenu_handler(WRegion *reg, XEvent *xev)
     if(reg==NULL)
         return FALSE;
     
-    if(menu->gm_state==ev->state && ev->keycode==menu->gm_kcb)
+    if((menu->gm_state==ev->state || menu->gm_state==AnyModifier) 
+       && ev->keycode==menu->gm_kcb){
         menu_select_next(menu);
+    }
     
     return FALSE;
 }
@@ -53,12 +55,17 @@ WMenu *mod_menu_do_grabmenu(WMPlex *mplex, ExtlFn handler, ExtlTab tab,
     WMPlexAttachParams par;
     WMenu *menu;
     XKeyEvent *ev;
+    uint state, kcb;
+    bool sub;
     
-    ev=ioncore_current_key_event();
-    
-    if(ev==NULL)
+    if(!ioncore_current_key(&kcb, &state, &sub))
         return NULL;
     
+    if(state==0){
+        /* TODO: cycle key? */
+        return mod_menu_do_menu(mplex, handler, tab, param);
+    }
+    
     fnp.handler=handler;
     fnp.tab=tab;
     fnp.pmenu_mode=FALSE;
@@ -77,10 +84,10 @@ WMenu *mod_menu_do_grabmenu(WMPlex *mplex, ExtlFn handler, ExtlTab tab,
                                      (void*)&fnp); 
     
     if(menu==NULL)
-        return FALSE;
+        return NULL;
  
-    menu->gm_kcb=ev->keycode;
-    menu->gm_state=ev->state;
+    menu->gm_kcb=kcb;
+    menu->gm_state=state;
     
     ioncore_grab_establish((WRegion*)menu, grabmenu_handler, NULL, 0);