add the "if" action
[dana/openbox.git] / openbox / action.c
index 9dd4965..3786feb 100644 (file)
    See the COPYING file for a copy of the GNU General Public License.
 */
 
-#include "debug.h"
-#include "client.h"
-#include "focus.h"
-#include "focus_cycle.h"
-#include "moveresize.h"
-#include "menu.h"
-#include "prop.h"
-#include "stacking.h"
-#include "screen.h"
-#include "action.h"
-#include "openbox.h"
-#include "grab.h"
-#include "keyboard.h"
-#include "event.h"
-#include "dock.h"
-#include "config.h"
-#include "mainloop.h"
-#include "startupnotify.h"
-#include "gettext.h"
-
-#include <glib.h>
-
-
-
-
-void setup_action_movefromedge_north(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.diraction.direction = OB_DIRECTION_NORTH;
-    (*a)->data.diraction.hang = TRUE;
-}
-
-void setup_action_movefromedge_south(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.diraction.direction = OB_DIRECTION_SOUTH;
-    (*a)->data.diraction.hang = TRUE;
-}
-
-void setup_action_movefromedge_east(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.diraction.direction = OB_DIRECTION_EAST;
-    (*a)->data.diraction.hang = TRUE;
-}
-
-void setup_action_movefromedge_west(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.diraction.direction = OB_DIRECTION_WEST;
-    (*a)->data.diraction.hang = TRUE;
-}
-
-void setup_action_movetoedge_north(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.diraction.direction = OB_DIRECTION_NORTH;
-    (*a)->data.diraction.hang = FALSE;
-}
-
-void setup_action_movetoedge_south(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.diraction.direction = OB_DIRECTION_SOUTH;
-    (*a)->data.diraction.hang = FALSE;
-}
-
-void setup_action_movetoedge_east(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.diraction.direction = OB_DIRECTION_EAST;
-    (*a)->data.diraction.hang = FALSE;
-}
-
-void setup_action_movetoedge_west(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.diraction.direction = OB_DIRECTION_WEST;
-    (*a)->data.diraction.hang = FALSE;
-}
-
-void setup_action_growtoedge_north(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.diraction.direction = OB_DIRECTION_NORTH;
-}
-
-void setup_action_growtoedge_south(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.diraction.direction = OB_DIRECTION_SOUTH;
-}
-
-void setup_action_growtoedge_east(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.diraction.direction = OB_DIRECTION_EAST;
-}
-
-void setup_action_growtoedge_west(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.diraction.direction = OB_DIRECTION_WEST;
-}
-
-void setup_action_top_layer(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.layer.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.layer.layer = 1;
-}
-
-void setup_action_normal_layer(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.layer.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.layer.layer = 0;
-}
-
-void setup_action_bottom_layer(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.layer.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.layer.layer = -1;
-}
-
-void setup_client_action(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-}
-
 ActionString actionstrings[] =
 {
     {
@@ -158,91 +30,6 @@ ActionString actionstrings[] =
         setup_client_action
     },
     {
-        "sendtotoplayer",
-        action_send_to_layer,
-        setup_action_top_layer
-    },
-    {
-        "togglealwaysontop",
-        action_toggle_layer,
-        setup_action_top_layer
-    },
-    {
-        "sendtonormallayer",
-        action_send_to_layer,
-        setup_action_normal_layer
-    },
-    {
-        "sendtobottomlayer",
-        action_send_to_layer,
-        setup_action_bottom_layer
-    },
-    {
-        "togglealwaysonbottom",
-        action_toggle_layer,
-        setup_action_bottom_layer
-    },
-    {
-        "movefromedgenorth",
-        action_movetoedge,
-        setup_action_movefromedge_north
-    },
-    {
-        "movefromedgesouth",
-        action_movetoedge,
-        setup_action_movefromedge_south
-    },
-    {
-        "movefromedgewest",
-        action_movetoedge,
-        setup_action_movefromedge_west
-    },
-    {
-        "movefromedgeeast",
-        action_movetoedge,
-        setup_action_movefromedge_east
-    },
-    {
-        "movetoedgenorth",
-        action_movetoedge,
-        setup_action_movetoedge_north
-    },
-    {
-        "movetoedgesouth",
-        action_movetoedge,
-        setup_action_movetoedge_south
-    },
-    {
-        "movetoedgewest",
-        action_movetoedge,
-        setup_action_movetoedge_west
-    },
-    {
-        "movetoedgeeast",
-        action_movetoedge,
-        setup_action_movetoedge_east
-    },
-    {
-        "growtoedgenorth",
-        action_growtoedge,
-        setup_action_growtoedge_north
-    },
-    {
-        "growtoedgesouth",
-        action_growtoedge,
-        setup_action_growtoedge_south
-    },
-    {
-        "growtoedgewest",
-        action_growtoedge,
-        setup_action_growtoedge_west
-    },
-    {
-        "growtoedgeeast",
-        action_growtoedge,
-        setup_action_growtoedge_east
-    },
-    {
         NULL,
         NULL,
         NULL
@@ -264,123 +51,3 @@ void action_shadelower(union ActionData *data)
     else
         action_shade(data);
 }
-
-void action_movetoedge(union ActionData *data)
-{
-    gint x, y;
-    ObClient *c = data->diraction.any.c;
-
-    x = c->frame->area.x;
-    y = c->frame->area.y;
-    
-    switch(data->diraction.direction) {
-    case OB_DIRECTION_NORTH:
-        y = client_directional_edge_search(c, OB_DIRECTION_NORTH,
-                                           data->diraction.hang)
-            - (data->diraction.hang ? c->frame->area.height : 0);
-        break;
-    case OB_DIRECTION_WEST:
-        x = client_directional_edge_search(c, OB_DIRECTION_WEST,
-                                           data->diraction.hang)
-            - (data->diraction.hang ? c->frame->area.width : 0);
-        break;
-    case OB_DIRECTION_SOUTH:
-        y = client_directional_edge_search(c, OB_DIRECTION_SOUTH,
-                                           data->diraction.hang)
-            - (data->diraction.hang ? 0 : c->frame->area.height);
-        break;
-    case OB_DIRECTION_EAST:
-        x = client_directional_edge_search(c, OB_DIRECTION_EAST,
-                                           data->diraction.hang)
-            - (data->diraction.hang ? 0 : c->frame->area.width);
-        break;
-    default:
-        g_assert_not_reached();
-    }
-    frame_frame_gravity(c->frame, &x, &y, c->area.width, c->area.height);
-    client_action_start(data);
-    client_move(c, x, y);
-    client_action_end(data, FALSE);
-}
-
-void action_growtoedge(union ActionData *data)
-{
-    gint x, y, width, height, dest;
-    ObClient *c = data->diraction.any.c;
-    Rect *a;
-
-    a = screen_area(c->desktop, SCREEN_AREA_ALL_MONITORS, &c->frame->area);
-    x = c->frame->area.x;
-    y = c->frame->area.y;
-    /* get the unshaded frame's dimensions..if it is shaded */
-    width = c->area.width + c->frame->size.left + c->frame->size.right;
-    height = c->area.height + c->frame->size.top + c->frame->size.bottom;
-
-    switch(data->diraction.direction) {
-    case OB_DIRECTION_NORTH:
-        if (c->shaded) break; /* don't allow vertical resize if shaded */
-
-        dest = client_directional_edge_search(c, OB_DIRECTION_NORTH, FALSE);
-        if (a->y == y)
-            height = height / 2;
-        else {
-            height = c->frame->area.y + height - dest;
-            y = dest;
-        }
-        break;
-    case OB_DIRECTION_WEST:
-        dest = client_directional_edge_search(c, OB_DIRECTION_WEST, FALSE);
-        if (a->x == x)
-            width = width / 2;
-        else {
-            width = c->frame->area.x + width - dest;
-            x = dest;
-        }
-        break;
-    case OB_DIRECTION_SOUTH:
-        if (c->shaded) break; /* don't allow vertical resize if shaded */
-
-        dest = client_directional_edge_search(c, OB_DIRECTION_SOUTH, FALSE);
-        if (a->y + a->height == y + c->frame->area.height) {
-            height = c->frame->area.height / 2;
-            y = a->y + a->height - height;
-        } else
-            height = dest - c->frame->area.y;
-        y += (height - c->frame->area.height) % c->size_inc.height;
-        height -= (height - c->frame->area.height) % c->size_inc.height;
-        break;
-    case OB_DIRECTION_EAST:
-        dest = client_directional_edge_search(c, OB_DIRECTION_EAST, FALSE);
-        if (a->x + a->width == x + c->frame->area.width) {
-            width = c->frame->area.width / 2;
-            x = a->x + a->width - width;
-        } else
-            width = dest - c->frame->area.x;
-        x += (width - c->frame->area.width) % c->size_inc.width;
-        width -= (width - c->frame->area.width) % c->size_inc.width;
-        break;
-    default:
-        g_assert_not_reached();
-    }
-    width -= c->frame->size.left + c->frame->size.right;
-    height -= c->frame->size.top + c->frame->size.bottom;
-    frame_frame_gravity(c->frame, &x, &y, width, height);
-    client_action_start(data);
-    client_move_resize(c, x, y, width, height);
-    client_action_end(data, FALSE);
-    g_free(a);
-}
-
-void action_send_to_layer(union ActionData *data)
-{
-    client_set_layer(data->layer.any.c, data->layer.layer);
-}
-
-void action_toggle_layer(union ActionData *data)
-{
-    ObClient *c = data->layer.any.c;
-
-    client_action_start(data);
-    client_action_end(data, config_focus_under_mouse);
-}
-