]>
Dogcows Code - chaz/openbox/blob - openbox/actions/layer.c
1 #include "openbox/actions.h"
2 #include "openbox/client.h"
5 gint layer
; /*!< -1 for below, 0 for normal, and 1 for above */
10 static gpointer
setup_func(ObParseInst
*i
, xmlDocPtr doc
, xmlNodePtr node
);
11 static void free_func(gpointer options
);
12 static gboolean
run_func(ObActionsData
*data
, gpointer options
);
14 void action_layer_startup()
16 actions_register("Layer",
23 static gpointer
setup_func(ObParseInst
*i
, xmlDocPtr doc
, xmlNodePtr node
)
28 o
= g_new0(Options
, 1);
31 if ((n
= parse_find_node("layer", node
))) {
32 gchar
*s
= parse_string(doc
, n
);
33 if (!g_ascii_strcasecmp(s
, "above") ||
34 !g_ascii_strcasecmp(s
, "top"))
36 else if (!g_ascii_strcasecmp(s
, "below") ||
37 !g_ascii_strcasecmp(s
, "bottom"))
39 else if (!g_ascii_strcasecmp(s
, "normal") ||
40 !g_ascii_strcasecmp(s
, "middle"))
44 if ((n
= parse_find_node("state", node
))) {
45 gchar
*s
= parse_string(doc
, n
);
46 if (g_ascii_strcasecmp(s
, "toggle")) {
48 o
->on
= parse_bool(doc
, n
);
56 static void free_func(gpointer options
)
63 /* Always return FALSE because its not interactive */
64 static gboolean
run_func(ObActionsData
*data
, gpointer options
)
69 ObClient
*c
= data
->client
;
71 actions_client_move(data
, TRUE
);
74 if (o
->toggle
|| c
->below
!= o
->on
)
75 client_set_layer(c
, c
->below
? 0 : -1);
77 else if (o
->layer
> 0) {
78 if (o
->toggle
|| c
->above
!= o
->on
)
79 client_set_layer(c
, c
->above
? 0 : 1);
82 if ((o
->toggle
|| o
->on
) && (c
->above
|| c
->below
))
83 client_set_layer(c
, 0);
86 actions_client_move(data
, FALSE
);
This page took 0.037265 seconds and 4 git commands to generate.