summaryrefslogtreecommitdiff
path: root/src/list.c
diff options
context:
space:
mode:
authorsabetts <sabetts>2001-04-13 08:22:11 +0000
committersabetts <sabetts>2001-04-13 08:22:11 +0000
commitbb36a84d39dc9d189e67874fff38c38a9812387a (patch)
treed6b7d767c86eb8ead997731e526215cbc37f0faa /src/list.c
parent10dddc8331d453533b604c950ef1474b026d5abd (diff)
downloadratpoison-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.c45
1 files changed, 23 insertions, 22 deletions
diff --git a/src/list.c b/src/list.c
index e4c7680..78359cd 100644
--- a/src/list.c
+++ b/src/list.c
@@ -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);