Ejemplo n.º 1
0
/**
 * Function description
 *
 * @return 0 on success, otherwise a Win32 error code
 */
static UINT xf_rail_server_local_move_size(RailClientContext* context, RAIL_LOCALMOVESIZE_ORDER* localMoveSize)
{
	int x = 0, y = 0;
	int direction = 0;
	Window child_window;
	xfAppWindow* appWindow = NULL;
	xfContext* xfc = (xfContext*) context->custom;

	appWindow = (xfAppWindow*) HashTable_GetItemValue(xfc->railWindows,
			(void*) (UINT_PTR) localMoveSize->windowId);

	if (!appWindow)
		return ERROR_INTERNAL_ERROR;

	switch (localMoveSize->moveSizeType)
	{
		case RAIL_WMSZ_LEFT:
			direction = _NET_WM_MOVERESIZE_SIZE_LEFT;
			x = localMoveSize->posX;
			y = localMoveSize->posY;
			break;

		case RAIL_WMSZ_RIGHT:
			direction = _NET_WM_MOVERESIZE_SIZE_RIGHT;
			x = localMoveSize->posX;
			y = localMoveSize->posY;
			break;

		case RAIL_WMSZ_TOP:
			direction = _NET_WM_MOVERESIZE_SIZE_TOP;
			x = localMoveSize->posX;
			y = localMoveSize->posY;
			break;

		case RAIL_WMSZ_TOPLEFT:
			direction = _NET_WM_MOVERESIZE_SIZE_TOPLEFT;
			x = localMoveSize->posX;
			y = localMoveSize->posY;
			break;

		case RAIL_WMSZ_TOPRIGHT:
			direction = _NET_WM_MOVERESIZE_SIZE_TOPRIGHT;
			x = localMoveSize->posX;
			y = localMoveSize->posY;
			break;

		case RAIL_WMSZ_BOTTOM:
			direction = _NET_WM_MOVERESIZE_SIZE_BOTTOM;
			x = localMoveSize->posX;
			y = localMoveSize->posY;
			break;

		case RAIL_WMSZ_BOTTOMLEFT:
			direction = _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT;
			x = localMoveSize->posX;
			y = localMoveSize->posY;
			break;

		case RAIL_WMSZ_BOTTOMRIGHT:
			direction = _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT;
			x = localMoveSize->posX;
			y = localMoveSize->posY;
			break;

		case RAIL_WMSZ_MOVE:
			direction = _NET_WM_MOVERESIZE_MOVE;
			XTranslateCoordinates(xfc->display, appWindow->handle,
					RootWindowOfScreen(xfc->screen),
					localMoveSize->posX, localMoveSize->posY, &x, &y, &child_window);
			break;

		case RAIL_WMSZ_KEYMOVE:
			direction = _NET_WM_MOVERESIZE_MOVE_KEYBOARD;
			x = localMoveSize->posX;
			y = localMoveSize->posY;
			/* FIXME: local keyboard moves not working */
			return CHANNEL_RC_OK;
			break;

		case RAIL_WMSZ_KEYSIZE:
			direction = _NET_WM_MOVERESIZE_SIZE_KEYBOARD;
			x = localMoveSize->posX;
			y = localMoveSize->posY;
			/* FIXME: local keyboard moves not working */
			return CHANNEL_RC_OK;
			break;
	}

	if (localMoveSize->isMoveSizeStart)
	{
		xf_StartLocalMoveSize(xfc, appWindow, direction, x, y);
	}
	else
	{
		xf_EndLocalMoveSize(xfc, appWindow);
	}

	return CHANNEL_RC_OK;
}
Ejemplo n.º 2
0
void xf_process_rail_server_localmovesize_event(xfContext* xfc, rdpChannels* channels, wMessage* event)
{
	int x = 0, y = 0;
	rdpRail* rail;
	int direction = 0;
	Window child_window;
	rdpWindow* rail_window = NULL;
	RAIL_LOCALMOVESIZE_ORDER* movesize = (RAIL_LOCALMOVESIZE_ORDER*) event->wParam;
	rail = ((rdpContext*) xfc)->rail;
	rail_window = window_list_get_by_id(rail->list, movesize->windowId);

	if (rail_window != NULL)
	{
		xfWindow* xfw = NULL;
		xfw = (xfWindow*) rail_window->extra;
		DEBUG_X11_LMS("windowId=0x%X isMoveSizeStart=%d moveSizeType=%s PosX=%d PosY=%d",
					  movesize->windowId, movesize->isMoveSizeStart,
					  movetype_names[movesize->moveSizeType], (INT16) movesize->posX, (INT16) movesize->posY);

		switch (movesize->moveSizeType)
		{
			case RAIL_WMSZ_LEFT: //0x1
				direction = _NET_WM_MOVERESIZE_SIZE_LEFT;
				x = movesize->posX;
				y = movesize->posY;
				break;

			case RAIL_WMSZ_RIGHT: //0x2
				direction = _NET_WM_MOVERESIZE_SIZE_RIGHT;
				x = movesize->posX;
				y = movesize->posY;
				break;

			case RAIL_WMSZ_TOP: //0x3
				direction = _NET_WM_MOVERESIZE_SIZE_TOP;
				x = movesize->posX;
				y = movesize->posY;
				break;

			case RAIL_WMSZ_TOPLEFT: //0x4
				direction = _NET_WM_MOVERESIZE_SIZE_TOPLEFT;
				x = movesize->posX;
				y = movesize->posY;
				break;

			case RAIL_WMSZ_TOPRIGHT: //0x5
				direction = _NET_WM_MOVERESIZE_SIZE_TOPRIGHT;
				x = movesize->posX;
				y = movesize->posY;
				break;

			case RAIL_WMSZ_BOTTOM: //0x6
				direction = _NET_WM_MOVERESIZE_SIZE_BOTTOM;
				x = movesize->posX;
				y = movesize->posY;
				break;

			case RAIL_WMSZ_BOTTOMLEFT: //0x7
				direction = _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT;
				x = movesize->posX;
				y = movesize->posY;
				break;

			case RAIL_WMSZ_BOTTOMRIGHT: //0x8
				direction = _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT;
				x = movesize->posX;
				y = movesize->posY;
				break;

			case RAIL_WMSZ_MOVE: //0x9
				direction = _NET_WM_MOVERESIZE_MOVE;
				XTranslateCoordinates(xfc->display, xfw->handle,
									  RootWindowOfScreen(xfc->screen),
									  movesize->posX, movesize->posY, &x, &y, &child_window);
				break;

			case RAIL_WMSZ_KEYMOVE: //0xA
				direction = _NET_WM_MOVERESIZE_MOVE_KEYBOARD;
				x = movesize->posX;
				y = movesize->posY;
				/* FIXME: local keyboard moves not working */
				return;

			case RAIL_WMSZ_KEYSIZE: //0xB
				direction = _NET_WM_MOVERESIZE_SIZE_KEYBOARD;
				x = movesize->posX;
				y = movesize->posY;
				/* FIXME: local keyboard moves not working */
				return;
		}

		if (movesize->isMoveSizeStart)
		{
			xf_StartLocalMoveSize(xfc, xfw, direction, x, y);
		}
		else
		{
			xf_EndLocalMoveSize(xfc, xfw);
		}
	}
}