summaryrefslogtreecommitdiff
path: root/src/main.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/main.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/main.c')
-rw-r--r--src/main.c46
1 files changed, 31 insertions, 15 deletions
diff --git a/src/main.c b/src/main.c
index a41973b..ebe18c1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);