Fixed segfault w/ broken Xinerama configs.
This commit is contained in:
		
							parent
							
								
									a815b9b990
								
							
						
					
					
						commit
						73e58adda9
					
				| 
						 | 
					@ -576,24 +576,40 @@ xf86InitOrigins(void)
 | 
				
			||||||
		/* force edge lists */
 | 
							/* force edge lists */
 | 
				
			||||||
		if(screen->left) {
 | 
							if(screen->left) {
 | 
				
			||||||
		    ref = screen->left->screennum;
 | 
							    ref = screen->left->screennum;
 | 
				
			||||||
 | 
							    if (! xf86Screens[ref] || ! xf86Screens[ref]->pScreen) {
 | 
				
			||||||
 | 
								ErrorF("Referenced uninitialized screen in Layout!\n");
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							    }
 | 
				
			||||||
		    pLayout->left = AddEdge(pLayout->left, 
 | 
							    pLayout->left = AddEdge(pLayout->left, 
 | 
				
			||||||
			0, xf86Screens[i]->pScreen->height,
 | 
								0, xf86Screens[i]->pScreen->height,
 | 
				
			||||||
			xf86Screens[ref]->pScreen->width, 0, ref);
 | 
								xf86Screens[ref]->pScreen->width, 0, ref);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if(screen->right) {
 | 
							if(screen->right) {
 | 
				
			||||||
		    ref = screen->right->screennum;
 | 
							    ref = screen->right->screennum;
 | 
				
			||||||
 | 
							    if (! xf86Screens[ref] || ! xf86Screens[ref]->pScreen) {
 | 
				
			||||||
 | 
								ErrorF("Referenced uninitialized screen in Layout!\n");
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							    }
 | 
				
			||||||
		    pScreen = xf86Screens[i]->pScreen;
 | 
							    pScreen = xf86Screens[i]->pScreen;
 | 
				
			||||||
		    pLayout->right = AddEdge(pLayout->right, 
 | 
							    pLayout->right = AddEdge(pLayout->right, 
 | 
				
			||||||
			0, pScreen->height, -pScreen->width, 0, ref);
 | 
								0, pScreen->height, -pScreen->width, 0, ref);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if(screen->top) {
 | 
							if(screen->top) {
 | 
				
			||||||
		    ref = screen->top->screennum;
 | 
							    ref = screen->top->screennum;
 | 
				
			||||||
 | 
							    if (! xf86Screens[ref] || ! xf86Screens[ref]->pScreen) {
 | 
				
			||||||
 | 
								ErrorF("Referenced uninitialized screen in Layout!\n");
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							    }
 | 
				
			||||||
		    pLayout->up = AddEdge(pLayout->up, 
 | 
							    pLayout->up = AddEdge(pLayout->up, 
 | 
				
			||||||
			0, xf86Screens[i]->pScreen->width,
 | 
								0, xf86Screens[i]->pScreen->width,
 | 
				
			||||||
			0, xf86Screens[ref]->pScreen->height, ref);
 | 
								0, xf86Screens[ref]->pScreen->height, ref);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if(screen->bottom) {
 | 
							if(screen->bottom) {
 | 
				
			||||||
		    ref = screen->bottom->screennum;
 | 
							    ref = screen->bottom->screennum;
 | 
				
			||||||
 | 
							    if (! xf86Screens[ref] || ! xf86Screens[ref]->pScreen) {
 | 
				
			||||||
 | 
								ErrorF("Referenced uninitialized screen in Layout!\n");
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							    }
 | 
				
			||||||
		    pScreen = xf86Screens[i]->pScreen;
 | 
							    pScreen = xf86Screens[i]->pScreen;
 | 
				
			||||||
		    pLayout->down = AddEdge(pLayout->down, 
 | 
							    pLayout->down = AddEdge(pLayout->down, 
 | 
				
			||||||
			0, pScreen->width, 0, -pScreen->height, ref);
 | 
								0, pScreen->width, 0, -pScreen->height, ref);
 | 
				
			||||||
| 
						 | 
					@ -609,6 +625,10 @@ xf86InitOrigins(void)
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	    case PosRelative:
 | 
						    case PosRelative:
 | 
				
			||||||
		ref = screen->refscreen->screennum;
 | 
							ref = screen->refscreen->screennum;
 | 
				
			||||||
 | 
							if (! xf86Screens[ref] || ! xf86Screens[ref]->pScreen) {
 | 
				
			||||||
 | 
							    ErrorF("Referenced uninitialized screen in Layout!\n");
 | 
				
			||||||
 | 
							    break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if(screensLeft & (1 << ref)) break;
 | 
							if(screensLeft & (1 << ref)) break;
 | 
				
			||||||
		dixScreenOrigins[i].x = dixScreenOrigins[ref].x + screen->x;
 | 
							dixScreenOrigins[i].x = dixScreenOrigins[ref].x + screen->x;
 | 
				
			||||||
		dixScreenOrigins[i].y = dixScreenOrigins[ref].y + screen->y;
 | 
							dixScreenOrigins[i].y = dixScreenOrigins[ref].y + screen->y;
 | 
				
			||||||
| 
						 | 
					@ -616,6 +636,10 @@ xf86InitOrigins(void)
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	    case PosRightOf:
 | 
						    case PosRightOf:
 | 
				
			||||||
		ref = screen->refscreen->screennum;
 | 
							ref = screen->refscreen->screennum;
 | 
				
			||||||
 | 
							if (! xf86Screens[ref] || ! xf86Screens[ref]->pScreen) {
 | 
				
			||||||
 | 
							    ErrorF("Referenced uninitialized screen in Layout!\n");
 | 
				
			||||||
 | 
							    break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if(screensLeft & (1 << ref)) break;
 | 
							if(screensLeft & (1 << ref)) break;
 | 
				
			||||||
		pScreen = xf86Screens[ref]->pScreen;
 | 
							pScreen = xf86Screens[ref]->pScreen;
 | 
				
			||||||
		dixScreenOrigins[i].x = 
 | 
							dixScreenOrigins[i].x = 
 | 
				
			||||||
| 
						 | 
					@ -625,6 +649,10 @@ xf86InitOrigins(void)
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	    case PosLeftOf:
 | 
						    case PosLeftOf:
 | 
				
			||||||
		ref = screen->refscreen->screennum;
 | 
							ref = screen->refscreen->screennum;
 | 
				
			||||||
 | 
							if (! xf86Screens[ref] || ! xf86Screens[ref]->pScreen) {
 | 
				
			||||||
 | 
							    ErrorF("Referenced uninitialized screen in Layout!\n");
 | 
				
			||||||
 | 
							    break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if(screensLeft & (1 << ref)) break;
 | 
							if(screensLeft & (1 << ref)) break;
 | 
				
			||||||
		pScreen = xf86Screens[i]->pScreen;
 | 
							pScreen = xf86Screens[i]->pScreen;
 | 
				
			||||||
		dixScreenOrigins[i].x = 
 | 
							dixScreenOrigins[i].x = 
 | 
				
			||||||
| 
						 | 
					@ -634,6 +662,10 @@ xf86InitOrigins(void)
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	    case PosBelow:
 | 
						    case PosBelow:
 | 
				
			||||||
		ref = screen->refscreen->screennum;
 | 
							ref = screen->refscreen->screennum;
 | 
				
			||||||
 | 
							if (! xf86Screens[ref] || ! xf86Screens[ref]->pScreen) {
 | 
				
			||||||
 | 
							    ErrorF("Referenced uninitialized screen in Layout!\n");
 | 
				
			||||||
 | 
							    break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if(screensLeft & (1 << ref)) break;
 | 
							if(screensLeft & (1 << ref)) break;
 | 
				
			||||||
		pScreen = xf86Screens[ref]->pScreen;
 | 
							pScreen = xf86Screens[ref]->pScreen;
 | 
				
			||||||
		dixScreenOrigins[i].x = dixScreenOrigins[ref].x;
 | 
							dixScreenOrigins[i].x = dixScreenOrigins[ref].x;
 | 
				
			||||||
| 
						 | 
					@ -643,6 +675,10 @@ xf86InitOrigins(void)
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	    case PosAbove:
 | 
						    case PosAbove:
 | 
				
			||||||
		ref = screen->refscreen->screennum;
 | 
							ref = screen->refscreen->screennum;
 | 
				
			||||||
 | 
							if (! xf86Screens[ref] || ! xf86Screens[ref]->pScreen) {
 | 
				
			||||||
 | 
							    ErrorF("Referenced uninitialized screen in Layout!\n");
 | 
				
			||||||
 | 
							    break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if(screensLeft & (1 << ref)) break;
 | 
							if(screensLeft & (1 << ref)) break;
 | 
				
			||||||
		pScreen = xf86Screens[i]->pScreen;
 | 
							pScreen = xf86Screens[i]->pScreen;
 | 
				
			||||||
		dixScreenOrigins[i].x = dixScreenOrigins[ref].x;
 | 
							dixScreenOrigins[i].x = dixScreenOrigins[ref].x;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue