2004-10-08 Elijah Newren 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 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 * 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 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 * 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 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 * 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-22 Elijah Newren Fix some uninitialized variable errors reported by valgrind (see #153338) * src/display.c (meta_display_open): initialize display->grab_resize_timeout_id, and display->grab_have_keyboard * src/ui.c (meta_ui_create_frame_window): initialize attrs.width and attrs.height 2004-09-17 Elijah Newren * src/workspace.c (meta_workspace_focus_mru_window): Don't focus a window that is minimized (fixes #147947) 2004-09-17 Kjartan Maraas * src/bell.c: (meta_bell_flash_screen): * src/compositor.c: * src/effects.c: (meta_effects_draw_box_animation): * src/fixedtip.c: (meta_fixed_tip_show): * src/frame.c: (find_argb_visual): * src/frames.c: (unsigned_long_hash), (meta_frames_manage_window), (meta_frames_apply_shapes): * src/iconcache.c: (find_largest_sizes), (find_best_size): * src/keybindings.c: (meta_spawn_command_line_async_on_screen): * src/main.c: (main): * src/menu.c: (meta_window_menu_new): * src/prefs.c: (meta_prefs_get_visual_bell), (meta_prefs_bell_is_audible), (meta_prefs_get_visual_bell_type), (meta_prefs_get_action_double_click_titlebar), (meta_prefs_get_auto_raise), (meta_prefs_get_auto_raise_delay), (meta_prefs_get_reduced_resources): * src/screen.c: (meta_create_offscreen_window): * src/tabpopup.c: (meta_ui_tab_popup_get_selected): * src/theme-parser.c: (meta_theme_load): * src/theme.c: (meta_gtk_widget_get_font_desc): * src/tools/metacity-mag.c: (mouse_press), (begin_area_grab): * src/util.c: (meta_unsigned_long_hash): A load of fixes of issues reported by sparse. Closes bug #152849 2004-09-15 Elijah Newren * src/display.c (event_callback): Remove some redundant code regarding focusing the default window (#152117) 2004-09-15 Elijah Newren 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 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 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 Remove race condition for focus window choice on window close followed by rapid mouse movement in sloppy and mouse focus modes (partially 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 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 Focus correct window after minimizing via the tasklist (fixes #128200; see also #107681) * src/display.h (struct _MetaDisplay): track the previously_focused_window * src/display.c (meta_display_open): initialize previously_focused_window * src/window.c (meta_window_free): clear the previously_focused_window if it's being freed, (meta_window_client_message): if we get a request to minimize the previously_focused_window and the focus_window is a dock or the desktop, focus the default window, (meta_window_notify_focus): update the previously_focused_window 2004-09-13 Rob Adams * configure.in: post-release increment