2004-10-25 Elijah Newren <newren@math.utah.edu>
Don't lower newly mapped windows when they're denied focus, if
they are transients of the focused window. Instead, defocus the
currently focused window. (fixes#151996).
(Also, reenable focus stealing prevention and do a small spacing
cleanup)
* src/window-props.c (init_net_startup_id): fix spacing
* src/window.c (window_takes_focus_on_map): re-enable focus
stealing prevention, (meta_window_show): if the new window is
denied focus and is a transient of the currently focused window,
defocus the currently focused window but keep the transient on
top; remove some old code about transients and focus; make sure
that EnterNotify events won't accidentally focus the new window.
2004-10-25 Elijah Newren <newren@math.utah.edu>
Fix the alt-tab order--if the most recently used window is not
focused, start alt tabbing with that window instead of the one
after it (fixes#156251)
* src/display.c (find_tab_forward): add a skip_first parameter,
(find_tab_backward): add a skip_last parameter,
(meta_display_get_tab_next): if a beginning window wasn't given
and the focused window isn't the tab chain, don't skip the MRU
window
2004-10-22 Elijah Newren <newren@math.utah.edu>
Update _NET_WM_STATE_HIDDEN so the pager on the panel will know
whether to display windows as visible or hidden (#105665)
* src/screen.c (queue_windows_showing): Revert the
queue_windows_showing portion of the patch committed on 2004-10-16
for #142198--it was an ill-advised optimization.
* src/window.c (window_showing_on_its_workspace,
window_should_be_showing): split the old window_should_be_showing
into these two functions, (set_net_wm_state): hidden state is more
complex; use window_showing_on_its_workspace to determine the
correct value
2004-10-20 Elijah Newren <newren@math.utah.edu>
Patch from Soeren to fix the modifier key breakage introduced by
an Xorg change. (fixes#151554)
* src/keybindings.c: include X11/XKBlib.h if available,
(handle_spew_mark): remove this unused function declaration,
(end_keyboard_grab): new function, uses XKB if available,
(process_tab_grab): use end_keyboard_grab to determine whether to
end the grab, (error_on_command): make key a const char *,
(process_workspace_switch_grab): use end_keyboard_grab to
determine whether to end the grab
2004-10-19 Anders Carlsson <andersca@gnome.org>
* src/frame.c: (meta_window_ensure_frame):
Don't try to use an ARGB visual at all if the depth isn't
32-bit. This caused major slowdowns with Composite enabled.
2004-10-16 Elijah Newren <newren@math.utah.edu>
Make the "showing desktop" mode be per-workspace instead of
per-screen. (fixes#142198)
* src/keybindings.c (handle_toggle_desktop): access
showing_desktop through the active workspace
* src/screen.c (meta_screen_new): remove initialization of
screen->showing_desktop,
(meta_screen_update_showing_desktop_hint): rename and make not
static and access showing_desktop through the active workspace,
(queue_windows_showing): replace meta_display_list_windows() with
screen->active_workspace->windows,
(meta_screen_minimize_all_on_active_workspace_except): renamed
from meta_screen_minimize_all_except since it now only works on
the active workspace, (meta_screen_show_desktop,
meta_screen_unshow_desktop): access showing_desktop through the
active workspace
* src/screen.h (struct _MetaScreen): remove showing_desktop field,
(meta_screen_minimize_all_on_active_workspace_except): rename from
meta_screen_minimize_all_except,
(meta_screen_update)_showing_desktop_hint): export this function too
* src/window.c (maybe_leave_show_desktop_mode): access
showing_desktop through the active workspace and use new name for
meta_screen_minimize_all_on_active_workspace_except,
(window_should_be_showing): access showing_desktop through the
active workspace
* src/workspace.c (meta_workspace_new): initialize
workspace->showing_desktop, (meta_workspace_activate_with_focus):
add note that old can be NULL, update showing_desktop_hint if
different on this workspace than the previous one
* src/workspace.h (struct _MetaWorkspace): add showing_desktop
field
2004-10-13 Elijah Newren <newren@math.utah.edu>
Code cleanup
* src/window.c (is_in_dock_group, docks_at_end_cmp,
shuffle_docks_to_end): removed functions,
(meta_window_notify_focus): no need to call is_in_dock_group or
shuffle_docks_to_end because of the patch from #120100 that was
committed.
2004-10-13 Vincent Untz <vincent@vuntz.net>
Add a keybinding to launch a terminal
* src/keybindings.c: (handle_run_terminal): new function,
(error_on_generic_command): new function, (error_on_command): wrapper
around error_on_generic_command(), (error_on_terminal_command): new
function
* src/metacity.schemas.in: add run_command_terminal key
* src/prefs.[ch]: (meta_prefs_init): cache the terminal command and
register a gconf callback to update it, (change_notify): handle the
notification of terminal command changes, (meta_preference_to_string):
add the terminal command case, (update_terminal_command): new function,
(meta_prefs_get_terminal_command): new function,
(meta_prefs_get_gconf_key_for_terminal_command): new function
2.8.6
==
This is a stable release for Gnome 2.8.1.
Thanks to the Ken Harris, Kjartan Maraas, and the tireless efforts of
Elijah Newren for fixes in this release.
Fixes
* Ensure the correct window is focused when minimizing (Elijah)
* Fix keynav with mouse focus (Elijah)
* Fix several race conditions in window focusing (Elijah)
* Focus the top window when lowering by frame click (Ken)
* Fix some compiler warnings (Kjartan)
* Fix some valgrind-reported errors (Elijah)
* Fix some potential issues with autoraising windows (Elijah)
Translations
* en_CA(Adam Weinberger), it(Luca Ferretti)
2004-10-08 Elijah Newren <newren@math.utah.edu>
Fix middle-frame-click-to-lower focus inconsistency (#154601)
* src/core.c (meta_core_user_lower_and_unfocus): focus the default
window in all focus modes, not just click-to-focus (EnterNotify
events will not handle this case for sloppy and mouse focus)
* src/display.c (event_callback): replace window->has_focus with
window == display->expected_focus_window to avoid a race issue
2004-10-08 Elijah Newren <newren@math.utah.edu>
Alter the meaning of expected_focus_window; doesn't affect
current operation but assists in fixing some other bugs
(#154598)
* src/display.c (meta_display_focus_the_no_focus_window): set the
expected_focus_window to NULL.
* src/window.c (meta_window_notify_focus): don't NULL the
expected_focus_window when that window receives a FocusIn event
2004-10-04 Elijah Newren <newren@math.utah.edu>
* src/display.c (event_callback): if the root window gets focused,
set the focus to the default window; this fixes the
"focus-follows-mouse" behavior seen for click-to-focus mode after
cancelling log out (fixes#153220)
2004-10-04 Elijah Newren <newren@math.utah.edu>
Fix a variety of issues with autoraise (#134206)
* src/display.h: (struct _MetaDisplay): add an autoraise_window
parameter
* src/display.[hc] (meta_display_focus_the_no_focus_window): new
function, (meta_display_queue_autoraise_callback): new function,
(meta_display_remove_autoraise_callback): new function
* src/display.c (meta_display_open): intialize
display->autoraise_window too, (meta_display_close): remove any
pending autoraise callback, (window_raise_with_delay_callback):
clear out auto_raise->display->autoraise_window too,
(event_callback): call meta_display_queue_autoraise_callback
instead of having the code inline, call
meta_display_focus_the_no_focus_window to handle focusing that
window
* src/window.c (meta_window_focus): If there's a window with an
autoraise timeout that isn't the window being focused, remove the
autoraise timeout
* src/workspace.c (meta_workspace_focus_default_window): If no
autoraise timeout is queued for the given window then queue one
now, call meta_display_focus_the_no_focus_window to handle
focusing that window, (meta_workspace_focus_mru_window): call
meta_display_focus_the_no_focus_window to handle focusing that
window
2004-10-04 Elijah Newren <newren@math.utah.edu>
* src/display.c (event_callback): When no window becomes focused,
focus the default window instead of punting to the
no_focus_window. Also, change the warning to a verbose
message--this will happen frequently due to brain-damage in the X
protocol. (see #125492)
2004-10-04 Elijah Newren <newren@math.utah.edu>
Fix a variety of focus race conditions in all focus modes, or at
least make them harder to trigger (fixes#152000)
* src/core.[ch] (meta_core_user_lower_and_unfocus): add a
timestamp parameter; pass it along to
meta_workspace_focus_default_window
* src/display.[ch] (meta_display_get_current_time_roundtrip): new
function
* src/display.c (event_callback): pass a timestamp to the
meta_workspace_activate and meta_workspace_focus_default_window
function calls
* src/frames.c (meta_frames_button_press_event): pass a timestamp
to meta_core_user_lower_and_unfocus
* src/keybindings.c (handle_activate_workspace): pass a timestamp
to meta_workspace_activate, (process_workspace_switch_grab): pass
a timestamp to meta_workspace_focus_default_window and
meta_workspace_activate, (handle_toggle_desktop): pass a timestamp
to meta_workspace_focus_default_window,
(do_handle_move_to_workspace): pass a timestamp to
meta_workspace_activate_with_focus, (handle_workspace_switch):
meta_workspace_activate
* src/screen.c (meta_screen_new): pass a timestamp to
meta_workspace_activate
* src/window.c (meta_window_free): pass a timestamp to
meta_workspace_focus_default_window, (idle_calc_showing): don't
increment the focus sentinel here, (meta_window_minimize): pass a
timestamp to meta_workspace_focus_default_window,
(meta_window_client_message), pass a timestamp to
meta_workspace_focus_default_window
* src/workspace.h (meta_workspace_activate): add timestamp
parameter, (meta_workspace_activate_with_focus): add timestamp
parameter, (meta_workspace_focus_default_window): add timestamp
parameter
* src/workspace.c (meta_workspace_focus_mru_window): make this
function take a timestamp and use it for meta_window_focus or
XSetInputFocus, (meta_workspace_activate_with_focus): make this
function take a timestamp and pass it along to meta_window_focus
and meta_workspace_focus_default_window,
(meta_workspace_activate): make this function take a timestamp and
pass it to meta_workspace_activate_with_focus),
(meta_workspace_focus_default_window): make this function take a
timestamp, warn if its 0 but try to handle that case sanely, and
pass the timestamp on to meta_window_focus or
meta_workspace_focus_mru_window or XSetInputFocus
2004-09-22 Elijah Newren <newren@math.utah.edu>
* src/keybindings.c (process_workspace_switch_grab): Focus the
default window after the user dismisses the workspace switcher
popup (fixes#123803; note that an alternate fix was made
independently by David Baron for sloppy and mouse focus users)
2004-09-17 Elijah Newren <newren@math.utah.edu>
* src/workspace.c (meta_workspace_focus_mru_window): Don't focus a
window that is minimized (fixes#147947)
2004-09-15 Elijah Newren <newren@math.utah.edu>
Patch from Ken Harris in #135786 to focus a new default window
when lowering via middle-click on the frame.
* src/core.[hc], src/frames.c: rename meta_core_user_lower to
meta_core_user_lower_and_unfocus
* src/core.c (meta_core_user_lower_and_unfocus): if in
click-to-focus mode then also move the window to the back of the
mru list and focus the new default window for the active workspace
2004-09-15 Elijah Newren <newren@math.utah.edu>
Focus the no_focus_window if no suitable window is in the mru list
(should fix the almost contrived extra issue found in #147475)
* doc/how-to-get-focus-right.txt: We no longer need to lie about
only focusing panels upon explicit request.
* src/workspace.c: (meta_workspace_focus_top_window): removed this
function--it was more code than needed and was unreliable anyway,
(meta_workspace_focus_mru_window): if a suitable window isn't in
the mru list, focus the no_focus_window instead of calling
focus_top_window.
2004-09-15 Elijah Newren <newren@math.utah.edu>
Prevent focus inconsistencies by only providing one focus method
(fixes#151990)
* src/screen.c (meta_screen_show_desktop): remove call to
meta_workspace_focus_top_window (it was merely focusing a window
that was going to be hidden anyway, and likely the one that
already had focus)
* src/workspace.[hc]: remove meta_workspace_focus_mru_window and
meta_workspace_focus_top_window from workspace.h, make them static
functions in workspace.c
2004-09-15 Elijah Newren <newren@math.utah.edu>
Remove race condition for focus window choice on window close
followed by rapid mouse movement in sloppy and mouse focus modes
(fixes#152000)
* src/window.c (meta_window_free): Don't increment the focus
sentinel for windows being freed, (idle_calc_showing): don't
increment the focus sentinel for windows being minimized
2004-09-15 Elijah Newren <newren@math.utah.edu>
Fix unwanted loss of focus to the mouse window when using keynav
(fixes#101190)
* src/display.c (event_callback): Ignore EnterNotify events with
xcrossing.mode of either NotifyGrab or NotifyUngrab
2004-09-15 Elijah Newren <newren@math.utah.edu>
Focus correct window after minimizing via the tasklist (fixes
#128200; see also #107681)
* src/display.h (struct _MetaDisplay): track the
previously_focused_window
* src/display.c (meta_display_open): initialize
previously_focused_window
* src/window.c (meta_window_free): clear the
previously_focused_window if it's being freed,
(meta_window_client_message): if we get a request to minimize the
previously_focused_window and the focus_window is a dock or the
desktop, focus the default window, (meta_window_notify_focus):
update the previously_focused_window
2004-09-07 Elijah Newren <newren@math.utah.edu>
Add a new write-up on making window focus consistent (see #152004)
* doc/how-to-get-focus-right.txt: New document
* rationales.txt: Remove references to focus bugs, instead point
to doc/how-to-get-focus-right.txt
2004-08-29 Elijah Newren <newren@math.utah.edu>
* src/window.c (window_takes_focus_on_map): Disable
focus-stealing-prevention for now; there are still some issues and
hard code freeze is tomorrow...so this will have to wait until
Gnome 2.10.
2004-08-27 Havoc Pennington <hp@redhat.com>
* src/compositor.c (meta_compositor_new): disable NameWindowPixmap
stuff always for now, it seemed kind of busted
(paint_screen): don't grab the server during repaint, adds to the
speed, though only slightly.
* src/frames.c (meta_frames_set_window_background): factor out all
the set_background stuff to one function; disable setting
background to transparent, because it breaks existing themes. We
need to add a flag in the theme XML file to say "start me with a
transparent background"
2004-08-27 Elijah Newren <newren@math.utah.edu>
Prevent an assertion failure that can occur after increasing the
number of workspaces; also fix a warning and stacking order when a
window is denied focus (fixes#150615)
* src/window.c (meta_window_stack_just_below): the position of the
window should be set equal to that of the one we want to be below,
not 1 lower than that number
* src/workspace.c (maybe_add_to_list): new function to add
on_all_workspace windows to an mru_list, (meta_workspace_new):
call maybe_add_to_list for all windows on the screen in order to
initialize the mru_list
2004-08-26 Havoc Pennington <hp@redhat.com>
* src/frame.c: delete extra copy of find_argb_visual so things
compile
* src/compositor.c (HAS_NAME_WINDOW_PIXMAP): copy the
XCompositeNameWindowPixmap() stuff from xcompmgr, though I can't
say I really know what it's supposed to help with (painting the
window border?)
2004-08-26 Havoc Pennington <hp@redhat.com>
* src/frame.c, src/theme.c: couple of cosmetic tweaks from
resolving my local patch with the bugzilla patch from the 8-19
entry below
2004-08-26 Havoc Pennington <hp@redhat.com>
* configure.in: move the have_xrender variable initialization up
in the file since it can be set as part of composite check
2004-08-19 Havoc Pennington <hp@redhat.com>
Fixes from Rich Wareham
* src/display.h (struct _MetaDisplay): add render extension check
to the display
* src/display.c: check for render
* configure.in: don't build compositing manager by default, don't
want any nasty surprises; check for render separately from
compositing manager
* src/frame.c: use an ARGB visual when available for the window
frame, so we can be all cool-ass
2004-08-25 Elijah Newren <newren@math.utah.edu>
Make dialogs that Metacity shows follow focus-stealing-prevention
conventions. (fixes one issue in #149028; see comments 47-54)
* src/delete.c (delete_ping_reply_func,
delete_ping_timeout_func): Make callback functions take a
timestamp arg, (delete_ping_timeout_func): pass the timestamp to
metacity-dialog
* src/display.c (meta_display_ping_timeout): add a timestamp to
the call to the ping_timeout_func, (meta_display_ping_window,
process_pong_message): add a timestamp to the call to the
ping_reply_func
* src/display.h (MetaWindowPingFunc typedef): add a timestamp to
this function typedef
* src/keybindings.c (error_on_command): require a timestamp and
pass the timestamp on to metacity-dialog, (handle_run_command):
pass a timestamp to error_on_command
* src/metacity-dialog.c (copy_of_gdk_x11_window_set_user_time):
new function (temporary; only for use while using gtk+-2.4),
(kill_window_question, warn_about_no_sm_support,
error_about_command): make these functions take a timestamp and
call copy_of_gdk_x11_window_set_user_time, (main): require the
first two args to the program to be "--timestamp <timestamp>"
* src/session.c (warn_about_lame_clients_and_finish_inter): pass a
timestamp of 0 to metacity-dialog to prevent focus (it's a popup
not generated by and kind of user request).
Fri Aug 20 12:54:12 2004 Soeren Sandmann <sandmann@daimi.au.dk>
* src/display.c (meta_display_end_grab_op): Move wireframe code
before grab is released to prevent endless loops with fullscreen
windows.
2004-08-18 Havoc Pennington <hp@redhat.com>
* src/display.h (struct _MetaDisplay): track the last_xor_rect
separately from the current window size, and then use that to
paint the wireframe including the frame, and taking into
account shaded windows.
* src/window.c (meta_window_get_xor_rect): new function to compute
the xor rect; it is not really 100% right, because it uses the
frame dimensions from the window at the start of the move/resize.
But probably won't break in practice.
2004-08-17 Christian Rose <menthos@menthos.com>
* configure.in: Added "bs" to ALL_LINGUAS.
* po/bs.po: Added Bosnian translation by
Kemal Sanjta <gomez@lugzdk.ba>.
2004-08-15 Rob Adams <readams@readams.net>
* src/windows.c (meta_window_update_struts): use height and
top/bottom struts to compute gap (copy/paste bug).
2004-08-15 Rob Adams <readams@readams.net>
* src/window.c (meta_window_update_struts): Allow struts larger
than 1/2 the screen width/height, as long as there's a minimum
sized gap between them. Patch from Bill Haneman <billh@gnome.org>
for bug #144126.
Mon Aug 9 05:38:33 2004 Soeren Sandmann <sandmann@daimi.au.dk>
* src/effects.c (graphics_sync): New function.
* src/effects.c (effects_draw_box_animation_timeout): Use it here
to synchronize with the hardware between each frame.
2004-08-08 Rob Adams <readams@readams.net>
* src/window.c (meta_window_move_resize_internal): Add #ifdef
around XSYNC code; fixes compile problem if XSYNC is disabled.
Path for #149314 from Peter O'Shea and independently Mike Castle.
Sun Aug 8 14:20:00 2004 Soeren Sandmann <sandmann@daimi.au.dk>
* src/frame.c (meta_frame_set_screen_cursor): Flush after setting
cursor. (Rest of #149413).
2004-08-07 Elijah Newren <newren@math.utah.edu>
* src/display.c (event_callback): activating the current workspace
should be a no-op. This prevents a race condition in focus window
choice when activating a window via the taskbar. Fix for #149589.
2004-08-07 Elijah Newren <newren@math.utah.edu>
* window.c, window.h: Revert Rob's 2004-07-31 patch that ignored
net_wm_user_time when unminimizing a window
* window.c (meta_window_activate): If a nonzero timestamp is
passed, update the window's net_wm_user_time accordingly. (see
comments 102-108 of bug 118372)
2004-08-07 Rob Adams <readams@readams.net>
Remove some extraneous items that could sometimes appear in the
window menu. Fix for #144493.
* src/menu.c (menuitems): Change the second separator to key on
whether there are any workspaces.
(meta_window_menu_new): use NULL label instead of 0 op to identify
separator
* src/window.c (meta_window_show_menu): Change the conditions on
the directions to take into account "holes" in the workspace
layout and also only set META_MENU_OP_WORKSPACES when there's more
than one workspace.
2004-08-06 Elijah Newren <newren@math.utah.edu>
* src/display.c (event_callback): Focusing a window upon unshowing
the desktop in various ways (panel applet or keybinding) was
inconsistent for sloppy and click focus modes. Fix this by
calling meta_workspace_focus_default_window after unshowing the
desktop via a _NET_SHOWING_DESKTOP message. (resolves#149543)
2004-08-06 Elijah Newren <newren@math.utah.edu>
* src/workspace.c (meta_workspace_focus_default_window): prevent
keyboard from "getting locked" upon workspace switch, by making
sure that the no_focus_window has focus if no other window does.
(fixes#147475)
2004-08-05 Elijah Newren <newren@math.utah.edu>
Have newly mapped windows that are denied focus appear after the
focused window in the alt-tab list. This allows one to switch to
such a window with a single alt-tab press.
* src/window.c (ensure_mru_position_after): new function,
(meta_window_show): If newly mapped window is denied focus, call
ensure_mru_position_after to make the window appear after the
focus window in the mru list.
2004-08-05 Elijah Newren <newren@math.utah.edu>
* src/window.c (meta_window_stick): prepend window to mru list
instead of appending, since making the window sticky should imply
that it is the most recently used, not the least recently. (fixes
#149369)
2004-08-02 Elijah Newren <newren@math.utah.edu>
Fix some bugs (reported in #120100) regarding the focus window
when using the workspace switcher.
* src/display.c (event_callback): When switching workspaces due to
a _NET_CURRENT_DESKTOP message, make sure to focus the default
window as well.
* src/workspace.c (meta_workspace_focus_default_window,
meta_workspace_focus_mru_window): Make DOCK or DESKTOP windows
have lower priority than others when choosing a window to focus.
(For the former function, this means don't focus them at all; for
the latter, this means only focus them (via the
meta_workspace_focus_top_window call) if no other mru window can
be found.)
2004-07-31 Rob Adams <readams@readams.net>
Fix bug that caused windows to not be focused on unminimizing
because of user time support.
* src/window.c (meta_window_new_with_attrs): initialize
focus_despite_user_time bit
(window_takes_focus_on_map): focus if focus_despite_user_time
despite user time, interestingly enough
(meta_window_show): reset focus_despite_user_time after showing
* src/window.h (_MetaWindow): add focus_despite_user_time bit
2004-07-31 Rob Adams <readams@readams.net>
Fix some support for EWMH hints, and fix USER_TIME support to
include the DEMANDS_ATTENTION hint. Also includes some code for
implementing _NET_RESTACK_WINDOW and _NET_MOVERESIZE_WINDOW, but
this is disabled pending feature thaw.
* COMPLIANCE: update with new information
* src/display.c (meta_display_open): add new hints to list
* src/display.h (_MetaDisplay): Add new atoms to struct
* src/screen.c (set_supported_hint): update the list of support
hints.
(set_desktop_viewport_hint): new function sets the viewport hint
to (0,0) as required by the spec for WMs with no viewport support.
(set_desktop_geometry_hint): new function to set the desktop size
hint to the size of the display, since we don't implement large
desktop support, as required by the spec.
(meta_screen_resize): update the geometry hint on screen resize
* src/window.c (meta_window_new_with_attrs): Initialize
demands_attention state
(set_net_wm_state): Set demands_attention hint in the window state
(meta_window_show): If we don't pop up a window because of
USER_TIME, set DEMANDS_ATTENTION on the window.
(meta_window_focus): When a window receives focus, remove
DEMANDS_ATTENTION hint
(meta_window_client_message): Allow other apps to set
DEMANDS_ATTENTION on a window. Also, if the _NET_ACTIVE_WINDOW
hint includes a timestamp, use it.
(update_net_wm_state): Read DEMANDS_ATTENTION state also
* src/window.h (_MetaWindow): add wm_state_demands_attention bit.
2004-07-22 Rob Adams <readams@readams.net>
* src/metacity.schemas.in: Add trailing quotes to keybinding
explanation text. Patch from Emil Soleyman-Zomalan.
2004-06-24 Elijah Newren <newren@math.utah.edu>
Make choice of focus window be consistent for each focus mode.
Fixes#135810.
* src/delete.c: (meta_window_delete): In some #if 0'ed code,
replace meta_workspace_focus_mru_window with
meta_workspace_focus_default_window (just in case the code becomes
un-#if 0'ed out).
* src/screen.c, src/screen.h: Change
meta_screen_focus_mouse_window to meta_screen_get_mouse_window,
and don't focus the window when found but rather return it.
* src/window.c: (meta_window_free, meta_window_minimize): replace
meta_workspace_focus_mru_window with
meta_workspace_focus_default_window.
* src/workspace.c: (meta_workspace_focus_default_window): Focus
appropriately for the given focus method:
click-to-focus: focus MRU window (== toplevel window)
sloppy focus: focus the window under the pointer if there is
such a window, otherwise focus the mru window
mouse focus: focus the window under the pointer if there is
such a window, otherwise don't focus anything
2004-06-24 Elijah Newren <newren@math.utah.edu>
* src/window.c: Avoid a race condition on the choice of window to
focus after the previously focused window gets closed or
minimized. Fixes#131582.
2004-06-24 Elijah Newren <newren@math.utah.edu>
* src/metacity.schemas.in: make naming for "move a window"/"move
the window"/"move window" more consistent. Patch from Michael
Terry for #142235.
2004-06-24 Elijah Newren <newren@math.utah.edu>
* src/session.c: Change meta_warning to meta_topic on failure to
connect to a session manager. Fixes#136218.
2004-06-17 Elijah Newren <newren@math.utah.edu>
Add support for _NET_WM_USER_TIME
* src/display.c:
(meta_display_open): Add _NET_WM_USER_TIME to atom_names[],
(event_callback): Manually set _NET_WM_USER_TIME upon KeyPress
(doesn't work since keyboard isn't grabbed) and ButtonPress (does
work), this is just a fallback for applications that don't update
this themselves.
* src/display.h: (struct _MetaDisplay): Add atom_net_wm_user_time field
* src/screen.c: (meta_screen_apply_startup_properties): Check for
TIMESTAMP provided from startup sequence as well.
* src/stack.c:
s/meta_window_set_stack_position/meta_window_set_stack_position_no_sync/,
(meta_window_set_stack_position): New function which calls the
meta_window_set_stack_position_no_sync function followed immediately
by calling meta_stack_sync_to_server.
* src/window-props.c:
(init_net_wm_user_time), (reload_net_wm_user_time): new functions,
(reload_wm_hints): also load atom_net_wm_user_time
* src/window.c:
new XSERVER_TIME_IS_LATER macro (accounts for timestamp wraparound),
(meta_window_new_with_attrs): add timestamp attributes,
(window_takes_focus_on_map): use TIMESTAMP from startup
notification and _NET_WM_USER_TIME to decide whether to focus new
windows,
(meta_window_show): if app doesn't take focus on map, place it
just below the focused window in the stack
(process_property_notify): check for changes to _NET_WM_USRE_TIME,
(meta_window_stack_just_below): new function
* src/window.h:
(_MetaWindow struct): new fields for initial_timestamp,
initial_timestamp_set, net_wm_user_time_set, and net_wm_user_time,
(meta_window_stack_just_below): new function
2004-06-21 Anders Carlsson <andersca@gnome.org>
* src/common.h:
* src/menu.c: (menu_closed), (activate_cb):
* src/window.c: (menu_callback):
Add a timestamp argument to menu functions and
use it in meta_window_delete.
Sat Jun 19 02:21:08 2004 Soeren Sandmann <sandmann@daimi.au.dk>
Fix bug 143333, support for update counter spec, and 109362,
schedule compensation events when events are ignored.
* src/display.c (meta_display_open): Add _NET_WM_SYNC_REQUEST and
_NET_WM_SYNC_REQUEST_COUNTER atoms. Remove the old
METACITY_SYNC_COUNTER stuff.
(meta_display_begin_op): Setup the sync counter
* src/xprops.c, src/xprops.h, src/window-props.c, src/display.h:
Add new atoms.
* src/window.c (send_sync_request): new function.
(meta_window_move_resize_internal): send a sync request before
resizing.
(check_move_resize_frequence): Rework logic to also check the SYNC
case. If an event is ignored return the remaining time.
(update_resize_timeout): Timeout that gets called when a
compensation event is scheduled.
(uddate_resize): schedule compensation events when an event is
ignored.
(meta_window_handle_mouse_grap_op_event): When an alarm is
received and sync was turned off, turn it back on.
* src/window.h (struct MetaWindow) Add some variables
2004-06-04 Jeff Waugh <jdub@perkypants.org>
* src/metacity.schemas.in: Set titlebar_uses_system_font = false. The
previous default was almost violent in its lack of appreciation for
human beings. In fact, this entire setting should probably be removed, but
for now, let's just fix the default. Permission granted by Havoc.
2004-05-02 Rob Adams <readams@readams.net>
* src/metacity-dialog.c (warn_about_no_sm_support): make the no sm
support warning dialog resizable, since the default GTK warning
dialog not has default not resizable. Fix for #141672 from
Olivier Crete.
2004-04-29 Rob Adams <readams@readams.net>
* src/prefs.c (change_notify): Add a value type check for the
visual bell/audible bell gconf settings. Patch from Jarrod
Johnson for #141409.
2004-04-19 Mark McLoughlin <mark@skynet.ie>
Syncing across this change from libwnck.
Patch from Neil Muller <neil@dip.sun.ac.za> in bug #133979.
* src/iconcache.c: (find_largest_sizes), (find_best_size):
Don't down-size nitems from a gulong to an int. Fixes a
crash with enlightenment, apparently.
2004-03-01 Rob Adams <readams@readams.net>
* src/stack.c (compute_layer): don't promote due to transiency; we
handle that elsewhere now.
(ensure_above): perform layer promotion here as well as stack
position promotion. Note that this means that we need to do stack
constraints now on layer change now.
(get_maximum_layer_of_ancestor): remove function
(max_layer_func): remove function
(MaxLayerData): remove struct
2004-02-27 Rob Adams <readams@readams.net>
* src/window.c (meta_window_notify_focus): only move on MRU list
if the window belongs on the workspace, since the FocusIn event
could be for a window whose workspace we've since switched away
from. Possible fix for #122016.
* src/workspace.c (meta_workspace_contains_window): search for the
workspace in window->workspaces rather than the window in
workspace->windows. Since the number of workspaces is at most 36,
this is a O(1) lookup rather than a O(n) lookup. Sorry; couldn't
resist.
2004-02-27 Rob Adams <readams@readams.net>
* src/metacity.schemas.in: Change
move_to_workspace_left/right/up/down keybindings to
<Control><Alt><Shift> arrow to avoid conflicting with new
keybindings in spacial nautilus.
2004-02-27 Rob Adams <readams@readams.net>
Handle layer promotion of transient descendants of layer-promoted
windows to also be layer promoted, using a simple iterative
algorithm.
* src/stack.c (compute_layer): change name to promote_layer, and
convert to simply perform any necessary layer promotion without
computing the standalone layer.
(max_layer_func): use window->layer instead of
get_standalone_layer
(get_maximum_layer_of_ancestor): use window->layer instead of
get_standalone_layer
(meta_stack_ensure_sorted): implement iterative algorithm,
explained in a long comment.
* src/window.h: add a tmp_layer field used by stack.c for
determining if the stack is dirty or not, since maintaining this
information in meta_stack_ensure_sorted is no longer practical.
2004-02-23 Rob Adams <readams@readams.net>
Add my copyright notice to a number of files on which it should
already exist.
* src/window.c (meta_window_notify_focus): modify code to move to
front of MRU list so that we can have an assert that it was there
in the first place. This code may be causing some crashes. See
#131196.
2004-02-22 Christian Rose <menthos@menthos.com>
* configure.in: Added "en_CA" to ALL_LINGUAS.
* po/en_CA.po: Added Canadian English translation by
Adam Weinberger <adamw@FreeBSD.org>.
2004-02-19 Rob Adams <readams@readams.net>
* src/prefs.h: remove trailing comma in MetaKeyBindingAction enum.
Fix for #134868 thanks to bugzilla-gnome@thewrittenword.com.
2004-02-14 Rob Adams <readams@readams.net>
If we're moving a window and receive a _NET_CURRENT_DESKTOP
message indicating a workspace switch, bring along the drag window
to the new workspace, solving a potentially weird bug where the
window would be lost on the old workspace. This also makes it
possible to implement edge flipping in an external program with
just a few lines of code. Patch for #131630 from ed@catmur.co.uk.
* src/keybindings.c (switch_to_workspace): remove function -- no
longer needed.
(handle_activate_workspace): call meta_workspace_activate instead
of switch_to_workspace
* src/workspace.c (meta_workspace_activate_with_focus): if we're
in a move grab op, bring along the drag window.
2004-02-14 Rob Adams <readams@readams.net>
* configure.in: Add configure option to not even try using
xinerama, to make metacity buildable on systems with no shared
library version of the xinerama libraries. Patch for #134203 from
Julio M. Merino Vidal.
2004-01-17 Rob Adams <readams@readams.net>
* src/metacity.schemas.in: Default binding removed for
toggle_shaded, since we don't have anything in the graphical UI
for it any more.
2004-01-17 Rob Adams <readams@readams.net>
* src/window.c (meta_window_show_menu): Don't show
left/right/up/down if a window is sticky. Make "On Top"
insensitive for docks, splash screens, and desktops since it has
no effect anyway.
2004-01-10 Rob Adams <readams@readams.net>
* src/metacity.schemas.in: update default
action_double_click_titlebar to be toggle_maximize instead of
toggle_shade. See #131126.
2004-01-12 Rob Adams <readams@readams.net>
* src/constraints.c (meta_window_constrain): if we maximize after
placement, and the window is too big to fix in the work area,
define a sane saved_rect approximately with dimensions
three-quarters approximately three quarters the size of the work
area. This avoids the problem where large windows would
unmaximize and actually get bigger. See #93590.
2004-01-09 Thomas Fitzsimmons <fitzsim@redhat.com>
Add _NET_FRAME_EXTENTS and _NET_REQUEST_FRAME_EXTENTS.
* src/display.c: include xprops.h
(process_request_frame_extents): new function
(meta_display_open): add _NET_FRAME_EXTENTS and
_NET_REQUEST_FRAME_EXTENTS atoms
(event_callback): handle frame extents message
* src/display.h (struct _MetaDisplay): add atom_net_frame_extents
and atom_net_request_frame_extents
* src/theme.c (meta_pango_font_desc_get_text_height): make font_desc
parameter const
* src/ui.c: include prefs.h
(meta_ui_theme_get_frame_borders): new function
* src/window.c (update_net_frame_extents): new function
(meta_window_move_resize_internal): update frame extents
property when frame geometry changes
* src/screen.c (set_supported_hint): add atom_net_frame_extents
and atom_net_request_frame_extents
2003-01-04 Rob Adams <readams@readams.net>
Maintain the button grab for sloppy and mouse focus all the time.
This fixes a number of problem introduced by trying to drop the
grab; we now do this only for click to focus mode. This has the
unfortunate effect that #102209 reappears for sloppy and mouse
focus, but this seems unavoidable, because of limitations in the X
protocol. See #115072.
* src/display.c (meta_display_grab_focus_window_button): #if 0 the
section on not grabbing unless in click-to-focus mode.
* src/window.c (meta_window_notify_focus): drop focus button grab
on FocusIn and acquire it on FocusOut only when in click-to-focus
mode.
2003-12-25 Havoc Pennington <hp@redhat.com>
* src/compositor.c (meta_compositor_process_event): change to
track all children of the root window, not only mapped children;
this keeps us from losing track of the stacking order
* src/display.c (event_callback): don't do any of the compositor
event handling inline, do it all in compositor.c
2003-12-20 Rob Adams <readams@readams.net>
Reorganize the window menu according to discussion on #110904.
The workspace name mnemonic chunk of the patch is thanks to
Jonathan Blandford.
* src/common.h: add MENU_OP_ABOVE, MENU_OP_UNABOVE, MENU_UP_MOVE_TO_*
menu ops.
* src/core.c (meta_core_get_menu_accelerator): add accelerator for
the new menu ops.
* src/menu.c: add checked attribute in _MenuItem struct to display
a checkmark next to a menu item. Add the new menu items to
menuitems.
(get_workspace_name_with_accel): Add mnemonics even to renamed
workspaces.
(menu_item_new): provide support for the checked attribute
(meta_window_menu_new): construct new submenu for workspace
switching.
* src/window.c (menu_callback): implement support for the new menu
ops.
(meta_window_show_menu): don't use the OP_*SHAPE operations, and
compute which of the OP_MOVE_TO_* ops should be used for the
current workspace and workspace layout. Add the OP_*ABOVE
operations.
2003-12-17 Rob Adams <readams@readams.net>
* src/display.c (meta_display_open): initialize
grab_wireframe_active to FALSE. Fix for #128090.
2003-12-17 Rob Adams <readams@readams.net>
* src/tabpopup.c (meta_ui_tab_popup_new): Don't try to call
utf8_strndup on a null title for an entry. Fix for #128566.
* src/workspace.c (meta_workspace_free): Call g_list_free on the
mru_list, since with sticky windows that MRU list could well not
be emtpy. See #122016.
2003-12-13 Rob Adams <readams@readams.net>
* src/window.c (meta_window_new_with_attrs): set on_all_workspaces
in all cases _before_ adding to the workspaces, so that windows
initially on all workspaces are added correctly to the MRU lists.
Fix for #120907.
* src/workspace.c (meta_workspace_add_window): handle sticky
windows so that we add to add mru lists if needed
(meta_workspace_remove_window): handle sticky windows so that they
are removed from all mru lists if needed.
2003-12-12 Havoc Pennington <hp@redhat.com>
* src/window.c (meta_window_free): unstick window to get it out of
mru_list it should not be in; assert that window has been removed
from all mru_list. Perhaps fixes#122016 crash.
2003-11-24 Havoc Pennington <hp@redhat.com>
* src/display.c (meta_display_begin_grab_op): add an event_serial
argument and use it when the pointer is already grabbed
automatically on the button press. May fix bug #126871
2003-11-23 Havoc Pennington <hp@redhat.com>
* src/compositor.c: move xcompmgr code in here (minus drop
shadows), untested since Keith's server just crashes at the
moment. "It compiles"
2003-11-20 Havoc Pennington <hp@redhat.com>
* src/window.c (meta_window_new_with_attrs): new function
* src/display.c, src/screen.c: create the compositor and feed
windows and events to it
2003-11-16 Rob Adams <readams@readams.net>
Create COMPLIANCE document describing metacity specification
compliance. Right now gives detailed EWMH compliance; still need
to add ICCCM compliance information. Also some minor fixes to
bring metacity into compliance on some points.
* COMPLIANCE: new file
* src/display.h, src/display.c (meta_display_open),
src/screen.c (set_supported_hint): add
atom_net_wm_action_fullscreen and atom_net_wm_action_minimize
* src/window.c (set_allowed_actions_hint): some fixes to which
hints to set and add fullscreen and minimize.
2003-11-16 Rob Adams <readams@readams.net>
* src/window.c (meta_window_notify_focus): add paranoia check to
make sure a window is really on a workspace before inserting it at
the beginning of the MRU list. Maybe there's a race condition
with focusing and workspace switching. Hopefully a fix for #122016.
2003-11-15 Havoc Pennington <hp@redhat.com>
* src/main.c (main): fix warning
* src/compositor.c: add a new file to contain compositing manager
functionality; not yet implemented at all.
2003-11-15 Rob Adams <readams@readams.net>
Inherit visual from frame window so that metacity will work with
the new compositing manager extension work by Keith on
freedesktop.org, so that ARGB windows can be full
alpha-transparent without a metacity frame getting drawn in the
background. In the long term, we need to actually set alpha
values when drawing the frame so that it will really work; this is
a stopgap solution. Patch from Keith Packard; see Bug 126875.
* src/frame.c (meta_window_ensure_frame): pass client visual to
frame.
* src/ui.[ch] (meta_ui_create_frame_window): add new xvisual
parameter and use it to create new window.
2003-11-15 Rob Adams <readams@readams.net>
* src/window.c (update_net_wm_type): don't set window->type_atom
here so that the type-inference code will actually be called. Fix
for #126873 from Keith Packard.
2003-11-08 Rob Adams <readams@readams.net>
* src/window.c (meta_window_move_resize_internal): configure frame
first if we grow more than we shrink combined in both dimensions.
Patch from Soren Sandmann for #108925.
2003-11-07 Rob Adams <readams@readams.net>
* src/place.c (meta_window_place): use maximize_after_placement to
automaximize in meta_window_place; avoids a problem with not
recalculating the frame geometry after auto-maximizing.
2003-11-07 Rob Adams <readams@readams.net>
* src/window.c (window_should_be_showing): show the window if it's
a transient of a dock or desktop, since otherwise such windows are
invisible in show desktop mode. Fix for #124648.
2003-11-07 Rob Adams <readams@readams.net>
* src/main.c (main): Try harder to find a theme in the event that
the theme in the preference cannot be found. Patch from Marcin
Krzyzanowski. See #125815.
* src/place.c (meta_window_place): use "visual" centering for
dialog placement and clip new dialogs to an xinerama workspace.
Fix for #118336.
2003-10-30 Havoc Pennington <hp@redhat.com>
* src/menu.c (meta_window_menu_new): patch to avoid creating
stick/unstick menu items when only one workspace, bug #116563
from Michael Terry
2003-10-25 Havoc Pennington <hp@redhat.com>
* src/window.c (meta_window_notify_focus): if a window is focused
which is not either a dock or a transient in the same group as a
dock, shuffle all dock/desktop windows to the end of the MRU list
so they won't annoyingly get focus all the time. #123816
2003-10-13 Havoc Pennington <hp@redhat.com>
In the "prefs cause code complexity" department, here's a "sloppy
focus die die die" kind of moment.
* src/display.c (meta_display_grab_focus_window_button): don't
grab in sloppy focus mode, since we were dropping the grab on
window enter anyway this just removes races from the current
behavior.
* src/display.c (prefs_changed_callback): ungrab/grab on focus
mode changes, since we treat sloppy and click differently.
2003-10-12 Havoc Pennington <hp@redhat.com>
Merge reduced_resources mode patch from the branch. Offers
wireframe and no-animations.
* src/window.c (implement_showing): no animation if we are
in reduced resources mode
* src/prefs.c: add REDUCED_RESOURCES pref
* src/window.c (meta_window_update_keyboard_resize): fix to
modify grab_anchor_window_pos to grab_wireframe_rect if
appropriate instead of window->rect
* src/display.h (struct _MetaDisplay): add grab_start_serial used
to avoid responding to events that occurred prior to the grab
initialization.
Still broken in various ways, specifically EnterNotify that
occurred prior to XGrabPointer is processed as if it occurred
after.
* src/window.c (meta_window_update_keyboard_move): add this
instead of meta_window_warp_pointer() crack
* src/effects.c (meta_effects_update_wireframe): draw a kind of
grid for the wireframe, instead of just a rectangle, like twm
* src/screen.c (meta_screen_new): line width of 3 for the XOR gc
"Reduced resources" mode based on wireframe patch from
Erwann Chenede. Still pretty buggy.
* src/keybindings.c (process_keyboard_move_grab)
(process_keyboard_resize_grab): add gruesome wireframe hacks
* src/display.c (meta_display_end_grab_op): end wireframe
(meta_display_begin_grab_op): begin wireframe
* src/effects.c (meta_effects_end_wireframe)
(meta_effects_update_wireframe, meta_effects_begin_wireframe):
routines to draw the wireframe stuff
* src/window.c (window_should_be_showing): hide window when
doing wireframe, commented out as it breaks grab
* src/window.c (meta_window_refresh_resize_popup): handle wireframe
* src/screen.c (meta_screen_new): create a screen->root_xor_gc
for use in drawing wireframes
* src/frames.c (meta_frames_push_delay_exposes): repaint
everything before we delay
2003-10-11 Havoc Pennington <hp@pobox.com>
* src/display.c (meta_display_begin_grab_op): initialize
display->grab_have_pointer to FALSE, previously I think you could
get a case where we didn't have the grab and thought we did.
Bugs were reported with this happening. Of course we still have
the "why did the grab fail" problem, but it should be less
noticeable with this fixed.
2003-10-06 Rob Adams <readams@readams.net>
* src/constraints.c (constraint_onscreen_*_func): disable onscreen
resize constraints for right, left, and bottom, since there is no
way to violate onscreen constraints by resizing in these
directions and the code to implement the constraints made some
incorrect assumptions. Fix for #120701, #120756, #123165,
#123631, #123838.
2003-09-30 Havoc Pennington <hp@redhat.com>
* src/window.c (meta_window_queue_move_resize): add the moveresize
idle at META_PRIORITY_RESIZE so it runs before GTK does any
drawing, may fix bug #109211 (seem to for me)
* src/ui.h (META_PRIORITY_RESIZE): add this between GTK
resize/redraw priorities
* src/display.c (meta_display_queue_retheme_all_windows): remove
some debug spew from meta_warning
2003-07-28 Rached Ben Mustapha <rached@benmur.net>
Fix bug #118428
* src/window.c (redraw_icon): Also redraw window icon if the window
is not mapped but its frame is.
(idle_update_icon): Unset the window->update_icon_queued flag.
2003-09-29 Havoc Pennington <hp@redhat.com>
* src/tabpopup.c (meta_ui_tab_popup_new): put a random cap on
number of characters in the title of each window, bug #109301
2003-09-29 Havoc Pennington <hp@redhat.com>
* src/wm-tester/test-size-hints.c: a little program to test size
hints, for now just a 0x0 min size to verify bug #113320
2003-09-29 Havoc Pennington <hp@redhat.com>
* src/async-getprop.c (async_get_property_handler): attempt to fix
this to return the data as an array of long even on 64-bit as with
XGetWindowProperty() breakage, bug #114035, credit to Gwenole
Beauchesne for tracking down.
2003-09-29 Havoc Pennington <hp@redhat.com>
* src/xprops.c (cvtINT16toInt): fix the 64-bit check not to use
macros from the X tree that don't get set
* configure.in: check for sizes of various types
2003-09-29 Havoc Pennington <hp@redhat.com>
* src/delete.c (meta_window_delete): don't move the focus after
you click the close button on a window. bug #108706
2003-09-29 Havoc Pennington <hp@redhat.com>
* src/main.c (find_accessibility_module): fix warnings (one was a
real bug)
* src/ui.c (meta_gdk_pixbuf_get_from_pixmap): fix warning that
probably explains remaining crash on bug #116923. Jeez, need to
use -Werror here or something.
Fix#103575, spawn child processes on proper screen.
* src/keybindings.c (error_on_command): pass --screen to
metacity-dialog
(handle_run_command): launch user command with DISPLAY reflecting
the screen you launch it from
* src/delete.c (delete_ping_timeout_func): pass --screen to
metacity-dialog
2003-09-26 Havoc Pennington <hp@redhat.com>
* src/display.c (event_callback): when focus on root window
becomes None, set it to something other than None so keybindings
keep working and print a warning about how some application sucks.
#84564
(event_callback): Fix debug spew to print focus event details
properly
(meta_display_open): when setting initial focus, always use
RevertToPointerRoot and fix the focus if it's None or PointerRoot
2003-09-26 Padraig O'Briain <padraig.obriain@sun.com>
* src/Makefile.am: Add -DMETACITY_LIBDIR to support loading of modules
* src/main.c: Add functions find_accessibility_module,
accessibility_invoke_module and accessibility_invoke
(main); Check whether GConf accessibility key is true and if so
load accessibility modules. This code is based on the libgnome code.
src/tabpopup.c (meta_ui_tab_popup_new): Set accessible role of
accessible for label containing window name to STATUSBAR so
AT can be aware of window name.
This fixes bug #120025
2003-09-22 Taneem Ahmed <taneem@bengalinux.org>
* configure.in: Added "bn" to ALL_LINGUAS.
* po/bn.po: Added Bangla translation by Dr Anirban Mitra
of Ankur group <gnome-translation@bengalinux.org>.
2003-09-20 Åsmund Skjæveland <aasmunds@fys.uio.no>
* ChangeLog: Corrected my e-mail address, and changed to the
correct charset (utf-8). Thank you, Emacs.
2003-09-20 Rob Adams <readams@readams.net>
Fix bug where multiple entries could appear in MRU lists, or no
entry when sticking/unsticking windows. Fix for #122016
* src/window.c (meta_window_stick): use window->screen->workspaces
instead of window->workspaces.
(meta_window_unstick): use window->screen->workspaces instead of
window->workspaces.
2003-09-19 Rob Adams <readams@readams.net>
Fix a bug with partial-width panel struts caused by incorrect
computation of rectangle widths, and another when using different
screen resolutions on xineramas. See #122404. Also fix a crash
bug with the MRU list when sticking and unsticking windows. See
#120809.
* src/constraints.c (get_outermost_onscreen_positions): Fix
off-by-one error with partial-width struts.
* src/window.c (meta_window_update_struts): Fix off-by-one error
with partial-width struts.
(meta_window_stick): assign back to GList after g_list_append
(meta_window_unstick): assign back to GList after g_list_append
* src/workspace.c (ensure_work_areas_validated): For right and
bottom struts, compute strut relative to root window and not to
xinerama edge in compliance with EWMH recommendations.
2003-08-29 Rob Adams <robadams@ucla.edu>
* src/ui.c (meta_gdk_pixbuf_get_from_pixmap): harden against null
return from gdk_pixmap_foreign_new. Fix for #116923.
2003-08-20 Rob Adams <robadams@ucla.edu>
Complete the transition to using the MRU window as the default
focus window instead of the topmost window; fixes a number of
problems with sloppy focus and utility windows. See #112031.
* src/window.c (meta_window_free): call
meta_workspace_focus_mru_window
(meta_window_minimize): call meta_workspace_focus_mru_window
2003-08-20 Rob Adams <robadams@ucla.edu>
* src/constraints.c (meta_window_constrain): do northwest resize
when maximizing and fullscreening to avoid potential "off-by-one"
problems.
2003-08-19 Rob Adams <robadams@uclu.edu>
* src/stack.c (get_standalone_layer): put windows with
wm_state_below at the bottom. Make this higher priority than full
screen layer; see #120238.
2003-08-18 Rob Adams <robadams@ucla.edu>
* src/constraints.c (meta_window_constrain): recalculate frame
geometry if the window gets maximized after placement, since it's
likely to change. Fix for #120117.
2003-08-17 Ray Strode <halfline@hawaii.rr.com>
* src/delete.c (meta_window_delete): Use MRU list to find focusing
window after a window is deleted instead of using top window. Fix
for #108643.
2003-08-16 Havoc Pennington <hp@pobox.com>
Patch from Soeren Sandmann #108926 to improve opaque resize
* src/frame.c (meta_window_ensure_frame): new function
* src/ui.c (meta_ui_create_frame_window): new function to create
a frame with GDK, so that GDK's invalidation etc. work properly
2003-08-15 Rob Adams <robadams@ucla.edu>
* src/constraints.c (meta_window_constrain): move to upper left
corner since we're resizing/moving instead of moving/resizing.
Fix for #119988.
2003-08-15 Ray Strode <halfline@hawaii.rr.com>
Changed MRU list to be per workspace instead of per display, so
sticky windows don't hijack the window focus after workspace
switching (Bug #97635).
* src/delete.c (meta_window_delete): Use
meta_workspace_focus_top_window instead of
meta_screen_focus_top_window.
* src/display.c (meta_display_open): Stop using display->mru_list.
(find_tab_forward):
(find_tab_backward):
(meta_display_get_tab_list): Use workspace->mru_list instead of
display->mru_list and remove unneeded calls to
meta_window_visible_on_workspace
* src/display.h: Remove mru_list from MetaDisplay
* src/keybindings.c (handle_toggle_desktop): Use
meta_workspace_focus_top_window instead of
meta_screen_focus_top_window.
* src/screen.c (meta_screen_focus_top_window):
(meta_screen_focus_default_window): Remove functions.
(meta_screen_show_desktop): Use meta_workspace_focus_top_window
instead of meta_screen_focus_top_window.
* src/screen.h: Remove meta_screen_focus_top_window and
meta_screen_focus_default_window declarations.
* src/window.c (meta_window_new): Stop using display->mru_list.
(meta_window_free): Use meta_workspace_focus_top_window
instead of meta_screen_focus_top_window and stop using
display->mru_list.
(meta_window_stick): Add sticky window to all workspace MRU lists.
(meta_window_unstick): Remove non-sticky window from the workspace
MRU lists it doesn't belong in.
(meta_window_notify_focus): Move newly focused window to the front
of active workspace's MRU list.
* src/workspace.c (meta_workspace_new): Initialize
workspace->mru_list to NULL.
(meta_workspace_add_window): Add window to workspace's MRU list.
(meta_workspace_remove_window): Remove window from workspace's MRU
list.
(meta_workspace_activate_with_focus): Use
meta_workspace_focus_default_window instead of
meta_screen_focus_default_window.
(meta_workspace_focus_default_window):
(meta_workspace_focus_mru_window):
(meta_workspace_focus_top_window): Add functions.
* src/workspace.h: Add mru_list to MetaWorkspace and add function
declarations for meta_workspace_focus_default_window,
meta_workspace_focus_mru_window, meta_workspace_focus_top_window.
2003-08-14 Rob Adams <robadams@ucla.edu>
Allow windows that are too tall for the workarea to break the
onscreen constraints just enough so that their bottom edges can be
made visible. Fix for #106740. Also, changes constraints to
constrain the resize and then the move to avoid complexities in
the code for the above fix.
* src/constraints.c (get_outermost_onscreen_positions)
Compute the "effective" height of the work area and the minimum
size for the window to compute a value by which a window is
allowed to violate the top constraint.
(meta_window_constrain): convert to a resize then a move instead
of a move then resize.
2003-08-10 Havoc Pennington <hp@pobox.com>
* src/screen.c (meta_screen_new): don't select for button
press/release events, as that keeps other clients from doing so,
and it doesn't seem that metacity has any reason to do it.
Patch from Andreas Volz.
2003-08-08 Bastien Nocera <hadess@hadess.net>
* src/metacity-dialog.c: (kill_window_question),
(warn_about_no_sm_support): fix markup being ignored when a window
title has a forbidden character in it (eg. "Send & Receive")
* src/tools/metacity-window-demo.c: fix warning
2003-07-29 Arvind Samptur <arvind.samptur@wipro.com>
* src/xprops.c (utf8_list_from_results): Number of
strings we are processing is one more than required.
Also get the string count right even without a null byte at the end.
Pointed out by Havoc.
2003-07-27 Rob Adams <robadams@ucla.edu>
* src/window.c (update_move): Update window shaking loose so that
the window is moved to the pointer and certain drag state is
properly restored once windows "reattach". Fix for #115000 based
on the patch by Jurg Billeter.
* src/screen.c (meta_screen_resize): Invalidate work areas after
an xrandr screen size update. Fix for #117230.
* src/stack.c (window_is_fullscreen_size): Check the bottom corner
of the window in addition to the top corner. Fix for #118194.
* src/constraints.c (meta_window_constrain): Support aspect ratio
hints in the new constraints code. Fix for #113798.
* src/tools/metacity-window-demo.c (toggle_aspect_ratio): toggle
the aspect ratio hints to force a 16:9 aspect ratio.
(do_appwindow): add a button to toggle aspect ratio.
2003-07-27 Havoc Pennington <hp@pobox.com>
* src/theme-viewer.c (run_theme_benchmark): also measure wall
clock time, and run over a number of window sizes.
2003-06-20 Rob Adams <robadams@ucla.edu>
* src/window.c (meta_window_unmaximize): Update grab state when we
unmaximize so double-clicking doesn't cause weird window-jumping
problems. See #116292.
2003-06-26 Havoc Pennington <hp@pobox.com>
* src/workspace.c (meta_workspace_invalidate_work_area): nuke the
lists of struts here, to improve confidence that we never try to
use them after a window with rects in the list gets freed.
(it wasn't broken before I don't think, just making the
code more robust against future mods)
* src/window.c (meta_window_update_struts): replace magic "75"
with a macro
* src/constraints.c (constraint_hints_applies_func): don't apply
hints to maximized or fullscreen, rather than only fullscreen
(constrain_move): add paranoia max number of iterations to the
heuristic loop
2003-06-26 Rob Adams <robadams@ucla.edu>
Add keybinding to allow the user to toggle _NET_WM_STATE_ABOVE on
windows. Disabled by default. See #98387.
* src/keybindings.c (handle_toggle_above): new function implements
the keybinding
* src/metacity.schemas.in: add toggle_above keybinding
* src/prefs.[ch]: add toggle_above keybinding
* src/window.[ch] (meta_window_make_above): new function to put a
window into the above state
(meta_window_unmake_above): new function takes a window out of the
above state
2003-06-10 Rob Adams <robadams@ucla.edu>
Update constraints code to support the new _NET_WM_STRUT_PARTIAL
EWMH draft specification. See #86682. Also, fix a bug involving
work area invalidation on metacity startup. Fix for #108497.
Finally, some minor fixes for full screen windows.
* src/window.h: Add new MetaStruts structure to store strut rects
for a window. Remove has_struts and do_not_cover flag, and
support new MetaStruts instead of the four ints.
* src/window.c (meta_window_new): change initialization to work
with new struts. Also, move meta_window_update_struts call to
after the workspaces are initialized to fix#108497. Remove
do_not_cover and related code.
(process_property_notify): add strut_partial
(update_struts): change function name to meta_window_update_struts
and expose in external MetaWindow API. Support partial width
struts and the new strut rects.
* src/workspace.h: add new GSLists containing pointers to all
relevant struts for this workspace.
* src/workspace.c (meta_workspace_new): initialize the list of
strut rects for this workspace.
(meta_workspace_free): free the strut rect lists
(ensure_work_areas_validated): support new struts and new strut
rect lists. Unleash the per-xinerama work areas.
* src/constraints.c (get_outermost_onscreen_positions): Use the
current window position along with the new per-workspace strut
rects to compute the constraints that apply to a particular
window.
(constraint_hint_applies_func): don't do hints constraints on
fullscreen windows
(update_position_limits): for maximized windows use the work areas
to set the position limits; for other windows rely on the struts
constraints to be computed later in
get_outermost_onscreen_positions
(meta_window_constrain): don't apply aspect ratio hints to full
screen windows
* src/display.c (meta_display_open): add _NET_WM_STRUT_PARTIAL atom
(meta_rectangle_equal): new helper function for MetaRectangles
(event_queue_callback): #ifndef out if USE_GDK_DISPLAY not set to
avoid compiler warning
* src/display.h: add atom_net_wm_strut_partial, and add
meta_rectangle_equal.
* src/screen.c (meta_screen_rect_intersects_xinerama): change
_window_intersects_ to _rect_intersects_ which is more useful now.
(meta_screen_resize_func): update struts on windows with struts
since struts are relative to the screen size, and this function is
called when the screen size updates.
* src/screen.h (meta_screen_rect_intersects_xinerama): change
_window_intersects_ to _rect_intersects_ which is more useful now.
* src/window-props.c (meta_display_init_window_prop_hooks): add
hook for strut_partial
* src/tools/metacity-window-demo.c: Support partial-width struts
on the dock window tests for metacity testing purposes.
2003-06-12 Rob Adams <robadams@ucla.edu>
Remove legacy support for Gnome 1 hints, since we deem it unlikely
that anyone is running a current metacity with Gnome 1. The
removed hints are _WIN_WORKSPACE, _WIN_LAYER, _WIN_PROTOCOLS,
_WIN_SUPPORTING_WM_CHECK, and _WIN_HINTS.
* display.c (meta_display_open): remove hints
* display.h: remove atoms for hints
* screen.c (set_wm_check_hint): don't set legacy hint
(set_supported_hint): don't set legacy hint
* window-props.c (init_win_workspace): removed
(reload_win_workspace): removed
(meta_display_init_window_prop_hooks): remove hints
* window.h: remove do_not_cover flag
* window.c: remove GnomeWinHints enum
(recalc_do_not_cover_struts): removed
(meta_window_new): don't initialize removed flags or compute
legacy struts
(move_resize_cmp): removed
(idle_move_resize): Don't bother sorting the idle queue
(meta_window_client_message): don't set legacy hint
(process_property_notify): remove hints
(update_net_wm_type): don't fall back to WIN_LAYER hint
(update_struts): remove legacy struts
2003-06-12 Havoc Pennington <hp@pobox.com>
* src/display.c (event_callback): make raise-on-click explicitly
only happen in click to focus mode.
* src/window.c (update_move): apply patch from Jurg Billeter to
allow you to "shake loose" maximized windows and move them between
Xinerama heads. #93586
* src/display.c: delete event_queue_callback
* src/display.h (struct _MetaDisplay): get rid of
grab_current_window_pos and grab_current_root_[xy] as I could find
absolutely no code using them for anything. They were just sort of
randomly assigned to for no apparent reason.
* src/display.c (event_callback): double-click timeout is per
screen, so get the screen and pass screen->ui to
meta_ui_get_double_click_timeout()
* src/ui.c (meta_ui_get_double_click_timeout): take a MetaUI
argument so we get the right settings for each screen
(meta_ui_get_drag_threshold): new function
2003-06-09 Rob Adams <robadams@ucla.edu>
Revamp placement policy for windows that are maximized when they
are mapped, including windows that set a hint to be maximized or
windows that are auto-maximized using our heuristic. See #111902.
* src/window.h: add new flag maximize_after_placement and new
function meta_window_maximize_internal.
* src/window.c (meta_window_new): initialize
maximize_after_placement to FALSE and remove the automaximize
heuristic.
(meta_window_maximize_internal): new function accepts a saved_rect
argument to be used as the new saved_rect for the window, and does
not queue a move_resize.
(meta_window_maximize): re-implement using
meta_window_maximize_internal.
(update_net_wm_state): If a window has a maximize hint set on
startup set maximize_after_placement to TRUE
* src/constraints.c (meta_window_constrain): Update the xinerama
information in the ConstraintInfo after placing the window, and
maximize the window after placement if
window->maximize_after_placement
* src/place.c (find_first_fit): take a natural xinerama list as an
argument instead of generating it here
(constrain_placement): remove function, since it is no longer
needed
(meta_window_place): generate the natural xinerama list here and
pass it into find_first_fit. If find_first_fit fails, use the
list to find empty xineramas where we can place windows that may
be maximized later. This makes maximized windows follow the
correct placement policy. Move the automaximize heuristic here.
2003-06-09 Rob Adams <robadams@ucla.edu>
* src/metacity-dialog.c (warn_about_no_sm_support): install an
alarm to timeout the no-sm-dialog after 4 minutes of inactivity.
Patch from Ximian. See #114789.
2003-06-07 Rob Adams <robadams@ucla.edu>
* src/window.c (meta_window_new): call meta_group_compute_group
after setting window->desc to avoid SIGSEGV when verbose mode is
enabled.
2003-06-07 Havoc Pennington <hp@pobox.com>
* src/window.c (meta_window_notify_focus): drop the mouse button
grabs for the focused window; we'll see if this breaks anything.
It should fix#102209
2003-06-04 Rob Adams <robadams@ucla.edu>
* src/window.c (meta_window_new): don't be stupid and set
window->group = NULL after calling meta_window_compute_group.
* src/group.c (meta_window_get_group): assert that window->group
!= NULL in here instead of computing the group to ensure
robustness.
2003-06-04 Rob Adams <robadams@ucla.edu>
Precompute groups to guarantee that meta_group_list_windows always
returns the correct list of windows. See Bug #96973
* src/window.h: change cached_group variable to group
* src/window.c (meta_window_new): change cached_group to group and
call meta_window_compute_group
* src/groups.c (meta_window_get_group): simply return
window->group rather than computing it and returning
window->cached_group
(meta_window_compute_group): new function computes window->group.
Designed to be called once from meta_window_new
(remove_window_from_group): change cached_group to group
(meta_window_group_leader_changed): call meta_window_compute_group
instead of meta_window_get_group
2003-06-04 Rob Adams <robadams@ucla.edu>
Precompute groups to guarantee that meta_group_list_windows always
returns the correct list of windows. See Bug #96973
* src/window.h: change cached_group variable to group
* src/window.c (meta_window_new): change cached_group to group and
call meta_window_compute_group
* src/groups.c (meta_window_get_group): simply return
window->group rather than computing it and returning
window->cached_group
(meta_window_compute_group): new function computes window->group.
Designed to be called once from meta_window_new
(remove_window_from_group): change cached_group to group
CVS2003-05-29 Rob Adams <robadams@ucla.edu>
Use a new property _METACITY_SENTINEL to eliminate a race
condition that causes focus to behave badly with sloppy/mouse
focus when lots of windows are mapped/unmapped, such as with a
workspace switch. The EnterNotify events on a display are ignored
until the PropertyNotify sent after all the window maps is
received. This is a fix for #110970.
* src/display.[ch]: New _METACITY_SENTINEL atom.
(event_callback): ignore EnterNotify if the sentinel isn't clear,
and decrement the sentinel counter when the PropertyNotify is
received.
(meta_display_increment_focus_sentinel): new function. Increments
the sentinel counter and updates the property on a root window on
this display.
(meta_display_decrement_focus_sentinel): Decrement the sentinel
counter.
(meta_display_focus_sentinel_clear): returns whether the sentinel
counter is zero.
* src/window.c (idle_calc_showing): after showing windows, call
meta_display_increment_focus_sentinel on each display for windows
to be shown.
* src/workspace.[ch] (meta_workspace_activate_with_focus): new
function activates a workspace and focuses a particular window
after the workspace is activated.
(meta_workspace_activate): now just a wrapper for
meta_workspace_activate_with_focus
* src/keybindings.c: use new meta_workspace_activate_with_focus
function to ensure that focus will follow the focused window
through the workspace switch.
: ----------------------------------------------------------------------
2003-05-29 Havoc Pennington <hp@redhat.com>
* src/theme-parser.c (meta_theme_load): s/int/gsize/ for
g_file_get_contents() (found independently by
marcus@freebsd.org on SPARC and James Laska on s390x;
#113661
* src/main.c (main): fix theme location mentioned in error message
2003-05-29 Ray Strode <halfline@hawaii.rr.com>
Get and use double-click speed from GtkSettings (Bug #103218).
* src/ui.c, src/ui.h:
add function meta_ui_get_double_click_timeout for looking up
the global double-click speed.
* src/display.c, src/display.h: remove double_click_time
field from MetaDisplay and use meta_ui_get_double_click_timeout
instead.
2003-05-29 Rob Adams <robadams@ucla.edu>
* src/main.c (main): chdir to the user's home directory on
startup. See #113755.
* src/stack.c (get_standalone_layer): a window should be in the
fullscreen layer if it or any of its transient descendants are
focused or expecting the focus and it is either fullscreen or
fullscreen sized. Fix for #104369.
* src/stack.c (is_focused_foreach): foreach used by
get_standalone_layer to find focused transient descendants.
2003-05-20 Havoc Pennington <hp@pobox.com>
* src/keybindings.c (meta_change_keygrab): the mask
display->ignored_modifier_mask wasn't being bound,
due to "<" instead of "<=" (most people didn't notice
as display->ignored_modifier_mask included Scroll_Lock).
Red Hat bugzilla #91301 reported by Youssef Makki
* src/display.c (meta_change_button_grab): make corresponding
change for button grabs.
2003-05-20 Anders Carlsson <andersc@codefactory.se>
* src/metacity-dialog.c: (kill_window_question):
Split up the strings to make life easier for translators.
2003-05-18 Havoc Pennington <hp@pobox.com>
* src/window.c (unminimize_window_and_all_transient_parents):
revert broken change that assumed foreach_ancestor iterated
over the window itself. Andrew Sobala, Rob Adams,
#113232
`
2003-05-16 Rob Adams <robadams@ucla.edu>
Flip the workspace when using up/down/left/right for move window
to, but not when specifying a workspace explicitly as in move to
workspace 4. Possible fix for #105492.
* src/keybindings.c (do_handle_move_to_workspace): new function
moves a window to a workspace with the option to flip to that
workspace.
(handle_move_to_workspace): Use new do_handle_move_to_workspace
function without flipping (a keybinding)
(handle_move_to_workspace_flip): Use new
do_handle_move_to_workspace function with flipping (a keybinding)
2003-05-16 Havoc Pennington <hp@redhat.com>
* src/frames.c (meta_frames_paint_to_drawable): fix for
bug #104018 from David Santiago, change button state to
normal while it's being pressed if you move the mouse
outside it. Do this by tracking prelit_control for whether
to draw a button as active, not just for whether to draw
it as prelit.
(meta_frames_motion_notify_event): also update prelit_control
while clicking a button
2003-05-16 Havoc Pennington <hp@redhat.com>
* src/window.c (meta_window_new): fill in window->desc sooner
since we use it sooner now.
* src/display.c (meta_display_open): init
display->grab_update_alarm
* src/window.c (meta_window_new): initialize the always_sticky
field
(meta_window_new): initialize the update_icon_queued field
Patch from Julien Olivier bug #92335 for converting "show desktop
mode" to "all windows are minimized" when you open a new window,
instead of just mapping all the windows again.
* src/window.c (meta_window_activate): minimize all windows before
coming out of show desktop mode.
(meta_window_unminimize): don't toggle show desktop mode here
* src/screen.c (meta_screen_minimize_all_except): new function
2003-05-05 Danilo Šegan <dsegan@gmx.net>
* configure.in: Added "sr" and "sr@Latn" to ALL_LINGUAS.
* po/sr.po, po/sr@Latn.po: Added Serbian translation by
http://Prevod.org/.
2003-05-03 Havoc Pennington <hp@pobox.com>
* src/keybindings.c (handle_move_to_workspace): when moving
window to another workspace, don't switch to that workspace.
* src/window.c (menu_callback): when moving window to another
workspace, don't switch to that workspace.