Age | Commit message (Collapse) | Author |
|
When switching to another screen, the focus{left,right,up,down} commands
only show the frame indicator if the target screen has more than one
frame. This behavior is kinda non-intuitive.
Pointed out by Antoine Busque, who also provided a different fix.
|
|
When compared with the existing overlap check in
`find_frame_{up,down}`, it appears that the original implementation of
the overlap test for `find_frame_{left,right}` is erroneous. Indeed,
the wrong boundaries are used, which causes issues like allowing
finding a frame in one direction, but not finding the frame when going
back in the reverse direction.
Commands like `focus{left,right}` rely on the corresponding
`find_frame` function. The original boundaries check issue meant that,
on differently sized screens, focus could pass from one screen to the
next in one direction, but not in the other.
The boundary checks have therefore been corrected to mirror those in
`find_frame_{up,down}`, and check for actual overlap between the
frames.
Signed-off-by: Antoine Busque <antoinebusque@gmail.com>
|
|
|
|
This is an update to Pedro Silva's patch, so that it applies against the
xrandr branch. That patch introduced four new functions, frame_*_abs,
which report a frame's left, right, top, and bottom coordinates offset by
it's screen arrangement. This allows the use of the focus* commands as
additional screen navigation tools, and has the added benefit of making the
find_frame_* functions clearer.
|
|
Drop deprecated xinerama support and replace it with xrandr.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
|
|
* cmd_definekey: actually use cmd
* cmd_meta: remove ev1
* cmd_resize: remove nbytes
* cmd_ratrelwarp: remove s
* draw_string: remove lgv, lgc, mask; lgc wasn't XFreeGC'ed
* get_more_input: remove nbytes
* cleanup_frame: remove last_win
* get_window_list: remove other_window
Patch from Bernhard R. Link
|
|
* (globals.[ch]): remove rp_text_width "font" arg, since its value
is always the global variable defaults.font (non-Xft case).
remove one #ifdef while here
* update rp_text_width() calls to match new signature
|
|
exchange_with_frame now always selects the second frame given,
simplifying the code (getting rid of segfaults when both were
on different screens). This changes the behaviour of cmd_swap
to always focus the first argument when two arguments are given.
This patch also removes the screen argument of exchange_with_frame,
which is now no longer needed (and cmd_swap was giving the wrong
screen anyway in the case of multiple arguments given).
|
|
Now the inverted rectangle is drawn first and the text overtop in the bg color.
|
|
|
|
* remove call to give_window_focus in remove_frame
* set the border color in hide_window
calling give_window_focus in remove_frame was plain incorrect. setting
it in hide_window might be considered overkill but I believe it will
catch this case and any others that might be lurking.
|
|
|
|
|
|
rp_draw_string
|
|
|
|
(show_frame_indicator): only show frame indicator
(set_active_frame): new arg force_indicator. all callers updated.
(show_frame_indicator): new arg force. all callers updated.
* src/main.c (init_defaults): init bar_in_padding
* src/globals.c (rp_switch_screen_hook): new hook
* src/data.h (struct rp_defaults): new slot, bar_in_padding
* src/bar.c (bar_x): honour bar_in_padding setting
(bar_y): likewise
* src/actions.c (init_set_vars): add barinpadding
(set_barinpadding): new function
* src/globals.h: new global rp_switch_screen_hook
|
|
is empty.
|
|
(show_frame_message): format frame_fmt string with format_string
* src/messages.h (MESSAGE_FRAME_STRING): removed
* src/main.c (init_defaults): init defaults.frame_fmt
* src/data.h (struct rp_defaults): add frame_fmt
* src/actions.c (set_framefmt): new function
(init_set_vars): new set var "framefmt"
|
|
|
|
(init_xinerama): likewise
* src/window.c (init_window_stuff): take void arguments. prototype updated.
(free_window_stuff): likewise
* src/split.c (remove_all_splits): take void arguments. prototype updated.
(current_frame): likewise
(init_frame_lists): likewise
(find_last_frame): likewise
(current_window): likewise
(remove_all_splits): likewise
(hide_frame_indicator): likewise
(show_frame_indicator): likewise
* src/main.c (check_child_procs): take void arguments. prototype updated.
(clean_up): likewise
* src/number.c (numset_new): take void arguments. prototype updated.
* src/manage.c (clear_unmanaged_list): take void arguments. prototype updated.
(list_unmanaged_windows): likewise
(ungrab_keys_all_wins): likewise
(grab_keys_all_wins): likewise
(current_screen): likewise
(unhide_all_windows): likewise
* src/main.c (sighandler): static function
(hup_handler): likewise
(alrm_handler): likewise
(handler): likewise
(print_version): likewise
(print_help): likewise
(show_welcome_message): take void arguments
(init_defaults): likewise
* src/input.c (ring_bell): take void arguments. prototype updated
(update_modifier_map): likewise
* src/history.c (get_history_filename): take void arguments
(history_load): take void arguments. prototype updated
(history_save): likewise
(history_reset): likewise
(history_previous): likewise
(history_next): likewise
(history_list_items): likewise
* src/group.c (group_in_list): static function
(init_groups): take void arguments. prototype updated
(free_groups): likewise
(group_next_group): likewise
(group_prev_group): likewise
* src/globals.c (x_export_selection): take void arguments
(get_cut_buffer): likewise
(get_primary_selection): likewise
(get_selection): take void arguments. protype updated.
(init_globals): likewise
* src/events.c (selection_clear): take void arguments
(handle_signals): likewise
(listen_for_events): take void argumens. prototype updated
* src/bar.c (reset_alarm): take void arguments
(show_last_message): take void arguments. prototype updated.
(free_bar): likewise
* src/actions.c (init_set_vars): static function. take void arguments
(clear_frame_redos): take void arguments
(pop_frame_undo): likewise
(pop_frame_redo): likewise
(keymap_new): static function
(parse_keydesc): likewise
(trivial_completions): likewise
(keymap_completions): likewise
(window_completions): likewise
(group_completions): likewise
(colon_completions): likewise
(exec_completions): likewise
(hook_completions): likewise
(var_completions): likewise
(update_all_gcs): take void arguments
(grab_rat): likewise
(ungrab_rat): likewise
(init_user_commands): take void arguments. prototype updated.
(free_keymaps): likewise
(free_aliases): likewise
|
|
* src/screen.c (init_screen): don't include the font in the gc
* src/ratpoison.h: include Xlocale.h
* src/manage.c (get_wmname): support i18n characters
* src/main.c (init_defaults): call load_query_font_set and set_extents_of_fontset
(main): call setlocale
(clean_up): call XFreeFontSet
(set_extents_of_fontset): new function
(load_query_font_set): likewise
* src/input.c (update_input_window): use XmbTextEscapement and XmbDrawString
* src/globals.h (FONT_HEIGHT): use rp_font_ascent and rp_font_descent
(MAX_FONT_WIDTH): use rp_font_width
new globals rp_font_ascent, rp_font_descent, rp_font_width
* src/globals.c: new globals rp_font_ascent, rp_font_descent, rp_font_width
* src/data.h (struct rp_defaults): font is a XFontSet
* src/bar.c (max_line_length): call XmbTextEscapement
(draw_string): call XmbDrawString
(get_mark_box): call XmbTextEscapement
* src/actions.c (read_frame): call XmbTextEscapement
(cmd_license): likewise
(read_frame): call XmbDrawString
(cmd_license): likewise
(cmd_help): likewise
(update_gc): don't include the font
(set_font): call load_query_font_set
|
|
|
|
* src/manage.c (window_is_transient): new function
(maximize_normal): honour aspect ratio hint
* src/window.c (update_window_gravity): use maxsize_gravity for windows with aspect hints.
(set_active_window_body): call window_is_transient
* src/split.c (cleanup_frame): call window_is_transient
|
|
numset_find_empty_cell in a variable and use it as an index into
the numbers_taken array.
* src/actions.c (cmd_curframe): return the frame number in
non-interactive mode.
* src/split.c (cleanup_frame): in the maxsize windows are
transients check either the width or height must be less than the
screen width/height (just like in windows.c).
|
|
|
|
|
|
|
|
window in. All callers updated.
(group_prev_window): make sure the matched window is in the same
screen as win.
(group_next_window): likewise
* src/window.c (find_window_other): add argument, the screen to
find the window in. All callers updated.
|
|
(init_screens): init rp_frame_numset
(init_screen): set screen's frames_numset to rp_frame_numset
* src/globals.h: new global prototype, rp_frame_numset
* src/globals.c: new global, rp_frame_numset
* src/split.c (find_last_frame): find the last from of all the
screens. prototype updated. Callers updated.
(find_frame_number): search all screens. prototype
updated. callers updated.
* src/actions.c (cmd_fselect): select from frames in all screens.
|
|
checking if win is NULL.
(give_window_focus): set rp_current_screen to xine_screen_num of
the window's screen.
(set_active_window): when using xinerama get the frame from the
current screen.
* src/split.c (set_frames_window): update the window's scr
attribute to point to the frame's screen.
(find_window_for_frame): when xinerama is being used search all
windows.
(set_active_frame): update rp_current_screen to point to the
frame's screen.
* src/screen.h (init_screens): new prototype
(is_rp_window_for_screen): likewise
* src/screen.c: include string.h and X11/cursorfont.h
(init_screens): new function
(is_rp_window_for_screen): new function.
(init_screen): fill in xine_screen_num when using xinerama.
* src/ratpoison.h: include xinerama.h
* src/manage.c (current_screen): use xine_screen_num to find the
current screen.
(scanwins): use is_rp_window_for_screen to skip over ratpoison windows.
(scanwins): when using xinerama only manage windows inside the viewable area.
* src/main.c (main): call init_xinerama and init_screens. Move
screen initing code to these functions.
(init_rat_cursor): move to screen.c
(init_screen): likewise
(find_screen): likewise
(clean_up): call free_xinerama
* src/group.c (group_last_window): only check windows in the
current screen, unless xinerama is being used in which case all
windows are accessible.
(group_next_window): likewise
(group_prev_window): likewise
* src/globals.h: new globals rp_have_xinerama, xine_screen_num.
* src/events.c (new_window): when using xinerama, the new window's
screen is the current screen.
(key_press): when using xinerama, use the current screen.
* src/data.h (struct rp_screen): remove root_attr and add left,
top, width, height. All dependant code updated. Add xine_screen_num.
* src/actions.c (cmd_remove): show the frame indicator in the new
current frame after removing the frame.
* src/Makefile.am (ratpoison_SOURCES): add xinerama.c and xinerama.h
|
|
indicator windows.
(show_frame_indicator): hide the 'current frame' indicator before
showing it.
|
|
* src/split.c (set_active_frame): use set_window_focus.
(blank_frame): likewise
* src/main.c (main): use set_window_focus.
* src/input.c (get_more_input): use set_window_focus
* src/globals.h (set_window_focus): new prototype
(set_rp_window_focus): likewise
* src/events.c (handle_key): use set_window_focus.
* src/actions.c (cmd_resize): use set_window_focus.
(cmd_license): likewise
(cmd_help): likewise
(cmd_tmpwm): likewise
(cmd_fselect): likewise
* src/globals.c (set_rp_window_focus): new function
(set_window_focus): likewise
|
|
current screen.
* src/group.h (group_delete_group): new prototype
* src/group.c (group_last_window): find the last window in the
current screen.
(group_next_window): find next window in current screen.
(group_prev_window): find previous window in current screen.
* src/manage.c (force_maximize): call XSync() after first resize.
* src/globals.h (GROUP_DELETE_GROUP_OK): new define
(GROUP_DELETE_GROUP_NONEMPTY): likewise
* src/actions.h (cmd_gdelete): new prototype
* src/actions.c (user_commands): new command gdelete
(cmd_gdelete): new command
|
|
* src/split.c (set_active_frame): run the switch frame hook.
* src/ratpoison.h: include hook.h
* src/group.h (set_current_group): new prototype
* src/group.c (set_current_group): new function
* src/globals.h (rp_prefix_hook): new extern
(rp_switch_win_hook): likewise
(rp_switch_frame_hook): likewise
(rp_switch_group_hook): likewise
(rp_hook_db): likewise
* src/globals.c (rp_prefix_hook): new hook
(rp_switch_win_hook): likewise
(rp_switch_frame_hook): likewise
(rp_switch_group_hook): likewise
(rp_hook_db): new global
* src/events.c (handle_key): call the prefix hook.
* src/data.h (struct rp_hook_db_entry): new struct
* src/actions.h (cmd_addhook): new prototype
(cmd_remhook): likewise
* src/actions.c (user_commands): add commands addhook and remhook.
(cmd_windows): show the window bar no matter what if the bar
timeout is > 0.
(cmd_gnext): call set_current_group
(cmd_gprev): likewise
(cmd_gnew): likewise
(cmd_gselect): likewise
(cmd_addhook): new function
(cmd_remhook): likewise
* src/Makefile.am (ratpoison_SOURCES): add hook.c and hook.h
|
|
* src/ratpoison.h (str_comp): new prototype
* src/messages.h (MESSAGE_PROMPT_SWITCH_TO_GROUP): new define
* src/main.c: include ctype.h
(str_comp): moved from window.c
* src/group.h (groups_find_group_by_name): new prototype.
(groups_find_group_by_number): likewise.
(groups_merge): likewise
(group_move_window): likewise
* src/group.c: include string.h
(group_new): new argument, name. All callers updated. prototype
updated.
(init_groups): create the first group with DEFAULT_GROUP_NAME as
its name.
(group_new): new argument, name. All callers updated. Prototype
updated.
(group_free): free the group's name.
(group_add_new_group): new argument, name. All callers
updated. Prototype updated.
(groups_find_group_by_name): new function
(groups_find_group_by_number): likewise
(group_move_window): likewise
(groups_merge): likewise
* src/conf.h (DEFAULT_GROUP_NAME): new define
* src/actions.h (cmd_gselect): new prototype
(cmd_groups): likewise
(cmd_gmove): likewise
(cmd_gmerge): likewise
(cmd_gnewbg): likewise
* src/actions.c (user_commands): new commands gselect, groups,
gmove, gmerge, gnewbg.
(cmd_gnewbg): new function
(find_group): likewise
(cmd_gselect): likewise
(cmd_groups): likewise
(cmd_gmove): likewise
(cmd_gmerge): likewise
|
|
group.
(find_window_name): search the current group for a matching
window.
(find_window_other): likewise.
(format_window_name): take a rp_window_elem as an argument, not an
rp_window. Print the group window's number, not the window's
internal number.
(get_window_list): loop through the current group.
* src/split.c (find_window_for_frame): search the current group
for a window to fit in the frame.
* src/ratpoison.h: include globals.h and group.h
* src/manage.c (unmanage): remove the window from any groups it
was in.
(map_window): map the window in any groups it is in.
(withdraw_window): unmap the window in any groups it is in.
* src/main.c: Move all globals to globals.h
(main): initialize the group functions.
* src/data.h: Move all defines and extern globals to globals.h
(struct rp_window_elem): new struct
(struct rp_group): likewise
* src/actions.h (cmd_gnext): new prototype
(cmd_gprev): likewise
(cmd_gnew): likewise
* src/actions.c (user_commands): new commands gnext, gprev, and gnew
(cmd_prev): fix to work with new group code.
(cmd_next): likewise
(cmd_gnext): new function
(cmd_gprev): likewise
(cmd_gnew): likewise
* src/Makefile.am (ratpoison_SOURCES): add files globals.h,
globals.c, group.h and group.c
|
|
dependant code updated.
* src/main.c: remove child_info global. Add rp_children global.
(chld_handler): update the terminated and status fields of any
terminated children.
* src/events.c (handle_signals): loop through each child process
and remove them from the list. Print a message for any child that
doesn't return a 0 status.
* src/data.h (rp_child_info): new fields, terminated and node.
remove child_info global. Add rp_children global.
* src/actions.c (spawn): Add the command to the list of children.
|
|
screen_info. Dependant code updated.
|
|
update_window_names().
(set_active_frame): likewise
(blank_frame): likewise
* src/bar.h (update_bar): new prototype.
* src/bar.c (BAR_IS_HIDDEN): new define.
(update_bar): new function.
* src/actions.c (cmd_frestore): call update_bar() instead of
update_window_names().
* src/split.c (set_active_frame): update the window list after
switching frames.
(blank_frame): update the window list after blanking the screen.
* src/actions.c (cmd_frestore): update the window list after
restoring the frames.
* src/split.c (split_frame): update the window list after the
split.
|
|
switching frames.
* src/actions.c (cmd_frestore): update the window list after
restoring the frames.
* src/split.c (split_frame): update the window list after the
split.
|
|
|
|
* src/split.h (current_frame): new prototype
* src/split.c (current_frame): new function
(current_window): use current_frame()
(split_frame): likewise
(remove_all_splits): likewise
(set_active_frame): likewise
(show_frame_message): likewise
(remove_all_splits): use current_screen()
* src/actions.c (cmd_prev_frame): use current_frame()
(cmd_next_frame): likewise
(cmd_select): likewise
(cmd_h_split): likewise
(cmd_v_split): likewise
(cmd_remove): likewise
(cmd_shrink): likewise
(cmd_resize): likewise
(cmd_focusup): likewise
(cmd_focusdown): likewise
(cmd_focusleft): likewise
(cmd_focusright): likewise
|
|
(split_frame): call screen_get_frame to get appropriate structure.
(split_frame): call find_window_number to get appropriate
structure.
(remove_all_splits): call screen_get_frame to get appropriate
structure.
(resize_frame): make sure all frames that will be resized are big
enough for the resize.
(resize_frame): return int
(resize_shrink_to_window): call find_window_number to get the
appropriate structure.
(resize_frame_right): return int
(resize_frame_left): likewise
(resize_frame_top): likewise
(resize_frame_bottom): likewise
(resize_frame_horizontally): backup the frameset and restore it if
the resize fails. Do not allow a frame to be resized too small or
too big.
(resize_frame_vertically): likewise
(remove_frame): call find_window_number to get the appropriate
structure.
(set_active_frame): likewise
(blank_frame): likewise
(show_frame_message): call screen_get_frame to get the appropriate
structure.
* src/screen.c (screen_width): new function (and prototype)
(screen_height): likewise
(screen_left): likewise
(screen_right): likewise
(screen_top): likewise
(screen_bottom): likewise
(screen_copy_frameset): likewise
(screen_restore_frameset): likewise
(frameset_free): likewise
(screen_get_frame): likewise
* src/split.c (maximize_frame): call screen_width and
screen_height to get the size for the frame.
* src/ratpoison.h: include screen.h
* src/manage.c (move_window):
* src/frame.h (frame_copy): new prototype
(frame_dump): likewise
* src/frame.c (frame_copy): new function
(frame_dump): likewise
* src/events.c (unmap_notify): compare frame numbers, not
pointers.
(client_msg): call screen_get_frame when blanking the frame.
* src/data.h (EMPTY): new define
(struct rp_window_frame): replace the win field with
win_number. Dependant code updated.
(struct rp_window): replace frame with frame_number. Dependant
code updated.
(struct screen_info): replace rp_current_frame with current_frame
and change type to int. Dependant code updated.
* src/Makefile.am (ratpoison_SOURCES): added screen.h and screen.c
|
|
* src/split.c (show_frame_message): new function
* src/main.c (init_screen): listen for key release events in the
key_window and input_window.
* src/input.c (read_key): new argument, gobble_rel. All callers
updated.
* src/actions.c (cmd_remove): only remove the current frame if it
isn't the ONLY one.
(cmd_remove): display a message informing the user if the frame
cannot be removed.
(cmd_resize): clean up resize loop.
(cmd_resize): display a window indicating which frame is being
resized.
|
|
not frame_left).
|
|
if the frame isn't against the left side of the screen.
(resize_frame_vertically): only resize to the left
if the frame isn't against the top of the screen.
* src/split.c (create_initial_frame): call frame_new to allocate a frame.
(split_frame): likewise
|
|
|
|
for fselect and resize. Move keybinding for curframe.
* src/split.c (create_initial_frame): call frame_new to allocate a frame.
(split_frame): likewise
* src/main.c (free_screen): call frame_free to free the screen
frames.
* src/frame.h (frame_new): new prototype
(frame_free): likewise
* src/frame.c (frame_new): new function.
(frame_free): likewise
|
|
* src/frame.h (frame_left): new prototype
(frame_top): likewise
(frame_right): likewise
(frame_bottom): likewise
(frame_width): likewise
(frame_height): likewise
(frame_resize_left): likewise
(frame_resize_right): likewise
(frame_resize_up): likewise
(frame_resize_down): likewise
(frame_move_left): likewise
(frame_move_right): likewise
(frame_move_up): likewise
(frame_move_down): likewise
* src/frame.c (frame_left): new function
(frame_top): likewise
(frame_right): likewise
(frame_bottom): likewise
(frame_width): likewise
(frame_height): likewise
(frame_resize_left): likewise
(frame_resize_right): likewise
(frame_resize_up): likewise
(frame_resize_down): likewise
(frame_move_left): likewise
(frame_move_right): likewise
(frame_move_up): likewise
(frame_move_down): likewise
* src/split.c (resize_frame): new function
(resize_frame_right): likewise
(resize_frame_left): likewise
(resize_frame_top): likewise
(resize_frame_bottom): likewise
(resize_frame_horizontally): use resize_frame_right and
resize_frame_left to do the resizing.
(resize_frame_vertically): use resize_frame_top and
resize_frame_bottom to do the resizing.
* src/ratpoison.h (PRINT_ERROR): flush stdout
(PRINT_DEBUG): likewise
include frame.h
|
|
* src/split.c (create_initial_frame): give a number to the
initial frame
(split_frame): give the new frame a unique number
(split_frame): add the new frame after the current frame
(remove_all_splits): return the frame's number when deleting it.
(remove_frame): likewise
(find_frame_number): new function
* src/main.c (init_screen): initialize the frames_numset member
(free_screen): free the frames_numset member
* src/data.h (struct screen_info): new member, frames_numset
* src/actions.h (cmd_fselect): new prototype
* src/actions.c (user_commands): new command "fselect"
(cmd_fselect): new function
|