summaryrefslogtreecommitdiffstats
path: root/twin/wm-spec/x24.html
blob: 47b406d0bcdf5b4a199efed7ef3fc17021ac3a75 (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
<HTML
><HEAD
><TITLE
>Non-ICCCM features</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.72
"><LINK
REL="HOME"
HREF="index.html"><LINK
REL="PREVIOUS"
HREF="index.html"><LINK
REL="NEXT"
TITLE="Root Window Properties (+Related Messages)"
HREF="x107.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
></TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="index.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="x107.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="AEN24"
>2. Non-ICCCM features</A
></H1
><P
>There is a number of window management features or behaviours which are 
not specified in the ICCCM, but are commonly met in modern Window Managers and Desktop Environments.</P
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN27"
>2.1. Additional States</A
></H2
><P
>The ICCCM allows Window Managers to implement additional window states, which will 
appear to clients as substates of NormalState and IconicState.  Two 
commonly met examples are Maximized and Shaded.  A Window Manager may implement these
as proper substates of NormalState and IconicState, or it may treat them 
as independent flags, allowing e.g. a maximized window to be iconified
and to re-appear as maximized upon de-iconification.</P
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="AEN30"
>2.1.1. Maximization</A
></H3
><P
>Maximization is a very old feature of Window Managers.  There was even a ZoomedState
in early ICCCM drafts.  Maximizing a window should give it as much of the
screen area as possible (this may not be the full screen area, but only
a smaller 'workarea', since the Window Manager may have reserved certain areas for other 
windows).  A Window Manager is expected to remember the geometry of a maximized window 
and restore it upon de-maximization.  Modern Window Managers typically allow separate 
horizontal and vertical maximization.</P
><P
>With the introduction of the Xinerama extension in X11 R6.4, maximization
has become more involved.  Xinerama allows a screen to span multiple 
monitors in a freely configurable geometry.  In such a setting, maximizing 
a window would ideally not grow it to fill the whole screen, but only the 
monitor it is shown on.  There are of course borderline cases for windows 
crossing monitor boundaries, and 'real' maximization to the full screen may 
sometimes be useful.</P
></DIV
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="AEN34"
>2.1.2. Shading</A
></H3
><P
>Some Desktop Environments offer shading (also known as rollup) as an alternative to 
iconfication. A shaded window typically shows only the titlebar, the client 
window is hidden, thus shading is not useful for windows which are not 
decorated with a titlebar.</P
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN37"
>2.2. Modality</A
></H2
><P
>The Window Manager _TRANSIENT_FOR hint of the ICCCM allows clients to specify that a 
toplevel window may be closed before the client finishes.  A typical example 
of a transient window is a dialog.  Some dialogs can be open for a long time,  
while the user continues to work in the main window.  Other dialogs have to be 
closed before the user can continue to work in the main window.  This property 
is called modality.  While clients can implement modal windows in an ICCCM 
compliant way using the globally active input model, some Window Managers offer support 
for handling modality.</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="LARGEDESKS"
>2.3. Large Desktops</A
></H2
><P
>The Window Manager may offer to arrange the managed windows on a desktop that is 
larger than the root window. The screen functions as a viewport on this large 
desktop. Different policies regarding the positioning of the viewport on the 
desktop can be implemented:  The Window Manager may only allow to change the viewport 
position in increments of the screen size (paging) or it may allow arbitrary 
positions (scrolling).</P
><P
>To fulfill the ICCCM principle that clients should behave the same
regardless wether a Window Manager is running or not, Window Managers which 
implement large desktops must interpret all client-provided geometries with 
respect to the current viewport.</P
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="LARGEDESKSIMPL"
>2.3.1. Implementation note</A
></H3
><P
>There are two options for implementing a large desktop: The first is to 
keep the managed windows (or, if reparenting, their frames) as children
of the root window.  Moving the viewport is achieved by moving all managed
windows in the opposite direction.</P
><P
>The second alternative is to reparent all managed windows to a dedicated 
large window (somewhat inappropriately called a 'virtual root').  Moving 
the viewport is then achieved by moving the virtual root in the opposite 
direction.</P
><P
>Both alternatives are completely ICCCM compliant, although the second one 
may be somewhat problematic for clients trying to figure out the Window Manager decorations
around their toplevel windows and for clients trying to draw background 
images on the root window.</P
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN49"
>2.4. Sticky windows</A
></H2
><P
>A Window Manager which implements a large desktop typically offers a way for the user 
to make certain windows 'stick to the glass', i.e. these windows will stay 
at the same position on the screen when the viewport is moved.</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN52"
>2.5. Virtual Desktops</A
></H2
><P
>Most X servers have only a single screen.  The Window Manager may virtualize this 
resource and offer multiple so-called 'virtual desktops', of which only one 
can be shown on the screen at a time.  There is some variation among the 
features of virtual desktop implementations.  There may be a fixed number 
of desktops, or new ones may be created dynamically.  The size of the desktops 
may be fixed or variable.  If the desktops are larger than the root window, 
their viewports (see <A
HREF="x24.html#LARGEDESKS"
>Section 2.3</A
>) may be independent or forced to be at the same 
position.</P
><P
>A Window Manager which implements virtual desktops generally offers a way for the user
to move clients between desktops.  Clients may be allowed to occupy more than
one desktop simultaneously.</P
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="AEN57"
>2.5.1. Implementation note</A
></H3
><P
>There are at least two options for implementing virtual desktops.  
The first is to use multiple virtual roots (see <A
HREF="x24.html#LARGEDESKSIMPL"
>Section 2.3.1</A
>) and change the current 
desktop by manipulating the stacking order of the virtual roots.  This is 
completely ICCCM compliant, but has the issues outlined in <A
HREF="x24.html#LARGEDESKSIMPL"
>Section 2.3.1</A
></P
><P
>The second option is to keep all managed windows as children of the root 
window and unmap the frames of those which are not on the current
desktop. Unmapped windows should be placed in IconicState, according to 
the ICCCM. Windows which are actually iconified or minimized 
should have the _NET_WM_STATE_HIDDEN property set, to 
communicate to Pagers that the window should not be represented as 
"onscreen."</P
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN63"
>2.6. Pagers</A
></H2
><P
>A pager offers a different UI for window management tasks.  It shows a 
miniature view of the desktop(s) representing managed windows by small 
rectangles and allows the user to initiate various Window Manager actions by manipulating 
these representations.  Typically offered actions are activation (see <A
HREF="x24.html#ACTIVATION"
>Section 2.8</A
>), 
moving, restacking, iconification, maximization and closing.  On a large 
desktop, the pager may offer a way to move the viewport.  On virtual desktops, 
the pager may offer ways to move windows between desktops and to change the 
current desktop.</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN67"
>2.7. Taskbars</A
></H2
><P
>A taskbar offers another UI for window management tasks.  It typically 
represents client windows as a list of buttons labelled with the window
titles and possibly icons.  Pressing a button initiates a Window Manager action on the
represented window, typical actions being activation and iconification. 
In environments with a taskbar, icons are often considered inappropriate,
since the iconified windows are already represented in the taskbar.</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="ACTIVATION"
>2.8. Activation</A
></H2
><P
>In the X world, activating a window means to give it the input focus.
This may not be possible if the window is unmapped, because it is on a
different desktop.  Thus, activating a window may involve additional steps
like moving it to the current desktop (or changing to the desktop the window
is on), deiconifying it or raising it.</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN73"
>2.9. Animated iconification</A
></H2
><P
>Some Window Managers display some form of animation when (de-)iconifying a window.
This may be a line drawing connecting the corners of the window with
the corners of the icon or the window may be opaquely moved and resized 
on some trajectory joining the window location and the icon location.</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN76"
>2.10. Window-in-window MDI</A
></H2
><P
>Window-in-window MDI is a multiple document interface known from MS
Windows platforms. Programs employing it have a single top-level window
which contains a workspace which contains the subwindows for the open
documents. These subwindows are decorated with Window Manager frames and can be
manipulated within their parent window just like ordinary top-level
windows on the root window.</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN79"
>2.11. Layered stacking order</A
></H2
><P
>Some Window Managers keep the toplevel windows not in a single linear stack,
but subdivide the stack into several layers.  There is a lot of variation 
among the features of layered stacking order implementations. The number of
layers may or may not be fixed. The layer of a toplevel window may be explicit
and directly modifyable or derived from other properties of the window, e.g. 
the <SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>type</I
></SPAN
> of the window. The stacking order may or may not
be strict, i.e. not allow the user to raise or lower windows beyond their 
layer.</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN83"
>2.12. Scope of this spec</A
></H2
><P
>This spec tries to address the following issues:</P
><P
></P
><UL
><LI
><P
>Allow clients to influence their initial state with respect 
to maximization, shading, stickyness, desktop, stacking order.</P
></LI
><LI
><P
>Improve the Window Managers ability to vary window 
decorations and maintain the stacking order by allowing clients to hint the 
Window Manager about the type of their windows.</P
></LI
><LI
><P
>Enable pagers and taskbars to be implemented as separate 
clients and allow them to work with any compliant Window Manager.</P
></LI
></UL
><P
>This spec doesn't cover any of the following:</P
><P
></P
><UL
><LI
><P
>Other IPC mechanisms like ICE or Corba.</P
></LI
><LI
><P
>Window Manager configuration.</P
></LI
><LI
><P
>Window Manager documentation.</P
></LI
><LI
><P
>Clients appearing on a proper subset of desktops.</P
></LI
><LI
><P
>Window-in-window MDI.</P
></LI
></UL
><P
>The Window Manager is supposed to be in charge of window management 
policy, so that there is consistent behaviour on the user's screen no matter 
who wrote the clients.</P
><P
>The spec offers a lot of external control about Window Manager actions.  
This is intended mainly to allow pagers, taskbars and similar Window Manager 
UIs to be implemented as separate clients.  "Ordinary" clients shouldn't use 
these except maybe in response to a direct user request (i.e. setting a 
config option to start maximized or specifying a -desk n cmdline 
argument).</P
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x107.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Root Window Properties (+Related Messages)</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>