forked from emweb/wt
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReleaseNotes.html
5654 lines (5025 loc) · 239 KB
/
ReleaseNotes.html
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
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
<style type="text/css">
dt { font-weight: bold; }
h3 { text-decoration: underline; }
dd { margin-top: 10px; margin-bottom: 10px; }
dd p { margin-top: 0px; }
dd div { margin: 10px 0px; }
</style>
<title>Wt Release notes</title>
</head>
<body>
<h1>Wt Release notes</h1>
This file lists important notes on migrating existing applications to
newer version of Wt. It lists changes in the library that may break
the way you build Wt, the way you configure Wt or the Wt API and
behaviour.
<h2>Release 4.5.0 (December 15, 2020)</h2>
<h3>Notable changes</h3>
<ul>
<li>Wt now targets C++14, and <tt>CMAKE_CXX_STANDARD</tt> defaults to "14". There appears to
be no good reason to maintain C++11 support, since every compiler that supports enough C++11
for Wt also supports enough C++14. You should still be able to use C++11 mode when using Wt
as a library, but Wt itself no longer builds in C++11 mode.</li>
<li>Wt::Dbo: the <a href="classWt_1_1Dbo_1_1backend_1_1Firebird.html">Firebird</a> backend
has been marked as unmaintained. The Firebird tests were not succeeding, likely because
of an incompatibility with the unmaintained IBPP that the Firebird backend is based on
and recent versions of Firebird.</li>
</ul>
<h3>Features and improvements</h3>
<ul>
<li><a href="https://redmine.webtoolkit.eu/issues/7586" target="_blank">Issue #7586</a>:
The <tt><behind-reverse-proxy></tt> option has been deprecated in favor of a new
<tt><trusted-proxy-config></tt> option. It's now possible to specify the IP header
that Wt should look for using <tt><remote-ip-header></tt> (defaults to <tt>X-Forwarded-For</tt>).
Wt will trust all proxies listed in <tt><trusted-proxies></tt>.
When <tt><behind-reverse-proxy></tt> is set to <tt>true</tt>, the behavior stays the
same as it was before. <a href="overview.html#config_general">See the library overview for more
information about this option.</a>
</li>
<li>
<a href="classWt_1_1WFormModel.html">WFormModel</a> now uses string comparison instead of pointer comparison
for its fields.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7666" target="_blank">Issue #7666</a>: In some cases Wt 4.4.0 would
connect <tt>jsScrollVisibilityChanged</tt> even if it was not actually being used, causing extra unnecessary
requests.
</li>
<li>
Added Jenkins pipelines in the
<tt><a href="https://github.com/emweb/wt/tree/master/jenkins" target="_blank">jenkins</a></tt> folder.
We use Jenkins to test Wt at Emweb but we would usually
keep this configuration in Jenkins. Our pipelines for Linux and FreeBSD have now been updated a bit and moved
into the Wt repository, since they may be of use to people looking to contribute to Wt.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7669" target="_blank">Issue #7669</a>: Wt now automatically uses
<a href="classWt_1_1WObject.html#a3de0f0baf35f42aa4e77a90d427f2e11">addChild</a> instead of
<a href="classWt_1_1WContainerWidget.html#ad17b653b6f0487e42b2a63ab9de03f20">addWidget</a> when
<a href="classWt_1_1WContainerWidget.html#acf75dda5024db05cf847c282f8a99117">addNew</a> is used
on a global widget, like <a href="classWt_1_1WPopupWidget.html">WPopupWidget</a>.
</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>
<a href="https://redmine.webtoolkit.eu/issues/6367" target="_blank">Issue #6367</a>:
fixed issue where wthttp would no longer accept new connections when an error occurred
while accepting a connection, e.g. if the open file limit was reached.
</li>
<li>
<a href="classWt_1_1WDate.html#a57a614e3408f39c70605027fe3e3f3f5">WDate::currentServerDate()</a> and
<a href="classWt_1_1WTime.html#a271bd124707e50cc15872e263ffa71f2">WTime::currentServerTime()</a> now
correctly return the local date and time on the server instead of UTC.
</li>
<li>
Fixed visibility of
<a href="classWt_1_1Auth_1_1OAuthProcess.html">OAuthProcess</a> and
<a href="classWt_1_1Auth_1_1OAuthAccessToken.html">OAuthAccessToken</a>.
</li>
<li>Fixed issues
<a href="https://redmine.webtoolkit.eu/issues/6548" target="_blank">#6548</a> and
<a href="https://redmine.webtoolkit.eu/issues/7749" target="_blank">#7749</a>:
URL parameters were being parsed more than once for file uploads, causing a rapid
accumulation of duplicate values during uploads, and potentially causing segmentation
faults. The
<a href="https://github.com/emweb/wt/tree/master/examples/wtwithqt" target="_blank">wtwithqt</a>
example was also updated so that it properly waits for condition variables in a loop,
to deal with spurious wakeups. Also fixed a potential use-after-free when updating resource
progress.
</li>
<li>
Fixed an issue where the <a href="classWt_1_1Http_1_1Client.html">HTTP Client</a>
would wait indefinitely for data when <tt>Content-Length</tt> is zero.
</li>
<li>
WebSockets: If a bad value for <tt>server_max_window_bits</tt> or
<tt>client_max_window_bits</tt> was encountered, this would cause
an uncaught exception and a crash. This is now handled properly.
</li>
<li>
Fixed issue with <tt>DISTINCT ON</tt> in X3 based query parser: the fields listed
there would incorrectly be regarded as fields being returned.
</li>
<li>
Fixed issue <a href="https://redmine.webtoolkit.eu/issues/7677" target="_blank">#7677</a>:
when a font could not be loaded in <a href="classWt_1_1WPdfImage.html">WPdfImage</a>,
this would throw an uncaught exception. This was changed to logging an error.
</li>
<li>
Fixed issue <a href="https://redmine.webtoolkit.eu/issues/7719" target="_blank">#7719</a>:
<a href="group__modelview.html#gaac976f394f370d3d62c29791b13a0049">Wt::asString</a>
did not properly handle <tt>unsigned long</tt>.
</li>
<li>
<a href="https://github.com/emweb/wt/pull/166" target="_blank">PR #166</a>:
fixed <a href="https://github.com/emweb/wt/tree/master/examples/mandelbrot" target="_blank">mandelbrot</a> example:
missing call to <a href="classWt_1_1WRasterImage.html#af06beb3b09289d373fb7855750afdc83">done()</a>.
</li>
<li>
<a href="https://github.com/emweb/wt/pull/167" target="_blank">PR #167</a>:
we need to link with Boost unit_test_framework on Windows when <tt>BOOST_DYNAMIC</tt> is <tt>ON</tt>.
</li>
<li>
Fixed an issue where <a href="classWt_1_1WMediaPlayer.html">WMediaPlayer</a> would not get properly
loaded when <tt>reload-is-new-session</tt> is <tt>false</tt>, and the page is refreshed.
</li>
</ul>
<h2>Release 4.4.0 (August 3, 2020)</h2>
<p>Wt 4.4.0 adds a couple of new features, like multiple X axes, and WColorPicker, among other fixes and tweaks.</p>
<h3>Security related</h3>
<p>
Wt now rejects GET requests for Ajax-enabled sessions that are not for resources, as an
extra means to prevent session hijacking attempts. Patch provided by Bruce Toll in
<a href="https://redmine.webtoolkit.eu/issues/7585" target="_blank">issue #7585</a>.
</p>
<h3>Major new features</h3>
<ul>
<li>
<a href="classWt_1_1Chart_1_1WCartesianChart.html">WCartesianChart</a>: similar to how
Wt 4.0.4 added support for multiple Y axes, Wt 4.4.0 adds support for multiple X axes,
too. Instead of trying to squeeze another <tt>int</tt> argument into functions like
<a href="classWt_1_1Chart_1_1WCartesianChart.html#a37b22e4bdc17c45d193848cca443dd28">WCartesianChart::map</a>,
we decided to add overloads that take two <a href="classWt_1_1Chart_1_1WAxis.html">WAxis</a> references.
</li>
<li>
Added <a href="classWt_1_1WColorPicker.html">WColorPicker</a>: a simple form widget that display a browser-native
color picker. Patch provided in <a href="https://github.com/emweb/wt/pull/158" target="_blank">PR #158</a>.
</li>
</ul>
<h3>Minor features</h3>
<ul>
<li>
Wt::Dbo:
<ul>
<li>
<a href="https://github.com/emweb/wt/pull/161" target="_blank">PR #161</a>: added support for
<a href="group__dbo.html#ga4987bb75aacce8ada8662cc86a6fc3b5"><tt>ON UPDATE RESTRICT</tt></a> and
<a href="group__dbo.html#gaae0942000fa56b27ca4185f76395c388">ON DELETE RESTRICT</a> foreign key constraints in Wt::Dbo.
</li>
<li>
<tt>DBO_INSTANTIATE_TEMPLATES</tt> and the <tt>DBO_EXTERN_TEMPLATES</tt> macros used to be disabled with
Visual Studio since they wouldn't work with old versions of Visual Studio. We reenabled those macros, since
they've been working for a while now.
</li>
<li>
Added <a href="classWt_1_1Dbo_1_1Query.html#a693ed2ff14acaeffe45b8b6c09b6da8f">orWhere</a>.
</li>
</ul>
</li>
<li>
<a href="classWt_1_1WFileResource.html">WFileResource</a>: added a log message when failing to open a file. Previously,
it would not be very clear why nothing was downloaded.
</li>
<li>
Added the MIME type for <tt>.txt</tt> files to <tt>wthttp</tt>, so that
they are displayed in the browser rather than prompt a download.
</li>
<li>
All of the properties that Wt uses are now listed in the default <tt>wt_config.xml</tt> to make it easier
to get an overview of all of them without having to find them in the reference documentation.
</li>
</ul>
<h3>Updates</h3>
<ul>
<li>
<a href="https://github.com/emweb/wt/pull/162" target="_blank">PR #162</a>: Updated included Bootstrap 3 version to 3.4.1 (from 3.3.7)
</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>
Wt:: Auth:
<ul>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7518" target="_blank">Issue #7518</a>: previously, it was
not possible to set
<a href="classWt_1_1Auth_1_1AbstractPasswordService_1_1AbstractStrengthValidator.html">AbstractStrengthValidator</a>
to non-mandatory. This has now been fixed. It now also correctly reports
<a href="namespaceWt.html#a06744b1cf5fdeae2a8a6c0d0084fdf25">InvalidEmpty</a> when the input is left empty.
</li>
<li>
Fixed an issue where slots connected to <a href="classWt_1_1Auth_1_1Login.html#aafb1d791aeee8b59d28faeda88e8392b">Login::changed()</a> would still have the old session id, which would afterwards be updated, causing resource urls created in the slot to have the wrong session id.
</li>
</ul>
</li>
<li>
<a href="classWt_1_1WPaintedWidget.html">WPaintedWidget</a>: fixed an issue where combining incremental painting (<a href="namespaceWt.html#a23a1002020ee93ed4679d351b7350de3">PaintFlag::Update</a>) with images could cause the first paint event to be discarded, resulting in an incomplete result.
</li>
<li>
Previously, having multiple instances of <a href="classWt_1_1WGoogleMap.html">WGoogleMap</a> could cause JavaScript errors. This has now been resolved.
</li>
</ul>
<h2>Release 4.3.1 (April 20, 2020)</h2>
<p>This release fixes the following issues:</p>
<ul>
<li>
<a href="classWt_1_1WWebWidget.html">WWebWidget:</a> moved <tt>id_</tt> out of <tt>OtherImpl</tt>:
this fixes issues caused by the <tt>id_</tt> being removed before other things that depend on it,
like the <tt>jsScrollVisibilityChanged_</tt> signal. Fixes
<a href="https://redmine.webtoolkit.eu/issues/7508" target="_blank">issue #7508</a>.
</li>
<li>
Fixed join information not being copied over when copying
<a href="classWt_1_1Dbo_1_1AbstractQuery.html">Wt::Dbo::AbstractQuery</a>.
</li>
<li>
MinGW fixes: Direct2D/DirectWrite were disabled and are now enabled
by default. Libraries were changed to lowercase for cross-compiling
from Linux. Windows is case-insensitive, and MinGW libraries on Linux
are lowercase.
Fixes <a href="https://redmine.webtoolkit.eu/issues/7505" target="_blank">issue #7505</a>.
</li>
<li>
Fixed a wrong documentation link in the widget gallery.
</li>
</ul>
<h2>Release 4.3.0 (March 26, 2020)</h2>
<p>Wt 4.3.0 mainly adds the ability to redirect logging to a custom logging function, and login and transport encryption to the mail client, among some other fixes and tweaks.</p>
<h3>Logging redirection (<a href="https://redmine.webtoolkit.eu/issues/7240" target="_blank">issue #7240</a>)</h3>
<p>
Before, it was possible to send logging to a file or an <tt>std::ostream</tt>, and configure which messages were logged in <tt>wt_config.xml</tt>. Wt 4.3.0 extends
this with the ability to send all logging to a function, allowing users to redirect Wt's logs to whathever logging framework they prefer to use.
</p>
<p>The few log messages coming from Wt::Dbo would always be logged to <tt>std::cerr</tt>. It is now possible to change this to use Wt's logger, or a custom log function.</p>
<p>To allow for this new functionality, we introduced an abstract <a href="classWt_1_1WLogSink.html">WLogSink</a> class, and the following functions:</p>
<ul>
<li><a href="classWt_1_1WServer.html#a45fdbea913a16a310e10e337e5933072">WServer::setCustomLogger()</a>: sets a custom logger on the WServer level</li>
<li><a href="namespaceWt_1_1Dbo.html#a9a326a13084b93cbb33bf1c470879b0d">Wt::Dbo::setCustomLogger()</a>: sets a custom logger globally for all of Wt::Dbo</li>
<li><a href="namespaceWt_1_1Dbo.html#ac1c13200d17c21ab7a8dfe4cbf3aed05">Wt::Dbo::logToWt()</a>: sends all of Wt::Dbo's logging to Wt's logger</li>
</ul>
<h3>Mail client: support for login and encryption (<a href="https://redmine.webtoolkit.eu/issues/7444" target="_blank">issue #7444</a>)</h3>
<p>
We added basic support for <a href="namespaceWt_1_1Mail.html#a2e673920327e6df099fe3ec0191fdc93a4cd8413207629a963225f4314b53adcd">PLAIN</a> and
<a href="namespaceWt_1_1Mail.html#a2e673920327e6df099fe3ec0191fdc93a99dea78007133396a7b8ed70578ac6ae">LOGIN</a> authentication methods, and
encryption using <a href="namespaceWt_1_1Mail.html#a55d819f240a3553f33e6416ecd05b91fafa91df952500d196f6a10117d98843fe">StartTLS</a> or just
simple <a href="namespaceWt_1_1Mail.html#a55d819f240a3553f33e6416ecd05b91fa099d7d04319e5191b7473e016c55e320">TLS</a>.
</p>
<p>
You can enable authentication with <a href="classWt_1_1Mail_1_1Client.html#a4861b5d0157663d803a3edcb97f651f4">Client::enableAuthentication()</a>, and encryption with
<a href="classWt_1_1Mail_1_1Client.html#a170288f392a84a1e4e560422843c9a74">Client::setTransportEncryption()</a>, or using the configuration properties <tt>smtp-auth-username</tt>, <tt>smtp-auth-password</tt>,
<tt>smtp-auth-method</tt>, and <tt>smtp-transport-encryption</tt>.
</p>
<h3>Other changes</h3>
<p>Some small changes in behaviour that you may want to be aware of:</p>
<ul>
<li>
Wt::Auth: lost password tokens used to be removed as soon as the link was used, even when they were not actually used to change the password. Now, the
token will stay valid until the password is actually changed. Also, if the password is changed through other means, the update password token is invalidated.
</li>
<li>
<a href="classWt_1_1WCanvasPaintDevice.html">WCanvasPaintDevice</a>: instead of stopping the drawing entirely when <tt>drawImage()</tt> fails (e.g. because of a missing image),
the image will be skipped but drawing will continue. An error will be logged to the console.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7060" target="_blank">Issue #7060</a>: fixed
<a href="classWt_1_1Http_1_1Request.html#a5f18be4100482713c257bea43a3c913b">Request::clientAddress()</a> when behind a reverse proxy to
be the same as <a href="classWt_1_1WEnvironment.html#aedad4a59684dc41c9985a713ee4eb00a">WEnvironment::clientAddress()</a>, and as mentioned in the documentation.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7404" target="_blank">Issue #7404</a>: reparenting of popup widgets should only stop at scroll bars.
</li>
</ul>
<p>Other changes and fixes:</p>
<ul>
<li>
<a href="classWt_1_1WLength.html">WLength</a>: added
<a href="namespaceWt.html#a736803866293d189d852d2c7adb7d94ea67bbbcb8c3f0869b19682f3dd5f27893">LengthUnit::ViewportWidth</a>,
<a href="namespaceWt.html#a736803866293d189d852d2c7adb7d94ea1cc83e088aae799b9acb909c10c3d8b2">LengthUnit::ViewportHeight</a>,
<a href="namespaceWt.html#a736803866293d189d852d2c7adb7d94eae21d04628175a77110405adc9338b9c2">LengthUnit::ViewportMin</a>,
and <a href="namespaceWt.html#a736803866293d189d852d2c7adb7d94ea91b2f19f5c34f05a401200359e38e3c3">LengthUnit::ViewportMax</a>.
</li>
<li>
Updated the <tt>composer</tt> and <tt>filetreetable</tt> examples to use <a href="classWt_1_1WLocalDateTime.html">WLocalDateTime</a> rather than OS specific functions.
</li>
<li>
Refactored the <tt>treelist</tt> example.
</li>
<li>
Wt::Dbo:
<ul>
<li>added query parsing implementation based on X3 instead of Spirit Qi, which reduces compile time and memory usage.</li>
</ul>
<ul>
<li>added <a href="classWt_1_1Dbo_1_1SqlStatement.html#a4868a3639566171ac3d58e15e3bf77f3">SqlStatement::columnCount()</a>. This
makes it possible to create <tt>query_result_traits</tt> for result types with a variable number of columns, like <tt>std::vector</tt>.</li>
</ul>
</li>
<li>
<a href="classWt_1_1WModelIndex.html">WModelIndex</a> now has a proper ordering, even for raw indexes. This means they can properly be inserted into and retrieved from a <tt>std::set</tt>.
</li>
<li>
<a href="classWt_1_1WServer.html">WServer</a>: documented the <a href="classWt_1_1WServer.html#a5f850e30f9bd54a946c3f832d60f5b2a">schedule()</a> function.
</li>
<li>
wthttp: added child process id to some of the logging related to dedicated session processes
</li>
</ul>
<h2>Release 4.2.2 (March 16, 2020)</h2>
<p>
This release fixes the following issues:
</p>
<ul>
<li>
Security-related: in Wt::Auth the lost password email would be sent to the email
address provided in the form, rather than the user's configured email address. While
we treat email addresses as case insensitive, it is possible that the mail server may not,
and that could potentially be used to steal an account. It is however quite rare for
email services to be case sensitive.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7439" target="_blank">Issue #7439</a>:
ensure that tooltips are always on top, even inside of a dialog.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7448" target="_blank">Issue #7448</a>:
fixed compilation error on recent versions of MinGW, by using the <tt>gmtime_s</tt>
function on Windows.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7447" target="_blank">Issue #7447</a>:
fixed text format being reset when the text of a <a href="classWt_1_1WAnchor.html">WAnchor</a> is cleared.
</li>
<li>
Fix for <a href="classWt_1_1WLeafletMap.html">WLeafletMap</a> issue that was <a href="https://redmine.emweb.be/boards/2/topics/16718" target="_blank">reported on the forum</a>: signals would get unexposed when options were changed.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7457" target="_blank">Issue #7457</a>:
moved call to <a href="classWt_1_1WApplication.html#ae88546224ed32cade783da188b145138">WApplication::require()</a> to the constructor, since calling it in the render function may cause issues.
</li>
<li>
Fixes for <a href="classWt_1_1WVirtualImage.html">WVirtualImage</a>:
<ul>
<li>Do not render zero width or zero height images. This was possible when <tt>imageWidth</tt> or <tt>imageHeight</tt> was
a multiple of the <tt>gridImageSize</tt>.</li>
<li>Fixed <a href="classWt_1_1WVirtualImage.html#a0feb746fc22b907f779423bd9768109c">scrollTo()</a> when the image is narrower than the viewport: <tt>scrollTo(0, 0)</tt> would not put <tt>(0, 0)</tt> at
the top left when the image was narrower (or taller) than the viewport.</li>
</ul>
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7480" target="_blank">Issue #7480</a>: prefix Wt's crypt functions to fix issues
when linking with <tt>libxcrypt</tt>, and also set C code's default visibility to hidden.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7468" target="_blank">Issue #7468</a>: fixed panning not working properly for a <a href="classWt_1_1Chart_1_1WCartesianChart.html">WCartesianChart</a> with plain tooltips.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7482" target="_blank">Issue #7482</a>: <tt>lastId_</tt> in Postgres backend should be <tt>long long</tt>.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/6774" target="_blank">Issue #6774</a>: misc. <a href="classWt_1_1WTreeView.html">WTreeView</a> fixes.
</li>
<li>
Fixed use after free caused by order of destruction in <a href="classWt_1_1WWebWidget.html">WWebWidget</a> destructor.
</li>
</ul>
<h2>Release 4.2.1 (February 6, 2020)</h2>
<p>
This release fixes the following issues:
</p>
<ul>
<li>wthttp fixes:
<ul>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7406" target="_blank">Issue #7406</a>: requests for absolute-form URLs (e.g. <tt>GET http://localhost:8080/ HTTP/1.1</tt> instead of <tt>GET / HTTP/1.1</tt>) are now rejected. No client normally sends requests like this to an origin server. See <a href="https://tools.ietf.org/html/rfc7230#section-5.3.2" target="_blank">RFC 7230, section 5.3.2</a>.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7405" target="_blank">Issue #7405</a>: multiline HTTP headers (line folding) were causing
wthttp to segfault. This was fixed by removing support for (obsolete) line folding. See <a href="https://tools.ietf.org/html/rfc7230#section-3.2.4" target="_blank">RFC 7230, section 3.2.4</a>.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7390" target="_blank">Issue #7390</a>: added MIME type for <tt>.wasm</tt> files.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7384" target="_blank">Issue #7384</a>: setting the <tt>--docroot</tt> of wthttp
to <tt>.;</tt> will now correctly make it so that no path is interpreted as being a static resource.
</li>
</ul>
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7350" target="_blank">Issue #7350</a>: fixed <a href="classWt_1_1WPaintedWidget.html">WPaintedWidget</a>'s <tt>wtResize</tt> JavaScript to assume its preferred size when called with a size of -1.
</li>
<li>
Fixed possible JavaScript errors caused by <a href="classWt_1_1WContainerWidget.html">WContainerWidget</a>'s <tt>wtEncodeValue</tt> JavaScript not being terminated by a semicolon.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7407" target="_blank">Issue #7407</a>: fixed JavaScript memory leak related to deferred or HTML tooltips.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7360" target="_blank">Issue #7360</a>: documented <a href="structWt_1_1Mail_1_1Message_1_1Recipient.html">Wt::Mail::Message::Recipient</a>.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7393" target="_blank">Issue #7393</a>: if the internal path is set to invalid in initialize, Wt should still send a 404 status code.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7361" target="_blank">Issue #7361</a>: a previous attempt at fixing horizontal scrolling stutter
in Wt 4.1.1 caused a regression in <a href="classWt_1_1WTableView.html#a093b661f93551c1d6f73c423ae8ef459">WTableView::scrollTo()</a>.
</li>
<li>
Fixed several issues with <a href="classWt_1_1WLeafletMap.html">WLeafletMap</a> that were
<a href="https://redmine.emweb.be/boards/2/topics/16718" target="_blank">reported on the forum</a>.
</li>
<li>
<a href="classWt_1_1Chart_1_1WCartesianChart.html">WCartesianChart</a>: when there were so many bars on
a bar chart that the width of a bar became 0, placing tooltips would cause a crash. Wt will now skip
tooltip placement when bars get too narrow.
</li>
<li>
<a href="classWt_1_1WSuggestionPopup.html">WSuggestionPopup</a>: when
<a href="classWt_1_1WSuggestionPopup.html#a0395bd5080856eb95ccb50748f25d1c7"><tt>setDropDownIconUnfiltered(true)</tt></a>
was used, pressing the up/down arrows to move through the list would cause it to be filtered.
</li>
<li>
Reverted a previous change to <a href="classWt_1_1WModelIndex.html">WModelIndex</a>: since the comparison operator of model indexes uses the parent, we can't insert raw indexes into a <tt>std::set</tt>.
</li>
<li>
<a href="https://redmine.webtoolkit.eu/issues/7353" target="_blank">Issue #7353</a>: added mention in 3.5.0 release notes about
<a href="classWt_1_1WPdfImage.html">WPdfImage</a> pen width fix.
</li>
<li>
<a href="group__modelview.html#gaeb2f9c583490833afd55d65402b4fea9">registerType</a> now uses <tt>std::type_index</tt> instead of comparing <tt>type_info</tt> pointers.
</li>
<li>
Some widgets (like <a href="classWt_1_1WTreeView.html">WTreeView</a>) would not be properly sized when they were initially hidden.
</li>
<li>
Fixed a segfault in <a href="classWt_1_1WTableRow.html">WTableRow</a>, <a href="https://redmine.webtoolkit.eu/boards/2/topics/16732" target="_blank">reported on the forum</a>.
</li>
<li>
Miscellaneous documentation fixes.
</li>
<li>
<b>CMake fixes:</b>
<ul>
<li>
<tt>wt-config.cmake</tt>: CMake would look for Boost even when Wt was linked dynamically, and
Boost was linked statically, like in our Windows builds.
</li>
<li>
<tt>wt-config-version.cmake</tt>: <tt>match</tt> function needed to be <tt>math</tt>
</li>
<li>
CMake needed to look for <tt>Boost::filesystem</tt> for some examples (but didn't).
</li>
</ul>
</li>
</ul>
<p>
If you diff this release with the last one, it looks like we've changed a lot more, but this
is simply because we needed to update Emweb bvba to Emweb bv everywhere.
</p>
<h2>Release 4.2.0 (December 3, 2019)</h2>
<p>
Wt 4.2.0 introduces no major new features, but comes with some nice fixes and little quality of life improvements.
</p>
<h3>Notable backwards-incompatible changes</h3>
<ul>
<li><a href="classWt_1_1WSuggestionPopup.html">WSuggestionPopup</a>: <a href="structWt_1_1WSuggestionPopup_1_1Options.html#a3e29211108f2b156a0b983a5a15ecece">wordSeparators</a> no longer requires (extra) escaping, so a newline is indicated with the string literal "\n", not "\\n". Similarly, the <a href="structWt_1_1WSuggestionPopup_1_1Options.html#aef3e98b66b4cc136e2c726079d6681de">whitespace</a> property was incorrectly documented as requiring (extra) escaping.</li>
<li>The <a href="classWt_1_1WLogEntry.html">WLogEntry</a> copy constructor–which logically performed a move–was removed and replaced by a move constructor.</li>
<li>Removed <tt>WDatePicker::setGlobalPopup</tt>–it was deprecated in Wt 3.3.0, but we forgot to remove it in Wt 4.</li>
<li><a href="classWt_1_1WLogger.html">WLogger</a> now logs opening of log file to the previous output (usually <tt>std::cerr</tt>) using the logger instead of directly to <tt>std::cerr</tt>. This allows to disable this log message with <tt>-info:WLogger</tt>.</li>
</ul>
<h3>CMake changes</h3>
<ul>
<li>
When using GCC and clang, the default visibility of symbols is now set to hidden. This limits the exported symbols to only Wt's public interfaces,
reducing the size of <tt>.so</tt> files and preventing accidental use of unexposed APIs.
</li>
<li>
Added Wt version information to Wt's CMake config files
</li>
</ul>
<h3>HTTP connector</h3>
<p>It's now possible to get client certificate information in wthttp when behind a reverse proxy, see the documentation for <a href="classWt_1_1WEnvironment.html#a04b65c4f7fe6e3b0bd652e2580b4f62e">WEnvironment::sslInfo()</a> for more information.</p>
<p>This is tested to work with nginx and Apache. HAProxy is currently not supported, since its variables are in a rather different format.</p>
<p>Wt can still use this info even if Wt itself is compiled without OpenSSL.</p>
<h3>Features</h3>
<ul>
<li>
PR <a href="https://github.com/emweb/wt/pull/140">#140</a>: <a href="classWt_1_1WLogEntry.html">WLogEntry</a> can now use argument dependent lookup for <tt>to_string</tt> in its <tt>operator<<</tt>.
</li>
<li>
Added overloads to <a href="classWt_1_1WServer.html#af2100c604f1ad933256097972fd38102">WRun()</a>,
<a href="classWt_1_1WServer.html#af22c4176fb07d6f5f3cab42ef7f36f7f">WServer::WServer()</a>,
<a href="classWt_1_1WServer.html#a6ef2c780a70eebc68707ea0d684b8509">WServer::setServerConfiguration()</a>,
and <a href="classWt_1_1WServer.html#afd4dc8802de5f9b93b23ea7948c8a91e">WServer::restart()</a> that
take an applicationPath <tt>std::string</tt>, and a vector of strings for arguments, instead of <tt>argc</tt>, and <tt>argv</tt>.
This is more convenient if the command line arguments are generated by the application.
</li>
<li>
<a href="classWt_1_1WTreeView.html">WTreeView</a>: added <a href="classWt_1_1WTreeView.html#ab7c527ce5304cdbe7f5bcb3e51880641">collapseAll()</a>.
</li>
<li>
Issue <a href="https://redmine.webtoolkit.eu/issues/7307" target="_blank">#7307</a>: enabled top and bottom padding on a non-inline <a href="classWt_1_1WText.html">WText</a>.
</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>
Limited prevention of default action of the <tt>dragstart</tt> event to only draggable widgets. This used to be global (set on <tt>document.body</tt>), but could conflict with other JavaScript libraries, especially when Wt is used in WidgetSet mode.
</li>
<li>
Issue <a href="https://redmine.webtoolkit.eu/issues/7210" target="_blank">#7210</a>: fixed removal of all widgets in a layout causing a JavaScript error
</li>
<li>
Fix for PR <a href="https://github.com/emweb/wt/pull/145">#145</a>: fixed linking error on Windows (unresolved external symbol "public: static struct Wt::NoClass Wt::NoClass::none")
</li>
<li>
<a href="classWt_1_1WPainter.html">WPainter</a>: fixed arc drawing code to be consistent across different backends, and with Qt's QPainter. Its behavior used to be erratic when angles larger than 360 degrees or lower than 0 were used.
</li>
<li>
<a href="classWt_1_1WPdfImage.html">WPdfImage</a>: fixed double scaling of pen width (e.g. a pen of width 4 pixels, and a scaling factor of 2 would result in a 16 pixel wide pen instead of an 8 pixel wide pen).
</li>
<li>
Many documentation tweaks and fixes that were discovered when working on JWt 4.
</li>
<li>
Fixed issue <a href="https://redmine.webtoolkit.eu/issues/7139" target="_blank">#7139</a>: some widgets would fail to be correctly reparented.
</li>
<li>
Fixed issue <a href="https://redmine.webtoolkit.eu/issues/7336" target="_blank">#7336</a>: Wt was touching the history API every 10 ms when scrolling to store the scroll position, causing sluggishness, especially on mobile browsers with smooth scrolling. The scroll position is now saved after the user has stopped scrolling.
</li>
<li>
Fixed issue <a href="https://redmine.webtoolkit.eu/issues/7323" target="_blank">#7323</a>: updated the <a href="https://github.com/emweb/wt/tree/master/examples/feature/broadcast" target="_blank">broadcast</a> feature example: its use of <tt>bindSafe()</tt> was incorrect
</li>
</ul>
<h2>Release 4.1.2 (October 30, 2019)</h2>
<p>
This release fixes the following issues:
</p>
<ul>
<li><b>wthttp security issues</b>:
<ul>
<li>Wt internally used an <tt>SSL-Client-Certificates</tt> header to send client certificates to child processes when using dedicated process mode. It was however <i>always accepted even when Wt was not behind a reverse proxy</i>, and sent to child processes as-is. <tt>wthttp</tt> now correctly disregards it when not received from a reverse proxy. The header was also renamed to <tt>X-Wt-Ssl-Client-Certificates</tt> to clarify that it is a non-standard internal Wt header.</li>
<li>When using dedicated session processes with wthttp, the parent process would trust <tt>X-Forwarded-Proto</tt> and <tt>X-Forwarded-Port</tt> even when Wt was not configured to be behind a reverse proxy. These are now discarded.</li>
</ul>
</li>
<li>
Fixed <a href="https://redmine.webtoolkit.eu/boards/2/topics/16551" target="_blank">an issue raised on the forum</a> causing <tt>WTreeView</tt> to not properly react to certain size changes.
</li>
<li>
Fixed <a href="https://redmine.webtoolkit.eu/issues/7291" target="_blank">issue #7291</a>: wtfcgi would not properly match default entry point
</li>
<li>
Fixed a few issues found by clang-analyzer:
<ul>
<li>
Fixed an issue in <a href="classWt_1_1WAnchor.html">WAnchor</a> that would cause <tt>image()</tt> to return <tt>nullptr</tt> if it was provided in the constructor.
</li>
<li>
Fixed <a href="classWt_1_1WCssDecorationStyle.html">WCssDecorationStyle</a> self-assignment
</li>
</ul>
</li>
<li>
Made tests succeed even if Wt is built with <tt>ENABLE_UNWIND=ON</tt>.
</li>
<li><a href="https://redmine.webtoolkit.eu/issues/7292" target="_blank">issue #7292</a>: <a href="classWt_1_1Auth_1_1OAuthService.html">OAuthService</a> now correctly uses <tt>refresh_token</tt> instead of <tt>refreshToken</tt></li>
<li><a href="classWt_1_1Http_1_1Client.html">Http::Client</a> fixes:
<ul>
<li>fixed <a href="https://redmine.webtoolkit.eu/issues/7272" target="_blank">issue #7272</a>: support <tt>@</tt> character in the path of a URL</li>
<li>fixed 204 No Content response code behavior (would hang before, waiting for content) (<a href="https://redmine.webtoolkit.eu/issues/7273" target="_blank">issue #7273</a>)</li>
</ul>
</li>
<li>More informative error and exception messages:
<ul>
<li><a href="classWt_1_1Dbo_1_1QueryModel.html"><tt>QueryModel</tt></a>'s "geometry inconsistent with database" exception now contains row and cache start and size information</li>
<li><tt>WebSession</tt>'s "not serving this" info message contains more context so it's less confusing</li>
</ul>
</li>
<li>Documentation fixes:
<ul>
<li>The release notes for Wt 3.3.8 incorrectly referred to <tt>allowed-hosts</tt>, while this property is actually named <tt>allowed-origins</tt></li>
<li>Updated <a href="classWt_1_1WLocale.html#a5b1961702289e8dc6f9e2c293f9f8aa5">WLocale::setTimeZone()</a> documentation</li>
</ul>
</ul>
<h2>Release 4.1.1 (September 9, 2019)</h2>
<p>
This release fixes the following issues:
</p>
<ul>
<li>Fixed horizontal scrolling stutter on mobile browsers in <tt>WTableView</tt></li>
<li>Fixed <a href="https://redmine.webtoolkit.eu/issues/7000" target="_blank">issue #7000</a>: possible out of bounds access in <tt>WTableView::itemWidget()</tt></li>
<li>Fixed <tt>valueChanged()</tt> documentation of <tt>WSpinBox</tt> and <tt>WDoubleSpinBox</tt></li>
<li>Fixed <a href="https://redmine.webtoolkit.eu/issues/7164" target="_blank">issue #7164</a>: Added missing <tt><stdexcept></tt> include to <tt>observing_ptr_impl.hpp</tt></li>
<li>Fixed <a href="https://redmine.webtoolkit.eu/issues/7167" target="_blank">issue #7167</a>: configure SSL context when using <tt>--https-listen</tt> too (not just when using <tt>--https-address</tt>/<tt>--https-port</tt></li>
<li>Fixed <a href="https://redmine.webtoolkit.eu/issues/7187" target="_blank">issue #7187</a>: contents of <tt>WTabWidget</tt> did not properly stretch in height</li>
<li>Fixed <a href="https://redmine.webtoolkit.eu/issues/7193" target="_blank">issue #7193</a>: compatibility with Pango 1.44: added harfbuzz include dir</li>
<li>Fixed <a href="https://redmine.webtoolkit.eu/issues/7195" target="_blank">issue #7195</a>: contents of <tt>WStackedWidget</tt> would not properly respond to window size change</li>
<li>Fixed <a href="https://redmine.webtoolkit.eu/issues/7206" target="_blank">issue #7206</a>: added mention in Wt 4.0.0 release notes that <tt>setObjectName()</tt> does not change a widget's <tt>id</tt> anymore. It is now in an extra attribute called <tt>data-object-name</tt>.</li>
</ul>
<h2>Release 4.1.0 (July 31, 2019)</h2>
<p>
This is the first release to change the versioning scheme to be more aligned with semantic versioning.
From now on, the last number is reserved for patches (i.e. important bug fixes), not extra features, as long as
those bug fixes don't require major changes. Patches will be released up until the next minor version bump.
</p>
<p>
From now on, a 4.1-release branch will track any bug fixes, while the master branch will become the next release (in this case 4.2.0)
</p>
<p>
We won't completely ban small API-breaking changes from the minor version, but we will as always avoid them as best as we can.
</p>
<p>
This also does <em>not</em> mean that Wt will now have a stable ABI. You will always have to recompile in order to do
a minor version upgrade of Wt. Wt has never had a stable ABI, and that isn't going to change.
</p>
<p>
Apart from that, this release features one new widget (<a href="classWt_1_1WLeafletMap.html">WLeafletMap</a>) and many little tweaks, features, and bug fixes.
</p>
<h3>Notable backwards-incompatible changes</h3>
<ul>
<li>Extensionless headers (e.g. <tt>#include <Wt/WApplication></tt> instead of <tt>#include <Wt/WApplication.h></tt>) have
been deprecated since Wt 4.0.0. These headers were now removed. Use the script <tt>migrate/wt4_add_h_to_includes.py</tt> if you
want to automate the rewriting of extensionless headers.</li>
<li>When using the GraphicsMagick implementation of <a href="classWt_1_1WRasterImage.html">WRasterImage</a>, the rendering to
raster image is now done in <a href="classWt_1_1WPaintDevice.html#a75827be2076716985533dbc75dfdc512">done()</a> instead of <a href="classWt_1_1WResource.html#a3a740f8cc29e2e6e4e58defc9c88b8b6">handleRequest()</a>.
You were always supposed to destroy your instance of <a href="classWt_1_1WPainter.html">WPainter</a>, or call <a href="classWt_1_1WPainter.html#a50beb0c8cb77c12e2dee807e4fe4bcb4">WPainter::end()</a>
before e.g. using <a href="classWt_1_1WResource.html#ad8bbe65a888cc43e0d356f18509b9a0f">write()</a>, but Wt used to be rather forgiving—it would just work.
If you are getting empty images after updating, this would likely be the reason.
</li>
<li>
<a href="classWt_1_1WApplication_1_1UpdateLock.html#a09011389bb0b9319acbcd32800852918">WApplication::UpdateLock::operator bool()</a> and
<a href="classWt_1_1Core_1_1observing__ptr.html#a93ae9f0dd2a1553dc081faad7e1078ee">observing_ptr::operator bool()</a> were made <tt>explicit</tt>,
so they will no longer implicitly convert to <tt>bool</tt>, only
<a href="https://en.cppreference.com/w/cpp/language/implicit_conversion#Contextual_conversions" target="_blank">contextually</a>.
This may cause some valid code to no longer compile, but it is more likely that it will actually uncover bugs.
</li>
<li>
The default z-index of <a href="classWt_1_1WPopupWidget.html">WPopupWidget</a> was changed to 1100 instead of 100, since 1000
is the highest z-index used by Leaflet. This is generally considered an implementation detail, but if you have written any custom
CSS that sets the z-index, then you may have to update this CSS.
</li>
</ul>
<h3>New widgets</h3>
<ul>
<li>
<a href="classWt_1_1WLeafletMap.html">WLeafletMap</a>: this is a wrapper around the <a href="https://leafletjs.com/" target="_blank">Leaflet</a>
JavaScript library. It has support for some basic features of Leaflet, and one special feature: the ability to add arbitrary
widgets (within reason) as markers to the map using <a href="classWt_1_1WLeafletMap_1_1WidgetMarker.html">WidgetMarker</a>.
</li>
</ul>
<h3>New examples</h3>
<ul>
<li>
Added a <a href="classWt_1_1WLeafletMap.html">WLeafletMap</a> example to the <a href="https://www.webtoolkit.eu/widgets/graphics-charts/leaflet-maps" target="_blank">widget gallery</a>
and in <tt>examples/leaflet</tt>.
</li>
<li>
Added an <a href="classWt_1_1Http_1_1Client.html">Http::Client</a> example in <tt>examples/http-client</tt>.
</li>
</ul>
<h3>CMake changes</h3>
<ul>
<li>
Wt now uses CMake's included FindOpenSSL, FindZLIB and FindPNG modules instead of its own.
</li>
<li>
<tt>WT_CPP17_ANY_IMPLEMENTATION</tt> is now set to <tt>any</tt> by default when <tt>CMAKE_CXX_STANDARD</tt> is set to
17 or higher, i.e. it defaults to <tt>std::any</tt>.
</li>
<li>
Removed the "vintage" method of finding Boost, because it has been obsolete for a long time already.
</li>
<li>
Fixed building with Boost 1.70 when using Boost's included package configuration files for CMake.
</li>
<li>
Made the <tt>wtwithqt</tt> example build with Qt 5 too, not just with Qt 4.
</li>
<li>
Made sure we can properly build <tt>wtdbomysql</tt> with a static MariaDB client library on Windows.
</li>
</ul>
<h3>Auth</h3>
<ul>
<li>
Added <a href="classWt_1_1Auth_1_1AuthService.html#aee229af97b12975d00e7448e486f9cb2">AuthService::setAuthTokenUpdateEnabled()</a>. Previously, when using the
remember me functionality the auth token (remember me cookie) would be changed. When accessing the application from two tabs at the same time, however, or when
refreshing quickly, this could cause the session to be logged out: the auth token has changed, but the client still uses the old one. This is still the default
behavior, but you can disable it by using <tt>setAuthTokenUpdateEnabled(false)</tt>.
</li>
<li>
Fixed a use-after-free issue when <a href="classWt_1_1Auth_1_1Login.html#aafb1d791aeee8b59d28faeda88e8392b">Auth::Login::changed()</a> is connected to a slot that
removes the <a href="classWt_1_1Auth_1_1AuthWidget.html">AuthWidget</a>.
</li>
</ul>
<h3>Dbo</h3>
<ul>
<li>
Added <a href="classWt_1_1Dbo_1_1AbstractQuery.html">AbstractQuery</a>, an abstract base class of <a href="classWt_1_1Dbo_1_1Query.html">Query</a>,
to facilitate the dynamic generation of queries.
</li>
<li>
Added <a href="classWt_1_1Dbo_1_1Query.html#a3e76ffc9857381684303d46457399701">Query::join()</a>,
<a href="classWt_1_1Dbo_1_1Query.html#aeee3f10d74361e49cce4dc049f0bdc0b">Query::leftJoin()</a>,
and <a href="classWt_1_1Dbo_1_1Query.html#a1dd4a3461a4d99377dee24227325c63c">Query::rightJoin()</a>.
</li>
<li>
Added support for <tt>std::optional</tt> when using C++ ≥ 17.
</li>
<li>
<tt>std::chrono::time_point</tt> and <tt>std::chrono::duration</tt> were treated as nullable, while they should be non-nullable, since they have
no reasonable "null" value. Use <tt>std::optional</tt> or <tt>boost::optional</tt> to make them nullable instead.
</li>
<li>
Fixed a query corruption bug when using <tt>UNION</tt>, <tt>INTERSECT</tt>, or <tt>EXCEPT</tt> (<a href="https://redmine.webtoolkit.eu/issues/7028" target="_blank">issue #7028</a>).
</li>
<li>
Fixed a crash when using <tt>Session::dropTables()</tt> while there is an active transaction, <a href="https://redmine.webtoolkit.eu/boards/2/topics/16123" target="_blank">as reported on the forum</a>.
</li>
<li>
PostgreSQL uses <tt>?</tt> for some operators, but that is also the character we use for placeholders in prepared statements. If the literal <tt>?</tt> is meant instead of a placeholder, you can now use <tt>??</tt>. This is similar to how PostgreSQL's JDBC driver handles it.
</li>
</ul>
<h3>Miscellaneous features</h3>
<ul>
<li>
wthttp: <tt>--deploy-path</tt> is now prepended to <a href="classWt_1_1WServer.html#a84f84652ccb139850adcf5ea75f50fa5">entry points</a> and <a href="classWt_1_1WServer.html#a7b78b5e35d2dc3086faa54f82124cf38">static resources</a> when they don't start with a forward slash (<tt>/</tt>). Omitting the slash used to be an error.
</li>
<li>
<a href="classWt_1_1Chart_1_1WCartesian3DChart.html">WCartesian3DChart</a>: added <a href="classWt_1_1Chart_1_1WCartesian3DChart.html#ac097e1922b519592a6b3732f3e8b8119">setAxis()</a>, allowing custom <tt>WAxis</tt> implementations e.g. axes with <a href="classWt_1_1Chart_1_1WAxis.html#a7a6e079a7a0b136f77dad65b2c1abcc1">custom labels and ticks</a>.
</li>
<li>
Added <a href="classWt_1_1ItemDataRole.html#af593515a1cc8e972679cc00e362db4ce">ItemDataRole::MarkerType</a>, to change the <a href="group__charts.html#ga9f38f3460fb2575d5f4f1a1ac51a7db6">MarkerType</a> of individual data points on a <a href="classWt_1_1Chart_1_1WCartesianChart.html">2D chart</a>.
</li>
<li>
<a href="classWt_1_1Http_1_1Client.html">Http::Client</a>:
<ul>
<li>
added <a href="classWt_1_1Http_1_1Client.html#a28336ba9677e6e3cc6c890f490f2965a">HEAD request</a> support
</li>
<li>
On Windows: uses Windows root certificates. It is no longer necessary to provide a <a href="classWt_1_1Http_1_1Client.html#a7c9fbf7fc9f671519b0652f3bbe38521">path</a> with certificates for validation (or worse, disable verification altogether) when using TLS to talk to a server that uses a certificate issued by a CA that is trusted by Windows. Now the <tt>Http::Client</tt> will generally just work with <tt>https</tt> sites on Windows, just like it did on Linux. This also fixes other parts of Wt that use <tt>Http::Client</tt>, like <a href="classWt_1_1Payment_1_1PayPalService.html">PayPalService</a> and <a href="classWt_1_1Auth_1_1OAuthService.html">OAuthService</a>.
</li>
</ul>
</li>
<li>
<a href="classWt_1_1WWidget.html#a1f5151154770b4956b4870cb4ecc38d3">removeWidget()</a> and <a href="classWt_1_1WObject.html#a00f32a263b742f42b73a9353eaa3c7ca">removeChild()</a> now return a more concrete <tt>std::unique_ptr</tt>, for convenience. Also added a similar <a href="classWt_1_1WFitLayout.html#a071ea55ea16e71213b3bbd2f5f497932">WFitLayout::addWidget()</a>.
</li>
<li>
Wt's widget coordinate calculation code now uses <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect" target="_blank">getBoundingClientRect()</a>, which means that coordinate calculations are still accurate even when CSS transforms are used to position widgets. This was necessary for <a href="classWt_1_1WLeafletMap_1_1WidgetMarker.html">WidgetMarker</a> support.
</li>
<li>
<a href="classWt_1_1WTemplate.html">WTemplate</a>'s <a href="structWt_1_1WTemplate_1_1Functions.html#ab070ae026639fb7edc0c70db6510abc7">while_f</a> function now takes extra arguments, similar to the <a href="structWt_1_1WTemplate_1_1Functions.html#a734f46b7a8155cbc6cf0407dd3dbe85d">block</a> function.
</li>
<li>
Added <a href="classWt_1_1WResource.html#a6695dad28a25c7cbfef93c371e7c5a1e">WResource::setTakesUpdateLock()</a> as a way to make a (non-static) resource grab the <a href="classWt_1_1WApplication.html">WApplication</a>'s <a href="classWt_1_1WApplication_1_1UpdateLock.html">UpdateLock</a> before <a href="classWt_1_1WResource.html#a3a740f8cc29e2e6e4e58defc9c88b8b6">handleRequest()</a>.
</li>
<li>
Made it possible to set a <a href="classWt_1_1WTableView.html#afc65ef8675ae2d53300eaa511c1fad6b">preload margin</a> on <tt>WTableView</tt>. This
allows to customize how much of the table's contents should be loaded. Higher preload margin means fewer but larger updates of the table's contents
when scrolling.
</li>
</ul>
<h3>Miscellaneous bug fixes</h3>
<ul>
<li>Fixed an issue where JavaScript could be sent to the browser in the wrong order when doing background updates of hidden widgets
(<a href="https://redmine.webtoolkit.eu/issues/7023" target="_blank">issue #7023</a>)</li>
<li>Fixed a client side memory leak caused by misuse of jQuery's data feature (<a href="https://redmine.webtoolkit.eu/boards/2/topics/15941" target="_blank">reported on the forums</a>)</li>
<li><a href="classWt_1_1WTableView.html">WTableView</a>: fixed row deletion behavior</li>
<li>Fixed icons not showing up on tabs and menu items when using <a href="classWt_1_1WBootstrapTheme.html">WBootstrapTheme</a>, as <a href="https://redmine.webtoolkit.eu/boards/1/topics/15664" target="_blank">reported on the forums</a>.</li>
<li>Fixed wrong <a href="classWt_1_1WStackedWidget.html">WStackedWidget</a> height when animating transitions (<a href="https://redmine.webtoolkit.eu/issues/6788" target="_blank">issue #6788</a>)</li>
<li>Fixed not able to hide widgets with a flexbox-based layout (<a href="https://redmine.webtoolkit.eu/issues/6884" target="_blank">issue #6884</a>)</li>
<li>Fixed out of bounds array access when using a widget with a custom HTML tag name (<a href="https://redmine.webtoolkit.eu/issues/7059" target="_blank">issue #7059</a>). Widgets will now derive whether they are default inline based on the widget's default DOM element type.</li>
<li>Fixed a regression in <a href="classWt_1_1WDate.html#a6d604c9c4409729abbe4a334c4d69368">WDate::addMonths()</a> and <a href="classWt_1_1WDate.html#ab03f57a16749501343b8368047199002">addYears()</a>, introduced in Wt 4.0.0. When a day would not exist in the resulting month, this would yield an invalid month. Instead, it will now (as it did in Wt 3) set the date to the last day of that month, e.g. May 31, 2019 + 6 months becomes November 30, 2019.</li>
<li>Fixed an issue where mouse signals of a <a href="classWt_1_1WTreeView.html">WTreeView</a> would fire multiple times (<a href="https://redmine.webtoolkit.eu/issues/6260" target="_blank">issue #6260</a>)</li>
<li>
wthttp WebSocket fixes:
<ul>
<li>
WebSocket requests for non-existent sessions (often the result of restarting the server) no longer create a new bogus session.
</li>
<li>
WebSocket messages with continuation frames (as sent by Google Chrome when the messages become very large) could become corrupted,
especially when per-message-deflate is used (<a href="https://redmine.webtoolkit.eu/issues/7039" target="_blank">issue #7039</a>,
<a href="https://redmine.webtoolkit.eu/issues/7034" target="_blank">#7034</a>).
</li>
<li>
WebSocket message size is now properly limited by <tt>--max-memory-request-size</tt>. Previously, this would only limit the size
of individual frames, not the entire message.
</li>
<li>
Fixed a possible use-after-free or double delete issue when an invalid WebSocket message was received.
</li>
</ul>
</li>
<li>
Fixed undefined <tt>ackId</tt> overflow behavior (which could very rarely cause a session to fail)
</li>
<li>
<a href="classWt_1_1WContainerWidget.html#a60e57a8860785d6b587a36b616cb5e12">WContainerWidget::setLayout()</a> now properly clears any existing contents of the container.
This would previously cause JavaScript errors (<a href="https://redmine.webtoolkit.eu/issues/7128">issue #7128</a>).
</li>
</ul>
<h2>Release 4.0.5 (December 14, 2018)</h2>
<p>Wt 4.0.5 is almost entirely a bugfix release. Here are the key changes:</p>
<h3>Minor API breaking changes</h3>
<h4>ItemDataRole</h4>
<p>One of the things we changed in Wt 4 is the type of roles in the
<a href="group__modelview.html">MVC system</a>. They are no longer
represented by an enum, but now through a
<a href="classWt_1_1ItemDataRole.html">class that's a thin wrapper
around an int</a>. We however forgot to update the role's type in
a few places, and this release rectifies that. The following methods
have been updated:</p>
<ul>
<li><a href="classWt_1_1WIdentityProxyModel.html#acfa2c2b201f8919e462e1a2d498b75ab">WIdentityProxyModel::setHeaderData()</a></li>
<li><a href="classWt_1_1WSuggestionPopup.html#a0abf89a25ea7eece7d36391d56130cf7">WSuggestionPopup::setEditRole()</a></li>
<li><a href="classWt_1_1WSuggestionPopup.html#acba647adde23e76f2ce5446b60145aa0">WSuggestionPopup::editRole()</a></li>
</ul>
<h4>Wt::Auth::UpdatePasswordWidget</h4>
<p>The <a href="classWt_1_1Auth_1_1UpdatePasswordWidget.html">UpdatePasswordWidget</a>,
part of the authentication subsystem of Wt, would delete itself when done.
This was harmless when it was inside of a <a href="classWt_1_1WDialog.html">WDialog</a>, but it's less practical when
used elsewhere. We've changed the behavior of <tt>UpdatePasswordWidget</tt> to emit the
<a href="classWt_1_1Auth_1_1UpdatePasswordWidget.html#a6c6bedf0628488cbb09d44c6df441004">updated()</a> and
<a href="classWt_1_1Auth_1_1UpdatePasswordWidget.html#a640d20893579fcc2642ac62f0a550b6a">canceled()</a>
signals instead.</p>
<h3>Dbo: reentrant statement use</h3>
<p>For the longest time, the Dbo tutorial has mentioned that
“you need to be careful to not have two collections with the same statement busy at the same time”.
If you did attempt concurrent use of statements, an exception mentioned that
“Reentrant statement use is not yet implemented”. Starting from
Wt 4.0.5, you won't see that error anymore. Dbo will now
clone the prepared statement as needed.</p>
<h3>Flex layout fixes</h3>
One of Wt 4's niceties is the fact that the layout managers now rely less on JavaScript, but employ flexbox instead. This
did not work perfectly, though, so it was still possible to switch the implementation to the old JavaScript method if things
did not work correctly. We fixed many issues in the flex layout implementation, and now the widget gallery works
correctly using flexbox (pending an overhaul to make the widget gallery more responsive and more in line with the Wt homepage theme).
<h2>Release 4.0.4 (August 22, 2018)</h2>
<p>This release brings with it the usual bugfixes, but also some new features:</p>
<h3>WCartesianChart improvements</h3>
<h4>Multiple Y axis support</h4>
<p>In previous versions of Wt, it was already possible to have two separate Y axes. This release
allows for any amount of Y axes, and extends the interactive functionality to support multiple Y axes.</p>
<p>The following methods have been added:</p>
<dl>
<dt><a href="classWt_1_1Chart_1_1WCartesianChart.html"><tt>WCartesianChart</tt></a></dt>
<dd>
<ul>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#a44f9ac7c63b7ccf0be2cc925c8159094"><tt>std::vector<WAxis*> yAxes()</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#a457197f9f6a0215a260922a47dde9115"><tt>std::vector<const WAxis*> yAxes() const</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#a3b0038712fce477634c39cdc736c2388"><tt>WAxis& yAxis(int i)</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#ab301c3aed79917163a093ca102cc4563"><tt>const WAxis& yAxis(int i) const</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#aa9d7bbc307118d222aca64deb76b60d5"><tt>int yAxisCount() const</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#a0abfca1c61508d49f9c8b5e95e896b4b"><tt>int addYAxis(std::unique_ptr<WAxis> waxis)</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#a8e884bd514607231e025b1c06aed6b8e"><tt>std::unique_ptr<WAxis> removeYAxis(int yAxisId)</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#a34329c849eaa8761f730d027c9c47af9"><tt>void clearYAxes()</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#a191d840f367d27f66612b8e68009f888"><tt>WPointF mapFromDevice(const WPointF &point, int ordinateAxis) const</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#aad25e33c3a389c99ea63f606a30e2f65"><tt>WPointF mapToDevice(const Wt::cpp17::any &xValue, const Wt::cpp17::any &yValue, int yAxis, int xSegment = 0, int ySegment = 0) const</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#a9f31ca5174b6127e49ad92c9da481adc"><tt>void setCrosshairYAxis(int yAxis)</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#abdac8c6bf3f39c524054645f8b063383"><tt>int crosshairYAxis() const</tt></a></li>
</ul>
<b>Small breaking change</b>: note that the virtual method <a href="classWt_1_1Chart_1_1WCartesianChart.html#a1813b0cfd8692b5b5720b5b9e7fa807b"><tt>prepareAxes</tt></a> has been modified to take a <a href="classWt_1_1WPaintDevice.html"><tt>WPaintDevice*</tt></a> argument. If your code overrides this method, be sure to add this argument to your overridden version.
</dd>
<dt><a href="classWt_1_1Chart_1_1WDataSeries.html"><tt>WDataSeries</tt></a></dt>
<dd>
<ul>
<li><a href="classWt_1_1Chart_1_1WDataSeries.html#aafffe717e28c00afea645652a9b6a655"><tt>WDataSeries(int modelColumn, SeriesType seriesType, int yAxis)</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WDataSeries.html#ae3abca77e796e8d0c1b1e5830ef80866"><tt>void bindToYAxis(int yAxis)</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WDataSeries.html#a338558cb67b5114f7d9de07192a3c1a8"><tt>int yAxis() const</tt></a></li>
</ul>
</dd>
</dl>
<p>It's also possible to pan and zoom individual axes by scrolling on or dragging the axis itself, or by touch dragging and pinching.</p>
<h4>On-demand loading</h4>
<p>We've added on-demand loading functionality to <a href="classWt_1_1Chart_1_1WCartesianChart.html"><tt>WCartesianChart</tt></a>. Enable on-demand loading when you have a lot of data and/or need the ability to zoom in very far. This will make it so that only the data for the visible X range is loaded, and will improve performance of data series with large amounts data. This becomes especially useful in combination with the ability to set a maximum zoom range, so that you can't zoom all the way out to see all data.</p>
<p>The following methods have been added:</p>
<dl>
<dt><a href="classWt_1_1Chart_1_1WCartesianChart.html"><tt>WCartesianChart</tt></a></dt>
<dd>
<ul>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#a97f7f38a9f751b0b41d67f4546cc32f9"><tt>void setOnDemandLoadingEnabled(bool enabled)</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#a2380aeb17e103bae1f332fd4c56d6b2b"><tt>bool onDemandLoadingEnabled() const</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#a9072e157f556bd8eea1eef14426d4f29"><tt>void setLoadingBackground(const WBrush &brush)</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WCartesianChart.html#a3e33918e5cbee75d172ab820e71f69bc"><tt>const WBrush& loadingBackground() const</tt></a></li>
</ul>
</dd>
<dt><a href="classWt_1_1Chart_1_1WAxis.html"><tt>WAxis</tt></a></dt>
<dd>
<ul>
<li><a href="classWt_1_1Chart_1_1WAxis.html#ada743ccf44212cfb1f4a6fa83b79e581"><tt>void setMaximumZoomRange(double size)</tt></a></li>
<li><a href="classWt_1_1Chart_1_1WAxis.html#a10742d531e8141474ea707d3c4730386"><tt>double maximumZoomRange() const</tt></a></li>
</ul>
</dd>
</dl>
<p>Note that the data must be ordered on X axis value for this feature to work properly.</p>
<h3>Path parameters</h3>
<p>It's now possible to use variables in <a href="classWt_1_1WServer.html#a7b78b5e35d2dc3086faa54f82124cf38"><tt>WServer::addResource()</tt></a>, e.g. <tt>server.addResource(&resource, "/users/${user}")</tt>.</p>
<p>These parameters are then accessible in the <tt>WResource</tt>'s <tt>handleRequest()</tt> function through
<a href="classWt_1_1Http_1_1Request.html#af6917bd5182e9a33f74e3e7191899495"><tt>Http::Request::urlParams()</tt></a>
and <a href="classWt_1_1Http_1_1Request.html#a0100186e6bc33bd221e25799e2059f7d"><tt>Http::Request::urlParam(const std::string&)</tt></a>.</p>
<p>A feature example demonstrating this was added in <tt>examples/feature/urlparams</tt>.</p>
<h3>Idle timeout</h3>
<p>Added an <tt><idle-timeout></tt> option to the configuration (<tt>wt_config.xml</tt>). If set,
<a href="classWt_1_1WApplication.html#a4e8020fca24d09661ee4bf13400354d9"><tt>WApplication::idleTimeout()</a></tt> will be triggered after the configured number of seconds.</p>