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/main.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/main.c')
-rw-r--r-- | src/main.c | 46 |
1 files changed, 31 insertions, 15 deletions
@@ -372,13 +372,6 @@ main (int argc, char *argv[]) return EXIT_FAILURE; } - /* Setup signal handlers. */ - XSetErrorHandler(handler); - set_sig_handler (SIGALRM, alrm_handler); - set_sig_handler (SIGTERM, sighandler); - set_sig_handler (SIGINT, sighandler); - set_sig_handler (SIGHUP, hup_handler); - /* Set ratpoison specific Atoms. */ rp_restart = XInternAtom (dpy, "RP_RESTART", False); rp_kill = XInternAtom (dpy, "RP_KILL", False); @@ -416,6 +409,14 @@ main (int argc, char *argv[]) wm_take_focus = XInternAtom(dpy, "WM_TAKE_FOCUS", False); wm_colormaps = XInternAtom(dpy, "WM_COLORMAP_WINDOWS", False); + /* Setup signal handlers. */ + XSetErrorHandler(handler); + set_sig_handler (SIGALRM, alrm_handler); + set_sig_handler (SIGTERM, sighandler); + set_sig_handler (SIGINT, sighandler); + set_sig_handler (SIGHUP, hup_handler); + + /* Setup ratpoison's internal structures */ init_numbers (); init_window_list (); init_frame_list (); @@ -441,9 +442,6 @@ main (int argc, char *argv[]) } read_startup_files (); - - /* Set an initial window as active. */ - set_active_window (find_window_other ()); handle_events (); @@ -479,6 +477,15 @@ init_screen (screen_info *s, int screen_num) { XColor fg_color, bg_color,/* bold_color, */ junk; + /* Select on some events on the root window, if this fails, then + there is already a WM running and the X Error handler will catch + it, terminating ratpoison. */ + XSelectInput(dpy, RootWindow (dpy, screen_num), + PropertyChangeMask | ColormapChangeMask + | SubstructureRedirectMask | KeyPressMask | KeyReleaseMask + | SubstructureNotifyMask ); + XSync (dpy, False); + s->screen_num = screen_num; s->root = RootWindow (dpy, screen_num); s->def_cmap = DefaultColormap (dpy, screen_num); @@ -520,11 +527,6 @@ init_screen (screen_info *s, int screen_num) /* | GCLineWidth | GCSubwindowMode | GCFont, */ /* &gv); */ - XSelectInput(dpy, s->root, - PropertyChangeMask | ColormapChangeMask - | SubstructureRedirectMask | KeyPressMask | KeyReleaseMask - | SubstructureNotifyMask ); - /* Create the program bar window. */ s->bar_is_raised = 0; s->bar_window = XCreateSimpleWindow (dpy, s->root, 0, 0, @@ -558,8 +560,22 @@ init_screen (screen_info *s, int screen_num) void clean_up () { + rp_window *cur; int i; + + /* Map any iconized windows. */ + for (cur = rp_mapped_window_sentinel->next; + cur != rp_mapped_window_sentinel; + cur = cur->next) + { + if (cur->state == IconicState) + { + unhide_window (cur); + } + } + XSync (dpy, False); + for (i=0; i<num_screens; i++) { XDestroyWindow (dpy, screens[i].bar_window); |