support NET_WM_STATE_ABOVE in spot 3

This commit is contained in:
Sean Pringle
2015-12-11 21:05:02 +10:00
parent d26a0a50f3
commit 4a072964ec
5 changed files with 26 additions and 9 deletions

View File

@@ -27,8 +27,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
void action_move(void *data, int num, Client *cli)
{
if (!cli) return;
client_raise_family(cli);
client_place_spot(cli, num, cli->monitor, 1);
client_raise_family(cli);
current_spot = cli->spot; current_mon = cli->monitor;
spot_warp_pointer(cli->spot, cli->monitor);
}
@@ -36,8 +36,8 @@ void action_move(void *data, int num, Client *cli)
void action_move_direction(void *data, int num, Client *cli)
{
if (!cli) return;
client_raise_family(cli);
client_place_spot(cli, spot_choose_by_direction(cli->spot, cli->monitor, num), cli->monitor, 1);
client_raise_family(cli);
current_spot = cli->spot; current_mon = cli->monitor;
spot_warp_pointer(cli->spot, cli->monitor);
}
@@ -100,9 +100,9 @@ void action_find_or_start(void *data, int num, Client *cli)
void action_move_monitor(void *data, int num, Client *cli)
{
if (!cli) return;
client_raise_family(cli);
cli->monitor = MAX(0, MIN(current_mon+num, nmonitors-1));
client_place_spot(cli, cli->spot, cli->monitor, 1);
client_raise_family(cli);
current_mon = cli->monitor;
spot_warp_pointer(cli->spot, cli->monitor);
}
@@ -152,7 +152,14 @@ void action_maximize_horz(void *data, int num, Client *cli)
client_place_spot(cli, cli->spot, cli->monitor, 1);
}
void action_above(void *data, int num, Client *cli)
{
if (!cli) return;
cli->above = client_toggle_state(cli, atoms[_NET_WM_STATE_ABOVE]);
client_place_spot(cli, cli->spot, cli->monitor, 1);
}
void action_menu(void *data, int num, Client *cli)
{
menu_create(current_spot, current_mon);
}
}

1
atom.c
View File

@@ -53,6 +53,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
X(_NET_WM_STATE_MAXIMIZE_VERT),\
X(_NET_WM_STATE_MAXIMIZE_HORZ),\
X(_NET_WM_STATE_DEMANDS_ATTENTION),\
X(_NET_WM_STATE_ABOVE),\
X(WM_NAME),\
X(WM_DELETE_WINDOW),\
X(WM_CLIENT_LEADER),\

View File

@@ -112,6 +112,7 @@ Client* window_build_client(Window win)
c->full = client_has_state(c, atoms[_NET_WM_STATE_FULLSCREEN]);
c->maxv = client_has_state(c, atoms[_NET_WM_STATE_MAXIMIZE_VERT]);
c->maxh = client_has_state(c, atoms[_NET_WM_STATE_MAXIMIZE_HORZ]);
c->above = client_has_state(c, atoms[_NET_WM_STATE_ABOVE]);
GETPROP_LONG(win, atoms[XOAT_MAXIMIZE], &c->max, 1);
@@ -297,8 +298,13 @@ void client_raise_family(Client *c)
if (!c) return;
int i; Client *o; STACK_INIT(raise); STACK_INIT(family);
for_windows(i, o) if (o->type == atoms[_NET_WM_WINDOW_TYPE_DOCK])
client_stack_family(o, &raise);
for_windows(i, o)
{
if (o->type == atoms[_NET_WM_WINDOW_TYPE_DOCK])
client_stack_family(o, &raise);
if (o->above && c->spot != SPOT3 && o->spot == SPOT3)
client_stack_family(o, &raise);
}
while (c->transient && (o = window_build_client(c->transient)) && o->manage)
c = family.clients[family.depth++] = o;

View File

@@ -42,7 +42,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define CONFIG_ACTIONS "action_move_direction|action_move_monitor|action_focus_monitor|action_focus_direction" \
"|action_move|action_focus|action_close|action_cycle|action_raise_nth|action_command|action_find_or_start" \
"|action_fullscreen|action_maximize_vert|action_maximize_horz|action_maximize|action_menu"
"|action_fullscreen|action_maximize_vert|action_maximize_horz|action_maximize|action_above|action_menu"
void
rtrim(char *str)
@@ -373,6 +373,7 @@ configure()
"action_maximize_vert",
"action_maximize_horz",
"action_maximize",
"action_above",
"action_menu",
};
void *actions[] = {
@@ -391,6 +392,7 @@ configure()
action_maximize_vert,
action_maximize_horz,
action_maximize,
action_above,
action_menu,
};
for (i = 0; i < sizeof(names) / sizeof(char*); i++)
@@ -451,7 +453,7 @@ configure()
if (regex_match("^launch[[:space:]]+(.+)$", tmp))
{
rtrim(regex_matches[1]);
settings.launchcmd_count++;
settings.launchcmds = realloc(settings.launchcmds, sizeof(char*) * settings.launchcmd_count);
settings.launchcmds[settings.launchcmd_count-1] = strdup(regex_matches[1]);

3
xoat.c
View File

@@ -89,7 +89,7 @@ typedef struct _Client {
XWindowAttributes attr;
Window transient, leader;
Atom type, states[ATOMLIST+1];
short monitor, visible, manage, input, urgent, full, ours, maxv, maxh, bar, menu;
short monitor, visible, manage, input, urgent, full, ours, maxv, maxh, bar, menu, above;
unsigned long spot, max;
char *class;
} Client;
@@ -153,6 +153,7 @@ void action_fullscreen(void*, int, Client*);
void action_maximize_vert(void*, int, Client*);
void action_maximize_horz(void*, int, Client*);
void action_maximize(void*, int, Client*);
void action_above(void*, int, Client*);
void action_menu(void*, int, Client*);
#include "config.h"