Added xor functions.
Hide/show focus hacks around tedraw are no longer needed.
diff --git a/Modules/stdwinmodule.c b/Modules/stdwinmodule.c
index fb448f2..07bb866 100644
--- a/Modules/stdwinmodule.c
+++ b/Modules/stdwinmodule.c
@@ -314,6 +314,7 @@
 	INCREF(None);
 	return None;
 }
+
 static object *
 drawing_fillcircle(dp, args)
 	drawingobject *dp;
@@ -328,6 +329,19 @@
 }
 
 static object *
+drawing_xorcircle(dp, args)
+	drawingobject *dp;
+	object *args;
+{
+	int a[3];
+	if (!getpointintarg(args, a))
+		return NULL;
+	wxorcircle(a[0], a[1], a[2]);
+	INCREF(None);
+	return None;
+}
+
+static object *
 drawing_elarc(dp, args)
 	drawingobject *dp;
 	object *args;
@@ -354,6 +368,19 @@
 }
 
 static object *
+drawing_xorelarc(dp, args)
+	drawingobject *dp;
+	object *args;
+{
+	int a[6];
+	if (!get3pointarg(args, a))
+		return NULL;
+	wxorelarc(a[0], a[1], a[2], a[3], a[4], a[5]);
+	INCREF(None);
+	return None;
+}
+
+static object *
 drawing_box(dp, args)
 	drawingobject *dp;
 	object *args;
@@ -463,6 +490,21 @@
 }
 
 static object *
+drawing_xorpoly(dp, args)
+	drawingobject *dp;
+	object *args;
+{
+	int n;
+	POINT *points = getpointsarray(args, &n);
+	if (points == NULL)
+		return NULL;
+	wxorpoly(n, points);
+	DEL(points);
+	INCREF(None);
+	return None;
+}
+
+static object *
 drawing_cliprect(dp, args)
 	drawingobject *dp;
 	object *args;
@@ -665,8 +707,8 @@
 	{"cliprect",	drawing_cliprect},
 	{"elarc",	drawing_elarc},
 	{"erase",	drawing_erase},
-	{"fillelarc",	drawing_fillelarc},
 	{"fillcircle",	drawing_fillcircle},
+	{"fillelarc",	drawing_fillelarc},
 	{"fillpoly",	drawing_fillpoly},
 	{"invert",	drawing_invert},
 	{"line",	drawing_line},
@@ -675,7 +717,10 @@
 	{"poly",	drawing_poly},
 	{"shade",	drawing_shade},
 	{"text",	drawing_text},
+	{"xorcircle",	drawing_xorcircle},
+	{"xorelarc",	drawing_xorelarc},
 	{"xorline",	drawing_xorline},
+	{"xorpoly",	drawing_xorpoly},
 	
 	/* Text measuring methods: */
 	{"baseline",	drawing_baseline},
@@ -801,17 +846,9 @@
 	if (a[2] > right) a[2] = right;
 	if (a[3] > bottom) a[3] = bottom;
 	if (a[0] < a[2] && a[1] < a[3]) {
-		/* Hide/show focus around draw call; these are undocumented,
-		   but required here to get the highlighting correct.
-		   The call to werase is also required for this reason.
-		   Finally, this forces us to require (above) that we are NOT
-		   already drawing. */
-		tehidefocus(tp);
 		wbegindrawing(self->t_ref->w_win);
-		werase(a[0], a[1], a[2], a[3]);
 		tedrawnew(tp, a[0], a[1], a[2], a[3]);
 		wenddrawing(self->t_ref->w_win);
-		teshowfocus(tp);
 	}
 	INCREF(None);
 	return None;