Merge pull request #616 from sunds/master

RemoteApp fixes
This commit is contained in:
Marc-André Moreau 2012-05-25 16:29:07 -07:00
commit de826c3dd2
6 changed files with 140 additions and 139 deletions

View File

@ -69,12 +69,7 @@ static const char* const X11_EVENT_STRINGS[] =
};
#endif
void xf_send_mouse_motion_event(rdpInput* input, boolean down, uint32 button, uint16 x, uint16 y)
{
input->MouseEvent(input, PTR_FLAGS_MOVE, x, y);
}
boolean xf_event_Expose(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_Expose(xfInfo* xfi, XEvent* event, boolean app)
{
int x, y;
int w, h;
@ -106,55 +101,51 @@ boolean xf_event_Expose(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_VisibilityNotify(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_VisibilityNotify(xfInfo* xfi, XEvent* event, boolean app)
{
xfi->unobscured = event->xvisibility.state == VisibilityUnobscured;
return true;
}
boolean xf_event_MotionNotify(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_MotionNotify(xfInfo* xfi, XEvent* event, boolean app)
{
rdpInput* input;
int x, y;
Window childWindow;
input = xfi->instance->input;
x = event->xmotion.x;
y = event->xmotion.y;
if (app != true)
if (xfi->mouse_motion != true)
{
if (xfi->mouse_motion != true)
{
if ((event->xmotion.state & (Button1Mask | Button2Mask | Button3Mask)) == 0)
return true;
}
if ((event->xmotion.state & (Button1Mask | Button2Mask | Button3Mask)) == 0)
return true;
}
input->MouseEvent(input, PTR_FLAGS_MOVE, event->xmotion.x, event->xmotion.y);
if (xfi->fullscreen)
XSetInputFocus(xfi->display, xfi->window->handle, RevertToPointerRoot, CurrentTime);
if (app)
{
// Translate to desktop coordinates
XTranslateCoordinates(xfi->display, event->xmotion.window,
RootWindowOfScreen(xfi->screen),
x, y, &x, &y, &childWindow);
}
else if (xfi->mouse_motion == true)
input->MouseEvent(input, PTR_FLAGS_MOVE, x, y);
if (xfi->fullscreen)
{
rdpWindow* window;
int x = event->xmotion.x;
int y = event->xmotion.y;
rdpRail* rail = ((rdpContext*) xfi->context)->rail;
window = window_list_get_by_extra_id(rail->list, (void*) event->xmotion.window);
if (window != NULL)
{
x += window->windowOffsetX;
y += window->windowOffsetY;
input->MouseEvent(input, PTR_FLAGS_MOVE, x, y);
}
XSetInputFocus(xfi->display, xfi->window->handle, RevertToPointerRoot, CurrentTime);
}
return true;
}
boolean xf_event_ButtonPress(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_ButtonPress(xfInfo* xfi, XEvent* event, boolean app)
{
uint16 x, y;
uint16 flags;
int x, y;
int flags;
Window childWindow;
boolean wheel;
boolean extended;
rdpInput* input;
@ -232,16 +223,10 @@ boolean xf_event_ButtonPress(xfInfo* xfi, XEvent* event, boolean app)
{
if (app)
{
rdpWindow* window;
rdpRail* rail = ((rdpContext*) xfi->context)->rail;
window = window_list_get_by_extra_id(rail->list, (void*) event->xbutton.window);
if (window != NULL)
{
x += window->windowOffsetX;
y += window->windowOffsetY;
}
// Translate to desktop coordinates
XTranslateCoordinates(xfi->display, event->xmotion.window,
RootWindowOfScreen(xfi->screen),
x, y, &x, &y, &childWindow);
}
if (extended)
@ -254,10 +239,11 @@ boolean xf_event_ButtonPress(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_ButtonRelease(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_ButtonRelease(xfInfo* xfi, XEvent* event, boolean app)
{
uint16 x, y;
uint16 flags;
int x, y;
int flags;
Window childWindow;
boolean extended;
rdpInput* input;
@ -315,16 +301,10 @@ boolean xf_event_ButtonRelease(xfInfo* xfi, XEvent* event, boolean app)
{
if (app)
{
rdpWindow* window;
rdpRail* rail = ((rdpContext*) xfi->context)->rail;
window = window_list_get_by_extra_id(rail->list, (void*) event->xbutton.window);
if (window != NULL)
{
x += window->windowOffsetX;
y += window->windowOffsetY;
}
// Translate to desktop coordinates
XTranslateCoordinates(xfi->display, event->xmotion.window,
RootWindowOfScreen(xfi->screen),
x, y, &x, &y, &childWindow);
}
if (extended)
@ -336,7 +316,7 @@ boolean xf_event_ButtonRelease(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_KeyPress(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_KeyPress(xfInfo* xfi, XEvent* event, boolean app)
{
KeySym keysym;
char str[256];
@ -353,7 +333,7 @@ boolean xf_event_KeyPress(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_KeyRelease(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_KeyRelease(xfInfo* xfi, XEvent* event, boolean app)
{
XEvent next_event;
@ -375,7 +355,7 @@ boolean xf_event_KeyRelease(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_FocusIn(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_FocusIn(xfInfo* xfi, XEvent* event, boolean app)
{
if (event->xfocus.mode == NotifyGrab)
return true;
@ -396,7 +376,7 @@ boolean xf_event_FocusIn(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_FocusOut(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_FocusOut(xfInfo* xfi, XEvent* event, boolean app)
{
if (event->xfocus.mode == NotifyUngrab)
return true;
@ -412,7 +392,7 @@ boolean xf_event_FocusOut(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_MappingNotify(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_MappingNotify(xfInfo* xfi, XEvent* event, boolean app)
{
if (event->xmapping.request == MappingModifier)
{
@ -423,7 +403,7 @@ boolean xf_event_MappingNotify(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_ClientMessage(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_ClientMessage(xfInfo* xfi, XEvent* event, boolean app)
{
if ((event->xclient.message_type == xfi->WM_PROTOCOLS)
&& ((Atom) event->xclient.data.l[0] == xfi->WM_DELETE_WINDOW))
@ -453,7 +433,7 @@ boolean xf_event_ClientMessage(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_EnterNotify(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_EnterNotify(xfInfo* xfi, XEvent* event, boolean app)
{
if (app != true)
{
@ -484,7 +464,7 @@ boolean xf_event_EnterNotify(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_LeaveNotify(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_LeaveNotify(xfInfo* xfi, XEvent* event, boolean app)
{
if (app != true)
{
@ -495,7 +475,7 @@ boolean xf_event_LeaveNotify(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_ConfigureNotify(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_ConfigureNotify(xfInfo* xfi, XEvent* event, boolean app)
{
rdpWindow* window;
rdpRail* rail = ((rdpContext*) xfi->context)->rail;
@ -533,7 +513,7 @@ boolean xf_event_ConfigureNotify(xfInfo* xfi, XEvent* event, boolean app)
return True;
}
boolean xf_event_MapNotify(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_MapNotify(xfInfo* xfi, XEvent* event, boolean app)
{
rdpWindow* window;
rdpRail* rail = ((rdpContext*) xfi->context)->rail;
@ -554,7 +534,7 @@ boolean xf_event_MapNotify(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_UnmapNotify(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_UnmapNotify(xfInfo* xfi, XEvent* event, boolean app)
{
rdpWindow* window;
rdpRail* rail = ((rdpContext*) xfi->context)->rail;
@ -575,7 +555,7 @@ boolean xf_event_UnmapNotify(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_SelectionNotify(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_SelectionNotify(xfInfo* xfi, XEvent* event, boolean app)
{
if (app != true)
{
@ -586,7 +566,7 @@ boolean xf_event_SelectionNotify(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_SelectionRequest(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_SelectionRequest(xfInfo* xfi, XEvent* event, boolean app)
{
if (app != true)
{
@ -597,7 +577,7 @@ boolean xf_event_SelectionRequest(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_SelectionClear(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_SelectionClear(xfInfo* xfi, XEvent* event, boolean app)
{
if (app != true)
{
@ -608,7 +588,7 @@ boolean xf_event_SelectionClear(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_PropertyNotify(xfInfo* xfi, XEvent* event, boolean app)
static boolean xf_event_PropertyNotify(xfInfo* xfi, XEvent* event, boolean app)
{
if (app != true)
{
@ -619,7 +599,7 @@ boolean xf_event_PropertyNotify(xfInfo* xfi, XEvent* event, boolean app)
return true;
}
boolean xf_event_suppress_events(xfInfo *xfi, rdpWindow *window, XEvent*event)
static boolean xf_event_suppress_events(xfInfo *xfi, rdpWindow *window, XEvent*event)
{
if (! xfi->remote_app)
return false;

View File

@ -86,7 +86,7 @@ void xf_rail_paint(xfInfo* xfi, rdpRail* rail, sint32 uleft, sint32 utop, uint32
}
}
void xf_rail_CreateWindow(rdpRail* rail, rdpWindow* window)
static void xf_rail_CreateWindow(rdpRail* rail, rdpWindow* window)
{
xfInfo* xfi;
xfWindow* xfw;
@ -102,13 +102,13 @@ void xf_rail_CreateWindow(rdpRail* rail, rdpWindow* window)
xf_SetWindowStyle(xfi, xfw, window->style, window->extendedStyle);
XStoreName(xfi->display, xfw->handle, window->title);
xf_SetWindowText(xfi, xfw, window->title);
window->extra = (void*) xfw;
window->extraId = (void*) xfw->handle;
}
void xf_rail_MoveWindow(rdpRail* rail, rdpWindow* window)
static void xf_rail_MoveWindow(rdpRail* rail, rdpWindow* window)
{
xfInfo* xfi;
xfWindow* xfw;
@ -116,21 +116,12 @@ void xf_rail_MoveWindow(rdpRail* rail, rdpWindow* window)
xfi = (xfInfo*) rail->extra;
xfw = (xfWindow*) window->extra;
// Do nothing if window is already in the correct position
if ( xfw->left == window->windowOffsetX &&
xfw->top == window->windowOffsetY &&
xfw->width == window->windowWidth &&
xfw->height == window->windowHeight)
{
return;
}
xf_MoveWindow((xfInfo*) rail->extra, xfw,
window->windowOffsetX, window->windowOffsetY,
window->windowWidth, window->windowHeight);
xf_MoveWindow(xfi, xfw,
window->windowOffsetX, window->windowOffsetY,
window->windowWidth, window->windowHeight);
}
void xf_rail_ShowWindow(rdpRail* rail, rdpWindow* window, uint8 state)
static void xf_rail_ShowWindow(rdpRail* rail, rdpWindow* window, uint8 state)
{
xfInfo* xfi;
xfWindow* xfw;
@ -138,10 +129,10 @@ void xf_rail_ShowWindow(rdpRail* rail, rdpWindow* window, uint8 state)
xfi = (xfInfo*) rail->extra;
xfw = (xfWindow*) window->extra;
xf_ShowWindow((xfInfo*) rail->extra, xfw, state);
xf_ShowWindow(xfi, xfw, state);
}
void xf_rail_SetWindowText(rdpRail* rail, rdpWindow* window)
static void xf_rail_SetWindowText(rdpRail* rail, rdpWindow* window)
{
xfInfo* xfi;
xfWindow* xfw;
@ -149,10 +140,10 @@ void xf_rail_SetWindowText(rdpRail* rail, rdpWindow* window)
xfi = (xfInfo*) rail->extra;
xfw = (xfWindow*) window->extra;
XStoreName(xfi->display, xfw->handle, window->title);
xf_SetWindowText(xfi, xfw, window->title);
}
void xf_rail_SetWindowIcon(rdpRail* rail, rdpWindow* window, rdpIcon* icon)
static void xf_rail_SetWindowIcon(rdpRail* rail, rdpWindow* window, rdpIcon* icon)
{
xfInfo* xfi;
xfWindow* xfw;
@ -166,7 +157,7 @@ void xf_rail_SetWindowIcon(rdpRail* rail, rdpWindow* window, rdpIcon* icon)
xf_SetWindowIcon(xfi, xfw, icon);
}
void xf_rail_SetWindowRects(rdpRail* rail, rdpWindow* window)
static void xf_rail_SetWindowRects(rdpRail* rail, rdpWindow* window)
{
xfInfo* xfi;
xfWindow* xfw;
@ -177,7 +168,7 @@ void xf_rail_SetWindowRects(rdpRail* rail, rdpWindow* window)
xf_SetWindowRects(xfi, xfw, window->windowRects, window->numWindowRects);
}
void xf_rail_SetWindowVisibilityRects(rdpRail* rail, rdpWindow* window)
static void xf_rail_SetWindowVisibilityRects(rdpRail* rail, rdpWindow* window)
{
xfInfo* xfi;
xfWindow* xfw;
@ -188,7 +179,7 @@ void xf_rail_SetWindowVisibilityRects(rdpRail* rail, rdpWindow* window)
xf_SetWindowVisibilityRects(xfi, xfw, window->windowRects, window->numWindowRects);
}
void xf_rail_DestroyWindow(rdpRail* rail, rdpWindow* window)
static void xf_rail_DestroyWindow(rdpRail* rail, rdpWindow* window)
{
xfWindow* xfw;
xfw = (xfWindow*) window->extra;
@ -312,34 +303,43 @@ void xf_rail_end_local_move(xfInfo* xfi, rdpWindow *window)
xfWindow* xfw;
rdpChannels* channels;
RAIL_WINDOW_MOVE_ORDER window_move;
int x,y;
rdpInput* input = xfi->instance->input;
int x,y;
Window root_window;
Window child_window;
unsigned int mask;
int child_x;
int child_y;
xfw = (xfWindow*) window->extra;
channels = xfi->_context->channels;
// Send RDP client event to inform RDP server
window_move.windowId = window->windowId;
window_move.left = xfw->left;
window_move.top = xfw->top;
window_move.right = xfw->right + 1; // In the update to RDP the position is one past the window
window_move.bottom = xfw->bottom + 1;
DEBUG_X11_LMS("window=0x%X rc={l=%d t=%d r=%d b=%d} w=%d h=%d",
(uint32) xfw->handle,
xfw->left, xfw->top, xfw->right, xfw->bottom,
xfw->width, xfw->height);
xf_send_rail_client_event(channels, RDP_EVENT_TYPE_RAIL_CLIENT_WINDOW_MOVE, &window_move);
/*
* For keyboard moves send and explicit update to RDP server
*/
window_move.windowId = window->windowId;
window_move.left = xfw->left;
window_move.top = xfw->top;
window_move.right = xfw->right + 1; // The update to RDP the position is one past the window
window_move.bottom = xfw->bottom + 1;
// Send synthetic button up event to the RDP server. This is per the RDP spec to
// indicate a local move has finished.
xf_send_rail_client_event(channels,
RDP_EVENT_TYPE_RAIL_CLIENT_WINDOW_MOVE, &window_move);
/*
* Simulate button up at new position to end the local move (per RDP spec)
*/
x = xfw->left + xfw->local_move.window_x;
y = xfw->top + xfw->local_move.window_y;
XQueryPointer(xfi->display, xfw->handle,
&root_window, &child_window,
&x, &y, &child_x, &child_y, &mask);
input->MouseEvent(input, PTR_FLAGS_BUTTON1, x, y);
// Proactively update the RAIL window dimensions. There is a race condition where
// we can start to receive GDI orders for the new window dimensions before we
// receive the RAIL ORDER for the new window size. This avoids that race condition.
@ -531,12 +531,14 @@ void xf_process_rail_server_localmovesize_event(xfInfo* xfi, rdpChannels* channe
direction = _NET_WM_MOVERESIZE_MOVE_KEYBOARD;
x = movesize->posX;
y = movesize->posY;
break;
/* FIXME: local keyboard moves not working */
return;
case RAIL_WMSZ_KEYSIZE: //0xB
direction = _NET_WM_MOVERESIZE_SIZE_KEYBOARD;
x = movesize->posX;
y = movesize->posY;
break;
/* FIXME: local keyboard moves not working */
return;
}
if (movesize->isMoveSizeStart)

View File

@ -231,22 +231,26 @@ void xf_SetWindowStyle(xfInfo* xfi, xfWindow* window, uint32 style, uint32 ex_st
if ((ex_style & WS_EX_TOPMOST) || (ex_style & WS_EX_TOOLWINDOW))
{
/*
* These include tool tips, dropdown menus, etc. These won't work
* correctly if the local window manager resizes or moves them.
* Set override redirect to prevent this from occurring.
* Tooltips and menu items should be unmanaged windows
* (called "override redirect" in X windows parlance)
* If they are managed, there are issues with window focus that
* cause the windows to behave improperly. For example, a mouse
* press will dismiss a drop-down menu because the RDP server
* sees that as a focus out event from the window owning the
* dropdown.
*/
XSetWindowAttributes attrs;
attrs.override_redirect = True;
XChangeWindowAttributes(xfi->display, window->handle, CWOverrideRedirect, &attrs);
window->is_transient = true;
xf_SetWindowUnlisted(xfi, window);
window_type = xfi->_NET_WM_WINDOW_TYPE_POPUP;
}
else if (style & WS_POPUP)
{
/* this includes dialogs, popups, etc, that need to be full-fledged windows */
window->is_transient = true;
window_type = xfi->_NET_WM_WINDOW_TYPE_DIALOG;
xf_SetWindowUnlisted(xfi, window);
}
@ -260,6 +264,11 @@ void xf_SetWindowStyle(xfInfo* xfi, xfWindow* window, uint32 style, uint32 ex_st
}
void xf_SetWindowText(xfInfo *xfi, xfWindow* window, char *name)
{
XStoreName(xfi->display, window->handle, name);
}
xfWindow* xf_CreateDesktopWindow(xfInfo* xfi, char* name, int width, int height, boolean decorations)
{
xfWindow* window;
@ -315,8 +324,10 @@ xfWindow* xf_CreateDesktopWindow(xfInfo* xfi, char* name, int width, int height,
XSelectInput(xfi->display, window->handle, input_mask);
XMapWindow(xfi->display, window->handle);
//NOTE: This must be done here to handle reparenting the window, so that we dont miss the event and hang waiting for the next one
/* wait for VisibilityNotify */
/*
* NOTE: This must be done here to handle reparenting the window,
* so that we dont miss the event and hang waiting for the next one
*/
do
{
XMaskEvent(xfi->display, VisibilityChangeMask, &xevent);
@ -324,7 +335,8 @@ xfWindow* xf_CreateDesktopWindow(xfInfo* xfi, char* name, int width, int height,
while (xevent.type != VisibilityNotify);
}
XStoreName(xfi->display, window->handle, name);
xf_SetWindowText(xfi, window, name);
return window;
}
@ -419,8 +431,8 @@ xfWindow* xf_CreateWindow(xfInfo* xfi, rdpWindow* wnd, int x, int y, int width,
(uint32) window->handle, window->left, window->top, window->right, window->bottom,
window->width, window->height, wnd->windowId);
xf_SetWindowDecorations(xfi, window, window->decorations);
xf_SetWindowStyle(xfi, window, wnd->style, wnd->extendedStyle);
memset(&gcv, 0, sizeof(gcv));
window->gc = XCreateGC(xfi->display, window->handle, GCGraphicsExposures, &gcv);
class_hints = XAllocClassHint();
@ -448,11 +460,14 @@ xfWindow* xf_CreateWindow(xfInfo* xfi, rdpWindow* wnd, int x, int y, int width,
ColormapChangeMask | OwnerGrabButtonMask;
XSelectInput(xfi->display, window->handle, input_mask);
xf_SetWindowDecorations(xfi, window, window->decorations);
xf_SetWindowStyle(xfi, window, wnd->style, wnd->extendedStyle);
xf_ShowWindow(xfi, window, WINDOW_SHOW);
XMapWindow(xfi->display, window->handle);
memset(&gcv, 0, sizeof(gcv));
window->gc = XCreateGC(xfi->display, window->handle, GCGraphicsExposures, &gcv);
/* Move doesn't seem to work until window is mapped. */
xf_MoveWindow(xfi, window, x, y, width, height);
return window;
@ -486,8 +501,6 @@ void xf_SetWindowMinMaxInfo(xfInfo* xfi, xfWindow* window,
void xf_StartLocalMoveSize(xfInfo* xfi, xfWindow* window, int direction, int x, int y)
{
Window child_window;
if (window->local_move.state != LMS_NOT_ACTIVE)
return;
@ -499,17 +512,14 @@ void xf_StartLocalMoveSize(xfInfo* xfi, xfWindow* window, int direction, int x,
window->window->windowOffsetX, window->window->windowOffsetY,
window->window->windowWidth, window->window->windowHeight, x, y);
/*
* Save original mouse location relative to root. This will be needed
* to end local move to RDP server and/or X server
*/
window->local_move.root_x = x;
window->local_move.root_y = y;
window->local_move.state = LMS_STARTING;
XTranslateCoordinates(xfi->display, RootWindowOfScreen(xfi->screen), window->handle,
window->local_move.root_x,
window->local_move.root_y,
&window->local_move.window_x,
&window->local_move.window_y,
&child_window);
XUngrabPointer(xfi->display, CurrentTime);
xf_SendClientEvent(xfi, window,
@ -614,6 +624,10 @@ void xf_ShowWindow(xfInfo* xfi, xfWindow* window, uint8 state)
case WINDOW_SHOW:
XMapWindow(xfi->display, window->handle);
if (window->is_transient)
{
xf_SetWindowUnlisted(xfi, window);
}
break;
}
@ -660,6 +674,9 @@ void xf_SetWindowRects(xfInfo* xfi, xfWindow* window, RECTANGLE_16* rects, int n
int i;
XRectangle* xrects;
if (nrects == 0)
return;
xrects = xmalloc(sizeof(XRectangle) * nrects);
for (i = 0; i < nrects; i++)
@ -682,6 +699,9 @@ void xf_SetWindowVisibilityRects(xfInfo* xfi, xfWindow* window, RECTANGLE_16* re
int i;
XRectangle* xrects;
if (nrects == 0)
return;
xrects = xmalloc(sizeof(XRectangle) * nrects);
for (i = 0; i < nrects; i++)
@ -693,7 +713,7 @@ void xf_SetWindowVisibilityRects(xfInfo* xfi, xfWindow* window, RECTANGLE_16* re
}
#ifdef WITH_XEXT
//XShapeCombineRectangles(xfi->display, window->handle, ShapeBounding, 0, 0, xrects, nrects, ShapeSet, 0);
XShapeCombineRectangles(xfi->display, window->handle, ShapeBounding, 0, 0, xrects, nrects, ShapeSet, 0);
#endif
xfree(xrects);

View File

@ -91,6 +91,7 @@ xfWindow* xf_CreateDesktopWindow(xfInfo* xfi, char* name, int width, int height,
void xf_ResizeDesktopWindow(xfInfo* xfi, xfWindow* window, int width, int height);
xfWindow* xf_CreateWindow(xfInfo* xfi, rdpWindow* wnd, int x, int y, int width, int height, uint32 id);
void xf_SetWindowText(xfInfo *xfi, xfWindow* window, char *name);
void xf_MoveWindow(xfInfo* xfi, xfWindow* window, int x, int y, int width, int height);
void xf_ShowWindow(xfInfo* xfi, xfWindow* window, uint8 state);
void xf_SetWindowIcon(xfInfo* xfi, xfWindow* window, rdpIcon* icon);

View File

@ -29,7 +29,6 @@
#=============================================================================
find_path(XV_INCLUDE_DIR NAMES X11/extensions/Xv.h
PATH_SUFFIXES X11/extensions
DOC "The Xv include directory"
)

View File

@ -43,7 +43,6 @@ struct rdp_window
rdpWindow* next;
uint32 windowId;
uint32 ownerWindowId;
rdpWindow* ownerWindow;
uint32 style;
uint32 extendedStyle;
uint8 showState;