-
Notifications
You must be signed in to change notification settings - Fork 32
/
TODO
274 lines (177 loc) · 8.99 KB
/
TODO
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
-*- indented-text -*-
IMPORTANT:
This file is probably out of date. Use bugzilla.gnome.org instead. See
the file `CONTRIBUTING' for instructions on reporting sawfish bugs.
--
TODO list for sawfish
*********************
Bugs are marked !, things that should be done soon are marked +,
and longer-term ideas are marked -
Outstanding bugs
================
! click-to-focus mode; cycle from a shade-hovered window to a normal
window, hideous flicker ensues
! pavel says that in click-to-focus mode windows may occasionally
become unfocusable (i.e. every couple of days or so)
[ I added some code with high kludge-quotient, but still need a
real solution ]
! uses a really kludgey method of getting command documentation.
In some cases it falls back to keying off the name associated with
the closure object.
! need better error handling in sawfish-config (e.g. values that don't
match widget types)
! workspace names don't change as workspaces are added/deleted
solution: use an alist mapping workspace ids to workspace names,
transform-window-workspaces also transforms the alist..?
! in xdvi with emulate3buttons, press and hold right, then press
left, the wm root menu appears?!
! `:type (or ...)' doesn't get serialized (and can't be) The
type-system for config items serializes and deserializes to/from
strings for types with no read syntax. The `:or' widget breaks
this scheme since there's no way to infer the type from the
object.
The workaround is to avoid declaring :or types whose components
have no read syntax..
! running multiple instances of the wm loses,
because they share the same ~/.sawfish/custom file
! keeping unshown windows unmapped isn't so great?
the ICCCM says that to go to Withdrawn state a window must send a
synthetic UnmapNotify, so this is not a problem. But it also says:
`NormalState - the client's top-level window is viewable'
one option is to set all hidden windows to IconicState. But this
would probably confuse the tasklist applet..
[ I have a patch to do this, and it totally breaks the workspace
handling of desk-guide and the tasklist ]
! anim-outline just guesses where windows will be iconified to, so it
usually gets it wrong
[ the new GNOME/KDE wm hints have support for this ]
! timestamp ordering code falls over with machines that vary their
clock rate..
! swapped-out window properties aren't saved with session
This also means that a window in different viewports in different
workspaces will get saved in the single swapped-in viewport.
! I bring up an exmh transient, and place it so it's totally enclosed
by the exmh parent window. I put my mouse in the middle of the
transient so it has focus (I'm using sloppy focus.) I then move to
a different desktop, and back. The transient window has focus still
(ie. I can type in it), but the frame is drawn in the unfocused
style.
! edge-flipping while interactively placing a window can leave
rubber-band traces [this is hard to fix..]
! if i press M-button1 (move-window-interactively) but not move the
window and _hold_ button1, it gets raised, but the window
decoration is not drawn, only if i move the window or release the
button
+ Window history problems
- Saved old histories can cause problems. See
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=114945&repeatmerged=yes
+ allow enter/leave-notify events to be suppressed?
(use this when switching workspaces, but focus must be preserved)
Window manager tasks
====================
! when drawing into frame parts manually, no way to set shape
! should save increment-relative dimensions (not pixel relative)
+ allow unused themes to be garbage-collected? (custom options?)
+ commands to forward buttons 4&5 (mouse wheel) to the focused
window. My first attempt at this doesn't work..
+ make command list hierarchical?
+ look into tear-off menus
need some way of notifying when dynamically generated menus have
changed
+ some hci ideas:
placement mode to favour some/any of:
- near other windows in the same group
theme that has visual cues (colours?) for group membership
+ look at kde khotkeys for ideas
+ Full support of ewmh
+ sound themes
+ drag-and-drop to configure window appearance?
this could depend on the theme, but it would be good to allow
dropping of colors (gradients?) and images for at least some themes
add a hook (frame-part-drop-hook?)
also allow theme files to be dropped on windows
+ add a (destroyed . FUN) attribute to display-message
also allow multiple messages to be displayed/managed
+ allow transparent backgrounds to frame parts
need to use overlays, solaris X server supports two types, what
about XFree?
+ add option to prevent workspace switching while cycling
+ in interactive placement, allow the window-pointer position to be
configurable
+ allow configuration of where move/resize display appears
allow relative to window, or relative to root, for both x and y
+ Handle multiple-screen displays
What are the issues? Multiple root windows, and..?
[ use `Xnest -scrns N' to simulate multi-heading ]
+ Icons (?)
Icons could be handled using a special frame/window type
- Rotated text
Allow text to be rendered at angles (in multiples of 90 degrees?).
This could be useful for the sides of windows
[ scp found a library for doing this with Xlib.. ]
- GTK theme
Is there any way that the gtk theme could support engine-based GTK
themes? Probably not without using a subprocess (since the engines
are written to GDK, not Xlib), this could get hairy..
Also, why do themes with bg_pixmap set use so much memory? Is it
just because the images are XPM's..?
re: engines, now that frame parts are proper objects, and thus
fg/bg specifiers may be functions, it should be possible to spawn a
GTK slave to do all redrawing (using the gtk_draw_foo functions)
have to be careful to avoid deadlocks though. Maybe avoid using
fifos for this reason, perhaps use SYSV shared memory segments and
semaphores?
[ I have a patch that does a first approximation of this, the
problem however is that GTK doesn't have enough drawing primitives
to cleanly handle all buttons etc.. ]
- Remove root menu?
The argument is that doing this removes the need for the wm to
select ButtonPress events on the root window (which is a point of
conflict with, for example, a desktop file manager)
The sole need for the wm to manage the root menus (as far as I can
see) is so that it can offer window management functions (such as
"interactively move the focused window" or whatever), but all
these things can be invoked through sawfish-client, i.e.
"sawfish-client -c move-window-interactively"
With a bit of work the dynamically generated menus (e.g. the window
and workspace submenus) could also be generated through the client
- CORBA interface
I have a prototype idl, but it needs rewriting. The idea is to
basically reimplement the new GNOME/KDE wm hints using CORBA,
perhaps with some other useful features
Use rep-orbit to provide the CORBA binding
- `wmlets'
allow applications to inject ``policy'' into the wm to affect their
windows. This could either be (sandboxed?) lisp code, or something
more declarative (but even then it could be lisp data)
obvious uses for this: focus policy, placement policy, appearance
(apps that must (?) theme themself could also control their frames
without losing the consistent feel provided by the wm), ...?
(didn't NeWS allow this kind of thing, must do research..)
- Doc todos
workspaces, viewports, window groups, alist frame patterns,
frame parts as objects, placement, focus modes, symbolic event
structures...
- While choosing the theme, only the default type can be
previewed. One workaround is to temporarily change the `default'
mapping. Another is to print sample 4 types of windows.
* highlight the current frame part somehow
* clicking/hovering on a frame part selects that definition
<- But frame parts are defined inside of an entire design.
* auto-update, either after each change, or from the idle-hook?
- User customization of frame parts
Possibly add an `(extra sexp)' field that is evaluated then added
to the end of the frame part definition. But this is a horrible
kludge..
configurator tasks
========
+ reversed dependences? i.e. `:depends (not foo)'
+ more widgets:
(table ("NAME" ...) (WIDGET ...)) [doable]
(directory-name),
+ maybe use CORBA for wm communication instead of client program? (or
perhaps support both somehow?)
+ do i18n on choices from `:type symbol' options
also, strings embedded in types, e.g. list titles
+ split theme menu by first letter, if many themes to show
+ textual search for options/commands