=== modified file 'src/defaults.c' --- old/src/defaults.c 2009-09-16 12:33:40 +0000 +++ new/src/defaults.c 2009-09-17 06:43:08 +0000 @@ -300,7 +300,7 @@ } // protect against out-of-bounds values for gravity - if (gravity != GRAVITY_EAST && gravity != GRAVITY_NORTH_EAST) + if (gravity < GRAVITY_NONE || gravity > GRAVITY_MAX_VALUE) gravity = DEFAULT_GRAVITY; // update stored DPI-value @@ -1866,7 +1866,7 @@ "gravity", "Positional hint for placing bubbles", 0, - 2, + GRAVITY_MAX_VALUE, DEFAULT_GRAVITY, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | === modified file 'src/defaults.h' --- old/src/defaults.h 2009-09-10 13:11:32 +0000 +++ new/src/defaults.h 2009-09-17 06:42:23 +0000 @@ -58,7 +58,12 @@ { GRAVITY_NONE = 0, GRAVITY_NORTH_EAST, // top-right of screen - GRAVITY_EAST // vertically centered at right of screen + GRAVITY_EAST, // vertically centered at right of screen + GRAVITY_SOUTH_EAST, // bottom-right of screen + GRAVITY_SOUTH_WEST, // bottom-left of screen + GRAVITY_WEST, // vertically centered at left of screen + GRAVITY_NORTH_WEST, // top-left of screen + GRAVITY_MAX_VALUE = GRAVITY_NORTH_WEST } Gravity; typedef enum === modified file 'src/stack.c' --- old/src/stack.c 2009-09-10 13:11:32 +0000 +++ new/src/stack.c 2009-09-17 06:24:26 +0000 @@ -884,6 +884,11 @@ { Defaults* d; + case GRAVITY_WEST: + d = self->defaults; + *x = defaults_get_bubble_horz_gap (d); + // fall through + case GRAVITY_EAST: d = self->defaults; @@ -900,6 +905,11 @@ EM2PIXELS (defaults_get_bubble_shadow_size (d), d); break; + case GRAVITY_NORTH_WEST: + d = self->defaults; + *x = defaults_get_bubble_horz_gap (d); + // fall through + case GRAVITY_NORTH_EAST: d = self->defaults; @@ -934,6 +944,30 @@ } break; + case GRAVITY_SOUTH_WEST: + d = self->defaults; + *x = defaults_get_bubble_horz_gap (d); + // fall through + + case GRAVITY_SOUTH_EAST: + d = self->defaults; + + if (slot == SLOT_BOTTOM) + { + *y += defaults_get_desktop_height(d) - + EM2PIXELS (defaults_get_bubble_vert_gap (d) / 2.0f, d) - + bubble_height - + EM2PIXELS (defaults_get_bubble_shadow_size (d), d); + } + else if (slot == SLOT_TOP) + { + *y += defaults_get_desktop_height(d) - + EM2PIXELS (defaults_get_bubble_vert_gap (d), d) - + bubble_height * 2 - + EM2PIXELS (defaults_get_bubble_shadow_size (d), d); + } + break; + default: g_warning ("Unhandled placement!\n"); break;