]> Dogcows Code - chaz/openbox/blobdiff - openbox/action.c
update copyright step 2
[chaz/openbox] / openbox / action.c
index a6323d6f636a1cd7672978281e2369f0f6ab3ea4..181ef38ebef782c7c9056660da5d59abd6e87f23 100644 (file)
@@ -1,6 +1,7 @@
 /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
 
    action.c for the Openbox window manager
+   Copyright (c) 2006        Mikael Magnusson
    Copyright (c) 2003        Ben Jansens
 
    This program is free software; you can redistribute it and/or modify
@@ -29,6 +30,7 @@
 #include "grab.h"
 #include "keyboard.h"
 #include "event.h"
+#include "dock.h"
 #include "config.h"
 #include "mainloop.h"
 
@@ -471,6 +473,11 @@ ActionString actionstrings[] =
         action_iconify,
         setup_client_action
     },
+    {
+        "focustobottom",
+        action_focus_order_to_bottom,
+        setup_client_action
+    },
     {
         "raiselower",
         action_raiselower,
@@ -536,6 +543,11 @@ ActionString actionstrings[] =
         action_move_relative_vert,
         setup_client_action
     },
+    {
+        "movetocenter",
+        action_move_to_center,
+        setup_client_action
+    },
     {
         "resizerelativehorz",
         action_resize_relative_horz,
@@ -546,6 +558,16 @@ ActionString actionstrings[] =
         action_resize_relative_vert,
         setup_client_action
     },
+    {
+        "moverelative",
+        action_move_relative,
+        setup_client_action
+    },
+    {
+        "resizerelative",
+        action_resize_relative,
+        setup_client_action
+    },
     {
         "maximizefull",
         action_maximize_full,
@@ -862,7 +884,21 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
                        act->func == action_resize_relative_horz ||
                        act->func == action_resize_relative_vert) {
                 if ((n = parse_find_node("delta", node->xmlChildrenNode)))
-                    act->data.relative.delta = parse_int(doc, n);
+                    act->data.relative.deltax = parse_int(doc, n);
+            } else if (act->func == action_move_relative) {
+                if ((n = parse_find_node("x", node->xmlChildrenNode)))
+                    act->data.relative.deltax = parse_int(doc, n);
+                if ((n = parse_find_node("y", node->xmlChildrenNode)))
+                    act->data.relative.deltay = parse_int(doc, n);
+            } else if (act->func == action_resize_relative) {
+                if ((n = parse_find_node("left", node->xmlChildrenNode)))
+                    act->data.relative.deltaxl = parse_int(doc, n);
+                if ((n = parse_find_node("up", node->xmlChildrenNode)))
+                    act->data.relative.deltayu = parse_int(doc, n);
+                if ((n = parse_find_node("right", node->xmlChildrenNode)))
+                    act->data.relative.deltax = parse_int(doc, n);
+                if ((n = parse_find_node("down", node->xmlChildrenNode)))
+                    act->data.relative.deltay = parse_int(doc, n);
             } else if (act->func == action_desktop) {
                 if ((n = parse_find_node("desktop", node->xmlChildrenNode)))
                     act->data.desktop.desk = parse_int(doc, n);
@@ -901,6 +937,13 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
             } else if (act->func == action_directional_focus) {
                 if ((n = parse_find_node("dialog", node->xmlChildrenNode)))
                     act->data.cycle.dialog = parse_bool(doc, n);
+            } else if (act->func == action_raise ||
+                       act->func == action_lower ||
+                       act->func == action_raiselower ||
+                       act->func == action_shadelower ||
+                       act->func == action_unshaderaise) {
+                if ((n = parse_find_node("group", node->xmlChildrenNode)))
+                    act->data.stacking.group = parse_bool(doc, n);
             }
             INTERACTIVE_LIMIT(act, uact);
         }
@@ -1030,12 +1073,20 @@ void action_focus(union ActionData *data)
 
 void action_unfocus (union ActionData *data)
 {
-    client_unfocus(data->client.any.c);
+    if (data->client.any.c == focus_client);
+        focus_fallback(OB_FOCUS_FALLBACK_UNFOCUSING);
 }
 
 void action_iconify(union ActionData *data)
 {
+    client_action_start(data);
     client_iconify(data->client.any.c, TRUE, TRUE);
+    client_action_end(data);
+}
+
+void action_focus_order_to_bottom(union ActionData *data)
+{
+    focus_order_to_bottom(data->client.any.c);
 }
 
 void action_raiselower(union ActionData *data)
@@ -1045,17 +1096,19 @@ void action_raiselower(union ActionData *data)
     gboolean raise = FALSE;
 
     for (it = stacking_list; it; it = g_list_next(it)) {
-        ObClient *cit = it->data;
-
-        if (cit == c) break;
-        if (client_normal(cit) == client_normal(c) &&
-            cit->layer == c->layer &&
-            cit->frame->visible &&
-            !client_search_transient(c, cit))
-        {
-            if (RECT_INTERSECTS_RECT(cit->frame->area, c->frame->area)) {
-                raise = TRUE;
-                break;
+        if (WINDOW_IS_CLIENT(it->data)) {
+            ObClient *cit = it->data;
+
+            if (cit == c) break;
+            if (client_normal(cit) == client_normal(c) &&
+                    cit->layer == c->layer &&
+                    cit->frame->visible &&
+                    !client_search_transient(c, cit))
+            {
+                if (RECT_INTERSECTS_RECT(cit->frame->area, c->frame->area)) {
+                    raise = TRUE;
+                    break;
+                }
             }
         }
     }
@@ -1069,7 +1122,7 @@ void action_raiselower(union ActionData *data)
 void action_raise(union ActionData *data)
 {
     client_action_start(data);
-    stacking_raise(CLIENT_AS_WINDOW(data->client.any.c));
+    stacking_raise(CLIENT_AS_WINDOW(data->client.any.c), data->stacking.group);
     client_action_end(data);
 }
 
@@ -1092,7 +1145,7 @@ void action_shadelower(union ActionData *data)
 void action_lower(union ActionData *data)
 {
     client_action_start(data);
-    stacking_lower(CLIENT_AS_WINDOW(data->client.any.c));
+    stacking_lower(CLIENT_AS_WINDOW(data->client.any.c), data->stacking.group);
     client_action_end(data);
 }
 
@@ -1138,7 +1191,7 @@ void action_move_relative_horz(union ActionData *data)
 {
     ObClient *c = data->relative.any.c;
     client_action_start(data);
-    client_move(c, c->area.x + data->relative.delta, c->area.y);
+    client_move(c, c->area.x + data->relative.deltax, c->area.y);
     client_action_end(data);
 }
 
@@ -1146,7 +1199,18 @@ void action_move_relative_vert(union ActionData *data)
 {
     ObClient *c = data->relative.any.c;
     client_action_start(data);
-    client_move(c, c->area.x, c->area.y + data->relative.delta);
+    client_move(c, c->area.x, c->area.y + data->relative.deltax);
+    client_action_end(data);
+}
+
+void action_move_to_center(union ActionData *data)
+{
+    ObClient *c = data->client.any.c;
+    Rect *area;
+    area = screen_area_monitor(c->desktop, 0);
+    client_action_start(data);
+    client_move(c, area->width / 2 - c->area.width / 2,
+                area->height / 2 - c->area.height / 2);
     client_action_end(data);
 }
 
@@ -1155,7 +1219,7 @@ void action_resize_relative_horz(union ActionData *data)
     ObClient *c = data->relative.any.c;
     client_action_start(data);
     client_resize(c,
-                  c->area.width + data->relative.delta * c->size_inc.width,
+                  c->area.width + data->relative.deltax * c->size_inc.width,
                   c->area.height);
     client_action_end(data);
 }
@@ -1166,11 +1230,34 @@ void action_resize_relative_vert(union ActionData *data)
     if (!c->shaded) {
         client_action_start(data);
         client_resize(c, c->area.width, c->area.height +
-                      data->relative.delta * c->size_inc.height);
+                      data->relative.deltax * c->size_inc.height);
         client_action_end(data);
     }
 }
 
+void action_move_relative(union ActionData *data)
+{
+    ObClient *c = data->relative.any.c;
+    client_action_start(data);
+    client_move(c, c->area.x + data->relative.deltax, c->area.y +
+                data->relative.deltay);
+    client_action_end(data);
+}
+
+void action_resize_relative(union ActionData *data)
+{
+    ObClient *c = data->relative.any.c;
+    client_action_start(data);
+    client_move_resize(c,
+                  c->area.x - data->relative.deltaxl * c->size_inc.width,
+                  c->area.y - data->relative.deltayu * c->size_inc.height,
+                  c->area.width + data->relative.deltax  * c->size_inc.width
+                                + data->relative.deltaxl * c->size_inc.width,
+                  c->area.height + data->relative.deltay  * c->size_inc.height
+                                 + data->relative.deltayu * c->size_inc.height);
+    client_action_end(data);
+}
+
 void action_maximize_full(union ActionData *data)
 {
     client_action_start(data);
This page took 0.025963 seconds and 4 git commands to generate.