aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
blob: 9e746bb783326e6dc146f4f44d8fa7695b683303 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
ChangeLog:

nxagent-3.3.0-10

- Fixed TR12F02146. Compare the drawable and the bitmap data before
  realizing the image update, in order to delay the data clean up that
  caused the memcmp() failure.

- Fixed TR01G02156. Reduce the exposing area by subtracting the ex-
  posed region.

- Fixed a compile warning in Drawable.c.

- Added detailed logs in the nxagentSynchronizeRegion() function if
  the data memory allocation fails.

nxagent-3.3.0-9

- Added /usr/NX/share/base to alternate font paths. This would fix
  TR11F02130 if fonts fixed and cursor are installed there.

- Changed Keyboard initialization and reset. This change should fix
  TR11F02129, TR11F02131, TR11F02132.

nxagent-3.3.0-8

- Fixed TR12F02144. Image bits of render glyphs are copied before they
  are cleaned. This will avoid a memory corruption.

- Fixed TR12F02145. When dispatching a MotionNotify event, check if a
  top-level window has been entered before trying to show the pulldown
  dialog.

nxagent-3.3.0-7

- Added debug code for pointer input.

nxagent-3.3.0-6

- Fixed compile warnings.

nxagent-3.3.0-5

- Disabled verbose logging in Rootless.c.

nxagent-3.3.0-4

- Fix the XKB map load in the case of 64 bit server.

nxagent-3.3.0-3

- Fixed TR10F02119. If the remote X display is using evdev keyboard
  then copy maps from remote.

- Upgraded VERSION to 3.3.0.

nxagent-3.3.0-2

- Fixed TR10F02115. Painting errors occurred when screen areas beyond
  the current viewport became viewable in the NX Client for Windows.

- Using a new struct type nxagentWMHints to avoid type mismatch on
  64 bit platforms.

- Added debug utilities for pointer input.

nxagent-3.3.0-1

- Opened the 3.3.0 branch based on nxagent-3.2.0-12.

nxagent-3.2.0-12

- Ignore 'resize' option at reconnection if viewport mode is on.

- Fixed TR08E01814. Added shadow keymap initialization in order to
  enable nxcompshad to translate keycodes across different layouts. 

nxagent-3.2.0-11

- Fixed TR08F02098. Function splitting font names has to be instruct-
  ed to handle the right number of fields.

nxagent-3.2.0-10

- Extended fix for TR07F02091 to include font names having zero in
  fields RESOLUTION_X and RESOLUTION_Y.

nxagent-3.2.0-9

- Fixed TR07F02091. Scalable fonts were not correctly listed among
  available fonts.

- Fixed TR06F02080. Use the corrupted area extents as maximum size of
  the image data.

nxagent-3.2.0-8

- Fixed TR07F02082. The agent server could be unable to init core
  keyboard on 64 bit systems.

nxagent-3.2.0-7

- Imported patch fixing issues from  X.Org security advisory, June
  11th, 2008: Multiple vulnerabilities in X server extensions. CVE
  IDs: CVE-2008-1377, CVE-2008-1379, CVE-2008-2360, CVE-2008-2361,
  CVE-2008-2362.

nxagent-3.2.0-6

- Fixed TR05F02063. Ignore ReparentNotify events for non-rootless
  sessions.

- Fixed TR06F02068. Try to pack images only if format is ZPixmap.

- Don't require reparent on close of NX window.

nxagent-3.2.0-5

- Fixed TR04F02044. Restored the original MakeRootTile() function in
  order to create the root window background pixmap.

- Fixed TR04F02041. Gnome panels stayed on top of the NX session win-
  dow with desktops running Compiz. This fix provides a solution for
  the Fullscreen mode.

- Improved for the shadow session the handling of master session win-
  dow resize.

nxagent-3.2.0-4

- Fixed TR10D01535. The agent window is not minimized anymore when
  pointer leaves.

- Changes aimed to avoid possible type mismatch in XDisplay struct
  on 64 bit architectures.

nxagent-3.2.0-3

- Fixed a build issue on Solaris.

nxagent-3.2.0-2

- Code clean up. Moved a variable definition to the beginnning of a
  block.

nxagent-3.2.0-1

- Opened the 3.2.0 branch based on nxagent-3.1.0-9.

nxagent-3.1.0-9

- Fixed TR03F02025. German umlauts couldn't be pasted into a remote
  Windows application. Now also the UTF8_STRING target is available
  for ConvertSelection requests.

- Fixed TR03F02031. Moved SetScreenSaverTimer() call in order to avoid
  undesired reset of the auto-disconnect timeout when a screen saver
  turns on.

nxagent-3.1.0-8

- Added reference to fixed TR02F02007 and TR07E01762 in the CHANGELOG.

- Set the GC trap before calling fbPolySegment.

- Fixed TR09E01863. A flag is set if a resource has been added or fre-
  ed and it is checked in FindClientResourcesByType().

- Added void entries to nxagentRequestLiteral vector in order to avoid
  a wrong string is printed to the output for NoOperation request.

- Fixed TR11E01948. Now keyboard status is initialized again after
  the NX session is reconnected. This avoids CAPS LOCK and NUM LOCK
  synchronization problems.

- Added nxagentXkbCapsTrap and nxagentXkbNumTrap to avoid CAPS LOCK
  and NUM LOCK synchronization problems when CAPS LOCK or NUM LOCK is
  the first key to be pressed in the NX session.

- Corrected subSize variable initialization in nxagentRealizeImage().

- Fixed various memory leaks.

- Fixed TR11E01950. Copy and paste via edit menu didn't work for some
  applications.

- Corrected property type in nxagentRequestSelection(). Some external
  applications didn't enable their paste button when nxagent was the
  owner of the CLIPBOARD selection.

- Added struct to save values queried by XQueryExtension for XFixes
  extension.

nxagent-3.1.0-7

- Imported patch fixing issues from  X.Org security advisory, January
  17th, 2008: Multiple vulnerabilities in the X server.  CVE IDs:
  CVE-2007-5760    CVE-2007-5958    CVE-2007-6427   CVE-2007-6428
  CVE-2007-6429    CVE-2008-0006.

- Fixed TR02F02007. Handled the case if nxagentCreateDrawableBitmap()
  fails to create the pixmap intended to store the bitmap data.

nxagent-3.1.0-6

- Fixed a compile warning in Args.c.

- The synchronization loop breaks if the drawable is clean when it's
  not supposed to be.

- Fixed TR12E01966. Emacs tooltips were not displayed properly. Added
  a check on the event mask before calling miWindowExposures().

- Fixed TR01F01982. ConfigureNotify warning is printed in verbose mode
  only.

nxagent-3.1.0-5

- Moved some variable definitions placed in ProcGetProperty().

nxagent-3.1.0-4

- Fixed TR06D01397. The problem was: drag & drop operations between
  windows of Java applications didn't work in NX Client for Windows.

- Implemented FR12E01957. Added a limit to the amount of data that can
  be pasted from an NX session into an external application. The new
  option - named 'copysize' - can be read from the 'options' file.

nxagent-3.1.0-3

- Fixed TR12E01963. The window tree is revalidated explicitly after
  recomputing the root window clip regions.

nxagent-3.1.0-2

- Fixed TR11E01946. Forcing exposures on regions saved in the backing
  store could bring to unexpected results.

- Fixed TR11E01928. Animated cursors were not properly disconnected
  and reconnected.

nxagent-3.1.0-1

- Opened the 3.1.0 branch based on nxagent-3.0.0-93.

nxagent-3.0.0-93

- Fixed TR10E01913. Now bell settings are restored after the agent
  reconnects.

nxagent-3.0.0-92

- Fixed a compilation error on 64 bit platforms.

nxagent-3.0.0-91

- Checked the window synchronization status before subtracting an ex-
  posed area from the corrupted region.

nxagent-3.0.0-90

- Fixed TR11E01932. In case of rootless session displayed by NXWin X
  server, synthetic ConfigureNotify events are generated by the X11
  agent. This helps to correct menu navigation in Java 1.6.0.

- Fixed the handling of 'client' parameter.

- Fixed bad refreshes in viewport navigation in the case of Windows
  client.

- Fixed TR11E01930. If the defer level is set by means of the command
  line, the DeferLevel option is not reset while resuming the session.

- Fixed TR07E01762. Problem in comparison of font names.

- Printed the new geometry in the session log when the agent screen is
  resized.

nxagent-3.0.0-89

- Fixed TR10E01919. The agent could crash in the routine in charge of
  find a replacement for a missing font.

- Removed an unuseful log message.

nxagent-3.0.0-88

- Fixed TR10D01539. Some XKEYBOARD requests are disabled if the option
  'keyboard' has value 'query'. This locks the initial keyboard map.
  Enabling/disabling of XKEYBOARD requests is done at run time.

- Added -noxkblock command line option enabling the XKEYBOARD requests
  even if the option 'keyboard' value is 'query'.

nxagent-3.0.0-87

- Reworked the handling of CT_PIXMAP client clips. Clips are always
  converted in regions for internal use, while bitmap are saved for
  operations involving the remote X.

nxagent-3.0.0-86

- Fixed TR07E01749. Now using different resolution between shadow
  and master session with shadow display option 'As on the server'
  doesn't display black borders.

- Fixed TR09E01852. The GC clips of type CT_PIXMAP are not converted
  in regions. This avoids generating regions made up by thousands of
  rectangles. Backing store function SetClipmaskRgn is implemented by
  a stub doing nothing.

nxagent-3.0.0-85

- Fixed TR08E01841. Exposed are forced to new areas exposed by the
  viewport.

- Fixed TR02E01645. Remote exposures was blocked if the NX client was
  running on Linux without window manager.

- Even if the agent window is fully obscured, synchronization is not
  skipped if the Composite extension of the remote display is in use.

- Fixed TR08E01851. Exposures events have to be internally generated
  for regions that can't be restored because the backing pixmap is
  corrupted.

- Fixed TR08E01847. The initial values of store used to save XChangeGC
  calls are set to the default GC values.

- When a drawable becomes synchronized, its outdated bitmap is destro-
  yed.

- If a pixmap is not fully synchronized after a synchronization loop
  it is cleared, just like windows.

- Solved a problem causing some pixmaps to remain among the corrup-
  ted resources even if they were synchronized.

nxagent-3.0.0-84

- Renamed Misc.h as Utils.h to solve name clashes on Windows platform.

nxagent-3.0.0-83

- Changes to include correctly declaration of _XDisplay structure on
  64 bit platforms. Further tests are needed to confirm that it fixes
  TR08E01824.

nxagent-3.0.0-82

- Fixed TR08E01821. Changed nxagentAddItemBSPixmapList() to check if
  the pixmap item has already an entry in the list before adding it.

- Fixed TR07E01795. Sun Studio main window showed only its grey back-
  ground. Changed clipboard events handling to let the agent notify
  a failure in converting selection.

nxagent-3.0.0-81

- Based on nxagent-3.0.0-78.

- The agent options are saved before reopening the display in the
  reconnection procedure. If the new initialization fails the backup
  values of options are restored.

- Keyboard device info are saved before the keyboard reset occuring
  in the reconnection procedure. If the new initialization of the
  keyboard fails, the old values are restored.

- The initialization procedure of keyboard device returns with error
  if it fails to retrieve the keyboard mapping information from the
  remote display.

- The reconnection fails if the default depth of the new display is
  different from the previous one.

- The session can be migrated if the visuals don't match for color
  masks swapping. At the moment there are no conversions to line up
  the RGB masks, so even if the session can be migrated, incorrect
  colors may be shown.

nxagent-3.0.0-80

- The agent options are saved before reopening the display in the
  reconnection procedure. If the new initialization fails the backup
  values of options are restored.

- The flag storing that a SIGHUP has been received is reset if the
  function reconnecting the session fails.

nxagent-3.0.0-79

- Changed the SIGHUP handler not to ignore the signal if the state
  is SESSION_GOING_UP or SESSION_GOING_DOWN.

- Keyboard device info are saved before the keybord reset occuring
  in the reconnection procedure. If the new initialization of the
  keyboard fails, the old values are restored.

- The initialization procedure of keyboard device returns with error
  if it fails to retrieve the keyboard mapping information from the
  remote display.

- The reconnection fails if the default depth of the new display is
  different from the previous one.

- The session can be migrated if the visuals don't match for color
  masks swapping. At the moment there are no conversions to line up
  the RGB masks, so even if the session can be migrated, incorrect
  colors may be shown.

nxagent-3.0.0-78

- Fixed TR07E01747. Fixed warnings occuring when compiling for AMD64.

- Fixed TR07E01753. NoMachine WM icon in the title bar is displayed
  correctly.

- Fixed TR03E01656. If client and server endianess didn't match, glyph
  images bits have to be only temporarily swapped.

- Fixed TR07E01746. Terminate the shadow agent if the option 'shadow'
  is empty.

- Added option '-verbose'. It enables the printing of errors received
  by the agent from the remote X server.

- Warnings related to missing fonts are printed only if verbose mode
  is enabled.

- Disabled a log message related to the use of Composite extension.

nxagent-3.0.0-77

- The pixmap formats are initialized without taking care of which are
  supported on the remote display.

- Removed the check for pixmap format compatibility when migrating the
  session to a new display.

- Fixed TR06E01725. A minimum set of available picture formats is
  used to ensure a wide migration from/to different displays.

- The PictFormat structures used by nxagent are no longer filtered
  with the ones available on the real display.

- The background pixmaps are cleared while reconnecting in order to
  make them usable.

- Fixed TR01E01619. Changed the RandR implementation to return a re-
  fresh rate other than zero.

nxagent-3.0.0-76

- Changed the keystroke to force the drawable's synchronization to
  CTRL-ALT-J.

nxagent-3.0.0-75

- If the backing store tries to restore areas from a corrupted pixmap,
  such areas are subtracted from the saved region, so that exposures
  will be sent for them.

nxagent-3.0.0-74

- Don't skip the synchronization when there are more clients ready.
  This temporarily solves the synchronization problems observed in
  the previous versions if one or more clients kept the agent busy.

nxagent-3.0.0-73

- If the PolyFillRect() uses a FillStippled or a FillOpaqueStippled
  fill style and the destination is corrupted, the area affected by
  the operation is first synchronized.

nxagent-3.0.0-72

- Fixed the bug affecting the position of the input window when a
  session was migrated to a linux X server with no window manager
  running.

- The color used to fill the corrupted backgrounds is converted de-
  pending on the depth of remote X server.

- The PolyFillRect() does not clean the corrupted destination region
  if a stipple pixmap is used as mask. This solution is adopted to
  reduce the region fragmentation and to solve the text drawing pro-
  blems affecting rdesktop.

nxagent-3.0.0-71

- Force a flush of the display buffer if the coalescence timeout is
  expired. Set the timeout according to the link type, from 0 to 50
  ms for link MODEM.

- In nxagentRealizeImage() the width in byte is computed newly if
  the image has been scaled.

- The shadow agent clips the screen updates in tile only if the link
  type is MODEM or ISDN.

- Split the abort conditions in the synchronization loop to check
  separately the congestion and the blocking status.

- Implemented a workaround in order to avoid graphical problems with
  render composite operations on Xfree86 remote server.

nxagent-3.0.0-70

- Various adjustments aimed at using the best defer rules depending
  on the congestion state.

- Fixed a problem with icons of message boxes in shadow sessions.

- Changed the log message printed when the shadow agent can't connect
  to the master session.

- If Composite is in use, don't skip the PutImage and CopyArea opera-
  tions even if the agent window is fully obscured.

nxagent-3.0.0-69

- The option -nodamage prevents the shadow agent from using the damage
  extension.

- Changed the scaling feature to set the byte order of the source
  image according to the local endianess.

- Changed the scaling feature in order to handle different ratios for
  horizontal and vertical sizes.

- Force the shadow sessions to be non-persistent.

- When a pixmap background is synchronized, an expose is sent to its
  owners.

nxagent-3.0.0-68

- Changed the type of parameters passed to nxagentRootlessRestack in
  order to be compliant with Xlib types on 64 bit platfors.

- The nxagentCompositeRects() checks for the render operation type to
  determine if the corrupted destination region must be cleared.

nxagent-3.0.0-67

- Fixed a condition discarding the expose events received from the X
  server.

nxagent-3.0.0-66

- The corrupted resources are removed when a session suspends, and are
  reallocated only at reconnection. This is aimed at avoiding synchro-
  nization loops when the link is down.

nxagent-3.0.0-65

- Initialize for now the tile size at 64x64 in shadow mode.

- The height and width of the tiles used for synchronizing drawables
  are set without overriding command line option 'tile'.

- Avoid calling miWindowExposures() for empty regions.

- Fixed a bug while clearing corrupted regions with window exposures.

- The corrupted drawable counters are not reset if there are bitmaps
  to synchronize.

nxagent-3.0.0-64

- The synchronization bitmap is used only when requesting a full
  drawable synchronization, otherwise the frame-buffer is used as
  source.

- Fixed some bugs in the synchronization loop.

- Removed the remaining debug output.

nxagent-3.0.0-63

- Don't start the synchronization loop if the wakeup handler found
  some clients ready.

- Don't flush the display buffers if the synchronization was inter-
  rupted and there are more drawables to synchronize.

- Changed the backing store functions to not save the obscured areas
  which are inside the corrupted region of a window.

- Added the code to send the XClearArea() commands in shadow mode at
  the end of the synchronization loop. In this way large images are
  still split in tiles but, on fast links, the final result can made
  visible all at once.

- Modified the corrupted drawable counters to only report the number
  of resources needing synchronization. This allows the block hand-
  ler to avoid spinning through the synchronization loop if there is
  nothing to do.

- On a window exposure remove the corrupted region of the destinat-
  ion window.

- For testing purposes, the pixmap synchronization loop starts only
  if there are corrupted backgrounds.

nxagent-3.0.0-62

- The image scaling is applied only if the destination drawable is the
  pixmap shadowing the frame buffer of the master session.

- The shadow agent exits with a fatal error if it can't connect to the
  master session.

nxagent-3.0.0-61

- Forward the SIGCHLD to the NX transport instead of letting the NX
  transport forward the signal to us. This allows the agent to set
  and replace the signal handler at any time, without having to ta-
  ke care of the state of the NX transport.

- Improved the synchronization loop by implementing a simple round-
  robin mechanism between the resources needing synchronization.

nxagent-3.0.0-60

- Use a new set of functions to install, post-install and reset the
  signal handlers.

- Reset the signal handlers to their initial state after a display
  failure, as part of the disconnection procedure.

- Don't set SA_RESTART in the sigaction flags. Make the signal int-
  errupt the system call.

- Terminate all the running dialogs before exiting.

nxagent-3.0.0-59

- Use the value of nxagentCongestion in nxagentUserInput() instead
  of calling NXDisplayCongestion().

nxagent-3.0.0-58

- The clip mask of the scratch GC used by nxagentDeferCopyArea() is
  reset before releasing the GC.

- The MotionNotify event can now break the synchronization loop.

- In the case of shadow sessions, if synchronization aborts then the
  remaining data to synchronize are not stored in a bitmap.

- If a table rebuild occurs in a loop searching for resources, the
  loop restarts from beginning not to use the out of date table.

nxagent-3.0.0-57

- The synchronization bitmap is created only if the corrupted area
  of the source drawable is visible.

- The synchronization loop skips the last synchronizing drawable to
  give a chance to the next resources to be synchronized.

- Removed the session starting infos concerning the mismatching ver-
  sions of render and the window manager detection.

- Split the gliph lists in Render.c only if the symbol SPLIT_GLYPH_-
  LISTS is defined.

- Read again the events in the block handler after the flush.

- The nxagentCongestion variable is now a value ranging from 0 to 9,
  not a boolean flag.

- Added some experimental code dynamically reducing the size of the
  display output buffer when the agent is blocking for write.

nxagent-3.0.0-56

- The synchronization loop is now aborted when a short timeout exp-
  ires. If the drawable synchronization cannot be completed, the
  remaining data is stored in a bitmap. The synchronization loop is
  then restarted using the data from the bitmap, instead of pulling
  the latest image from the framebuffer. This allows the agent to
  show a complete frame when displaying videos and animations, while
  at the same time giving a chance to the clients to update the
  screen in background. When an image from the saved bitmap is put
  on the remote display, the image is compared with the actual data
  in the framebuffer. If the two bitmaps match, the corresponding
  region of the drawable is marked as synchronized, otherwise the
  drawable remains dirty and will be synchronized at the next loop
  using the new data taken from the framebuffer.

- If the smart schedules is enabled, let the dispatcher decide when
  it is time to yield and process the next client.

nxagent-3.0.0-55

- Disable the smart scheduler in the case of shadow sessions.

- If the smart scheduler is enabled, stop the timer before returning
  from the block handler. WaitForSomething() sets a zero timeout if
  there are clients with input but doesn't stop the timer. The select
  is then interrupted to update the schedule time even if, what the
  dispatcher cares, is only the ticks count at the time the client
  is scheduled in.

- Fixed a compilation warning in NXresource.c.

- The main window of the shadow agent is mapped in nxagentMapDefault-
  Windows, like for non shadow agents, if the remote display has no
  window manager running. This avoids a flickering effect on the !M
  logo having place if the shadow session was displayed from a Wind-
  ows client.

- Some code related to the use of the Composite extension is not built
  in the agent being not necessary anymore.

nxagent-3.0.0-54

- Get SmartScheduleStopTimer() from dixstruct.h.

- Updated the NoMachine icon file.

nxagent-3.0.0-53

- Changed the message 'NXAGENT: Fatal IO error on display' into 'Info:
  Disconnected from display'.

- Fix a problem occurring when the FindClientResourcesByType() needs
  to reallocate the resource table.

- The popup window synchronization breaks if an user input is caught.

- Implemented FR05E01712. The stderr and stdin are redirected to the
  'clients' file in the session directory.

- The nxagentRealizeImage function does nothing if the agent is not
  connected to the display.

- Removed the code implementing the redraws of the viewport frame.
  Such code is not needed because is't enough for the agent to handle
  the expose event received from the X server.

nxagent-3.0.0-52

- Where it is necessary to wrap the function PaintWindowBackground,
  the original function pointer is saved and restored afterwards. This
  let other code wrapping that function (e.g. the damage extension) to
  work correctly.

- If the agent works in shadow mode, the defer parameters are ignored.

nxagent-3.0.0-51

- Use the smart scheduler on platforms where it is enabled.

- Check ClientsWithInput in the wakeup handler and update the number
  of clients ready if any descriptor is set.

nxagent-3.0.0-50

- Fixed TR05E01714. Changed VisibilityNotify event so that it forces
  a refresh on the root window, but only if on the agent Composite is
  enabled and its window moves from a VisibilityFullyObscured to ano-
  ther state.

- Grant the availability of core fonts in master sessions also after
  the disconnection. This makes possible to start new clients inside
  a shadow sessions while the master is down.

- Changed nxagentGlyphs() to send a single glyph list per request.

- Major rewrite of the agent dispatch handler.

- Some name changes to the functions handling the session states.

nxagent-3.0.0-49

- Made the dispatch loop yield control to a different client after a
  fair amount of time even if the current client doesn't produce any
  output.

nxagent-3.0.0-48

- Modified the message in the suspend dialog to say 'Disconnect' in
  place of 'Suspend'.

- Added macros in Pixels.h to determine the behavior of the lazy en-
  coding.

- Changed the copyright attribution from Medialogic to NoMachine.

- Reset all options to their defaults before processing the session
  arguments. This fixes the problem with the DeferLevel option not
  being set at reconnection.

nxagent-3.0.0-47

- Initialized the arguments of NXGetControlParameters(), NXGetShmem-
  Parameters() and NXGetUnpackParameters() to end up with valid data
  also in the case of a display failure.

- Converted the coordinates in the X_PolyFill requests to relative
  mode. This makes all the requests independent from the origin and
  helps the caching by the proxy.

nxagent-3.0.0-46

- Don't print the 'Display failure' message on a SIGTERM.

- Ensure that the NX transport is shut down after the 'Terminating
  session at...' message if the session is killed by the user.

- Let the agent filter the error output by setting the OsVendorVEr-
  rorFProc function pointer.

- Give the possibility to the agent to redirect the standard error
  during a Popen() or a System() by setting the OsVendorStartRedir-
  ectErrorFProc and OsVendorEndRedirectErrorFProc function pointers.

- Fixed a problem in nxagentPolyFillRect() not properly propagating
  to the destination.

- Added nxagentPolyFillRect() and nxagentGlyphs() among the funct-
  ions increasing the pixmaps usage counter.

- Cleaned up some of the FIXME related to the lazy encoding.

nxagent-3.0.0-45

- Use the three distinct functions in nxcompext to query the state
  of the display connection.

- Terminate gracefully on a fatal server error by printing the fol-
  lowing in the session log:

  Error: Aborting session with 'Error text...'.
  Session: Aborting session at '...'.
  Session: Session aborted at '...'.

- Removed more debug messages from the session log.

nxagent-3.0.0-44

- Guess whether to compress an image with a lossless encoder based
  also on the width and height, not only on size.

- Corrupted pixmaps used as tiles propagate the dirty area when they
  are involved in a PolyFillRect() operation.

- On link settings ADSL to LAN, images are not split in tiles to bet-
  ter fill all the available bandwidth.

- Pixmaps referenced often as source in deferred operations or used
  as backgrounds, are now synchronized as long as when the network
  congestion level remains 0.

- Use nxagentPaintWindowBorder() to update the window's border in
  the framebuffer.

- Fixed a problem with the new handling of the X_RenderChangePicture
  requests that caused the text to be erroneously clipped.

nxagent-3.0.0-43

- Don't pass the uid of the shared memory segment to the nxcompshad
  library if it can't be retrieved from the options.

- Fixed the new handling of the RenderChangePicture requests to work
  on 64 bit platforms.

nxagent-3.0.0-42

- Added support for the 'lossy', 'lossless' and 'adaptive' pack me-
  thod literals. These values activate the dynamic selection of the
  pack method by the agent.

- Use the newer constant PACK_NONE instead of NO_PACK.

nxagent-3.0.0-41

- Fixed a bug in the disconnection procedure introduced with the new
  handling of the display events.

- Realize the XRenderChangePicture() request only if a change of the
  remote picture's attributes is detected.

nxagent-3.0.0-40

- Dynamically select a lossy or a lossless encoder based on the num-
  ber of pixels that appear to be different in the image.

- Use the new PACK_BITMAP_16M_COLORS image encoding. Handle the case
  when the packed image data points at the same data as the original
  image. This is useful to save a copy.

- The PACK_BITMAP_16M_COLORS method is now the default for lossless
  encoding.

- Don't use compression for the alpha channel. This is also intended
  to better leverage the stream compression.

nxagent-3.0.0-39

- The nxagentComposite() function doesn't check the source and mask
  synchronization status, but defers the XRenderComposite() operation
  by checking the defer level only.

- If the target of an XCompositeText() function is an hidden window,
  the operation is prevented.

- Passing the uid of master X server process to nxcompshad library.

- Before the call of XRenderAddGlyphs(), call the new library function
  XRenderCleanGlyphs() cleaning the padding bytes of data section of
  request.

nxagent-3.0.0-38

- Don't warp the cursor if the requesting client is a shadow agent.

- Changed a call to NXFlushDisplay in order to align to nxcomp version
  3.0.0-15.

- Updated the NoMachine icon file.

- Changed Agent.h in order to include NX version of Xlib.h avoiding
  missing declarations.

- If the NXDisplayCongestion notifies an optimum congestion state,
  the continuous user input, due to unreleased buttons/keys, doesn't
  break the drawable's synchronization.

- Renamed the option 'block' as 'tile'.

- Implemented a way to guess if the destination drawable of a copy
  area is a popup window. In such a case, the source is synchronized
  before doing the copy to avoid ugly effects like text items floating
  on an invisible background.

- In order to reduce the number of clip mask changings, if the clean
  region of a corrupted source drawable is formed by a single rectan-
  gle, its coordinates are used to change extents and position of the
  area involved in the copy area operation.

- Fixed a crash caused by a reference to a resource table freed by a
  table rebuilding. This was happening because during the pixmap re-
  connection some new GC resources went beyond the resource table li-
  mit, causing a table relocation. As a general rule, a function loop-
  ing across a resource table should not add or remove resources.

nxagent-3.0.0-37

- To improve the efficiency of the algorithm deferring the trapezoid
  operations, the composite does not propagate the glyphs flag to
  the destination.

- Moved the replacement of XCheckIfEvent() to nx-X11 with the name
  XCheckIfEventNoFlush().

nxagent-3.0.0-36

- Changed nxagentDisplayFlushHandler() according to the new semantic
  of the handler. The function is called by nxcomp when new data is
  sent to the remote proxy.

- After the flush handler is called, use NXQueryDisplay() with query
  type NXDisplayCongestion to update the congestion flag.

- Modified the boxes list defragmentation to merge only those rectan-
  gles which fully overlap.

- During the synchronization loop the nxagentDispatchHandler() takes
  care of reading the enqueued events, while the nxagentUserInput()
  checks only for state changes due to a processed key/button event.

- Set the display output buffer size according to the link type.

- Removed the congestion and synchronization callbacks.

nxagent-3.0.0-35

- In order to avoid the lossy encoding of text regions, the nxagent-
  GlyphsExtents is computed even if the mask format is not specified.
  In this case, the render implementation was not calculating the ex-
  tents of composite text operation, whose coordinates are useful only
  to build a mask pixmap.

nxagent-3.0.0-34

- Removed message 'Could not init font path element' from the output.

- Moved initialization of picture support before the call to miDCInit-
  ialize in the screen opening procedure. This is because miDCInitial-
  ize calls DamageSetup that wraps the picture screen functions.

- Implemented FR05E01686. Added option 'menu' enabling/disabling the
  pulldown menu in the rootless agent.

- Added a flag to each drawable to record if they have been the dest-
  ination of a glyph operation. This is used to skip the deferral of
  some operations (e.g. render trapezoids) if they can cause the
  drawable to be synchronized using a lossy encoding.

- The render trapezoids are deferred if the operation falls inside
  a dirty region or if the destination drawable does not contain
  glyphs.

- Imported the NXmitrap.c file from render directory.

- Improved the algorithm queuing multiple writes across a proxy
  flush.

nxagent-3.0.0-33

- Read the event queue after each request processed. Doing this
  is expensive but it seems to work best.

- Don't split the big trapezoid requests. Splitting the requests
  doesn't seem to provide any benefit with the clients tested.

- By defining BLOCKS in Handlers.c, Events.c and NXdispatch.c, log
  the begin and end of the most sensitive routines.

nxagent-3.0.0-32

- Use NXSetDisplayWriteHandler() to register a callback invoked
  by Xlib after some data is written to the display socket. This
  callback allows the agent to better determine when it is time
  to send the sync requests.

nxagent-3.0.0-31

- The operation of adding glyphs to remote glyphset has been defer-
  red, in order to avoid to add unused glyphs. When a composite text
  operation looks for a certain glyph, if it has not been added to
  the selected glyphset, an XRenderAddglyphs is requested.

- The forced synchronization timeout is now dependant on link type.

- Force the mi to process the events just after having processed
  any input.

- Added an experimental 'hard' sync request intended to wait for
  the X server to complete an image operation. This also affects
  the agent only when the NX transport is not running.

- Added a synchronization mechanism intended to let the agent de-
  tect if the X server is not able to process its input when the
  NX transport is not activated. The algorithm uses asynchronous
  X_GetInputFocus replies to minimize the impact of latency on
  slow connections. A new request is sent at any given amount of
  bytes read from our clients. When the number of pending replies
  is exceeded, the agent stops accepting additional requests and
  waits for the remote until the number of pending replies returns
  below the limit. Note that when the NX transport is running, the
  algorithm is disabled to not interfere with the proxy's own
  token-based flow control.

- Added the nxagentDispatchHandler() function. It is called by the
  dispatcher after a client's request has been processed.

- Added the nxagentWaitEvents() function. It blocks waiting for
  more input with an optional timeout. It handles the case when
  the NX transport is not running and is able to recover gracely
  from a display failure by returning the error.

- Replaced most of the code that was relying on NXTransContinue()
  to use the new function.

- Moved the new event-related functions to Events.h and Events.c.

- Disabled the code raising the splash screen at reconnection.

- Reverted change done in 3.0.0-8 version, dealing with expose events
  not having entries in the queue. They are not collected in a global
  region but sent immediately.

nxagent-3.0.0-30

- Let the block handler check if there are events queued after the
  flush before entering the select.

- Changed the dispatch loop to read the incoming events more often.

- Added the nxagentReadEvents() and nxagentCheckEvents() functions.
  Differently from XCheckIfEvent(), nxagentCheckEvents() doesn't
  flush the output buffer if no event is available. nxagentReadEv-
  ents(), instead, it's like XEventsQueued() but forces the use of
  the QueuedAfterReading mode. These functions should be used when-
  ever XEventsQueued() and XCheckIfEvent() would be required.

- The nxagentQueuedEvents() macro uses XQLength() to return the
  number of events that have been read and need to be dispatched.

- The nxagentPendingEvents() function returns true if there is any
  event queued. If not, it queries the transport to find if more
  events can be read.

- Ripristinated the code preventing the agent to connect to its own
  display. The code was disabled while migrating to the new tree.

- Removed the dependencies from the NXAGENT_QUERYBSIZE, NXAGENT_NO-
  EXPOSEOPTIMIZE and NXAGENT_ONEXIT. Removed the unused code.

- Removed more unused code in Clipboard.c.

- The shadow agent calls NXShadowDestroy before exiting.

- Reverted a change done in 3.0.0-8 dealing with expose events. If the
  result of the subtraction is not sent immediately, some duplicated
  refresh is shown.

nxagent-3.0.0-29

- The splash screen is removed as soon as the session is started in
  the case of shadow session.

- The rules to verify when the synchronization loop can be stopped
  are specified by means of a bitmask passed as parameter to synch-
  ronization functions.

- The glyphsets are no longer reconnected during a session resuming,
  but only when they are used.

- Initialized the timeout parameter in block handlers in case of NULL
  value.

- Added option 'block' to specify the size of image slices sent during
  the synchronization.

- Fixed a memory leak in nxagentParseOptions().

nxagent-3.0.0-28

- Improved the nxagentGetOptimizedRegionBoxes() function to optimize
  the high fragmented rectangle lists.

- When resizing nxagent window the fictitious resize for all top level
  windows, triggering the window tree validation, is not executed if
  rootless mode is off.

- The nxagentInputWindows cannot be resized in rootless mode because
  they are not created.

- Added NXdamage.c to the source files.

- Changed damage's GCOps functions drawing text. This was needed be-
  cause the original functions didn't call agent GCOps if the drawable
  was registered for damage events.

nxagent-3.0.0-27

- Fixed TR04E01677. Changed the reconnection procedure to call the
  function destroying the NoMachine splash window. It rarely happened
  that the splash window was not removed after resuming a session.

- Ignored the ForceScreenSaver requested by X clients to avoid clashes
  with our screen saver handling.

- Cleanup of code handling the screen saver timeout to remove referen-
  ces to the old drawable's synchronization method.

- Fixed TR04E01664. The session is terminated instead of suspended if
  the auto-disconnect timeout expires and the persistence is not allo-
  wed.

- Reverted an optimization in nxagentCheckWindowConfiguration() in
  order to avoid inconsistencies in the stacking order.

- Fixed a segmentation fault in rootless mode.

nxagent-3.0.0-26

- Some fixes to build in the Cygwin environment.

nxagent-3.0.0-25

- Renamed the option 'lazylevel' to 'defer'.

- Added a flag to windows to know if they have transparent children,
  in order to reduce to minimum the put images on windows covered by
  their children.

- Created a generic list of graphic contexts, used when synchronizing
  drawables between the nxagent and the remote X server. All the GCs
  are created with IncludeInferiors property. This solves problem when
  trying to synchronize windows covered by children with transparent
  backgrounds.

- The nxagentUserInput checks if keys are pressed.

- Fixed some memory leaks.

- In shadow mode, removed the handling of events of the source display
  from the code. They can be handled in the nxcompshad library.

- In shadow mode, allow the synchronization loop to break in case of
  input event.

- Moved the call to miDCInitialize after the initialization of poin-
  ters to screen functions. This was needed to make DAMAGE work pro-
  perly.

- In shadow mode, not breaking the polling if a mouse button is down.

- In shadow mode, allow events to break the loop sending updates.

- At reconnection the input window is raised after the root window is
  mapped.

- Fixed an invalid read. The call to the function nxagentSetInstalled-
  ColormapWindows() has been moved from nxagentDestroyWindow to Dele-
  teWindow.

nxagent-3.0.0-24

- The corrupted drawables are added to dedicated lists of resources
  to speed up the synchronization process.

- The nxagentUserInput checks if a mouse button is pressed.

- Created the nxagentGetScratchGC which resets the scratch GCs to de-
  faults values also on the remote X server.

- The synchronization cycle is forced when a timeout expires, albeit
  the remote display is blocked.

- Added a parameter to synchronization functions to specify if loops
  can break. It's useful to force the synchronization in some circum-
  stances.

- Keystroke CTRL-ALT-R is enabled in shadow mode too. It is used to
  switch scaled and non-scaled modes.

- Some changes to adjust the window position.

- Moved some macros to Misc.h.

- Some changes to adjust the behaviour of scaling feature in case of
  resize and switch to full screen.

- Freeing the buffer used for scaling if no needed anymore.

nxagent-3.0.0-23

- Fixed TR02E01648 and TR10D01534. Changed pointer motion events han-
  dling. In desktop mode the nxagent creates a InputOnly window that
  collects the MotionNotify events. This window is mapped over the
  root window. In rootless mode the nxagent creates all windows on
  real X server with PointerMotionMask.

- Not exiting from the block handler with zero timeout if drawables to
  be synchronized are pixmaps only.

- Reduced the margin around the glyph extent from 5 to 3 pixels.

nxagent-3.0.0-22

- Fixed initialization of XImage used for scaling.

- Changes to fix the position of the shadow main window.

nxagent-3.0.0-21

- Moved the implementation of scaling feature in nxagentRealizeImage.

- Disabled log message 'Font not found' in Font.c.

- The synchronization loop is called inside the BlockHandler. Synch-
  ronization goes on until the display is not blocked.

- Exiting the BlockHandler with timeout zero if corrupted drawables
  have not been synchronized because of blocked display connection.

- Changed the synchronization loop to slice the dirty regions.

- The updates by shadowing nxagents are now sent using the lazy me-
  chanics: the remote buffer pixmap is marked as dirty, then synch-
  ronized.

- Traversing the tree to synchonize windows.

nxagent-3.0.0-20

- Fixed a bug in the nxagentGetOptimizedRegionBoxes() function which
  was causing a bad merging of boxes.

- Added a margin of 5 pixels around the glyphs extents before synch-
  ronizing them.

- The synchronization cycle has been reactivated for the first lazy
  level, in order to synchronize the window's background.

- The CopyArea between pixmaps doesn't mark the full destination as
  corrupted, but clips the operation with the synchronized area of the
  source as happens for the windows.

- Implemented scaling feature for the shadow agent. To do: run-time
  control of this feature by keystrokes and window resize; adapting
  the window size to the scaled dimensions.

- Setting the shadow session scaling ratio equal to the size chosen
  from the user divided by the size of the main session.

- Scaled mouse motion events according with the ratio.

- Implemented the nxagentScaleImage() function.

- Updated version number and copyright in the output log.

- Fixed TR06D01390. When resizing nxagent window, we make a fictitious
  resize for all top level windows, in order to trigger the window
  tree validation.

nxagent-3.0.0-19

- Force LazyLevel to 0 in case of shadowing session.

- If shadowing poller returns that nothing is changed and no updates
  have to be sent, call WaitForSomething select with 50 ms timeout.

- The shadow agent doesn't break the sending of updates in case of
  mouse motion events.

- The scratch GC's clip mask was not cleared during a drawable synch-
  ronization. Now the GetScratchGC() function is called after changing
  the nxagentGCTrap flag.

- Implemented the function nxagentGetOptimizedRegionBoxes(). It gets
  the list of boxes forming a region and operates on it to merge as
  much boxes as possible, checking their width and position.

- Implemented the function nxagentClearRegion(). It does an XClearA-
  rea() for each box belonging to a region, using the color returned
  by nxagentGetCorruptedRegionColor() as background of target window.

- Implemented the function nxagentGetCorruptedRegionColor(). It gets
  the color of first outer pixel in the bottom right corner of re-
  gion.

- Fixed some memory leaks.

- Checked and removed some FIXME concerning the lazy encoding.

- Fixed and added some debug messages in Render.c, GC.c and GCOps.c.

- Added to the Literals.h file the Render and Shared memory requests.

nxagent-3.0.0-18

- Changes to comply with nxcompshad library.

nxagent-3.0.0-17

- The master agent holds the number of shadow nxagents connected to
  itself. The shadow nxagent notify its presence to master nxagent
  by setting the _NX_SHADOW property.

nxagent-3.0.0-16

- Rearranged the lazy level rules. All the link types now use the lazy
  level 1: the pixmaps are always corrupted, and they becomes synchro-
  nized only when they're sources of an operation (i.e. CopyArea, ren-
  der).

- The lazy levels greater than 1 don't synchronize automatically. It's
  possible to synchronize with two keystrokes: CTRL+ALT+Z forces the
  windows synchronization without take care of the congestion; CTRL+
  ALT+X synchronizes the windows and the background until there is
  enough bandwidth.

- Only the tile, stipples and glyphs are always synchronized.

- The height of glyphs region has been doubled to obtain a better vi-
  sual effect after the synchronization.

- Fixed a problem causing the background pixmaps to be used also if
  they were not fully synchronized.

- Added a function to convert a PolyPoint in a dirty region. The fun-
  ction is now disabled because it is not advisable to use the exten-
  ts.

- The XCopyArea is not requested if the clip region is NIL.

- The nxagentPutImage does not update the framebuffer when it is
  doing a synchronization.

- Moved all the code handling the drawables synchronization in the
  Drawable.c file.

- As the shared memory pixmaps are never synchronized with the re-
  mote X server, now they're marked as dirty when they're created.

- An XFillRectangles request now marks the rectangles of the desti-
  nation drawable as synchronized.

- Fixed a bug that was causing the CopyArea to propagate wrongly the
  corrupted region on the destination drawable when the GC uses a
  clip mask.

- Implemented a test function useful to show on the windows all the
  dirty regions as colored rectangles. It is used with the CTRL+ALT+A
  keystroke.

- Before sending the XRenderComposite operations (trapezoids, trian-
  gles, TriStrip, TriFan), the drawables involved are synchronized if
  they are dirties.

- Changes to shadow mode.

- Moved the code splitting the screen shadowing updates to a separate
  function.

- Suspend the sending of updates if input is received from the user.

- Make use of callback mechanism implemented in the nxshadow library
  to suspend screen polling when input is received from the user.

- Flush the display link when requested by the proxy.

nxagent-3.0.0-15

- Print the following info when the screen is resized: "Info: Resized
  screen [<screen number>] to [<width>x<height>].

- Changes to comply with nxshadow library.

- Fixed the height of screen updates in shadowing mode.

- Terminate cleanly if shadowing initialization fails.

- Split shadowing screen updates in smaller rectangles for slow links.

nxagent-3.0.0-14

- Fixed a compilation error in NXrender.c.

nxagent-3.0.0-13

- Changed the LICENSE file to state that the software is only made
  available under the version 2 of the GPL.

- Added file COPYING.

- Updated the files imported from X.org to the 6.9.0 release.

nxagent-3.0.0-12

- Fixed compilation on Sun platform.

nxagent-3.0.0-11

- Implemented an algorithm adapting colors if the target display have
  different depth than the shadowed display. It requires that visuals
  are TrueColor and depths are 16 or 24 or 32.

- Added the option shadowmode. If this option is '0' the shadowing
  session doesn't interact with the attached session.

nxagent-3.0.0-10

- Changes to comply with the nxshadow component.

nxagent-3.0.0-9

- Applied changes to files imported from X.org sources.

- Updated copyright notices to the current year.

nxagent-3.0.0-8

- Imported changes up to nxagent-2.1.0-17.

- Fixed problem with font path on Solaris 10.

- Disabled some log messages.

- If the agent has blocked when trying to write to the display, try to
  read other events from the connection.

- After synchronizing expose events, the result of subtraction is not
  sent immediately, but added to a region. Expose events will be for-
  warded to clients after exiting from the event loop.

- Critical output is set when button mouse events are received.

- Fixed TR12D01584. X11 sessions could not be started on Mandriva Li-
  nux 2007 because of a different location of fonts. The font path
  used by this distribution is now added to the alternates font paths.

- Fixed TR11D01550. Modified the collection of visuals when nxagent
  opens a display. Now we only use the ones with the same depth than
  the default one set in the screen.

- Modified the reconnection of pict-format structures, to avoid an
  error that arises when migrating a session by a Linux machine to
  a Windows one.

- Small changes in handling of expose events.

- GraphicsExpose are no more forwarded to clients immediately. They
  are merged with remote-only exposures and sent later.

- Invalidated expose queue elements dealing with destroyed windows.

- Cleaned up code in nxagentSynchronizeExpose().

- Fixed TR10D01541. Now when destroing a window if lastClientWindowPtr
  point to this window then in nxagentClearClipboard() we put nxagent-
  ClearClipboard to NULL and lastClientStage to SelectionStageNone.

- Fixed a problem with LazyLevel option that wasn't correctly read
  from command line.

- Fixed an arithmetic exception raised when the viewable corrupted
  region is empty but not nil.

- Removed the obsolete 'sss' option.

- Fixed a warning related to the expose queue.

- Modified the queue of exposed region to remove some memmov() calls.

- Remote expose events not having entries in the queue are collected
  in a global region and sent later, instead of being sent immediate-
  ly.

- Changed nxagentCheckWindowConfiguration() to prevent unuseful calls
  to XQueryTree().

- Fixed TR10D01530. Fixed an invalid write in doOpenFont().

- Fixed some invalid write/read in nxagentVerifyDefaultFontPath().

- Fixed TR10D01518. If needed, a restack is performed on the top level
  windows in rootless mode.

- Fixed TR10D01520. Reviewed session termination and log messages in
  the case of indirect XDMCP.

- In PictureCreateDefaultFormats(), cleaned the PictFormatRec struct
  when the format is not supported.

- Fixed TR09D01498. As it is possible to use multiple paths where to
  store the fonts, now the agent concatenates all the existing font
  paths used in various XFree/Xorg distributions to obtain a unique
  default font path.

- Fixed TR09D01502. The privates of the real pixmap are initialized
  before trying to allocate a virtual pixmap, avoiding the possibility
  to access an inconsistent structure in case the allocation fails.

- Fixed a memory leak due to a missing deallocation of a virtual pix-
  map's region.

- Fixed TR08D01486. Removed a warning in NXrender.c.

- Implemented FR08D01470. Now in the reconnection phase missing fonts
  are replaced by the most similar picked among the available ones.

- Fixed TR08D01480. A condition inside the nxagentWindowExposures
  function was ignoring the possibility that the first region para-
  meter could be a null region.

- Fixed TR06D01409. Now NXCollectGrabPointer() is called with the
  owner_events true in ActivatePointerGrab() .

- Fixed TR03D01317. Increased the time after wich the session termina-
  tes.

- Fixed TR08D01475. In rootless, ConfigureWindow requests are only
  forwarded to the X server, even if no window manager has been detec-
  ted.

- Fixed TR04D01367. An XKB event is sent to notify that keyboard map-
  ping has changed.

- Check the number of regions in the list before running nxagentSynch-
  ronizeExpose().

- Reduced the number of GCs used during the drawable synchronization.

- Optimized the corrupted region synchronization trying to use the
  extents is some circumstances instead of split the full region.

- Checked and removed some FIXME.

- Fixed TR05D01384. Xgl server uses less picture formats than nxagent
  usually does. Now the PictFormat structures used by nxagent are fil-
  tered with the ones available for the real display.

- Fixed TR06D01410. Function nxagentRestoreAreas have to make use of
  a GC with subwindow mode ClipByChildren for preventing from repaint
  also children of restored window. Children are restored in a separ-
  ate call, if they have backing store on.

- Fixed TR07D01426. The cursor data were swapped in place if the dis-
  play had different bitmap bit order. Let Xlib do this work on a copy
  of the image, preventing from messing up the original data.

- Fixed TR07D01450. Some fonts were missing in the list of available
  fonts because the ListFonts pattern used to build this list was too
  much generic. To build a full font list two different patterns have
  been used.

- Fixed TR07D01449. Some X clients might affect the X screen saver
  functioning modifying the default properties. The SetScreenSaver
  request now correctly checks the parameters changes to avoid any
  issue.

- Fixed TR07D01432. X11 sessions could not be started on Debian 'Etch'
  because of a different location of fonts. The font path provided by
  the Debian Policy is now added to the alternates font paths.

- Fixed TR07D01437. The auto suspend timer was reset when it should
  not.

- Fixed a conditional jump on uninitialised value.

- Fixed TR05D01380. Now migrating a session when display have a 16-bit
  depth does recover all visuals, avoiding reconnection failure.

nxagent-3.0.0-7

- Fixed problems occurring when the main session is terminated and the
  connection is refused to the shadow agent.

- Fixed include directory order for Solaris.

nxagent-3.0.0-6

- The shadow agent works only in viewport mode.

- Added nxagentShadowCreateMainWindow function. This function creates a
  pixmap and a window for mirroring the display root window.

- Added NXShadowUpdateBuffer() function in order to create the buffer
  for the poller with the same sizes of the root window of the master
  agent.

- Added NXxrandr.c NXxrandr.h and NXxrandrint.h files.

- If the main agent screen is resized, the shadow agent adapts to the
  new size of the root window.

- Changed option activating mirror to -S.

- Removed usleep() call when the agent is suspended.

- Input events are sent to the main session even if it is in sus-
  pended state.

- Updates are made from top to bottom.

- Added the option IgnoreVisibility. If this option is set, PutImage
  is not skipped when the window is fully obscured.

- Added the option 'shadow' saying the display to attach.

nxagent-3.0.0-5

- Added the mirror mode. It is activated by -M option.

- Recovered the state of keys when the agent in access mode loses
  focus in mirror mode.

- Changes to work with 16-bit depth display in mirror mode.

- Changed the Imakefile in order to include NXaccess.h and NXaccess-
  Event.h files.

- The layout keyboard is passed to NXShadowCreate() function in order
  to load the right keymap file in mirror mode.

nxagent-3.0.0-4

- Small changes to build on 64 bit x86 platform.

nxagent-3.0.0-3

- Fixes to build on Cygwin platform.

- Change the order of include directories in Imakefile.

- Renamed GC.h, Window.h and Pixmap.h to avoid name clashes.

- Undefined NXAGENT_UPDRADE in Composite.c and NXcomposite* files.

- Defined ddxBeforeReset() in Init.c.

nxagent-3.0.0-2

- Merged changes to NXdispatch.c, NXdixfonts.c, NXmiwindow.c, NX-
  picture.c, NXproperty.c, NXrender.c, NXresource.c, NXwindow.c.

nxagent-3.0.0-1

- Opened the 3.0.0 branch based on nxagent-2.0.0-88.

nxagent-2.0.0-88

- Fixed a memory leak in the code handling the remote font list.

- Removed some log message.

nxagent-2.0.0-87

- The box size is checked during the region synchronization to avoid a
  possible arithmetic exception.

nxagent-2.0.0-86

- Checked the validity of the colormap in nxagentChangeWindowAttri-
  butes().

nxagent-2.0.0-85

- Fixed the bad destination coordinates of shared memory pixmap synch-
  ronization in nxagentCopyArea() and nxagentCopyPlane() functions.

nxagent-2.0.0-84

- Discard the Terminate Server key sequence Ctrl-Alt-BackSpace.

nxagent-2.0.0-83

- Added a workaround to prevent the use of an inconsistent client poi-
  nter in the nxagentNotifyConvertFailure() function.

nxagent-2.0.0-82

- Fixed the parsing of option 'backingstore'.

nxagent-2.0.0-81

- The agent window visibility on the real X server is used together
  with the internal state to decide if graphics operations can be
  avoided.

- When restoring areas, if the backing pixmap is corrupted, an expose
  event is sent to the region that can't be restored.

nxagent-2.0.0-80

- The core protocol requests internally used to accomplish a Render
  extension request are no longer propagated to the real X server. To
  be more precise in this way we can save many XCreatePixmap, XChange-
  GC and XSetClipRectangles.

- Corrected a minimal incoherence in nxagentCopyArea in managing the
  creation and deallocation of a region.

- Fixed a double synchronization of an aged drawable during a put ima-
  ge operation, due to a missing check of nxagentSplitTrap value.

- Added the VisibilityChangeMask bit to the event masks.

- Improved the algorithm which prevents the server client's resource
  duplication.

nxagent-2.0.0-79

- Added the 'lazylevel' option usable in the command line to specify
  how much the Agent should be lazy. The default level is 2. Each
  level adds the following rules to the previous ones:

  Level 0  The lazy is off.

  Level 1  The put images are skipped if we were out of bandwidth,
           unless that the destination drawable has an old corru-
           pted region.

  Level 2  No data is put or copied on pixmaps, marking them always
           as corrupted and synchronizing them on demand.

  Level 3  The put images over the windows are skipped marking the
           destination as corrupted. When a copy area to a window is
           requested, the source is synchronized before copying it.

  Level 4  The source drawable is no longer synchronized before a
           copy area, but the operation is clipped to the synchro-
           nized region.

- Implemented a dynamic synchronization mechanism, based on user ac-
  tivity: if the input devices are not used for a variable amount of
  time (depending from the configured link type), the synchronization
  starts and goes on until there is enough bandwidth.

- Minor fixes to the way the copy area propagates the corrupted re-
  gion.

- Whenever a put image is done, a full synchronization is forced on
  the destination drawable if it has an old corrupted region.

- During the overall synchronization a drawable is skipped if its
  timestamp is lower than the synchronization interval.

- Updated the copy plane to skip the operations from a corrupted pix-
  map to another pixmap.

- Fixed the pixmaps synchronization which was not checking the avai-
  lable bandwidth.

- In rootless mode, ConfigureWindow requests are not internally per-
  formed for top level windows if a window manager is running. Anyway
  they are forwarded to the X server.

- Enabled the DPMS extension.

- Fixed the -dpi option.

nxagent-2.0.0-78

- When the remote proxy supports the alpha encoding, the alpha data
  is sent compressed. When connected to an old version, the agent
  uses the NXSetUnpackAlphaCompat() call.

- Added support for the RLE pack method.

nxagent-2.0.0-77

- Fixed the check for special keystrokes. State mask for Alt and Meta
  keys are inferred from the X server modifier map.

nxagent-2.0.0-76

- Fixed application icon in rootless mode.

- If SYNC_WHOLE_GLYPH_DRAWABLE is set in Render.c the whole drawables
  used in the composite glyphs are synchronized. This is useful to
  evaluate the policy we should use to minimize the put images.

- Code cleanup in Pixmap.c concerning the synchronization functions.

- Added the nxagentSynchronizeBox() function.

- Setting a wide band link (ADSL, WAN, LAN) disables Lazy and Strea-
  ming options.

- Now the Lazy option can be switched by the Ctrl+Alt+E keystroke.

- Set a timestamp on a drawable to verify how much old its data are.
  If we didn't update it since two seconds, the put image operations
  are not skipped.

- The image data split in chunks smaller than a threshold is now mo-
  ved from the nxagentPutImage() to the nxagentRealizeImage() func-
  tion. If a chunk is going to be put on an hidden area of a window,
  the operation is skipped.

- Fixed the value assigned to the id of the alpha visual. Now it is
  assigned by XAllocID().

- Removed a call to XSetInputFocus() before mapping the default win-
  dows.

- Restored the backup display pointer when failing to reconnect the
  display.

- Fixed some return value in the options parser function.

- Fixed the parsing of environment variable.

nxagent-2.0.0-75

- Optionally split the long X_RenderTrapezoid requests in multiple
  messages to help the compression.

nxagent-2.0.0-74

- Fixed a bug preventing the reconnection of pictures.

- Fixed the way the agent notify its start up to NX Client. Now the
  ownership of agent atom is set before the reconnection of pixmaps.

nxagent-2.0.0-73

- Added a check on the display pointer in nxagentTerminateDisplay()
  to ensure that we don't try to force an I/O error if the display
  is already down.

- The image operations now are clipped to the visible area of the
  drawable. As this may hamper the caching algorithm, only source
  images bigger than 32K are clipped.

- Code cleanup in Render.c.

- When setting SKIP_LOUSY_RENDER_OPERATIONS in Render.c the realiza-
  tion of some operations is skipped. This is useful to determine
  how clients (mis)use the RENDER extension to achieve even worse
  performance than they were able to achieve using the core protocol.

nxagent-2.0.0-72

- Ensured that SIGUSR1 and SIGUSR2 are ignored if the NX transport
  is not running.

nxagent-2.0.0-71

- Modified the following messages used to track the session state:

  From: "Session: Session starting at..."
  To:   "Session: Starting session at..."

  From: "Session: Session terminating at..."
  To:   "Session: Terminating session at..."

nxagent-2.0.0-70

- Removed the obsolete 'Info' messages related to the 'fast' versus
  'slow' copy area and get image modes. The -slow and -fast options
  are now ignored as ignored are the keystrokes that allowed switch-
  ing between the two modes.

- Removed more obsolete warnings and commented the logs left around
  for test purposes.

- Removed the code in NXdispatch.c handling the fake get-image.

- Removed the flags related to the use of the frame-buffer.

- Major code cleanup in GCOps.c, Window.c, GC.c, Pixmap.c, Screen.c.

nxagent-2.0.0-69

- Added a check to avoid parsing an empty DISPLAY variable.

- Added parsing of the 'streaming' option.

- GetTimeInMillis() function is compiled only if DDXTIME is defined,
  to avoid double definition errors on Solaris platform.

- Messages "Suspending session..." and "Session suspended..." are not
  printed if the DE_TERMINATE dispatch exception is set.

- When synchronizing the shared memory pixmaps the image is no longer
  put on the framebuffer.

- Code cleanup in the nxagentSynhronizeRegion() function.

- Added the 'lazy' option to enable or disable the lazy policy. It is
  activated by default. At the moment this is configured at compile
  time and can't be changed through a command line or the option file.

- Fixed the counter of the corrupted backgrounds by checking if the
  pixmap was already marked.

- The option SharedPixmaps is now activated by default.

- Fixed a problem when synchronizing the shared memory pixmaps with
  the operation being erroneously skipped.

nxagent-2.0.0-68

- If we are doing a copy area to a pixmap and the source drawable is
  not synchronized, the destination is marked as corrupted and the co-
  py area request is not propagated to the X server. As a general rule
  the source drawables are now synchronized only when they are copied
  to a visible window.

- The nxagentSynchronizeRegion() function synchronizes the region one
  box at a time. This solves the incorrect pictures synchronization.

- When a new element is added to the list of exposed region, sending
  the synchronization request to the X server is postponed to the next
  call of nxagentFlushConfigureWindow().

nxagent-2.0.0-67

- Ensured that NXTransDestroy() is called when getting rid of the NX
  transport.

nxagent-2.0.0-66

- The various messages used by the NX server to control the state of
  the session have been changed and the NX server will have to be mo-
  dified accordingly.

  At the early startup the agent will print the following message:

  "Info: Agent running with pid '...'."

  Followed by:

  "Session: Session starting at '...'."

  The ellipsis here represent the current timestamp, as reported by
  the POSIX function ctime():

  Example: Mon May 22 15:07:11 2006.

  After the connection to the remote display has been established,
  the agent will print the following message:

  "Session: Session started at '...'."

  This replaces the old messages:

  "Info: Session started, state is [SESSION_UP]."

  Or:

  "Info: XDMCP session started, state is [SESSION_UP]."

  And:

  "Info: Entering dispatch loop with exception 0x0."

  If the display connection can't be established, due to a network
  failure, for example, the agent will exit with a fatal error, for
  example:

  "Fatal server error:
   Error: Unable to open display 'nx/nx,options=...'."

  This is a special case, as the X server is still initializing and
  the agent can't intercept all the possible causes of errors.

  When suspending the session, the agent will print one of the fol-
  lowing messages, depending on the reason of the disconnection:

  "Session: Suspending session at '...'."

  Or:

  "Session: Display failure detected at '...'."
  "Session: Suspending session at '...'."

  As soon as the disconnection procedure is completed, the agent will
  notify the server with the message:

  "Session: Session suspended at '...'."

  This message replaces the old message:

  "Session: Session suspended."

  When entering the reconnection procedure, the agent will print:

  "Session: Resuming session at '...'."

  If the session can be successfully resumed, the agent will print:

  "Session: Session resumed at '...'."

  Otherwise, if the display cannot be opened or if the proxy is not
  able to negotiate the session, the agent will return in suspended
  mode by printing:

  "Session: Display failure detected at '...'."
  "Session: Session suspended at '...'."

  At the time the session be terminated, the agent will print:

  "Session: Session terminating at '...'."

  Followed by:

  "Session: Session terminated at '...'."

  This replaces the old message:

  Info: Exiting dispatch loop with exception 0x2.

  The message 'Session terminated at...' should be the last message
  parsed by the NX server. From that moment on the NX server will
  wait the agent process to ensure that the cleanup procedures are
  completed without errors and that the process successfully termi-
  nates with the exit code 0.

nxagent-2.0.0-65

- Many improvements to the block handler and to the drawable synch-
  ronization loop.

- Anyway the synchronization loop is skipped, at the moment, to bet-
  ter test the new copy area implementation. Also all the put-image
  on pixmaps are skipped, so that the pixmaps are only synchronized
  on demand.

- Small fix in the put image to always use the region already allo-
  cated when marking a region as corrupted.

nxagent-2.0.0-64

- The realization of the put image operations now depends on the
  state of the link, as reported by the proxy through the synchroni-
  zation handler. If the proxy link is aproaching a congestion, the
  destination area of the drawable is marked as corrupted and the
  operation is skipped.

- At the moment the synchronization strategy is quite unsophistica-
  ted. The drawables are synchronized when a timeout expires in the
  block handler. The synchronization loop is aborted as soon as the
  link approaches again the congestion and is restarted at the next
  timeout.

- Imported miwindow.c from the DIX layer. The code has been changed
  to prevent miSetShape() from trying to destroy a null region. The
  bug appears to be related to the backing store but it is unclear
  if can also affect the sample server. The region is allocated at
  the beginning of the function only if the backing store is set for
  the window. Then miSetShape() calls miChangeSaveUnder(), that, in
  turn, calls miCheckSubSaveUnder(). The latter can change the back-
  ing store attribute of -some- windows, including, apparently, the
  window that miSetShape() is processing. miSetShape() then destroys
  the region if the backing store is set, but it doesn't verify if
  the region was actually allocated. The problem is fixed by simply
  adding a check on the pointer.

nxagent-2.0.0-63

- Added the nxagentDisplaySynchronizationHandler() callback. The NX
  transport uses the callback to report when it is possible synchro-
  nize the pixmaps and the other X objects that are corrupted or in-
  complete.

- Fixed nxagentClearSelection() to correctly validate the selection
  owner before clearing the record.

- Changed the NXGetControlParameters() call to reflect the changes
  to the reply.

nxagent-2.0.0-62

- At reconnection the pixmap data is sent to the remote X server only
  in two cases: if the pixmap is associated to a picture (glyphs, for
  example) or if its depth is 1 (clip masks of GCs). All the other
  pixmaps are marked as corrupted and synchronized on demand as soon
  as the drawable is used as a source. This code is not enabled by
  default and is currently being tested.

- Implemented a new copy area function synchronizing the corrupted
  region of a drawable before using it as a source.

- Imported resource.c from the DIX. This makes possible to avoid the
  duplication of the RT_GC, RT_FONT and RT_PIXMAP resource types.

- Added the RT_NX_GC resource type and removed the old code dealing
  with the reconnection of the GCs used by the GLX extension.

- Fixed a problem in the synchronization of the window background.

- Checked and removed some FIXMEs related to the streaming code.

- Changed nxagentRestoreAreas() to take care of the width of the win-
  dow's border.

- Changed nxagentSaveAreas() to be independent from the window's pos-
  ition.

- Called nxagentMapDefaultWindows() before pixmaps' reconnection.

- Changed nxagentMapDefaultWindows() to notify the client about the
  agent's startup also when running in rootless mode.

- Added the delete and backspace keystrokes to the routine removing
  duplicated keys.

- Wehn resizing the desktop the clip region of the children windows
  is clipped to the new size of the root. This fixes a crash occur-
  ring when resizing the desktop to the minimum height.

nxagent-2.0.0-61

- Changed the extraction of alpha channel from images to be endianess
  independent.

nxagent-2.0.0-60

- nxagentReleaseSplit() now uses the NXAbortSplit() request to force
  the proxy to discard the pending splits.

- Added the value of the SharedMemory and SharedPixmaps options in
  the log, together with the size of the shared memory segment used
  by the remote proxy.

- Fixed the compilation problem affecting the previous version.

- The location of xkb base directory is checked by calling  _NXGetXkb-
  BasePath() function.

- Fixed TR05D01371. nxagentVerifyDefaultFontPath() is called only if
  the default font path is not defined on the command line.

- Removed some log message.

nxagent-2.0.0-59

- Improved the composite text operation to synchronize the regions
  affected by the operation instead of the whole drawable.

- Updated the copy plane to better propagate the corrupted region
  to the destination.

- The background pixmaps are synchronized with a deferred strategy.
  Tiles and stipples are still synchronized as soon as the GC needs
  to be used.

- Completed the new copy area implementation.

- Shared memory pixmaps are not synchronized after a RenderChange-
  Picture operation. This needs further testing.

- Added a nxagentNotifyKeyboardChanges() function that sends a Map-
  pingNotify event to clients when the keyboard is reloaded or re-
  configured. The SendMappingNotify() function is not used anymore.
  This hopefully solves the TR01D01284.

- Moved the nxagentResetKeyboard() function in Keyboard.c.

- Checked if the previous sibling of a window is changed before try-
  ing to restack it. This saves the redundant window configuration
  requests of the previous version.

nxagent-2.0.0-58

- Before composite glyphs operations, only areas intersecting the
  glyphs extents are synchronized.

- When a new split resource is allocated, a copy of the GC used by
  the put image operation is created. Such copy will be safely used
  by the commit operation even if the original GC is changed or
  destroyed.

nxagent-2.0.0-57

- Region saved by the backing store and corrupted region of backing
  store pixmaps are emptied at suspend and resume time. This makes
  the exposures go to the clients that will redraw their windows.

- Changed the nxagent root window cursor. The cursor of the parent
  window is used instead of the default 'X' cursor.

nxagent-2.0.0-56

- Rewritten the state machine handling the streaming of the images.

- By calling FatalError(), the normal server shutdown was skipped
  and left the X server socket in .X11-unix. This happened also if
  for any reason the agent couldn't complete the session startup.
  Now the DDX abort routine, if the agent is not exiting because of
  an exception, calls nxagentAbortDisplay() which closes down the
  well known sockets.

- Upon a failure of the reconnection procedure, if the alert shown
  to the user by leveraging the proxy control channel is not set
  to a valid code, the function in will use a default.

nxagent-2.0.0-55

- Added an explicit link flush in the display block handler. The
  block handler should now be called by nx-X11 before entering the
  select, not only the the agent has entered WaitForReadable() or
  WaitForWritable().

- Removed the checks on the value of the Streaming option. The way
  a drawable is treated only depends from its previous state.

- Started reimplementing the copy area operation to better propaga-
  te the corrupted region to the destination.

- Shared pixmaps are now synchronized before a copy plane operation.

- The unpack alpha is discarded before the drawable synchronization.
  This fixes the problems with the synchronization of the cursor. A
  better way to deal with the condition is to be considered for the
  future.

- Added a check in the nxagentPutImage() function to skip the opera-
  tion if the window is fully obscured.

nxagent-2.0.0-54

- Fixed a bug in nxagentPaintWindowBackground(). A region passed as
  parameter was modified by this function and this affected subseq-
  uent operations involving the region.

- In rootless mode, the map state of a top level window is uncondit-
  ionally reflected in the internal state when receiving a map event
  from the real display.

nxagent-2.0.0-53

- Regions are marked as synchronized after an image operation if the
  image didn't generate a split.

- When an image operation takes place on a drawable which is already
  being streamed, the resource is marked as invalid and the commits
  are discarded.

- A specific trap is used at the time a drawable is synchronized.

- Fixed Render.c to use the latest streaming code.

nxagent-2.0.0-52

- Fixed a problem in rootless mode where some windows could have mis-
  sed to update the mapped flag after a MapNotify event.

nxagent-2.0.0-51

- Realization of images is skipped, if the link is down, and a small
  delay is introduced before returning from the image function.

- Started implementing a new handler to let the agent include arbit-
  rary data in the transport statistics. For now, only the interfa-
  ces and the stubs exist, and the handler is not registered to the
  proxy.

nxagent-2.0.0-50

- Removed the unused code in nxagentCheckPixmapIntegrity().

- Instead of calling nxagentShapeWindow() immediately, windows to be
  reshaped are added to the list of windows that have to be configur-
  ed at later time. This allows SaveAreas() to work even when windows
  change shape, as in the case of the "bouncing cursor" as implement-
  ed in some versions of the KDE.

- Added a missing call to nxagentFlushConfigureWindow() in the recon-
  nection procedure.

nxagent-2.0.0-49

- Code cleanup in the lazy encoding. Implemented distinct utilities
  to allocate the split resources and manage the corrupted areas.

- The Render.c file is taken from the previous version because the
  updates break the composite code.

- Renamed the option 'Lazy' to 'Streaming'.

nxagent-2.0.0-48

- Made the image cache use the agent data, instead of allocating and
  copying.

- Fixed a memory leak in the image routines.

- The image cache is freed at exit. This helps investigating other
  eventual leaks.

nxagent-2.0.0-47

- Solved the problem at reconnection with lazy encoding enabled.

nxagent-2.0.0-46

- Solved a bug in the parsing of the pack method that made the agent
  select an unavailable id.

nxagent-2.0.0-45

- Ensured that images are explicitly byte swapped before sending to
  an X server using a different byte order. In the attempt of saving
  an expensive operation, the previous code let the unpack procedure
  do the job, but this could fail to work in some special cases.

- Cleaned the bitmaps used for the core cursors before putting the
  image.

- Left the display error handler installed during all the lifetime
  of the session so that other parts of the code don't have to inst-
  all it explicitly before entering a critical Xlib routine.

- Removed more unused code.

nxagent-2.0.0-44

- Fixed the problem with the cursor image being encoded with a lossy
  method. The fix is a temporary. The final solution requires changes
  to the lazy encoding.

- Reworked the code dealing with the alpha visual. The color mask is
  set based on the endianess of the remote display and is recreated
  after a session resume.

- Removed more unused code.

nxagent-2.0.0-43

- Corrupted regions are now correctly clipped to the visible area of
  the drawable.

- Fixed a problem with the clip mask when calculating the intersect-
  ion of the clip region with the destination region.

- Drawables involved in a composite glyph operation are now synchro-
  nized prior to being used.

- The nxagentRealizeDrawable() function is now called only for draw-
  ables that are not already synchronized.

- Pixmaps are now skipped in the synchronization loop. Synchronizat-
  ion of pixmap is to be implemented.

nxagent-2.0.0-42

- Improved the algorithm removing the duplicated keys by trying to
  read more events.

nxagent-2.0.0-41

- Made use of the NXFinishSplit() request to speed up the completion
  of a pending split.

- Added an explicit NX transport flush before any operation that may
  block waiting for data from the X server.

- Set the NX flush policy to deferred after reconnection.

- Solved refresh problems when reconnecting in rootless mode.

- Modified the routine removing duplicated arrow key events. Now the
  routine deals with page down and page up keys as well.

- Added a check for xkb base directory path, in order to support new
  Linux distributions.

- Disabled backing store support for rootless sessions, as implement-
  ation is not very functional, yet.

nxagent-2.0.0-40

- Removed code related to old managing of backing store.

- Added initialization of backing store by calling miInitializeBack-
  ingStore().

- Implemented nxagentSaveAreas() and nxagentRestoreAreas() functions.
  These functions are based on fb code. Calls to XCopyArea() have been
  added in their implementation to make them be effective also on the
  real X server.

- Instead of calling nxagentConfigureWindow() in ClipNotify() and
  PositionWindow(), windows to be configured or mapped are added to a
  list, together with a mask storing operation that have to be done.
  Windows in the list will be configured or mapped later by calling
  nxagentFlushConfigureWindow(). This avoids that windows were mapped
  or configured before saving areas in the backing store pixmaps.

- The function nxagentFlushConfigureWindow() is called before resto-
  ring areas on the X server in nxagentRestoreAreas() and at the end
  of ConfigureWindow and MapWindow in the DIX layer.

- Blocked the NoExpose events at the proxy side.

- Fixed an error in nxagentCompareRegions().

nxagent-2.0.0-39

- Ensured that the display errors are detected while waiting for a
  split operation to complete.

- Removed more unused code.

nxagent-2.0.0-38

- Changed nxagentSetCursorPosition() to avoid warping the cursor if
  the requesting client is NULL or the serverClient.

- Added a specific trap to avoid compressing an image associated to
  a RENDER cursor using a lossy encoding.

nxagent-2.0.0-37

- Added a check in nxagentPaintWindowBackground() to avoid calling of
  XClearArea() if the window is not realized.

- Modified nxagentAtomNames in Atoms.c to include CLIPBOARD and TIME-
  STAMP atoms, avoiding further calls to XInternAtom in Clipboard.c.

- Solved TR04D01356. Auto repeat mode setting is no more propagated to
  the X server keyboard.

- Cleaned up the code in the routine removing duplicated arrow key
  events.

nxagent-2.0.0-36

- Added the Literals.h file. For now it just contains a table used
  to translate a request opcode to the name of the X request, to be
  used for test purposes.

nxagent-2.0.0-35

- Major code rewrite in nxagentPutSubImage(). Removed support for the
  deprecated image encodings. Ensured that padding bytes are cleaned
  before trying to locate the image in the nxcompext cache. Avoided
  to store the image in the cache if it is coming from a XVideo or
  GLX operation.

- Added support for the new RGB image encoder. This allows the agent
  to use the simplest encoding by still separating the alpha channel
  from the image data.

- Added the missing check in nxagentRedirectWindow() verifying that
  use of the composite extension is enabled.

- Updated to use the new NXCleanImage() function.

- Removed more debugging output.

nxagent-2.0.0-34

- Updated to use the 'what' parameter in NXFlushDisplay().

- Removed the duplicated arrow key events from the event queue.

- Solved the TR04D01355. The X11 agent now tries to locate the
  fonts.dir file in the misc directory, to verify the validity of
  the font path.

- Added a check in nxagentChangeClip to avoid creating a new clip
  mask if the old clip mask matches the former.

- Use the 'fixed' font to replace fonts that are not found a the
  display reconnection. This should overcome one the most common
  sources of troubles when migrating the session to a different
  display, and constitute the base for improving the algorithm
  trying to match a substitute font.

- Implemented the FR04D01360. Now the user can enable/disable the
  streaming of the images by using the option 'streaming'.

- Implemented the FR04D01358. The backing-store can be enabled or
  disabled by using the  option 'backingstore'.

- Forced the reconnection routine to call the IOError handler in
  the case the display cannot be opened.

nxagent-2.0.0-33

- The GetImage requests in 'slow' mode are now served by retrieving
  the content of the drawable from the frame buffer.

- Replaced a call to XQueryExtension() by one to XRenderQueryExten-
  sion(). This function caches previous QueryExtension requests. This
  partially implements FR01D01275.

- At reconnection, the keyboard is reset only if the keyboard option
  has been changed.

- Fixed the fonts reconnection procedure. Now the remote fonts list
  is refilled before fonts reconnection and after failed fonts
  reconnection, so as to store the correct list of available fonts.

- Added a check in nxagentLoadQueryFont to look up selected font in
  the list of available fonts. This check avoid filling FontStruct
  with invalid data.

- Added TIMESTAMP to handled selection targets.

nxagent-2.0.0-32

- Implemented FR03D01323. Added the 'clipboard' option to enable or
  disable copy and paste operations from the user's desktop to the NX
  session or vice versa. This option can take four values:

  client  The content copied on the client can be pasted inside the
          NX session.

  server  The content copied inside the NX session can be pasted
          on the client.

  both    The copy & paste operations are allowed both between the
          client and the NX session and viceversa.

  none    The copy&paste operations between the client and the NX
          session are never allowed.

nxagent-2.0.0-31

- Implemented FR03D01337. Now the X11 agent is able to read the op-
  tions from different places according to the following order: the
  DISPLAY variable, the options file, the command line.

- Implemented FR03D01347. Added 'composite' to parsed options.

- Always activate shared memory support in the remote X server proxy.

- Modified nxagentCopyArea for the case the source is a shared memory
  pixmap. The pixmap on the X server is not synchronized, but the con-
  tent of the shared pixmap mantained by the agent is placed directly
  on the destination drawable. This allows to skip the following Copy-
  Area operation.

nxagent-2.0.0-30

- Added the missing flush of the Xlib buffer at the beginning of
  the block handler.

nxagent-2.0.0-29

- Changes in the block and wakeup handlers to queue multiple reads
  and flush the link on demand.

- Removed the unused code in Control.h and Control.c. Renamed the
  files as Client.h and Client.c.

- Added support for the '-nocomposite' command line option.

nxagent-2.0.0-28

- Moved the composite code to Composite.h and Composite.c.

- Redirected the top-level windows when running in rootless mode.

nxagent-2.0.0-27

- When the composite extension is supported by the remote display,
  the agent window is redirected to the off-screen memory of the
  X server.

- Imported Xcomposite.c, Xcomposite.h and xcompositeint.h from the
  3.0.0 branch to be able to activate the off-screen redirection of
  the top level windows.

- Added Composite to the list of agent options. The default is to
  use the composite extension, when available.

nxagent-2.0.0-26

- Avoided to suspend the clients on excess of karma or after a get
  input focus request.

- Images are now split only when the agent is in congestion state.

- Moved all the image related functions from GCOps.h and GCOps.c to
  Image.h and Image.c.

- Removed the unused includes in GCOps.c and Image.c.

- Added the karma delay field to the NXGetControlParameters() call.

- Renamed placeholder.xpm as nxmissing.xpm. Renamed the Icon.h file
  as Icons.h. Added there a define to point at nxmissing.xpm in the
  include.

nxagent-2.0.0-25

- Implemented the FR03D01334. Option keyboard is now a synonym of
  option kbtype.

nxagent-2.0.0-24

- Ensured that the split procedure is completed before executing a
  render operation that required a synchronization of a shared mem-
  ory pixmap.

- Added the appropriate checks to avoid synchronizing the same sha-
  red memory pixmap multiple times.

nxagent-2.0.0-23

- Imported changes to NXrender.c and NXshm.c in the files for the
  3.0.0 port.

nxagent-2.0.0-22

- Implemented FR03D01331. Options shpix and shmem enable/disable the
  use of shared pixmaps and shared memory extension.

- Implented handling of value "query" for nxagentKbtype. This value
  is passed by the NX client for MacOSX. If value of nxagentKbtype is
  "query" or NULL we init keyboard by core protocol functions reading
  the keyvoard mapping of the X server. The property _XKB_RULES_NAMES
  is always set on the root window with default values of model and
  layout.

- Fixed TR11C01223. When the XDM connection can't be established the
  agent creates an alert to notify the user that XDM session failed
  to start.

- Changed Clipboard.c to fix invalid read errors in nxagentGetClip-
  boardWindow() function.

- Implemented FR11C01218. Modified Font.c introducing the new function
  nxagentLoadQueryFont, this function loads the font_struct struct
  locally instead of sending a QueryFont request.

- Modified nxagentListRemoteFontsfunction to fill nxagentFontList
  struct with all remote fonts, avoiding further calls to XListFonts.

- Added two functions, nxagentFreeRemoteFontList and nxagentFreeFont,
  used in disconnect phase to empty the nxagentFontList struct and
  the cached FontStruct elements, respectively.

nxagent-2.0.0-21

- Updated to include the remote proxy version in the NXGetControl-
  Parameter reply.

- Updated to use the NXDisplayFlush() and NXSetDisplayPolicy() int-
  erfaces.

nxagent-2.0.0-20

- NXInitDisplay() and NXResetDisplay() are called at the time we
  open or close the display, to let nxcompext set up its internal
  structures.

nxagent-2.0.0-19

- Activated the streaming of the images even in the case of a link
  type LAN.

- In NXmiexpose.c, if the number of rectangles in an exposed region
  exceeds 4, we let a predicate function decide if it is better to
  send the window extents, rather than the rectangles in the region.

- Added the NXAGENT_SERVER define in the Imakefile. It will be used
  in future to mark all the modifications made to files we imported
  from other layers.

- Removed the warnings from NXmiexpose.c.

nxagent-2.0.0-18

- Imported NXmiexpose.c in the agent code.

- Removed NXmiwindow.c from the agent code. We now use the original
  miwindow.c

- Removed the static qualifier from the _NXFontPath definition.

- Started implementing the new lazy encoding mechanism. For each of
  the drawables, the agent will create a "corrupted" region and will
  try to synchronize the drawable when there is bandwidth available.
  This is a work in progress.

- Implemented the function nxagentFbOnShadowDisplay. This is a test
  facility which opens a window on the display showing the content
  of the agent's framebuffer.

nxagent-2.0.0-17

- The image streaming procedure is now activated also when using a
  link of type LAN.

- Removed the call to NXTransDestroy() in nxagentCloseDisplay. The
  NX transport is now implicitly shut down by either NXForceDisplay-
  Error() or XCloseDisplay().

- Updated to comply with the new NX function prototypes introduced
  in nxcomp-2.0.0-31.

nxagent-2.0.0-16

- Fixed a bug in the nxagentModifyPixmapHeader function that was
  causing some glyphs to be displayed incorrectly.

- Implemented the test function nxagentPixmapOnShadowDisplay, useful
  to display a pixmap on the real screen to check its consistency.

nxagent-2.0.0-15

- Ensured that, before restarting a client after a no-split, all the
  pending image commits are executed.

- Installed the display error predicate function before trying to
  open the display even at session startup. This prevents the agent
  from disappearing silently if a failure occurs before the display
  initialization is completed.

- Moved the initialization of the callback functions in Display.c.

- Added some interfaces to manipulate the callbacks and the error
  handlers and verify the state of the display flags.

nxagent-2.0.0-14

- Implemented stub versions of the nxagentDisplayCongestionHandler()
  and nxagentDisplayBlockHandler() callbacks. See nx-X11-2.0.0-17.

- Added the nxagentDisplayErrorPredicate() function. In combination
  with changes implemented in nx-X11-2.0.0-16, this allows the agent
  to abort a blocking operation and shutdown the display in a timely
  fashion if a signal or any other error condition is received insi-
  de Xlib.

- Modified nxagentWaitSplitEvent() to use XIfEvent() as we can trust
  the proxy to either send the event or give up the proxy connection.
  The function will also give up when an error condition is raised,
  like for example a session termination requested by the user.

- Removed any remaining reference to the unused display buffer and
  image cleanup functions.

- Fixed exposures problems when reconnecting.

- Solved TR05C00896. The problem was due to window manager utilizing
  zero-thick-lines drawing requests. These drawing operations are now
  performed by calling fbPolySegment() instead of miPolySegment(),
   which doesn't handle the zero-thick-lines drawing case.

nxagent-2.0.0-13

- Improved the management of the expose events. We now create the
  fake window used to keep the agent synchronized with the X server
  only once, instead of creating and configuring a different window
  for each generated region.

- A warning is printed if the changes requested for the fake window
  don't match the changes reported in the subsequent ConfigureNotify
  event.

- Imported previous changes in NXevents.c into the 3.0.0 port.

nxagent-2.0.0-12

- Activated the image streaming also during the reconnection. This
  makes possible to leverage the remote disk cache.

- Ensured that all clients are restarted when the session is suspen-
  ded. This is required because the proxy is gone but we may have
  some client still waiting for the completion of a split procedure.

- Skipped the reset of the keyboard device if the display breaks at
  the time it is being reconnected.

- As the reset of the keyboard may have failed before we were able
  to set a valid DeviceIntPtr, also added a check in ProcessPointer-
  Event(), in NXevents.c to verify that the state of the display is
  valid before accessing any of the device members. This is to be
  better investigated.

nxagent-2.0.0-11

- Solved TR02D01298. The clip region associated to the current glyph
  was not updated because the serial number of the virtual pixmap
  pointed by the picture was not incremented.

- Imported the NXmiglyph.c file from render directory.

- Removed the patch added in the release 1.3.2-6 temporary fixing this
  problem.

nxagent-2.0.0-10

- Various improvements the wakeup procedures.

- Implemented the FR10C01110. Now, the X11 agent manages both the
  PRIMARY and CLIPBOARD selections. It is possible copy and paste text
  also by using Ctrl+C and Ctrl-V.

- Modified NXdispatch.c in order to correctly include header files.

- More cosmetic changes and code cleanup.

- Imported changes into the files for the 3.0.0 port.

nxagent-2.0.0-9

- Rewritten the procedures suspending and resuming the clients in
  Control.c. This solves a problem with clients that were restarted
  at wrong time and should ensure that multiple events for the same
  client are correctly handled.

- Removed the calls to NXSetUnpackGeometry() setting the parameters
  for the client 0. The geometry is now set only at the right time,
  just before trying to unpack the image.

- Removed the sample code using the NXTransChannel() interface.

nxagent-2.0.0-8

- Added test code showing how to open a new NX channel by using the
  NXTransChannel() interface.

- Streaming of images is not attempted in the case of link LAN.

- Added preliminary code to the tell the proxy to flush the link if
  the agent is idle.

- Imported changes from nx-X11-2.0.0-14 in NXdixfonts.c.

nxagent-2.0.0-7

- Modified exposures managing: agent synchronizes both with remote X
  server and remote window manager for every generated region. Synch-
  ronization is reached sending a ConfigureWindow request for a fake
  window created on purpose. This way the exposures for the resulting
  region coming from calculating the difference between local region
  and the remote region are sent to clients in order to avoid duplica-
  ted refreshes.

- Improved new algorithm for managing exposures in order to work pro-
  perly also in rootless mode: added privates to windows in order to
  get information about mapping of windows on remote X server and vi-
  sibility state too. This way local exposures are replaced by remote
  ones if windows are mapped only for agent or windows are not fully
  visible. This solves TR08C00971.

- Window attributes values about backing store and save-under are re-
  spectively set to NotUseful and False when creating a window on re-
  mote X server and ignored when a client requests to change these
  attributes.

- Removed a no more needed function call to generate exposures when
  resizing windows.

nxagent-2.0.0-6

- Updated the NoMachine copyright notices.

nxagent-2.0.0-5

- Added handling of font reconnection failure. In case of failure in
  reconnecting some font, the agent adds the font server connection
  forwarded by nxcomp to the font path of the X server.

- Fixed TR09C01022. Moved the handling of the session states into
  main cycle. The session states are not more handled into SIGHUP and
  IOError handlers but into nxagentHandleConnectionStates() called in
  nxagentWakeupHandler().

- In ResizeChildrenWinSize(), privates storing window geometry are
  updated even if the call to PositionWindow() is skipped. This have
  to be done because the window is moved by the X server accordingly
  with window gravity. This prevent some window positioning error on
  the real display evidenced with OpenOffice and GNOME.

nxagent-2.0.0-4

- Solved TR12C01234. In some conditions Alt-F4 keystroke made the user
  unable to open the Gnome Menu panel. This was due to the agent dis-
  carding KeyRelease events for Alt-F4 and Alt-F2.

- Undefined TEST and DEBUG in Dialog.c

- Changed the NXAGENT_VERSION define from 1.5.0 to 2.0.0

- Caching and streaming of images is now disabled when dispatching
  requests from the GLX and XVideo extensions.

- Added the NXxvdisp.c and NXglxext.c files. These files are needed
  to intercept calls to the XVideo and GLX extensions. Only files
  in the main directory are imported. Files in the X directory, used
  for the 3.0.0 port, for now are empty.

- Added the nxagentXvTrap and nxagentGlxTrap flags. These flags are
  set when dispatching requests from the XVideo and GLX extensions.

- Added the GL and Xext include directories to the Imakefile to be
  able to compile the NXxvdisp.c and NXglxext.c sources.

- Modified the NXrender.c and NXshm.c files to set the nxagentGCTrap
  nxagentRenderTrap and nxagentShmTrap even when dispatching requests
  from swapped clients. Files for the 3.0.0 port are not updated.

nxagent-2.0.0-3

- Solved a problem in the export of WM_SIZE_HINTS properties in root-
  less mode on 64 bit machines.

- Modified Render.c in order to correctly process Xrender header fi-
  les on 64 bit machines.

- Made changes in order to compile the agent in the Cygwin environ-
  ment.

- Renamed the files Time.* to Millis.*

- Specified the relative path of some included header files.

- In the Imakefile added a new include paths order related to the
  Cygwin environment to avoid name clashes.

- Disabled the MIT-SHM extension in the Cygwin environment.

- Fixed TR11C01186. Added -timeout item to the usage message.

- Fixed TR08C00945. Scrolling a document in Firefox caused image left-
  overs with animated banners. Set the right window gravity on windows
  created in the real X server. Let X move children for us accordingly
  with window gravity attribute, without dix interferences.

- Removed logs related to parsing of the options file.

- Modified dialogs in order to show the name of the session in the
  caption.

nxagent-2.0.0-2

- Imported changes up to nxagent-1.5.0-112.

- Fixed TR12C01241. The failure condition returned by the XQueryTree
  function is managed in order to avoid the subsequent errors.

- Fixed the TR11C01165. X11 sessions could not be started on Ubuntu
  5.10 because of the different location of fonts. Now we check the
  existence of the fonts directory pointed by the default XF86 and
  X.org font path and, if the directory does not exist, we use the
  alternate font path used on Ubuntu.

- Set the default value of DeviceControl option to False before resu-
  ming a session.

- Added a warning message printed if reset of keyboard fails at recon-
  nection.

- Fixed TR11C01185. Solved by checking if there are windows iconized
  when a window is destroyed.

- Fixed TR11C01164. The xkbcomp process used LD_LIBRARY_PATH as it was
  a child of the agent. Added a call to NXUnsetLibraryPath() in Init.c
  in order to remove LD_LIBRARY_PATH before executing a child process.

- Check if there are windows iconized before terminating a rootless
  session.

- Modified CHANGELOG to include reference to fixed TRs TR08C00967 and
  TR08C00969. Removed some typo.

- Fixed TR11C01194. The agent crashed if launched with -kb option.

- Fixed TR10C01042. The keyboard didn't work if the session migrated
  from Apple X server to another platform and viceversa. This has been
  solved by initializing the keyboard device whenever the session is
  resumed. This feature can be disabled by the new option -nokbreset.

- Fixed some compilation error arising if TEST was enabled in the file
  Keyboard.c.

- Fixed TR11C01167. During the disconnection the font structures poin-
  ted by the font cache were freed leaving inconsistent data in the
  corresponding privates. Now they are nullified and the GCs are che-
  cked to guarantee a correct font handling in the suspended state.

nxagent-2.0.0-1

- Opened the 2.0.0 branch based on the 1.6.0-11.

nxagent-1.6.0-11

- Updated the NX.original copies of files in X directory.

- Merged the NX changes:

  - From dix/extension.c to NXextension.c.
  - From dix/dixfonts.c to NXdixfonts.c.
  - From dix/glyphcurs.c to NXglyphcurs.c.

- Export of CARDINAL properties are expanded to 64 bit units on 64
  bit machines.

- Solved a segmentation fault when handling configure notify events
  in rootless mode on 64 bit machines.

- Merged the NX changes from dix/property in X/NXproperty.c.

- Correctly allocated the local variable used in the call to NXGet-
  CollectedInputFocus to be of 64 bit on 64 bit machine.

- Defined symbolic constants XlibWindow in order to propertly handle
  export property on 64 bit machine.

- Moved the XlibAtom define from Atoms.h to Agent.h.

- Modified export properties of type Window and Atom in order to han-
  dle correctly Window and Atom types on 64 bit machines.

- Removed some invalid read in Atom handling code when compiled for 64
  bit, due to mismatched size of Atom type between Xlib and Xserver
  code.

- Modified some header files in order to properly see the correct pro-
  totypes of some Xlib structures on 64 bit machines.

- The variable currentDispatch is always defined.

- The dispatch current time is updated, this way the initial timeout
  can elapse and the splash window is removed.

nxagent-1.6.0-10

- Imported changes from nxagent-1.5.0-103.

- Removed some redundant redeclarations.

- Merged the NX changes from randr/randr.c to NXrandr.c.

- Removed some warnings in NXrandr.c.

- Removed NXAGENT_FORCEBACK and NXAGENT_INTERNALBS code.

- Added ddxInitGlobals function in order to compile with the new X.org
  tree.

- Converted nxagentSynchronizeShmPixmap from macro to function to
  solve a graphical render problem caused by the variable's scope.

nxagent-1.6.0-9

- Imported changes from nxagent-1.5.0-102

- Fixed TR10C01124. Function nxagentSetPictureFilter() filled the log
  with  a debug message.

- Removed a debug message in Events.c.

- Run function nxagentSetTopLevelEventMask() only in rootless mode.

- In the Java application IntelliJ the dropdown menus was shown in a
  wrong position when the main window was moved or minimized. The
  problem is solved for KDE desktop environment.

- Fixed TR08C00967, TR08C00969, TR08C00941. Our incomplete implementa-
  tion of the MIT-SHM X11 extension was a problem for some applica-
  tions using the Shared Memory Pixmaps. Now the extension support has
  been completed, so the nxagent can handle the Shared Memory Pixmaps
  requests. Introduced some changes in the render implementation to
  synchronize the content of the Shared Memory Pixmaps with the X ser-
  ver before performing the ChangePicture and Composite operations.

nxagent-1.6.0-8

- Fixed TR09C01028. The problem was the GC foreground was not updated
  on the X server. This was due to the private fields was not copied
  from a GC to another in the function nxagentCopyGC(). Added macro
  nxagentCopyGCPriv in GC.h.

- Solved TR11C01162. Removed the dialog shown by nxcomp/nxagent when
  the resume of a session is happening over a slow link.

nxagent-1.6.0-7

- Imported changes up to nxagent-1.5.0-100.

- Fixed some compilation errors.

- Fixed a typo in nxagentChangeClip() declaration.

- Fixed TR10C01040. After the session resume the applications using
  OpenGL were not correctly resumed because some GCs were not recon-
  nected. Now we save these GCs in a safe vector, so we can't lose
  them.

- Improved font reconnection procedure in order to take advantage of
  new font channel provided by nxcomp. If resuming session fails be-
  cause missing fonts, the font channel provided by nxcomp is added
  to font paths of X server. After reconnection succeded the font
  channel is removed from font paths.

- In the Java application IntelliJ the dropdown menus remained opened
  and shown in a wrong position when the main window was moved or
  minimized. This problem has been solved by sending a sinthetic event
  to client. This solves partially TR09C01012.

- In the same application the caret was not shown in the text window.
  Solved the problem by setting nxagentGCTrap before calling a MI
  function in every GC operations.

- Merged the NX changes:

  - From render/glyph.c to NXglyph.c.
  - From Xext/shm.c to NXshm.c.
  - From render/render.c to NXrender.c.
  - From mi/miwindow.c to NXmiwindow.c
  - From render/glyphstr.h to NXglyphstr.h.
  - From render/picturestr.h to NXpicturestr.h.
  - From render/picture.c to NXpicture.c.
  - From dix/dispatch.c to NXdispatch.c.
  - From dix/events.c to NXevents.c.

- Changed picturestr.h glyphstr.h to remove some formatting changes
  compared to the original files.

- Disabled Xinerama extension in order to fix a type conflict in NX-
  dispatch.c.

- The current directory has been moved in front of the include dire-
  ctory list.

- Removed NXAGENT_FORCEBACK code in files imported from DIX.

- Changed NXshm.c NXrandr.c NXproperty.c  NXpicture.c NXglyphcurs.c
  NXglyph.c NXextension.c NXrender.c NXdixfonts.c NXdispatch.c NXmi-
  window.c to remove some formatting changes compared to the original
  files.

- Added copyright notice to file NXrandr.c.

- All files, except those from mi and dix, compile fine in the new
  tree. Problems remain with different size of Atoms and other XID
  objects.

- More compilation fixes for the new tree.

- Merged the NX changes from dix/window.c to NXwindow.c.

- Changed NXwindow.c and NXevents.c to remove some formatting chan-
  ges compared to the original files.

- More compilation fixes aimed at porting the agent to the new tree.

- Started porting the agent to the 6.8.99.16 X.org tree.

- Lot of compilation fixes aimed at building in the new environment.

- Files imported from the X.org tree's dix and mi will have to be
  recreated in the nxagent/X directory. The new files will be inclu-
  ded and built from the nxagent/X director if the NXAGENT_UPGRADE
  symbol is defined (as it is the case when building in the 2.0.0
  nx-X11 tree), otherwise the usual NX* files in the nxagent's dir-
  ectory will be compiled.

- Fixed TR09C01021. SIGHUP it was not received from the proxy. The
  handler of SIGHUP must be installed also in the case of not persi-
  stent sessions.

- In non persistent case: if session is normally running, SIGHUP sig-
  nal is dealt like SIGTERM, otherwise it is passed to the proxy.

- Fixed TR09C01027. Changed function nxagentHandleConfigureNotify()
  in order to get changes of the staking order in a rootless session
  even if no window manager is running.

- Fixed TR09C01025. The problem was XView application could be unable
  to respond to user's input. Modified the Event Mask for non top le-
  vel windows reparented by the root window. Set the input member of
  XWMHints to communicate the window manager the keyboard focus model
  used by the application.

- Fixed TR09C01026. Added 'fast' and 'slow' to the set of accepted
  command line parameters. 'fast', 'slow' and 'geometry' command line
  parameters have precedence regarding the options file.

- Fixed TR08C00968. There was a problem in the implementation of the
  render extension.

- Fixed TR09C01016. In rootless mode when the session was resumed,
  the cursor was shown with a wrong shape.

- Fixed TR09C01011. Allowed clients to monitor the root window for
  structure redirect, button press and resize redirect events in root-
  less mode. This is a quick hack to make the java bean shell work
  flawlessy with the agent.

- Solved TR08C00961. Improved the algorithm updating the sprite win-
  dow. Now it is updated based upon crossing and motion event. Since
  on some X server, like Windows and MacOsX X servers, the only cros-
  sing event is not a reliable method to trace the sprite window chan-
  ges.

- Fixed TR08C00966. Solved the problem on Windows when a rootless
  session is suspended and some of the application windows are
  minimized.

- Fixed TR08C00960. Updated the internal screen dimension in rootless
  sessions at reconnection.

- Fixed TR09C01005. The problem was that the 'render' option on the
  command line was overridden by the one provided in the options file.

- Implemented the HandleEmptySplitEvent function that synchronizes all
  the drawables after the depletion of the split store, when the lazy
  option is activated.

- Some changes in order to avoid duplicated refreshes when display-
  ing Mandrake's kde menu.

- Changed level of some logs from WARNING into TEST in Window.c and
  in Rootless.c.

- Fixed TR08C00958. Changed the log message printed when the user re-
  quest to resume the session.

nxagent-1.6.0-6

- When reconnecting, try to estimate the shift on the main window due
  to WM reparenting.

- In the handling of configure events, if a WM is running save the po-
  sition of the main window only if event is synthetic.

nxagent-1.6.0-5

- Command line option -noshmem disables shared memory extension in the
  agent.

- Changed level of some logs from WARNING into TEST.

nxagent-1.6.0-4

- Some changes in order to improve handling of expose events in root-
  less. The GetInputFocus request is not sent after reconfiguring a
  top level window: window manager intervention could give race condi-
  tions. The request is placed in WindowsRestructured() in order to be
  sure it is sent after any event that could generate expose.

- Zero lenght change property are now imported in rootless mode.

- Corrected few typos.

- Replaced the function usleep with NXTransContinue when NX transport
  is running.

- Changed the session state to GOING_DOWN as soon as the reconnection
  is failed.

nxagent-1.6.0-3

- Updated rootless toplevel window map when a window is reparented to
  the root window.

- Renoved duplicated entry in rootless toplevel window map.

nxagent-1.6.0-2

- Removed TEST and DEBUG in Color.c.

- Removed a compilation error in Atoms.c if DEBUG is enabled.

- Removed invalid read at server reset in rootless mode, now the a-
  toms description are duplicate before that we cache them.

- Now the local atom in the atom cache are reset when exiting from
  the dispatch loop.

nxagent-1.6.0-1

- Opened the 1.6.0 branch based on nxagent-1.5.0-87.

nxagent-1.5.0-87

- Corrected the enable-disable lazy encoding dialog in order to show
  the correct keystroke Ctrl-Alt-E.

nxagent-1.5.0-86

- Reset agent position at reconnection when the new size of display
  doesn't match the old size and fullscreen is on.

- Inserted a comment about handling of expose events.

nxagent-1.5.0-85

- If fullscreen and resize options are true when reconnecting, geo-
  metry option is ignored and the root window is resized to the en-
  tire screen.

- Read the position of the main window at startup from geometry op-
  tions.

nxagent-1.5.0-84

- Changed the keystroke Ctrl-Alt-L to toggle the image encoding on
  and off to the new combination Ctrl-Alt-E.

- Enabled the keystroke Ctrl-Alt-M to minimize the root window also
  in window mode.

nxagent-1.5.0-83

- Replaced the call to XIfEvent() with something less efficient but
  safer, based on XCheckIfEvent(). The previous version might never
  return if an I/O Error was encountered waiting for the event. The
  new version fails gracefully, and returns after having restarted
  the client.

nxagent-1.5.0-82

- Removed some debug logs.

nxagent-1.5.0-81

- Forced window mode if X server geometry has changed at reconnection.

nxagent-1.5.0-80

- Reset resize desktop at startup flag before reconnection.

nxagent-1.5.0-79

- Removed race condition in the parsing order of the options parame-
  ter, now the geometry parameters are set in screen initialization.

nxagent-1.5.0-78

- Disabled auto-resize and viewport mode dialog in case of rootless
  session.

- Removed no more used -backingstore option from usage messages.

- Modified -bs command line option: now the default value "when_re-
  quested" is always set.

- Fixed wrong size of root window when switching from full screen to
  window mode and viewport navigation mode is enabled.

- Added option that solved a minimize bug in LeaveNotify when the
  root window is in full screen and the user is using viewport navi-
  gation mode.

- Forwarded HUP signal to NX transport, when session state is up and
  running.

nxagent-1.5.0-77

- Do PutImage in every case. Don't check if the drawable is synchro-
  nized.

- Do CopyArea, CopyPlane, Composite in every case, don't check whether
  the source is dirty.

nxagent-1.5.0-76

- Terminate rootless session 15 seconds after the last mapped window
  has been destroyed.

nxagent-1.5.0-75

- Ctrl-Alt-T shows suspend/terminate dialog also in rootless mode.

- Sleeps 50 ms in the block handler if the session state is down.

- In rootless mode, the focus window is changed following FocusIn
  events received from the real X server, also in the case no win-
  dow manager has been detected.

nxagent-1.5.0-74

- Changed the alerts names to comply with nxcomp-1.5.0-57.

- Moved loading of placeholder from startup to the first time it is
  needed.

- Corrected a typo in the CHANGELOG.

nxagent-1.5.0-73

- Ignored put image on not synchronized drawables, when the image
  doesn't cover the entire surface.

- Added parsing of render parameter in option file.

- Ignored I/O Error when session is suspended.

- Managed I/O Error at reconnection.

nxagent-1.5.0-72

- Fixed offset of the default window at reconnection and after switch-
  ing from fullscreen in window mode.

- Suppressed the -lazy command line option.

- Made some slightly changes in GCOps.c and Pixmap.c in order to com-
  ply with the new 'Lazy' option.

- Avoided to do CopyArea, CopyPlane and Composite operations when the
  source drawable is dirty.

- Rootless disconnect dialog has changed. This dialog is launched
  after some time the last window has been closed.

- Ignored geometry changes at reconnection if resize at startup is
  not set.

- Removed reset of the offset of the root window in viewport mode at
  reconnection.

- Fixed some refreshes problems in viewport mode and in desktop resize
  mode.

- Fixed a memory leak in nxagentWindowExposures().

- Added predicate to nxagentDispatchEvents.

- Implemented framework in order to wait for a free resource entry,
  when calling the asynchronous Collect* functions.

nxagent-1.5.0-71

- Added keystroke Ctrl+Alt+L switching lazy encoding option.

- Disabled viewport movement in resize mode.

- Changed agent geometry at screen resize.

- Changed agent geometry at initialization.

nxagent-1.5.0-70

- Restored the set of blocked signal after the dialog pid just laun-
  ched has been stored.

- Removed an already fixed FIXME.

- Updated the copyright message.

nxagent-1.5.0-69

- Started working at the integration of the lazy encoding functiona-
  lity. Made the agent draw the placeholder if the image is split and
  never suspend the client. There is no provision for synchronizing
  the drawables yet.

- Made the lazy encoding configurable by the new 'Lazy' option.

- Updated to include the changes in the NXStartSplit() and NXCommit-
  Split() requests.

- This version requires nxcomp-1.5.0-55 and nxcompext-1.5.0-16.

nxagent-1.5.0-68

- Fixed reconnection of iconified windows.

- Ignored the X server's scratch pixmap at reconnection.

- The desktop gets automatically resized at reconnection if the desk-
  top resize option is enabled.

- Added the resize option in nxagentProcessOptionsFile() to allow the
  user to change the geometry of both the root and the default window
  at reconnection.

- Fixed max size of the default window at startup when auto-resize
  mode is enabled or in the case of a reconnected session.

- Made some minimal changes in Atoms.c and NXdispatch.c.

nxagent-1.5.0-67

- Changed handling of expose events received from real X server. A re-
  gion is composed from expose events by checking the count field.

- Reimplemented the exposures managing. Now the GetInputFocus request
  is sent after a window has been configured or unmapped. We use a
  vector to store windows originating expose events while waiting for
  the reply to GetInputFocus.

nxagent-1.5.0-66

- Added the DisplayLatency value in the agent options. This is int-
  ended to give a hint about the latency of the current display
  connection. The value is currently used to determine if the agent
  is running across a slow link, and so it's appropriate to display
  the begin-reconnection alert.

nxagent-1.5.0-65

- Added the DesktopResize option. It controls the behaviour of the
  automatic (RandR) resize of the desktop when dragging the agent's
  window border.

- Automatic resize is again the default.

- Disabled the test logs in Events.c, GCOps.c Pixmap.c, Handlers.c,
  Reconnect.c.

- More cosmetic changes and code cleanup.

nxagent-1.5.0-64

- Rewritten the image streaming procedure to better leverage the new
  infrastructure. The start-split/end-split procedure is always init-
  iated by the agent, including when the size of the image is below
  the threshold, but the client is only suspended when the split has
  taken place in the NX transport.

nxagent-1.5.0-63

- Updated image streaming to use the new NX notification events.

- Removed the references to the NXSync() operation, not used anymore
  by the agent.

nxagent-1.5.0-62

- Fixed wrong position of the root window in case of viewport naviga-
  tion mode.

- Added a field to the client private to trace the client type.

- Tracked which clients are nxclient dialogs in order to not run the
  pulldown dialog on them.

nxagent-1.5.0-61

- Disabled server reset if not needed by XDMCP.

- Disabled persistence for indirect XDMCP session until the first gre-
  eter with the list of host has disappeared.

- Created a small data structure to contain information about integri-
  ty status and placeholder status of a drawable.

- Modified the call to nxagentRealizeOnePixmap function in order to
  avoid errors during the signal handling.

nxagent-1.5.0-60

- Added the XDMCP option. If both Rootless and XDMCP are selected the
  session will fail.

nxagent-1.5.0-59

- Limited the permission to reset the agent only to indirect XDMCP
  sessions, only one reset is allowed.

- Fixed max size of the default window when switching from fullscreen
  to window mode and auto-resize is disabled.

nxagent-1.5.0-58

- Enabled reset mechanism, in order to make XDMCP session work proper-
  ly.

- Added XSync for window manager detection, after a server reset since
  the XInternAtom already used should be cached.

- Now the pixmap status is always tested on real pixmap.

- The placeholder is drawn only once per drawable.

- Implemented nxagentUnmapWindows() in case of failed reconnection if
  the session was running in fullscreen mode and NX transport is not
  enabled.

- In nxagentPutSplitImage(), passing leftPad to XCreateImage().

- This version avoids sending the XSync() to the remote when a large
  amounts of GetInputFocus requests are issued by the same client.
  It will require more testing, especially to verify how it works on
  old Windows machines.

- Changed the NXCommitSplit() call to comply with the new interface.

- The drawable status is now propagated on graphic operations where
  the source is using the tile and stipple components on the graphic
  context and the tile or stipple are not synchronized. This affects
  the following operations:

  - PolyLines
  - PolySegment
  - PolyRectangle
  - PolyArc
  - FillPolygon
  - PolyFillRect
  - PolyFillArc
  - PolyText8
  - PolyText16

nxagent-1.5.0-57

- Removed two XSync() operations at screen initialization.

- Modified keyboard initialization in order to load the correct rules.
  This is choosen according to the vendor string of X-Window system in-
  stalled on the local machine.

- Corrected a few typos.

- When the NX transport is present, the failed reconnection dialog is
  launched on the remote X server by using the NXTransAlert() function.
  The same dialog is managed by NXTransDialog() when a session is run
  by connecting directly to the display.

- Removed the function nxagentUnmapAllWindows().

nxagent-1.5.0-56

- Set the parent window for the pulldown dialog.

nxagent-1.5.0-55

- Added an alert at the time the reconnection procedure begins. The
  alert is shown only when the NX transport is present and the link
  type is not LAN and is removed at the end of the resume operation.

- Removed the former code used for testing the alert functionality.

- Moved the function removing the splash window in Splash.c.

nxagent-1.5.0-54

- Fixed initialization of window privates storing exposed regions.
  This solves a bug affecting the refresh of windows introduced in
  nxagent-1.5.0-42.

- Added a STARTING state to nxagent. Until the agent is in this state
  the suspension mechanism is not activated.

nxagent-1.5.0-53

- Added the special keystroke Ctrl+Alt+R to enable or disable the
  auto-resize mode.

- A dialog notifies the user when the auto-resize mode is toggled.

- Added a test alert at startup, to verify that NXTransAlert() is
  working as expected.

nxagent-1.5.0-52

- Changed the code to call NXTransDialog() and NXTransExit().

nxagent-1.5.0-51

- Solved a bug that prevented the clients that had been restarted
  to be immediately selected for input.

- Removed some code that was added for debugging.

nxagent-1.5.0-50

- Fixed a memory leak in nxagentHandleExposeEvent().

- Fixed a memory leak in nxagentDestroyWindow().

- Now rootless dialog is launched only when last mapped window is
  deleted, since we have pulldown window to control the session.

- Added pulldown dialog to handle NX windows in rootless sessions.
  This dialog is activated from a "magic" slice of window under the
  top border.

- Solved a problem with sessions that might fail at reconnection.

- Now the message text of the dialog launched in case of failed re-
  connection explains the reason why the agent cannot be resumed.

- Implemented function nxagentUnmapAllWindows() to unmap all windows
  if nxagent has failed to migrate the session to the new display.

nxagent-1.5.0-49

- Fixed the problems with propagation of the drawable status.

- Modified nxagentPutSplitImage in order to set the correct height
  of the last split image.

- Code cleaning and optimization in Dialog.c.

- Solved bug that switched on the full screen state in rootless se-
  ssion.

- Changed the way dialog caption are set in rootless mode. It is set
  upon the session name or session id value.

- Corrected the function nxagentFailedReconnectinDialog().

nxagent-1.5.0-48

- Solved bug that switched on the full screen state in rootless se-
  ssion.

- Changed the way dialog caption are set in rootless mode. It is set
  upon the session name or session id value.

- Corrected the function nxagentFailedReconnectinDialog().

nxagent-1.5.0-47

- Now we call NXContinueOnDisplayError() with value 1 just after
  having opened the display. This will cause the NX Xlib to return
  in the case of an I/O error, instead of quitting the application.

- Removed the references to Context.h and the related elements.

- Reflected the changes occurred in NXlib.c regarding NXDisplayErr-
  ror() and inverted the logic compared to NXDisplayIsValid().

- Added a dialog box to notify the user when nxagent has failed to
  migrate the session to the new display. Because the main X agent
  connection is unavailable, this dialog uses the auxiliary nxcomp
  keyboard channel.

- Disabled the special keystroke Ctrl+Alt+S if any dialog is already
  running.

- Started implementing lazy synchronization of pixmaps. At the pre-
  sent moment the implementation doesn't try to perform any optimi-
  zation on the windows' regions that have to be redrawn and neither
  it checks the congestion state. After having synchronized a reaso-
  nable number of pixmaps, it simply sends to all the affected win-
  dows an expose event, mandating the repaint of the whole area.

- Removed a warning in Atoms.c.

nxagent-1.5.0-46

- Removed the longjmp() at the time an I/O error was encountered on
  the display.

nxagent-1.5.0-45

- Removed UNDEFINED status for drawables.

- Now lazy encoding affects only windows.

- Changed the block handler to call NXTransFlush() with 'if needed'.

nxagent-1.5.0-44

- After reconnection, stored exposed regions are reset and the manag-
  ing of duplicate expose events is restarted.

- Detection of window manager has been moved to the start of screen
  initialization. Screen dimensions and fullscreen option are over-
  ridden if no window manager is detected.

- Added a call to XSync() in switching fullscreen function in order
  to synchronize it with the network behaviour.

- Started adding provision for deferred writes in the NX transport.
  When the flush policy will be set accordingly, X data accumulated
  by the proxy will be written to the network under the control of
  the block and wakeup handlers.

- Fixed a bug in nxagentCopyArea(). In some cases, pixmap drawables
  was erroneusly supposed to be windows. This produced invalid reads
  when trying to access to fields of WindowRec structure.

nxagent-1.5.0-43

- In the code managing the property notify events, NXCollectProperty
  is not called if the window is not found in the tree mantained by
  the agent.

- Changed managing of screen resize in order to avoid repeated resize
  of desktop. The agent sleeps one second, then all configure event
  are read from the queue and the server connection. The desktop re-
  size is performed after the last read configure event.

- Changed nxagentImportProperty() in order to use NXCollectProperty
  instead of XGetWindowProperty. This avoids many round-trips in root-
  less mode.

- Fixed Invalid write problem in nxagentRRSetScreenConfig().

nxagent-1.5.0-42

- Modyfied test of NXSetUnpackGeometry for visuals, so now the compa-
  rison between visuals is based on their IDs and not on the memory
  area allocated for their visual structure.

- Modified exposure managing in order to avoid duplicated refreshes.
  Now only exposed regions not formerly managed yet are sent to the
  clients.

nxagent-1.5.0-41

- Modified nxagentCloseScreen() in order to free the frame buffer.

- Added information of the integrity of the windows. Now the integrity
  has became a drawable property that will expand in every drawable to
  drawable operation.

nxagent-1.5.0-40

- Splitting of images now happens only if the display is a valid con-
  nection.

- The isItTimeToYield flag is now set in the dispatcher only when the
  client has been actually suspended because of a karma, a sync, or
  a split operation.

nxagent-1.5.0-39

- Improved the handling of the PutImage request to offer provision
  for splitting images coming from orders generated by extensions.

- Fixed a problem with clients being unexpectedly restarted instead
  of waiting for the end of split.

nxagent-1.5.0-38

- Added a persistent dialog when agent is running in rootless mode.

- Modified the policy of management of nxclient dialogs.

- Fixed memory leak problem in nxagentPutSplitImage().

- Modified printing of some debug messages to avoid passing a null
  pointer to fprintf().

nxagent-1.5.0-37

- Implemented initial support for streaming the packed images in the
  handling of the MIT-SHM extension.

nxagent-1.5.0-36

- Updated the pixmap status when a placeholder is copied on the pix-
  map and when the pixmap is the target of a RENDER composite opera-
  tion.

- Solved the TR05C00900. The NX transport was forced to be set when-
  ever the display name contained the nx prefix.

- Implemented the FRSA052393. Removed the compression filters applied
  by nxagent to cursor pixmaps.

- Modified RANDR implementation to make the user able to resize the
  desktop by simply dragging the agent window's border. Screen resize
  is made after a small timeout, to give time to the last configure
  event to come from the server and avoid multiple re-configurations
  of the screen.

nxagent-1.5.0-35

- Added the current screen size to the set of sizes returned by the
  RANDR extension.

nxagent-1.5.0-34

- Corrected the placeholder xpm image.

- Added a client dialog to notify the user that nxagent is running in
  fast or in slow mode after pressing Ctrl + Alt + S.

- Modified RANDR implementation to give a set of screen sizes. Im-
  plemented functions actually performing screen resize on a RANDR
  request. Now toggling to fullscreen make the desktop cover the en-
  tire screen area.

nxagent-1.5.0-33

- Added an auto-disconnect feature similar to the one present in the
  Windows Terminal Server. The feature is modeled on the built-in X
  server's screen-saver. If the agent doesn't receive any input from
  the user in a given timeout, it will either terminate the session,
  if no client is connected to the display, or will suspend it, so
  that applications will be left running.

- The default is to disable the auto-disconnect option. The feature
  is activated by specifying a "-timeout s" parameter on the command
  line, with s being the timeout in seconds. The minimum allowed ti-
  meout is 60 seconds.

- The waitpid() call now only checks the agent's own children.

- Moved the longjmp() context declaration to a new Context.h file to
  avoid clash with redefinitions by the PNG headers.

- Few other cosmetic changes.

nxagent-1.5.0-32

- Added a check on the type of the connection to avoid cleaning the
  images when not needed.

nxagent-1.5.0-31

- Modified the placeholder frames, now it has a left top black border
  and a bottom right grey one.

- Modified fbShmPutImage() in order to set the correct size for the
  temporary pixmap.

- Modified nxagentForceExposure() and nxagentHandleExposeEvent() in
  order to clip exposed regions to the window size region of the root
  window.

- Added a new placeholder xpm image.

- Corrected few typos.

- Added function to synchronize GC tiles and stipples whenever those
  pixmaps have been realized.

nxagent-1.5.0-30

- Hidden viewport windows to clients in QueryTree request in order
  to make work XDMCP properly.

nxagent-1.5.0-29

- Removed some warnings with gcc 3.4.

- Added desktop -D switch to usage.

- Paint window background draw on framebuffer only with OpenOffice
  client.

- Now fast copy are and fast getimage are no more set according to
  the link type, their default value has been set to true.

nxagent-1.5.0-28

- Modified nxagentUpdateViewportFrame() in order to solve a refresh
  problem. Windows composing the external frame must be always on top
  to be sure that agent sends expose events for every window.

- In rootless mode agent doesn't export anymore the properties when
  disconnected from the X server.

- Changed the way agent check if the connection with the X server
  is available. Instead of using a state machine it uses the display
  flag.

- Removed the SIGTERM handling function in persistent code. We don't
  need anymore those function since agent is no more sleeping when
  disconnected.

- Implemented nxagentFreePropertyList() function in order to empty the
  list of exported properties when the rootless agent is disconnected.

- Added special keystroke Ctrl + Alt + S toggling between fast and
  slow mode for GetImage and CopyArea.

- Added missing handling of down arrow key in Keystroke.c.

- Modified nxagentForceExposure() in order to intersect exposed re-
  gions with the clip region of the root window. This prevents window
  functions from painting outside the frame buffer.

- Added the field usesFrameBuffer in struct nxagentPrivClient. Modifi-
  ed GC funtion and DoGetImage() in order to write in the frame buffer
  only if usesFrameBuffer is True.

- Removed code performing PutImage in the frame buffer, as it is use-
  less at the moment.

- Modified ProcChangeProperty() to check WM_NAME property.

- Added a piece of code in nxagentOpenScreen() checking for and remo-
  ving duplicated visuals.

- Added the Dialog.c Dialog.h files. Unified all calls to NXDialog,
  and blocked SIGCHLD before calling in order not to get the signal
  before the child pid has been stored.

- Modified the algorithm that disconnect the running session in
  order to avoid the opening of a new dialog box for closing or
  suspending the nxagent.

nxagent-1.5.0-27

- Changed the disconnect/reconnect procedure in order to have a pro-
  per default colormap vector when session is suspended, solving a
  segmentation fault in create window function.

- Corrected few errors in slow copy area mechanism.

- Modified screen initialization in order to allocate memory for the
  internal frame buffer.

- Modified some GC functions for writing to and reading from the frame
  buffer.

- Modified nxagentCreateWindow() for initializing the window in the
  frame buffer.

- Modified nxagentCreateColormap() in order to use the default visual
  if a matching one is not found.

- Modified function DoGetImage() in order to call nxagentGetImage() in
  place of nxagentGetDefaultImage() if fast option is on.

- Added nxagentCheckWindowIntegrity() function verifying the matching
  between the internal frame buffer and the X server for a window.

nxagent-1.5.0-26

- Added the property "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR" to the list
  of exported property in rootless mode, in order to let clients use
  the system tray.

- Modified import of WM_STATE properties in rootless mode in order
  to better handle null resources.

- Enhanced the slow CopyArea mechanism in case of one part of the
  image is out of the X server screen or out of nxagent screen.

- Changed type for variables width and height of default window
  from 'unsigned int' to 'int'.

nxagent-1.5.0-25

- Added a new signal handler for SIGCHLD. The transport is set to
  forward the signal (by means of a new NX_SIGNAL_FORWARD action).
  This allows the agent to wait for its own children.

nxagent-1.5.0-24

- Set up the RANDR extension. When querying the configuration, the
  clients get 3 sizes, the first being the current size, the second
  being the maximum size of the remote display, the third being the
  minimum size (arbitrarily set to 100x100 pixels). Screen sizes in
  millimeters are calculated based on the size reported for the real
  display.

  An example of xrandr -q output is below:

   SZ:    Pixels          Physical       Refresh
  *0    800 x 600    ( 270mm x 203mm )
   1    100 x 100    (  33mm x  33mm )
   2   1400 x 1050   ( 474mm x 356mm )
  Current rotation - normal
  Current reflection - none
  Rotations possible - normal
  Reflections possible - none

  As you can note, reflections and rotation is not possible.

- Set up the GLX extension. This provides basic support with GLX op-
  erations being translated into core X protocol primitives.

- Moved initialization of GLX and RANDR to the Extensions.c file.

- Removed the references to the unused mfb library. Modified Screen.c
  to allocate the right privates for the fb code.

- Modified the Xserver Imakefile to link nxagent with FbPostFbLibs
  and avoid including mfb/libmfb.a.

nxagent-1.5.0-23

- Fixed an incorrect buffer length calculation when retrieving a re-
  mote property.

- Added a check to avoid the use of a NULL pointer when changing the
  window cursor.

- Implemented a function to lookup the remote pixmaps.

- Changed the RENDER initialization messages.

- Corrected a few typos in symbol names.

nxagent-1.5.0-22

- Added the nxagentNeedConnectionChange() macro.

- Small optimizations in the block and wakeup handlers.

nxagent-1.5.0-21

- NXCollectGrabPointer() is called by passing nxagentDefaultClient().
  This is a macro that checks the validity of requestingClient and,
  if the pointer is NULL, defaults to NXNumberOfConnections - 1.

nxagent-1.5.0-20

- Replaced all calls to XGrabPointer with the asynchronous version
  provided by nxcompext.

- In DeactivatePointerGrab() function, mouse button state is set to
  up if the window entered by the pointer is the root window and the
  agent is in rootless mode. This change is needed because the sub-
  sequent KeyRelease event could be not received by the agent (for
  example if the focus had left the window), so that agent could be
  unable to update the mouse button state.

- In rootless mode, grabs exported to X in ActivatePointerGrab() are
  always made asynchronous. The synchronous behaviour is implemented
  by the agent, so that requiring a further synchronous grab down to
  the real X server is of little use and potentially harmful.

- Modified function XYToWindow() in order to manage the case that
  mouse pointer is located on the title bar of a top level window in
  rootless mode.

- Reflected name changes to NXImageCache variables.

nxagent-1.5.0-19

- Changed the implementation of the SIGHUP handler to forward the sig-
  nal to the proxy only when appropriate. This allows nxagent to close
  the NX connection without having to go through an I/O error on the
  display.

- Modified nxagentBreakXConnection() to check if the NX transport is
  running and thus use NXTransDestroy(). Using a simple shutdown() may
  not work, for example if NX is using the memory to memory transport.

- Added the -D option, to let users specify that agent must be run in
  desktop mode. This is presently the default.

nxagent-1.5.0-18

- Set the PropertyChange mask on input/output window in rootless mode
  in order to get the PropertyNotify events.

nxagent-1.5.0-17

- Cleaned of the reconnection routines, removed the NXAGENT_RECONNECT
  macro.

- Now the SIGHUP handler forwards the signal also to the NX transport.

- Moved the NXTransDestroy() call in the closure of the display, so
  we can avoid going through the I/O error handler.

- Removed an invalid free in the function that closes the display.

- Commented out more code in Display.c to avoid the segfault on exit.

- In rootless mode, now function XYToWindow() starts search from the
  last window originated an EnterNotify event. In this way, we can
  prevent shaded windows from getting mouse events.

- The variable to disable the smart scheduler is set at its definition
  instead of setting it in the Dispatch function. This avoids the call
  to SmartScheduleInit.

- Changed implementation of cursor visualization in rootless mode. We
  made the cursor attributes changes go transparently to the X server
  while in desktop mode we ignore any client request to change the cu-
  rsor on the X side, and we just set the cursor on the default window
  any time the pointer cross a window border.

- Expanded the range of properties exported on the remote Xserver,
  this way we export properties whose atom name starts with "WM_" and
  "_NET_".

- In Rootless mode PropertyChangeMask is added to top level window in
  order to get PropertyNotify Events.

- First implementation in rootless mode of nxagentImportProperty fun-
  ction with which after reception of PropertyNotify Events, all chan-
  ging properties coming from external clients such as Window Manager
  will be imported in agent windows.

- Changed the GetEventMask function in order to handle the InputOnly
  windows that need to be notified of property changes in rootless
  mode.

nxagent-1.5.0-16

- Implemented the -B command line switch, to let nxagent impersonate
  a "pure" proxy on the NX server side (that is without X connections
  having to be managed by the nxagent's dispatcher). Such a "nxagent
   -B" is going to replace the corresponding nxproxy process that in
  previous version of NX server was run with the same options.

- When running nxagent in 'bind' mode the X port where the the proxy
  has to listen for connection must be specified after the -B option.
  The other NX options must be passed in the DISPLAY environment.

  Example:

  nxagent -B :9

- The initialization procedure will check that the display included
  on the command line matches the one specified in the NX display
  options.

  For example, given the command:

  nxagent -B :9

  The NX options must be something like:

  DISPLAY=nx/nx,link=modem:9

  This allows users to find out which display the agent is impersona-
  ting by running a 'ps' and inspecting the command line.

- Fixed a bug preventing the proxy's ClientMessage to reach the right
  function when activating rootless mode.

- Removed unused function nomachineLogo.

- Code cleaning and soem optimizations in Rootless.c.

- We want to import all properties changed by external clients to our
  internal windows. But we must ignore property notify generated by
  our own requests. For this purpose we implement a list to record
  every change property that we dispatch. This way when processing
  a property notify we can distinguish between the notify generated
  by our request and those generated by an 'outside client'.

- In rootless mode, optimized window configurations mantaining inter-
  nal stacking order.

- Fixed focus troubles in rootless mode. Now focus window is set fol-
  lowing FocusIn events.

- In rootless mode, now fake KeyRelease events on FocusOut are sent
  only if keys having down state are modifiers. This prevents from
  sending key events to a wrong client.

- Removed unused function nxagentRootlessNextSibling in Rootless.c.

- Removed unused function nxagentRootlessStackingOrder in Rootless.c.

- Fixed compilation error if TEST log is enabled in Events.c.

- Changed Options variables to comply with NX naming rules.

- Some additional cosmetic changes.

nxagent-1.5.0-15

- Modified functions nxagentPutImage and DoGetImage for XYPixmap fo-
  rmat.

- Completed implementation of shared memory extension.

- Implemented a mechanism that prevents monitoring of SubStructure-
  Redirect ResizeRedirect and ButtonPress events by any clients simu-
  lating the presence of a window manager running inside the agent.

- Added debug functions in order to check the status of syncroniza-
  tion between the pixmaps residing on the X server and the local
  framebuffer ones.

- Changed the policy used when realizing all the pixmaps in 'lazy en-
  coding' mode so that the agent now switches to 'eager' policy.

- Fixed the routine handling the pixmaps realization: pixmaps with
  an invalid id are not processed anymore.

- Solved a bug in the routine taking care of clearing the NoMachine
  logo: the state of the background was set to 'pixel' without de-
  stroying an eventual backround pixmap.

- Solved a bug in the 'MakeRootTile' function: the value returned by
  'AddResource' was not interpreted in the correct way causing the
  function to bail out without drawing the NoMachine logo and set-
  ting the background state to Pixmap.

- Renamed PlaceHolder.c to Lazy.c and PlaceHolder.h to Lazy.h.

- Inserted a test feature that cleans the framebuffer pixmaps when
  they are created.

nxagent-1.5.0-14

- Changed some reconnection messages.

- Now the disconnect procedure is called also after an IO Error is
  received.

- The rootless agent now doesn't filter anymore keystrokes combina-
  tion related to desktop feature, like viewport navigation the full-
  screen state and minimization.

- In rootless mode, internal stacking order is updated by comparing
  the stack of top level windows mantained by the X server with the
  one mantained by the agent. A global configuration of windows is
  performed from top to bottom through the stack.

- In rootless mode, map state of  top level windows is kept up to date
  by managing map and unmap events.

- In rootless mode, enter events are managed to keep track of top
  level window position. It is very useful for managing differences
  among window manager behaviours. It should be reimplemented follo-
  wing the advice given in ICCCM 4.1.5.

- In rootless mode, requests of configure top level windows are di-
  rectly forwarded to the real X server. Internal configuration is up-
  dated when configure events are managed by the agent. In order to
  mantain internal stacking order up to date, a query tree request is
  performed on the real root window.

- Added viewport navigation by Ctrl + Alt + keypad arrows.

- Fixed wrong internal configuration of agent top level windows, while
  agent runs in rootless mode with metacity window manager.

- Fixed segmentation fault in nxagent running in rootless mode with
  OpenOffice.

- Fixed wrong internal stacking order of drop down menus of firefox
  with nxagent in rootless mode.

nxagent-1.5.0-13

- Fixed compilation problem on solaris.

- Modified the modify pixmap header function. Previously this function
  has been modified in order to solve a glyph problem, enlarging both
  the pixmaps dimensions by four. Corrected the misbehaviour that
  modify the pixmaps dimension even if the caller doesn't want to
  change it.

nxagent-1.5.0-12

- Fixed erroneous behaviour of Root Window in fullscreen mode caused by
  wrong value of XSpan and YSpan.

- Fixed wrong clients' position at Reconnection in Rootless mode,
  setting offset and WinGravity fields in XsizeHints structure.

- Fixed segmentation fault on closing windows that stay always on top.

- Moved the handling of configure notify events in the appropriate
  functions, and cleaned it.

- In rootless mode, internal stacking order of top level windows is
  mantained up to date by monitoring events from window manager top
  level windows.

- Modify the creation of screen at reconnection for detecting an
  eventual failure.

- Removed export of window properties on the X server in desktop mode.

- Changed the events mask for client's window set on the X server.
  We don't use anymore the window mask choosen by clients. In rootless
  mode for a top level window we use the default event mask and for a
  child only the exposure mask.

nxagent-1.5.0-11

- Restored default event mask at reconnection.

- Fixed abnormal behaviour in rootless mode if application windows are
  close to the lower and right bounds of the screen. This trouble was
  due to the wrong size of the agent root window.

- Fixed abnormal behaviour in rootless mode for mouse button events if
  the application window is not fully contained in the screen.

- In rootless mode, exposed region are extended a few to take in ac-
  count border width offsets caused by window managers.

- In rootless mode, grab pointer requests from clients are forwarded
  to X server. This makes application able to close their pop up win-
  dows on a pointer event.

- Fixed wrong position of the agent root window after resize of main
  window.

- Changed the size of viewport frame windows in order to avoid re-
  freshing problems.

nxagent-1.5.0-10

- Handled the Client messages on rootless mode.

- Initializations of event masks have been moved in a unique group of
  functions.

- Disabled the SmartScheduler in dispatcher as it seems to affect the
  responsiveness of nxagent.

- Modified the block and wakeup handlers. We could have left data to
  write to our display connection when entering in WaitForSomething()
  so we now flush everything before entering the select() and let the
  proxy do all the buffering.

- Fixed the wakeup handler to match the correct prototype.

- Few cosmetic changes.

- Inserted a test feature that cleans the framebuffer pixmaps when
  they are created.

- Adjusted pixmap status information in almost every gc operations.

- Removed a warning for usleep not defined on Suse 9.0.

- Adjusted pixmap status information in copy plane operations.

- Throwed fatal error if on lazy encoding the place holder pixmap
  couldn't be loaded.

- Removed the static path to xpm file in place holder initialization.

- Removed useless signal handler initialization multiple times.

- Refined validation of atoms in the atom cache code.

- Corrected few errors in atom cache initialization.

- Added a primitive atom cache that mantain the map between internal
  and external atoms.

- Window properties export began on the X server side in rootless
  mode, this way nxagent open the communication between local clients
  and the window manager on the X server.

nxagent-1.5.0-9

- Fixed wrong position of the main window in case of maximizing in
  window mode.

- Set the correct scan line lenght for XYPixmap created in PutImage
  and GetImage.

- Removed a segmentation fault in GetDefaultImage. The problem arose
  because the XYPixmap created with a data storage taking in account
  of only some planes instead of all the depths planes. Despite XPut-
  Pixel was treating the image as a complete XYPixmap of that depth.

- Removed MapWindow Error at reconnection caused by wrong value of
  IconWindow.

- Now nxagent_WM_START is intialized as soon as the Atoms are
  queried.

- Removed Geometry restrictions.

- Changed the configuration of the agent window in window mode.

- The agent window is correctly reconnected even if is resized.

nxagent-1.5.0-8

- Updated copyright notices.

- Removed a segmentation fault in font cache cleaning routine. The
  problem arise when the session is disconnected and the font struct
  are not allocated.

- Used the return mask of XParseGeometry to correctly set only the
  parameters that are involved.

- Unified the initialization of all the geometry related parameters.

- Updated the offset of the four viewport frames windows at recon-
  nection.

- Changed the way the geometry parameter is used. Now the first time a
  session is started it set the internal dimension of the agent root
  window, afterwards it only affects the dimension of the external
  window on the X server.

- Corrected splash screen offset at reconnection in fullscreen mode.

- Agent can be launched in fullscreen mode and his geometry can differ
  from the X server geometry.

- Now Width and Height options are used to store geometry of the
  default window even on fullscreen mode, and to restore the correct
  dimension when switching back to window mode from fullscreen
  we added two more options.

- Removed an error in the move viewport procedure that didn't upgrade
  the offset of the internal root window when the external root win-
  dow was maximized.

- Unified the initialization of all the geometry related parameters.

- The window manager detection procedure is now started whenever there
  is an attempt to minimize the fullscreen window or to pass to window
  mode.

- Function's optimization for detecting if WM is running.

- Switching to window mode has been disabled when the window manager
  is not running.

nxagent-1.5.0-7

- Now background pixel is not reset at reconnection.

- Now geometry is parsed also as a command line parameter.

- Fixed wrong offset of the root window after a reconnection in case
  of window mode.

- Fixed wrong geometry of the nxagent window after a reconnection
  in case of window mode.

- Fixed wrong position of the main window after a reconnection in
  case of fullscreen mode.

- Fixed refreshing windows problems in viewport navigation. Four in-
  visible windows are created around the agent window to automatica-
  lly generate exposure when the viewport frame is moved or a windows
  come out from the non visibile part of the agent window.

- We need to store the GC records in a list that will be freed in case
  the reconnection succed and will be restored in case of failure. We
  have to do this because we cannot destroy the GC records in the
  disconnect or reconnect procedure, because this way we couldn't
  recover from a disconnection or a reconnection failure.

- Rewritten the reconnection procedure. Since we cannot be sure
  that the reconnection will succed we cannot destroy the display
  structure, so we postpone the closing of the previous display
  with the creation of the new connection.

nxagent-1.5.0-6

- Adjusted usage list in order to show the R parameter for rootless
  mode.

- Added handling of display parameter to option file.
  Corrected few typos error, in option file parsing.

nxagent-1.5.0-5

- Removed error that prevented the realization of cursor in eager
  mode.

nxagent-1.5.0-4

- Fixed abnormal behaviour of termination dialog, after the keystroke
  Ctrl + Alt + T.

- Fixed segmentation fault in function parsing option file.

- Fixed various errors on eager encodings.

- Added lazy command line switch in order to switch lazy encoding
  on.

- Code cleaning.

- Implemented a signal to switch between two pixmap
  realization policies.

- Corrected an error while defining pixmaps status.

- Implemented a debug feature, consisting in a method that pushes
  the synchronized realization of all the pixmaps.

- Began implementation of place holders in replacing of images while
  they are being loaded.

- Performed some changes on spreading of pixmaps status information
  on copy area.

- Began implementation of lazy encoding.

- Changed version to 1.5.0.

nxagent-1.5.0-3

- Removed the option -nogetimage (FRSA052305).

- Code cleaning in Font.c.

- Removed NXAGENT_FONTMATCH macro.

- Removed NXAGENT_FONTCACHE macro.

- Handled the ReparentNotify event we get when in rootless mode
  ours window are reparented from the window manager. Inserted
  fake windows to take account of this new parents.

- Removed the redirection of client message in rootless mode, and
  the configuration of the WM_PROTOCOLS properties on all the top
  level windows.

- Removed parent ID from the windows private structure.

- Implemented screen operation ReparentWindow.

- Redirect all client message of type WM_PROTOCOLS and value WM_DELETE-
  _WINDOW to internal clients in rootless mode.

- Set the WM_PROTOCOLS property on all the top level window.

nxagent-1.5.0-2

- Changed viewport navigation, in order to make it works in fullscreen
  mode.

- Changed special keystrokes used for closing session and minimizing
  fullscreen window.

- Removed the message 'NX was unable to negotiate a cache
  for this session' (FRSA052296).

- Fixed a minor bug. It made metacity produced a warning when the agent
  started up.

- Code cleaning.

- Implemented dynamic handling of the main window's size in the X11
  agent (FRSA052264).

- Implemented dynamic navigation of the main window's viewport in the
  X11 agent (FRSA052265). Users can navigate the viewport while keys
  Ctrl + Alt are pressed, either by arrows keys or dragging it by the
  pointer.

- Implemented dynamic handling of the full-screen attribute in the
  X11 agent.

- First implementation of dynamic handling of the full-screen
  attribute (FRSA052263).

- Now the X connection descriptor is not closed when disconnected,
  because the transport layer still has reference to it. So we want
  it busy till we don't close the display, so we shutdown it instead
  of closing it.

- Removed replys when disconnected.

- Added the X connection number to the set of enabled input devices, at
  reconnection.

- Rewritten the disconnect/reconnect layout.

- Now in the suspend status nxagent doesn't sleep.

- Implementing toggle fullscreen special keys.

nxagent-1.5.0-1

- Opened the 1.5.0 branch.

nxagent-1.4.1-7

- Imported changes from nxagent-1.4.0-64 version.

nxagent-1.4.1-6

- Implemented a GC cache for reconnecting pixmap.

nxagent-1.4.1-5

- Handled the situation of disconnect when the pointer has been grabbed.
  We disconnect and reconnect the "grabbing" cursor and after reconnection
  we fake a button release in order to let client know that the pointer
  button has in effect been released.

- Code cleanup.

nxagent-1.4.1-4

- Imported changes from nxagent-1.4.0-63 version.

nxagent-1.4.1-3

- Imported changes from nxagent-1.4.0-62 version.

nxagent-1.4.1-2

- Cleaned code in the GC reconnection area.
  Scratchs GC are now reconnected before of the pixmaps.

nxagent-1.4.1-1

- Opened the 1.4.1 branch.

nxagent-1.4.0-65

- Cosmetic changes to the diagnostic output.

nxagent-1.4.0-64

- Changed the RENDER version advertised to X clients to be the lowest
  value between the version of RENDER of nxagent and of the remote X
  server.

- Disabled fast copy area and fast get image flags, if RENDER extension
  is not available.

- At the screen initialization, if we don't have window manager we
  grab keyboard to let nxagent get keyboard events.

- Completely rewritted the handling of KeyPress events, now we moved
  all the test for 'special' keybindings in file keystroke.c. Added the
  combination MOD1/2-CTRL-SHIFT-<TAB> for terminate/suspend the session,
  we used the combination MOD1/2 in order to let it work even on MacOS
  where Alt(MOD1) doesn't seem to be set.

- Ignored visibility notify events on the icon windows, that were
  messing up the agent visibility state.

- Changed nxagent reaction on VisibilityNotify event. It fixed the
  problem with refresh session under Mac OS X with NXDarwin.

nxagent-1.4.0-63

- Reset the congestion state at transport initialization.

nxagent-1.4.0-62

- Fixed the disconnection and reconnection of window that have attached
  an animated cursor.

nxagent-1.4.0-61

- Removed the XInputExtension initialization in order to use the more
  general mi extension initialization enabled on new mi version.

- Removed some useless test and logging info on copy area function.

nxagent-1.4.0-60

- Changed the implementation of CopyArea and CopyPlane.
  If both drawables are on framebuffer we send NoExpose to clients,
  otherwise we use the mi function HandleExposure to calculate the
  region to be exposed instead of let mi redo all the copy operation.

nxagent-1.4.0-59

- Disabled use of caching and cleaning of images, if NX transport is
  not used.

nxagent-1.4.0-58

- Added timeout on convert selection operation. If timeout has not
  expired and is there a pending operation any new request is dropped
  and the client notified, until timeout expiration.

- Corrected a bug that prevented to correctly store last convert se-
  lection request time.

nxagent-1.4.0-57

- The Xinput extension is now initialized at startup. This is of
  little use because nxagent only needs to support the core pointer
  and keyboard. Anyway this allows nxagent to get rid of the warn-
  ings printed by some X clients on recent Linux versions when the
  extension is not found.

nxagent-1.4.0-56

- Fixed value returned by ConvertSelection. It was the cause of
  possible slowndowns during KDE sessions.

nxagent-1.4.0-55

- Agent icon now is loaded from a binary-
  embedded Xpm image, if any attempt to
  load the default Xpm file from the image
  directory or from the path fails.
  Removed code used in the old logo drawing
  function.

nxagent-1.4.0-54

- Enabled code for sending to client graphics
  exposures. Redirecting the ones coming from
  remote X server, only if agent window is not
  fully visible, and calculating ourselves failure
  in CopyArea/Plane and notifying clients.
  The only drawback is that we can have double
  refresh effect if agent window is covered.

NOTE: Partially enabled MIT-SHM extension has
      been developed but has not been included
      in stable release. Included in version
      nxagent-1.4.0-53-DAR1.

nxagent-1.4.0-53

- Implemented a reliable technic to detect
  if is there any window manager running on
  the X server.

nxagent-1.4.0-52

- Fixed a bug that prevented to correctly
  notify the client of a successfull convert
  selection.

nxagent-1.4.0-51

- Removed a logging error in render initialization.

nxagent-1.4.0-50

- Now we take the ownership of the selection
  on "NX_CUT_BUFFER_SERVER" twice, in order
  to solve bug in communication with nxclient
  to let him see our main window and know that
  agent established connection with X server.

nxagent-1.4.0-49

- Fixed the colormask layout of the visual
  used to put images on the real X server when
  the drawable has an alpha channel, according
  to the endianess of the X server.

nxagent-1.4.0-48

- Moved up the render compatibility limit,
  due to the inclusion of the support for render
  cursor missing on the 0.2 version.

nxagent-1.4.0-47

- Changing artsd forwarding port from display
  + 8000 to display + 7000

- Stoping key release event if key press was
  catched before. For Alt-F2/F4 combination.

- Preserved the alpha data on drawables that
  are not used by picture but have a depth of 32.

nxagent-1.4.0-46

- Rewritten all the code regarding to the
  acceleration for the Render creation of the
  cursor, and removed the acceleration for
  the animated cursor.

nxagent-1.4.0-45

- The two RENDER operations creating cursors and
  animated cursors have been accelerated by for-
  warding the original operation to the X server.

nxagent-1.4.0-44

- Fixed a problem in the clipboard procedure.
  Now when we get a request of the selection
  from an internal client we have to, if the
  owner is on the X server, forward the request
  to X, otherwise we have to pass the request
  to our internal client.
  But for a problem in this procedure we passed,
  in some situation, the request to the internal
  client even if the owner was on the other side.

- Fixed a segmentation problem in the render
  extension by removing composite trapezoid
  operation on window.

nxagent-1.4.0-43

- Added some pointer sanity check in the discon-
  nect procedure. The problem was arising because
  we were executing the code twice when after
  began a voluntar disconnection the X connect-
  ion was broken for a network failure.

- Changed directory where nxagent gets the icon.

- Fixed missing implementation of rendering
  trapezoids.

- Fixed bug in render extension when the nxagent
  create cursor diffrent then 32 bits format.

nxagent-1.4.0-42

- Solved segmentation fault, caused by a longjmp
  on a stack context not previously saved.

nxagent-1.4.0-41

- Added an exposures of the window in a resize
  operation.

nxagent-1.4.0-40

- Implemented a timeout on the opening of the X
  display, if we get it we reject all well known
  sockets.

nxagent-1.4.0-39

- Corrected minor error on events handling.

nxagent-1.4.0-38

- Removed in the resize window code some exposure
  that generated useless traffic.

- Option geometry is no more parsed in the option
  file.

nxagent-1.4.0-37

- When session is suspended and we get TERM signal
  nxagent just exit instead of just breaking out of
  dispatch loop because we get a terminate exception.
  Cleared display variable after having closed the
  connection with the X server.

nxagent-1.4.0-36

- Refined some details in the ICC with nxclient.

nxagent-1.4.0-35

- Implemented a new method to comunicate to nxclient,
  the raise of the agent root window, taking the ownership
  of the selection "A-{MD5 of session}".
  Used the same selection to let nxclient comunicate to agent
  by changing the property on the same string, when the user
  choose by the administrator to terminate or suspend the
  session.

nxagent-1.4.0-34

- Key sequence to Suspend/Terminate session (Alt-F4).

- Key sequence to Minimize session in fullscreen mode (Alt-F2).

- Check if WM is started, for Alt-F2 sequence.

- Corrected calculation geometry of exposed region
  sent to client after reconnection.
  This solve a serious memory leak of nxagent.

- Fixed a bug in validate GC code that passed
  a wrong pointer of tile to framebuffer.

nxagent-1.4.0-33

- Changed the reconnection state machine in order
  to let agent exit if has got the TERM signal.

nxagent-1.4.0-32

- Fixed memory leak in option parser that wasted
  memory if more than one occurence of 'option'
  argument would have been parsed.

- Removed a invalid read in Keyboard initialization.
  Now kbtype option value is copyed instead that
  referenced.

- The X connection number is recorded only after
  having cheched for display being successfully opened.

nxagent-1.4.0-31

- Fixed memory leak problem caused by region not
  beeing destroyed previously.

- Fixed a memory leak in keyboard initialization.

- Fixed a bug in the function that parse the option file,
  we were reading the options in the format NAME=VALUE and
  were passing it to the argument parser in the format
  {NAME, VALUE}, without the prepending '-' in front of NAME.

nxagent-1.4.0-30

- Readded option persistent in order to let nxagent
  works with older nxserver that are still launching
  nxagent with the persistent option.

nxagent-1.4.0-29

- Corrected the message of the client dialog
  asking if user want to suspend or terminate the
  session.

- Chenged the default value for persistence of session
  in nxagent to true. Change the persistent option to
  nopersistent in order to disable it.

nxagent-1.4.0-28

- Added check on screen initialization of possible
  memory allocation failure.

- Changed the parsing policies of the option file.
  Now we are just considering kbtype and geometry
  options.

- Removed testing code that forced rootless mode
  when geometry is 100X100.

- Correctly initialized and mapped the icon window
  on fullscreen mode.

nxagent-1.4.0-27

- Fixed lost memory problem caused by second
  initialization of screen privates. Screen
  privates is already initialized by miScreenInit
  function.

nxagent-1.4.0-26

- Added option command line option. This parameter
  is used to show complete path to option file.

- Added parser of the option file.

- Now default value for fast copy area and fast
  getimage is true.

nxagent-1.4.0-25

- Done some cleanup to the initialization of the
  defaults drawables at reconnection, and removed
  a memory leak in the reopening of the Display.

nxagent-1.4.0-24

- Changed the version number, printed at startup.

- Removed a memory leak in the font reconnection stage.

nxagent-1.4.0-23

- Removed a bug that messed up the render status info
  if reconnected to a display with no render support.
  Anyway nxserver should prevent agent to trying reconn-
  ecting to such display.

nxagent-1.4.0-22

- Enhanced the reconnection error reporting function.

nxagent-1.4.0-21

- Get the ownership of selection NX_CUT_BUFFER_SERVER at reconnection
  in order to let client knows that agent windows has started
  successfully.

nxagent-1.4.0-20

- Now we draw splash logo at reconnection. And destroy it and show
  all other windows when reconnection has done all in once. We draw
  it on default window instead that on root window, and we map root
  window when reconnection has finished.

nxagent-1.4.0-19

- Removed the old Xconnection descriptor and added the new one
  to the device set, instead of resetting the entire enabled
  device set, at reconnection.

nxagent-1.4.0-18

- Reset the enabled devices set of descriptors, and properly
  add to this set the the Xconnection descriptor.

NOTE: This solves all the known solaris reconnection problems.
      (The problem appear only on solaris because on this machine
       the Xconnection descriptor is changing at reconnection.)

nxagent-1.4.0-17

- Restored the previously owned primary selection, at reconnection.
  Removed the handling of the return value of XSetSelectionOwner,
  man page doesn't specify any return value.

nxagent-1.4.0-16

- Added compatibility with older windows clients(Xserver)
  that send a WM_DELETE_WINDOW client message WM_DELETE_WINDOW
  to all top level window and so agent show more than one
  NXDialog asking for confirmation, instead of sending just the
  message to top level window that are visible and haven't set
  the override redirect option.

nxagent-1.4.0-15

- Ignored unmatched DirectColor visuals at reconnection
  on a different display not providing it.

nxagent-1.4.0-14

- Moved the render query extension in display
  initialization from screen initialization.

- Changed reconnection policy to disallow reconnect a
  session that is using render to a server not providing it.

nxagent-1.4.0-13

- Unified the screen opening function.

- Changed the reconnection requirements
  policy about geometry of X server.
  Now agent doesn't accept changes of X server
  root window size only if in fullscreen mode.

nxagent-1.4.0-12

- Improved failure notification messagges in Display and
  font code.

nxagent-1.4.0-11

- Now visuals are properly recreated, in order to reconnect
  to another X server.

- Updated render formats at reconnection.

nxagent-1.4.0-10

- Removed a serious memory leak at reconnection.

nxagent-1.4.0-9

- Added after window reconnection the redisplay of the current
  cursor. Done some general cleanup at cursor reconnection code.

nxagent-1.4.0-8

- Unified tha atom creation at reconnect.

nxagent-1.4.0-7

- Dix layer when creating a GC use a default real pixmap as
  stipple but agent need a virtual one. This can cause
  segmentation fault to agent if is there any apps that use the
  default GC stipple created by dix, without changing it.

nxagent-1.4.0-6

- Imported 1.4.0-1-DAR6 from the 1.4.0 development branch.

- Handled reconnection of window's cursor still not
  reconnected at window reconnection. (This because that cursor
  is no more a server[nxagent] resource).

- Set the last image client variable at reconnection in order
  to use the visual cache indexed for client number.
  Without this we could get a segmentation fault.

- Handled properly the reconnection of animated cursor.
  Modified the procedure of animated cursor creation
  in order to empty some unused fields.

- Removed a 4 bytes memory leak at reconnection.

- Synced new tree with nxagent-1.3.2-23.

- Finished the unify of PutImage at reconnection.
  Added a Reconnection Trap in order to let screen functions
  (like PutImage) knows that are working at reconnection time
  and can behave differently.

- Unified the code for the normal PutImage and the one's used at
  reconnection. But the code that calculate the split is still
  doubled.

nxagent-1.4.0-5

- Imported 1.3.2-23 from the 1.3.2 development branch, and dropped
  the previous 1.4.0 versions.

nxagent-1.3.2-23

- Pixel hints are set according to the display's depth. Added the
  defaults to be used on 16 bits.

nxagent-1.3.2-22

- The pixel hint on Solaris is by default 0xffffff. The value can be
  overridden by using the -hint option followed by the hex represen-
  tation of the color, as in -hint 0xaabbcc.

nxagent-1.3.2-21

- Asynchronous GetImages are now disabled. If fast GetImage mode is
  enabled, agent will always try to guess the pixel to be used for
  the solid pattern, based, at its best, on the geometry of the pro-
  vided area. This behaviour can be overridden by passing the -slow
  parameter on the command line. Slow mode is also the default when
  selecting WAN or LAN link settings.

- Code cleanup in preparation of the final release.

nxagent-1.3.2-20

- New code uses sigaction to set the SIGHUP handler in persistent
  mode. Contrarily to signal(), the sigaction call doesn't seem to
  reset the handler to SIG_DFL after the signal has been caught.
  This problem seems to be specific of Solaris.

- Client messages of type WM_PROTOCOLS are now handled even when
  a window manager is not detected at agent startup.

- Removed handling of GraphicsExposure coming fron the real server.
  Agent will still generate events in the MI. Code dealing with the
  remote events needs to be better tuned as it seems to cause some
  troubles with double refreshes.

nxagent-1.3.2-19

- Starting from this version agent doens't use NXSync and NXKarma
  messages to manage bandwidth arbitration among clients but makes
  efficient use of the congestion notification messages introduced
  in 1.3.1. A new handler has been added to manage the congestion
  state. The handler will block, if needed, waiting for the decon-
  gestion notification coming from proxy.

nxagent-1.3.2-18

- Rewritten the block handlers to check the event queue more often.
  The new code seems to greatly enhance responsiveness, especially
  on fast links.

- Now agent will handle the expose events coming from the remote
  display inside the event dispatcher.

- Created a new function collecting the expose events. Function is
  optimized to add all the expose events for the same window to a
  single region. Region is passed to the mi when the last event
  has been processed.

- Still dealing with GetImage from OpenOffice. Now we try to match
  the geometry of the incoming requests with known geometry of most
  of its graphic elements. It seem to work on Fedora.

nxagent-1.3.2-17

- Added swapping of image data in nxagentGetImage() when connecting
  to a display having a different image byte order than the agent
  server.

- Added a new nxagentImageReformat() function in GCOps.c.

- Now agent will not try to pack images having a data size smaller
  than 768 bytes. The previous threshold was set to 64. The Mandrake
  vesion of KDE seems to send lot of such small images. Compressed
  through JPEG, these images obtain a very poor ratio of nearly 1:1.

- Added a function translating and sending the GraphicsExposures
  events received from the remote server to the agent's clients.

- Renamed the functions providing the ad-hoc handling of remote X
  events.

nxagent-1.3.2-16

- Implemented a cache for the alpha channel data. With clients
  making heavy use of the alpha blending, the new cache is able to
  cut by nearly 30% the traffic incoming to proxy, offering compara-
  ble savings in CPU performance. While proxy is usually able to
  cache almost all the alpha traffic, when caching is not enabled
  (f.e. when link setting is WAN or LAN) this data is sent uncomp-
  ressed by the agent. Tests running common desktop environments
  showed that alpha channel could weight up to 2 times the corres-
  ponding data generated by the packed images.

- Fixed the compilation warnings in NXrender.c.

nxagent-1.3.2-15

- Rewritten handling of GetImage from dispatcher down to GCOps. If
  the fast GetImage mode is enabled agent will use the asynchronous
  calls provided by nxcompext to get data from the real server. Data
  collected from the last get image performed is preserved and the
  upper left pixel is used to guess a solid background.

- Added a nxagentGetBackgroundImage() function to apply a similar
  mechanism when the nxagent window isn't fully visible. Previously
  a solid white background was returned. The new handling seems to
  correctly match the window background in most cases.

- Fixed a problem passing the bytes per line value when creating a
  XYPixmap image. The previously calculated value didn't take into
  account the depth of the image.

- Now image's bytes per line, length and visual are calculated by
  using a few utility functions added to GCOps.c.

- Added declaration of the nxagentVisibility related variables to
  Window.h.

nxagent-1.3.2-14

- On Fedora xbcomp configuration fails when agent is run nested.
  This causes keyboard to ignore most AltGr keys. Strangely enough
  this behaviour has been observed only with KDE while GNOME does
  not seem to be affected. Reason is to be investigated.

- Auto-repeat mode of the agent's keyboard device is now always
  disabled. Agent will leverage auto-repeated keystrokes genera-
  ted on the real server even when propagating device configura-
  tion changes.

- The info output telling if agent will propagate the changes to
  devices' setting is now printed after having initialized the
  screen. The purpose would be to verify if agent is running in
  fullscreen mode and there is no WM on the real display. In this
  case we should forcibly propagate device configuration changes.
  Unfortunately, due to the way intern atoms are collected, this
  is not going to work on platforms where sessions are likely to
  run on an existing X server.

nxagent-1.3.2-13

- Fixed a problem with XYPixmaps being used in PutImage with the
  wrong left pad. This is a step forward in the solution of the
  corrupted masks displayed by Mozilla when showing some animated
  GIFs.

- By selecting 'fast' mode nxagent will now skip real XGetImage
  operations on windows. This becomes the default in the case of
  MODEM, ISDN and ADSL links. In theory X clients should never do
  that. In practice a few naive programs and libraries (like, sur-
  prisingly enough, a famous Linux office automation suite) do,
  mainly to compose images with the window's backgound. Why don't
  they compose content into a Pixmap?

- Improved the implementation of CompositeGlyphs. It now uses a
  single call to XRenderCompositeText instead of splitting the
  output in multiple RENDER requests.

- In previous versions file NXmiwindow.o was not linked into the
  resulting nxagent. This solves the problem of missing repaints
  in CDE and other Xt applications. Be sure you upgrade nx-X11
  to version nx-X11-1.3.2-2.

- Added a warning when the change keyboard control or the change
  pointer control functions are called.

nxagent-1.3.2-12

- Added bit-swapping of glyphs having depth 1 when agent has a
  different bitmap-bit-order than the X server.

- The KeyRelease event's timestamp calculation, accounting for
  differences in time between the local and the remote machine,
  will now use the timestamp taken from the last KeyPress. Using
  the timestamp of the last event was sometimes causing time to
  go backward with the result that server could remain grabbed.
  This solves the long-standing "mouse stop responding" problem.

- Fixed a problem handling the alpha channeled visual introduced
  while experimenting with the new server endianess layout.

nxagent-1.3.2-11

- Added the Reset option to options repository. By default agent
  will skip server reset when the last client disconnects. This is
  equivalent to passing the -noreset option to a standard XFree86
  server. To restore the original behaviour the new -reset option
  can be used on the command line.

- Moved the SharedMemory and DeviceControl options to the options
  repository.

- A basic session, still leveraging all the default facilities, can
  now be run as: nxagent -name NX -geometry 800x600+10+100 :1. The
  -fp unix/:7100 option can be added to enable access to the X font
  server.

- Fixed a "unused variable" warning in Cursor.c.

nxagent-1.3.2-10

- Rootless mode. Some cleanup in initialization.

- Rootless mode. Working at the configure-window errors.

nxagent-1.3.2-9

- Removed limitations when running nxagent nested inside another
  nxagent server. Now both render extension and packing of images
  are enabled.

- The nxagent X server now inherits its endianess from the host
  architecture, instead of assuming the same endianess of the con-
  necting client. This fixes the remaining problems running ses-
  sions nested inside another nxagent server.

- Removed any reference to ReformatImage().

nxagent-1.3.2-8

- Changed the way the agent server handles images internally.
  The inherited Xnest code used to set the server's image order
  to the same order of the remote X display. This caused agent
  to create images in the internal frame-buffer with a different
  endianess in respect to images got from X clients.

- The new image handling code seems to solve all the known image
  endianess problems, for example cursors created on big-endian
  displays with a wrong shape or glyphs being showed flipped when
  retrieving the image data from the virtual frame-buffer.

- As an added bonus the new code seems to double the performance
  of the SPARC Solaris server when accessing i386 clients.

- Commented out all the existing calls to ReformatImage(). Code
  needs now extensive testing to see if any of the calls must be
  actually restored.

- Replaced calls to index() with strchr().

nxagent-1.3.2-7

- Solved a potential memory error when accessing a client or a
  window pointer in clipboard management code after the resources
  had been destroyed. Added a nxagentClearClipboard() function to
  be called before a client or a window is destroyed to get rid
  of any reference to the disposed resources.

- Auto-repeated keystrokes generated by agent from inside the
  virtual keyboard device are now ignored. Agent will correctly
  honor auto-repeated keystrokes generated by the real X server.
  This is actually the expected behaviour. The former implemen-
  tation triggered an annoying bug, with keystrokes being inad-
  vertedly auto-repeated in the case of high latency on the
  network link.

- Agent will now ignore the pointer settings changes generated
  inside the remote session. The original behaviour was to reset
  the pointer values (for example acceleration) to the X factory
  settings at session startup. Agent will now inherit whatever
  values are set on the real X display.

- Added a -noignore parameter. When passed, agent will propagate
  to the real X server any change to keyboard and pointer control
  settings operated by its own X clients.

nxagent-1.3.2-6

- Fixed problem with glyphs being drawn clipped in the virtual
  frame buffer. This is not yet the final solution but it seems
  to work in all the circumstances where problem was observed
  in the past. Problem seems to be caused by scratch pixmaps
  being requested with a width and height smaller than actually
  required. Note anyway that pixmap's buffer seems to be never
  accessed beyond its boundary. This probably means that memory
  for the pixmap is originally allocated using the right size.

- Moved backing-store selection to options repository. Now by
  default the backing-store mode is set to WhenRequested. This
  means that, in most cases, there is no need to pass the -bs
  option on the command line.

- Code cleanup in Render.c, NXrender.c, NXglyph.c.

nxagent-1.3.2-5

- Fixed initialization of all the supported depths. Previous
  versions correctly initialized the various depths but still
  failed to advertise the support of any other depth than the
  default depth supported by the remote X server.

- Persistent mode. We now correctly propagate the pixmap ID of
  the parent to the virtual pixmap at reconnection. This fixes
  the reconnection errors when render extension is enabled.

- Persistent mode. Solved the refresh problems at reconnection.
  Problems were generated by the lack of window parent's ID at
  the time session was reconnected.

- Changed the agent's behaviour at the time the close button is
  pressed. If agent is running in persistent mode a new dialog
  is showed with the option to suspend the session.

nxagent-1.3.2-4

- Persistent mode. At the time the proxy connection is reset the
  per-client unpack geometry information is cleared. This makes
  agent find out that a new unpack geometry is needed as soon as
  the display is reconnected.

- Persistent mode. Lot of logging added in order to trace use of
  resources as long as they are recreated. The current version
  fails to correctly restore the picture information when render
  is enabled.

nxagent-1.3.2-3

- Finally fixed all the problems with missing initialization of
  pixmap formats. The screen info is now correctly set up even
  when the remote display doesn't support all the target depths.
  Many thanks to Michael L Torrie who helped me to reproduce the
  problem and come to a solution.

- Moved initialization of depths, default drawables and pixmap
  formats to their own functions in Display.c.

nxagent-1.3.2-2

- Fixed the nxagentDestroyPixmap() function to correctly take into
  account the reference counter of the virtual pixmaps. This solves
  the crashes observed when running some GTK clients like xchat.

- Added a function Pixmap.c to forcibly destroy the pixmaps created
  in the virtual framebuffer when the parent pixmap is destroyed.

- This version contains some verbose output intended to better test
  the new behaviour. The output will be removed in future versions.

nxagent-1.3.2-1

- More cleanup in Pixmap.c.

- Rewritten nxagentCreatePixmap(). Corrected an error where the
  bitsPerPixel field was set to the pixmap's depth instead of the
  result of BitsPerPixel(depth). This finally solves the problem
  of text being incorrectly rendered in the virtual framebuffer.

- Corrected the X error returned at the end of session when trying
  to free a pixmap with an invalid id.

- Opened the 1.3.2 branch.

nxagent-1.3.1-32

- Cleanup of Pixmap.h/Pixmap.c. Renamed macros according to the
  nxagent naming conventions.

nxagent-1.3.1-31

- When running in fullscreen mode, grab and ungrab of pointer and
  keyboard is performed in new functions, placed in Events.c.

- The event loop now checks if the enter/leave notify carries a
  NotifyInferior detail and, in this case, doesn't perform the grab.
  This saves half the amount of grabs (and the related roundtrips)
  performed by the previous version.

- Ungrab of pointer is now performed whenever the cursor leaves the
  fullscreen window. In previous version only the keyboard was
  explicitly ungrabbed.

- Added a warning in the event loop when receiving a MappingNotify.
  This event is presently unhandled and seems to be reported, as a
  consequence of the selected event mask, only by some X servers.

nxagent-1.3.1-30

- Reverted the patch introduced in Pixmap.c. The whole issue is
  being investigated in its ramifications up to the virtual frame
  buffer.

nxagent-1.3.1-29

- Fixed a problem in the nxagentDestroyPixmap function where the
  reference counter of pixmaps could be decremented twice. This
  could lead to agent trying to free the pixmaps more than once.

- On Solaris there is no description for pc105 keyboard model. As
  a workaround we consider pc104 to be the closest approximation.

nxagent-1.3.1-28

- Fixed a bug in the create window procedure. With some clients,
  like Maelstrom and xmame, the creation of the main window was
  failing due to the wrong colormap and visual attributes used
  by agent on the real X server.

- In fullscreen mode the keyboard is now grabbed at the time we
  receive an EnterNotify event. This fixes a problem at startup
  observed on some Debian based distributions where agent didn't
  receive the keyboard focus until user had minimized and then
  brought to front the agent's window. The grab is now correctly
  performed by using the timestamp of the remote X server ins-
  tead of our local timestamp.

- In NXdixfonts.c strings corresponding to names of fonts and
  font aliases cached by nxagent were missing the terminating
  zero.

- In function InitClientPrivates fixed the missing initializa-
  tion of the is_ignored member of the ClientPriv structure.

- Added the Persistent option to Options repository. The flag is
  intended to replace the old nxagentEnableReconnect variable.

nxagent-1.3.1-27

- Fixed a memory allocation problem in Keyboard.c. A string was
  allocated in the heap without making enough room for the trail-
  ing zero.

nxagent-1.3.1-26

- Added further run-time checks to verify that pixmaps are not
  created with bad bit-per-plane settings. This problem seems to
  be caused by lack of support by nxagent of some combinations
  of depth and visual when the render extension is enabled. If
  this is the case, hide the render extension to new clients and
  force any subsequent render operation to return a BadRequest
  error. This required including extension.c from dix. A new
  NXextension.c file is added to the distribution.

- A problem was reported by Valgrind about reading the first 4
  bytes just after the block allocated in fbCreatePixmap from
  nxagentCreatePixmap. A quick fix was added to pixmap.c from
  dix so that AllocatePixmap adds 4 additinal bytes to each
  buffer.

nxagent-1.3.1-25

- Fixed a memory corruption error. The original AllocateGlyphSet
  from render/glyph.c could be called instead of the NX counter-
  part defined in NXglyph.c. This could lead to the missing
  allocation of the trailing remote glyphset id field.

- Added initialization of an otherwise usused string in function
  nxagentPropagateArtsdProperties(). The whole string is probably
  to be removed in future versions.

- Moved the flag used to avoid reentrancy in GCOps to a separate
  Trap header and source.

- Further cleanup. Removed the zombie file NXglyphcurs.h.

- Added missing initialization of the picture pointer in private
  window's data in nxagentCreateWindow.

nxagent-1.3.1-24

- Added the missing timeout when calling WaitForSomething() at
  startup. The bug caused the splash to remain on screen until
  a further event was received.

- Fixed a BadAtom error on Windows during initialization. Error
  was caused by a bad attempt to change the NX_AGENT_SIGNATURE.

- Hunting the 0 bits-per-plane drawable bug in nxagentValidateGC.
  Added tracing output and additional checks. GC validation is
  skipped if it is not possible to recover an appropriate value.

- Ensured that nxagentDisplayName is set before calling the post
  initialization procedure.

nxagent-1.3.1-23

- When session is run nested inside another NX X agent, all the
  optimizations regarding remote expose events on fully visible
  windows are disabled. This solves the refresh problems encoun-
  tered when covering the nested session with a window from the
  local X server.

- Reusing NX_AGENT_SIGNATURE atom to detect nested operation.
  Atom is created internally to the agent server at startup,
  before any atom on the real display.

- Fixed construction of caption used for dialog boxes spawn by
  agent. The previous algorithm failed to identify the correct
  string in parameter -name passed on the command line.

nxagent-1.3.1-22

- Ensured that state of keyboard modifiers is initialized with
  values from the real X server when the first key stroke is
  pressed by the user.

- Fixed the X_SetInputFocus errors generated at session startup.

- Rootless mode. Ensured that remote expose events are always
  reported by the remote proxy. This is a temporary fix looking
  forward for better handling of visibility events.

nxagent-1.3.1-21

- Saved a GetWindowAttributes and a GetGeometry in the function
  drawing the splash screen.

- Better handling of splash at startup. Removed the flickering on
  Windows without recurring to another atom. This is achieved by
  optimizing drawing and delaying mapping of the main windows.

- Modified the magic values activating rootless mode to 100x100.

- Removed modifications introduced in 1.3.1-20.

nxagent-1.3.1-20

- Working on eliminating the splash screen flickering on Windows
  and Darwin. Checked if the NX_SPLASH atom has been created by
  the NX X server. If this is the case, we let the NX X server
  show the splash screen on our behalf.

nxagent-1.3.1-19

- Improved the initialization phase by removing a GetProperty, an
  InternAtom and two GetInputFocus round-trips.

- Added appropriate masking of the state bits reported by the
  XkbStateNotifyMask event.

- Added a simple mechanism during the itialization phase to trace
  the use of X server replies.

nxagent-1.3.1-18

- Made some order in functions loading the NX icon.

- Removed some more zombie files from agent distribution. Now only
  the files imported from DIX and MI have name prepended with NX.

nxagent-1.3.1-17

- Moved names and values of intern atoms created by agent in their
  specific header and source.

- We temporarily force rootless mode if user provides a geometry
  of 801x601. This is intended to simplify testing. Note that if
  rootless is selected, we'll anyway disregard any geometry set
  by the user, assuming the geometry of the real display.

nxagent-1.3.1-16

- We are checking now whether NX_IDENTITY intern atom is created
  before NX_SPLASH. We want NX X servers to show the splash on our
  behalf, so if NX_SPLASH is already interned, than we just skip
  the splash procedure.

nxagent-1.3.1-15

- Rootless mode. Fixed a segfault handling ConfigureNotify events
  on top-level windows.

- Moved handling of ClientMessages coming from proxy in a separate
  function.

nxagent-1.3.1-14

- Rewritten the code dealing with key modifier changes. Now we
  use XKB events instead of synchronous XkbGetIndicatorState()
  calls.

- Moved activation of keyboard and pointer events to Events.c.

- Removed pointer motion optimizations as a better logic, taking
  in account the selected link speed, is already implemented in
  proxy.

nxagent-1.3.1-13

- Renamed the -reconnect option as -persistent.

- Rootless mode. Agent's root windows are not mapped at startup.

- Removed the zombie file glyphcurs.c from agent distribution.

nxagent-1.3.1-12

- Corrected a typo in the new CopyArea code in GCOps.c where:

  if (srcx > nxagentWidth)  srcx = nxagentWidth;
  if (srcy > nxagentHeight) srcx = nxagentHeight;

  had to be:

  if (srcx > nxagentWidth)  srcx = nxagentWidth;
  if (srcy > nxagentHeight) srcy = nxagentHeight;

- Added handling of the fullscreen command line parameter to the
  options repository.

- Added agent geometry parameters to the options repository.

nxagent-1.3.1-11

- Rootless mode. Added handling of configuration events reported
  for the top-level windows.

- Rootless mode. Children of the root window get the event mask
  selected when the window is created. This makes the keyboard
  work at least with xterm and other simple clients. There are
  still problems with the pointer events.

- Created new Splash.h and Splash.c sources file to contain the
  few splash screen procedures that were previously sparsed in
  multiple files.

- Added traces in all the window creation procedures and in the
  initialization routines called at startup.

- Renamed some source files to make simpler to identify what is
  imported from DIX and what actually pertains to agent.

nxagent-1.3.1-10

- Added the missing RestackWindow screen operation. This solves
  problems of incorrect stacking order observed in menus when
  using the drop shadow feature in the latest KDE versions.

nxagent-1.3.1-9

- The new standard for checking previous inclusion of headers is
  by verifying definition of _Filename_H_ where Filename is the
  base name of the file, for example __Options_H__ in the case
  of "Options.h". This is intended to be a step in reducing the
  number of defines in code prefixed with NXAGENT.

- Updated NX copyright to year 2004. Placed copyright statement
  regarding NXAGENT and NX modifications to the Xnest software
  at the beginning of the file. Checked again if credit is given
  to all the existing copyright owners.

nxagent-1.3.1-8

- Added a new Options repository to store the values currently
  dispersed all over around. The new macros nxagentOption(option)
  and nxagentChangeOption(option, value) should be used from now
  on to access the important values affecting agent's operations.

- General cleanup of code. Removed the remaining references to
  the Xnest legacy code.

nxagent-1.3.1-7

- Some steps forward toward rootless agent. Now all the top level
  windows are correctly created. Drawing to the real screen seems
  to work without problems. It is still not possible to get events
  in the event loop and the remote WM is interfering with the WM
  on the local display.

- More cleanup of code. Some changes to parts added since 1.3.1-5.

nxagent-1.3.1-6

- A drawable with 0 bpp can somehow arrive to the fb layer. The
  problem needs to be better investigated. In the meanwhile a
  quick check is added to correctly identify the ill condition.

- Small fix to allow Num/Caps lock synchronization also on the
  windows platform. This is still to be considered beta quality.

- New options -slow and -fast added to agent. When "fast mode" is
  not set, agent will query the remote X server to get real content
  of drawables. When fast mode is enabled, agent will save the
  round-trip by just clearing the drawable to its background. The
  default mode is "slow", thus agent will always query the remote
  server. When "fast mode" is explicitly set or when NX transport
  is detected and the link is one of MODEM, ISDN and ADSL, agent
  will default to "fast mode". This behaviour can be overridden by
  system administrators by setting the key AGENT_EXTRA_OPTIONS_X
  to "-slow" in node configuration.

nxagent-1.3.1-5

- Created framework for rootless agent. Added a -rootless option.

- Slowly going toward a better organization of nxagent internals.
  Renamed some files and moved things around. Changed some comments
  in Screen.c to be more explainatory.

nxagent-1.3.1-4

- Changed default keyboard model to "pc102" (was "pc101") to correct
  problems with "<" and ">" keys on the German keyboards and, poten-
  tially on other layouts.

- Added new parameter -kbtype to handle both geometry and layout in
  a single form, for example pc102/pl. Parameter -keyboard is still
  supported for backward compatibility.

- Synchronization of Num and Caps lock status is now done comparing
  the real keyboard and the internal state at the time nxagent gets
  the focus. If state doesn't match, a fake keyboard event is sent.

nxagent-1.3.1-3

- Fixed a further problem on CopyArea between windows and pixmaps.

nxagent-1.3.1-2

- Implemented CopyArea on framebuffer when copying from windows to
  pixmaps. Added the -slow command line switch to let nxagent get
  the real content of the window from the X server. This requires
  an expensive round-trip so it is disabled by default.

nxagent-1.3.1-1

- Opened the 1.3.1 branch.

nxagent-1.3.0-32

- Fixed a bug on 16 bpp displays using render extension. Now only
  images which are used by render pictures and which have depth 32
  are created with a different visual color mask. This saves a big
  amount of SetUnpackColormap requests.

nxagent-1.3.0-31

- Fixed a bug in nxagentComposite routine. The macro nxgentPicturePriv
  was used without checking for a null pointer argument.

nxagent-1.3.0-30

- Limitations on bandwidth introduced whenever the agent's window
  is covered are now disabled by default. They can be enabled by
  specifying the -limit option on the command line. The -nolimit
  option is left for compatibility with the previous versions.
  This handy feature caused complaints in the past from users who
  instruct window managers to not move the window having focus on
  top of the stacking order.

nxagent-1.3.0-29

- Removed the warnings issued at compile time.

nxagent-1.3.0-28

- Replaced the corrupted file nxagent.xpm with the original version.

nxagent-1.3.0-27

- Hopefully fixed all the remained memory leaks. Most problems were
  due to agent's render extension not freeing resources on X server.

- Added support for big-endian X server display on render extension.
  Glyphs are reformatted according with the destination order.

- Added per client information for SetUnpackGeometry, now the unpack
  routines should have the correct information for the color mask at
  the end of the split process.


nxagent-1.3.0-26

- Changed the message printed in the log when leaving the dispatch
  loop from 'Error' to 'Info'.

- Moved initialization of _NXFlushSize to nxcompext in order to set
  value at the time NXGetControlParameters() is called.

nxagent-1.3.0-25

- Content of selection is now acquired using a single round-trip.
  If content exceeds 262144 bytes, it is truncated at that size.
  This works in most situations, at least with text, that, by the
  way, is the only target supported at the moment. An improvement
  would be to modify the state machine in a way that the remaining
  data part is got using a second round-trip. This is not difficult
  to do and can be considered for future releases.

- In handling of clipborad we had to disable check on multiple
  convert selection requests from the same client. There is a bug
  in the algorithm that prevents the counter to be reset at the
  appropriate time. This is to be investigated.

nxagent-1.3.0-24

- Added asynchronous handling of GetProperty requests and replies
  using the NXCollectProperty and NXGetCollectedProperty requests
  and the NXCollectPropertyNotify event in NXclipboard.c and in
  Event.c. Implementation is not complete yet and can sometimes
  cause X clients to misbehave.

- Function xnestBitBlitHelper() now always returns NullRegion.
  Handling of graphical expose events should be rewritten so that
  regions are always generated internally to nxagent. Returning a
  null region without checking our event queue, anyway, saves a
  flush of the display buffer and doesn't seem to affect the
  functionalities.

- This version comprises modifications to Events.c, GCOps.c,
  NXClipboard.c, NXwindow.c and Window.c where I found XSync()
  messages (or code used to just send XSync() messages) outside
  any #ifdef ..._DEBUG.

nxagent-1.3.0-16

- A dialog is showed at startup if proxy was not able to load a
  persistent cache.

- Reflected changes introduced in NXGetControlParameters() to add
  more detailed information about the compression settings.

- Fixed a potential bug with the name of the agent's display at the
  time a dialog had to be showed. String was allocated with only 6
  characters. This could lead to dialogs not being showed using
  display ports greater than 9999.

- NX.h is now included by NXControl.h. Removed #include directives
  from other files.