Exemple #1
0
gboolean stacking_restack_request(struct wm_client *client, struct wm_client *sibling, gint detail)
{
	gboolean ret = FALSE;
	if(sibling && (client->desktop != sibling->desktop && client->desktop != DESKTOP_ALL && sibling->desktop != DESKTOP_ALL)) {
		wm_debug("Setting restack sibling to NULL, they are not on the same desktop");
		sibling = NULL;
	}
	switch (detail) {
	case Below:
		wm_debug("Restack request Below for client %s sibling %s", client->title, sibling ? sibling->title : "(all)");
		stacking_lower(CLIENT_AS_WINDOW(client));
		ret = TRUE;
		break;
	case BottomIf:
		wm_debug("Restack request BottomIf for client %s sibling %s", client->title, sibling ? sibling->title : "(all)");
		if(stacking_occludes(client, sibling)) {
			stacking_lower(CLIENT_AS_WINDOW(client));
			ret = TRUE;
		}
		break;
	case Above:
		wm_debug("Restack request Above for client %s sibling %s", client->title, sibling ? sibling->title : "(all)");
		stacking_raise(CLIENT_AS_WINDOW(client));
		ret = TRUE;
		break;
	case TopIf:
		wm_debug("Restack request TopIf for client %s sibling %s", client->title, sibling ? sibling->title : "(all)");
		if(stacking_occluded(client, sibling)) {
			stacking_raise(CLIENT_AS_WINDOW(client));
			ret = TRUE;
		}
		break;
	case Opposite:
		wm_debug("Restack request Opposite for client %s sibling %s", client->title, sibling ? sibling->title : "(all)");
		if(stacking_occluded(client, sibling)) {
			stacking_raise(CLIENT_AS_WINDOW(client));
			ret = TRUE;
		} else if(stacking_occludes(client, sibling)) {
			stacking_lower(CLIENT_AS_WINDOW(client));
			ret = TRUE;
		}
		break;
	}
	return ret;
}
/* Always return FALSE because its not interactive */
static gboolean run_func(ObActionsData *data, gpointer options)
{
    if (data->client) {
        actions_client_move(data, TRUE);
        stacking_lower(CLIENT_AS_WINDOW(data->client));
        actions_client_move(data, FALSE);
    }

    return FALSE;
}