2002-10-21 Havoc Pennington <hp@redhat.com>
Optimizations for managing new windows (do not all take effect if
METACITY_DEBUG=1). Bug #96404
* src/keybindings.c (meta_change_keygrab): use error trap nesting
and conditionalize on meta_is_verbose() to avoid a ton of XSync
* src/display.c (meta_change_button_grab): ditto
Throughout: move to new error trap setup to save on XSync calls,
new setup is:
* src/errors.c (meta_error_trap_push_with_return): new function,
an error trap that needs to care about return value and thus
sync even if an outer trap still exists
(meta_error_trap_pop_with_return): new function
(meta_error_trap_pop): add "last_request_was_roundtrip"
argument allowing us to avoid XSync() if we just did
a GetProperty or whatever.
* src/util.c (meta_warning): flush the warning file descriptor
* src/Makefile.am (INCLUDES): define G_LOG_DOMAIN
2002-10-20 Havoc Pennington <hp@pobox.com>
* src/keybindings.c (handle_raise_or_lower): check above->mapped
before deciding if it overlaps the window being raiselowered,
fix from Stephane Chauveau
2002-10-18 Havoc Pennington <hp@redhat.com>
* src/window.c (meta_window_refresh_resize_popup): only create the
resize popup if width_inc or height_inc are > 1
* src/resizepopup.c: Clear out all the weird tickmark cruft,
saves us about 2.5K of binary size, whee
(meta_ui_resize_popup_new): take display/screen arguments and make
multihead-safe #94349
2002-10-18 Havoc Pennington <hp@redhat.com>
* src/keybindings.c (do_choose_window): don't start the cycle
process if the binding for switching windows has no modifier bits,
just focus the window immediately.
* src/prefs.c, src/keybindings.c: add a keybinding to move between
windows that goes in the opposite direction. This is mostly
useful if you want to bind unmodified keys to the switch windows
functions, e.g. if you have "Forward" and "Back" keys on your
keyboard. Patch from Shilad Sen <shilad sourcelight com>
2002-10-18 Havoc Pennington <hp@redhat.com>
* src/prefs.c, src/frames.c: add "what happens when you double
click the titlebar" setting, patch from Sean Middleditch bug
#95625. This is basically an "add Windows emulation mode" patch.
2002-10-18 Havoc Pennington <hp@redhat.com>
* src/metacity.schemas.in: move window-click to Super+click not
Alt+click by default. Super should be the Windows key on keyboards
that have one and are so configured. Prepare for the FAQ on this.
2002-10-18 Havoc Pennington <hp@pobox.com>
* src/stack.c (constrain_stacking): replace the old
apply_constraints with wacky new approach involving graphing all
the constraints then walking the graph. Fixes#94876 and probably
other stacking bugs as well, thanks to Arvind for tracking down
the issue.
(compute_layer): add FIXME and reference to bug #96140
2002-10-17 Havoc Pennington <hp@redhat.com>
* src/stack.c (apply_constraints): don't place
transient-for-whole-group windows above _each other_, only
above other windows in the group that aren't themselves
transient-for-whole-group. Should help with part of #94876
2002-10-17 Havoc Pennington <hp@redhat.com>
* src/stack.c (apply_constraints): fix memory leak of
group_windows, and don't use the variable name "tmp" twice. Shadow
variables bad.
2002-10-17 Havoc Pennington <hp@redhat.com>
* src/tools/metacity-window-demo.c (dialog_cb): add code to create
big stacks of dialogs transient for each other, for testing.
2002-10-16 Havoc Pennington <hp@redhat.com>
* src/workspace.c: workspaces are all per-screen now, fix
accordingly
* src/core.c: fix multihead workspace stuff
* src/keybindings.c: multihead-rama
* src/screen.c (meta_screen_show_desktop): new functions to
replace display equivalents
* src/display.c (meta_display_get_workspace_by_screen_index): get
rid of this
(meta_display_get_workspace_by_index): get rid of this
(event_callback): handle _NET_SHOWING_DESKTOP message per-screen
* src/screen.c (meta_screen_get_workspace_by_index): new function
* src/screen.h (struct _MetaScreen): move workspace list, and
showing_desktop flag, to be per-screen
* src/window.c (window_query_root_pointer): return whether pointer
is on window's screen
(meta_window_handle_mouse_grab_op_event): don't use coordinates
from other screens when updating a window operation on the current
screen. I can't believe no one has reported this...
2002-10-16 Havoc Pennington <hp@pobox.com>
* src/window.c (meta_window_client_message): update window layer
when above/below state is changed. Fixed by Ross Burton.
2002-10-14 Federico Mena Quintero <federico@ximian.com>
* src/display.c (event_callback): Ignore EnterNotify events when
the detail field is set to NotifyInferior. Fixes#95747.
2002-10-12 Havoc Pennington <hp@pobox.com>
* src/metacity.schemas.in: button layout key
* src/prefs.c: Add button layout gconf key
(change_notify): use some "else if" instead of "if" where we
should have been
2002-10-11 Havoc Pennington <hp@redhat.com>
* src/display.c (event_callback): don't raise window on button 2
click, only on button 1 and button 3.
* src/frames.c (meta_frames_button_press_event): lower on button 2
press on frame
* src/core.c (meta_core_user_lower): new function
2002-10-11 Havoc Pennington <hp@pobox.com>
* src/stack.c (window_is_fullscreen_size): make the checks here
allow windows larger than the screen in addition to
exactly-screen-size
* src/window.c (meta_window_configure_request): delete the "try to
auto-enter-fullscreen-state" hack here, because it was broken, and
the changes to the stacking code to move screen-size focused
windows to the fullscreen layer should work better.
(meta_window_new): remove auto-fullscreen hack from here too
2002-10-09 Havoc Pennington <hp@pobox.com>
* src/stack.c (apply_constraints): also keep utility/menu/toolbar
windows above their whole group.
(get_standalone_layer): don't use META_LAYER_FOCUSED_WINDOW, but
only use META_LAYER_FULLSCREEN while the fullscreen window has
focus. Also, put screen-sized windows in the fullscreen layer,
even if we didn't dare to actually put them in the fullscreen
state.
2002-10-07 Havoc Pennington <hp@redhat.com>
Add a modifier key preference for the Alt+click stuff.
Can be set to "disabled" as well.
* src/run-metacity.sh: load .Xmodmap in the Xnest if it exists
* src/display.c (meta_display_ungrab_window_buttons): ungrab
AnyModifier in case the modifier changed since we grabbed
(meta_display_open): rearrange code to use meta_display_close() to
mop up when we can't find any screens, avoiding the need to
keep the bail-out code in sync with meta_display_close.
* src/keybindings.c (devirtualize_modifiers): move this function
to a public place in display.c
* src/metacity.schemas.in: add setting for the modifier key
to use for Alt+left/middle/right click.
* src/prefs.c (update_binding): add a missing newline to a warning
(meta_prefs_get_mouse_button_mods): new function
* src/ui.c (meta_ui_parse_modifier): new function
2002-10-06 Havoc Pennington <hp@pobox.com>
* src/async-getprop.c: Add wacky hack suggested by Keith Packard
to get X properties asynchronously. Not actually used by metacity
yet, but thinking about it.
2002-10-04 Havoc Pennington <hp@redhat.com>
* src/display.c (event_callback): do XRRUpdateConfiguration()
if we have RandR extension, else poke in Xlib's screen struct to
update the screen size.
* configure.in: fix a bogus overwrite of cppflags,
add a check for RandR extension
2002-10-04 Arvind Samptur <arvind.samptur@wipro.com>
* src/window.c (meta_window_change_workspace): call meta_window_unstick
before adding window to workspace.
(menu_callback): call meta_workspace_activate before meta_window_change_workspace.
This would avoid us running an extra loop for determining the window workspace list.
Patches from Jeyasudha and Arvind. Fixes#92575
2002-10-03 Havoc Pennington <hp@pobox.com>
* src/themes/Esco/metacity-theme-1.xml: only specify the
middle backgrounds, let left/right fall back to middle
* src/theme.c (get_button): fall back to middle_background draw
routines when missing the left/right button backgrounds.
(button_rect): fix to handle drawing middle button backgrounds
(meta_frame_style_draw): draw middle background once per middle
button
2002-10-03 Havoc Pennington <hp@pobox.com>
Button-reordering patch. Has all the code except actually
installing a gconf schema and reading the gconf key in prefs.c.
metacity-theme-viewer displays the button layouts for testing
themes.
* src/preview-widget.c (meta_preview_size_request): make up a
width/height if no child widget
* src/prefs.c (meta_prefs_get_button_layout): new function
* src/frames.c: get the button layout from prefs and
use it when drawing
* src/theme.c (meta_frame_layout_calc_geometry): enhance to be
able to lay out buttons in different arrangements
(button_rect): draw the new button background rectangles
(meta_theme_draw_frame): require a button layout argument
(meta_theme_calc_geometry): pass in the button layout
* src/preview-widget.h: mod to handle button layouts
* src/theme-viewer.c: mod to handle button layouts
2002-10-01 Havoc Pennington <hp@pobox.com>
* src/place.c (find_next_cascade): try extra cascades alongside
the first, if the first fails; patch from readams@hmc.edu
2002-10-01 Havoc Pennington <hp@pobox.com>
* src/screen.c (meta_screen_resize_func): make it static
* src/stack.c (get_standalone_layer): put above/below windows
in an appropriate layer.
* src/screen.c (set_supported_hint): say we support above/below
* src/display.h (struct _MetaDisplay): add _NET_WM_STATE_ABOVE,
_NET_WM_STATE_BELOW atoms
* src/window.c (meta_window_client_message): handle above/below
state messages
(set_net_wm_state): handler above/below state
(update_net_wm_state): handle above/below states
2002-10-01 Havoc Pennington <hp@pobox.com>
* src/window.c (constrain_position): always align fullscreen
windows to top, as we do with maximized windows.
2002-09-29 Havoc Pennington <hp@pobox.com>
* src/eggaccelerators.c: update from libegg to get fix from Ralph
Loader for <Super> <Hyper> <Meta> parsing, #93005
2002-09-28 Havoc Pennington <hp@pobox.com>
Patch from Keith Packard to handle root window resizes.
* src/screen.c (reload_xinerama_infos): factor out Xinerama code
(meta_screen_resize): implement this, to be called from display.c
on screen resize
* src/display.c (event_callback): handle ConfigureNotify on root
windows
2002-09-28 Havoc Pennington <hp@pobox.com>
* src/window.c, src/stack.c: Rewrite stack code to work a lot
differently. Should be better now, and not lose relative positions
of windows when moving among layers. Also should now be possible
to get session management to restore the stacking order. Probably
breaks some stuff, and makes all the stack.c changes I made
yesterday sort of irrelevant.
2002-09-27 Havoc Pennington <hp@pobox.com>
* src/stack.c (get_standalone_layer): Temporarily disable use of
the FOCUSED_WINDOW layer, because given the fact that moving
multiple windows into the same layer changes the Z-order of those
windows, it was breaking click-to-focus.
2002-09-27 Havoc Pennington <hp@pobox.com>
* src/screen.c (meta_screen_focus_top_window): raise the focused
window, since it may not be the window on top, given the below
change.
* src/stack.c (meta_stack_get_default_focus_window): make this
more complex to prefer to focus the transient parent, followed by
other windows in group, followed by topmost non-dock, followed by
dock. Previously was just topmost non-dock followed by dock
ignoring groups and transiency.
2002-09-27 Havoc Pennington <hp@pobox.com>
* src/place.c (constrain_placement): constrain placement to try to
keep windows from going offscreen to the right/bottom
* src/stack.c (compute_layer): rearrange the logic here to say
that a window must always be in at least as high a layer as any of
its transient parents or group members, rather than special-casing
fullscreen. Also, group_member_is_fullscreen was leaking the list
of group members every time, a fairly major memory leak.
2002-09-27 Havoc Pennington <hp@redhat.com>
Try to handle Solaris Xinerama, all coded blind, someone
on Solaris will need to debug the typos.
* src/display.c: updates for Solaris Xinerama
* src/screen.c: updates for Solaris Xinerama
* configure.in: make Xinerama check more complicated to catch
Solaris Xinerama
2002-09-26 Havoc Pennington <hp@pobox.com>
* src/menu.c (meta_window_menu_new): use MetaAccelLabel to display
accelerators for the menu items
* src/metaaccellabel.c: cut-and-paste GtkAccelLabel and port to
use virtual modifiers
* src/Makefile.am (metacity_SOURCES): add metaaccellabel.[hc]
* src/prefs.c (meta_prefs_get_window_binding): new function
* src/core.c (meta_core_get_menu_accelerator): new function
2002-09-24 Havoc Pennington <hp@pobox.com>
* src/place.c (fit_rect_in_xinerama): update best_overlap as we go
through the loop - doh. Fix from readams@hmc.edu for #90799.
(find_first_fit): try the origin of each xinerama screen
after the first. Also from readams@hmc.edu
2002-09-24 Havoc Pennington <hp@redhat.com>
* src/window.c (meta_window_save_rect): new function,
only saves rect after checking current state, #93795
(meta_window_make_fullscreen): use new function
(meta_window_maximize): use new function
2002-09-24 Havoc Pennington <hp@redhat.com>
* src/window.c (meta_window_update_layer): new function
* src/stack.c (compute_layer): put focused window in a layer above
all other windows, in click-to-focus mode. #93022
* src/window.c (meta_window_notify_focus): update window layer on
focus change.
2002-09-24 Havoc Pennington <hp@redhat.com>
* src/main.c (main): support --version, #92796 patch from
Christian Neumair
* autogen.sh: change gettext test to be happy with
glib-gettextize, #81425
* src/menu.c: change mnemonics to match bug #78999
* src/theme.c (meta_theme_validate): consolidate some
nearly-identical themes for ease of translation, #70962
2002-09-23 Havoc Pennington <hp@pobox.com>
* src/main.c (main): re-enable the log handler, maybe it will
break something, I don't remember why I turned it off.
* src/display.c: s/_NET_SHOW_DESKTOP/_NET_SHOWING_DESKTOP/ which
is what's in the spec
2002-09-22 Havoc Pennington <hp@pobox.com>
* src/window.c (recalc_window_features): small reordering of
code
* src/display.c (meta_spew_event): more spew for MapNotify,
UnmapNotify
* src/window.c (recalc_window_features): spew more stuff
* src/display.c (meta_spew_event): spew override_redirect field of
ConfigureNotify
2002-09-15 Havoc Pennington <hp@pobox.com>
* src/session.c (save_state): escape the window title before
saving in the session file, reported by Jos Vos
2002-09-12 Havoc Pennington <hp@redhat.com>
* src/workspace.c (meta_workspace_screen_index)
(meta_workspace_index): fix compiler warnings
* src/tools/metacity-window-demo.c (menu_items): add a test for
dialogs with no transient parent
* src/place.c (find_first_fit): Try placing window at origin of
first Xinerama, even if there are no windows to place next to;
makes placement work when no other windows are open on the screen.
2002-09-05 Havoc Pennington <hp@redhat.com>
* configure.in (ALL_LINGUAS): remove 'ro' from ALL_LINGUAS, it
contained invalid XML and broke the build. No <> in the
translations of gconf keys!
2002-09-03 Havoc Pennington <hp@pobox.com>
* src/display.c (meta_display_get_tab_current): new function
* src/keybindings.c (do_choose_window): apply modified patch from
JeyaSudha to still display tab popup if only one window is on the
desktop.
2002-09-03 Havoc Pennington <hp@pobox.com>
* src/frames.c (meta_frames_update_prelit_control): don't filter
out prelight for unmaximize button. #83860
(meta_frames_paint_to_drawable): handle unmaximize here as well
2002-08-25 Havoc Pennington <hp@pobox.com>
* src/display.c (meta_display_open): _NET_SUPPORTING_WM_CHECK is
supposed to have type WINDOW not CARDINAL. reported by
Ben Jansens
2002-08-24 Havoc Pennington <hp@redhat.com>
* src/window.c (process_property_notify): recalculate mapped-ness
of frame after toggling decorations on/off, so that windows don't
disappear when decorations are toggled on.
* src/tools/metacity-window-demo.c (toggle_decorated_cb): add a
test for toggling decoration state on the fly
2002-08-24 Havoc Pennington <hp@redhat.com>
* src/window.c (update_sm_hints): hack around bug in kmail etc.
where SM_CLIENT_ID was set on the window, not the client leader.
* src/theme.c (meta_frame_layout_calc_geometry): don't round
corners unless we have enough frame to chop off.
2002-08-24 Havoc Pennington <hp@redhat.com>
* src/util.c: translate some strings that should have been, and
convert to locale encoding before printing stuff.
* src/stack.c (group_member_is_fullscreen): if window itself is
fullscreen, return TRUE immediately.
* src/window.c (meta_window_configure_request): add hack to
fullscreenize large undecorated windows.
2002-08-20 Steve Fox <drfickle@k-lug.org>
* metacity.spec.in: Add so that the spec file gets auto-updated
whenever configure.in gets bumped. Include some missing
directories.
* Makefile.am
* configure.in: Necessary changes for spec file magic
2002-08-20 Havoc Pennington <hp@redhat.com>
* src/frames.c (get_control): if in the title rect check for y
<= TOP_RESIZE_HEIGHT
* src/display.c (meta_spew_event): put x/y coordinates in spew for
enter/leave notify
* src/frames.c (meta_frames_motion_notify_event): move cursor
changing from here to update_prelit_control so it happens on enter
notify as well
(get_control): change test "y < TOP_RESIZE_HEIGHT" to
"y <= TOP_RESIZE_HEIGHT"
* src/Makefile.am (EXTRA_DIST): include .in files in EXTRA_DIST
2002-08-15 Havoc Pennington <hp@pobox.com>
* src/window.c (recalc_window_features): leave has_fullscreen_func
set to TRUE if the window is screen sized and undecorated, even if
the window isn't resizable. idea from Christian - Manny Calavera -
Neumair
* src/keybindings.c (handle_toggle_fullscreen)
(handle_toggle_maximize): these disabled fullscreen/maximize if
the window wasn't resizable, should have used has_fullscreen_func
has_maximize_func instead.
2002-08-15 Havoc Pennington <hp@pobox.com>
* src/keybindings.c: implement raise/lower
* src/metacity.schemas.in: add raise/lower
* src/prefs.c: add "raise" and "lower" prefs to keybindings
* src/display.c (meta_display_set_grab_op_cursor): assert that
the screen arg is non-NULL in appropriate cases
2002-08-14 Jayaraj Rajappan <jayaraj.rajappan@wipro.com>
* src/display.c (meta_display_set_grab_op_cursor):
In XGrabPointer, set the confine_to argument to the root window
of the screen the window is on.
* src/display.h: add screen argument.
* src/window.c (meta_window_update_resize_grab_op):
pass screen argument as NULL.
2002-08-14 Mark McLoughlin <mark@skynet.ie>
* src/screen.c: (set_number_of_spaces_hint), move from
workspace.c.
(update_num_workspaces): set the hint here. Fixes#90123.
* src/workspace.c:
(meta_workspace_new), (meta_workspace_free): don't set
the hint here.
(update_num_workspaces): move to screen.c
2002-08-12 Havoc Pennington <hp@redhat.com>
* src/stack.c (compute_layer): window is in fullscreen layer if
any member of its group is fullscreen
* src/window.c (meta_window_unmake_fullscreen): update layer for
whole window group
(meta_window_make_fullscreen): ditto
* src/util.c (meta_unsigned_long_hash): move hash/equal funcs for
Window in here.
* src/group.c: track window groups so we can do stuff with them.
2002-08-10 Havoc Pennington <hp@pobox.com>
* src/menu.c: reorder the menu items so that Close is at the
bottom
* src/theme-viewer.c (main): set debugging mode if METACITY_DEBUG
enabled
2002-08-10 Havoc Pennington <hp@pobox.com>
* src/xprops.c (meta_prop_get_motif_hints): allow Motif hints to
be smaller than expected; GLUT for example seems to set a smaller
struct. #89841
* src/window.c (update_mwm_hints): use g_free on motif hints as we
don't use the XGetWindowProperty return directly anymore
2002-08-10 Havoc Pennington <hp@pobox.com>
* src/window.c (meta_window_free): be sure window is
mapped if we unmanage it and it's not withdrawn;
bug #90369
* src/screen.c (meta_screen_new): change string
s/override/replace/ bug #89077
* src/theme.c (scale_and_alpha_pixbuf): dump the
sometimes-use-NEAREST-instead-of-BILINEAR optimization,
bug #87489
2002-08-10 Havoc Pennington <hp@pobox.com>
* src/window.c (menu_callback): raise window when moving to
another workspace bug #88896
* src/keybindings.c (switch_to_workspace): raise window when
moving between spaces
2002-08-10 Jorn Baayen <jorn@nl.linux.org>
Register window menu icons with the Gtk stock system, instead
of using the ones from the Metacity theme (which looked very bad with
some themes).
* src/Makefile.am:
* src/main.c:
* src/menu.c:
* src/stock_delete.png: added these files
* src/stock_minimize.png:
* src/stock_maximize.png:
* src/ui.c
2002-08-10 Havoc Pennington <hp@pobox.com>
* src/keybindings.c (meta_display_process_key_event): filter out
key events that happen on popup menus etc.
* src/ui.c (meta_ui_window_is_widget): new function to check
whether a window belongs to a GtkWidget such as the popup menu
* src/prefs.c (change_notify): put in a no-op line for AIX
compiler, #84252
2002-08-10 Havoc Pennington <hp@pobox.com>
* src/window.c (update_resize): track time to avoid sending a
deluge of move/resize requests, suggestion from
xavier.bestel@free.fr bug #86830. Not really sure if this will
make a difference or not. We'll see I guess.
(update_move): do same on move though it seems less important
here.
* src/display.h (struct _MetaDisplay): store the
last time we sent a move/resize event.
2002-08-09 Havoc Pennington <hp@pobox.com>
* src/keybindings.c (handle_toggle_maximize): disable maximize,
fullscreen, shade via keybindings on windows that don't support
it.
2002-08-08 Craig Black <blackc@speakeasy.net>
Patch to provide extra cues to the user when using
window menu move and resize, #85724.
* src/common.h: add new cursors
* src/display.c: (grab_op_is_mouse)
(meta_display_create_x_cursor), (xcursor_for_op),
(meta_display_set_grab_op_cursor),
(meta_display_begin_grab_op):
The keyboard move and resize grab ops now also use the mouse.
Allow the grab cursor to be changed during the grab op.
Hold onto the initial grab position in case of reset.
* src/display.h: save the initial grab position
* src/keybindings.c: (process_keyboard_move_grab),
(process_keyboard_resize_grab), (handle_begin_move),
(handle_begin_resize):
The keyboard move and resize grab ops now also use the mouse.
* src/window.c: (meta_window_client_message), (menu_callback),
(update_move), (update_resize),
(meta_window_handle_mouse_grab_op_event), (warp_pointer),
(meta_window_warp_pointer), (meta_window_begin_grab_op),
(meta_window_update_resize_grab_op):
When moving or resizing a window use the last grab position
in computing change increment.
Provide support for warping the mouse pointer.
* src/window.h: new warp pointer and grab op helper functions
2002-08-08 Craig Black <blackc@speakeasy.net>
* src/display.h: update comment
* src/window.c: (meta_window_focus): also set expected
focus window when setting input focus.
2002-08-07 Craig Black <blackc@speakeasy.net>
* src/display.c: (meta_display_open): clear expected focus window
on open
* src/display.h: add expected_focus_window field
* src/window.c: (meta_window_make_fullscreen),
(meta_window_unmake_fullscreen): change meta_window_update_layer()
to meta_stack_update_layer() so build works again.
(meta_window_free), (meta_window_make_fullscreen),
(meta_window_focus), (meta_window_notify_focus): keep track of
expected focus window after sending WM_TAKE_FOCUS event,
previously if a UnmapNotify event arrived before the FocusIn event
we would lose focus, fixes#84564.
2002-07-28 Havoc Pennington <hp@pobox.com>
* src/window.c (meta_window_shade): disable animation when shading
windows, just doesn't really convey the idea anyway.
* src/effects.c: Move to using a shaped window instead of
IncludeInferiors to do the animations, looks a lot better
because we don't have to grab the server.
* src/window.c (meta_window_change_workspace): remove bogus
assertion that was causing a crash
(meta_window_new): auto-fullscreen huge undecorated windows.
* src/keybindings.c (switch_to_workspace): use
meta_window_change_workspace() to avoid same bug in cut-and-paste
code from there
2002-08-04 Havoc Pennington <hp@redhat.com>
* src/frames.c (meta_frames_paint_to_drawable): init button
states for the button backgrounds
* src/themes/Atlanta/metacity-theme-1.xml: adapt to work correctly
with button repositioning
2002-08-04 Havoc Pennington <hp@redhat.com>
* src/frames.c (meta_frames_button_press_event): raise/focus
on click, even if the click was on the client area
(this makes Alt+button1 raise windows again, yay)
* src/stack.c (compute_layer): put panels in the DOCK layer always
(keep them on top of other windows). Still sloppy-focus raised
with respect to other docks.
* configure.in: remove -Wshadow for now as GTK headers make all
kinds of noise with it.
2002-08-02 Mark McLoughlin <mark@skynet.ie>
* src/screen.c: (meta_screen_new): set active_workspace
to NULL. Also actually activate the first workspace instead
of just setting active_workspace. Fixes#87367.
(meta_screen_ensure_workspace_popup): don't re-use our
iterator for setting the entries list, stop iterating
when we've gone beyond the last workspace (there may
be empty spaces in the last row).
* src/workspace.c: (meta_workspace_activate): if no workspace
was previously activated, return.
2002-08-04 Havoc Pennington <hp@redhat.com>
* src/theme.c (free_menu_ops): use MetaMenuIconType not button
type for the size of the menu ops array
(meta_theme_define_int_constant): return TRUE on success (how the
heck did this ever work?)
(meta_theme_define_float_constant): return TRUE on success
(meta_frame_style_validate): allow the "positional" buttons to
be omitted for now.
* src/testgradient.c (render_multi): don't define N_COLORS twice
* src/theme-viewer.c (run_theme_benchmark): don't define
ITERATIONS twice
* src/theme.c (button_rect): handle new button types
(meta_button_type_to_string): update
(meta_button_type_from_string): update
* src/theme.h (enum): add button types for the 6 possible button
positions. No way to reposition buttons still but this will allow
themes to go ahead and support doing so.
2002-08-03 Craig Black <blackc@speakeasy.net>
* src/display.c: (event_callback): Have ButtonPress and UnmapNotify
events account for a null grab window, fixes#87896
2002-08-01 Mark McLoughlin <mark@skynet.ie>
Implements support for _NET_WM_ALLOWED_ACTIONS.
Fixes#84282.
* src/display.[ch]: (meta_display_open): add
_NET_WM_ALLOWED_ACTIONS atoms.
* src/screen.c: (set_supported_hint): set them
as being supported.
* src/window.c:
(set_allowed_actions_hint): impl setting
_NET_WM_ALLOWED_ACTIONS.
(recalc_window_features): use it here, but only
if things have changed.
* src/window.c (recalc_window_features): if a window isn't
resizeable, turn off maximize function. If min size is equal to
max size, turn off resize function.
2002-08-01 Mark McLoughlin <mark@skynet.ie>
* src/session.c:
(save_yourself_possibly_done): send a SaveYourselfDone
if we're skipping this global save.
(save_yourself_callback): don't not save session state
if the save style is Global. Fixes#89390.
* theme-format.txt: update.
2002-07-24 Havoc Pennington <hp@redhat.com>
* src/theme-parser.c (meta_theme_load): look for themes in
~/.themes/NAME/metacity-1/ and datadir/themes/NAME/metacity-1
instead of the old locations.
* src/themes/Makefile.am: install themes to
datadir/themes/NAME/metacity-1/ to match how GTK works, breaking
third-party themes yet again! woot!
2002-07-20 Havoc Pennington <hp@pobox.com>
* src/display.c (meta_display_open): grab display across managing
each screen; XGetInputFocus() on startup.
2002-07-19 Havoc Pennington <hp@pobox.com>
* src/window.c (meta_window_configure_request): disable configure
requests during a user move/resize operation, mostly a workaround
for stoopid apps.
2002-07-23 Havoc Pennington <hp@redhat.com>
* src/themes/Makefile.am (THEMES): put Gorilla back in the build
* src/themes/Gorilla/metacity-theme-1.xml,
src/themes/Crux/metacity-theme-1.xml: fixes from
Sebastien Delestaing so that these themes work properly with
different font sizes.
* src/frames.c (get_control): patch from Balamurali Viswanathan
for #81984 (resize titlebar from the top not the bottom)
2002-07-23 Havoc Pennington <hp@redhat.com>
* src/keybindings.c (meta_display_process_key_event): handle
NULL screen from screen_for_xwindow
* src/display.c (meta_display_screen_for_xwindow): put an error
trap around the XGetWindowAttributes(), should fix the popular
"closing a window results in a crash" bug.
* src/util.c (print_backtrace): support optional backtrace
feature using gnu libc backtrace() call
2002-07-13 Havoc Pennington <hp@pobox.com>
* src/keybindings.c: adapt to virtual modifiers
(meta_display_process_mapping_event): we need to reload the
binding tables now when the modmap changes.
* src/prefs.c (update_binding): parse virtual modifiers, not
plain modmask
* src/common.h (MetaVirtualModifer): new enum
* src/ui.c (meta_ui_parse_accelerator): use
egg_accelerator_parse_virtual()
* src/Makefile.am: add eggaccelerators.[hc] for the virtual
accelerator parsing function
2002-07-12 Havoc Pennington <hp@pobox.com>
* src/session.c (warn_about_lame_clients_and_finish_interact):
don't display the dialog if all the apps were session managed.
2002-07-12 Havoc Pennington <hp@redhat.com>
* src/window.c (meta_window_new): try to maximize windows that
are too big for the work area
* src/place.c (find_next_cascade): don't let the cascade algorithm
place windows off the screen, and fix it to always exhaustively
search the window list for cascade parents.
2002-07-11 Havoc Pennington <hp@pobox.com>
* src/metacity-dialog.c (main): option to display error when a
command fails to run.
* src/keybindings.c (handle_run_command): run commands
in response to keybindings.
* src/prefs.c: add command keybinding stuff
* src/metacity.schemas.in: add keybindings for running commands,
and keys to store the commands themselves.
2002-07-09 Havoc Pennington <hp@pobox.com>
* src/metacity.schemas.in: fix short description for
begin_resize, patch from Jayaraj, #87654
* src/keybindings.c (handle_begin_resize): apply patch from
Jayaraj to actually handle the begin resize keybinding.
2002-07-09 Havoc Pennington <hp@pobox.com>
* src/window.c (constrain_position): don't center vertically for
maximized windows that don't fill the screen, just leave them at
the top.
2002-07-06 Havoc Pennington <hp@pobox.com>
Apply blackc@speakeasy.net patch, bug #83940, to do
mini-workspaces similar to the pager, when switching
spaces.
* src/window.c (update_net_wm_state): actually fill in
wm_state_skip_taskbar, wm_state_skip_pager flags
* src/tabpopup.c: support drawing a mini-workspace similar to the
one the pager draws.
* src/stack.c (meta_stack_list_windows): new function to list
the windows in stacking order
* src/screen.c (meta_screen_ensure_workspace_popup): don't pass in
the ugly default app icon for workspaces
* src/display.c (event_callback): fix from blackc@speakeasy.net
to avoid dereferencing a NULL grab window.
2002-07-06 Havoc Pennington <hp@pobox.com>
* src/display.c (meta_display_open): put _NET_DESKTOP_NAMES in the
array of atom names, so desktop names might work and we don't read
uninitialized memory.
* src/main.c (main): add VERSION/timestamp verbose message.
* src/keybindings.c: implement cycle_windows cycle_panels
* src/metacity.schemas.in: add the cycle_windows cycle_panels
keybindings
* src/prefs.h (META_KEYBINDING_FOCUS_PREVIOUS): replace
FOCUS_PREVIOUS key binding with CYCLE_WINDOWS and CYCLE_PANELS
(not good names really, but I don't have ideas).
* src/common.h: add a grab op for alt+esc window cycling
2002-07-05 Havoc Pennington <hp@pobox.com>
* src/window.c (update_wm_hints): Change default value of input
hint (if not specified) to true instead of false. This is what
some clients assume, such as Visual SlickEdit.
2002-07-02 Havoc Pennington <hp@pobox.com>
* src/window.c (meta_window_show_menu): use new macros to get
whether we allow move/resize correct
* src/frame.c (meta_frame_get_flags): use new macros to get
whether we can move/resize correct, considering
maximized/fullscreen for the move case.
* src/window.h (META_WINDOW_ALLOWS_RESIZE,
META_WINDOW_ALLOWS_MOVE): new macros
* src/keybindings.c (process_keyboard_resize_grab): finish the
right/left resize, patch from Jayaraj #78179.
Has the same old move/resize bug, if it hits a constraint it
starts to break because we move without resizing.
2002-07-02 Mark McLoughlin <mark@skynet.ie>
* src/keybindings.c:
(grab_keyboard), (ungrab_keyboard): rename from
{un}grab_all_keys_and_keyboard and only do an XKeyboardGrab,
the XKeyGrab isn't neccessary.
(meta_screen_grab_all_keys), (meta_screen_ungrab_all_keys),
(meta_window_grab_all_keys), (meta_window_ungrab_all_keys):
update for above change.
(handle_workspace_switch): don't use a MetaWindow when
workspace switching, use the root window instead.
2002-07-01 Mark McLoughlin <mark@skynet.ie>
Fix broken workspace switching from my previous commit.
* src/display.c: (meta_display_begin_grab_op): don't
leak a pointer grab if we fail to grab the keyboard.
* src/keybindings.c: (meta_screen_grab_keys): check
screen->all_keys_grabbed.
(meta_screen_grab_all_keys): regrab our standard
bindings if we fail.
(handle_workspace_switch): revert to our previous
behaviour of using the last focused window to do
the grab upon. Only use the RootWindow if there
isn't anything else to use.
* src/screen.c: (meta_screen_new): initialise
all_keys_grabbed.
2002-06-26 Mark McLoughlin <mark@skynet.ie>
Fixes not being able to tab out of a
workspace which contains no windows.
* src/core.c: (meta_core_begin_grab_op): upd
for meta_display_begin_grab_op change.
(meta_core_get_grab_frame): allow for
grab_window == NULL.
* src/display.[ch]:
(meta_display_screen_for_xwindow): implement.
(meta_display_begin_grab_op): grab on the root window
if window == NULL.
(meta_display_end_grab_op): use grab_screen instead of
grab_window.
* src/keybindings.c:
(grab_all_keys_and_keyboard): split out from
meta_window_grab_all_keys.
(ungrab_all_keys_and_keyboard): split out from
meta_window_ungrab_all_keys.
(meta_screen_grab_all_keys), (meta_screen_ungrab_all_keys):
implement grabbing and ungrabbing on the root window.
(meta_display_process_key_event): if window == NULL,
check the event is from the same screen and process. Only
happens with workspace switching.
(process_workspace_switch_grab): kill window param and
don't use grab_window.
(handle_tab_forward), (handle_begin_move): upd for
meta_display_begin_grab_op change.
(handle_workspace_switch): remove brokeness. Always do
the grab op on the root window.
* src/keybindings.h: add meta_screen_{un}grab_all_keys.
* src/window.c: (meta_window_client_message), (menu_callback):
update for meta_display_begin_grab_op change.
2002-06-24 James M. Cape <jcape@ignore-your.tv>
* src/themes/Esco/metacity-theme-1.xml: Added some stuff to
the window buttons, so they use the ACTIVE bg/fg.
2002-06-25 Mark McLoughlin <mark@skynet.ie>
* src/display.[ch]: (meta_display_open):
src/screen.c: (set_supported_hint), (set_work_area_hint):
Its _NET_WORKAREA, not _NET_WM_WORKAREA silly :-)
2002-06-25 Mark McLoughlin <mark@skynet.ie>
* src/screen.[ch]:
(update_num_workspaces), recalc workarea hint when
new workspaces created. Fixes bug that workarea
not calculated until first non-dock window is
mapped.
(set_work_area_hint), (set_work_area_idle_func),
(meta_screen_queue_workarea_recalc): move all this
stuff from workspace.c.
* src/workspace.c: (meta_workspace_invalidate_work_area):
use meta_screen_queue_workarea_recalc.
2002-06-22 James M. Cape <jcape@ignore-your.tv>
* src/themes/Esco/metacity-theme-1.xml: Update for "border"
frame stuff, minor button/spacing improvements.
2002-06-22 Havoc Pennington <hp@pobox.com>
Partially fix Jacob's SM bugs.
* src/window.c (meta_window_apply_session_info): restore the extra
stuff we're saving, except stack position I didn't figure out yet.
* src/session.c: save stack position, minimized, maximized,
in the session file.
2002-06-22 Havoc Pennington <hp@pobox.com>
* src/workspace.c (set_number_of_spaces_hint): do nothing if
screen is being unmanaged, we don't want to blow away state,
we want to remember it for the next window manager.
2002-06-22 Havoc Pennington <hp@pobox.com>
* src/workspace.c (meta_screen_ensure_workspace_popup): rename
from meta_workspace_ensure_tab_popup, and use workspace->name
instead of a hardcoded name
2002-06-22 Havoc Pennington <hp@pobox.com>
* src/xprops.c (meta_prop_get_utf8_list): new utility function
* src/display.c (meta_display_open): _NET_DESKTOP_NAMES atom
(event_callback): update workspace names when the property changes
* src/screen.c (set_supported_hint): "support" _NET_DESKTOP_NAMES
(nothing to do really)
2002-06-21 Havoc Pennington <hp@pobox.com>
Theme breakage! Themes have to implement "border" frames
now, see Atlanta for an example. Fixes#84285
* src/tools/metacity-window-demo.c (do_appwindow): add a
border-only window
* src/window.c (update_mwm_hints): read border only from the MWM
hints
* src/window.h (struct _MetaWindow): add border_only flag
* src/core.c (meta_core_get_frame_type): report border type if
required
* src/common.h (enum): add META_FRAME_TYPE_BORDER
2002-06-20 Mark McLoughlin <mark@skynet.ie>
* src/window.c: (meta_window_visible_on_workspace): sticky
windows aren't visibile on all screens. Check the workspace
is on the same screen as the window.
* src/workspace.c: (meta_workspace_list_windows): use
meta_window_visible_on_workspace here.
2002-06-17 Havoc Pennington <hp@pobox.com>
* src/stack.c (meta_stack_get_default_focus_window): don't use a
minimized window as the next focus window, patch from
blackc@speakeasy.net
2002-06-17 Havoc Pennington <hp@pobox.com>
* src/place.c (find_next_cascade): increase the cascade threshold
a bit.
(find_first_fit): implement a somewhat lame first fit algorithm
2002-06-15 Havoc Pennington <hp@pobox.com>
* src/draw-workspace.h, src/draw-workspace.c: workspace-drawing
code factored out of libwnck, needs wiring up to tabpopup.c
(which is kind of annoying since you have to get the list of
workspaces and MetaWindow across the barrier between the GDK-aware
and non-GDK-aware sides of metacity)
2002-06-13 Anders Carlsson <andersca@gnu.org>
* src/theme.c (meta_frame_layout_calc_geometry): Set client height
as 0 when the window actually is shaded, not the other way around.
2002-06-12 Havoc Pennington <hp@redhat.com>
* src/theme.c (meta_frame_layout_calc_geometry): when a window is
shaded, don't include client height in the height calculation.
* src/workspace.c (meta_workspace_get_neighbor): apply fix from
Mads Villadsen for the Up arrow key, #84582
2002-06-10 Erwann Chenede - <erwann.chenede@sun.com>
* src/keybindings.c : (handle_close_window, handle_minimize_window)
verify the active window has the appropriate close/minimize function
before closing or minimizing the window.
2002-06-09 Havoc Pennington <hp@pobox.com>
* src/place.c (meta_window_place): don't run constrain_placement
on windows we allow to go anywhere (docks, etc.). Fixes
positioning of panel windows in certain cases.
2002-06-09 Havoc Pennington <hp@pobox.com>
* src/frames.c (meta_frames_button_press_event): don't raise/focus
the window if minimize/close are clicked, patch from Gaute
Lindkvist #75460
2002-06-08 Havoc Pennington <hp@pobox.com>
Cleanups to workspace popup patch. Space before all parens
in a couple places.
* src/prefs.c (meta_prefs_get_keybinding_action): fix brace
indentation, and use while instead of for loop. Take a "mask"
argument to avoid ambiguity issues.
* src/keybindings.c (handle_workspace_switch): rename from
handle_workspace_forward since there's no directionality here
(handle_workspace_switch): add a FIXME about how screwed it is
that we need a window in order to do our grab. Should be able to
grab on a dummy window like no_focus_window or the root window.
(process_workspace_switch_grab): rename from tab_grab for clarity,
no tab involved here.
* src/common.h (enum): have only one grab op for all workspace
switching directions, instead of one for each.
2002-06-08 Havoc Pennington <hp@pobox.com>
Apply big patch from blackc@speakeasy.net adding a popup window
to the Ctrl+Alt+arrows shortcuts. #83940
2002-06-08 Havoc Pennington <hp@pobox.com>
* src/screen.c (meta_screen_new): select key press/release on the
display->no_focus_window, another attempted fix for not getting
keybindings when no window is focused. Still doesn't seem to work
though. I don't get what's going wrong.
(meta_create_offscreen_window): new function, used instead of
XCreateSimpleWindow so we get override redirect offscreen windows.
2002-06-08 Havoc Pennington <hp@pobox.com>
* src/display.c (meta_display_open): set net_supporting_wm_check
in addition to win_supporting_wm_check, patch from
JeyaSudha for #83365
* src/screen.c (set_wm_check_hint): remove setting
win_supporting_wm_check on leader window here, done already in
display.c
2002-06-08 Havoc Pennington <hp@pobox.com>
* src/xprops.c (meta_prop_get_utf8_string): don't die on bad atom
name
* src/display.c (meta_display_close): don't unmanage windows here,
do it in screen_free and then closing the display unmanages
windows as a side effect of unmanaging the screen
(meta_display_unmanage_screen): new function
(process_selection_clear, process_selection_request): handle
selection stuff
(meta_spew_event): don't crash on client message containing
invalid atom
(meta_spew_event): don't crash on property notify with invalid
atom
* src/main.c (main): add --replace option to replace existing
window manager.
* src/screen.c: implement holding manager selection.
* src/display.c (meta_display_open): add new selection-related
atoms.
2002-06-08 Havoc Pennington <hp@pobox.com>
* src/screen.c (meta_screen_new): select keypress/keyrelease
events on root window, this may fix the bug where keybindings
didn't work if you didn't have a focused window.
2002-06-08 Havoc Pennington <hp@pobox.com>
* src/main.c (main): call meta_session_shutdown when exiting
cleanly
* src/session.c (meta_session_shutdown): function to change use to
RestartIfRunning
(meta_session_init): change normal restart hint to
RestartImmediately
2002-06-08 Havoc Pennington <hp@pobox.com>
Yeah I know maximization is broken, I'm too tired to fix it.
Probably because of the change to update_struts() that was
supposed to fix the 100% CPU bug.
* src/place.c (meta_window_place): don't run docks and things
through the placement algorithm. Thought it might fix
metacity-window-demo but it didn't.
* src/window.c (constrain_size): only get work area when needed
(meta_window_new): init the do_not_cover field
2002-06-08 Havoc Pennington <hp@pobox.com>
* src/screen.c (meta_screen_get_xinerama_for_window):
short-circuit the "only one xinerama" case, and use outer rect of
window instead of window->rect, so we get root window coords.
* src/theme.c (meta_frame_layout_get_borders): if fullscreen all
frame edges are zero-width.
* src/frame.c (meta_frame_get_flags): init fullscreen flag.
* src/common.h (enum): add META_FRAME_FULLSCREEN frame flag
* src/place.c: fix up calls to meta_window_get_work_area
* src/window.c (meta_window_get_work_area): add an arg for whether
the work area is for the screen or the xinerama subscreen.
(constrain_position): fix up calls to meta_window_get_work_area
(constrain_size): ditto
* src/screen.c (meta_screen_new): add METACITY_DEBUG_XINERAMA
environment variable which simulates xinerama on a single head.
2002-06-08 Havoc Pennington <hp@pobox.com>
* src/window.c (update_struts): only invalidate things if the
struts actually change, since the panel likes to set them over and
over. May fix the infinite loop that caused 100% CPU usage.