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-20 Elijah Newren <newren@gmail.com>
* HACKING: Clarify why METACITY_VERBOSE=1 is bad without
META_USE_LOGFILE=1; point to bug 305091 for details.
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>
Branched for Gnome 2.13. :-)
* configure.in: bump version to 2.13.0. Add UNSTABLE warning.
* README: add 2.13.x to the list of unstable branches
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-22 Elijah Newren <newren@gmail.com>
* configure.in: Patch from Björn Lindqvist to check for the
appropriate versions of glib and gtk. Fixes#314116.
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 Elijah Newren <newren@gmail.com>
Stuff I forgot to do when I branched an hour or so ago before
Matthias' commit...
* configure.in: bump version to 2.11.0. Add UNSTABLE warning.
* README: add 2.11.x to the list of unstable branches
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 Ray Strode <rstrode@redhat.com>
Add a resize popup when resizing constrained
windows, (bug 305564).
* src/display.c:
(meta_display_begin_grab_op),
(meta_display_end_grab_op):
* src/keybindings.c (process_keyboard_move_grab),
(process_keyboard_resize_grab): Call
meta_window_{begin,update,end}_wireframe convenience
functions instead of the meta_effects counterparts.
* src/display.h: keep track of old wireframe geometry to
clean up xor popup on resize
* src/effects.[ch] (meta_effects_begin_wireframe),
(meta_effects_update_wireframe),
(meta_effects_end_wireframe),
(draw_xor_rect): take optional width and height arguments
to show to user in resize popup. Draw resize popup if
width and height >= 0 and wireframe isn't smaller than
the popup would be.
* src/screen.c (meta_screen_new): load a largish font for
the resize popup
* src/window.[ch]
(meta_window_move_resize_internal): update
wireframe resize popup when the window is resized.
(meta_window_get_wireframe_geometry): new function to
calculate the numbers to display in resize popup
(meta_window_begin_wireframe),
(meta_window_update_wireframe),
(meta_window_end_wireframe): new functions to reduce
repetitive wireframe code. Functions handle updating
wireframe and resize popup geometry.
(update_move), (update_resize),
(meta_window_refresh_resize_popup): remove fixme and
add debug message.
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.