Diffstat (limited to 'HACKING')
1 files changed, 48 insertions, 0 deletions
diff --git a/HACKING b/HACKING
new file mode 100644
@@ -0,0 +1,48 @@
+The script src/run-metacity.sh is useful to hack on the window manager.
+It runs metacity in an Xnest. e.g.:
+ CLIENTS=3 ./run-metacity.sh
+ DEBUG=memprof ./run-metacity.sh
+src/window.c is where all the guts of the window manager live. This is
+basically the only remotely scary file.
+src/frames.c is the GtkWidget that handles drawing window frames.
+src/core.h defines the interface used by the GTK portion of the window
+manager to talk to the other portions. There's some cruft in here
+that's unused, since nearly all window operations have moved out of
+this file so frameless apps can have window operations.
+src/ui.h defines the interface the plain Xlib portion of the window
+manager uses to talk to the GTK portion.
+Files that include gdk.h or gtk.h are not supposed to include
+display.h or window.h or other core files.
+Files in the core (display.[hc], window.[hc]) are not supposed to
+include gdk.h or gtk.h.
+When hacking, remember that you can have multiple screens. The code is
+also written to support multiple displays, but this is useless, since
+you can just run two copies of the WM. Also, an XKillClient() or
+shutdown on any display causes Xlib to exit the app, so it would be
+broken. So the multi-display thing is mostly just for code
+cleanliness. Multi-screen on the other hand is important for some
+Remember that strings stored in X properties are not in UTF-8, and
+they have to end up in UTF-8 before we try putting them through Pango.
+If you make any X request involving a client window, you have to
+meta_error_trap_push() around the call; this is not necessary for
+X requests on the frame windows.
+Remember that not all windows have frames, and window->frame can
+The code could use cleanup in a lot of places, feel free to do so.