Here are my patches to add edge + button functionality.

I still feel that there is a problem with gconf, but I have just made it
so that the edge button functionality works.

I have included a patch for gconf to display AnyButton if it is set
to 0.  There is also a patch to make the edge size configurable
because 1 pixel was too small and the mouse keeps slipping off
when using it for the switcher.

Hopefully these are acceptable, please let me know if they aren't.
diff --git a/include/compiz.h b/include/compiz.h
index 6161f99..8e32f2d 100644
--- a/include/compiz.h
+++ b/include/compiz.h
@@ -343,7 +343,8 @@ struct _CompAction {
 
     Bool bell;
 
-    unsigned int edgeMask;
+    unsigned int      edgeMask;
+    int               edgeButton;
 };
 
 typedef struct {
@@ -751,6 +752,8 @@ struct _CompDisplay {
 
     HandleEventProc handleEvent;
 
+    unsigned int mouseOnEdge;
+
     CompPrivate *privates;
 };
 
@@ -1125,7 +1128,8 @@ #define COMP_SCREEN_OPTION_OPACITY_STEP 
 #define COMP_SCREEN_OPTION_UNREDIRECT_FS       6
 #define COMP_SCREEN_OPTION_DEFAULT_ICON        7
 #define COMP_SCREEN_OPTION_SYNC_TO_VBLANK      8
-#define COMP_SCREEN_OPTION_NUM                9
+#define COMP_SCREEN_OPTION_EDGE_SIZE           9
+#define COMP_SCREEN_OPTION_NUM                10
 
 #ifndef GLX_EXT_texture_from_pixmap
 #define GLX_BIND_TO_TEXTURE_RGB_EXT        0x20D0
diff --git a/src/event.c b/src/event.c
index 5c4610d..b36468b 100644
--- a/src/event.c
+++ b/src/event.c
@@ -260,6 +260,7 @@ triggerButtonPressBindings (CompDisplay 
     unsigned int    modMask = REAL_MOD_MASK & ~d->ignoredModMask;
     unsigned int    bindMods;
 
+
     while (nOption--)
     {
        if (isInitiateBinding (option, CompBindingTypeButton, state, &action))
@@ -272,6 +273,15 @@ triggerButtonPressBindings (CompDisplay 
                    if ((*action->initiate) (d, action, state,
                                             argument, nArgument))
                        return TRUE;
+               
+           }
+           else if (option->value.action.edgeMask &&
+                    (option->value.action.edgeMask & d->mouseOnEdge) &&
+                    (event->xbutton.button == option->value.action.edgeButton))
+           {
+                   if ((*action->initiate) (d, action, state,
+                                            argument, nArgument))
+                       return TRUE;
            }
        }
 
@@ -553,6 +563,10 @@ isEdgeEnterAction (CompOption      *opti
     if (!isEdgeAction (option, state, edge))
        return FALSE;
 
+    /* block this edge action because there is an edgeButton */
+    if (option->value.action.edgeButton >= 0)
+       return FALSE;
+
     if (!option->value.action.initiate)
        return FALSE;
 
@@ -802,6 +816,8 @@ handleActionEvent (CompDisplay *d,
                    }
                }
 
+                d->mouseOnEdge = 0;
+
                edgeWindow = None;
 
                o[0].value.i = event->xcrossing.window;
@@ -844,6 +860,8 @@ handleActionEvent (CompDisplay *d,
 
            if (edge)
            {
+                d->mouseOnEdge = edge;
+
                state = CompActionStateInitEdge;
 
                edgeWindow = event->xcrossing.window;
diff --git a/plugins/gconf.c b/plugins/gconf.c
index ea68ce3..175a4ac 100644
--- a/plugins/gconf.c
+++ b/plugins/gconf.c
@@ -209,7 +209,7 @@ gconfSetOption (CompDisplay *d,
        gconf_value_free (gvalue);
        break;
     case CompOptionTypeAction: {
-       gchar      *key1, *key2, *key3, *key4;
+       gchar      *key1, *key2, *key3, *key4, *key5;
        GSList     *node, *list = NULL;
        GConfValue *gv;
        int        i;
@@ -218,6 +218,7 @@ gconfSetOption (CompDisplay *d,
        key2 = g_strdup_printf ("%s_%s", key, "button");
        key3 = g_strdup_printf ("%s_%s", key, "bell");
        key4 = g_strdup_printf ("%s_%s", key, "edge");
+       key5 = g_strdup_printf ("%s_%s", key, "edge_button");
 
        gvalue = gconf_value_new (GCONF_VALUE_STRING);
 
@@ -243,6 +244,8 @@ gconfSetOption (CompDisplay *d,
 
        gconf_value_free (gvalue);
 
+
+
        gvalue = gconf_value_new (GCONF_VALUE_BOOL);
        gconf_value_set_bool (gvalue, o->value.action.bell);
        existingValue = gconf_client_get (gd->client, key3, NULL);
@@ -279,10 +282,21 @@ gconfSetOption (CompDisplay *d,
        g_slist_free (list);
        gconf_value_free (gvalue);
 
+
+       existingValue = gconf_client_get (gd->client, key5, NULL);
+       o->value.action.edgeButton = gconf_value_get_int(existingValue);
+       gvalue = gconf_value_new (GCONF_VALUE_INT);
+       gconf_value_set_int (gvalue, o->value.action.edgeButton);
+       if (!existingValue || gconf_value_compare (existingValue, gvalue))
+           gconf_client_set (gd->client, key5, gvalue, NULL);
+
+       gconf_value_free (gvalue);
+
        g_free (key1);
        g_free (key2);
        g_free (key3);
        g_free (key4);
+       g_free (key5);
     } break;
     case CompOptionTypeList: {
        GConfValueType type;
@@ -455,11 +469,10 @@ gconfGetOptionValue (CompDisplay *d,
     }
 
     optionName = g_strdup (ptr);
-
     o = compFindOption (option, nOption, optionName, 0);
     if (!o)
     {
-       static int tail[] = { 4, 5, 7 };
+       static int tail[] = { 4, 5, 7, 12 };
        int        i = 0;
 
        while (i < sizeof (tail) / sizeof (tail[0]) && strlen (ptr) > tail[i])
@@ -575,6 +588,14 @@ gconfGetOptionValue (CompDisplay *d,
                status = TRUE;
            }
            else if (o->type      == CompOptionTypeAction &&
+                    gvalue->type == GCONF_VALUE_INT)
+           {
+               value = o->value;
+               value.action.edgeButton = gconf_value_get_int (gvalue);
+               value.action.type |= CompBindingTypeButton;
+               status = TRUE;
+           }
+           else if (o->type      == CompOptionTypeAction &&
                     gvalue->type == GCONF_VALUE_LIST)
            {
                if (gconf_value_get_list_type (gvalue) == GCONF_VALUE_STRING)
@@ -677,7 +698,7 @@ gconfInitOption (CompDisplay *d,
 
     if (o->type == CompOptionTypeAction)
     {
-       static gchar *tail[] = { "key", "button", "bell", "edge" };
+       static gchar *tail[] = { "key", "button", "bell", "edge", "edge_button" 
};
        gchar        *key1;
        int          i;
 
diff --git a/plugins/gconf-dump.c b/plugins/gconf-dump.c
index f5c38f4..2601be2 100644
--- a/plugins/gconf-dump.c
+++ b/plugins/gconf-dump.c
@@ -87,6 +87,7 @@ static gchar *actionSufix[] = {
     "button",
     "bell",
     "edge",
+    "edge_button",
     NULL
 };
 
@@ -404,6 +405,11 @@ gconfDumpToSchema (CompDisplay *d,
            gconfPrintf (3, "<type>bool</type>\n");
            value = g_strdup (o->value.action.bell ? "true" : "false");
        }
+       else if (strcmp (name + len - 11, "edge_button") == 0)
+       {
+           gconfPrintf (3, "<type>int</type>\n");
+           value = g_strdup_printf ("%d", o->value.action.edgeButton);
+       }
        else
        {
            char *tmp1, *tmp2 = 0;
diff --git a/src/option.c b/src/option.c
index fe2e179..33c6aad 100644
--- a/src/option.c
+++ b/src/option.c
@@ -196,7 +196,8 @@ compSetActionOption (CompOption      *op
 
     if (value->action.type     == action->type &&
        value->action.bell     == action->bell &&
-       value->action.edgeMask == action->edgeMask)
+       value->action.edgeMask == action->edgeMask &&
+       value->action.edgeButton == action->edgeButton)
     {
        Bool equal = TRUE;
 
@@ -214,6 +215,7 @@ compSetActionOption (CompOption      *op
                equal = FALSE;
        }
 
+
        if (equal)
            return FALSE;
     }
@@ -507,10 +509,21 @@ buttonBindingToString (CompDisplay      
     char *binding;
     char buttonStr[256];
 
+    if (button->button < 1)
+       button->modifiers = 0;
+
     binding = modifiersToString (d, button->modifiers);
 
-    snprintf (buttonStr, 256, "Button%d", button->button);
-    binding = stringAppend (binding, buttonStr);
+    if (button->button == 0)
+    {
+        sprintf (buttonStr, "AnyButton");
+        binding = stringAppend (binding, buttonStr);
+    }
+    else if (button->button > 0)
+    {
+        snprintf (buttonStr, 256, "Button%d", button->button);
+        binding = stringAppend (binding, buttonStr);
+    }
 
     return binding;
 }
@@ -604,6 +617,13 @@ stringToButtonBinding (CompDisplay  *d,
            return TRUE;
        }
     }
+    else if (strcmp (binding, "AnyButton") == 0)
+    {
+       button->button    = 0;
+       button->modifiers = mods;
+
+       return TRUE;
+    }
 
     return FALSE;
 }
diff --git a/plugins/rotate.c b/plugins/rotate.c
index e70ecaa..55ec325 100644
--- a/plugins/rotate.c
+++ b/plugins/rotate.c
@@ -1750,6 +1750,7 @@ rotateDisplayInitOptions (RotateDisplay 
     o->value.action.terminate    = 0;
     o->value.action.bell         = FALSE;
     o->value.action.edgeMask     = 0;
+    o->value.action.edgeButton   = -1;
     o->value.action.state        = CompActionStateInitEdge;
     o->value.action.state       |= CompActionStateInitEdgeDnd;
     o->value.action.state       |= CompActionStateInitKey;
@@ -1769,11 +1770,13 @@ rotateDisplayInitOptions (RotateDisplay 
     o->value.action.terminate    = 0;
     o->value.action.bell         = FALSE;
     o->value.action.edgeMask     = 0;
+    o->value.action.edgeButton   = -1;
     o->value.action.state        = CompActionStateInitEdge;
     o->value.action.state       |= CompActionStateInitEdgeDnd;
     o->value.action.state       |= CompActionStateInitKey;
     o->value.action.state       |= CompActionStateInitButton;
     o->value.action.type         = CompBindingTypeKey;
+    o->value.action.button.button = 0;
     o->value.action.key.modifiers = ROTATE_RIGHT_MODIFIERS_DEFAULT;
     o->value.action.key.keycode   =
        XKeysymToKeycode (display,
@@ -1789,6 +1792,7 @@ rotateDisplayInitOptions (RotateDisplay 
     o->value.action.terminate    = 0;
     o->value.action.bell         = FALSE;
     o->value.action.edgeMask     = 0;
+    o->value.action.edgeButton   = -1;
     o->value.action.state        = CompActionStateInitEdge;
     o->value.action.state       |= CompActionStateInitEdgeDnd;
     o->value.action.state       |= CompActionStateInitKey;
@@ -1809,6 +1813,7 @@ rotateDisplayInitOptions (RotateDisplay 
     o->value.action.terminate    = 0;
     o->value.action.bell         = FALSE;
     o->value.action.edgeMask     = 0;
+    o->value.action.edgeButton   = -1;
     o->value.action.state        = CompActionStateInitEdge;
     o->value.action.state       |= CompActionStateInitEdgeDnd;
     o->value.action.state       |= CompActionStateInitKey;
@@ -1837,6 +1842,7 @@ #define ROTATE_TO_OPTION(n)                               
                 \
     o->value.action.terminate    = 0;                                   \
     o->value.action.bell         = FALSE;                               \
     o->value.action.edgeMask     = 0;                                   \
+    o->value.action.edgeButton   = -1;                                  \
     o->value.action.state        = CompActionStateInitKey;              \
     o->value.action.state       |= CompActionStateInitButton;           \
     o->value.action.type         = CompBindingTypeNone;                 \
@@ -1852,6 +1858,7 @@ #define ROTATE_TO_OPTION(n)                               
                 \
     o->value.action.terminate    = 0;                                   \
     o->value.action.bell         = FALSE;                               \
     o->value.action.edgeMask     = 0;                                   \
+    o->value.action.edgeButton   = -1;                                  \
     o->value.action.state        = CompActionStateInitKey;              \
     o->value.action.state       |= CompActionStateInitButton;           \
     o->value.action.type         = CompBindingTypeNone
@@ -1878,6 +1885,7 @@ #define ROTATE_TO_OPTION(n)                               
                 \
     o->value.action.terminate    = 0;
     o->value.action.bell         = FALSE;
     o->value.action.edgeMask     = 0;
+    o->value.action.edgeButton   = -1;
     o->value.action.state        = 0;
     o->value.action.type         = CompBindingTypeNone;
 
@@ -1890,6 +1898,7 @@ #define ROTATE_TO_OPTION(n)                               
                 \
     o->value.action.terminate    = 0;
     o->value.action.bell         = FALSE;
     o->value.action.edgeMask     = 0;
+    o->value.action.edgeButton   = -1;
     o->value.action.state        = 0;
     o->value.action.type         = CompBindingTypeNone;
 
@@ -1903,6 +1912,7 @@ #define ROTATE_TO_OPTION(n)                               
                 \
     o->value.action.terminate    = rotateFlipTerminate;
     o->value.action.bell         = FALSE;
     o->value.action.edgeMask     = 1 << SCREEN_EDGE_LEFT;
+    o->value.action.edgeButton   = -1;
     o->value.action.state        = CompActionStateInitEdge;
     o->value.action.state       |= CompActionStateInitEdgeDnd;
     o->value.action.state       |= CompActionStateInitKey;
@@ -1919,6 +1929,7 @@ #define ROTATE_TO_OPTION(n)                               
                 \
     o->value.action.terminate    = rotateFlipTerminate;
     o->value.action.bell         = FALSE;
     o->value.action.edgeMask     = 1 << SCREEN_EDGE_RIGHT;
+    o->value.action.edgeButton   = -1;
     o->value.action.state        = CompActionStateInitEdge;
     o->value.action.state       |= CompActionStateInitEdgeDnd;
     o->value.action.state       |= CompActionStateInitKey;
diff --git a/plugins/scale.c b/plugins/scale.c
index 7095c2d..31864be 100644
--- a/plugins/scale.c
+++ b/plugins/scale.c
@@ -1075,11 +1075,14 @@ scaleInitiate (CompDisplay     *d,
                damageScreen (s);
            }
 
-           if (state & CompActionStateInitButton)
-               action->state |= CompActionStateTermButton;
+           if (!(action->edgeMask & d->mouseOnEdge))
+           {
+               if (state & CompActionStateInitButton)
+                   action->state |= CompActionStateTermButton;
 
-           if (state & CompActionStateInitKey)
-               action->state |= CompActionStateTermKey;
+               if (state & CompActionStateInitKey)
+                   action->state |= CompActionStateTermKey;
+           }
        }
     }
 
@@ -1372,9 +1375,11 @@ scaleDisplayInitOptions (ScaleDisplay *s
     o->value.action.terminate    = scaleTerminate;
     o->value.action.bell         = FALSE;
     o->value.action.edgeMask     = (1 << SCREEN_EDGE_TOPRIGHT);
-    o->value.action.state        = CompActionStateInitEdge;
+    o->value.action.edgeButton   = -1;
     o->value.action.type         = CompBindingTypeKey;
+    o->value.action.state        = CompActionStateInitEdge;
     o->value.action.state       |= CompActionStateInitKey;
+    o->value.action.state       |= CompActionStateInitButton;
     o->value.action.key.modifiers = SCALE_INITIATE_MODIFIERS_DEFAULT;
     o->value.action.key.keycode   =
        XKeysymToKeycode (display,
diff --git a/src/screen.c b/src/screen.c
index be98004..5f92f53 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -67,6 +67,10 @@ #define DEFAULT_ICON_DEFAULT "icon.png"
 
 #define SYNC_TO_VBLANK_DEFAULT TRUE
 
+#define SCREEN_EDGE_SIZE_DEFAULT 1
+#define SCREEN_EDGE_SIZE_MIN     1
+#define SCREEN_EDGE_SIZE_MAX     50
+
 #define NUM_OPTIONS(s) (sizeof ((s)->opt) / sizeof (CompOption))
 
 static int
@@ -164,6 +168,59 @@ updateDefaultIcon (CompScreen *screen)
     return TRUE;
 }
 
+static void
+updateScreenEdges (CompScreen *s)
+{
+
+    int edgeSize = 0;
+
+    edgeSize = s->opt[COMP_SCREEN_OPTION_EDGE_SIZE].value.i;
+    if (edgeSize < 0)
+       edgeSize = 1;
+
+    struct screenEdgeGeometry {
+       int xw, x0;
+       int yh, y0;
+       int ww, w0;
+       int hh, h0;
+    } geometry[SCREEN_EDGE_NUM] = {
+       { 0,  0,   0,  edgeSize,
+           0,  edgeSize,   1, (-2*edgeSize) }, /* left */
+
+       { 1, (-1*edgeSize),   0,  edgeSize,
+           0,  edgeSize,   1, (-2*edgeSize)}, /* right */
+
+       { 0,  edgeSize,   0,  0,
+           1, (-2*edgeSize),   0,  edgeSize }, /* top */
+
+       { 0,  edgeSize,   1, (-1*edgeSize),
+           1, (-2*edgeSize),   0,  edgeSize }, /* bottom */
+
+       { 0,  0,   0,  0,
+           0,  edgeSize,   0,  edgeSize }, /* top-left */
+
+       { 1, (-1*edgeSize),   0,  0,
+           0,  edgeSize,   0,  edgeSize }, /* top-right */
+
+       { 0,  0,   1, (-1*edgeSize),
+           0,  edgeSize,   0,  edgeSize }, /* bottom-left */
+
+       { 1, (-1*edgeSize),   1, (-1*edgeSize),
+           0,  edgeSize,   0,  edgeSize } /* bottom-right */
+    };
+    int i;
+
+    for (i = 0; i < SCREEN_EDGE_NUM; i++)
+    {
+       if (s->screenEdge[i].id)
+           XMoveResizeWindow (s->display->display, s->screenEdge[i].id,
+                              geometry[i].xw * s->width  + geometry[i].x0,
+                              geometry[i].yh * s->height + geometry[i].y0,
+                              geometry[i].ww * s->width  + geometry[i].w0,
+                              geometry[i].hh * s->height + geometry[i].h0);
+    }
+}
+
 CompOption *
 compGetScreenOptions (CompScreen *screen,
                      int        *count)
@@ -192,6 +249,13 @@ setScreenOption (CompScreen      *screen
        if (compSetBoolOption (o, value))
            return TRUE;
        break;
+    case COMP_SCREEN_OPTION_EDGE_SIZE:
+        if (compSetIntOption (o, value))
+        {
+            updateScreenEdges (screen);
+            return TRUE;
+        }
+        break;
     case COMP_SCREEN_OPTION_REFRESH_RATE:
        if (screen->opt[COMP_SCREEN_OPTION_DETECT_REFRESH_RATE].value.b)
            return FALSE;
@@ -338,6 +402,15 @@ compScreenInitOptions (CompScreen *scree
                       "blanking period");
     o->type       = CompOptionTypeBool;
     o->value.b    = SYNC_TO_VBLANK_DEFAULT;
+
+    o = &screen->opt[COMP_SCREEN_OPTION_EDGE_SIZE];
+    o->name           = "edge_size";
+    o->shortDesc      = N_("Screen Edge Size");
+    o->longDesc       = N_("Screen Edge Size");
+    o->type           = CompOptionTypeInt;
+    o->value.i        = SCREEN_EDGE_SIZE_DEFAULT;
+    o->rest.i.min     = SCREEN_EDGE_SIZE_MIN;
+    o->rest.i.max     = SCREEN_EDGE_SIZE_MAX;
 }
 
 static void
@@ -461,36 +534,6 @@ compScreenSnEvent (SnMonitorEvent *event
     }
 }
 
-static void
-updateScreenEdges (CompScreen *s)
-{
-    struct screenEdgeGeometry {
-       int xw, x0;
-       int yh, y0;
-       int ww, w0;
-       int hh, h0;
-    } geometry[SCREEN_EDGE_NUM] = {
-       { 0,  0,   0,  1,   0,  1,   1, -2 }, /* left */
-       { 1, -1,   0,  1,   0,  1,   1, -2 }, /* right */
-       { 0,  1,   0,  0,   1, -2,   0,  1 }, /* top */
-       { 0,  1,   1, -1,   1, -2,   0,  1 }, /* bottom */
-       { 0,  0,   0,  0,   0,  1,   0,  1 }, /* top-left */
-       { 1, -1,   0,  0,   0,  1,   0,  1 }, /* top-right */
-       { 0,  0,   1, -1,   0,  1,   0,  1 }, /* bottom-left */
-       { 1, -1,   1, -1,   0,  1,   0,  1 }  /* bottom-right */
-    };
-    int i;
-
-    for (i = 0; i < SCREEN_EDGE_NUM; i++)
-    {
-       if (s->screenEdge[i].id)
-           XMoveResizeWindow (s->display->display, s->screenEdge[i].id,
-                              geometry[i].xw * s->width  + geometry[i].x0,
-                              geometry[i].yh * s->height + geometry[i].y0,
-                              geometry[i].ww * s->width  + geometry[i].w0,
-                              geometry[i].hh * s->height + geometry[i].h0);
-    }
-}
 
 static void
 frustum (GLfloat left,
diff --git a/plugins/switcher.c b/plugins/switcher.c
index 998310f..2d02a9b 100644
--- a/plugins/switcher.c
+++ b/plugins/switcher.c
@@ -931,11 +931,14 @@ switchNext (CompDisplay     *d,
        {
            switchInitiate (s, FALSE);
 
-           if (state & CompActionStateInitKey)
-               action->state |= CompActionStateTermKey;
+           if (!(action->edgeMask & d->mouseOnEdge))
+           {
+               if (state & CompActionStateInitKey)
+                   action->state |= CompActionStateTermKey;
 
-           if (state & CompActionStateInitButton)
-               action->state |= CompActionStateTermButton;
+               if (state & CompActionStateInitButton)
+                   action->state |= CompActionStateTermButton;
+           }
        }
 
        switchToWindow (s, TRUE);
@@ -965,11 +968,14 @@ switchPrev (CompDisplay     *d,
        {
            switchInitiate (s, FALSE);
 
-           if (state & CompActionStateInitKey)
-               action->state |= CompActionStateTermKey;
+           if (!(action->edgeMask & d->mouseOnEdge))
+           {
+               if (state & CompActionStateInitKey)
+                   action->state |= CompActionStateTermKey;
 
-           if (state & CompActionStateInitButton)
-               action->state |= CompActionStateTermButton;
+               if (state & CompActionStateInitButton)
+                   action->state |= CompActionStateTermButton;
+           }
        }
 
        switchToWindow (s, FALSE);
@@ -1871,12 +1877,15 @@ switchDisplayInitOptions (SwitchDisplay 
     o->value.action.initiate     = switchNext;
     o->value.action.terminate    = switchTerminate;
     o->value.action.bell         = FALSE;
-    o->value.action.edgeMask     = 0;
+    o->value.action.edgeMask     = (1 << SCREEN_EDGE_TOP);
+    o->value.action.edgeButton   = 5;
     o->value.action.state        = CompActionStateInitKey;
     o->value.action.state       |= CompActionStateInitButton;
+    o->value.action.state       |= CompActionStateInitEdge;
+    o->value.action.state       |= CompActionStateTermEdge;
     o->value.action.type         = CompBindingTypeKey;
     o->value.action.key.modifiers = SWITCH_NEXT_MODIFIERS_DEFAULT;
-    o->value.action.key.keycode   =
+    o->value.action.key.keycode   = 
        XKeysymToKeycode (display,
                          XStringToKeysym (SWITCH_NEXT_KEY_DEFAULT));
 
@@ -1889,9 +1898,12 @@ switchDisplayInitOptions (SwitchDisplay 
     o->value.action.initiate     = switchPrev;
     o->value.action.terminate    = switchTerminate;
     o->value.action.bell         = FALSE;
-    o->value.action.edgeMask     = 0;
+    o->value.action.edgeMask     = (1 << SCREEN_EDGE_TOP);
+    o->value.action.edgeButton   = 4;
     o->value.action.state        = CompActionStateInitKey;
     o->value.action.state       |= CompActionStateInitButton;
+    o->value.action.state       |= CompActionStateInitEdge;
+    o->value.action.state       |= CompActionStateTermEdge;
     o->value.action.type         = CompBindingTypeKey;
     o->value.action.key.modifiers = SWITCH_PREV_MODIFIERS_DEFAULT;
     o->value.action.key.keycode   =
@@ -1909,6 +1921,7 @@ switchDisplayInitOptions (SwitchDisplay 
     o->value.action.terminate    = switchTerminate;
     o->value.action.bell         = FALSE;
     o->value.action.edgeMask     = 0;
+    o->value.action.edgeButton   = -1;
     o->value.action.state        = CompActionStateInitKey;
     o->value.action.state       |= CompActionStateInitButton;
     o->value.action.type         = CompBindingTypeKey;
@@ -1928,6 +1941,7 @@ switchDisplayInitOptions (SwitchDisplay 
     o->value.action.terminate    = switchTerminate;
     o->value.action.bell         = FALSE;
     o->value.action.edgeMask     = 0;
+    o->value.action.edgeButton   = -1;
     o->value.action.state        = CompActionStateInitKey;
     o->value.action.state       |= CompActionStateInitButton;
     o->value.action.type         = CompBindingTypeKey;
_______________________________________________
compiz mailing list
compiz@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/compiz

Reply via email to