Turn the Foo/ToggleFoo/UnFoo actions into a single Foo action with option "set" which...
authorDana Jansens <danakj@orodu.net>
Mon, 8 Aug 2011 14:51:45 +0000 (10:51 -0400)
committerDana Jansens <danakj@orodu.net>
Sun, 16 Oct 2011 22:56:02 +0000 (18:56 -0400)
openbox/actions/cyclewindows.c
openbox/actions/decorations.c
openbox/actions/directionalwindows.c
openbox/actions/fullscreen.c
openbox/actions/maximize.c
openbox/actions/omnipresent.c
openbox/actions/shade.c
openbox/config.c

index c2d39c92b84fd67f37da6ca4fa84be5aaf1a62c1..a56022c3626c4e112cca288dc880a4d376821740 100644 (file)
@@ -109,9 +109,9 @@ static gpointer setup_func(GHashTable *config,
     else {
         ObActionParser *p = action_parser_new();
         o->actions = action_parser_read_string(p,
-                                                "focus\n"
-                                                "raise\n"
-                                                "unshade\n");
+                                               "focus\n"
+                                               "raise\n"
+                                               "shade set:off\n");
         action_parser_unref(p);
     }
 
index 037b9d57e57a67154f8049c3562cdc1ed8d75754..ec833368a12461758f93148d4224741e1249daa4 100644 (file)
@@ -1,74 +1,68 @@
 #include "openbox/action.h"
 #include "openbox/action_list_run.h"
+#include "openbox/config_value.h"
 #include "openbox/client.h"
 #include "openbox/client_set.h"
 
-static gboolean run_func_on(const ObClientSet *set,
-                            const ObActionListRun *data, gpointer options);
-static gboolean run_func_off(const ObClientSet *set,
-                             const ObActionListRun *data, gpointer options);
-static gboolean run_func_toggle(const ObClientSet *set,
-                                const ObActionListRun *data, gpointer options);
+typedef struct {
+    gboolean toggle;
+    gboolean set;
+} Options;
+
+static gpointer setup_func(GHashTable *config);
+static void free_func(gpointer o);
+static gboolean run_func(const ObClientSet *set,
+                         const ObActionListRun *data, gpointer options);
 
 void action_decorations_startup(void)
 {
     action_register("Decorate", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    NULL, NULL, run_func_on);
-    action_register("Undecorate", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    NULL, NULL, run_func_off);
-    action_register("ToggleDecorations", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    NULL, NULL, run_func_toggle);
+                    setup_func, free_func, run_func);
 }
 
-static gboolean each_on(ObClient *c, const ObActionListRun *data, gpointer o)
+static gpointer setup_func(GHashTable *config)
 {
-    client_set_undecorated(data->target, FALSE);
-    return TRUE;
-}
+    ObConfigValue *v;
+    Options *o;
 
-/* Always return FALSE because its not interactive */
-static gboolean run_func_on(const ObClientSet *set,
-                            const ObActionListRun *data, gpointer options)
-{
-    if (!client_set_is_empty(set)) {
-        action_client_move(data, TRUE);
-        client_set_run(set, data, each_on, options);
-        action_client_move(data, FALSE);
+    o = g_slice_new0(Options);
+    o->toggle = TRUE;
+    o->set = FALSE;
+
+    v = g_hash_table_lookup(config, "set");
+    if (v && config_value_is_string(v)) {
+        const gchar *s = config_value_string(v);
+        if (!g_ascii_strcasecmp(s, "on"))
+            o->toggle = FALSE;
+        else if (!g_ascii_strcasecmp(s, "off")) {
+            o->toggle = FALSE;
+            o->set = TRUE;
+        }
     }
-    return FALSE;
-}
 
-static gboolean each_off(ObClient *c, const ObActionListRun *data, gpointer o)
-{
-    client_set_undecorated(data->target, TRUE);
-    return TRUE;
+    return o;
 }
 
-/* Always return FALSE because its not interactive */
-static gboolean run_func_off(const ObClientSet *set,
-                             const ObActionListRun *data, gpointer options)
+static void free_func(gpointer o)
 {
-    if (!client_set_is_empty(set)) {
-        action_client_move(data, TRUE);
-        client_set_run(set, data, each_off, options);
-        action_client_move(data, FALSE);
-    }
-    return FALSE;
+    g_slice_free(Options, o);
 }
 
-static gboolean each_flip(ObClient *c, const ObActionListRun *data, gpointer o)
+static gboolean each_run(ObClient *c, const ObActionListRun *data,
+                         gpointer options)
 {
-    client_set_undecorated(data->target, !c->undecorated);
+    Options *o = options;
+    client_set_undecorated(data->target, o->toggle ? !c->undecorated : o->set);
     return TRUE;
 }
 
 /* Always return FALSE because its not interactive */
-static gboolean run_func_toggle(const ObClientSet *set,
-                                const ObActionListRun *data, gpointer options)
+static gboolean run_func(const ObClientSet *set,
+                         const ObActionListRun *data, gpointer options)
 {
     if (!client_set_is_empty(set)) {
         action_client_move(data, TRUE);
-        client_set_run(set, data, each_flip, options);
+        client_set_run(set, data, each_run, options);
         action_client_move(data, FALSE);
     }
     return FALSE;
index fcd3d109a7a204d383dedbdfed198467d5c1e013..bdbe004d420a9665020708cbf4f8f1c0809fe822 100644 (file)
@@ -112,7 +112,7 @@ static gpointer setup_func(GHashTable *config)
         o->actions = action_parser_read_string(p,
                                                 "focus\n"
                                                 "raise\n"
-                                                "unshade\n");
+                                                "shade set:off\n");
         action_parser_unref(p);
     }
 
index 1abc3cbbfa2304f30a1b5bba38c8e05fb83a9194..14280ec297d947d6236a86d6048de9690c26a529 100644 (file)
@@ -1,74 +1,66 @@
 #include "openbox/action.h"
 #include "openbox/action_list_run.h"
+#include "openbox/config_value.h"
 #include "openbox/client.h"
 #include "openbox/client_set.h"
 
-static gboolean run_func_on(const ObClientSet *set,
-                            const ObActionListRun *data, gpointer options);
-static gboolean run_func_off(const ObClientSet *set,
-                             const ObActionListRun *data, gpointer options);
-static gboolean run_func_toggle(const ObClientSet *set,
-                                const ObActionListRun *data, gpointer options);
+typedef struct {
+    gboolean toggle;
+    gboolean set;
+} Options;
+
+static gpointer setup_func(GHashTable *config);
+static void free_func(gpointer o);
+static gboolean run_func(const ObClientSet *set,
+                         const ObActionListRun *data, gpointer options);
 
 void action_fullscreen_startup(void)
 {
     action_register("Fullscreen", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    NULL, NULL, run_func_on);
-    action_register("Unfullscreen", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    NULL, NULL, run_func_off);
-    action_register("ToggleFullscreen", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    NULL, NULL, run_func_toggle);
+                    setup_func, free_func, run_func);
 }
 
-static gboolean each_on(ObClient *c, const ObActionListRun *data,
-                         gpointer options)
+static gpointer setup_func(GHashTable *config)
 {
-    client_fullscreen(c, TRUE);
-    return TRUE;
-}
+    ObConfigValue *v;
+    Options *o;
 
-/* Always return FALSE because its not interactive */
-static gboolean run_func_on(const ObClientSet *set,
-                            const ObActionListRun *data, gpointer options)
-{
-    action_client_move(data, TRUE);
-    client_set_run(set, data, each_on, options);
-    action_client_move(data, FALSE);
-    return FALSE;
-}
+    o = g_slice_new0(Options);
+    o->toggle = TRUE;
+    o->set = TRUE;
 
-static gboolean each_off(ObClient *c, const ObActionListRun *data,
-                         gpointer options)
-{
-    client_fullscreen(c, FALSE);
-    return TRUE;
+    v = g_hash_table_lookup(config, "set");
+    if (v && config_value_is_string(v)) {
+        const gchar *s = config_value_string(v);
+        if (!g_ascii_strcasecmp(s, "on"))
+            o->toggle = FALSE;
+        else if (!g_ascii_strcasecmp(s, "off")) {
+            o->toggle = FALSE;
+            o->set = FALSE;
+        }
+    }
+    return o;
 }
 
-/* Always return FALSE because its not interactive */
-static gboolean run_func_off(const ObClientSet *set,
-                             const ObActionListRun *data, gpointer options)
+static void free_func(gpointer o)
 {
-    action_client_move(data, TRUE);
-    client_set_run(set, data, each_off, options);
-    action_client_move(data, FALSE);
-    return FALSE;
+    g_slice_free(Options, o);
 }
 
-static gboolean each_toggle(ObClient *c, const ObActionListRun *data,
+static gboolean each_run(ObClient *c, const ObActionListRun *data,
                          gpointer options)
 {
-    client_fullscreen(c, !c->fullscreen);
+    Options *o = options;
+    client_fullscreen(c, o->toggle ? !c->fullscreen : o->set);
     return TRUE;
 }
 
 /* Always return FALSE because its not interactive */
-static gboolean run_func_toggle(const ObClientSet *set,
-                                const ObActionListRun *data, gpointer options)
+static gboolean run_func(const ObClientSet *set,
+                         const ObActionListRun *data, gpointer options)
 {
-    if (!client_set_is_empty(set)) {
-        action_client_move(data, TRUE);
-        client_set_run(set, data, each_toggle, options);
-        action_client_move(data, FALSE);
-    }
+    action_client_move(data, TRUE);
+    client_set_run(set, data, each_run, options);
+    action_client_move(data, FALSE);
     return FALSE;
 }
index 6d594ee1148dee8cddc20ea9421a00446e9867d3..f720e3a69f6d1ce7f52b5662f3bf3de1baa9d237 100644 (file)
@@ -13,25 +13,19 @@ typedef enum {
 
 typedef struct {
     MaxDirection dir;
+    gboolean toggle;
+    gboolean set;
 } Options;
 
 static gpointer setup_func(GHashTable *config);
 static void free_func(gpointer o);
-static gboolean run_func_on(const ObClientSet *set,
-                            const ObActionListRun *data, gpointer options);
-static gboolean run_func_off(const ObClientSet *set,
-                             const ObActionListRun *data, gpointer options);
-static gboolean run_func_toggle(const ObClientSet *set,
-                                const ObActionListRun *data, gpointer options);
+static gboolean run_func(const ObClientSet *set,
+                         const ObActionListRun *data, gpointer options);
 
 void action_maximize_startup(void)
 {
     action_register("Maximize", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    setup_func, free_func, run_func_on);
-    action_register("Unmaximize", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    setup_func, free_func, run_func_off);
-    action_register("ToggleMaximize", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    setup_func, free_func, run_func_toggle);
+                    setup_func, free_func, run_func);
 }
 
 static gpointer setup_func(GHashTable *config)
@@ -41,6 +35,8 @@ static gpointer setup_func(GHashTable *config)
 
     o = g_slice_new0(Options);
     o->dir = BOTH;
+    o->toggle = TRUE;
+    o->set = TRUE;
 
     v = g_hash_table_lookup(config, "dir");
     if (v && config_value_is_string(v)) {
@@ -52,6 +48,16 @@ static gpointer setup_func(GHashTable *config)
                  !g_ascii_strcasecmp(s, "horz"))
             o->dir = HORZ;
     }
+    v = g_hash_table_lookup(config, "set");
+    if (v && config_value_is_string(v)) {
+        const gchar *s = config_value_string(v);
+        if (!g_ascii_strcasecmp(s, "on"))
+            o->toggle = FALSE;
+        else if (!g_ascii_strcasecmp(s, "off")) {
+            o->toggle = FALSE;
+            o->set = FALSE;
+        }
+    }
 
     return o;
 }
@@ -61,74 +67,25 @@ static void free_func(gpointer o)
     g_slice_free(Options, o);
 }
 
-static gboolean each_on(ObClient *c, const ObActionListRun *data,
+static gboolean each_run(ObClient *c, const ObActionListRun *data,
                         gpointer options)
-{
-    Options *o = options;
-    if (data->target) {
-        action_client_move(data, TRUE);
-        client_maximize(data->target, TRUE, o->dir);
-        action_client_move(data, FALSE);
-    }
-    return TRUE;
-}
-
-/* Always return FALSE because its not interactive */
-static gboolean run_func_on(const ObClientSet *set,
-                            const ObActionListRun *data, gpointer options)
-{
-    if (!client_set_is_empty(set)) {
-        action_client_move(data, TRUE);
-        client_set_run(set, data, each_on, options);
-        action_client_move(data, FALSE);
-    }
-    return FALSE;
-}
-
-static gboolean each_off(ObClient *c, const ObActionListRun *data,
-                         gpointer options)
-{
-    Options *o = options;
-    if (data->target) {
-        action_client_move(data, TRUE);
-        client_maximize(data->target, FALSE, o->dir);
-        action_client_move(data, FALSE);
-    }
-    return TRUE;
-}
-
-/* Always return FALSE because its not interactive */
-static gboolean run_func_off(const ObClientSet *set,
-                             const ObActionListRun *data, gpointer options)
-{
-    if (!client_set_is_empty(set)) {
-        action_client_move(data, TRUE);
-        client_set_run(set, data, each_off, options);
-        action_client_move(data, FALSE);
-    }
-    return FALSE;
-}
-
-static gboolean each_toggle(ObClient *c, const ObActionListRun *data,
-                            gpointer options)
 {
     Options *o = options;
     gboolean toggle;
-    toggle = ((o->dir == HORZ && !data->target->max_horz) ||
-              (o->dir == VERT && !data->target->max_vert) ||
-              (o->dir == BOTH &&
-               !(data->target->max_horz && data->target->max_vert)));
-    client_maximize(data->target, toggle, o->dir);
+    toggle = ((o->dir == HORZ && !c->max_horz) ||
+              (o->dir == VERT && !c->max_vert) ||
+              (o->dir == BOTH && !(c->max_horz && c->max_vert)));
+    client_maximize(data->target, (o->toggle ? toggle : o->set), o->dir);
     return TRUE;
 }
 
 /* Always return FALSE because its not interactive */
-static gboolean run_func_toggle(const ObClientSet *set,
-                                const ObActionListRun *data, gpointer options)
+static gboolean run_func(const ObClientSet *set,
+                         const ObActionListRun *data, gpointer options)
 {
     if (!client_set_is_empty(set)) {
         action_client_move(data, TRUE);
-        client_set_run(set, data, each_toggle, options);
+        client_set_run(set, data, each_run, options);
         action_client_move(data, FALSE);
     }
     return FALSE;
index 1bc304f60084ddf12c5280c2d88e7c25e363e9b7..84d11a79c0b401334c04cfbcc84a51285dc0a0a1 100644 (file)
@@ -1,79 +1,73 @@
 #include "openbox/action.h"
 #include "openbox/action_list_run.h"
+#include "openbox/config_value.h"
 #include "openbox/client.h"
 #include "openbox/client_set.h"
 #include "openbox/screen.h"
 
-static gboolean run_func_on(const ObClientSet *set,
-                            const ObActionListRun *data, gpointer options);
-static gboolean run_func_off(const ObClientSet *set,
-                             const ObActionListRun *data, gpointer options);
-static gboolean run_func_toggle(const ObClientSet *set,
-                                const ObActionListRun *data, gpointer options);
+typedef struct {
+    gboolean toggle;
+    gboolean set;
+} Options;
+
+static gpointer setup_func(GHashTable *config);
+static void free_func(gpointer o);
+static gboolean run_func(const ObClientSet *set,
+                         const ObActionListRun *data, gpointer options);
 
 void action_omnipresent_startup(void)
 {
     action_register("Omnipresent", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    NULL, NULL, run_func_on);
-    action_register("Unomnipresent", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    NULL, NULL, run_func_off);
-    action_register("ToggleOmnipresent", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    NULL, NULL, run_func_toggle);
+                    setup_func, free_func, run_func);
 }
 
-static gboolean each_off(ObClient *c, const ObActionListRun *data,
-                         gpointer options)
+static gpointer setup_func(GHashTable *config)
 {
-    client_set_desktop(c, FALSE, FALSE, TRUE);
-    return TRUE;
-}
+    ObConfigValue *v;
+    Options *o;
 
-/* Always return FALSE because its not interactive */
-static gboolean run_func_off(const ObClientSet *set,
-                             const ObActionListRun *data, gpointer options)
-{
-    if (!client_set_is_empty(set)) {
-        action_client_move(data, TRUE);
-        client_set_run(set, data, each_off, options);
-        action_client_move(data, FALSE);
+    o = g_slice_new0(Options);
+    o->toggle = TRUE;
+    o->set = TRUE;
+
+    v = g_hash_table_lookup(config, "set");
+    if (v && config_value_is_string(v)) {
+        const gchar *s = config_value_string(v);
+        if (!g_ascii_strcasecmp(s, "on"))
+            o->toggle = FALSE;
+        else if (!g_ascii_strcasecmp(s, "off")) {
+            o->toggle = FALSE;
+            o->set = FALSE;
+        }
     }
-    return FALSE;
-}
 
-static gboolean each_on(ObClient *c, const ObActionListRun *data,
-                         gpointer options)
-{
-    client_set_desktop(c, TRUE, FALSE, TRUE);
-    return TRUE;
+    return o;
 }
 
-/* Always return FALSE because its not interactive */
-static gboolean run_func_on(const ObClientSet *set,
-                            const ObActionListRun *data, gpointer options)
+static void free_func(gpointer o)
 {
-    if (!client_set_is_empty(set)) {
-        action_client_move(data, TRUE);
-        client_set_run(set, data, each_on, options);
-        action_client_move(data, FALSE);
-    }
-    return FALSE;
+    g_slice_free(Options, o);
 }
 
-static gboolean each_toggle(ObClient *c, const ObActionListRun *data,
+static gboolean each_run(ObClient *c, const ObActionListRun *data,
                          gpointer options)
 {
-    gboolean omni = c->desktop == DESKTOP_ALL ? screen_desktop : DESKTOP_ALL;
-    client_set_desktop(c, omni, FALSE, TRUE);
+    Options *o = options;
+    guint toggle;
+    toggle = c->desktop == DESKTOP_ALL ? screen_desktop : DESKTOP_ALL;
+    client_set_desktop(c, (o->toggle ? toggle :
+                           (o->set ? DESKTOP_ALL : screen_desktop)),
+                       FALSE, TRUE);
     return TRUE;
 }
 
 /* Always return FALSE because its not interactive */
-static gboolean run_func_toggle(const ObClientSet *set,
-                                const ObActionListRun *data, gpointer options)
+static gboolean run_func(const ObClientSet *set,
+                             const ObActionListRun *data, gpointer options)
 {
     if (!client_set_is_empty(set)) {
         action_client_move(data, TRUE);
-        client_set_run(set, data, each_toggle, options);
+        client_set_run(set, data, each_run, options);
         action_client_move(data, FALSE);
     }
     return FALSE;
index 489891a5e416fcaa8eef1bdacb0e65f09abfd2c6..3e65df2cbf74a942c240b5959c72fa28afc62881 100644 (file)
@@ -1,77 +1,68 @@
 #include "openbox/action.h"
 #include "openbox/action_list_run.h"
+#include "openbox/config_value.h"
 #include "openbox/client.h"
 #include "openbox/client_set.h"
 
-static gboolean run_func_on(const ObClientSet *set,
-                            const ObActionListRun *data, gpointer options);
-static gboolean run_func_off(const ObClientSet *set,
-                             const ObActionListRun *data, gpointer options);
-static gboolean run_func_toggle(const ObClientSet *set,
-                                const ObActionListRun *data, gpointer options);
+typedef struct {
+    gboolean toggle;
+    gboolean set;
+} Options;
+
+static gpointer setup_func(GHashTable *config);
+static void free_func(gpointer o);
+static gboolean run_func(const ObClientSet *set,
+                         const ObActionListRun *data, gpointer options);
 
 void action_shade_startup(void)
 {
     action_register("Shade", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    NULL, NULL, run_func_on);
-    action_register("Unshade", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    NULL, NULL, run_func_off);
-    action_register("ToggleShade", OB_ACTION_DEFAULT_FILTER_SINGLE,
-                    NULL, NULL, run_func_toggle);
+                    setup_func, free_func, run_func);
 }
 
-static gboolean each_on(ObClient *c, const ObActionListRun *data,
-                        gpointer options)
+static gpointer setup_func(GHashTable *config)
 {
-    client_shade(c, TRUE);
-    return TRUE;
-}
+    ObConfigValue *v;
+    Options *o;
 
-/* Always return FALSE because its not interactive */
-static gboolean run_func_on(const ObClientSet *set,
-                            const ObActionListRun *data, gpointer options)
-{
-    if (data->target) {
-        action_client_move(data, TRUE);
-        client_set_run(set, data, each_on, options);
-        action_client_move(data, FALSE);
+    o = g_slice_new0(Options);
+    o->toggle = TRUE;
+    o->set = TRUE;
+
+    v = g_hash_table_lookup(config, "set");
+    if (v && config_value_is_string(v)) {
+        const gchar *s = config_value_string(v);
+        if (!g_ascii_strcasecmp(s, "on"))
+            o->toggle = FALSE;
+        else if (!g_ascii_strcasecmp(s, "off")) {
+            o->toggle = FALSE;
+            o->set = FALSE;
+        }
     }
-    return FALSE;
-}
 
-static gboolean each_off(ObClient *c, const ObActionListRun *data,
-                         gpointer options)
-{
-    client_shade(c, FALSE);
-    return TRUE;
+    return o;
 }
 
-/* Always return FALSE because its not interactive */
-static gboolean run_func_off(const ObClientSet *set,
-                             const ObActionListRun *data, gpointer options)
+static void free_func(gpointer o)
 {
-    if (data->target) {
-        action_client_move(data, TRUE);
-        client_set_run(set, data, each_off, options);
-        action_client_move(data, FALSE);
-    }
-    return FALSE;
+    g_slice_free(Options, o);
 }
 
-static gboolean each_toggle(ObClient *c, const ObActionListRun *data,
-                            gpointer options)
+static gboolean each_run(ObClient *c, const ObActionListRun *data,
+                        gpointer options)
 {
-    client_shade(c, !c->shaded);
+    Options *o = options;
+    client_shade(c, o->toggle ? !c->shaded : o->set);
     return TRUE;
 }
 
 /* Always return FALSE because its not interactive */
-static gboolean run_func_toggle(const ObClientSet *set,
-                                const ObActionListRun *data, gpointer options)
+static gboolean run_func(const ObClientSet *set,
+                         const ObActionListRun *data, gpointer options)
 {
     if (data->target) {
         action_client_move(data, TRUE);
-        client_set_run(set, data, each_toggle, options);
+        client_set_run(set, data, each_run, options);
         action_client_move(data, FALSE);
     }
     return FALSE;
index d2635d6f239c111df55639453b0ee60b1cac1ec0..5e30f9e1ce9dd3870d8bf97f27862426be4e3a20 100644 (file)
@@ -992,10 +992,10 @@ static void bind_default_mouse(void)
         { "Left", "AllDesktops", OB_MOUSE_ACTION_CLICK, "Raise" },
         { "Left", "Shade", OB_MOUSE_ACTION_CLICK, "Raise" },
         { "Left", "Close", OB_MOUSE_ACTION_CLICK, "Close" },
-        { "Left", "Maximize", OB_MOUSE_ACTION_CLICK, "ToggleMaximize" },
+        { "Left", "Maximize", OB_MOUSE_ACTION_CLICK, "Maximize" },
         { "Left", "Iconify", OB_MOUSE_ACTION_CLICK, "Iconify" },
-        { "Left", "AllDesktops", OB_MOUSE_ACTION_CLICK, "ToggleOmnipresent" },
-        { "Left", "Shade", OB_MOUSE_ACTION_CLICK, "ToggleShade" },
+        { "Left", "AllDesktops", OB_MOUSE_ACTION_CLICK, "Omnipresent" },
+        { "Left", "Shade", OB_MOUSE_ACTION_CLICK, "Shade" },
         { "Left", "TLCorner", OB_MOUSE_ACTION_MOTION, "Resize" },
         { "Left", "TRCorner", OB_MOUSE_ACTION_MOTION, "Resize" },
         { "Left", "BLCorner", OB_MOUSE_ACTION_MOTION, "Resize" },