diff options
author | Jérémie Courrèges-Anglas <jca@wxcvbn.org> | 2017-02-15 16:25:34 +0100 |
---|---|---|
committer | Jérémie Courrèges-Anglas <jca@wxcvbn.org> | 2017-02-15 16:25:34 +0100 |
commit | 2dbe923ea51cc9a13f4c20091e1bfd86f56f9688 (patch) | |
tree | 3dd7587776ff1679dac0aee80913244d2dd0cad4 /src/events.c | |
parent | c24d1e39ea14666f86c286d72d7f88c9028b3094 (diff) | |
parent | 2bda8bc2933dc3be318fbb7d1e290cd6ff4b1262 (diff) | |
download | ratpoison-2dbe923ea51cc9a13f4c20091e1bfd86f56f9688.zip |
Merge branch 'xrandr'
All the hard work on xrandr done by Mathieu OTHACEHE, thanks!
Diffstat (limited to 'src/events.c')
-rw-r--r-- | src/events.c | 81 |
1 files changed, 42 insertions, 39 deletions
diff --git a/src/events.c b/src/events.c index 814e1ef..e87bce2 100644 --- a/src/events.c +++ b/src/events.c @@ -79,19 +79,10 @@ new_window (XCreateWindowEvent *e) win = find_window (e->window); - /* In Xinerama mode, all windows have the same root, so check - * all Xinerama screens - */ - if (rp_have_xinerama) - { - /* New windows belong to the current screen */ - s = &screens[rp_current_screen]; - } - else - { - s = find_screen (e->parent); - } - if (is_rp_window_for_screen(e->window, s)) return; + /* New windows belong to the current screen */ + s = rp_current_screen; + + if (is_rp_window (e->window)) return; if (s && win == NULL && e->window != s->key_window @@ -137,7 +128,7 @@ unmap_notify (XEvent *ev) { cleanup_frame (frame); if (frame->number == win->scr->current_frame - && current_screen() == win->scr) + && rp_current_screen == win->scr) set_active_frame (frame, 0); /* Since we may have switched windows, call the hook. */ if (frame->win_number != EMPTY) @@ -234,7 +225,7 @@ destroy_window (XDestroyWindowEvent *ev) { cleanup_frame (frame); if (frame->number == win->scr->current_frame - && current_screen() == win->scr) + && rp_current_screen == win->scr) set_active_frame (frame, 0); /* Since we may have switched windows, call the hook. */ if (frame->win_number != EMPTY) @@ -442,11 +433,7 @@ key_press (XEvent *ev) unsigned int modifier; KeySym ks; - if (rp_have_xinerama) - s = current_screen(); - else - s = find_screen (ev->xkey.root); - + s = rp_current_screen; if (!s) return; #ifdef HIDE_MOUSE @@ -671,7 +658,7 @@ colormap_notify (XEvent *ev) win->colormap = attr.colormap; if (win == current_window() - && !current_screen()->bar_is_raised) + && !rp_current_screen->bar_is_raised) { XInstallColormap (dpy, win->colormap); } @@ -724,10 +711,10 @@ configure_notify (XConfigureEvent *ev) if (s != NULL) /* This is a root window of a screen, * look if its width or height changed: */ - screen_update(s,ev->width,ev->height); + screen_update (s, ev->x, ev->y, ev->width, ev->height); } -/* This is called whan an application has requested the +/* This is called when an application has requested the selection. Copied from rxvt. */ static void selection_request (XSelectionRequestEvent *rq) @@ -797,6 +784,12 @@ selection_clear (void) static void delegate_event (XEvent *ev) { + +#ifdef HAVE_XRANDR + if (rp_have_xrandr) + xrandr_notify (ev); +#endif + switch (ev->type) { case ConfigureRequest: @@ -868,10 +861,13 @@ delegate_event (XEvent *ev) break; case ConfigureNotify: - PRINT_DEBUG (("--- Handling ConfigureNotify ---\n")); - configure_notify( &ev->xconfigure ); + if (!rp_have_xrandr) + { + PRINT_DEBUG (("--- Handling ConfigureNotify ---\n")); + configure_notify (&ev->xconfigure); + } break; - + case MapNotify: case Expose: case MotionNotify: @@ -894,14 +890,18 @@ handle_signals (void) /* An alarm means we need to hide the popup windows. */ if (alarm_signalled > 0) { - int i; + rp_screen *cur; PRINT_DEBUG (("Alarm received.\n")); /* Only hide the bar if it times out. */ if (defaults.bar_timeout > 0) - for (i=0; i<num_screens; i++) - hide_bar (&screens[i]); + { + list_for_each_entry (cur, &rp_screens, node) + { + hide_bar (cur); + } + } hide_frame_indicator(); alarm_signalled = 0; @@ -932,17 +932,19 @@ handle_signals (void) if (rp_exec_newwm) { - int i; + rp_screen *cur; PRINT_DEBUG (("Switching to %s\n", rp_exec_newwm)); - putenv(current_screen()->display_string); + putenv (rp_current_screen->display_string); unhide_all_windows(); XSync(dpy, False); - for (i=0; i<num_screens; i++) - { - deactivate_screen(&screens[i]); - } + + list_for_each_entry (cur, &rp_screens, node) + { + deactivate_screen (cur); + } + execlp (rp_exec_newwm, rp_exec_newwm, (char *)NULL); /* Failed. Clean up. */ @@ -950,10 +952,11 @@ handle_signals (void) perror(" failed"); free (rp_exec_newwm); rp_exec_newwm = NULL; - for (i=0; i<num_screens; i++) - { - activate_screen(&screens[i]); - } + + list_for_each_entry (cur, &rp_screens, node) + { + activate_screen (cur); + } } if (hup_signalled > 0) |