6764807: dispswitch: new feature - use hotkey to adapt to monitor change nv_105
authorHenry Zhao <Henry.Zhao@Sun.COM>
Mon, 01 Dec 2008 15:50:10 -0800
changeset 592 6a0eff2e591f
parent 591 a2c6b61a92aa
child 593 52b5fcc8c2fd
6764807: dispswitch: new feature - use hotkey to adapt to monitor change
open-src/app/xrandr/dispswitch.patch
--- a/open-src/app/xrandr/dispswitch.patch	Wed Nov 26 16:23:15 2008 -0800
+++ b/open-src/app/xrandr/dispswitch.patch	Mon Dec 01 15:50:10 2008 -0800
@@ -1,7 +1,7 @@
-diff -Nru old/dispswitch.c new/dispswitch.c
+diff -Nur old/dispswitch.c new/dispswitch.c
 --- dispswitch.c	1969-12-31 16:00:00.000000000 -0800
-+++ dispswitch.c	2008-10-28 15:25:06.702227000 -0800
-@@ -0,0 +1,1888 @@
++++ dispswitch.c	2008-11-21 18:30:33.551746000 -0800
+@@ -0,0 +1,1903 @@
 +/* 
 + * Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
 + * Copyright © 2002 Hewlett Packard Company, Inc.
@@ -1347,6 +1347,17 @@
 +
 +}
 +
++static Bool
++valid_mode(con_output_t *con, XRRModeInfo *mode) {
++    int i;
++
++    for (i = 0; i < con->nsmodes; i++)
++	if (con->smodes[i] == mode)
++	    return True;
++
++    return False;
++}
++
 +static void
 +do_init (void) 
 +{
@@ -1461,14 +1472,13 @@
 +    if ((ncon != 2) || (start < 3))
 +	start = i;
 +
-+    if (((ncon < 2) || (ncon > 3)) && (i != 0)) {
-+	if ((ncon < 2) && verbose)
-+	    fprintf (stderr, "warn: too few (less than 2) connections: %d: can't switch\n", ncon);
++    if ((ncon < 1) || (ncon > 3)) {
++	if ((ncon < 1) && verbose)
++	    fprintf (stderr, "warn: no connection\n", ncon);
 +	else if ((ncon > 3) && verbose)
 +	    fprintf (stderr, "warn: too many (more than 3) connections: %d: can't switch\n", ncon);
 +	do_not_switch = True;
-+    } else
-+	do_not_switch = False;
++    }
 +
 +    did_init = True;
 +
@@ -1555,7 +1565,8 @@
 +			con_outputs[1].smodes[0]);
 +	    }
 +	} else {
-+	    if (start_mode[start -1])
++	    if (start_mode[start -1] && valid_mode(&con_outputs[start -1], 
++		start_mode[start -1]))
 +		    new_mode[start -1] = start_mode[start -1]; 
 +	    else {
 +	        if (con_outputs[start -1].smodes[0])
@@ -1588,7 +1599,7 @@
 +	}
 +
 +	if (single) {
-+	    if (start_mode[i])
++	    if (start_mode[i] && valid_mode(&con_outputs[i], start_mode[i]))
 +		new_mode[i] = start_mode[i];
 +	    else {
 +	        if (con_outputs[i].smodes[0])
@@ -1611,8 +1622,8 @@
 +	}
 +    }
 +
-+    if ((ncon == 1) && (start == 0)) {
-+	if (start_mode[0])
++    if (ncon == 1) {
++	if (start_mode[0] && valid_mode(&con_outputs[0], start_mode[0]))
 +	    new_mode[0] = start_mode[0]; 
 +	else {
 +	    if (con_outputs[0].smodes[0])
@@ -1842,6 +1853,8 @@
 +	    if (verbose)
 +		fprintf(stderr, "\na key press event was grabbed ...\n");
 +
++	    do_not_switch = False;
++
 +	    if (testrun || need_probe()) {
 +	    /* Too long since last switch, need to check output changes */
 +		if (probe_and_check_output_changes ()) {
@@ -1872,8 +1885,10 @@
 +		    }
 +
 +		    do_init();
-+		}
-+	    }
++		} else if (ncon == 1)
++		    do_not_switch = True;
++	    } else if (ncon == 1)
++		do_not_switch = True;
 +
 +    	    if (!do_not_switch)
 +	    	if (!do_switch()) {
@@ -1890,7 +1905,7 @@
 +    }
 +}
 +
-diff -Nru old/dispswitch.man new/dispswitch.man
+diff -Nur old/dispswitch.man new/dispswitch.man
 --- dispswitch.man	1969-12-31 16:00:00.000000000 -0800
 +++ dispswitch.man	2008-09-03 12:14:03.013107000 -0700
 @@ -0,0 +1,66 @@
@@ -1960,7 +1975,7 @@
 +.sp
 +dispswitch -key F2 -mod "shift+control" 	defines hotkey to be 'shift + control + F2'
 +
-diff -Nru old/Makefile.am new/Makefile.am
+diff -Nur old/Makefile.am new/Makefile.am
 --- Makefile.am	2008-03-07 13:35:37.000000000 -0800
 +++ Makefile.am	2008-08-07 18:31:32.391601000 -0700
 @@ -19,16 +19,21 @@