void xf_create_window(xfContext* xfc) { XEvent xevent; int width, height; char* windowTitle; ZeroMemory(&xevent, sizeof(xevent)); width = xfc->width; height = xfc->height; if (!xfc->remote_app) { xfc->attribs.background_pixel = BlackPixelOfScreen(xfc->screen); xfc->attribs.border_pixel = WhitePixelOfScreen(xfc->screen); xfc->attribs.backing_store = xfc->primary ? NotUseful : Always; xfc->attribs.override_redirect = xfc->grab_keyboard ? xfc->fullscreen : False; xfc->attribs.colormap = xfc->colormap; xfc->attribs.bit_gravity = NorthWestGravity; xfc->attribs.win_gravity = NorthWestGravity; if (xfc->instance->settings->WindowTitle) { windowTitle = _strdup(xfc->instance->settings->WindowTitle); } else if (xfc->instance->settings->ServerPort == 3389) { windowTitle = malloc(1 + sizeof("FreeRDP: ") + strlen(xfc->instance->settings->ServerHostname)); sprintf(windowTitle, "FreeRDP: %s", xfc->instance->settings->ServerHostname); } else { windowTitle = malloc(1 + sizeof("FreeRDP: ") + strlen(xfc->instance->settings->ServerHostname) + sizeof(":00000")); sprintf(windowTitle, "FreeRDP: %s:%i", xfc->instance->settings->ServerHostname, xfc->instance->settings->ServerPort); } printf ("xfc->settings->Decorations=%d\n", xfc->settings->Decorations); xfc->window = xf_CreateDesktopWindow(xfc, windowTitle, width, height, xfc->settings->Decorations); free(windowTitle); if (xfc->fullscreen) xf_SetWindowFullscreen(xfc, xfc->window, xfc->fullscreen); xfc->unobscured = (xevent.xvisibility.state == VisibilityUnobscured); XSetWMProtocols(xfc->display, xfc->window->handle, &(xfc->WM_DELETE_WINDOW), 1); xfc->drawable = xfc->window->handle; } else { xfc->drawable = DefaultRootWindow(xfc->display); } }
void xf_create_window(xfInfo* xfi) { XEvent xevent; char* win_title; int width, height; width = xfi->width; height = xfi->height; xfi->attribs.background_pixel = BlackPixelOfScreen(xfi->screen); xfi->attribs.border_pixel = WhitePixelOfScreen(xfi->screen); xfi->attribs.backing_store = xfi->primary ? NotUseful : Always; xfi->attribs.override_redirect = xfi->fullscreen; xfi->attribs.colormap = xfi->colormap; xfi->attribs.bit_gravity = ForgetGravity; xfi->attribs.win_gravity = StaticGravity; if (xfi->instance->settings->window_title != NULL) { win_title = xstrdup(xfi->instance->settings->window_title); } else if (xfi->instance->settings->port == 3389) { win_title = xmalloc(1 + sizeof("FreeRDP: ") + strlen(xfi->instance->settings->hostname)); sprintf(win_title, "FreeRDP: %s", xfi->instance->settings->hostname); } else { win_title = xmalloc(1 + sizeof("FreeRDP: ") + strlen(xfi->instance->settings->hostname) + sizeof(":00000")); sprintf(win_title, "FreeRDP: %s:%i", xfi->instance->settings->hostname, xfi->instance->settings->port); } xfi->window = xf_CreateDesktopWindow(xfi, win_title, width, height, xfi->decorations); xfree(win_title); if (xfi->parent_window) XReparentWindow(xfi->display, xfi->window->handle, xfi->parent_window, 0, 0); if (xfi->fullscreen) xf_SetWindowFullscreen(xfi, xfi->window, xfi->fullscreen); /* wait for VisibilityNotify */ do { XMaskEvent(xfi->display, VisibilityChangeMask, &xevent); } while (xevent.type != VisibilityNotify); xfi->unobscured = (xevent.xvisibility.state == VisibilityUnobscured); XSetWMProtocols(xfi->display, xfi->window->handle, &(xfi->WM_DELETE_WINDOW), 1); xfi->drawable = xfi->window->handle; }
void xf_create_window(xfInfo* xfi) { XEvent xevent; char* title; char* hostname; int width, height; width = xfi->width; height = xfi->height; xfi->attribs.background_pixel = BlackPixelOfScreen(xfi->screen); xfi->attribs.border_pixel = WhitePixelOfScreen(xfi->screen); xfi->attribs.backing_store = xfi->primary ? NotUseful : Always; xfi->attribs.override_redirect = xfi->fullscreen; xfi->attribs.colormap = xfi->colormap; if (xfi->remote_app != True) { if (xfi->fullscreen) { width = xfi->fullscreen ? WidthOfScreen(xfi->screen) : xfi->width; height = xfi->fullscreen ? HeightOfScreen(xfi->screen) : xfi->height; } hostname = xfi->instance->settings->hostname; title = xmalloc(sizeof("FreeRDP: ") + strlen(hostname)); sprintf(title, "FreeRDP: %s", hostname); xfi->window = xf_CreateDesktopWindow(xfi, title, width, height, xfi->decorations); xfree(title); if (xfi->fullscreen) xf_SetWindowFullscreen(xfi, xfi->window, xfi->fullscreen); /* wait for VisibilityNotify */ do { XMaskEvent(xfi->display, VisibilityChangeMask, &xevent); } while (xevent.type != VisibilityNotify); xfi->unobscured = (xevent.xvisibility.state == VisibilityUnobscured); XSetWMProtocols(xfi->display, xfi->window->handle, &(xfi->WM_DELETE_WINDOW), 1); xfi->drawable = xfi->window->handle; } else { xfi->drawable = DefaultRootWindow(xfi->display); } }
void xf_toggle_fullscreen(xfContext* xfc) { WindowStateChangeEventArgs e; rdpContext* context = (rdpContext*) xfc; rdpSettings* settings = context->settings; xfc->fullscreen = (xfc->fullscreen) ? FALSE : TRUE; xfc->decorations = (xfc->fullscreen) ? FALSE : settings->Decorations; xf_SetWindowFullscreen(xfc, xfc->window, xfc->fullscreen); EventArgsInit(&e, "xfreerdp"); e.state = xfc->fullscreen ? FREERDP_WINDOW_STATE_FULLSCREEN : 0; PubSub_OnWindowStateChange(context->pubSub, context, &e); }
void xf_create_window(xfInfo* xfi) { XEvent xevent; char* win_title; int width, height; memset(&xevent, 0x00, sizeof(xevent)); width = xfi->width; height = xfi->height; xfi->attribs.background_pixel = BlackPixelOfScreen(xfi->screen); xfi->attribs.border_pixel = WhitePixelOfScreen(xfi->screen); xfi->attribs.backing_store = xfi->primary ? NotUseful : Always; xfi->attribs.override_redirect = xfi->fullscreen; xfi->attribs.colormap = xfi->colormap; xfi->attribs.bit_gravity = NorthWestGravity; xfi->attribs.win_gravity = NorthWestGravity; if (xfi->instance->settings->WindowTitle != NULL) { win_title = _strdup(xfi->instance->settings->WindowTitle); } else if (xfi->instance->settings->ServerPort == 3389) { win_title = malloc(1 + sizeof("FreeRDP: ") + strlen(xfi->instance->settings->ServerHostname)); sprintf(win_title, "FreeRDP: %s", xfi->instance->settings->ServerHostname); } else { win_title = malloc(1 + sizeof("FreeRDP: ") + strlen(xfi->instance->settings->ServerHostname) + sizeof(":00000")); sprintf(win_title, "FreeRDP: %s:%i", xfi->instance->settings->ServerHostname, xfi->instance->settings->ServerPort); } xfi->window = xf_CreateDesktopWindow(xfi, win_title, width, height, xfi->decorations); free(win_title); if (xfi->fullscreen) xf_SetWindowFullscreen(xfi, xfi->window, xfi->fullscreen); xfi->unobscured = (xevent.xvisibility.state == VisibilityUnobscured); XSetWMProtocols(xfi->display, xfi->window->handle, &(xfi->WM_DELETE_WINDOW), 1); xfi->drawable = xfi->window->handle; }
BOOL xf_create_window(xfContext* xfc) { XGCValues gcv; XEvent xevent; int width, height; char* windowTitle; rdpSettings* settings = xfc->settings; ZeroMemory(&xevent, sizeof(xevent)); width = xfc->sessionWidth; height = xfc->sessionHeight; if (!xfc->hdc) if (!(xfc->hdc = gdi_CreateDC(CLRBUF_32BPP, xfc->bpp))) return FALSE; if (!xfc->remote_app) { xfc->attribs.background_pixel = BlackPixelOfScreen(xfc->screen); xfc->attribs.border_pixel = WhitePixelOfScreen(xfc->screen); xfc->attribs.backing_store = xfc->primary ? NotUseful : Always; xfc->attribs.override_redirect = False; xfc->attribs.colormap = xfc->colormap; xfc->attribs.bit_gravity = NorthWestGravity; xfc->attribs.win_gravity = NorthWestGravity; #ifdef WITH_XRENDER xfc->offset_x = 0; xfc->offset_y = 0; #endif if (settings->WindowTitle) { windowTitle = _strdup(settings->WindowTitle); if (!windowTitle) return FALSE; } else if (settings->ServerPort == 3389) { windowTitle = malloc(1 + sizeof("FreeRDP: ") + strlen(settings->ServerHostname)); sprintf(windowTitle, "FreeRDP: %s", settings->ServerHostname); } else { windowTitle = malloc(1 + sizeof("FreeRDP: ") + strlen(settings->ServerHostname) + sizeof(":00000")); sprintf(windowTitle, "FreeRDP: %s:%i", settings->ServerHostname, settings->ServerPort); } #ifdef WITH_XRENDER if (settings->SmartSizing && !xfc->fullscreen) { if (settings->SmartSizingWidth) width = settings->SmartSizingWidth; if (settings->SmartSizingHeight) height = settings->SmartSizingHeight; xfc->scaledWidth = width; xfc->scaledHeight = height; } #endif xfc->window = xf_CreateDesktopWindow(xfc, windowTitle, width, height); free(windowTitle); if (xfc->fullscreen) xf_SetWindowFullscreen(xfc, xfc->window, xfc->fullscreen); xfc->unobscured = (xevent.xvisibility.state == VisibilityUnobscured); XSetWMProtocols(xfc->display, xfc->window->handle, &(xfc->WM_DELETE_WINDOW), 1); xfc->drawable = xfc->window->handle; } else { xfc->drawable = DefaultRootWindow(xfc->display); } ZeroMemory(&gcv, sizeof(gcv)); if (xfc->modifierMap) XFreeModifiermap(xfc->modifierMap); xfc->modifierMap = XGetModifierMapping(xfc->display); if (!xfc->gc) xfc->gc = XCreateGC(xfc->display, xfc->drawable, GCGraphicsExposures, &gcv); if (!xfc->primary) xfc->primary = XCreatePixmap(xfc->display, xfc->drawable, xfc->sessionWidth, xfc->sessionHeight, xfc->depth); xfc->drawing = xfc->primary; if (!xfc->bitmap_mono) xfc->bitmap_mono = XCreatePixmap(xfc->display, xfc->drawable, 8, 8, 1); if (!xfc->gc_mono) xfc->gc_mono = XCreateGC(xfc->display, xfc->bitmap_mono, GCGraphicsExposures, &gcv); XSetFunction(xfc->display, xfc->gc, GXcopy); XSetFillStyle(xfc->display, xfc->gc, FillSolid); XSetForeground(xfc->display, xfc->gc, BlackPixelOfScreen(xfc->screen)); XFillRectangle(xfc->display, xfc->primary, xfc->gc, 0, 0, xfc->sessionWidth, xfc->sessionHeight); XFlush(xfc->display); if (!xfc->image) xfc->image = XCreateImage(xfc->display, xfc->visual, xfc->depth, ZPixmap, 0, (char*) xfc->primary_buffer, xfc->sessionWidth, xfc->sessionHeight, xfc->scanline_pad, 0); return TRUE; }