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