From 9abae5b0a22cdd7d0b95bfeb3be526f483110983 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Thu, 25 Jul 2002 02:45:38 +0000 Subject: [PATCH] add Metabox theme from Garrett 2002-07-24 Havoc Pennington * src/themes/Makefile.am (THEMES): add Metabox theme from Garrett * README: updates 2002-07-21 Havoc Pennington * src/window.c (meta_window_new): don't automaximize fullscreen windows. 2002-07-14 Havoc Pennington * src/window.c (recalc_window_features): don't allow shading of border-only windows. --- ChangeLog | 16 + README | 57 +-- src/themes/Makefile.am | 3 +- src/themes/Metabox/metacity-theme-1.xml | 470 ++++++++++++++++++++++++ src/window.c | 5 +- 5 files changed, 497 insertions(+), 54 deletions(-) create mode 100644 src/themes/Metabox/metacity-theme-1.xml diff --git a/ChangeLog b/ChangeLog index 5ff84d2e5..d952607f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2002-07-24 Havoc Pennington + + * src/themes/Makefile.am (THEMES): add Metabox theme from Garrett + + * README: updates + +2002-07-21 Havoc Pennington + + * src/window.c (meta_window_new): don't automaximize fullscreen + windows. + +2002-07-14 Havoc Pennington + + * src/window.c (recalc_window_features): don't allow shading of + border-only windows. + 2002-07-24 Havoc Pennington * src/theme-parser.c (meta_theme_load): look for themes in diff --git a/README b/README index 25a969785..1ef8d2239 100644 --- a/README +++ b/README @@ -16,9 +16,9 @@ REPORTING BUGS AND SUBMITTING PATCHES Report new bugs on http://bugzilla.gnome.org. -Feel free to send patches too; Metacity is really small and simple, so -if you find a bug or want to add a feature it should be pretty easy. -Send me mail, or put the patch in bugzilla. +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 +pretty easy. Send me mail, or put the patch in bugzilla. See the HACKING file for some notes on hacking Metacity. @@ -57,7 +57,7 @@ METACITY FEATURES Alt-Shift-Tab backward cycle focus Alt-Ctrl-Tab forward cycle focus among panels Alt-Ctrl-Shift-Tab backward cycle focus among panels - Alt-Escape focus previous window + Alt-Escape cycle window focus without a popup thingy Ctrl-Alt-Left Arrow previous workspace Ctrl-Alt-Right Arrow next workspace Ctrl-Alt-D minimize/unminimize all, to show desktop @@ -156,56 +156,13 @@ METACITY BUGS, NON-FEATURES, AND CAVEATS - There are probably other ICCCM-compliance issues. - - Window placement is always cascade for now; I want to implement - "first fit, falling back to cascade if no fit." - (Configurable placement algorithms are stupid though, don't - send me patches for any bogus ones. Let's just pick a good one.) + - 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? - - Resize menu item doesn't do anything. It's intended to enter - resize-with-the-keyboard mode, similar to Move menu item. - - - In GNOME 1.x, if you switch from sawfish to metacity without - restarting X, the panel often ends up buried behind the Nautilus - desktop window. - - What happens is that the panel detects Sawfish has gone away, and - turns on override redirect mode because no GNOME-aware WM is - running (i.e. it goes into "ignore the window manager" mode). But - the panel doesn't notice that Metacity has appeared and is - (partially) GNOME-compliant. So Metacity doesn't see the override - redirect panel, and leaves it behind the Nautilus desktop. I'm not - sure whether Metacity or the panel is to blame for this. - - (To debug - use "xwininfo" on the panel, if override redirect is - "Yes" then Metacity won't have any awareness of a window and can't - properly stack it above the desktop. If override redirect is "No" - then Metacity can see the panel and handle it properly. Look at - xstuff.c:xstuff_is_compliant_wm() in the panel to get started on - how the panel deals with this.) - - - In GNOME 1.x, If you have "put panel below other windows" turned on - in panel Global Preferences, Miscellaneous tab, you need to change - this to "Put panel on top of other windows." That's because - Metacity uses semantic categories, not the legacy layer system in - the GNOME spec. It treats things in the legacy "dock" layer as - semantic type dock, but if you have the panel set to be in another - layer, Metacity will think it's a normal window. - - You can diagnose this problem because Metacity will put panels in - the wrong place, and Alt+rightclick will let you perform operations - like minimize/maximize, and Alt+leftclick will let you move the panel. - If Metacity has detected that the panel is a panel, then none of - this will be enabled. - - I put a patch in the CVS version of the panel to fix this by - setting the new non-legacy type hint, but a panel with that - patch hasn't been released yet. - FAQ === @@ -229,8 +186,7 @@ A: If it makes sense to turn on unconditionally, 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. Oh, and my Alt-1 thru Alt-6 - keybindings are definitely on crack. + 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. @@ -317,7 +273,6 @@ A: I could conceivably be convinced to use viewports _instead_ of Q: Did you spend a lot of time on this? A: Originally the answer was no. Sadly the answer is now yes. - Still, it's only 12,000 lines of code. Q: How can you claim that you are anti-crack, while still writing a window manager? diff --git a/src/themes/Makefile.am b/src/themes/Makefile.am index 2dcf3449d..f93493235 100644 --- a/src/themes/Makefile.am +++ b/src/themes/Makefile.am @@ -3,7 +3,8 @@ THEMES= \ Bright \ Crux \ Esco \ - Gorilla + Gorilla \ + Metabox THEME_DIR=$(datadir)/themes THEME_SUBDIR=metacity-1 diff --git a/src/themes/Metabox/metacity-theme-1.xml b/src/themes/Metabox/metacity-theme-1.xml new file mode 100644 index 000000000..9c4730472 --- /dev/null +++ b/src/themes/Metabox/metacity-theme-1.xml @@ -0,0 +1,470 @@ + + + + Metabox + Garrett LeSage <garrett@redhat.com< based on Havoc Pennington <hp@redhat.com>'s Atlanta theme + Â Garrett LeSage, Havoc Pennington, 2002 + Jun 12, 2002 + Looks a little like BlackBox. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <icon x="(0 `max` (width-title_width-mini_icon_width-IconTitleSpacing)) / 2" + y="(height-mini_icon_height) / 2" + width="mini_icon_width" height="mini_icon_height"/> + </draw_ops> + + <draw_ops name="title_text_focused_no_icon"> + <clip x="0" y="0" width="width" height="height"/> + <title color="gtk:fg[SELECTED]" + x="(0 `max` (width-title_width)) / 2" + y="((height - title_height) / 2) `max` 0"/> + </draw_ops> + + <draw_ops name="title_text_with_icon"> + <clip x="0" y="0" width="width" height="height"/> + <title color="gtk:fg[INSENSITIVE]" + x="(0 `max` (width-title_width-mini_icon_width-IconTitleSpacing)) / 2 + mini_icon_width + IconTitleSpacing" + y="((height - title_height) / 2) `max` 0"/> + <icon x="(0 `max` (width-title_width-mini_icon_width-IconTitleSpacing)) / 2" + y="(height-mini_icon_height) / 2" + width="mini_icon_width" height="mini_icon_height"/> + </draw_ops> + + <draw_ops name="title_text_no_icon"> + <clip x="0" y="0" width="width" height="height"/> + <title color="blend/gtk:fg[INSENSITIVE]/gtk:bg[INSENSITIVE]/0.35" + x="(0 `max` (width-title_width)) / 2" + y="((height - title_height) / 2) `max` 0"/> + </draw_ops> + + <draw_ops name="title_normal"> + <include name="bg_title_inactive"/> + <include name="title_text_no_icon"/> + </draw_ops> + + <draw_ops name="title_focused"> + <include name="bg_title_active"/> + <include name="title_text_focused_no_icon"/> + </draw_ops> + + <draw_ops name="title_utility"> + <include name="title_text_no_icon"/> + </draw_ops> + + <draw_ops name="title_utility_focused"> + <include name="bg_title_active"/> + <include name="title_text_focused_no_icon"/> + </draw_ops> + + <frame_style name="normal_unfocused" geometry="normal"> + <piece position="entire_background" draw_ops="focus_background"/> + <piece position="title" draw_ops="title_normal"/> + + <!-- we don't specify for prelight, so normal is used --> + <button function="close" state="normal" draw_ops="close_button_unfocused"/> + <button function="close" state="pressed" draw_ops="close_button_pressed"/> + <button function="minimize" state="normal" draw_ops="minimize_button_unfocused"/> + <button function="minimize" state="pressed" draw_ops="minimize_button_pressed"/> + <button function="maximize" state="normal" draw_ops="maximize_button_unfocused"/> + <button function="maximize" state="pressed" draw_ops="maximize_button_pressed"/> + <button function="menu" state="normal" draw_ops="menu_button_unfocused"/> + <button function="menu" state="pressed" draw_ops="menu_button_pressed"/> + </frame_style> + + <frame_style name="normal_focused" geometry="normal"> + <piece position="entire_background" draw_ops="focus_background"/> + <piece position="title" draw_ops="title_focused"/> + + <!-- we don't specify for prelight, so normal is used --> + <button function="close" state="normal" draw_ops="close_button"/> + <button function="close" state="pressed" draw_ops="close_button_pressed"/> + <button function="close" state="prelight" draw_ops="close_button_prelight"/> + <button function="minimize" state="normal" draw_ops="minimize_button"/> + <button function="minimize" state="pressed" draw_ops="minimize_button_pressed"/> + <button function="minimize" state="prelight" draw_ops="minimize_button_prelight"/> + <button function="maximize" state="normal" draw_ops="maximize_button"/> + <button function="maximize" state="pressed" draw_ops="maximize_button_pressed"/> + <button function="maximize" state="prelight" draw_ops="maximize_button_prelight"/> + <button function="menu" state="normal" draw_ops="menu_button"/> + <button function="menu" state="pressed" draw_ops="menu_button_pressed"/> + <button function="menu" state="prelight" draw_ops="menu_button_prelight"/> + </frame_style> + + <frame_style name="maximized_unfocused" geometry="normal_small_borders" parent="normal_unfocused"> + <piece position="entire_background" draw_ops="blank"/> + <button function="maximize" state="normal" draw_ops="restore_button_unfocused"/> + <button function="maximize" state="pressed" draw_ops="restore_button_pressed"/> + </frame_style> + + <frame_style name="maximized_focused" geometry="normal_small_borders" parent="normal_focused"> + <piece position="entire_background" draw_ops="focus_outline"/> + <button function="maximize" state="normal" draw_ops="restore_button"/> + <button function="maximize" state="pressed" draw_ops="restore_button_pressed"/> + <button function="maximize" state="prelight" draw_ops="restore_button_prelight"/> + </frame_style> + + <frame_style name="utility_unfocused" geometry="utility" parent="normal_unfocused"> + <piece position="title" draw_ops="title_utility"/> + </frame_style> + + <frame_style name="utility_focused" geometry="utility" parent="normal_focused"> + <piece position="title" draw_ops="title_utility_focused"/> + </frame_style> + + <frame_style name="border" geometry="border" parent="normal_unfocused"> + <piece position="entire_background" draw_ops="outer_bevel"/> + <piece position="title" draw_ops="blank"/> + </frame_style> + + <frame_style_set name="normal"> + <frame focus="yes" state="normal" resize="both" style="normal_focused"/> + <frame focus="no" state="normal" resize="both" style="normal_unfocused"/> + <frame focus="yes" state="maximized" style="maximized_focused"/> + <frame focus="no" state="maximized" style="maximized_unfocused"/> + <frame focus="yes" state="shaded" style="normal_focused"/> + <frame focus="no" state="shaded" style="normal_unfocused"/> + <frame focus="yes" state="maximized_and_shaded" style="maximized_focused"/> + <frame focus="no" state="maximized_and_shaded" style="maximized_unfocused"/> + </frame_style_set> + + <frame_style_set name="utility" parent="normal"> + <frame focus="yes" state="normal" resize="both" style="utility_focused"/> + <frame focus="no" state="normal" resize="both" style="utility_unfocused"/> + <!-- this is a bunch of crack since utility windows shouldn't be maximized --> + <frame focus="yes" state="maximized" style="utility_focused"/> + <frame focus="no" state="maximized" style="utility_unfocused"/> + <frame focus="yes" state="shaded" style="utility_focused"/> + <frame focus="no" state="shaded" style="utility_unfocused"/> + <frame focus="yes" state="maximized_and_shaded" style="utility_focused"/> + <frame focus="no" state="maximized_and_shaded" style="utility_unfocused"/> + </frame_style_set> + + <frame_style_set name="border"> + <frame focus="yes" state="normal" resize="both" style="border"/> + <frame focus="no" state="normal" resize="both" style="border"/> + <frame focus="yes" state="maximized" style="border"/> + <frame focus="no" state="maximized" style="border"/> + <frame focus="yes" state="shaded" style="border"/> + <frame focus="no" state="shaded" style="border"/> + <frame focus="yes" state="maximized_and_shaded" style="border"/> + <frame focus="no" state="maximized_and_shaded" style="border"/> + </frame_style_set> + + <window type="normal" style_set="normal"/> + <window type="dialog" style_set="normal"/> + <window type="modal_dialog" style_set="normal"/> + <window type="menu" style_set="normal"/> + <window type="utility" style_set="utility"/> + <window type="border" style_set="border"/> + + <menu_icon function="close" state="normal" draw_ops="close_button"/> + <menu_icon function="maximize" state="normal" draw_ops="maximize_button"/> + <menu_icon function="unmaximize" state="normal" draw_ops="restore_button"/> + <menu_icon function="minimize" state="normal" draw_ops="minimize_button"/> + +</metacity_theme> diff --git a/src/window.c b/src/window.c index 157eea2e6..585243713 100644 --- a/src/window.c +++ b/src/window.c @@ -613,7 +613,8 @@ meta_window_new (MetaDisplay *display, Window xwindow, * area (bit of a hack here). Assume undecorated windows * probably don't intend to be maximized. */ - if (window->has_maximize_func && window->decorated) + if (window->has_maximize_func && window->decorated && + !window->fullscreen) { MetaRectangle workarea; MetaRectangle outer; @@ -5073,7 +5074,7 @@ recalc_window_features (MetaWindow *window) } /* no shading if not decorated */ - if (!window->decorated) + if (!window->decorated || window->border_only) window->has_shade_func = FALSE; window->skip_taskbar = FALSE;