Lines Matching +full:display +full:- +full:backend
2 * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
21 * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
41 #include <dmx-config.h>
119 * back-end servers. Some of this code is based on _XPrintDefaultError
122 dmxErrorHandler(Display * dpy, XErrorEvent * ev) in dmxErrorHandler()
126 * length-limited calls. */ in dmxErrorHandler()
134 XGetErrorText(dpy, ev->error_code, buf, sizeof(buf)); in dmxErrorHandler()
138 if (ev->request_code < 128) { in dmxErrorHandler()
139 snprintf(request, sizeof(request), "%d", ev->request_code); in dmxErrorHandler()
143 for (ext = dpy->ext_procs; in dmxErrorHandler()
144 ext && ext->codes.major_opcode != ev->request_code; in dmxErrorHandler()
145 ext = ext->next); in dmxErrorHandler()
147 strlcpy(buf, ext->name, sizeof(buf)); in dmxErrorHandler()
152 ev->request_code, buf); in dmxErrorHandler()
155 if (ev->request_code >= 128 && ext) { in dmxErrorHandler()
156 snprintf(request, sizeof(request), "%d", ev->request_code); in dmxErrorHandler()
157 snprintf(request, sizeof(request), "%s.%d", ext->name, ev->minor_code); in dmxErrorHandler()
160 ev->minor_code, buf); in dmxErrorHandler()
164 switch (ev->error_code) { in dmxErrorHandler()
167 (unsigned int) ev->resourceid); in dmxErrorHandler()
171 (unsigned int) ev->resourceid); in dmxErrorHandler()
175 (unsigned int) ev->resourceid); in dmxErrorHandler()
181 (unsigned int) ev->serial); in dmxErrorHandler()
183 (unsigned int) dpy->request); in dmxErrorHandler()
189 dmxNOPErrorHandler(Display * dpy, XErrorEvent * ev) in dmxNOPErrorHandler()
198 if (!(dmxScreen->beDisplay = XOpenDisplay(dmxScreen->name))) in dmxOpenDisplay()
217 Display *dpy = dmxScreen->beDisplay; in dmxPrintScreenInfo()
225 dmxLogOutput(dmxScreen, "Name of display: %s\n", DisplayString(dpy)); in dmxPrintScreenInfo()
235 int major = -1, minor = -1, patch = -1, subpatch = -1; in dmxPrintScreenInfo()
281 dmxLogOutput(dmxScreen, "Options: backing-store %s, save-unders %s\n", in dmxPrintScreenInfo()
286 (dmxScreen->WMRunningOnBE) ? "yes" : "no"); in dmxPrintScreenInfo()
288 if (dmxScreen->WMRunningOnBE) { in dmxPrintScreenInfo()
291 "-- colormaps not supported\n"); in dmxPrintScreenInfo()
300 Display *dpy = dmxScreen->beDisplay; in dmxGetScreenAttribs()
308 dmxScreen->beWidth = attribs.width; in dmxGetScreenAttribs()
309 dmxScreen->beHeight = attribs.height; in dmxGetScreenAttribs()
312 if (dmxScreen->scrnXSign < 0) { in dmxGetScreenAttribs()
313 if (dmxScreen->scrnWidth) { in dmxGetScreenAttribs()
314 dmxScreen->scrnX = (attribs.width - dmxScreen->scrnWidth in dmxGetScreenAttribs()
315 - dmxScreen->scrnX); in dmxGetScreenAttribs()
318 dmxScreen->scrnWidth = attribs.width - dmxScreen->scrnX; in dmxGetScreenAttribs()
319 dmxScreen->scrnX = 0; in dmxGetScreenAttribs()
322 if (dmxScreen->scrnYSign < 0) { in dmxGetScreenAttribs()
323 if (dmxScreen->scrnHeight) { in dmxGetScreenAttribs()
324 dmxScreen->scrnY = (attribs.height - dmxScreen->scrnHeight in dmxGetScreenAttribs()
325 - dmxScreen->scrnY); in dmxGetScreenAttribs()
328 dmxScreen->scrnHeight = attribs.height - dmxScreen->scrnY; in dmxGetScreenAttribs()
329 dmxScreen->scrnY = 0; in dmxGetScreenAttribs()
332 if (!dmxScreen->scrnWidth) in dmxGetScreenAttribs()
333 dmxScreen->scrnWidth = attribs.width - dmxScreen->scrnX; in dmxGetScreenAttribs()
334 if (!dmxScreen->scrnHeight) in dmxGetScreenAttribs()
335 dmxScreen->scrnHeight = attribs.height - dmxScreen->scrnY; in dmxGetScreenAttribs()
337 if (!dmxScreen->rootWidth) in dmxGetScreenAttribs()
338 dmxScreen->rootWidth = dmxScreen->scrnWidth; in dmxGetScreenAttribs()
339 if (!dmxScreen->rootHeight) in dmxGetScreenAttribs()
340 dmxScreen->rootHeight = dmxScreen->scrnHeight; in dmxGetScreenAttribs()
341 if (dmxScreen->rootWidth + dmxScreen->rootX > dmxScreen->scrnWidth) in dmxGetScreenAttribs()
342 dmxScreen->rootWidth = dmxScreen->scrnWidth - dmxScreen->rootX; in dmxGetScreenAttribs()
343 if (dmxScreen->rootHeight + dmxScreen->rootY > dmxScreen->scrnHeight) in dmxGetScreenAttribs()
344 dmxScreen->rootHeight = dmxScreen->scrnHeight - dmxScreen->rootY; in dmxGetScreenAttribs()
346 /* FIXME: Get these from the back-end server */ in dmxGetScreenAttribs()
347 dmxScreen->beXDPI = 75; in dmxGetScreenAttribs()
348 dmxScreen->beYDPI = 75; in dmxGetScreenAttribs()
350 dmxScreen->beDepth = attribs.depth; /* FIXME: verify that this in dmxGetScreenAttribs()
358 if (dmxScreen->beDepth <= 8) in dmxGetScreenAttribs()
359 dmxScreen->beBPP = 8; in dmxGetScreenAttribs()
360 else if (dmxScreen->beDepth <= 16) in dmxGetScreenAttribs()
361 dmxScreen->beBPP = 16; in dmxGetScreenAttribs()
363 dmxScreen->beBPP = 32; in dmxGetScreenAttribs()
366 /* get the majorOpcode for the back-end GLX extension */ in dmxGetScreenAttribs()
367 XQueryExtension(dpy, "GLX", &dmxScreen->glxMajorOpcode, in dmxGetScreenAttribs()
368 &dummy, &dmxScreen->glxErrorBase); in dmxGetScreenAttribs()
373 dmxScreen->scrnWidth, dmxScreen->scrnHeight, in dmxGetScreenAttribs()
374 dmxScreen->scrnX, dmxScreen->scrnY, in dmxGetScreenAttribs()
375 dmxScreen->beWidth, dmxScreen->beHeight, in dmxGetScreenAttribs()
376 dmxScreen->beDepth, dmxScreen->beBPP); in dmxGetScreenAttribs()
377 if (dmxScreen->beDepth == 8) in dmxGetScreenAttribs()
388 visinfo.screen = DefaultScreen(dmxScreen->beDisplay); in dmxGetVisualInfo()
389 dmxScreen->beVisuals = XGetVisualInfo(dmxScreen->beDisplay, in dmxGetVisualInfo()
391 &visinfo, &dmxScreen->beNumVisuals); in dmxGetVisualInfo()
393 dmxScreen->beDefVisualIndex = -1; in dmxGetVisualInfo()
396 for (i = 0; i < dmxScreen->beNumVisuals; i++) in dmxGetVisualInfo()
398 if (dmxScreen->beVisuals[i].class == defaultColorVisualClass) { in dmxGetVisualInfo()
400 if (dmxScreen->beVisuals[i].depth == dmxDepth) { in dmxGetVisualInfo()
401 dmxScreen->beDefVisualIndex = i; in dmxGetVisualInfo()
406 dmxScreen->beDefVisualIndex = i; in dmxGetVisualInfo()
411 else if (dmxScreen->beVisuals[i].depth == dmxDepth) { in dmxGetVisualInfo()
412 dmxScreen->beDefVisualIndex = i; in dmxGetVisualInfo()
418 XVisualIDFromVisual(DefaultVisual(dmxScreen->beDisplay, in dmxGetVisualInfo()
421 for (i = 0; i < dmxScreen->beNumVisuals; i++) in dmxGetVisualInfo()
422 if (visinfo.visualid == dmxScreen->beVisuals[i].visualid) { in dmxGetVisualInfo()
423 dmxScreen->beDefVisualIndex = i; in dmxGetVisualInfo()
428 for (i = 0; i < dmxScreen->beNumVisuals; i++) in dmxGetVisualInfo()
429 dmxLogVisual(dmxScreen, &dmxScreen->beVisuals[i], in dmxGetVisualInfo()
430 (i == dmxScreen->beDefVisualIndex)); in dmxGetVisualInfo()
432 return dmxScreen->beDefVisualIndex >= 0; in dmxGetVisualInfo()
440 dmxScreen->beNumDefColormaps = dmxScreen->beNumVisuals; in dmxGetColormaps()
441 dmxScreen->beDefColormaps = xallocarray(dmxScreen->beNumDefColormaps, in dmxGetColormaps()
442 sizeof(*dmxScreen->beDefColormaps)); in dmxGetColormaps()
444 for (i = 0; i < dmxScreen->beNumDefColormaps; i++) in dmxGetColormaps()
445 dmxScreen->beDefColormaps[i] = in dmxGetColormaps()
446 XCreateColormap(dmxScreen->beDisplay, in dmxGetColormaps()
447 DefaultRootWindow(dmxScreen->beDisplay), in dmxGetColormaps()
448 dmxScreen->beVisuals[i].visual, AllocNone); in dmxGetColormaps()
450 dmxScreen->beBlackPixel = BlackPixel(dmxScreen->beDisplay, in dmxGetColormaps()
451 DefaultScreen(dmxScreen->beDisplay)); in dmxGetColormaps()
452 dmxScreen->beWhitePixel = WhitePixel(dmxScreen->beDisplay, in dmxGetColormaps()
453 DefaultScreen(dmxScreen->beDisplay)); in dmxGetColormaps()
459 dmxScreen->beDepths = in dmxGetPixmapFormats()
460 XListDepths(dmxScreen->beDisplay, DefaultScreen(dmxScreen->beDisplay), in dmxGetPixmapFormats()
461 &dmxScreen->beNumDepths); in dmxGetPixmapFormats()
463 dmxScreen->bePixmapFormats = in dmxGetPixmapFormats()
464 XListPixmapFormats(dmxScreen->beDisplay, in dmxGetPixmapFormats()
465 &dmxScreen->beNumPixmapFormats); in dmxGetPixmapFormats()
475 pScreenInfo->imageByteOrder = ImageByteOrder(dmxScreen->beDisplay); in dmxSetPixmapFormats()
476 pScreenInfo->bitmapScanlineUnit = BitmapUnit(dmxScreen->beDisplay); in dmxSetPixmapFormats()
477 pScreenInfo->bitmapScanlinePad = BitmapPad(dmxScreen->beDisplay); in dmxSetPixmapFormats()
478 pScreenInfo->bitmapBitOrder = BitmapBitOrder(dmxScreen->beDisplay); in dmxSetPixmapFormats()
480 pScreenInfo->numPixmapFormats = 0; in dmxSetPixmapFormats()
481 for (i = 0; i < dmxScreen->beNumPixmapFormats; i++) { in dmxSetPixmapFormats()
482 bePixmapFormat = &dmxScreen->bePixmapFormats[i]; in dmxSetPixmapFormats()
483 for (j = 0; j < dmxScreen->beNumDepths; j++) in dmxSetPixmapFormats()
484 if ((bePixmapFormat->depth == 1) || in dmxSetPixmapFormats()
485 (bePixmapFormat->depth == dmxScreen->beDepths[j])) { in dmxSetPixmapFormats()
486 format = &pScreenInfo->formats[pScreenInfo->numPixmapFormats]; in dmxSetPixmapFormats()
488 format->depth = bePixmapFormat->depth; in dmxSetPixmapFormats()
489 format->bitsPerPixel = bePixmapFormat->bits_per_pixel; in dmxSetPixmapFormats()
490 format->scanlinePad = bePixmapFormat->scanline_pad; in dmxSetPixmapFormats()
492 pScreenInfo->numPixmapFormats++; in dmxSetPixmapFormats()
506 status = XGetWindowAttributes(dmxScreen->beDisplay, in dmxCheckForWM()
507 DefaultRootWindow(dmxScreen->beDisplay), in dmxCheckForWM()
509 dmxScreen->WMRunningOnBE = in dmxCheckForWM()
515 /** Initialize the display and collect relevant information about the
516 * display properties */
522 "dmxOpenDisplay: Unable to open display %s\n", dmxScreen->name); in dmxDisplayInit()
558 vendrel -= major * 100000000; in InitOutput()
560 vendrel -= minor * 1000000; in InitOutput()
562 vendrel -= year * 10000; in InitOutput()
564 vendrel -= month * 100; in InitOutput()
582 dmxLog(dmxWarning, "Display \"%s\" still open\n", in InitOutput()
597 /* Make sure that the command-line arguments are sane. */ in InitOutput()
605 "screen addition and removal. Please specify -noglxproxy\n"); in InitOutput()
607 "and -norender on the command line or in the configuration\n"); in InitOutput()
618 * sure we have at least one back-end display. */ in InitOutput()
621 dmxLog(dmxFatal, "InitOutput: no back-end displays found\n"); in InitOutput()
636 /* Open each display and gather information about it. */ in InitOutput()
655 * SIGTERM, so everything is OK for expected signals. --DD in InitOutput()
663 * map of the input devices empty is even more unexpected.) --RF in InitOutput()
668 /* Check if GLX extension exists on all back-end servers */ in InitOutput()
676 /* Tell dix layer about the backend displays */ in InitOutput()
683 * supported by the back-end server, and give that in InitOutput()
684 * configuration list to the glx layer - so that he will in InitOutput()
692 int (*oldErrorHandler) (Display *, XErrorEvent *); in InitOutput()
697 /* Get FBConfigs of the back-end server */ in InitOutput()
698 dmxScreen->fbconfigs = GetGLXFBConfigs(dmxScreen->beDisplay, in InitOutput()
699 dmxScreen->glxMajorOpcode, in InitOutput()
700 &dmxScreen->numFBConfigs); in InitOutput()
704 dmxScreen->glxVisuals = in InitOutput()
705 GetGLXVisualConfigs(dmxScreen->beDisplay, in InitOutput()
706 DefaultScreen(dmxScreen->beDisplay), in InitOutput()
707 &dmxScreen->numGlxVisuals); in InitOutput()
709 if (dmxScreen->fbconfigs) { in InitOutput()
711 GetGLXVisualConfigsFromFBConfigs(dmxScreen->fbconfigs, in InitOutput()
712 dmxScreen->numFBConfigs, in InitOutput()
713 dmxScreen->beVisuals, in InitOutput()
714 dmxScreen->beNumVisuals, in InitOutput()
715 dmxScreen->glxVisuals, in InitOutput()
716 dmxScreen->numGlxVisuals, in InitOutput()
720 configs = dmxScreen->glxVisuals; in InitOutput()
721 nconfigs = dmxScreen->numGlxVisuals; in InitOutput()
736 configprivs[j]->x_visual_depth = 0; in InitOutput()
737 configprivs[j]->x_visual_class = 0; in InitOutput()
743 for (k = 0; k < dmxScreen->beNumVisuals; k++) { in InitOutput()
744 if (dmxScreen->beVisuals[k].visualid == in InitOutput()
746 configprivs[j]->x_visual_depth = in InitOutput()
747 dmxScreen->beVisuals[k].depth; in InitOutput()
748 configprivs[j]->x_visual_class = in InitOutput()
749 dmxScreen->beVisuals[k].class; in InitOutput()
756 XFlush(dmxScreen->beDisplay); in InitOutput()
787 /* RATS: Assuming the fp string (which comes from the command-line argv
788 vector) is NULL-terminated, the buffer is large enough for the
809 * We must ensure that backend and console state is restored in the
819 if (dmxScreen->beDisplay) in AbortDDX()
820 XCloseDisplay(dmxScreen->beDisplay); in AbortDDX()
821 dmxScreen->beDisplay = NULL; in AbortDDX()
872 if (!strcmp(argv[i], "-display")) { in ddxProcessArgument()
877 else if (!strcmp(argv[i], "-inputfrom") || !strcmp(argv[i], "-input")) { in ddxProcessArgument()
882 else if (!strcmp(argv[i], "-xinputfrom") || !strcmp(argv[i], "-xinput")) { in ddxProcessArgument()
887 else if (!strcmp(argv[i], "-noshadowfb")) { in ddxProcessArgument()
890 else if (!strcmp(argv[i], "-nomulticursor")) { in ddxProcessArgument()
894 else if (!strcmp(argv[i], "-shadowfb")) { in ddxProcessArgument()
897 else if (!strcmp(argv[i], "-configfile")) { in ddxProcessArgument()
902 else if (!strcmp(argv[i], "-config")) { in ddxProcessArgument()
907 else if (!strcmp(argv[i], "-fontpath")) { in ddxProcessArgument()
912 else if (!strcmp(argv[i], "-stat")) { in ddxProcessArgument()
914 dmxStatActivate(argv[i - 1], argv[i]); in ddxProcessArgument()
917 else if (!strcmp(argv[i], "-syncbatch")) { in ddxProcessArgument()
922 else if (!strcmp(argv[i], "-nooffscreenopt")) { in ddxProcessArgument()
926 else if (!strcmp(argv[i], "-nosubdivprims")) { in ddxProcessArgument()
930 else if (!strcmp(argv[i], "-nowindowopt")) { in ddxProcessArgument()
934 else if (!strcmp(argv[i], "-noxkb")) { in ddxProcessArgument()
938 else if (!strcmp(argv[i], "-depth")) { in ddxProcessArgument()
943 else if (!strcmp(argv[i], "-norender")) { in ddxProcessArgument()
948 else if (!strcmp(argv[i], "-noglxproxy")) { in ddxProcessArgument()
952 else if (!strcmp(argv[i], "-noglxswapgroup")) { in ddxProcessArgument()
956 else if (!strcmp(argv[i], "-glxsyncswap")) { in ddxProcessArgument()
960 else if (!strcmp(argv[i], "-glxfinishswap")) { in ddxProcessArgument()
965 else if (!strcmp(argv[i], "-ignorebadfontpaths")) { in ddxProcessArgument()
969 else if (!strcmp(argv[i], "-addremovescreens")) { in ddxProcessArgument()
973 else if (!strcmp(argv[i], "-param")) { in ddxProcessArgument()
975 if (!strcasecmp(argv[i - 1], "xkbrules")) in ddxProcessArgument()
977 else if (!strcasecmp(argv[i - 1], "xkbmodel")) in ddxProcessArgument()
979 else if (!strcasecmp(argv[i - 1], "xkblayout")) in ddxProcessArgument()
981 else if (!strcasecmp(argv[i - 1], "xkbvariant")) in ddxProcessArgument()
983 else if (!strcasecmp(argv[i - 1], "xkboptions")) in ddxProcessArgument()
987 "-param requires: XkbRules, XkbModel, XkbLayout," in ddxProcessArgument()
1002 ErrorF("-display string Specify the back-end display(s)\n"); in ddxUseMsg()
1003 ErrorF("-input string Specify input source for core device\n"); in ddxUseMsg()
1004 ErrorF("-xinput string Specify input source for XInput device\n"); in ddxUseMsg()
1005 ErrorF("-shadowfb Enable shadow frame buffer\n"); in ddxUseMsg()
1006 ErrorF("-configfile file Read from a configuration file\n"); in ddxUseMsg()
1007 ErrorF("-config config Select a specific configuration\n"); in ddxUseMsg()
1008 ErrorF("-nomulticursor Turn of multiple cursor support\n"); in ddxUseMsg()
1009 ErrorF("-fontpath Sets the default font path\n"); in ddxUseMsg()
1010 ErrorF("-stat inter scrns Print out performance statistics\n"); in ddxUseMsg()
1011 ErrorF("-syncbatch inter Set interval for XSync batching\n"); in ddxUseMsg()
1012 ErrorF("-nooffscreenopt Disable offscreen optimization\n"); in ddxUseMsg()
1013 ErrorF("-nosubdivprims Disable primitive subdivision\n"); in ddxUseMsg()
1015 ErrorF("-nowindowopt Disable lazy window creation optimization\n"); in ddxUseMsg()
1016 ErrorF("-noxkb Disable use of the XKB extension with\n"); in ddxUseMsg()
1017 ErrorF(" backend displays (cf. -kb).\n"); in ddxUseMsg()
1018 ErrorF("-depth Specify the default root window depth\n"); in ddxUseMsg()
1019 ErrorF("-norender Disable RENDER extension support\n"); in ddxUseMsg()
1021 ErrorF("-noglxproxy Disable GLX Proxy\n"); in ddxUseMsg()
1022 ErrorF("-noglxswapgroup Disable swap group and swap barrier\n"); in ddxUseMsg()
1024 ErrorF("-glxsyncswap Force XSync after swap buffers\n"); in ddxUseMsg()
1025 ErrorF("-glxfinishswap Force glFinish after swap buffers\n"); in ddxUseMsg()
1028 ("-ignorebadfontpaths Ignore bad font paths during initialization\n"); in ddxUseMsg()
1029 ErrorF("-addremovescreens Enable dynamic screen addition/removal\n"); in ddxUseMsg()
1030 ErrorF("-param ... Specify configuration parameters (e.g.,\n"); in ddxUseMsg()
1033 ErrorF(" If the -input string matches a -display string, then input\n" in ddxUseMsg()
1034 " is taken from that backend display. (XInput cannot be taken\n" in ddxUseMsg()
1035 " from a backend display.) Placing \",console\" after the\n" in ddxUseMsg()
1036 " display name will force a console window to be opened on\n" in ddxUseMsg()
1037 " that display in addition to the backend input. This is\n" in ddxUseMsg()
1038 " useful if the backend window does not cover the whole\n" in ddxUseMsg()
1039 " physical display.\n\n"); in ddxUseMsg()
1041 ErrorF(" Otherwise, if the -input or -xinput string specifies another\n" in ddxUseMsg()
1042 " X display, then a console window will be created on that\n" in ddxUseMsg()
1043 " display. Placing \",windows\" or \",nowindows\" after the\n" in ddxUseMsg()
1044 " display name will control the display of window outlines in\n" in ddxUseMsg()
1047 ErrorF(" -input or -xinput dummy specifies no input.\n"); in ddxUseMsg()
1048 ErrorF(" -input or -xinput local specifies the use of a raw keyboard,\n" in ddxUseMsg()
1050 " -input local,kbd,ps2 will use a ps2 mouse\n" in ddxUseMsg()
1051 " -input local,kbd,ms will use a serial mouse\n" in ddxUseMsg()
1052 " -input local,usb-kbd,usb-mou will use USB devices \n" in ddxUseMsg()
1053 " -xinput local,usb-oth will use a non-mouse and\n" in ddxUseMsg()
1054 " non-keyboard USB device with XInput\n\n"); in ddxUseMsg()
1057 ErrorF(" Ctrl-Alt-g Server grab/ungrab (console only)\n"); in ddxUseMsg()
1058 ErrorF(" Ctrl-Alt-f Fine (1-pixel) mouse mode (console only)\n"); in ddxUseMsg()
1059 ErrorF(" Ctrl-Alt-q Quit (core devices only)\n"); in ddxUseMsg()
1060 ErrorF(" Ctrl-Alt-F* Switch to VC (local only)\n"); in ddxUseMsg()