|  | @@ -177,6 +177,7 @@ static void focusstack(const Arg *arg);
 | 
	
		
			
				|  |  |  static Client *getclient(Window w);
 | 
	
		
			
				|  |  |  static unsigned long getcolor(const char *colstr);
 | 
	
		
			
				|  |  |  static Monitor *getmon(Window w);
 | 
	
		
			
				|  |  | +static Monitor *getmonn(unsigned int n);
 | 
	
		
			
				|  |  |  static Monitor *getmonxy(int x, int y);
 | 
	
		
			
				|  |  |  static Bool getrootpointer(int *x, int *y);
 | 
	
		
			
				|  |  |  static long getstate(Window w);
 | 
	
	
		
			
				|  | @@ -800,18 +801,13 @@ focusin(XEvent *e) { /* there are some broken focus acquiring clients */
 | 
	
		
			
				|  |  |  #ifdef XINERAMA
 | 
	
		
			
				|  |  |  void
 | 
	
		
			
				|  |  |  focusmon(const Arg *arg) {
 | 
	
		
			
				|  |  | -	unsigned int i;
 | 
	
		
			
				|  |  | -	Monitor *m; 
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	for(i = 0, m = mons; m; m = m->next, i++)
 | 
	
		
			
				|  |  | -		if(i == arg->ui) {
 | 
	
		
			
				|  |  | -			if(m == selmon)
 | 
	
		
			
				|  |  | -				return;
 | 
	
		
			
				|  |  | -			unfocus(selmon->sel);
 | 
	
		
			
				|  |  | -			selmon = m;
 | 
	
		
			
				|  |  | -			focus(NULL);
 | 
	
		
			
				|  |  | -			break;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +	Monitor *m;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if(!(m = getmonn(arg->ui)) || m == selmon)
 | 
	
		
			
				|  |  | +		return;
 | 
	
		
			
				|  |  | +	unfocus(selmon->sel);
 | 
	
		
			
				|  |  | +	selmon = m;
 | 
	
		
			
				|  |  | +	focus(NULL);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  #endif /* XINERAMA */
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -879,6 +875,15 @@ getmon(Window w) {
 | 
	
		
			
				|  |  |  	return NULL;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +Monitor *
 | 
	
		
			
				|  |  | +getmonn(unsigned int n) {
 | 
	
		
			
				|  |  | +	unsigned int i;
 | 
	
		
			
				|  |  | +	Monitor *m;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for(m = mons, i = 0; m && i != n; m = m->next, i++);
 | 
	
		
			
				|  |  | +	return m;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  Monitor *
 | 
	
		
			
				|  |  |  getmonxy(int x, int y) {
 | 
	
		
			
				|  |  |  	Monitor *m;
 | 
	
	
		
			
				|  | @@ -1542,17 +1547,11 @@ tag(const Arg *arg) {
 | 
	
		
			
				|  |  |  #ifdef XINERAMA
 | 
	
		
			
				|  |  |  void
 | 
	
		
			
				|  |  |  tagmon(const Arg *arg) {
 | 
	
		
			
				|  |  | -	unsigned int i;
 | 
	
		
			
				|  |  | -	Client *c;
 | 
	
		
			
				|  |  |  	Monitor *m;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	if(!(c = selmon->sel))
 | 
	
		
			
				|  |  | +	if(!selmon->sel || !(m = getmonn(arg->ui)))
 | 
	
		
			
				|  |  |  		return;
 | 
	
		
			
				|  |  | -	for(i = 0, m = mons; m; m = m->next, i++)
 | 
	
		
			
				|  |  | -		if(i == arg->ui) {
 | 
	
		
			
				|  |  | -			sendmon(c, m);
 | 
	
		
			
				|  |  | -			break;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +	sendmon(selmon->sel, m);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  #endif /* XINERAMA */
 | 
	
		
			
				|  |  |  
 |