]> Dogcows Code - chaz/openbox/blobdiff - plugins/mouse/mouse.c
s/_t.xbm/_toggled.xbm/
[chaz/openbox] / plugins / mouse / mouse.c
index 4ed7b9dda22a05d93b75fdd7e65bcfbd761e77eb..68c44533a400fd569d3ba7d1f298307a178f547d 100644 (file)
@@ -31,6 +31,8 @@ static void parse_xml(xmlDocPtr doc, xmlNodePtr node, void *d)
     MouseAction mact;
     Action *action;
 
+    node = node->xmlChildrenNode;
+    
     if ((n = parse_find_node("dragThreshold", node)))
         threshold = parse_int(doc, n);
     if ((n = parse_find_node("doubleClickTime", node)))
@@ -102,14 +104,14 @@ void plugin_setup_config()
 }
 
 /* Array of GSList*s of PointerBinding*s. */
-static GSList *bound_contexts[NUM_CONTEXTS];
+static GSList *bound_contexts[OB_FRAME_NUM_CONTEXTS];
 
 static void grab_for_client(ObClient *client, gboolean grab)
 {
     int i;
     GSList *it;
 
-    for (i = 0; i < NUM_CONTEXTS; ++i)
+    for (i = 0; i < OB_FRAME_NUM_CONTEXTS; ++i)
         for (it = bound_contexts[i]; it != NULL; it = it->next) {
             /* grab/ungrab the button */
             MouseBinding *b = it->data;
@@ -117,11 +119,11 @@ static void grab_for_client(ObClient *client, gboolean grab)
             int mode;
             unsigned int mask;
 
-            if (i == Context_Frame) {
+            if (i == OB_FRAME_CONTEXT_FRAME) {
                 win = client->frame->window;
                 mode = GrabModeAsync;
                 mask = ButtonPressMask | ButtonMotionMask | ButtonReleaseMask;
-            } else if (i == Context_Client) {
+            } else if (i == OB_FRAME_CONTEXT_CLIENT) {
                 win = client->frame->plate;
                 mode = GrabModeSync; /* this is handled in event */
                 mask = ButtonPressMask; /* can't catch more than this with Sync
@@ -149,7 +151,7 @@ static void clearall()
     int i;
     GSList *it;
     
-    for(i = 0; i < NUM_CONTEXTS; ++i) {
+    for(i = 0; i < OB_FRAME_NUM_CONTEXTS; ++i) {
         for (it = bound_contexts[i]; it != NULL; it = it->next) {
             int j;
 
@@ -167,7 +169,8 @@ static void clearall()
     }
 }
 
-static void fire_button(MouseAction a, Context context, ObClient *c, guint state,
+static void fire_button(MouseAction a, ObFrameContext context,
+                        ObClient *c, guint state,
                         guint button, int x, int y)
 {
     GSList *it;
@@ -198,7 +201,7 @@ static void fire_button(MouseAction a, Context context, ObClient *c, guint state
     }
 }
 
-static void fire_motion(MouseAction a, Context context, ObClient *c,
+static void fire_motion(MouseAction a, ObFrameContext context, ObClient *c,
                         guint state, guint button, int x_root, int y_root,
                         guint32 corner)
 {
@@ -256,10 +259,11 @@ static void event(ObEvent *e, void *foo)
 {
     static Time ltime;
     static guint button = 0, state = 0, lbutton = 0;
+    static Window lwindow = None;
     static int px, py;
     gboolean click = FALSE;
     gboolean dclick = FALSE;
-    Context context;
+    ObFrameContext context;
     
     switch (e->type) {
     case Event_Client_Mapped:
@@ -284,7 +288,7 @@ static void event(ObEvent *e, void *foo)
                     e->data.x.e->xbutton.button,
                     e->data.x.e->xbutton.x_root, e->data.x.e->xbutton.y_root);
 
-        if (context == Context_Client) {
+        if (context == OB_FRAME_CONTEXT_CLIENT) {
             /* Replay the event, so it goes to the client*/
             XAllowEvents(ob_display, ReplayPointer, event_lasttime);
             /* Fall through to the release case! */
@@ -308,13 +312,18 @@ static void event(ObEvent *e, void *foo)
                 click = TRUE;
                 /* double clicks happen if there were 2 in a row! */
                 if (lbutton == button &&
+                    lwindow == e->data.x.e->xbutton.window &&
                     e->data.x.e->xbutton.time - dclicktime <= ltime) {
                     dclick = TRUE;
                     lbutton = 0;
-                } else
+                } else {
                     lbutton = button;
-            } else
+                    lwindow = e->data.x.e->xbutton.window;
+                }
+            } else {
                 lbutton = 0;
+                lwindow = None;
+            }
 
             button = 0;
             state = 0;
@@ -348,12 +357,12 @@ static void event(ObEvent *e, void *foo)
                                         e->data.x.e->xmotion.window);
 
                 /* You can't drag on buttons */
-                if (context == Context_Maximize ||
-                    context == Context_AllDesktops ||
-                    context == Context_Shade ||
-                    context == Context_Iconify ||
-                    context == Context_Icon ||
-                    context == Context_Close)
+                if (context == OB_FRAME_CONTEXT_MAXIMIZE ||
+                    context == OB_FRAME_CONTEXT_ALLDESKTOPS ||
+                    context == OB_FRAME_CONTEXT_SHADE ||
+                    context == OB_FRAME_CONTEXT_ICONIFY ||
+                    context == OB_FRAME_CONTEXT_ICON ||
+                    context == OB_FRAME_CONTEXT_CLOSE)
                     break;
 
                 if (!e->data.x.client)
@@ -393,7 +402,7 @@ gboolean mbind(char *buttonstr, char *contextstr, MouseAction mact,
                Action *action)
 {
     guint state, button;
-    Context context;
+    ObFrameContext context;
     MouseBinding *b;
     GSList *it;
 
This page took 0.026711 seconds and 4 git commands to generate.