55 |
55 |
56 <a id="Definitions"></a> |
56 <a id="Definitions"></a> |
57 <h2>Definitions</h2> |
57 <h2>Definitions</h2> |
58 |
58 |
59 <p> |
59 <p> |
60 <u>Document</u> - a window without an owner that, together with |
60 Document - a window without an owner that, together with |
61 all its child hierarchy, may be operated on as a single self-contained |
61 all its child hierarchy, may be operated on as a single self-contained |
62 document. |
62 document. |
63 Every window belongs to some document — its root can be found as |
63 Every window belongs to some document — its root can be found as |
64 the closest ancestor window without an owner. |
64 the closest ancestor window without an owner. |
65 </p><p> |
65 </p><p> |
66 <a id="ModalBlocked"></a> |
66 <a id="ModalBlocked"></a> |
67 <u>Modal blocked window</u> - a window, that: |
67 Modal blocked window - a window, that: |
68 </p><ul> |
68 </p><ul> |
69 <li>doesn't receive any user input events |
69 <li>doesn't receive any user input events |
70 </li><li>doesn't receive input focus |
70 </li><li>doesn't receive input focus |
71 </li><li>keeps its Z-order below the modal dialog that blocks it |
71 </li><li>keeps its Z-order below the modal dialog that blocks it |
72 </li></ul> |
72 </li></ul> |
76 Z-order in an arbitrary way — in that case the last requirement |
76 Z-order in an arbitrary way — in that case the last requirement |
77 may not be met. |
77 may not be met. |
78 <hr> |
78 <hr> |
79 </blockquote> |
79 </blockquote> |
80 <p> |
80 <p> |
81 <u>Modal dialog</u> - a dialog that blocks some windows while it is |
81 Modal dialog - a dialog that blocks some windows while it is |
82 visible. The blocked windows are determined according to the dialog's |
82 visible. The blocked windows are determined according to the dialog's |
83 scope of blocking. |
83 scope of blocking. |
84 </p><p> |
84 </p><p> |
85 <u>Modal excluded window</u> - a window that stays unblocked |
85 Modal excluded window - a window that stays unblocked |
86 while the modal dialog is visible. If a window is modal excluded |
86 while the modal dialog is visible. If a window is modal excluded |
87 then all its owned windows and child components are also excluded. |
87 then all its owned windows and child components are also excluded. |
88 </p><p> |
88 </p><p> |
89 <u>Scope of blocking (SB)</u> - the set of windows (instances of |
89 Scope of blocking (SB) - the set of windows (instances of |
90 <code>java.awt.Window</code> and all derived classes) that are blocked by |
90 <code>java.awt.Window</code> and all derived classes) that are blocked by |
91 the modal dialog while it is visible. |
91 the modal dialog while it is visible. |
92 <blockquote><hr> |
92 <blockquote><hr> |
93 <b>Note</b>: Everywhere in this document the notion of "window" is equal |
93 <b>Note</b>: Everywhere in this document the notion of "window" is equal |
94 to a top-level window in the Java programming language — in other words |
94 to a top-level window in the Java programming language — in other words |
107 </li><li>modeless |
107 </li><li>modeless |
108 </li></ul> |
108 </li></ul> |
109 A dialog is, by default, modeless. A modal dialog is, by default, |
109 A dialog is, by default, modeless. A modal dialog is, by default, |
110 application-modal. |
110 application-modal. |
111 <ol> |
111 <ol> |
112 <li><u>Modeless dialogs</u><br> |
112 <li>Modeless dialogs<br> |
113 A modeless dialog doesn't block any windows while visible. |
113 A modeless dialog doesn't block any windows while visible. |
114 </li><li><u>Document-modal dialogs</u><br> |
114 </li><li>Document-modal dialogs<br> |
115 A document-modal dialog blocks all windows from the same |
115 A document-modal dialog blocks all windows from the same |
116 document except those from its child hierarchy. The document root |
116 document except those from its child hierarchy. The document root |
117 is determined as the closest ancestor window without an |
117 is determined as the closest ancestor window without an |
118 owner. |
118 owner. |
119 </li><li><u>Application-modal dialogs</u><br> |
119 </li><li>Application-modal dialogs<br> |
120 An application-modal dialog blocks all windows from the same |
120 An application-modal dialog blocks all windows from the same |
121 application except for those from its child hierarchy. |
121 application except for those from its child hierarchy. |
122 If there are several applets launched in a browser, they can be |
122 If there are several applets launched in a browser, they can be |
123 treated either as separate applications or a single application. |
123 treated either as separate applications or a single application. |
124 This behavior is implementation-dependent. |
124 This behavior is implementation-dependent. |
125 </li><li><u>Toolkit-modal dialogs</u><br> |
125 </li><li>Toolkit-modal dialogs<br> |
126 A toolkit-modal dialog blocks all windows that run in the same |
126 A toolkit-modal dialog blocks all windows that run in the same |
127 toolkit except those from its child hierarchy. If there |
127 toolkit except those from its child hierarchy. If there |
128 are several applets launched all of them run with the same toolkit, |
128 are several applets launched all of them run with the same toolkit, |
129 so a toolkit-modal dialog shown from an applet may affect other |
129 so a toolkit-modal dialog shown from an applet may affect other |
130 applets and all windows of the browser instance which embeds the |
130 applets and all windows of the browser instance which embeds the |
161 |
161 |
162 <a id="ShowHideBlocking"></a> |
162 <a id="ShowHideBlocking"></a> |
163 <h2>Show/hide blocking</h2> |
163 <h2>Show/hide blocking</h2> |
164 |
164 |
165 <p> |
165 <p> |
166 <u>Showing the window or modeless dialog: "F"</u><br> |
166 Showing the window or modeless dialog: "F"<br> |
167 All the visible modal dialogs are looked through — if F is from the SB |
167 All the visible modal dialogs are looked through — if F is from the SB |
168 of one of them, it becomes blocked by it. If there are several such |
168 of one of them, it becomes blocked by it. If there are several such |
169 dialogs, the first shown is used. If no such dialogs exist, F remains |
169 dialogs, the first shown is used. If no such dialogs exist, F remains |
170 unblocked. |
170 unblocked. |
171 </p><p> |
171 </p><p> |
172 <u>Showing the modal dialog: "M"</u><br> |
172 Showing the modal dialog: "M"<br> |
173 When modal dialog M is shown, all the visible windows fall into one of |
173 When modal dialog M is shown, all the visible windows fall into one of |
174 three distinct groups: |
174 three distinct groups: |
175 <ul> |
175 <ul> |
176 <li>Blockers of M (modal dialogs that block M and |
176 <li>Blockers of M (modal dialogs that block M and |
177 either are in M's child hierarchy, or are not blocked by M, or have |
177 either are in M's child hierarchy, or are not blocked by M, or have |
186 After the modal dialog M is shown, it becomes blocked by the first shown |
186 After the modal dialog M is shown, it becomes blocked by the first shown |
187 dialog from the first group (if there are any), all the windows from the |
187 dialog from the first group (if there are any), all the windows from the |
188 second one become blocked by M, and all the windows from the third group |
188 second one become blocked by M, and all the windows from the third group |
189 remain untouched. |
189 remain untouched. |
190 </p><p> |
190 </p><p> |
191 <u>In typical cases</u>, when no child dialogs are shown before their owners, |
191 In typical cases, when no child dialogs are shown before their owners, |
192 this rule can be simplified. (The following, simplified case, may |
192 this rule can be simplified. (The following, simplified case, may |
193 leave out some details). |
193 leave out some details). |
194 </p><p> |
194 </p><p> |
195 <u>Showing the document-modal dialog: "M"</u><br> |
195 Showing the document-modal dialog: "M"<br> |
196 All the visible application- and toolkit-modal dialogs are looked |
196 All the visible application- and toolkit-modal dialogs are looked |
197 through — if M is from the SB of one of them, |
197 through — if M is from the SB of one of them, |
198 it becomes blocked by it. If there are several such dialogs, |
198 it becomes blocked by it. If there are several such dialogs, |
199 the first shown is used. If no such dialogs exist, M remains unblocked. |
199 the first shown is used. If no such dialogs exist, M remains unblocked. |
200 </p><p> |
200 </p><p> |
201 <u>Showing the application-modal dialog: "M"</u><br> |
201 Showing the application-modal dialog: "M"<br> |
202 All the visible toolkit-modal dialogs are looked through — |
202 All the visible toolkit-modal dialogs are looked through — |
203 if M is from the SB of one of them, it becomes blocked by it. |
203 if M is from the SB of one of them, it becomes blocked by it. |
204 If there are several such dialogs, the first shown is used. |
204 If there are several such dialogs, the first shown is used. |
205 If no such dialogs exist, M remains unblocked. |
205 If no such dialogs exist, M remains unblocked. |
206 </p><p> |
206 </p><p> |
207 <u>Showing the toolkit-modal dialog: "M"</u><br> |
207 Showing the toolkit-modal dialog: "M"<br> |
208 M remains unblocked. |
208 M remains unblocked. |
209 |
209 |
210 <table border="1"> |
210 <table border="1"> |
211 <caption>The Standard Blocking Matrix</caption> |
211 <caption>The Standard Blocking Matrix</caption> |
212 <tbody><tr> |
212 <tbody><tr> |
213 <td>current/shown</td> |
213 <th scope="col">current/shown</th> |
214 <td>frame & modeless</td> |
214 <th scope="col">frame & modeless</th> |
215 <td>document</td> |
215 <th scope="col">document</th> |
216 <td>application</td> |
216 <th scope="col">application</th> |
217 <td>toolkit</td> |
217 <th scope="col">toolkit</th> |
218 </tr> |
218 </tr> |
219 <tr> |
219 <tr> |
220 <td>-</td> |
220 <th scope="row">-</th> |
221 <td>-</td> |
221 <td>-</td> |
222 <td>-</td> |
222 <td>-</td> |
223 <td>-</td> |
223 <td>-</td> |
224 <td>-</td> |
224 <td>-</td> |
225 </tr> |
225 </tr> |
226 <tr> |
226 <tr> |
227 <td>document</td> |
227 <th scope="row">document</th> |
228 <td>blocked</td> |
228 <td>blocked</td> |
229 <td>-</td> |
229 <td>-</td> |
230 <td>-</td> |
230 <td>-</td> |
231 <td>-</td> |
231 <td>-</td> |
232 </tr> |
232 </tr> |
233 <tr> |
233 <tr> |
234 <td>application</td> |
234 <th scope="row">application</th> |
235 <td>blocked</td> |
235 <td>blocked</td> |
236 <td>blocked</td> |
236 <td>blocked</td> |
237 <td>-</td> |
237 <td>-</td> |
238 <td>-</td> |
238 <td>-</td> |
239 </tr> |
239 </tr> |
240 <tr> |
240 <tr> |
241 <td>toolkit</td> |
241 <th scope="row">toolkit</th> |
242 <td>blocked</td> |
242 <td>blocked</td> |
243 <td>blocked</td> |
243 <td>blocked</td> |
244 <td>blocked</td> |
244 <td>blocked</td> |
245 <td>-</td> |
245 <td>-</td> |
246 </tr> |
246 </tr> |
248 </table> |
248 </table> |
249 <p> |
249 <p> |
250 After the modal dialog is shown, all the windows from its SB are blocked, |
250 After the modal dialog is shown, all the windows from its SB are blocked, |
251 except those that block this modal dialog. |
251 except those that block this modal dialog. |
252 </p><p> |
252 </p><p> |
253 <u>Hiding the window or modeless dialog: "F"</u><br> |
253 Hiding the window or modeless dialog: "F"<br> |
254 If F was blocked by any modal dialog M, it becomes unblocked and is |
254 If F was blocked by any modal dialog M, it becomes unblocked and is |
255 removed from M's blocked windows list. |
255 removed from M's blocked windows list. |
256 </p><p> |
256 </p><p> |
257 <u>Hiding the modal dialog: "M"</u><br> |
257 Hiding the modal dialog: "M"<br> |
258 If M was blocked by any other modal dialog, for example, "N", |
258 If M was blocked by any other modal dialog, for example, "N", |
259 it becomes unblocked and |
259 it becomes unblocked and |
260 is removed from N's blocked windows list. Then, all the windows and dialogs |
260 is removed from N's blocked windows list. Then, all the windows and dialogs |
261 blocked by M become unblocked, and after that the same checks |
261 blocked by M become unblocked, and after that the same checks |
262 (as in Showing the modal dialog: "M") |
262 (as in Showing the modal dialog: "M") |
271 <li>Exclusion from blocking of toolkit-modal dialogs |
271 <li>Exclusion from blocking of toolkit-modal dialogs |
272 </li><li>Exclusion from blocking of application-modal dialogs |
272 </li><li>Exclusion from blocking of application-modal dialogs |
273 </li></ul> |
273 </li></ul> |
274 By default, a window's modal exclusion property is turned off. |
274 By default, a window's modal exclusion property is turned off. |
275 <ol> |
275 <ol> |
276 <li><u>Application-modal exclusion</u><br> |
276 <li>Application-modal exclusion<br> |
277 If a window is application-modal excluded, it is not blocked by any |
277 If a window is application-modal excluded, it is not blocked by any |
278 application-modal dialogs. Also, it is not blocked by document-modal |
278 application-modal dialogs. Also, it is not blocked by document-modal |
279 dialogs from outside of its child hierarchy. |
279 dialogs from outside of its child hierarchy. |
280 </li><li><u>Toolkit-modal exclusion</u><br> |
280 </li><li>Toolkit-modal exclusion<br> |
281 If a window is toolkit-modal excluded, it is not blocked |
281 If a window is toolkit-modal excluded, it is not blocked |
282 by any application- or toolkit-modal dialogs. Also, it is not |
282 by any application- or toolkit-modal dialogs. Also, it is not |
283 blocked by document-modal dialogs from outside of their child hierarchy. |
283 blocked by document-modal dialogs from outside of their child hierarchy. |
284 </li></ol> |
284 </li></ol> |
285 <blockquote> |
285 <blockquote> |
286 <hr> |
286 <hr> |
287 <b>Implementation note</b>: Changing the modal exclusion type for a visible window |
287 <b>Implementation note</b>: Changing the modal exclusion type for a visible window |
288 may have no effect until it is hidden and then shown again. |
288 may have no effect until it is hidden and then shown again.<hr> |
289 </blockquote> |
289 </blockquote> |
290 |
290 |
291 <a id="Related"></a> |
291 <a id="Related"></a> |
292 <h2>Related AWT features</h2> |
292 <h2>Related AWT features</h2> |
293 |
293 |
294 <p> |
294 <p> |
295 <u>Always-On-Top</u><br> |
295 Always-On-Top<br> |
296 When a modal dialog that is not always-on-top blocks an always-on-top window, |
296 When a modal dialog that is not always-on-top blocks an always-on-top window, |
297 their relative Z-order is unspecified and platform-dependent. |
297 their relative Z-order is unspecified and platform-dependent. |
298 </p> |
298 </p> |
299 <p> |
299 <p> |
300 <u>The <code>toFront()</code> and <code>toBack()</code> methods</u><br> |
300 The <code>toFront()</code> and <code>toBack()</code> methods<br> |
301 A modal dialog should always be above all its blocked windows. Thus, if a blocked |
301 A modal dialog should always be above all its blocked windows. Thus, if a blocked |
302 window is brought to the front, its blocking dialog, if any, is also brought to the |
302 window is brought to the front, its blocking dialog, if any, is also brought to the |
303 front and remains above the blocked window. Likewise, if a modal dialog is sent to |
303 front and remains above the blocked window. Likewise, if a modal dialog is sent to |
304 the back, all of its blocked windows are sent to the back to keep them below the |
304 the back, all of its blocked windows are sent to the back to keep them below the |
305 blocking dialog. |
305 blocking dialog. |
306 </p> |
306 </p> |
307 <p> |
307 <p> |
308 <u>Minimizing, maximizing and closing blocked windows</u><br> |
308 Minimizing, maximizing and closing blocked windows<br> |
309 When a modal dialog blocks a window, the user may not be able to maximize or |
309 When a modal dialog blocks a window, the user may not be able to maximize or |
310 minimize the blocked window— however, the actual behavior is unspecified |
310 minimize the blocked window— however, the actual behavior is unspecified |
311 and platform-dependent. In any case, the user can't close the blocked window |
311 and platform-dependent. In any case, the user can't close the blocked window |
312 interactively— but it can be closed programmatically by calling the |
312 interactively— but it can be closed programmatically by calling the |
313 <code>setVisible(false)</code> or <code>dispose()</code> methods on the blocked |
313 <code>setVisible(false)</code> or <code>dispose()</code> methods on the blocked |
314 window. |
314 window. |
315 </p> |
315 </p> |
316 <p> |
316 <p> |
317 <u>Blocked windows activations</u><br> |
317 Blocked windows activations<br> |
318 When the user selects a blocked window, it may be brought to the front, along |
318 When the user selects a blocked window, it may be brought to the front, along |
319 with the blocking modal dialog which would then become the active window— |
319 with the blocking modal dialog which would then become the active window— |
320 however, the actual behavior is unspecified and platform-dependent. |
320 however, the actual behavior is unspecified and platform-dependent. |
321 </p> |
321 </p> |
322 <p> |
322 <p> |
323 <u>Hiding a modal dialog</u><br> |
323 Hiding a modal dialog<br> |
324 When the modal dialog that currently has focus is hidden, it is unspecified |
324 When the modal dialog that currently has focus is hidden, it is unspecified |
325 and platform-dependent, which other window will become the active window. |
325 and platform-dependent, which other window will become the active window. |
326 Any of the following may become the active window: |
326 Any of the following may become the active window: |
327 <ol> |
327 <ol> |
328 <li>The owner of the modal dialog - if the owner is unblocked. |
328 <li>The owner of the modal dialog - if the owner is unblocked. |
376 applets and applications launched from Java Web Start. |
376 applets and applications launched from Java Web Start. |
377 |
377 |
378 <a id="Examples"></a> |
378 <a id="Examples"></a> |
379 </p><h2>Examples</h2> |
379 </p><h2>Examples</h2> |
380 |
380 |
381 <table border="0"> |
381 <h3>Example 1</h3> |
382 <tbody><tr> |
382 <ol style="float: left"> |
383 <td style="text-align:left" > |
383 <li>Frame F is shown<br> |
384 <ol> |
384 <li>Document-modal dialog D<sub>i</sub> is shown<br> |
385 <li>Frame "F" is shown<br> |
385 <li>F becomes blocked by D<sub>i</sub> — it's in the same document<br> |
386 <li>Document-modal dialog "D<sub>i</sub>" is shown<br> |
386 <li>Document-modal dialog D<sub>ii</sub> is shown<br> |
387 <li>F becomes blocked by D<sub>i</sub> — it's in the same document<br> |
387 <li>D<sub>i</sub> becomes blocked by D<sub>ii</sub> — it's in the |
388 <li>Document-modal dialog "D<sub>ii</sub>" is shown<br> |
388 same document<br> |
389 <li>D<sub>i</sub> becomes blocked by D<sub>ii</sub> — it's in the |
389 </ol> |
390 same document<br> |
390 <p style="float: left; margin-left: 1em"> |
391 </ol> |
391 <img src="modal-example1.gif" alt="Example 1"> |
392 <br> |
392 </p> |
393 </td> |
393 |
394 <td> |
394 <h3 style="clear: left">Example 2</h3> |
395 <img src="modal-example1.gif" alt="Example 1"> |
395 <ol style="float: left"> |
396 <br> |
396 <li>Frame F is shown<br> |
397 </td> |
397 <li>Document-modal dialog D<sub>i</sub> is shown<br> |
398 </tr> |
398 <li>F becomes blocked by D<sub>i</sub> — it's in the same document<br> |
399 <tr> |
399 <li>Document-modal dialog D<sub>ii</sub> is shown<br> |
400 <td style="text-align:left"> |
400 <li>D<sub>i</sub> becomes blocked by D<sub>ii</sub> — it's in the |
401 <ol> |
401 same document<br> |
402 <li>Frame "F" is shown<br> |
402 </ol> |
403 <li>Document-modal dialog "D<sub>i</sub>" is shown<br> |
403 <p style="float: left; margin-left: 1em"> |
404 <li>F becomes blocked by D<sub>i</sub> — it's in the same document<br> |
404 <img src="modal-example2.gif" alt="Example 2"> |
405 <li>Document-modal dialog "D<sub>ii</sub>" is shown<br> |
405 </p> |
406 <li>D<sub>i</sub> becomes blocked by D<sub>ii</sub> — |
406 |
407 it's in the same document<br> |
407 <h3 style="clear: left">Example 3</h3> |
408 <li>D<sub>i</sub> is hidden<br> |
408 <ol style="float: left"> |
409 <li>F becomes blocked by D<sub>ii</sub> — it's in the same document<br> |
409 <li>Frame F is shown<br> |
410 </ol> |
410 <li>Toolkit-modal dialog D<sub>i</sub> is created, but not shown<br> |
411 <br> |
411 <li>Document-modal dialog D<sub>ii</sub> is shown<br> |
412 </td> |
412 <li>F becomes blocked by D<sub>ii</sub> — it's in the same document<br> |
413 <td> |
413 <li>Application-modal dialog D<sub>iii</sub> is shown<br> |
414 <img src="modal-example2.gif" alt="Example 2"> |
414 <li>D<sub>ii</sub> becomes blocked by D<sub>iii</sub> — |
415 <br> |
415 it's in the same application<br> |
416 </td> |
416 <li>D<sub>i</sub> is shown<br> |
417 </tr> |
417 <li>D<sub>i</sub> becomes blocked by D<sub>ii</sub> — it's its owner<br> |
418 <tr> |
418 <li>D<sub>iii</sub> remains unblocked — it blocks D<sub>ii</sub> and |
419 <td style="text-align:left"> |
419 D<sub>ii</sub> blocks D<sub>i</sub><br> |
420 <ol> |
420 </ol> |
421 <li>Frame "F" is shown<br> |
421 <p style="float: left; margin-left: 1em"> |
422 <li>Toolkit-modal dialog "D<sub>i</sub>" is created, but not shown<br> |
422 <img src="modal-example3.gif" alt="Example 3"> |
423 <li>Document-modal dialog "D<sub>ii</sub>" is shown<br> |
423 </p> |
424 <li>F becomes blocked by D<sub>ii</sub> — it's in the same document<br> |
424 |
425 <li>Application-modal dialog "D<sub>iii</sub>" is shown<br> |
425 <h3 style="clear: left">Example 4</h3> |
426 <li>D<sub>ii</sub> becomes blocked by D<sub>iii</sub> — |
426 <ol style="float: left"> |
427 it's in the same application<br> |
427 <li>Frame F is shown<br> |
428 <li>D<sub>i</sub> is shown<br> |
428 <li>Toolkit-modal dialog D<sub>i</sub> is created, but not shown<br> |
429 <li>D<sub>i</sub> becomes blocked by D<sub>ii</sub> — it's its owner<br> |
429 <li>Document-modal dialog D<sub>ii</sub> is shown<br> |
430 <li>D<sub>iii</sub> remains unblocked — it blocks D<sub>ii</sub> and |
430 <li>F becomes blocked by D<sub>ii</sub> — it's in the same document<br> |
431 D<sub>ii</sub> blocks D<sub>i</sub><br> |
431 <li>Application-modal dialog D<sub>iii</sub> is shown<br> |
432 </ol> |
432 <li>D<sub>ii</sub> becomes blocked by D<sub>iii</sub> — it's in the |
433 <br> |
433 same application<br> |
434 </td> |
434 <li>D<sub>i</sub> is shown<br> |
435 <td> |
435 <li>D<sub>iii</sub> becomes blocked by D<sub>i</sub> — D<sub>i</sub> |
436 <img src="modal-example3.gif" alt="Example 3"> |
436 is not blocked<br> |
437 <br> |
437 <li>D<sub>i</sub> remains unblocked<br> |
438 </td> |
438 </ol> |
439 </tr> |
439 <p style="float: left; margin-left: 1em"> |
440 <tr> |
440 <img src="modal-example4.gif" alt="Example 4"> |
441 <td style="text-align:left"> |
441 </p> |
442 <ol> |
442 <br style="clear:both;"> |
443 <li>Frame "F" is shown<br> |
|
444 <li>Toolkit-modal dialog "D<sub>i</sub>" is created, but not shown<br> |
|
445 <li>Document-modal dialog "D<sub>ii</sub>" is shown<br> |
|
446 <li>F becomes blocked by D<sub>ii</sub> — it's in the same document<br> |
|
447 <li>Application-modal dialog "D<sub>iii</sub>" is shown<br> |
|
448 <li>D<sub>ii</sub> becomes blocked by D<sub>iii</sub> — it's in the |
|
449 same application<br> |
|
450 <li>D<sub>i</sub> is shown<br> |
|
451 <li>D<sub>iii</sub> becomes blocked by D<sub>i</sub> — D<sub>i</sub> |
|
452 is not blocked<br> |
|
453 <li>D<sub>i</sub> remains unblocked<br> |
|
454 </ol> |
|
455 <br> |
|
456 </td> |
|
457 <td> |
|
458 <img src="modal-example4.gif" alt="Example 4"> |
|
459 <br> |
|
460 </td> |
|
461 </tr> |
|
462 </tbody></table> |
|
463 </main> |
443 </main> |
464 </body></html> |
444 </body></html> |