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_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[] =
{
{
action_unshaderaise,
setup_client_action
},
- {
- "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,
else
action_shade(data);
}
-
-void action_growtoedge(union ActionData *data)
-{
-}
--- /dev/null
+#include "openbox/actions.h"
+#include "openbox/misc.h"
+#include "openbox/client.h"
+#include "openbox/frame.h"
+#include "openbox/screen.h"
+#include <glib.h>
+
+typedef struct {
+ gboolean shaded_on;
+ gboolean shaded_off;
+ gboolean maxvert_on;
+ gboolean maxvert_off;
+ gboolean maxhorz_on;
+ gboolean maxhorz_off;
+ gboolean maxfull_on;
+ gboolean maxfull_off;
+ gboolean iconic_on;
+ gboolean iconic_off;
+ GSList *thenacts;
+ GSList *elseacts;
+} Options;
+
+static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
+static void free_func(gpointer options);
+static gboolean run_func(ObActionsData *data, gpointer options);
+
+void action_if_startup()
+{
+ actions_register("If",
+ setup_func,
+ free_func,
+ run_func,
+ NULL, NULL);
+}
+
+static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+{
+ xmlNodePtr n;
+ Options *o;
+
+ o = g_new0(Options, 1);
+
+ if ((n = parse_find_node("shaded", node))) {
+ if (parse_bool(doc, n))
+ o->shaded_on = TRUE;
+ else
+ o->shaded_off = TRUE;
+ }
+ if ((n = parse_find_node("maximized", node))) {
+ if (parse_bool(doc, n))
+ o->maxfull_on = TRUE;
+ else
+ o->maxfull_off = TRUE;
+ }
+ if ((n = parse_find_node("maximizedhorizontal", node))) {
+ if (parse_bool(doc, n))
+ o->maxhorz_on = TRUE;
+ else
+ o->maxhorz_off = TRUE;
+ }
+ if ((n = parse_find_node("maximizedvertical", node))) {
+ if (parse_bool(doc, n))
+ o->maxvert_on = TRUE;
+ else
+ o->maxvert_off = TRUE;
+ }
+ if ((n = parse_find_node("iconified", node))) {
+ if (parse_bool(doc, n))
+ o->iconic_on = TRUE;
+ else
+ o->iconic_off = TRUE;
+ }
+
+ if ((n = parse_find_node("then", node))) {
+ xmlNodePtr m;
+
+ m = parse_find_node("action", n->xmlChildrenNode);
+ while (m) {
+ ObActionsAct *action = actions_parse(i, doc, m);
+ if (action) o->thenacts = g_slist_prepend(o->thenacts, action);
+ m = parse_find_node("action", m->next);
+ }
+ }
+ if ((n = parse_find_node("else", node))) {
+ xmlNodePtr m;
+
+ m = parse_find_node("action", n->xmlChildrenNode);
+ while (m) {
+ ObActionsAct *action = actions_parse(i, doc, m);
+ if (action) o->elseacts = g_slist_prepend(o->elseacts, action);
+ m = parse_find_node("action", m->next);
+ }
+ }
+
+ return o;
+}
+
+static void free_func(gpointer options)
+{
+ Options *o = options;
+
+ g_free(o);
+}
+
+/* Always return FALSE because its not interactive */
+static gboolean run_func(ObActionsData *data, gpointer options)
+{
+ Options *o = options;
+ GSList *acts;
+ ObClient *c = data->client;
+
+ if ((!o->shaded_on || (c && c->shaded)) &&
+ (!o->shaded_off || (c && !c->shaded)) &&
+ (!o->iconic_on || (c && c->iconic)) &&
+ (!o->iconic_off || (c && !c->iconic)) &&
+ (!o->maxhorz_on || (c && c->max_horz)) &&
+ (!o->maxhorz_off || (c && !c->max_horz)) &&
+ (!o->maxvert_on || (c && c->max_vert)) &&
+ (!o->maxvert_off || (c && !c->max_vert)) &&
+ (!o->maxfull_on || (c && c->max_vert && c->max_horz)) &&
+ (!o->maxfull_off || (c && !(c->max_vert && c->max_horz))))
+ {
+ acts = o->thenacts;
+ }
+ else
+ acts = o->elseacts;
+
+ actions_run_acts(acts, data->uact, data->state,
+ data->x, data->y, data->button,
+ data->context, data->client);
+
+ return FALSE;
+}