diff options
author | sabetts <sabetts> | 2001-04-13 08:22:11 +0000 |
---|---|---|
committer | sabetts <sabetts> | 2001-04-13 08:22:11 +0000 |
commit | bb36a84d39dc9d189e67874fff38c38a9812387a (patch) | |
tree | d6b7d767c86eb8ead997731e526215cbc37f0faa /src/list.c | |
parent | 10dddc8331d453533b604c950ef1474b026d5abd (diff) | |
download | ratpoison-bb36a84d39dc9d189e67874fff38c38a9812387a.zip |
* src/split.h (blank_frame): new prototype
* src/split.c (split_frame): calls unhide_window after maximizing
the new frame's window.
(remove_all_splits): hide all windows but the current one
(remove_all_splits): maximize the current window in its newly
resized frame.
(remove_frame): hide the frame's window after removing it from the
list.
(blank_frame): new function
* src/manage.h (withdraw_window): new prototype
(hide_window): likewise
(unhide_window): likewise
* src/manage.c (scanwins): glob ignored windows into 1 if
statement.
(scanwins): set the window's state to NormalState before calling
map_window.
(set_state): sets win->state
(map_window): calls set_state
(hide_window): new function
(unhide_window): likewise
(withdraw_window): new function
* src/main.c (main): setup error handlers after --command,
--restart, and --kill commands have been processed.
(main): doesn't call set_active_window
(init_screen): XSync's after selecting ewents on the root window.
(clean_up): map iconized windows
* src/list.h (give_window_focus): prototype updated
* src/list.c (give_window_focus): takes a second argument,
last_win.
(give_window_focus): calls unhide_window
(give_window_focus): uses last_win instead of current_window()
(set_active_window): hides the last window and unhides the new
window.
(set_active_window): calls give_window_focus
* src/events.c (cleanup_frame): maximizes the frame's new window
(unmap_notify): do nothing if the window is in the iconic
state. Withdraw the window if it is in the normal state.
(map_request): calls unhide_window if the window is iconized. Do
nothing if it is already mapped.
(destroy_window): tightened up
(client_msg): detects iconize requests from clients.
* src/data.h (STATE_UNMAPPED): remove. Dependant code uses
WithdawnState in its stead.
(STATE_MAPPED): likewise. Dependant code uses NormalState in its
stead
* src/actions.c (initialize_default_keybindings): new keybinding -
bound to "select -"
(cmd_select): the string "-" selects a blank window
Diffstat (limited to 'src/list.c')
-rw-r--r-- | src/list.c | 45 |
1 files changed, 23 insertions, 22 deletions
@@ -64,7 +64,7 @@ add_to_window_list (screen_info *s, Window w) new_window->scr = s; new_window->last_access = 0; new_window->prev = NULL; - new_window->state = STATE_UNMAPPED; + new_window->state = WithdrawnState; new_window->number = -1; new_window->named = 0; new_window->hints = XAllocSizeHints (); @@ -370,51 +370,52 @@ save_mouse_position (rp_window *win) ignore_badwindow--; } +/* Takes focus away from last_win and gives focus to win */ void -give_window_focus (rp_window *win) +give_window_focus (rp_window *win, rp_window *last_win) { - static int counter = 1; /* increments every time this function - is called. This way we can track - which window was last accessed. */ + /* counter increments every time this function is called. This way + we can track which window was last accessed. */ + static int counter = 1; if (win == NULL) return; counter++; win->last_access = counter; -/* if (win->scr->bar_is_raised) update_window_names (win->scr); */ - - if (current_window() != NULL) - { - save_mouse_position (current_window()); - } + unhide_window (win); + /* Warp the cursor to the window's saved position. */ + if (last_win != NULL) save_mouse_position (last_win); XWarpPointer (dpy, None, win->scr->root, 0, 0, 0, 0, win->mouse_x, win->mouse_y); - XSync (dpy, False); - - XSetInputFocus (dpy, win->w, - RevertToPointerRoot, CurrentTime); /* Swap colormaps */ - if (current_window() != NULL) - { - XUninstallColormap (dpy, current_window()->colormap); - } + if (last_win != NULL) XUninstallColormap (dpy, last_win->colormap); XInstallColormap (dpy, win->colormap); + + /* Finally, give the window focus */ + XSetInputFocus (dpy, win->w, + RevertToPointerRoot, CurrentTime); + + XSync (dpy, False); } void set_active_window (rp_window *win) { + rp_window *last_win; + if (win == NULL) return; - give_window_focus (win); + last_win = rp_current_frame->win; rp_current_frame->win = win; /* Make sure the window comes up full screen */ - maximize (current_window()); - XRaiseWindow (dpy, win->w); + maximize (win); + unhide_window (win); + give_window_focus (win, last_win); + hide_window (last_win); /* Make sure the program bar is always on the top */ update_window_names (win->scr); |