|author||Havoc Pennington <firstname.lastname@example.org>||2002-12-09 02:53:16 +0000|
|committer||Havoc Pennington <email@example.com>||2002-12-09 02:53:16 +0000|
2002-12-08 Havoc Pennington <firstname.lastname@example.org> * README: updates * src/window.c (MAX_RESIZES_PER_SECOND): change to 20 instead of 30, just as an experiment. (MOVE_THRESHOLD): change 15 to 20 (RESIZE_THRESHOLD): change 15 to 20 * src/util.c (ensure_logfile): kill this function when verbose mode is disabled.
Diffstat (limited to 'README')
1 files changed, 220 insertions, 58 deletions
@@ -13,13 +13,19 @@ You need GTK+ 2.0, ideally the latest in the 2.0.x series. For
multihead/Xinerama support to work, you need GTK+ 2.1.x or 2.2. For
startup notification to work you need libstartup-notification at
http://www.freedesktop.org/software/startup-notification/ or on the
-GNOME ftp site. You also need GConf 1.2 (though it would be easy to
-remove that dependency in a custom hacked metacity, if you wanted).
+GNOME ftp site. You also need GConf 1.2 (unless building a funky
+extra-small embedded metacity with --disable-gconf).
REPORTING BUGS AND SUBMITTING PATCHES
-Report new bugs on http://bugzilla.gnome.org.
+Report new bugs on http://bugzilla.gnome.org. Please check for
+duplicates, *especially* if you are reporting a feature request.
+Please do *not* add "me too!" or "yes I really want this!" comments to
+feature requests in bugzilla. Please read
+http://pobox.com/~hp/features.html prior to adding any kind of flame
+about missing features or misfeatures.
Feel free to send patches too; Metacity is relatively small and
simple, so if you find a bug or want to add a feature it should be
@@ -27,6 +33,39 @@ pretty easy. Send me mail, or put the patch in bugzilla.
See the HACKING file for some notes on hacking Metacity.
+Not that metacity is huge (<400K binary last I checked), but about
+half of that is in the preferences handling, in static strings that
+aren't essential, and in the theme engine.
+You can strip about 70K from the metacity binary by compiling with
+options such as:
+However the result is no good for desktop use, all prefs have to be
+hardcoded in the binary, for example. If you wanted to make a really
+small metacity, here's some additional stuff you might consider
+ - add --disable-themes, which would replace theme.c and theme-parser.c
+ with a hardcoded implementation of the interface in theme.h,
+ should save about 80K. This should be fairly easy.
+ - add --disable-gtk, which would implement the interface in ui.h
+ without using GTK. This one is easier than you think because the
+ main part of the window manager doesn't use GTK directly, but is
+ still fairly hard to do. You would probably have to give up some
+ of the features, such as window menus, as menus are pretty complex
+ to implement well. So time may be better spent adding a GTK
+ configure script feature to build GTK with only a small core set of
@@ -36,8 +75,22 @@ METACITY FEATURES
- Uses GTK+ 2.0 for drawing window frames. This means colors, fonts,
etc. come from GTK+ theme.
+ - Does not expose the concept of "window manager" to the user. Some
+ of the features in the GNOME control panel and other parts of the
+ desktop happen to be implemented in metacity, such as changing your
+ window border theme, or changing your window navigation shorcuts,
+ but the user doesn't need to know this.
+ - Includes only the window manager; does not try to be a desktop
+ environment. The pager, configuration, etc. are all separate and
+ modular. The "libwnck" library (which I also wrote) is available
+ for writing metacity extensions, pagers, and so on. (But libwnck
+ isn't metacity specific, or GNOME-dependent; it requires only GTK,
+ and should work with KWin, fvwm2, and other EWMH-compliant WMs.)
- Has a simple theme system and a couple of extra themes come with it.
- Change themes via gconf-editor or gconftool:
+ Change themes via gconf-editor or gconftool or GNOME themes control
gconftool-2 --type=string --set /apps/metacity/general/theme Crux
gconftool-2 --type=string --set /apps/metacity/general/theme Gorilla
gconftool-2 --type=string --set /apps/metacity/general/theme Atlanta
@@ -56,7 +109,7 @@ METACITY FEATURES
gconftool-2 --type=string --set /apps/metacity/general/focus_mode sloppy
gconftool-2 --type=string --set /apps/metacity/general/focus_mode click
- - Global keybinding defaults:
+ - Global keybinding defaults include:
Alt-Tab forward cycle window focus
Alt-Shift-Tab backward cycle focus
@@ -71,7 +124,10 @@ METACITY FEATURES
unst gconftool-2 --type=string --set /apps/metacity/global_keybindings/switch_to_workspace_1 '<Alt>F1'
- See metacity.schemas for available bindings.
+ Also try the GNOME keyboard shortcuts control panel, or
+ See metacity.schemas for all available bindings.
- Window keybindings:
@@ -88,8 +144,9 @@ METACITY FEATURES
Choose Resize from menu, and nothing happens yet, but
eventually I might implement something.
- Keybindings for things like maximize window, etc. can be bound,
- but don't exist by default. See metacity.schemas.
+ Keybindings for things like maximize window, vertical maximize,
+ etc. can be bound, but may not all exist by default. See
- Window mouse bindings:
@@ -104,6 +161,9 @@ METACITY FEATURES
If you click and drag the titlebar with button 1 it moves the
+ If you click anywhere on the frame with button 2 it lowers the
If you click anywhere on the frame with button 3 it shows the
@@ -125,9 +185,10 @@ METACITY FEATURES
for session-aware applications.
- Metacity implements much of the new window manager spec from
- freedesktop.org, and much of the ICCCM. But then there are
- parts of each that it doesn't implement, just because I haven't
+ (http://www.freedesktop.org/standards/wm-spec.html), and much of
+ the ICCCM. But then there are parts of each that it doesn't
+ implement, just because I haven't yet.
- Uses Pango to render text, so has cool i18n capabilities.
Supports UTF-8 window titles and such.
@@ -150,80 +211,69 @@ METACITY FEATURES
- does basic colormap handling
+ - and much more! well, maybe not a lot more.
METACITY BUGS, NON-FEATURES, AND CAVEATS
- - You need an EWMH-spec compliant pager/tasklist to be able
- to navigate graphically; this does NOT include GNOME 1.x,
- but should include GNOME 2 and KDE 3.
- - doesn't do WM_COLORMAPS from the ICCCM, may matter on some really
- old obscure hardware with some really obscure apps.
- - There are probably other ICCCM-compliance issues.
- - The first-fit algorithm for placement isn't very clever.
- - Should Metacity support flipping in right-to-left locales?
- I don't know what window managers look like in a right-to-left
- locale. I assume the window titles should be right-justified;
- should the window controls also be flipped?
+See bugzilla: http://bugzilla.gnome.org/query.cgi
Q: Will you add my feature?
-A: If it makes sense to turn on unconditionally,
- or is genuinely a harmless preference that I would not
- be embarrassed to put in a simple, uncluttered, user-friendly
- configuration dialog.
+A: If it makes sense to turn on unconditionally, or is genuinely a
+ harmless preference that I would not be embarrassed to put in a
+ simple, uncluttered, user-friendly configuration dialog.
If the only rationale for your feature is that other window
- managers have it, or that you are personally used to it, or something
- like that, then I will not be impressed. Metacity is firmly in the
- "choose good defaults" camp rather than the "offer 6 equally broken
- ways to do it, and let the user pick one" camp.
+ managers have it, or that you are personally used to it, or
+ something like that, then I will not be impressed. Metacity is
+ firmly in the "choose good defaults" camp rather than the "offer 6
+ equally broken ways to do it, and let the user pick one" camp.
This is part of a "no crackrock" policy, despite some exceptions
I'm mildly embarrassed about. For example, multiple workspaces
- probably constitute crackrock, they confuse most users
- and really are not that useful if you have a decent tasklist and
- so on. But I am too used to them to turn them off.
- Or alternatively iconification/tasklist is crack, and workspaces/pager
- are good. But having both is certainly a bit wrong.
- Sloppy focus is probably crackrock too.
+ probably constitute crackrock, they confuse most users and really
+ are not that useful if you have a decent tasklist and so on. But I
+ am too used to them to turn them off. Or alternatively
+ iconification/tasklist is crack, and workspaces/pager are good. But
+ having both is certainly a bit wrong. Sloppy focus is probably
+ crackrock too.
But don't think unlimited crack is OK just because I slipped up a
- little. No slippery slope here.
+ little. No slippery slope here.
Don't let this discourage patches and fixes - I love those. ;-)
- Just be prepared to hear the above objections if your patch
- adds some crack-ridden configuration option.
+ Just be prepared to hear the above objections if your patch adds
+ some crack-ridden configuration option.
Q: Will Metacity be part of GNOME?
-A: Many people are now asking for this, though it was not the original
- plan - Metacity started out as sort of an experiment.
- A decision hasn't really been made but the issue will probably
- be raised shortly after the GNOME 2 release.
+A: It is officially part of GNOME as of GNOME 2.2. Prior to that,
+ it was unofficially shipped as the default GNOME WM by several
+ OS vendors.
Q: Is Metacity a Red Hat project?
-A: Metacity is in no way funded, endorsed, or encouraged by Red Hat,
- Inc. - I'm guessing Red Hat would not consider "insufficient number
- of window managers for Linux" an urgent problem. Just a wild guess
+A: Metacity's original creation was in no way funded, endorsed, or
+ encouraged by Red Hat, Inc. - I'm guessing Red Hat would not
+ consider "insufficient number of window managers for Linux" an
+ urgent problem. Just a wild guess though.
+ Now that metacity is the default WM however, Red Hat supports some
+ bugfixing and other work.
Q: Why does Metacity remember the workspace/position of some apps
- but not others?
+ but not others across logout/login?
-A: Metacity only stores sizes/positions for apps that are session
- managed. As far as I can determine, there is no way to attempt
- to remember workspace/position for non-session-aware apps without
+A: Metacity only stores sizes/positions for apps that are session
+ managed. As far as I can determine, there is no way to attempt to
+ remember workspace/position for non-session-aware apps without
causing a lot of weird effects.
The reason is that you don't know which non-SM-aware apps were
@@ -276,6 +326,120 @@ A: I could conceivably be convinced to use viewports _instead_ of
features traditionally associated with either kind if those
features make sense.
+Q: Why is the panel always on top?
+A: Because it's a better user interface, and until we made this not
+ configurable a bunch of apps were not getting fixed (the app
+ authors were just saying "put your panel on the bottom" instead of
+ properly supporting fullscreen mode, and such).
+ rationales.txt has the bugzilla URL for some flamefesting on this,
+ if you want to go back and relive the glory.
+ Read these and the bugzilla stuff before asking/commenting:
+Q: Why is there no edge flipping?
+A: This one is also in rationales.txt. Because "ouija board" UI, where
+ you just move the mouse around and the computer guesses what you
+ mean, has a lot of issues. This includes mouse focus, shade-hover
+ mode, edge flipping, autoraise, etc. Metacity has mouse focus and
+ autoraise as a compromise, but these features are all confusing for
+ many users, and cause problems with accessibility, fitt's law, and
+ so on.
+ Read these and the bugzilla stuff before asking/commenting:
+Q: Why no wireframe move/resize?
+A: Also in rationales.txt. Because it has low usability, and is a pain
+ to implement, and there's no reason opaque move/resize should be a
+ problem on any setup that can run a modern desktop worth a darn to
+ begin with.
+ Read these and the bugzilla stuff before asking/commenting:
+Q: Why no XYZ?
+A: You are probably getting the idea by now - check rationales.txt,
+ query/search bugzilla, and read http://pobox.com/~hp/features.html
+ and http://pobox.com/~hp/free-software-ui.html
+ Then sit down and answer the question for yourself. Is the feature
+ good? What's the rationale for it? Answer "why" not just "why not."
+ yourself. How else can you solve the same problem? etc. If that
+ leads you to a strong opinion, then please, post the rationale for
+ discussion to an appropriate bugzilla bug, or to
+ Please don't just "me too!" on bugzilla bugs, please don't think
+ flames will get you anywhere, and please don't repeat rationale
+ that's already been offered.
+Q: Your dumb web pages you made me read talk about solving problems in
+ fundamental ways instead of adding preferences or workarounds.
+ What are some examples where metacity has done this?
+A: There are quite a few, though many opportunities remain. Sometimes
+ the real fix involves application changes. The metacity approach is
+ that it's OK to require apps to change, though there are also
+ plenty of workarounds in metacity for battles considered too hard
+ to fight.
+ Here are some examples:
+ - fullscreen mode was introduced to allow position constraints,
+ panel-on-top, and other such things to apply to normal windows
+ while still allowing video players etc. to "just work"
+ - "whether to include minimized windows in Alt+Tab" was solved
+ by putting minimized windows at the *end* of the tab order.
+ - Whether to pop up a feedback display during Alt+Tab was solved by
+ having both Alt+Tab and Alt+Esc
+ - Whether to have a "kill" feature was solved by automatically
+ detecting and offering to kill stuck apps. Better, metacity
+ actually does "kill -9" on the process, it doesn't just
+ disconnect the process from the X server. You'll appreciate this
+ if you ever did a "kill" on Netscape 4, and watched it keep
+ eating 100% CPU even though the X server had booted it.
+ - The workspaces vs. viewports mess was avoided by adding
+ directional navigation and such to workspaces, see discussion
+ earlier in this file.
+ - Instead of configurable placement algorithms, there's just one
+ that works fairly well most of the time.
+ - To avoid excess CPU use during opaque move/resize, we rate limit
+ the updates to the application window's size.
+ - Instead of configurable "show size of window while resizing,"
+ it's only shown for windows where it matters, such as terminals.
+ (Only use-case given for all windows is for web designers
+ choosing their web browser size, but there are web sites and
+ desktop backgrounds that do this for you.)
+ - Using startup notification, applications open on the workspace
+ where you launched them, not the active workspace when their
+ window is opened.
+ - and much more.
+Q: I think metacity sucks.
+A: Feel free to use any WM you like. The reason metacity follows the
+ ICCCM and EWMH specifications is that it makes metacity a modular,
+ interchangeable part in the desktop. libwnck-based apps such as the
+ GNOME window list will work just fine with any EWMH-compliant WM.
Q: Did you spend a lot of time on this?
A: Originally the answer was no. Sadly the answer is now yes.
@@ -284,5 +448,3 @@ Q: How can you claim that you are anti-crack, while still
writing a window manager?
A: I have no comment on that.