2007-04-02 Elijah Newren <newren gmail com>
Patch from Carlo Wood to fix handling of unidirectional
maximization and partial struts. #358311.
* src/constraints.c (constrain_maximization):
determine target size for unidirectionally maximized windows by
determining how far they can be maximized without hitting
orthogonal struts. Avoids weird "empty spaces".
* src/boxes.[ch] (meta_rectangle_expand_to_avoiding_struts):
new function
2007-04-02 Elijah Newren <newren gmail com>
Make the strut lists (stored in workspaces) record both the
rectangle and the side that the strut is on. Lots of code
cleanups relating to struts.
* src/boxes.h (struct MetaStrut):
new struct for struts
* src/window.[ch] (struct MetaStruts, struct MetaWindow,
meta_window_update_struts):
overhaul to make window's struts remember their side as well as
their rectangular location, and just use a list instead of several
copies of near-identical code for left/right/top/bottom (allowing
us to nuke MetaStruts struct as well)
* src/testboxes.c (new_meta_strut, get_strut_list):
* src/workspace.c (ensure_work_areas_validated):
* src/boxes.c (meta_rectangle_get_minimal_spanning_set_for_region,
meta_rectangle_expand_to_avoiding_struts,
get_disjoint_strut_rect_list_in_region, fix_up_edges,
meta_rectangle_find_onscreen_edges,
meta_rectangle_find_nonintersected_xinerama_edges):
modify to handle struts being rectangle + side instead of just rectangle
* src/workspace.c (ensure_work_areas_validated):
simplify strut list creation considerably given MetaWindow change,
modify work_area computations to take advantage of region
computations being done (makes the code shorter as well as more
robust against pathological cases).
* src/util.[ch] (meta_free_gslist_and_elements):
new convenience function
* src/common.h (enum MetaDirection):
* src/edge-resistance.c (movement_towards_edge):
* src/boxes.c (meta_rectangle_edge_aligns,
rectangle_and_edge_intersection, split_edge):
Add more MetaDirection fields for convenience
* src/boxes.h (enum FixedDirections):
* src/constraints.c (setup_constraint_info, place_window_if_needed):
add a FIXED_DIRECTION_NONE to the FixedDirections enum to make
code more clear
svn path=/trunk/; revision=3144
2007-01-27 Bruno Boaventura <brunobol@gnome.org>
* src/theme.c (kill_window_question): Fallback to NORMAL state after
checking for the middle button. Fixes bug #419043.
Patch from Benjamin Berg <benjamin@sipsolutions.net>.
svn path=/trunk/; revision=3140
2007-03-31 Elijah Newren <newren gmail com>
Clean up event mask handling and meta_create_offscreen_window, to
prevent nasty metacity/gdk interactions causing hangs. See #354213.
* src/screen.[ch] (meta_create_offscreen_window):
* src/display.c (meta_display_open):
* src/screen.c (meta_screen_new):
Add a valuemask parameter to meta_create_offscreen_window
* src/display.c (meta_display_open):
make it explicit that we can't rely on PropertyNotify events for
the leader_window due to nasty metacity/gdk interaction
* src/session.c (warn_about_lame_clients_and_finish_interact):
remove cut-and-paste code for timestamp pinging and just call
meta_display_get_current_time_roundtrip
svn path=/trunk/; revision=3137
2007-03-30 Elijah Newren <newren gmail com>
Add support for _NET_WM_USER_TIME_WINDOW in order to cut down on
context switches.
* src/display.c (meta_display_open):
* src/display.h (struct _MetaDisplay):
* src/screen.c (set_supported_hint):
new atom
* src/display.c (meta_display_open,
meta_display_get_current_time_roundtrip):
* src/display.h (struct _MetaDisplay):
create a dedicated timestamp pinging window instead of reusing
display->leader_window
* src/display.c (event_callback):
* src/window-props.c (reload_net_wm_user_time_window):
* src/window.c (meta_window_new_with_attrs, meta_window_free,
process_property_notify):
* src/window.h (struct _MetaWindow):
monitor property notify events on _NET_WM_USER_TIME_WINDOW windows too
* src/window-props.[ch]:
new meta_window_reload_propert(y|ies)_from_xwindow() functions
* src/window-props.[ch]
(init_net_wm_user_time_window, reload_net_wm_user_time_window,
meta_display_init_window_prop_hooks):
* src/window.c (meta_window_new_with_attrs):
new hooks to handle new atom
svn path=/trunk/; revision=3134
2007-03-26 Josselin Mouette <joss@malsain.org>
* src/session.c (meta_session_init): if previous client ID
was supplied, use it in filename.
* src/session.c (set_clone_restart_commands): use --sm-client-id
in command line to restore session, not original file name.
* src/session.c (regenerate_save_file): generate filename using
client ID and not original file name.
* src/session.c (base_save_file): removed function.
Closes GNOME 407981, Debian 391287, Debian 315169.
svn path=/trunk/; revision=3125
2007-03-20 Arthur Taylor <theycallhimart@gmail.com>
* src/frames.c (meta_frames_apply_shapes): adjusted the rounded
corners so that they fit nicely with the arcs around them.
Fixes#399373.
svn path=/trunk/; revision=3120
2007-03-17 Kjartan Maraas <kmaraas@gnome.org>
* src/ui.c: Remove #include <pango/pangox.h> since it's
apparently not installed anymore. Builds just fine without it too.
svn path=/trunk/; revision=3119
2007-02-17 Linus Torvalds <torvalds@woody.linux-foundation.org>
* src/common.h (MetaActionTitleBar): renamed from
MetaActionDoubleClickTitleBar; added _LOWER and _MENU.
* src/frames.c (meta_frame_titlebar_event): renamed
enums as above; added code to handle _LOWER and _MENU,
which is moved in from meta_frame_{middle|right}_click_event.
* src/frames.c (meta_frame_middle_click_event,
meta_frame_right_click_event): rewrote in terms of
meta_frame_titlebar_event.
* src/prefs.c: removed "DoubleClick" from names as above.
* src/prefs.c (action_titlebar_from_string): added cases
for "lower" and "menu".
Fixes#408902.
svn path=/trunk/; revision=3062
2007-02-17 Linus Torvalds <torvalds@woody.linux-foundation.org>
* src/frames.c (meta_frames_button_press_event): Split out
code for different kinds of click into separate functions.
Fixes#408899.
* src/frames.c (meta_frame_titlebar_event,
meta_frame_double_click_event, meta_frame_middle_click_event,
meta_frame_right_click_event): new functions.
svn path=/trunk/; revision=3061
2007-01-27 Bruno Boaventura <brunobol@gnome.org>
* src/metacity-dialog.c (kill_window_question): Change dialog
icon because gnome-icon-theme have no more "panel-force-quit".
Patch from Jaap A. Haitsma <jaap@haitsma.org>.
svn path=/trunk/; revision=3050
* src/compositor.c (meta_compositor_new): Removed
#ifdef SPIFFY_COMPOSITOR throughout the file. Replaced with check
for environment variable METACITY_BLING, which may be temporary.
svn path=/trunk/; revision=3042
2007-01-13 Bruno Boaventura <brunobol@gnome.org>
* src/frames.c (meta_frames_motion_notify_event): Unmaximize
button must keep preesed appearence when clicked (hold down),
move off, and back over the button. Fixes#395560. Patch from
Mad Alex <madalexonline@yahoo.co.uk>.
svn path=/trunk/; revision=3040
2006-12-27 Bruno Boaventura <brunoboaventura@gmail.com>
Move "On Top" option in menu. Fix#382962.
* src/common.h, src/core.c: Remove META_MENU_OP_UNABOVE.
* src/menu.c: remove unabove menu item and put above item
next "Always on Visible Viewport".
* src/window.c: remove handles of META_MENU_OP_UNABOVE.
* src/compositor.c: Disabled bling for now; added function for
handling CirculateNotify XEvent; some commenting.
* src/compositor.h, src/c-window.c: fix function prototype visibility.
2006-12-05 Christof Krüger <mail@pop2wap.net>
* src/window.c (update_move): Fix flickering about when dragging
maximised windows between xineramas. Closes#358715.
2006-12-03 Federico Mena Quintero <federico@novell.com>
Fix http://bugzilla.gnome.org/show_bug.cgi?id=381127:
* src/window.c (idle_calc_showing): Grab the server while the
windows are being shuffled. First show the windows to be shown,
and then hide the windows to be hidden, in order to minimize
the number of expose events.
2006-11-15 Bruno Boaventura <brunoboaventura@gmail.com>
2006-11-15 Björn Lindqvist <bjourne@gmail.com>
* src/menu.c: added MetaMenuItemType enum; added it
to MenuItem; added values of this type to menuitems
array.
* src/menu.c (menu_item_new): rewrite to take a MenuItem
instead of a set of parameters describing the menu item.
* src/menu.c (meta_window_menu_new): use proper checkboxes
or radio buttons on the window menu.
* src/window.c (meta_window_show_menu): unstick and stick
are always shown.
2006-11-05 Justin Mason <jm@jmason.org>
* src/keybindings.c: implement handle_move_to_{side|corner}_* to
allow the user to flip a window to the side or corner of the
screen. Fixes#317884.
* src/prefs.h: keybindings for the above.
* src/metacity.schemas.in: keybindings for the above.
2006-10-30 Dan Mick <dan.mick@sun.com>
* src/window.c: (__window_is_terminal): Fix strict focus
mode by picking up on res_class. Fixes#361054, strict focus
mode still not working; should look for res_class, not res_name
2006-10-13 Carlo Wood <carlo@alinoe.com>
Fix cases when titlebar is allowed offscreen and shouldn't be (and
vice-versa). #333995.
* src/display.[ch] (struct _MetaDisplay): add grab_frame_action
member
* src/display.[ch] (meta_display_begin_grab_op):
* src/window.[ch] (meta_window_begin_grab_op):
* src/core.[ch] (meta_core_begin_grab_op):
Add frame_action parameter (core & window versions pass it on to
display)
* src/display.c (event_callback):
* src/window.c (meta_window_begin_grab_op,
meta_window_client_message, menu_callback):
* frames.c (meta_frames_button_press_event):
* keybindings.c (do_choose_window, handle_begin_move,
handle_begin_resize, handle_workspace_switch):
Pass whether the action should be considered a 'frame_action',
which will be used to determine whether to force the titlebar to
remain onscreen, to meta_*_begin_grab_op
* constraints.c (constrain_titlebar_visible):
Replace previous ugly hack by using grab_frame_action (and whether
the action is a user action) to determine whether to enforce the
titlebar_visible constraint.
* common.h: Added "above" to the list of flags a frame can have, so
that we know when to mark it as always on top. Added six grab ops,
one to do and one to undo each of the three new titlebar buttons
(shade, above, stick). Added six new button functions, similarly.
(#96229)
* frame.c (meta_frame_get_flags): If a frame has the WM_STATE_ABOVE X
attribute, set META_FRAME_ABOVE in its flags.
* frames.c (meta_frames_apply_shapes): Allow variable amounts of
rounding. (#113162)
* frames.c (show_tip_now, meta_frames_paint_to_drawable, control_rect,
get_control): extend handling of existing buttons to the
3*2 new kinds of button. (#96229)
* frames.c (meta_frames_button_press_event): translate clicks on the 3*2
new kinds of button to the new grab ops. (#96229)
* frames.c (meta_frames_button_release_event): implement the various
actions for the 3*2 new kinds of button. (#96229)
* frames.c (meta_frames_update_prelit_control,
meta_frames_motion_notify_event): extend existing motion
notifications for buttons to the 3*2 new kinds of button. (#96229)
* frames.c (meta_frames_set_window_background): handle specified
background colours and alpha transparency. (#151261)
* frames.h (MetaFrameControl): New control types for the 3*2 new kinds
of button. (#96229)
* iconcache.[ch] (meta_read_icons): use theme's fallback icons if a
window has no icon; use metacity's fallback icons only if the theme
does not provide any. (#11363)
* iconcache.[ch] (meta_invalidate_default_icons (new function)): clear
icon cache on windows using default icons, and update them. (#11363)
* main.c (main): added \n to error message.
* prefs.c (button_function_from_string): extend for 3 new button
types. (#96229)
* prefs.c (button_opposite_function (new function)): return a button
function's inverse (shade -> unshade, etc) (#96229)
* prefs.c (update_button_layout): allocate space for a button's
inverse, if it has one. (#96229)
* theme-parser.c (ParseState): add state for fallback icons (#11363)
* theme-parser.c (ParseInfo): add format_version; remove
menu_icon_* (#114305)
* theme-parser.c (parse_positive_integer): add lookup for integer
constants (#331356)
* theme-parser.c (parse_rounding (new function)): parse window
rounding amount (#113162)
* theme-parser.c (parse_alpha): don't set error if the number can't
be parsed since it'll already be set; change tolerance in comparison
from 1e6 to 1e-6
* theme-parser.c (parse_color (new function)): parse colour, including
possible constant lookup.
* theme-parser.c (parse_toplevel_element): allow defining of various
new kinds of constant; allow
hide_buttons (#121639) and more detailed rounding attributes on
<frame_geometry> (#113162); allow background and alpha attributes on
<frame_style>; (#151261) remove support for <menu_icon> except as
stub; (#114305) add support for loading stock images (#113465); add
support for <fallback>. (#11363))
* theme-parser.c (parse_draw_op_element): add from and to attribute
for arcs. (#121603)
* theme-parser.c (parse_style_element): add check for theme version
supporting a button function. (#96229)
* theme-parser.c (parse_style_set_element): add ability for shaded
windows to be resizable (#114304)
* theme-parser.c (meta_theme_load): add theme versioning routine.
* theme.c ( meta_frame_layout_get_borders): return rectangles for
the new 3*2 kinds of button, except where they're
inapplicable. (#96229)
* theme.c (meta_frame_layout_calc_geometry): don't format buttons on
windows with no buttons (#121639); strip the 3*2 new kinds of button
correctly (#96229); allow variable amounts of rounding (#113162).
* theme.c (meta_frame_style_new): set alpha to 255 by
default. (#151261)
* theme.c (meta_frame_style_unref): free colour spec if
allocated. (#151261)
* theme.c (meta_frame_style_validate): it's only an error not to
include a button if that button is valid in the current
theme. (#96229)
* theme.c (button_rect): return rectangles for the new 3*2 kinds
of button. (#96229)
* theme.c (meta_frame_style_set_unref): free differently resizable
shaded styles. (#114304)
* theme.c (get_style): look up differently resizable styles
for shaded windows. (#114304)
* theme.c (free_menu_ops (removed function), get_menu_icon
(removed function), meta_theme_draw_menu_icon (removed function),
meta_menu_icon_type_from_string (removed function),
meta_menu_icon_type_to_string (removed function),
meta_theme_free, meta_theme_validate): removed menu icon code. (#114305)
* theme.c (meta_theme_load_image): add size_of_theme_icons
parameter. (#113465)
* theme.c (meta_theme_define_color_constant (new function),
meta_theme_lookup_color_constant (new function)): allow
definition of colour constants. (#129747)
* theme.c (meta_button_type_from_string, meta_button_type_to_string):
add the 3*2 new kinds of button. (#96229)
* theme.c (meta_theme_earliest_version_with_button (new function)):
return the theme version each button was introduced in. (#96229)
* theme.h ( MetaFrameLayout): add "hide_buttons" flag (#121639) and
corner radiuses. (#113162)
* theme.h (MetaFrameGeometry): add rectangles for the 3*2 new
buttons. (#96229)
* theme.h (MetaButtonType): the 3*2 new buttons. (#96229)
* theme.h (MetaFrameStyle): add window_background_color and
window_background_alpha so that we can specify background on a
<frame_style>. (#151261)
* theme.h (MetaFrameStyleSet): shaded_styles gets resize
dimension. (#114304)
* theme.h (MetaTheme): added format_version, color_constants
hash, (#129747) fallback_icon and fallback_mini_icon, (#11363)
and removed menu_icons. (#114305)
* theme.h (META_THEME_ALLOWS (new macro)): return whether a theme
supports a given feature. Also, several macros representing
new features in v2.
* ui.c (meta_ui_set_current_theme)): also invalidate default
icons. (#11363)
* window.[ch] (meta_window_update_icon_now)): became
non-static. (#11363)
2006-10-06 Elijah Newren <newren gmail com>
* src/metacity-dialog.c (kill_window_question): Be nice to
translators; remove unnecessary markup from strings marked for
translation (oops, I missed this in my review before previous
commit)
2006-10-06 Elijah Newren <newren gmail com>
* src/metacity-dialog.c (kill_window_question): Patch from Bruno
Boaventura to improve the "Force Quit" dialog. #121936
2006-10-02 Elijah Newren <newren gmail com>
Ignore edge resistance for size-increment windows when resizing
with the keyboard. #346782.
* src/edge-resistance.c (apply_edge_resistance_to_each_side):
ignore edge resistance for size-increment windows when resizing
with the keyboard, (apply_edge_resistance_to_each_side,
meta_window_edge_resistance_for_move,
meta_window_edge_resistance_for_resize): pass a is_resize
parameter as well
2006-10-01 Elijah Newren <newren gmail com>
* src/display.c (meta_display_set_input_focus_window):
* src/window.c (meta_window_focus):
Don't require a push/pop trap around
meta_display_set_input_focus_window(), but rather move the
push/pop into that function surrounding the XSetInputFocus() call
directly. Follow up to #358514.
2006-10-01 Elijah Newren <newren gmail com>
* src/*.[ch]: Stick an emacs comment directive at the beginning of
all the code files so that people using emacs will be more likely
to get coding style correct in their patches. We still need a
similar vi directive. #358866
2006-10-01 Elijah Newren <newren gmail com>
Patch from Carlo Wood to ensure that maximized and minimized
properties are maintained across restarts. #358042.
* src/constraints.c (place_window_if_needed): fix up partial
maximization handling and add minimize_after_placement handling.
* src/display.[ch] (struct MetaDisplay, meta_display_open): add a
new display->display_opening flag to allow handling startup
differently where needed.
* src/window-props.c (reload_net_wm_state): handle
_net_wm_state_hidden as well, setting
window->minimize_after_placement appropriately
* src/window.[ch] (struct MetaWindow, meta_window_new_with_attrs):
add a window->minimize_after_placement field
* src/window.c (meta_window_new_with_attrs): only unminimize the
window and its transients if the display isn't being opened,
(unmaximize_window_before_freeing): don't reset the state unless
the window is becoming withdrawn, if the screen is being closed be
sure to save the unmaximized state of the window so the next
window manager can restore it
2006-10-01 Elijah Newren <newren gmail com>
* src/window-props.c (set_title_text): surround the
XDeleteProperty() call with a
meta_error_trap_push/meta_error_trap_pop pair to prevent a crash
when closing a remote instance of gedit (and perhaps other apps).
#358514.
2006-10-01 Elijah Newren <newren gmail com>
Fix longstanding focus bug with mouse (not sloppy) focus mode with
popup override-redirect windows, particularly mozilla and
firefox's location bar autocompletion. #357695.
* src/display.c (event_callback -- EnterNotify & LeaveNotify events):
for mouse focus, defocus the focused window when the mouse enters
the desktop window rather than when the mouse leaves the focused
window.
* doc/how-to-get-focus-right.txt:
update for the slightly nuanced definition of mouse focus (people
without a DESKTOP window like nautilus get sloppy focus behavior
now)
2006-09-27 Elijah Newren <newren gmail com>
* src/menu.c (var menuitems): Patch from Bruno Boaventura to add
notes to remind translators to keep translations in sync with
libwnck. #355620.
2006-09-18 Elijah Newren <newren gmail com>
* src/constraints.c (constrain_maximization): Ignore maximum size
hints when maximizing. Should fix#327543 (see comment 4 and comment
5).
2006-09-18 Elijah Newren <newren gmail com>
Partial audit to fix timestamp usage. One step towards fixing
#355180; see important comments in that bug.
* src/core.[ch] (meta_core_unshade, meta_core_shade):
* src/delete.c (meta_window_present_delete_dialog,
delete_ping_timeout_func):
* src/display.[ch] (meta_display_open, meta_display_close,
event_callback, meta_display_begin_grab_op,
process_selection_clear, meta_display_unmanage_screen,
meta_display_unmanage_windows_for_screen):
* src/frames.c (meta_frames_button_press_event):
* src/keybindings.c (handle_toggle_shade):
* src/main.c (main):
* src/screen.[ch] (update_num_workspaces, meta_screen_new,
meta_screen_free, prefs_changed_callback):
* src/window.[ch] (meta_window_free, finish_minimize,
implement_showing, meta_window_show, meta_window_maximize,
meta_window_make_fullscreen_internal,
meta_window_unmake_fullscreen, meta_window_shade,
meta_window_unshade, window_activate, send_sync_request,
meta_window_client_message, menu_callback,
meta_window_update_keyboard_resize):
Remove usage of CurrentTime, meta_display_get_current_time() and
meta_display_get_current_time_roundtrip() where possible, or
document why it isn't possible, or at very least add a FIXME with
some explanation of my laziness and what needs to be done.
2006-09-13 Elijah Newren <newren gmail com>
* src/window.c (meta_window_show): Patch from Thomas Andersen to
make windows be stacked correctly before showing them, to prevent
flicker with focus stealing prevention. #332385.
2006-09-12 Elijah Newren <newren gmail com>
* src/theme.c (meta_gtk_arrow_from_string,
meta_gtk_arrow_to_string): patch from Bruno Boaventura de Oliveira
to fix a compiler warning about not handling GTK_ARRROW_NONE.
#355490.
2006-09-11 Elijah Newren <newren gmail com>
* src/compositor.c: Patch from Bruno Boaventura de Oliveira
Lacerda to fix warnings about unused function and global var.
#355489.
2006-09-09 Elijah Newren <newren gmail com>
Avoid a stuck grab, preventing focus from being transferred
between windows. Thanks to Fryderyk Dziarmagowski for steps to
reproduce. Fixes at least part of #354422.
* src/display.c (meta_display_begin_grab_op,
meta_display_end_grab_op): pass timestamp to
meta_screen_ungrab_all_keys, meta_screen_ungrab_all_keys, and
meta_window_ungrab_all_keys
* src/keybindings.[ch] (grab_keyboard, ungrab_keyboard): add a
timestamp parameter and remove call to
meta_display_get_current_time(), (meta_screen_grab_all_keys,
meta_screen_ungrab_all_keys, meta_window_ungrab_all_keys): add a
timestamp parameter and pass it on to grab_keyboard and
ungrab_keyboard
2006-09-07 Elijah Newren <newren gmail com>
* src/constraints.c (update_onscreen_requirements): make sure
windows returning from fullscreen mode are constrained to be
"onscreen"; fixes#353699.
2006-09-07 Elijah Newren <newren gmail com>
* src/metacity-dialog.c: Patch from Bruno Boaventura de Oliveira
Lacerda to replace copy_of_gdk_x11_window_set_user_time() with
gdk_x11_window_set_user_time(). We've long since adopted gtk+ >=
2.6 as a dependency. #352293
2006-08-21 Elijah Newren <newren gmail com>
Patch from Thomas Andersen to fix metacity-dialog handling of
arguments. #340690
* src/metacity-dialog.c (main): replace hackish argument parsing
with GOption parsing. Much nicer. :)
2006-08-21 Elijah Newren <newren gmail com>
Patch from Ed Catmur to fix keybindings with hex-values (coming
from special extended keyboard keys). #140448.
* src/keybindings.c (struct _MetaKeyBinding): change keycode from
KeyCode to unsigned int (comment from Elijah: why???),
(reload_keycodes): only grab keysyms for keybindings that have
them, (count_bindings, rebuild_binding_table): bindings can be
valid either due to a valid keysym or a valid keycode,
(display_get_keybinding_action, meta_change_keygrab,
process_tab_grab, process_workspace_switch_grab): handle keycode
as well as keysym
* src/prefs.[ch] (struct MetaKeyCombo, update_binding,
update_list_binding): handle keycode as well as keysym
* src/ui.[ch] (meta_ui_accelerator_parse): new function special
cases strings of the form "0x[0-9a-fA-F]+" and otherwise calling
gtk_accelerator_parse(), (meta_ui_parse_accelerator,
meta_ui_parse_modifier): call meta_ui_accelerator_parse instead of
gtk_accelerator_parse.
2006-08-21 Elijah Newren <newren gmail com>
Allow drags & resizes to be reverted by hitting escape. Based on
patch from Thomas Andersen. #126497.
* src/display.c (grab_op_is_mouse_only): new function,
(meta_display_begin_grab_op): grab the keyboard when moving or
resizing too so that we can get escape keypresses
* src/display.h (struct _MetaDisplay): add a comment to remind
that grab_was_cancelled is only used in wireframe mode
* src/keybindings.[ch] (process_mouse_move_resize_grab): add new
function for handling keypresses during mouse-only moving and
resizing, (meta_window_grab_all_keys): add a timestamp parameter
and pass it to meta_window_focus(),
(meta_display_process_key_event): make sure
process_mouse_move_resize_grab() gets called when needed,
(process_keyboard_move_grab, process_keyboard_resize_grab):
rearrange some code slightly and improve the comments to make it
more readable
2006-08-21 Elijah Newren <newren gmail com>
Fix several bugs with handling of fullscreen windows, causing them
to not actually be fullscreen. #343115 (and also #346927,
#350547, #351643, the recent additional WINE-related issue
mentioned on the mailing list, and probably others...)
* src/constraints.c (setup_constraint_info): if a window tries to
resize to fullscreen-size and it has a fullscreen function but
isn't actually marked as fullscreen then assist it by marking it
as such, (constrain_fully_onscreen, constrain_titlebar_visible):
ignore this constraint for fullscreen windows since such windows
have a separate specialized constraint
* src/stack.c (window_is_fullscreen_size, get_standalone_layer):
remove the old window_is_fullscreen_size() hack for detecting
windows to treat as fullscreen since it doesn't work well with the
new constraints framework (i.e. we needed a slightly different
hack)
* src/window.[ch] (meta_window_new_with_addrs): shuffle the order
of adding the window to the stack and moveresizing the window
since moveresizing can cause stack changes if the window's initial
size is fullscreen size, (meta_window_make_fullscreen,
meta_window_make_fullscreen_internal): split
meta_window_make_fullscreen() similar to meta_window_maximize() so
that constraints can make use of it
2006-08-19 Baptiste Mille-Mathias <baptiste.millemathias@gmail.com>
* src/stock_delete.png: Update the pixmap to a new one which
fit better with the other pixmaps of the menu. First patch in
metacity, woot! #345498
2006-08-18 Elijah Newren <newren gmail com>
* src/tabpopup.c (meta_ui_tab_popup_new): Patch from Willie Walker
to restore the part of the patch that I should not have reverted
in #123372, in order to fix accessibility. #350624
2006-08-07 Elijah Newren <newren gmail com>
* src/window.c (intervening_user_event_occurred): Vytautus Liuolia
totally rocks; he tested and debugged and tracked down where we
were using the focus window's net_wm_user_time even when it was
uninitialized. This may fix bug 311868 and others I've heard
about (with Valknut, IIRC). It definitely fixes the issues Vytas
was seeing with his single instance library. :-)
2006-08-07 Elijah Newren <newren gmail com>
Add a constrain_titlebar_visible constraint; should fix both bug
333328 and bug 345522. Not perfect (minor annoying snap pulling
windows back onscreen, plus an ugly hack almost as bad as the old
one), but tarballs are due in less than half an hour. ;-)
* src/boxes.[ch] (meta_rectangle_overlaps_with_region):
new function
* src/constraints.c (constrain_titlebar_visible): new function,
(enum ConstraintPriority, array all_constraints,
update_onscreen_requirements): various small changes to
accomodate the new function
* src/edge-resistance.c: remove the infinite edge resistance,
which was a big hack of a way to workaround the lack of a
titlebar_visible constraint
* src/window.[ch] (MetaWindow): new require_titlebar_visible
bitfield, (meta_window_new_with_attrs): initialized here
2006-08-07 Elijah Newren <newren gmail com>
* src/frames.c (meta_frames_button_press_event): Patch from Chris
Ball to not minimize in response to double clicks on the titlebar
when minimiziation should not be allowed. #347377
2006-08-07 Elijah Newren <newren gmail com>
Patch from Björn Lindqvist to fix button lighting with dragged
clicks. #321474.
* src/frames.c (meta_frames_button_press_event): update the
prelit_control, (meta_frames_button_release_event): some code
refactoring to simplify things a bit, and make sure to update the
prelit_control
2006-08-07 Elijah Newren <newren gmail com>
* src/keybindings.c (process_keyboard_move_grab): Patch from
Thomas Andersen to return the window to maximized state if the
window was "shaken loose" from maximized state during a resize but
the resize is later aborted. #346719.
2006-08-07 Elijah Newren <newren gmail com>
Patch from Vytautas Liuolia to react to _NET_STARTUP_ID changes,
as proposed for the new startup-notification/EWMH spec. #347515
* src/window-props.c (reload_net_startup_id): be sure to act on
the new id instead of just recording it
* src/window.[ch] (window_activate, meta_window_activate,
meta_window_activate_with_workspace, meta_window_client_message):
change window_activate() to take a workspace parameter instead of
hardcoding to the current workspace, add
meta_window_activate_with_workspace() function needed by
reload_net_startup_id().
2006-08-07 Thomas Thurman <thomas@thurman.org.uk>
* src/frames.h: add new MetaButtonSpace struct; use it for
close_rect, max_rect, min_rect and menu_rect.
* src/frames.c (control_rect, get_control): modify to support
the new fields in MetaButtonSpace.
* src/theme.c (meta_frame_layout_get_borders, rect_for_function,
meta_frame_layout_calc_geometry, button_rect): add support for
the new fields in MetaButtonSpace.
2006-08-07 Elijah Newren <newren gmail com>
* src/screen.c (meta_screen_resize_func): patch from Dmitry
Timoshkov to make sure window features get recalculated when the
screen is resized via XRandR. Part of #346927.
2006-08-04 Elijah Newren <newren gmail com>
Patch from Dmitry Timoshkov to fix the heuristic for determining
if windows can be made fullscreen (needed for WINE and possible
also some legacy applications). Part of #346927.
* src/window.c (recalc_window_features): ignore window decoration
when checking size for determing whether an unresizable window
should be allowed ot be considered for fullscreening
2006-07-24 Björn Lindqvist <bjourne@gmail.com>
* src/display.c (meta_display_grab_window_buttons): Grab
Alt+Shift+Button1 as well to partially fix operation ordering
issues when trying to snap-move windows. Part of #112478.
2006-06-10 Elijah Newren <newren gmail com>
Patch from Aidan Delaney to tidy tabpopup.c by factoring out
tab_entry_new(). #166890.
* src/tabpopup.c (tab_entry_new): new function,
(meta_ui_tab_popup_new): use tab_entry_new() to remove a big chunk
of code, plus a few other small cleanups.
Fri May 26 16:48:29 2006 Søren Sandmann <sandmann@redhat.com>
* src/effects.c (meta_effect_run_unminimize): Run an unminimize effect
* src/window.c (meta_window_unminimize): Store a "was_minimized"
boolean in the window.
* src/window.c (meta_window_show): If the window was minimized,
run an unminimize animation.
* src/c-window.c (meta_comp_window_run_unminimize): Add an
unminimize animation, running the minimize one in reverse.
2006-05-26 Elijah Newren <newren gmail com>
* src/display.c (meta_display_close): Fix a crash on exit/logout
from assuming a compositor would always exist
Thu May 25 15:56:43 2006 Søren Sandmann <sandmann@redhat.com>
* src/effects.h (struct MetaEffect): Move duplicated window field
outside the union
* src/compositor.c: delete duplicated code to get at the window.
Thu May 25 15:17:29 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-window.c: Fix compilation in non-compositor case, by
moving the stack functions into the HAVE_COMPOSITOR defines.
Thu May 25 15:11:58 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-window.h: Add a destroy notifier to the window.
* src/c-screen.c (on_window_destroy): New function.
* src/c-screen.c (meta_comp_screen_add_window): Use the destroy
notifier here.
* src/c-window.c (generate_phases): New function. Simplify the
minimize animation a lot by generating all the rectangle
information into an array, then processing that.
Wed May 24 22:15:01 2006 Søren Sandmann <sandmann@redhat.com>
* src/compositor.c (do_effect): Make sure windows are kept on top
of the panel during minimize.
Wed May 24 21:17:59 2006 Søren Sandmann <sandmann@redhat.com>
* src/compositor.c (do_effect): Shrink the window instead of
explode it.
* src/compositor.c (do_effect): don't read the frame if it is
NULL.
* src/c-window.c (meta_comp_window_run_minimize): Resurrect the
shrinking minimize animation.
* src/c-window.c (meta_comp_window_fade_in): Make dialogs 90%
translucent.
* src/c-window.c (update_fade): End at end_fade, not 1.0.
Wed May 24 16:37:11 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-window.c (private_metacity_window): New function
* src/c-window.c (meta_comp_window_refresh_attrs): Map metacity's
own windows directly.
Wed May 24 14:36:42 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-window.c (meta_comp_window_{freeze,thaw}_stack: Add a
stack-freeze feature to CWindow.
* src/c-screen.c (meta_comp_screen_restack): Don't restack if the
window is frozen.
Wed May 24 12:57:32 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-window.c (meta_comp_window_free): return TRUE when the
window is actually freed.
* src/compositor.c (do_effect): Disable updating before exploding
the window.
* src/c-window.c: Make MetaCompWindow refcounted.
* src/c-window.[ch]: New functions meta_comp_window_{show,hide}
* src/c-screen.c (meta_comp_screen_unmap): Call
meta_comp_window_hide() instead of directly setting the viewable
status of the node.
* src/c-screen.c (meta_comp_screen_remove_window): Only remove the
window when it is actually freed.
Tue May 23 16:36:04 2006 Søren Sandmann <sandmann@redhat.com>
* src/compositor.c (do_effect): Also use explode when windows close.
* src/c-window.c (meta_comp_window_explode): Add refcounting to
comp window, and use it in the explosion effect
* src/effects.h (struct MetaEffect): Add new MetaCloseEffect.
* src/display.c (event_callback): Run it from the UnmapNotify
event handler.
Tue May 23 15:23:58 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-window.c (send_sync_request): New function to send a sync
request to newly mapped windows.
(on_request_alarm): Show the window here.
Mon May 22 17:35:52 2006 Søren Sandmann <sandmann@redhat.com>
* src/effects.[ch]: Beginning of new layer that abstracts
transition effects.
New functions:
(meta_push_effect_handler): Install an effect handler
(meta_pop_effect_handler): Remove last effect handler
(meta_effect_run_minimize): Create a minimize effect and pass it
to the handler.
(meta_effect_end): Called by handler when the effect is finished.
* src/compositor.c: Move explosion code form there to src/c-window.c.
* src/c-screen.c: Delete explosion related code.
2006-05-22 Björn Lindqvist <bjourne@gmail.com>
* common.h (enum MetaCursor):
* display.c (meta_display_create_x_cursor): Make mouse cursor when
moving windows become a hand. Fixes#337376.
2006-05-18 Björn Lindqvist <bjourne@gmail.com>
* resizepopup.c: Remove the unused attributes resize_gravity,
width_inc, height_inc, min_width, min_height, frame_left,
frame_right, frame_top, frame_bottom, tick_origin_x, tick_origin_y
from the MetaResizePopup struct. Delete all code that references
those attributes.
2006-05-15 Elijah Newren <newren gmail com>
Revert the accessibility module loading workaround from Gnome
2.6, since gtk+ has long since fixed this for us. #123372.
* src/Makefile.am: remove METACITY_LIBDIR define
* src/main.c (find_accessibility_module,
accessibility_invoke_module, accessibility_invoke, main): remove
the first three of these functions and all calls to them
* src/tabpopup.c (meta_ui_tab_popup_new): not sure if this part of
120025 needed to be reverted but doing the reversion, if wrong, is
the best way to get someone from the accessibility team to scream,
er, I mean comment. ;-)
2006-05-15 Elijah Newren <newren gmail com>
* src/screen.c (reload_xinerama_infos): Patch from
jylefort@FreeBSD.org to prevent a crash when changing resolution.
Fixes#340847.
2006-05-15 Björn Lindqvist <bjourne@gmail.com>
* places.[ch] (intcmp, window_get_edges,
get_windows_showing_on_same_screen, get_vertical_edges,
get_horizontal_edges, meta_window_find_next_vertical_edge,
meta_window_find_next_horizontal_edge,
meta_window_find_nearest_vertical_edge,
meta_window_find_nearest_horizontal_edge): Remove the preceeding
functions as they are all obsoleted by the new edge-resistance
stuff. Fixes#341561.
Fri May 5 12:50:58 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-window.c (has_counter): Some experimental code to handle
sync counter notifications on a window.
* src/c-screen.c (meta_comp_screen_add_window): Pass a MetaDisplay
2006-04-25 Elijah Newren <newren gmail com>
Clear _NET_WM_VISIBLE_NAME (and the ICON_ equivalent) when no
longer being used. Fixes#330671.
* src/window.[ch] (struct MetaWindow): new
using_net_wm_visible_name and using_net_wm_visible_icon_name bits,
(meta_window_new_with_attrs): initialize these new bits to false
* src/window-props.c (set_title_text, set_window_title, set_icon_title):
if the _NET_WM_VISIBLE_(ICON_)NAME property was previously set but
doesn't need to be this time, make sure to clear it
Thu May 4 13:30:04 2006 Søren Sandmann <sandmann@redhat.com>
* src/ui.h: Delete unused META_PRIORITY_COMPOSITE
* src/ui.c: Delete argument from meta_ui_get_display().
* src/c-window.c: Remove the xid->window hashtable and associated
code.
* src/c-screen.[ch]: Rename MetaScreenInfo to MetaCompScreen. Put the
xid->windows table here instaed of as a static variable. Also make
sure that CompWindows are freed when the screen is unredirected.
* src/display.c: Delete non USE_GDK_DISPLAY case, as it didn't
work and hasn't been compiled for a long time.
* src/display.[ch] (meta_display_open): Remove argument as it was
always NULL (and couldn't possibly be anything else in the
USE_GDK_DISPLAY case).
Tue May 2 17:12:54 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-window.[ch]: New files
* src/c-screen.c: Move WindowInfo struct to new c-window.[ch]
files. Delete various bits of obsolete, commented-out code.
Fri Apr 28 12:53:23 2006 Søren Sandmann <sandmann@redhat.com>
* src/core.c (get_window): New function.
* src/core.c: Use get_window() instead of cutted-and-pasted code
all over the place.
2006-04-25 Elijah Newren <newren gmail com>
* NEWS: 2.15.1 release
* configure.in: belated post-release version bump to 2.15.1
* src/Makefile.am: Include boxes.h so that control-center won't
fail to build #339708.
2006-04-19 Thomas Andersen <phomes@gmail.com>
* src/window-props.c (reload_transient_for): warn and ignore if
transient_for is set to a non-top-level window. Fixes#335524.
2006-04-19 Björn Lindqvist <bjourne@gmail.com>
* src/frames.c (struct CachedPixels, meta_frames_destroy,
invalidate_cache, generate_pixmap, populate_cache,
cached_pixels_draw, meta_frames_expose_event,
meta_frames_paint_to_drawable):
Replace while loops iterating over sequences with for loops. Also,
replace the attributes in the CachedPixels struct with a list of
four CachedFramePiece:s, this allows iteration over the four
pixmaps instead of treating each one separately. Fixes#338359.
2006-04-18 Björn Lindqvist <bjourne@gmail.com>
* makefile.am: Add boxes.{c,h} to libmetacity_private
* src/theme-parser.c (check_expression):
* src/theme-viewer.c (run_position_expression_tests):
Use meta_rect ().
* src/theme.c: Replace while loops iterating over sequences with
for loops.
* src/theme.c, src/theme.h (struct _MetaPositionExprEnv,
meta_draw_op_draw, meta_draw_op_list_draw,
meta_theme_draw_menu_icon): Use MetaRectangles in function
prototypes instead of x, y, with, height ints where applicable.
2004-04-17 Thomas Thurman <thomas@thurman.org.uk>
* keybindings.c (count_bindings, rebuild_binding_table):
* prefs.c (change_notify, screen_bindings,
window_bindings, init_bindings, update_binding,
find_and_update_list_binding, update_list_binding,
meta_prefs_get_window_binding): Allow any keybinding pref
to be specified either with <foo>, a string, or <foo>_list,
a list of strings, or both. Fixes#164831.
2006-04-16 Elijah Newren <newren gmail com>
Patch from Dan Sanders to fix#334899.
* window.c (meta_window_new_with_attrs): Unminimize ancestors of
new windows when mapped; this prevents e.g. confirmation windows
from causing applications to appear locked when closing via the
window list.
2006-04-15 Elijah Newren <newren gmail com>
Patch from Dan Sanders to fix#335076.
* src/core.c (meta_core_maximize, meta_core_toggle_maximize,
meta_core_unmaximize):
* src/window.c (meta_window_client_message):
Raise windows on maximize/unmaximize.
2006-04-14 Thomas Thurman <thomas@thurman.org.uk>
Add a tabbing function, bound to alt-f6 by default, to cycle
through the windows of the current application. Fixes#164831.
* src/common.h: two new MetaGrabOpts values for group switching
* src/display.c (ping_data_free, meta_display_in_grab_op,
IN_TAB_CHAIN): adapt to new MetaGrabOpts
* src/display.h: new enum value for MetaTabList for group switching
* src/keybindings.c (meta_display_process_key_event):
adapt to new MetaGrabOpts
(process_tab_grab): adapt to new MetaGrabOpts, and use switch
statement for cancelling instead of if statement
* src/metacity.schemas.in: new keybindings
* src/prefs.c, src/prefs.h: handle new keybindings
* src/window.h: define META_WINDOW_IN_GROUP_TAB_CHAIN macro
2006-04-12 Elijah Newren <newren gmail com>
Patch from Ron Yorston to add a focus_new_windows option. Default
is 'smart' (focus by default but normal focus-stealing-prevention
can kick in); 'strict' is current other choice (like 'smart'
except that programs launched by the terminal will not be
focused). Fixes remainder of #326159. Should also close#152004
and a bunch of others.
* src/common.h:
Add a MetaFocusNewWindows enum giving the current types allowed
* src/display.h:
Update docs on allow_terminal_deactivation to note that it is only
relevant when focus_new_windows is 'strict'
* src/prefs.c:
* src/prefs.h:
* src/metacity.schemas.in: add the new gconf key and explanation
* src/prefs.[ch] (#define KEY_FOCUS_NEW_WINDOWS, static gboolean
focus_new_windows, update_focus_new_windows, meta_prefs_init,
change_notify, meta_prefs_get_focus_new_windows,
meta_preference_to_string):
Add all the normal preference handling stuff for this new
focus-new-windows option.
* src/window.c (window_state_on_map, meta_window_set_user_time):
Don't focus windows launched from a terminal
Mon Apr 10 16:44:51 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-screen.c (is_menu): Check if the window is a menu and make
it 90% opaque in that case.
* src/c-screen.c (claim_selection): Handle CM_Sn selection
properly.
* src/c-screen.c: Remove debug spew
* src/screen.c (meta_screen_composite_all_windows): Remove debug spew
2006-03-27 Gora Mohanty <gmohanty@cvs.gnome.org>
* src/metacity.schemas.in:
* src/theme.c:
Changes strings to make them more readable, and more translatable.
Fixes#335720.
2006-04-02 Elijah Newren <newren gmail com>
Fix constraints bug causing negative width windows and crashes.
#336651
* src/constraints.c (constrain_partially_onscreen): Don't
accidentally shove & resize the window by requiring more pixels to
be onscreen than the size of the window.
Fri Mar 31 16:44:56 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-screen.c (meta_screen_info_unredirect): Release the GL
window here. Disconect from the magnifier, not the stacker.
Fri Mar 31 12:24:26 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-screen.c (meta_screen_info_redirect): Only use magnifier
when USE_MAGNIFIER is set.
* src/compositor.c (meta_compositor_free_window): Only wobble when
USE_WOBBLE is set.
2006-03-29 Elijah Newren <newren gmail com>
Fix grouping in the presence of ancestors; caught by Björn.
#336184
* src/group.c (meta_window_compute_group): Use new
meta_window_find_root_ancestor() function to get ancestor; for the
computed group, use the ancestor's group instead of the ancestor
itself
* src/window.[ch] (meta_window_find_root_ancestor,
meta_window_raise): split meta_window_find_root_ancestor()
functionality of meta_window_raise() and make it available
elsewhere
2006-03-29 Thomas Thurman <thomas@thurman.org.uk>
* src/window.c, src/window.h (meta_window_set_demands_attention,
meta_window_unset_demands_attention): mark a window as needing
or not needing the user's attention
* src/window.c (meta_window_show, window_activate,
meta_window_focus, meta_window_configure_request,
meta_window_client_message): use the new set/unset
demands attention functions. Fixes#305822.
Tue Mar 28 09:57:26 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-screen.c (meta_screen_info_add_window): Also check for overlay_window.
* src/c-screen.c (meta_screen_info_redirect): Trap errors out of
unredirect().
2006-03-25 Thomas Thurman <thomas@thurman.org.uk>
* src/window.c, src/window.h (update_net_wm_state,
update_mwm_hints, update_wm_class, update_transient_for):
deleted and moved into window-props.c
(meta_window_new_with_attrs): added constructing field
and four new initial properties (as above)
(meta_window_recalc_features,
meta_window_recalc_window_type): new functions
* src/window-props.c (init_net_wm_state, reload_net_wm_state
init_mwm_hints, reload_mwm_hints, init_wm_class,
reload_mwm_class, init_transient_for, reload_transient_for):
new functions, moved in from window.c
(meta_display_init_window_prop_hooks): initialise new properties
2006-03-16 Ray Strode <rstrode@redhat.com>
Add patch from Elijah Newren to fix type
for compositing_manager schema entry (bug 335901)
* src/metacity.schemas.in: Change type from "boolean" to "bool"
and default value from "FALSE" to "false"
Mon Mar 20 11:50:44 2006 Søren Sandmann <sandmann@redhat.com>
* src/c-screen.c (meta_screen_info_redirect): Put the desktop into
a magnifier.
* src/c-screen.c (struct MetaScreenInfo): Add a CmMagnifier
* src/c-screen.c (meta_screen_info_redirect): Move some of the gl
window related stuff here.
2006-03-03 Thomas Thurman <thomas@thurman.org.uk>
Always set _NET_WM_STATE when a window is shown or
hidden, even if it wasn't mapped.
* src/window.c (meta_window_hide, meta_window_show):
call set_net_wm_state unconditionally
2006-03-16 Elijah Newren <newren gmail com>
Add debugging information for edge resistance
* src/edge-resistance.c (cache_edges): print out the edges that
are being cached if in verbose mode,
(meta_window_edge_resistance_for_move,
meta_window_edge_resistance_for_resize): if edge resistance kicked
in then print out a message about it
* src/util.c:
* src/util.h:
Add META_DEBUG_EDGE_RESISTANCE to MetaDebugTopic enum list
Wed Mar 15 16:30:09 2006 Søren Sandmann <sandmann@redhat.com>
* src/compositor.c (set_geometry): Use set_target_rect() instead
of set_size().
* src/c-screen.c: Add set_target_rect() as a way of scaling windows.
* src/window.c (meta_window_handle_mouse_grab_op_event): Turn
updates on after a button release.
* src/window.c (meta_window_move_resize_internal): Fix
indentation.
Tue Mar 14 11:57:46 2006 Søren Sandmann <sandmann@redhat.com>
* src/compositor.c: Comment out wobbling
* src/compositor.c (blow_up): remove this function
* src/compositor.c (process_configure_notify): Uncomment
set_size().
* src/c-screen.c (meta_screen_info_set_updates): When updates are
true, set all the properties such as size and shape.
* src/c-screen.c (meta_screen_info_add_window): Create a special
WindowInfo structure for each window.
* src/c-screen.c (meta_screen_info_set_size): Set size and output
shape of the drawable node.
2006-03-06 Ryan Lortie <desrt@desrt.ca>
* src/window.c (meta_window_free): Only unmaximise window before
freeing if the window is actually maximised. #333563.
Wed Mar 3 13:25:03 2006 Søren Sandmann <sandmann@redhat.com>
* src/compositor.c, src/c-screen.[ch]: Split the ScreenInfo data
structure into separate, new files c-screen.[ch].
* src/errors.c (x_error_handler): Forward foreign errors to
foreign displays.
* src/errors.c (meta_errors_register_foreign_display): Implement
this function
* src/errors.h: Add new meta_errors_register_foreign_display()
Tue Feb 28 14:49:23 2006 Søren Sandmann <sandmann@redhat.com>
* src/compositor.c: Put the windows in a stacker rather than
do the traversing outselves.
2006-02-27 Elijah Newren <newren gmail com>
Patch from Thomas Thurman to prevent setting cycle_windows to
keybindings that won't work. #329676
* src/prefs.c (update_binding):
Make sure that bindings which require a modifier key are set to a
keybinding with one or else that the binding is reverted.
* src/ui.[ch] (meta_ui_accelerator_name):
New function
2006-02-27 Elijah Newren <newren gmail com>
Patch from Thomas Thurman to work around buggy application
grouping with transient windows. #328211
* src/group.c (meta_window_compute_group):
Put transients in the same group with their parent, always.
* src/window.c (update_transient_for):
Update group too
Sat Feb 25 11:46:14 2006 Søren Sandmann <sandmann@redhat.com>
* src/display.c (meta_display_begin_grab_op): Call
meta_compositor_begin_move if there is a compositor
* src/compositor.c (meta_compositor_begin/update/end_move):
Implement those functions.
* src/spring-model.[ch]: New files
Thu Feb 23 15:40:52 2006 Søren Sandmann <sandmann@redhat.com>
* src/compositor.c (meta_compositor_manage_screen): Don't attempt
to manage the screen if it already is managed.
* src/compositor.c (meta_compositor_unmanage_screen): Synchronize
the display.
2006-02-19 Thomas Thurman <thomas thurman org uk>
Removed "move to another workspace" menu when there are
exactly two workspaces. Fixes#151183.
* src/menu.c (meta_window_menu_new): clear
META_MENU_OP_WORKSPACES bit when n_workspaces==2
Fri Feb 17 11:56:35 2006 Søren Sandmann <sandmann@redhat.com>
* src/screen.c (meta_screen_free): Only uncomposite the screen if
there is a compositor.
* src/compositor.c (meta_compositor_new): Warn and fail if the
server doesn't have composite
Thu Feb 16 15:24:42 2006 Søren Sandmann <sandmann@redhat.com>
* src/screen.c (meta_screen_composite_all_windows): New function.
* src/prefs.[ch], src/metacity.schemas.in: Add new
compositing_manager key.
* src/display.c (prefs_changed_callback): Handle
META_PREF_COMPOSITOR_MANAGER
* src/display.c (event_callback): Only call
meta_compositor_process_event() if there is in fact a compositor.
* src/display.c (enable/disable_compositor): Add code to
enable/disable compositor at runtime
Wed Feb 15 14:47:50 2006 Søren Sandmann <sandmann@redhat.com>
* src/compositor.c (meta_compositor_unminimize): Add unused wobbly
unminimize animation by Kristian
* src/compositor.c (meta_compositor_minimize): Add wobbly minimize
animation by Kristian.
* src/compositor.c: Add support for turning updates on and off.
* src/window.c (meta_window_move_resize_internal): Use
sync counter to make composited resizing tear free
2006-02-13 Elijah Newren <newren gmail com>
* src/keybindings.c (process_tab_grab):
We had that prev_window code in multiple places and it was all
identical. Let's just stick it in one place to make the function
easier to read.
2006-02-11 Thomas Thurman <thomas thurman org uk>
Disable alt-f7 if a window can't be moved, and alt-f8 if it
can't be resized. Fixes#328920.
* src/keybindings.c (handle_begin_move, handle_begin_resize):
check window->has_*_func before beginning operation
2006-02-11 Elijah Newren <newren gmail com>
* src/stack.h (enum MetaStackLayer):
* src/stack.c (get_standalone_layer):
actually use META_LAYER_TOP but just manually make it equal to
META_LAYER_DOCK. Add a note point to the EWMH for why we do this.
#330717
2006-02-10 Thomas Thurman <thomas thurman org uk>
Avoid a memory leak when checking which workspace(s) a window is
on. Fixes#322059.
* src/workspace.h (struct MetaWorkspace):
* src/workspace.c (meta_workspace_new, meta_workspace_free):
added list_containing_self member to MetaWorkspace
* src/window.c (meta_window_get_workspaces): use
window->workspace->list_containing_self instead of allocating (and
leaking) such a list on the fly.
2006-02-09 Thomas Thurman <thomas thurman org uk>
* src/testboxes.c (test_regions_okay, test_clamping_to_region):
add messages to explain that warnings are harmless
2006-02-03 Thomas Thurman <thomas thurman org uk>
* src/display.c (event_callback): produce warning when invalid
events with no timestamp are received, rather than failing an
assertion
2006-01-30 Elijah Newren <newren gmail com>
* src/display.[ch] (struct MetaDisplay), meta_display_open,
meta_display_set_input_focus_window,
meta_display_focus_the_no_focus_window): Track the active_screen,
(event_callback): If the mouse enters a window on a different
screen, activate the default window on the new screen. May need
to be modified for click-to-focus; we'll wait for feedback. Fixes
#319348.
2006-01-23 Elijah Newren <newren gmail com>
* src/display.c (meta_display_check_threshold_reached): change the
order of the ||'ed items in the if to avoid using an uninitialized
value
* src/prefs.c (meta_prefs_init): fix a couple uninitialized value
problems
2006-01-21 Elijah Newren <newren gmail com>
Patch from Christian Kirbach to prevent a critical warning crasher
when switching themes. #327847.
* src/theme.c (meta_theme_free): since themes are only constructed
as needed and may be NULL, check for that before freeing theme
hash tables
2006-01-21 Elijah Newren <newren gmail com>
* src/common.h (enum MetaActionDoubleClickTitlebar):
* src/frames.c (meta_frames_button_press_event):
* src/prefs.c (action_double_click_titlebar_from_string):
* src/metacity.schemas.in:
Patch from Dick Marinus to add a minimize
double-click-titlebar-action; slightly modified to also include a
none action. #300210.
2006-01-20 Elijah Newren <newren gmail com>
* src/constraints.c (setup_constraint_info): fixed_directions is
only meant for explicit user interactions; disable it for
everything else. There are other bugs and improvements that could
be made with fixed_directions that I should be filing too, but at
least put a FIXME there for now--I'm so lame. Fixes#327822.
2006-01-20 Elijah Newren <newren gmail com>
Avoid flashing when closing a maximized window. Fixes#317254.
* src/window.c (unmaximize_window_before_freeing): new function
that just fixes the net_wm_state and sends a configure_notify,
(meta_window_free): use unmaximize_window_before_freeing() instead
of meta_window_unmaximize() to avoid flicker
2006-01-20 Elijah Newren <newren gmail com>
Fix unitialized value problem when in raise-on-click mode. Søren,
#327572.
* src/display.c (meta_display_check_threshold_reached): make
function be a no op if raise_on_click!=FALSE
* src/display.h (struct MetaDisplay): point out that
grab_initial_[xy] and grab_threshold_movement_reached are only for
raise_on_click==FALSE mode.
2006-01-20 Elijah Newren <newren gmail com>
Patch from Søren to fix some reading-from-free'd-data errors.
#327575
* src/edge-resistance.c (meta_display_cleanup_edges): store the
edges in a hash table so that we can still read their values
within the loop from the other array they are stored in, then free
them all at the end.
2006-01-20 Elijah Newren <newren gmail com>
Fix various initialization and default issues, especially for
--disable-gconf. Make --disable-gconf actually work. #326661.
* configure.in: Fix compilation with --disable-gconf
* src/metacity.schemas.in: Add a note that if any defaults are
changed in this file, src/prefs.c may need to be updated to
reflect the change
* src/prefs.c: set various static global vars to the right default
value, (meta_prefs_init): get the titlebar_font and current_theme
handled better when not using gconf, (struct MetaSimpleKeyMapping,
screen_string_bindings, window_string_bindings): helper vars to
allow some keybindings to work even without gconf,
(init_bindings): initialize bindings for the without-gconf case
too, (init_commands): make sure these are all NULL for the
non-gconf case so that we don't access random memory,
(init_workspace_names): just give these all a default name for the
non-gconf case,
(meta_prefs_change_workspace_name): actually change the name for
the non-gconf case too
2006-01-20 Elijah Newren <newren gmail com>
More careful error handling of values returned by GConf. Fixes
#326615.
* src/prefs.c (get_bool): new helper function, (meta_prefs_init):
use get_bool to handle the case of a gconf key not existing,
(update_cursor_size): sanity check for sane values
2006-01-20 Elijah Newren <newren gmail com>
Prevent rapidly repeated visual bells from hanging metacity.
Fixes#322032.
* src/display.h (struct MetaDisplay): add a last_bell_time field,
(XSERVER_TIME_IS_BEFORE_ASSUMING_REAL_TIMESTAMPS macro,
XERVER_TIME_IS_BEFORE macro): add parentheses around usage of
macro parameter
* src/display.c (meta_display_open): initialize last_bell_time,
(event_callback): don't allow more than one bell per second
2006-01-20 Elijah Newren <newren gmail com>
Patch from Björn Lindqvist to fix#98340.
* src/screen.c (meta_screen_ensure_tab_popup): Make sure an
outline border is shown even if a window frame's width is 0.
Also, correctly handle window outlines in showing desktop mode.
Thu Jan 19 18:05:47 2006 Søren Sandmann <sandmann@redhat.com>
* src/compositor.c (meta_compositor_manage_screen):
g_object_unref() rather than ws_region_unref().
2006-01-16 Elijah Newren <newren gmail com>
* src/window-props.c: manually define HOST_NAME_MAX if not already
defined to fix Solaris compilation issue. Caught by Damien
Carbery, patch from Havoc. #326745
2006-01-15 Kyle Ambroff <kambroff@csus.edu>
* src/workspace.c (focus_ancestor_or_mru_window):
If no valid window is found in the MRU list, then set focus to the
desktop window. (#317405)
2006-01-15 Elijah Newren <newren@gmail.com>
Fix accidental overzealous focus holding by the terminal
introduced by the original patch in bug 326159. Windows launched
from panel icons, the panel menu, or global keybindings should get
focus now. #326159.
* src/display.c (meta_display_open, event_callback):
* src/display.h (struct MetaDisplay):
* src/keybindings.c (process_event):
* src/window.c (meta_window_set_user_time):
Add a new allow_terminal_deactivation field to MetaDisplay and use
it to track whether the user's last action was interaction with
the terminal or some outside action (global keybinding, clicking
on a dock, etc.) likely to launch a new window.
* src/window.c (window_state_on_map):
Allow the focus switch from a terminal to something else if
allow_terminal_deactiviation is true.
* src/keybindings.c (handle_panel_keybinding):
Remove some unneeded code.
Fri Jan 13 14:40:19 2006 Søren Sandmann <sandmann@redhat.com>
* configure.in: Add a dependency on libcm when building with
compositor.
* src/window.c (meta_window_hide): Make this function static.
* src/window.c (implement_showing): Use meta_compositor_minimize()
to do a weird minimize effect.
* src/compositor.[ch]: Beginning of new GL based compositor.
* src/screen.h (struct _MetaScreen): Add void pointer to
compositor data.
* src/screen.c (meta_screen_new): Remove obsolete compositor
stuff; initialize compositor_data. Don't composite manage screen
out of this function.
* src/errors.c (x_error_handler): Check that display is non-NULL
before using it. Add comment about how that can happen.
* src/display.c (meta_display_{begin,end}_grab_op): Remove
explicity damage of windows.
* src/display.c (meta_display_open): Composite manage all the
screens.
2006-01-10 Elijah Newren <newren@gmail.com>
Add a raise on click option, basically only because all the major
distros are patching it in anyway. See #326156.
* src/metacity.schemas.in: add the new gconf key and explanation
* src/prefs.[ch] (#define KEY_RAISE_ON_CLICK, static gboolean
raise_on_click, update_raise_on_click, meta_prefs_init,
change_notify, meta_prefs_get_raise_on_click,
meta_preference_to_string):
Add all the normal preference handling stuff for this new
raise-on-click option.
* src/core.c (meta_core_show_window_menu):
* src/display.c (event_callback, meta_display_begin_grab_op):
* src/window.c (window_activate, meta_window_configure_request, ):
Only raise the window if in raise_on_click mode.
* src/display.c (meta_display_begin_grab_op,
meta_display_end_grab_op, meta_display_check_threshold_reached):
* src/display.h (struct MetaDisplay):
* src/window.c (meta_window_handle_mouse_grab_op_event):
if not in raise-on-click mode only raise on button release if the
click didn't start a move or resize operation; needs a few extra
MetaDisplay fields to handle this
* src/core.c (meta_core_user_lower_and_unfocus):
no need to do the MRU shuffling if not maintaining the stacking
order == MRU order invariant
* src/frames.c (meta_frames_button_press_event):
* src/window.c (meta_window_begin_grab_op):
remove an unneeded window raising that is already handled elsewhere
2006-01-10 Elijah Newren <newren@gmail.com>
Don't "steal" focus from terminal windows for new window mappings
as the difference in usage between terminals and other apps seems
to suggest this difference in treatment. See #326159 for details,
feedback welcome.
* src/window.[ch] (__window_is_terminal): New function, currently
an ugly hack and should be replaced by a new property set by
applications if the behavior works to our liking,
(window_state_on_map): don't transfer focus to new windows from
terminals unless the new window is a transient of the focused
terminal
* src/keybindigns.c (handle_panel_keybinding): panel run dialog
keybinding should be counted as an explicit transfer of focus to
the new window, so override the
don't-transfer-focus-from-terminals in this case
2006-01-09 Elijah Newren <newren@gmail.com>
More thorough handling of source indication. Part of #326041.
* src/window.c (window_activate): new function based off the old
meta_window_activate but which also takes source indication into
account, (meta_window_active): just call window_activate() with
the necessary source indication to get the behavior wanted,
(meta_window_client_message): check source indication too for
_net_active_window messages
* src/window.h (enum MetaClientType): convenience enum for source
indication handling
2006-01-09 Elijah Newren <newren@gmail.com>
Make the taskbar less flash happy and fix up some related stacking
issues. #326035.
* src/window.c (windows_overlap): new function,
(meta_window_show): if a window is denied focus but doesn't
overlap with the focus window there is no need to set the demands
attention hint nor stack that window below the focus window,
(meta_window_get_outer_rect): we're not modifying the window so
declare it to be const
2006-01-09 Elijah Newren <newren@gmail.com>
Fix window outline for minimized windows when using alt-esc.
#325092.
* src/display.c (meta_display_begin_grab_op): Specify the showing
type of tabbing operation (Alt tab vs. alt-esc) in addition to the
listing type of tabbing operation (docks vs normal windows) to
meta_screen_ensure_tab_popup().
* src/display.h (enum MetaTabShowType): new convenience enum
* src/screen.[ch] (meta_screen_ensure_tab_popup): require the
showing type be specified in addition to the tabbing type; put the
outline around the window instead of the icon when in alt-esc
mode.
2006-01-09 Elijah Newren <newren@gmail.com>
Fix reduced resources resize handling for windows with sizing or
resizing constraints. #325774.
* src/display.c (meta_display_end_grab_op): Provide constraints.c
with the correct gravity information.
2006-01-09 Elijah Newren <newren@gmail.com>
Be more strict about what is considered a valid region with
partial struts. Fixes#322070.
* src/boxes.[ch]:
(meta_rectangle_expand_region_conditionally):
new function behaving like meta_rectangle_expand_region() but
which only does so when the width and height of the rectangles
meet a certain threshold
(replace_rect_with_list):
Remove a compiling warning
* src/constraints.c:
(constrain_partially_onscreen):
provide minimum thresholds in each direction for the size of the
rectangles to avoid cases where only a single pixel thick layer of
a window might be showing
2006-01-09 Elijah Newren <newren@gmail.com>
* src/bell.c (meta_bell_notify_frame_destroy): Use the right
function to remove the timeout so that we don't crash if removed
at an inopportune time. Fixes#322031.
2006-01-09 Elijah Newren <newren@gmail.com>
* src/edge-resistance.c (apply_edge_resistance): Remove the
"pull-away" edge resistance. Fixes another of the zillions of
issues covered in #321905.
2006-01-09 Elijah Newren <newren@gmail.com>
* src/edge-resistance.c (apply_edge_resistance): Revert to the old
edge resistance behavior for keyboard movement/resizing based
resistance. Not only makes the code much simpler and shorter, but
also fixes another of the zillions of issues covered in #321905.
2006-01-09 Elijah Newren <newren@gmail.com>
* src/edge-resistance.c (apply_edge_resistance): Remove the
timeout resistance at screen/xinerama edges for the whiners.
Okay, it made sense. Fixes another of the zillions of issues
covered in #321905.
2006-01-09 Elijah Newren <newren@gmail.com>
* src/edge-resistance.c (apply_edge_resistance): Make extra
timeout edge resistance apply even if one edge already offscreen.
Fixes another of the zillions of issues covered in #321905.
2006-01-09 Elijah Newren <newren@gmail.com>
Allow edge resistance at both sides of a window and also when
edges don't overlap but are a single pixel away from doing so.
Fixes one of the zillions of issues covered in #321905.
* src/boxes.[ch]:
(meta_rectangle_edges_align):
new function to handle the overlap or off by one determining
whether edge resistance should kick in for an edge.
(meta_rectangle_edge_cmp_ignore_type):
new function to sort edges but ignore the type so that e.g. left &
right edges of windows can be used interchangeably.
(meta_rectangle_edge_cmp):
now uses meta_rectangle_edge_cmp_ignore_type() to do most the work
and just adds an extra condition
* src/edge-resistance.c:
(find_nearest_position):
use meta_rectangle_edges_align() now to determine whether the
edges align,
(apply_edge_resistance, apply_edge_resistance_to_each_side):
have the edge resistance kick in if either the beginning or ending
positions would cause overlap in the given direction -- fixes an
uncommon but annoying corner case,
(apply_edge_snapping, apply_edge_resistance_to_each_side,
meta_display_cleanup_edges,
stupid_sort_requiring_extra_pointer_dereference, cache_edges):
mix edges from both sides now
2006-01-09 Elijah Newren <newren@gmail.com>
Plug a few leaks. Fixes#309178.
* src/main.c (main): remove an unneeded g_set_prgname() call, free
some strings allocated by the GOptions parsing
2006-01-02 Elijah Newren <newren@gmail.com>
Patch from Björn Lindqvist to fix a logic error. #322149.
* src/window.c (update_resize): && should have been ||.
2005-12-27 Elijah Newren <newren@gmail.com>
Make the workspace switcher work with dual-head (non-xinerama)
setups. Fixes#319423.
* src/display.c (meta_display_open, event_callback,
meta_display_focus_the_no_focus_window):
* src/display.h (struct MetaDisplay,
meta_display_focus_the_no_focus_window):
* src/keybindings.c (primary_modifier_still_pressed):
* src/screen.c (meta_screen_new):
* src/screen.h (struct MetaScreen):
* src/window.c (meta_window_new_with_attrs, meta_window_show):
* src/workspace.c (meta_workspace_focus_default_window):
Replace display->no_focus_window with a no_focus_window for each
screen.
* src/display.[ch] (meta_display_xwindow_is_a_no_focus_window,
event_callback):
* src/window.c (meta_window_new_with_attrs):
New utility function, meta_display_xwindow_is_a_no_focus_window(),
for checking if the given xwindow is a no_focus_window for one of
the screens.
2005-12-27 Elijah Newren <newren@gmail.com>
* src/tabpopup.c (meta_ui_tab_popup_new): since the title is going
to be treated as markup, escape it. Fixes#324846.
2005-12-12 Elijah Newren <newren@gmail.com>
* src/window.c (update_net_frame_extents): make the debugging
message actually correspond to the code. Patch from Björn
Lindqvist. Fixes#322051.
2005-11-22 Elijah Newren <newren@gmail.com>
Don't allow removing a window from maximized or fullscreened state
to place the titlebar under the top panel. Fixes#322075.
* src/display.c (handle_net_moveresize_window): fix up previous
comments now that I know a little more, modify the code just
slightly to clarify that this is NOT a manual user move/resize
operation
* src/window.c (meta_window_unmaximize,
meta_window_unmake_fullscreen,
meta_window_shove_titlebar_onscreen):
don't claim that these are manual user move/resize operations
2005-11-21 Elijah Newren <newren@gmail.com>
* src/constraints.c (constrain_partially_onscreen): Relax the
partially onscreen constraint to allow the titlebar to touch the
bottom panel in order to make the new constraints code function
the same as the old version. Fixes#322071.
2005-11-21 Elijah Newren <newren@gmail.com>
* src/constraints.c (place_window_if_needed): When updating the
xinerama due to placement, update which maximal/spanning rect set
to use as well
2005-11-20 Elijah Newren <newren@gmail.com>
* src/constraints.c (place_window_if_needed): compute the frame
geometry due to maximization only after actually maximizing.
Fixes#321902.
2005-11-21 Davyd Madeley <davyd@fugro-fsi.com.au>
* src/edge-resistance.c (meta_display_compute_resistance_and_snap):
Use GPOINTER_TO_INT() macro instead of cast to allow compilation on
64-bit architectures without warning.
2005-11-19 Elijah Newren <newren@gmail.com>
* src/edge-resistance.c (apply_edge_resistance): differentiate
between movement towards an edge and movement away from one. Pick
smaller constants for movement away from an edge.
2005-11-18 Elijah Newren <newren@gmail.com>
Merge of all the changes on the constraints_experiments branch.
This is just a summary, to get the full ChangeLog of those
changes (approx. 2000 lines):
cvs -q -z3 update -Pd -r constraints_experiments
cvs -q -z3 diff -pu -r CONSTRAINTS_EXPERIMENTS_BRANCHPOINT ChangeLog
Bugs fixed:
unfiled - constraints.c is overly complicated[1]
unfiled - constraints.c is not robust when all constraints
cannot simultaneously be met (constraints need to be
prioritized)
unfiled - keep-titlebar-onscreen constraint is decoration
unaware (since get_outermost_onscreen_positions()
forgets to include decorations)
unfiled - keyboard snap-moving and snap-resizing snap to hidden
edges
109553 - gravity w/ simultaneous move & resize doesn't work
113601 - maximize vertical and horizontal should toggle and be
constrained
122196 - windows show up under vertical panels
122670 - jerky/random resizing of window via keyboard[2]
124582 - keyboard and mouse snap-resizing and snap-moving
erroneously moves the window multidimensionally
136307 - don't allow apps to resize themselves off the screen
(*cough* filechooser *cough*)
142016, 143784 - windows should not span multiple xineramas
unless placed there by the user
143145 - clamp new windows to screensize and force them
onscreen, if they'll fit
144126 - Handle pathological strut lists sanely[3]
149867 - fixed aspect ratio windows are difficult to resize[4]
152898 - make screen edges consistent; allow easy slamming of
windows into the left, right, and bottom edges of the
screen too.
154706 - bouncing weirdness at screen edge with keyboard moving
or resizing
156699 - avoid struts when placing windows, if possible (nasty
a11y blocker)
302456 - dragging offscreen too restrictive
304857 - wireframe moving off the top of the screen is misleading
308521 - make uni-directional resizing easier with
alt-middle-drag and prevent the occasional super
annoying resize-the-wrong-side(s) behavior
312007 - snap-resize moves windows with a minimum size
constraint
312104 - resizing the top of a window can cause the bottom to
grow
319351 - don't instantly snap on mouse-move-snapping, remove
braindeadedness of having order of releasing shift and
releasing button press matter so much
[1] fixed in my opinion, anyway.
[2] Actually, it's not totally fixed--it's just annoying
instead of almost completely unusable. Matthias had a
suggestion that may fix the remainder of the problems (see
http://tinyurl.com/bwzuu).
[3] This bug was originally about not-quite-so-pathological
cases but was left open for the worse cases. The code from
the branch handles the remainder of the cases mentioned in
this bug.
[4] Actually, although it's far better there's still some minor
issues left: a slight drift that's only noticeable after
lots of resizing, and potential problems with partially
onscreen constraints due to not clearing any
fixed_directions flags (aspect ratio windows get resized in
both directions and thus aren't fixed in one of them)
New feature:
81704 - edge resistance for user move and resize operations;
in particular 3 different kinds of resistance are
implemented:
Pixel-Distance: window movement is resisted when it
aligns with an edge unless the movement is greater than
a threshold number of pixels
Timeout: window movement past an edge is prevented until
a certain amount of time has elapsed during the
operation since the first request to move it past that
edge
Keyboard-Buildup: when moving or resizing with the
keyboard, once a window is aligned with a certain edge
it cannot move past until the correct direction has
been pressed enough times (e.g. 2 or 3 times)
Major changes:
- constraints.c has been rewritten; very few lines of code from
the old version remain. There is a comment near the top of
the function explaining the basics of how the new framework
works. A more detailed explanation can be found in
doc/how-constraints-works.txt
- edge-resistance.[ch] are new files implementing edge-resistance.
- boxes.[ch] are new files containing low-level error-prone
functions used heavily in constraints.c and edge-resistance.c,
among various places throughout the code. testboxes.c
contains a thorough testsuite for the boxes.[ch] functions
compiled into a program, testboxes.
- meta_window_move_resize_internal() *must* be told the gravity
of the associated operation (if it's just a move operation,
the gravity will be ignored, but for resize and move+resize
the correct value is needed)
- the craziness of different values that
meta_window_move_resize_internal() accepts has been documented
in a large comment at the beginning of the function. It may
be possible to clean this up some, but until then things will
remain as they were before--caller beware.
- screen and xinerama usable areas (i.e. places not covered by
e.g. panels) are cached in the workspace now, as are the
screen and xinerama edges. These get updated with the
workarea in src/workspace.c:ensure_work_areas_validated()
2005-10-25 Philip O'Brien <philip.obrien@dal.ca>
* src/prefs.c (meta_preference_to_string): add handling for
META_PREF_CURSOR_THEME and META_PREF_CURSOR_SIZE for more complete
debug info
2005-10-23 Elijah Newren <newren@gmail.com>
Fix edge snapping for multi-screen (non-xinerama) setups. #319425
* src/place.c (get_windows_showing_on_same_screen,
get_vertical_edges, get_horizontal_edges): rename
get_windows_on_same_workspace() to
get_windows_showing_on_same_screen()
* src/place.c (get_windows_showing_on_same_screen): exclude windows
in the list that are on a different screen
2005-10-13 Muktha <muktha.narayan@wipro.com>
* src/themes/Simple/metacity-theme-1.xml: Make the unfocussed
Simple window border visible with high contrast inverse theme.
Fixes#121361.
2005-10-08 Elijah Newren <newren@gmail.com>
Fix a crash that occurs when removing some virtual desktops and
windows happen to be on those desktops. #318306.
* src/workspace.c (meta_workspace_relocate_windows): Since windows
cannot be on more than one workspace at a time, remove the window
from the old workspace before adding it to the new one.
2005-10-03 Elijah Newren <newren@gmail.com>
* src/metacity.schemas.in: clarify the meaning of the auto_raise
preference. Fixes one of the issues in #312421.
2005-10-03 Elijah Newren <newren@gmail.com>
Patch from Ross Cohen to make alt-esc consistent with alt-tab by
leaving stacking of unselected windows unchanged. Fixes#314285.
* src/keybindings.c (process_tab_grab): before raising and showing
the next candidate, reset the stack positions to what they were
at the beginning of the grab
2005-10-03 Elijah Newren <newren@gmail.com>
Patch from Ross Cohen to make alt-esc (show windows instantly)
actually show minimized windows too. Fixes#107072.
* src/keybindings.c (process_tab_grab): initialize tab_unminimized
to FALSE for the target window when starting the grab, when
advancing through the list check to find the previous window and
re-minimize it if it was tab-unminimized, unminimize the new
window we're alt-esc'ing to if it's minimized, (do_choose_window):
raise and unminimize the initial window as well in alt-esc'ing
* src/window.h (struct _MetaWindow): add a tab_unminimized field
* src/window.c (meta_window_new_with_attrs): initialize
tab_unminimized to false
2005-10-03 Elijah Newren <newren@gmail.com>
Patch from Björn Lindqvist fix the workspace switcher tabpopup to
display the right windows and to fix the
pick-a-new-window-to-focus algorithm in order to not select
windows that aren't showing. Fixes#170475.
* src/tabpopup.c (meta_convert_meta_to_wnck,
meta_select_workspace_expose_event): factor out conversion code
from meta_select_workspace_expose_event() into the new
meta_convert_meta_to_wnck() function
* src/tabpopup.c (meta_select_workspace_expose_event):
* src/workspace.c (focus_ancestor_or_mru_window):
replace the buggy window->minimized logic with
!meta_window_showing_on_its_workspace (window)
2005-10-03 Elijah Newren <newren@gmail.com>
Patch from Björn Lindqvist to have ancestors come along with the
transient when moving the window from one workspace to another.
Fixes#314977.
* src/window.c (meta_window_change_workspace): have all ancestors
change workspaces too
2005-10-03 Elijah Newren <newren@gmail.com>
Truncate ridiculously long titles to avoid crashing or letting the
pager crash. Based on patch from Ray, incorporating suggestions
from Havoc and some extensions of my own. Fixes#315070.
* src/display.c (set_utf8_string_hint, meta_display_open):
* src/xprops.[ch] (meta_prop_set_utf8_string_hint):
Move set_utf8_string_hint() to props.[ch], namespace it
("meta_prop_"), and make it public
* src/tabpopup.c (utf8_strndup, meta_ui_tab_popup_new):
* src/util.[ch] (meta_g_utf8_strndup):
Move utf8_strndup() to util.[ch], namespace it ("meta_g_"), and
make it public
* src/display.c (meta_display_open):
* src/display.h (struct _MetaDisplay):
add net_wm_visible_name and net_wm_visible_icon_name atoms to the
list of atoms we work with
* src/window-props.c (set_window_title, set_icon_title): If title
length is greater than 512, truncate it and set
_NET_WM_VISIBLE_NAME or _NET_WM_VISIBLE_ICON_NAME accordingly
2005-10-03 Elijah Newren <newren@gmail.com>
Get the tabbing window outline to work with gtk+ 2.8.4 again.
Fixes#317528.
* src/tabpopup.c (display_entry): gtk+ 2.8.4 needs to know the
mapped state of its windows (see bug 316180), and since we
manually map with gdk_window_show_unraised() we need to manually
set the mapped state too
2005-09-02 Brent Smith <gnome@nextreality.net>
* src/place.c: (meta_window_place): Moved the call to
meta_screen_get_natural_xinerama_list to earlier in
function so that xineramas_list is allocated before
find_first_fit is called. Fixes#315000
2005-08-08 Elijah Newren <newren@gmail.com>
Patch from Brent Smith to fix a duplicate string. Fixes#309774.
* src/theme-parser.c (parse_toplevel_element, parse_draw_op_element):
Change "No \"%s\" attribute on element <%s>" string to "No \"%s\"
attribute on <%s> element"
2005-08-03 Ray Strode <rstrode@redhat.com>
Improve the behavior of keyboard move/resize and edge
snapping. Still not perfect, bug 310888.
* src/effects.c (draw_xor_rect): Make the outside of a
wireframe rectangle line up with the outside edge of its
window, instead of centering the wireframe edges on the
window edges.
* src/keybindings.c (process_keyboard_move_grab): allow
edge snapping in wireframe mode. Adjust code to take
into account changed semantics of find_next_*_edge
functions.
(process_keyboard_resize_grab_op_change): new function
to take some orthogonal logic out of
process_keyboard_resize_grab_op. Only allow keyboard
resize cursor to go to flat edges, not corners.
(process_keyboard_resize_grab): allow edge snapping in
wireframe mode. Fix up snapping logic.
* src/place.c (get_{vertical,horizontal}_edges): use
GArray instead of int *, since the number of output
edges isn't known until the middle of the function now.
Use xor rect extents instead of window extends if in
wireframe mode.
(meta_window_find_next_{vertical,horizontal}_edge: add
new source_edge_position parameter to specify which edge
on the active window to start from when looking for next
edge on the screen. Return the coordinate of the edge
found and not the coordinate of where the window should be
moved to snap to where the edge was found.
* src/window.c (update_move): all the user to specify
an edge to resize with mouse in keyboard resize mode.
window
2005-07-31 Elijah Newren <newren@gmail.com>
* src/stack.c (is_focused_foreach, get_standalone_layer): use only
the expected_focus_window instead of both the focused_window and
the expected_focus_window. Removes an infinite flicker loop in
sloppy and mouse focus, and an ugly one time flicker in click to
focus. Fixes#311400.
2005-07-30 Elijah Newren <newren@gmail.com>
Patch from Jaap Haitsma to make sure that Metacity dialogs have
icons. Fixes#309876.
* src/metacity-dialog.c (kill_window_question,
warn_about_no_sm_support, error_about_command): call
gtk_window_set_icon_name() to set the dialog icon
2005-07-24 Elijah Newren <newren@gmail.com>
* src/place.c (find_most_freespace): try to place windows denied
focus near the focus window and fix a xinerama bug with the
placement, (avoid_being_obscured_as_a_second_modal_dialog): avoid
modal dialogs being obscured in somewhat pathologically strange
circumstances that Eclipse seems to be good at triggering,
(meta_window_place): have dialog windows make use of
avoid_being_obscured_as_a_second_modal_dialog(). Fixes one of the
issues found in #307875.
2005-07-24 Elijah Newren <newren@gmail.com>
* src/window.c (meta_window_raise): raise the window as well as
its ancestor; fixes a stacking bug with an ancestor that has more
than one child window. Fixes one of the issues in #307875.
2005-07-24 Elijah Newren <newren@gmail.com>
* src/window.c (meta_window_free): restore original window size if
the window was maximized, as the FIXME says. ;-) Fixes#137185.
2005-07-23 Elijah Newren <newren@gmail.com>
* src/window.c: (meta_window_activate): revert the patch from
#128380--change _NET_ACTIVE_WINDOW behavior to what it originally
was.
2005-07-14 Elijah Newren <newren@gmail.com>
Patch from Ken Harris to provide a more lenient threshold for
drawing rounded corners. Fixes#122065.
* src/theme.c (meta_frame_layout_calc_geometry): use height +
width > 5 instead of height > 3 && width > 3 as criterion
2005-07-13 Elijah Newren <newren@gmail.com>
Fix a slight bug (causing possible miscoloring of parts of the
titlebar) introduced by the patch from #169982.
* src/gradient.c:
(meta_gradient_create_interwoven):
(meta_gradient_create_multi_vertical):
bitshifting operators do not take precedence over typecasting, so
make sure to use parentheses to get the right operation order.
2005-07-12 Elijah Newren <newren@gmail.com>
Patch from Andrew Johnson to speed up vertical gradients. Fixes
#169982.
* src/gradient.c:
(meta_gradient_create_interwoven):
(meta_gradient_create_vertical):
(meta_gradient_create_multi_vertical):
use memcpy instead of really long loops to set values in memory to
a given pattern.
2005-07-12 Elijah Newren <newren@gmail.com>
Patch from Björn Lindqvist to split up main() into more manageable
chunks and make use of GOpt. Closes#305331.
* src/main.c (usage): remove this function,
(meta_print_compilation_info): new function taken from main(),
(meta_print_self_identity): new function taken from main(),
(struct MetaArguments) new struct to replace some free variables,
(meta_parse_options): new funcion taken from main() but now using
GOpt, (meta_select_display): new function taken from main()
2005-07-11 Matthias Clasen <mclasen@redhat.com>
React to cursor theme changes: (#308106)
* src/prefs.h:
* src/prefs.c: Expose the GConf keys for cursor theme
and size as preferences META_PREF_CURSOR_THEME and
META_PREF_CURSOR_SIZE with getters meta_prefs_get_cursor_theme()
and meta_prefs_get_cursor_size().
* src/display.c (meta_display_open): Initialize the cursor
theme and size.
* src/display.h:
* src/display.c (meta_display_set_cursor_theme): New function
to change the cursor theme and update all cursors.
* src/screen.h
* src/screen.c (meta_screen_update_cursor): New function to
refesh the root cursor of a screen.
* src/main.c (prefs_changed_callback): Update the cursor
theme when the cursor preferences change.
Sun Jun 26 11:19:18 2005 Soeren Sandmann <sandmann@redhat.com>
* src/frames.c: Add a cache of pixmaps for recently exposed frame
areas. Makes metacity a bit faster when dragging windows around.
See bug 141813.
2005-06-10 Ryan Lortie <desrt@desrt.ca>
* src/frames.c: Prevent using the address of a local variable
as a hash key. (Bug #307209)
* src/xprops.c (meta_prop_get_values): Fix a small leak in the
case of a SYNC_COUNTER property value and HAVE_XSYNC not
defined. (Bug #307214)
2005-06-07 Ray Strode <rstrode@redhat.com>
Cleanup font data when done with it (bug 306720).
* src/effects.c (draw_xor_rect): free font info structure.
* src/screen.c (meta_screen_new): pass a 1 not a 0 to
XFreeFontInfo to free font info structure.
(meta_screen_free): call XUnloadFont on GC font before freeing
the GC.
2005-06-02 Elijah Newren <newren@gmail.com>
* src/window.c (meta_window_configure_request): If a window
requests to be raised and is denied, set the demands attention
hint. Fixes#305882.
2005-06-02 Elijah Newren <newren@gmail.com>
* src/window.c (meta_window_focus): if the window has a modal
transient which is being unmanaged, don't focus it. Fixes the
Metacity issue reported in #305362.
2005-05-30 Ray Strode <rstrode@redhat.com>
Bug 305564 again.
When drawing XOR resize popup use "fixed" font instead of
-misc-fixed-*-16-* xlfd. Should work on more xservers.
Also take steps to fail better if the xserver isn't
cooperating.
* src/effects.c (draw_xor_rect): if we can't draw font box
for whatever reason, at least draw grid frames.
* src/screen.c (meta_screen_new): use fixed alias instead
of a xfld. Don't pass GCFont to XCreateGC if font couldn't
be loaded. Print a warning if font couldn't be loaded.
2005-05-26 Elijah Newren <newren@gmail.com>
* src/window.c (meta_window_configure_request): Patch from Greg
Hudson to make sure window position is calculated correctly for
reconfigure requests when part of the XWindowChanges structure is
uninitialized. Fixes#305257.
2005-05-26 Elijah Newren <newren@gmail.com>
* src/window.c: (meta_window_new_with_attrs): put all transients
of the new window, if any exist, in the calc_showing queue. Fixes
#303284.
2005-02-28 Elijah Newren <newren@gmail.com>
Patch from Aidan Delaney to make sure that icons in the alt-tab
popup are dimmed for all hidden windows, not just minimized ones.
Fixes#168455.
* src/screen.c: (meta_screen_ensure_tab_popup): make use
meta_window_showing_on_its_workspace() instead of just checking if
the window is minimized.
2005-02-25 Elijah Newren <newren@gmail.com>
Prevent the visual bell from changing the focus window. Fixes
#123366.
* src/bell.c: (meta_bell_flash_screen): if not in click-to-focus
mode and mouse_mode is also false, increment the focus sentinel so
that we can ignore spurious EnterNotify and LeaveNotify events.
* src.display.c: (event_callback): make sure to also ignore
LeaveNotify events when the focus sentinel isn't clear
2005-02-23 Elijah Newren <newren@gmail.com>
* src/window.c: (meta_window_new_with_attrs): Fix crash that
occurs when stupid apps claim that a window is its own parent.
#168207
2005-02-21 Elijah Newren <newren@gmail.com>
Handle keynav vs. mousenav in mouse and sloppy focus modes. Fixes
#167545.
* doc/how-to-get-focus-right.txt: Update due to this new method
for handling keynav vs. mousenav, plus various other updates that
I previously forgot.
* src/display.h: (struct _MetaDisplay): add a mouse_mode boolean
* src/display.c: (meta_display_open): initialize mouse_mode to
true, (event_callback): have EnterNotify and LeaveNotify events
set mouse_mode to true when focusing a window
* src/keybindings.c: (process_tab_grab): set mouse_mode to false
when using alt-tab/alt-esc, (do_choose_window): likewise,
(do_handle_move_to_workspace): set mouse_mode to false on
move-window-to-workspace-<n> keybindings
* src/window.c (idle_calc_showing): if we're in keynav mode while
using sloppy or mouse focus, use metacity_sentinel to avoid
EnterNotify events being generated from events other than mouse
movement.
* src/workspace.c (meta_workspace_activate_with_focus): add a
FIXME in a potentially duplicate section of code,
(meta_workspace_focus_default_window): use the same focus choice
as click-to-focus if in keynav mode.
2005-02-20 Elijah Newren <newren@gmail.com>
* src/display.c: (event_callback): Handle _NET_CURRENT_DESKTOP
messages that come with timestamps. Fixes the metacity portion of
#161361 other than the portion handled by #128380.
2005-02-20 Elijah Newren <newren@gmail.com>
* src/window.c: (meta_window_activate): when receiving a
_NET_ACTIVE_WINDOW message, switch to the desktop where the window
is located before activating instead of moving the window to the
current desktop. Thanks to Lubos Lunak for catching this issue.
Fixes#128380.
2005-02-20 Elijah Newren <newren@gmail.com>
* src/window.c (meta_window_show): Ignore all focus and
focus-stealing-prevention code in meta_window_show when not
showing the window for the first time. Fixes#167199.
2005-02-20 Elijah Newren <newren@gmail.com>
Fix an obscure xinerama placement bug with windows that are too
large to fit in the workarea in both dimensions. #166757
* src/place.c: (meta_window_place): use the current xinerama
instead of arbitrarily resetting to 0
2005-02-20 Elijah Newren <newren@gmail.com>
Patch from Joe Marcus Clarke to fix a possible crash on logout.
#167935. Thanks for fixing my mistakes, Joe!
* src/display.c: (meta_display_open): initialize
display->grab_old_window_stacking to NULL.
2005-02-20 Elijah Newren <newren@gmail.com>
Big patch to cover about 6 different issues in order to correct
rare problems with timestamps (make sure window selected in
tasklist actually gets focus, sanity check timestamps to avoid
rogue apps hosing the system, correct the updating of
net_wm_user_time, correctly handle timestamps of 0 when comparing
xserver timestamps for those who have had their systems up for
over 25 days or so, add some debugging information to verbose
logs, some code cleanups). Fixes all issues listed in #167358.
* src/display.h: (struct _MetaDisplay): clarify comment on
last_focus_time, introduce a new variable--last_user_time,
(XSERVER_TIME_IS_BEFORE macro): put this functionality into a
separate macro and then introduce a new macro with this name that
uses the old one but adds additional special-case checks for
timestamps that are 0, (comment to
meta_display_set_input_focus_window): add information about how
last_user_time should be used in this function
* src/display.c (santiy_check_timestamps): new function,
(meta_display_open): intialize display->last_user_time,
(meta_display_get_current_time_roundtrip): use the timestamp,
which is known to be good, in order to sanity_check_timestamps,
(event_callback): use the new meta_window_ste_user_time() function
in order to correct problems, use the timestamp of KeyPress and
ButtonPress events, which are known to be good, in order to
sanity_check_timestamps, (timestamp_too_old): new function for
common behavior of meta_display_focus_the_no_focus_window and
meta_display_set_input_focus_window, with added checking for
display->last_user_time in addition to display->last_focus_time,
(meta_display_set_input_focus_window): replace some of the code
with a call to timestamp_too_old(),
(meta_display_focus_the_no_focus_window): replace some of th ecode
with a call to timestamp_too_old()
* src/window.h: (meta_window_set_user_time): new function to
abstract the many things that need to be done when updating the
net_wm_user_time of any window
* src/window.c: (meta_window_activate): add debugging spew, make
sure the comparison is made with last_user_time NOT
last_focus_time, use meta_window_set_user_time() function in order
to correct problems, (meta_window_client_message): add a newline
to a debugging message to make them easier to read,
(meta_window_set_user_time): new function
* src/window-props.c (reload_net_wm_user_time): use the new
meta_window_ste_user_time() function in order to correct problems
2005-02-16 Elijah Newren <newren@gmail.com>
* src/display.c: (event_callback): trivial fix to a log message:
change %d to %lu (see debugging log from bug 167358).
2005-02-12 Elijah Newren <newren@gmail.com>
Raise the ancestor of a window instead of the window itself.
Fixes#166894.
* src/window.c: (find_root_ancestor): new function,
(meta_window_raise): get the ancestor of the given window and
raise it if possible instead of the window
2005-02-12 Elijah Newren <newren@gmail.com>
Don't unconditionally place splashscreens (and other
not-to-befocused windows) below the focus window. Fixes#167042.
* src/window.c: (intervening_user_event_occurred): new function
taken from the timestamp comparison portion of the old
window_takes_focus_on_map function, (window_state_on_map): new
function with remainder of old window_takes_focus_on_map function
that determines both whether the window will take focus and
whether it should be placed on top, (meta_window_show): use
place_on_top_on_map to determine window stacking instead of trying
to infer it from takes_focus_on_map
2005-02-11 Elijah Newren <newren@gmail.com>
Avoid new windows being obscured by the focus window (and thus
possibly lost). Fixes#166524.
* src/place.c: new MetaWindowDirection enum,
(find_most_freespace): new function to find where there is the
most space available around the focused window,
(meta_window_place): if a window is denied focus and the window
overlaps the focused window, retry the first-fit algorithm only
paying attention to the focus window position and if that fails
just find the location on the screen with the most space
available.
* src/window.h: (struct MetaWindow): new
denied_focus_and_not_transient bitfield
* src/window.c: (meta_window_new_with_attrs): initialize
denied_focus_and_not_transient, (meta_window_show): set and unset
the denied_focus_and_not_transient field appropriately
2005-02-08 Aidan Delaney <adelaney@cs.may.ie>
Removed useless function call. #166730
* src/tabpopup.c: (outline_window_expose): Removed unused
references to variables and an unnecessary function call to
gdk_window_get_size().
2005-02-08 Elijah Newren <newren@gmail.com>
Avoid using CurrentTime when focusing, handle it better in case we
miss any cases. Fixes#166732.
* src/window.c: (meta_window_shade): use
meta_display_get_current_time_roundtrip() to ensure we have a
valid timestamp, (meta_window_unshade): same
* src/display.c: (meta_display_set_input_focus_window): If
CurrentTime was passed, get one from the XServer in addition to
throwing a warning, (meta_display_focus_the_no_focus_window): same
2005-02-08 Elijah Newren <newren@gmail.com>
* src/window.c: (meta_window_activate): If we're not passed a
timestamp, make sure to manually get one. Fixes#166728.
2005-02-06 Elijah Newren <newren@gmail.com>
Set a _METACITY_VERSION property (a utf8 string) on the WM check
window. #165350.
* src/display.h: (struct MetaDisplay): add a atom_metacity_version
field
* src/display.c: (meta_display_open): initialize the
_METACITY_VERSION property on the WM check window to the current
version of Metacity.
2005-02-06 Elijah Newren <newren@gmail.com>
Ignore xconfigurerequest events for stacking when it should be
safe to do so. Again, thanks to Crispin Flowerday for the test
case. Thanks to KWin for the inspiration (and to Google for
indexing their source code). Fixes the other half of #166395.
* src/window.c: (meta_window_configure_request): if the
active_window is from a separate application than the one getting
the configure request and the net_wm_user_time of the active
window is later than that of the window getting the configure
request, then ignore the request.
2005-02-06 Elijah Newren <newren@gmail.com>
If activation requests are too old, set the demands_attention hint
instead of actually activating. Thanks to Crispin Flowerday for
the test case and for testing the patch. Fixes half of #166395.
* src/window.c: (meta_window_activate): if the request came before
the last focus time, set the demands attention hint instead
2005-02-04 Dave Ahlswede <mightyquinn@letterboxes.org>
* src/metacity.schemas.in: Add period to the end of
reduced_resources' description. Fixes#165780.
2005-02-04 Elijah Newren <newren@gmail.com>
Make sure window->border_only is initialized so we don't get
random windows without decorations. Thanks to Sinisa Segvic and
Owen Taylor for providing test cases. Fixes#145131.
* src/window.c: (update_mwm_hints): Be sure to call
recalc_window_features even if no MWM hints are set
2005-02-02 Elijah Newren <newren@gmail.com>
Focus parents of dismissed transient windows in preference to the
window that most recently had keyboard focus. Fixes#157360.
* doc/how-to-get-focus-right.txt: Note the distinction between
"most recently used window" and "most recent to have keyboard
focus" that we are now making.
* src/workspace.c: (focus_ancestor_or_mru_window): rename from
meta_workspace_focus_mru_window, and first check whether we need
to focus an ancestor window before looking for the mru window,
(record_ancestor): helper function for
focus_ancestor_or_mru_window,
(meta_workspace_focus_default_window): update due to the function
rename from meta_workspace_focus_mru_window to
focus_ancestor_or_mru_window
2005-01-31 Elijah Newren <newren@gmail.com>
Try 2 to correct misleading and inaccurate wording. Hopefully,
really fixes#165380.
* src/menu.c: Change wording of menu from "Always on Current
Workspace" to "Always on Visible Workspace". "Always on Current
Workspace" could sound like a synonym of "Only on This Workspace"
when it was supposed to be the opposite.
2005-01-31 Elijah Newren <newren@gmail.com>
Correct the stacking when return from fullscreen mode. Fixes
#165718.
* src/window.c: (meta_window_unmake_fullscreen): Update the layer
after resizing the window
2005-01-31 Muktha <muktha.narayan@wipro.com>
src/themes/Atlanta/metacity-theme-1.xml:
src/themes/Simple/metacity-theme-1.xml:
src/themes/Bright/metacity-theme-1.xml:
Make the unfocussed title bar distinguishable. Fixes#125291.
2005-01-28 Elijah Newren <newren@gmail.com>
Patch from RHEL-3 (Havoc doesn't remember how it got there) that
Havoc posted in bug 156511 to fix the problem with fullscreen
windows on a different xinerama monitor not staying on top. I
updated to HEAD. Should fix#156511.
* src/stack.c: (windows_on_different_xinerama): new function,
(get_standalone_layer): let windows on a different screen than the
one with the focus window stay in the fullscreen layer
2005-01-28 Elijah Newren <newren@gmail.com>
* src/menu.c: Change wording of menu to "Always on Current
Workspace" from "Put on All Workspaces", remove a quick-key
conflict between "On _Top" and "Only on _This Workspace" by
switching the latter to "_Only on This Workspace"
* src/window.c: Remove a comment that is no longer necessary
(since bug 87531 has been fixed)
2005-01-28 Elijah Newren <newren@gmail.com>
Take into account the appropriate list of windows when placing a
new one. Fixes#165381.
* src/place.c: (meta_window_place): use
meta_window_showing_on_its_workspace(w) instead of !w->minimzed,
also take into account sticky windows
* src/window.[ch]: rename window_showing_on_its_workspace to
meta_window_showing_on_its_workspace and export it
2005-01-27 Elijah Newren <newren@gmail.com>
Plug a pair of leaks. Fixes#165378
* src/place.c: (meta_window_place, get_windows_on_same_workspace):
free list returned by meta_display_list_windows.
2005-01-27 Elijah Newren <newren@gmail.com>
Treat splashscreens same as other windows for stacking. Fixes
#165243.
* src/stack.h: (MetaStackLayer enum): remove META_LAYER_SPLASH
from the list
* src/stack.c: (get_standalone_layer): remove the special casing
of META_WINDOW_SPLASHSCREEN
2005-01-26 Elijah Newren <newren@gmail.com>
Stick and unstick transients with their parent automatically.
Fixes#152283.
* src/window.c: (window_stick_impl, window_unstick_impl): rename
from meta_window_stick and meta_window_unstick respectively,
(stick_foreach_func): a function to assist calling
window_(un)stick_impl on each transient, (meta_window_stick,
meta_window_unstick): new functions that call window_stick_impl or
window_unstick_impl for the window and each of its transients.
2005-01-26 Elijah Newren <newren@gmail.com>
Patch from John Paul Wallington to keep tooltip on screen
horizontally for xinerama. Fixes#165261.
* src/fixedtip.c: (meta_fixed_tip_show): rename screen_width and
screen_height to screen_right_edge and screen_bottom_edge, set
them using xinerama info instead of just screen geometry, and use
them to determine where to place the tooltip window.
2005-01-26 Arvind Samptur <arvind.samptur@wipro.com>
Don't wireframe when accessibility is on, it apparently
causes a desktop wide freeze.
* src/prefs.[ch] (meta_prefs_init) (change_notify)
(update_gnome_accessibility) (meta_preference_to_string)
(meta_prefs_get_gnome_accessibility) : Add code to monitor
accessibility status.
* src/display.c (meta_display_begin_grab_op): Check
accessibility status before going ahead with wireframe.
Fixes#159538
2005-01-25 Balamurali Viswanathan <balamurali.viswanathan@wipro.com>
* src/prefs.c (meta_prefs_init): Get gconf to load the
terminal dir so that we get the notifications when
the command is changed. Fixes bug #160934
2005-01-25 Elijah Newren <newren@gmail.com>
Refuse to focus a window with a modal transient, and focus the
transient instead. Fixes#164716.
* src/window.c: (get_modal_transient): new function,
(meta_window_focus): if the window has a modal transient, make
sure it is on the current workspace and then focus it instead.
2005-01-24 Elijah Newren <newren@gmail.com>
* src/display.c: (meta_display_begin_grab_op): don't forget to
initialize display->grab_old_window_stacking. Thanks to Sebastien
Bacher and the bleeding edge Ubuntu users for catching the
occasional crash this could cause so quickly, and for verifying
that the patch worked (I couldn't duplicate). Fixes#165093.
2005-01-23 Elijah Newren <newren@gmail.com>
Restore original stacking when aborting an alt-esc window switch
operation. Fixes#123576.
* src/display.c: (GRAB_OP_IS_WINDOW_SWITCH): new macro,
(meta_display_close): clear grab_old_window_stacking if non-NULL,
(event_callback): restore stack positions if alt-esc op cancelled
with button press, (meta_display_begin_grab_op): store the old
stacking positions, (meta_display_end_grab_op): free the old stack
positions
* src/display.h: (struct _MetaDisplay): add a
grab_old_window_stacking list
* src/keybindings.c: (process_tab_grab): restore stack positions
if alt-esc op cancelled with an errant key press
* src/stack.c: (compare_just_window_stack_position): new
GCompareFunc function, (meta_stack_get_positions): get current
stack positions, (compare_pointers): new GCompareFunc function,
(lists_contain_same_windows): simple utility func to see if two
lists contains the same windows, (meta_stack_set_positions): new
function to set the positions of all the windows in the stack
* src/stack.h: (meta_stack_get_postions,
meta_stack_set_positions): new functions
2005-01-23 Elijah Newren <newren@gmail.com>
Patch from John Paul Wallington to fix#163420.
* src/window.c: (check_maximize_to_work_area): fix vertical
maximization for second screen
2005-01-20 Elijah Newren <newren@gmail.com>
* src/tabpopup.c (dimm_icon): use pixbuf, not dimmed_pixbuf (which
isn't defined yet). Fixes crash from #136666.
2005-01-20 Vincent Noel <vnoel@cox.net>
* src/screen.c: (meta_screen_ensure_tab_popup),
(meta_screen_ensure_workspace_popup):
* src/tabpopup.c: (meta_ui_tab_popup_new), (display_entry):
* src/tabpopup.h: Show labels in bold for windows that demand
attention. Fixes#164590.
2005-01-18 Vincent Noel <vnoel@cox.net>
* src/screen.c: (meta_screen_ensure_tab_popup),
(meta_screen_ensure_workspace_popup):
* src/tabpopup.c: (dimm_icon), (meta_ui_tab_popup_new),
(free_entry):
* src/tabpopup.h: In the tab task switcher popup, dim the window
icon and put its name between brackets when the window is
minimized. Fixes#136666.
2005-01-11 Elijah Newren <newren@gmail.com>
Correct highlighting of windows in workspace switcher popup.
Fixes#163450.
* src/tabpopup.c (meta_select_workspace_expose_event): Remove race
between FocusIn/FocusOut events and the expose event by replacing
window->has_focus with
window==window->display->expected_focus_window.
2005-01-09 Elijah Newren <newren@gmail.com>
Don't focus the panel on click. Fixes#160470 (and 100470 and
removes the need for the hack from 128200)
* doc/how-to-get-focus-right.txt: Update section on focusing
non-decorated windows (specifically, DOCKS and DESKTOPS)
* src/display.c (event_callback): don't focus dock windows on
click
2005-01-06 Elijah Newren <newren@gmail.com>
Make sure the save session dialog appears focused. Fixes#162983.
* src/session.c (warn_about_lame_clients_and_finish_inter): Get a
timestamp by explicit request from Xserver, since none is
available otherwise.
2004-12-28 Elijah Newren <newren@gmail.com>
Allow users to move the window around immediately after
double-clicking to shade (#90290)
* src/display.c (event_callback): only end the grab op if either
there is no frame or else the frame is not mapped
2004-12-27 Elijah Newren <newren@gmail.com>
Focus windows that manually position themselves too (fixes
#107347).
* src/window.h (struct _MetaWindow): add a new
showing_for_first_time flag
* src/window.c (meta_window_new_with_attrs): initialize
showing_for_first_time flag to !mapped, (meta_window_show):
replace did_placement with showing_for_first_time in the section
to decided whether to focus since did_placement isn't quite what
we want
2004-12-27 Elijah Newren <newren@gmail.com>
* src/display.c (meta_display_set_input_focus_window,
meta_display_focus_the_no_focus_window): Spew warning if
CurrentTime is passed to the function, but don't exit prematurely.
(fixes#162353)
2004-12-24 Elijah Newren <newren@gmail.com>
* src/window.c (window_takes_focus_on_map): Fix error in
distinguishing < vs. <= introduced by the patch in #154598,
restructure code so that verbose log matches code better in order
ensure such mistakes are harder to make in the future (fixes
#162172)
2004-12-24 Elijah Newren <newren@gmail.com>
Thanks to mild7@users.sourceforge.net for this fix.
* src/window.h: (META_WINDOW_IN_NORMAL_TAB_CHAIN): Excludes
windows with skip_taskbar hint set from the alt-tab list; they'll
appear in the ctrl-alt-tab list instead. (fixes#106249)
2004-12-22 Elijah Newren <newren@gmail.com>
Wrap XSetInputFocus, making display->expected_focus_window a
little more reliable (see #154598)
* src/display.h: (struct _MetaDisplay): add a large comment about
the expected_focus_window, add a last_focus_time field,
(XSERVER_TIME_IS_BEFORE): new macro moved from window.c but fixed
for 64-bit systems, (meta_display_set_input_focus_window): new
function
* src/display.c (meta_display_open): initialize last_focus_time,
add a comment about brokenness of trying to set intial focus
window, (meta_display_set_input_focus_window): new function that
wraps XSetInputFocus,
(meta_display_focus_the_no_focus_window): make this function
closer to a wrapping of XSetInputFocus for the no_focus_window.
* src/window.c (XSERVER_TIME_IS_LATER): remove this macro in favor
of the improved one added to display.h
* src/display.c (meta_display_open):
* src/window.c (meta_window_focus):
use meta_display_focus_the_no_focus_window and
meta_display_set_input_focus instead of XSetInputFocus
2004-12-22 Elijah Newren <newren@gmail.com>
Partially resolve the conflicting requirements of windows on
multiple workspaces and hidden being a global quantity for windows
(fixes bug 156182; the remainder of the work is bug 87531 and is a
libwnck issue)
* src/display.c (event_callback):
* src/window.c (meta_window_visible_on_workspace, meta_window_unstick):
* src/workspace.c (meta_workspace_add_window,
meta_workspace_contains_window,
meta_workspace_queue_calc_showing):
* src/workspace.h:
Remove meta_workspace_contains_window, replace with simple
comparison utilizing window->workspace
* src/place.c (meta_window_place):
* src/window.c (meta_window_shares_some_workspace):
* src/window.h:
Remove meta_window_shares_some_workspace, replace with a simple
comparison utilizing window->workspace
* src/session.c (save_state),
* src/window.c (meta_window_new_with_attrs,
meta_window_apply_session_info, meta_window_free,
window_showing_on_its_workspace,
meta_window_change_workspace_without_transients,
meta_window_unstick, meta_window_set_current_workspace_hint,
meta_window_get_workspaces):
* src/window.h:
* src/workspace.c (meta_workspace_free, meta_workspace_add_window,
meta_workspace_remove_window):
Only one workspace now
2004-12-19 Elijah Newren <newren@gmail.com>
Thanks to Baptiste Mille-Mathias for this fix.
* src/metacity.schemas.in: Add a missing period at the end of a
sentence.
2004-12-19 Elijah Newren <newren@gmail.com>
When snap-moving, don't snap to transients of minimized windows
since they are hidden. Fixes#157180
* src/place.c (get_windows_on_same_workspace): make the logic to
determine hidden windows more thorough by calling
meta_window_should_be_showing()
* src/window.c (meta_window_should_be_showing): rename this
function from window_should_be_showing and also export it,
(implement_showing):
s/window_should_be_showing/meta_window_should_be_showing/,
(idle_calc_showing):
s/window_should_be_showing/meta_window_should_be_showing/
* src/window.h (meta_window_should_be_showing): Add this function
to the list so that it can be used in src/place.c
2004-12-19 Elijah Newren <newren@gmail.com>
Focus the desktop when showing it. Fixes#159257.
* src/display.c (event_callback): obtain a timestamp to pass to
meta_screen_show_desktop
* src/keybindings.c (handle_toggle_desktop): obtain a timestamp to
pass to meta_screen_show_desktop
* src/screen.c (meta_screen_show_desktop): add a timestamp
parameter, get the most recently used window of type DESKTOP (if
there is one) and focus it
* src/screen.h (meta_screen_show_desktop): add a timestamp
parameter
2004-11-10 James Henstridge <james@jamesh.id.au>
* Makefile.am (DISTCLEANFILES): remove intltool stuff on distclean.
* src/themes/Makefile.am (uninstall-local): add uninstall rule.
* src/Makefile.am (libmetacity_private_la_CFLAGS): set this
variable so that the files shared with metacity get compiled with
different names.
* configure.in: use more modern macros in some places, and make
sure that $ACLOCAL_AMFLAGS is set so that rebuilds work better.
* autogen.sh (conf_flags): use newer automake.
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
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-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-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-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-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-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