summaryrefslogtreecommitdiff
path: root/TODO
blob: d7d5b0038eaa9b8d910801abdcfb85bd971f2c8c (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
-*- text -*-

* When hiding a window always set XCB_ICCCM_SIZE_HINT_US_POSITION so
  the window will be mapped where it was when it was unmapped.

* Feature: Handle several screens (DISPLAY=0.x) in classical X.

  This means we will have several root windows.

  setup = xcb_get_setup(conn);
  screens = xcb_setup_roots_length(setup);

  returns the number of screens available.

  We can walk over them with xcb_setup_roots_iterator(setup).

* Feature: Xinerama support. Needed when XRANDR above 1.1 not
  supported, for instance with Nvidia cards in Twinview configuration.

* Bug: Ignore other modifiers, such as NumLock and CapsLock.

* Use the new xcb-ewmh for the EWMH hints.

* Bug: We grab MODKEY all the time! We can grab it only when we start
  tabbing instead and release it when tabbing is complete.

* Key to move to previous and next workspace. David Jacobs has a patch
  for mod4+shift + I/O.

  https://gist.github.com/1478365

* Key to move windows to other workspaces, perhaps mod4+Shift + 0..9
  and mod4+shift + I/O.

* Full-screen windows that are resized from client requests should be
  kept full-screen.

* When moving windows between physical screens, try to place the
  window on roughly the same place on a new screen, if possible.

* When a window tries to map itself outside the physical screens,
  always map it to the screen closest to the coordinates it asked for
  instead of always mapping on the first screen in the list.

* Feature: We need to continue dragging for move and resize until
  *both* MODKEY and mouse button has been released. Will be much nicer
  with trackball.

* Move to first window (or middle of screen) on another screen
  with MODKEY + . and , instead of moving windows to new screen.
  Shifted these keys will move window to new screen?

* Handle new modes on physical outputs. What do we have to do?

* A separate workspace list for every physical output.

* Allow hexadecimal colour values on command line.

* Grab specific keys 

  Current code grabs modifier keys and any other keypress. We need to
  specifically grab the keycodes we need. xbindkeys and possibly other
  programs don't work.

  Partially done. Now grabs all our keys unshifted as well as shifted.

* Feedback window
  
  We may need to tell the user the new geometry somehow. Is this what
  I want?

  The feedback window can also show what workspace we just changed to.

  Can we cooperate with a stand-alone program? Write our status to a
  root hint or named pipe than can be picked up by another program?

* Virtual screens/workspaces

  Partially done. Still needed:

  - A window might be on one, *several* or all virtual screens. 

    We already have a way of fixing a window on all screens
    (MODKEY-f), but we need a way of saying "stick on this workspace".
    Perhaps something like MODKEY-a <n>, where <n> is 1--9 for virtual
    screens. Better ways? Note that this seems to be mildly
    incompatible with the EWMH _NET_WM_DESKTOP hint we're currently
    using: We will only be able to save one of the desktops used.

* Hide windows

  Instead of iconifying, hide them à la 9wm. Even if we use a key to
  hide them, this probably means we have to have a menu to get them
  back. Perhaps use an external program somehow? Needs to talk to mcwm
  anyway. Unix socket?

* Menu

  We might need a menu for hidden windows (see above). Since I'm
  probably implementing menu windows anyway, perhaps I should add a
  menu with basic window functions, like 9wm and twm. This way, one
  might use the window manager without keyboard, if necessary. Not
  much work if I have to do the menu anyway... But also chords?

* Chords

  Maybe have mouse button chords to do move and resize? Configurable
  if on or off?

  Idea from Christian Neukirchen.

* Snap to border and screen edge, which favours the edge.

* Gaps on borders for docks, status windows et cetera.

  Keep space reserved for Conky, dzen2 et cetera.
  
  Also respect EWMH hints _NET_WM_TYPE_DOCK and _NET_WM_TYPE_DESKTOP.

* Flag to disable that mcwm won't allow windows to move off the
  screen?

* Use xcb-event's event handlers?

* Configurable keys.

* Configuration file.

* Handle Urgency hint

  Some windows might need attention and marks this with an urgency
  hint (for instance, urxvt can generate such a hint when receiving
  the BEL character). Do we want to handle it? How do we tell the
  user? Can this be done with some stand-alone program instead?

* Support sensible portions of ICCCM and EWMH

  EWMH hints that tells applications about active workspace and
  focused window...

  And a few others.

* Code cleaning

  - Obivous cleanup: The event switch is way too big.

  - The states are known everywhere. A tight state machine would be
    nicer.

  - Dispatch table for key bindings instead of keysym->enum->case?

  - Use bitfields instead of extra lists for virtual screens?

* Resize behaviour

  Better resize behaviour. We want not to accidentally change the
  vertical size when changing horizontal size and vice versa.