Got questions, comments, patches, etc.?
Contact Jason Woofenden
gitweb
/
spectrwm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
prevent double red bordering
[spectrwm.git]
/
scrotwm.c
diff --git
a/scrotwm.c
b/scrotwm.c
index
958f652
..
be3ba90
100644
(file)
--- a/
scrotwm.c
+++ b/
scrotwm.c
@@
-416,6
+416,7
@@
struct quirk {
#define SWM_Q_ANYWHERE (1<<2) /* don't position this window */
#define SWM_Q_XTERM_FONTADJ (1<<3) /* adjust xterm fonts when resizing */
#define SWM_Q_FULLSCREEN (1<<4) /* remove border */
#define SWM_Q_ANYWHERE (1<<2) /* don't position this window */
#define SWM_Q_XTERM_FONTADJ (1<<3) /* adjust xterm fonts when resizing */
#define SWM_Q_FULLSCREEN (1<<4) /* remove border */
+#define SWM_Q_FOCUSPREV (1<<5) /* focus on caller */
};
int quirks_size = 0, quirks_length = 0;
struct quirk *quirks = NULL;
};
int quirks_size = 0, quirks_length = 0;
struct quirk *quirks = NULL;
@@
-1902,6
+1903,12
@@
focus_win(struct ws_win *win)
XGetInputFocus(display, &cur_focus, &rr);
if ((cfw = find_window(cur_focus)) != NULL)
unfocus_win(cfw);
XGetInputFocus(display, &cur_focus, &rr);
if ((cfw = find_window(cur_focus)) != NULL)
unfocus_win(cfw);
+ else {
+ /* use larger hammer since the window was killed somehow */
+ TAILQ_FOREACH(cfw, &win->ws->winlist, entry)
+ XSetWindowBorder(display, cfw->id,
+ cfw->ws->r->s->c[SWM_S_COLOR_UNFOCUS].color);
+ }
win->ws->focus = win;
win->ws->focus = win;
@@
-2217,7
+2224,8
@@
focus_prev(struct ws_win *win)
}
/* if in max_stack try harder */
}
/* if in max_stack try harder */
- if (ws->cur_layout->flags & SWM_L_FOCUSPREV) {
+ if ((win->quirks & SWM_Q_FOCUSPREV) ||
+ (ws->cur_layout->flags & SWM_L_FOCUSPREV)) {
if (cur_focus != ws->focus_prev)
winfocus = ws->focus_prev;
else if (cur_focus != ws->focus)
if (cur_focus != ws->focus_prev)
winfocus = ws->focus_prev;
else if (cur_focus != ws->focus)
@@
-2342,6
+2350,8
@@
cycle_layout(struct swm_region *r, union arg *args)
ws->cur_layout = &layouts[0];
stack();
ws->cur_layout = &layouts[0];
stack();
+ if (focus_mode == SWM_FOCUS_DEFAULT)
+ drain_enter_notify();
a.id = SWM_ARG_ID_FOCUSCUR;
focus(r, &a);
bar_update();
a.id = SWM_ARG_ID_FOCUSCUR;
focus(r, &a);
bar_update();
@@
-2954,6
+2964,8
@@
iconify(struct swm_region *r, union arg *args)
unmap_window(r->ws->focus);
update_iconic(r->ws->focus, 1);
stack();
unmap_window(r->ws->focus);
update_iconic(r->ws->focus, 1);
stack();
+ if (focus_mode == SWM_FOCUS_DEFAULT)
+ drain_enter_notify();
r->ws->focus = NULL;
a.id = SWM_ARG_ID_FOCUSCUR;
focus(r, &a);
r->ws->focus = NULL;
a.id = SWM_ARG_ID_FOCUSCUR;
focus(r, &a);
@@
-3157,6
+3169,8
@@
floating_toggle(struct swm_region *r, union arg *args)
_NET_WM_STATE_TOGGLE);
stack();
_NET_WM_STATE_TOGGLE);
stack();
+ if (focus_mode == SWM_FOCUS_DEFAULT)
+ drain_enter_notify();
if (win == win->ws->focus) {
a.id = SWM_ARG_ID_FOCUSCUR;
if (win == win->ws->focus) {
a.id = SWM_ARG_ID_FOCUSCUR;
@@
-3216,6
+3230,8
@@
resize(struct ws_win *win, union arg *args)
a.id = SWM_ARG_ID_MOVELAST;
swapwin(r, &a);
stack();
a.id = SWM_ARG_ID_MOVELAST;
swapwin(r, &a);
stack();
+ if (focus_mode == SWM_FOCUS_DEFAULT)
+ drain_enter_notify();
if (XGrabPointer(display, win->id, False, MOUSEMASK, GrabModeAsync,
GrabModeAsync, None, None /* cursor */, CurrentTime) != GrabSuccess)
if (XGrabPointer(display, win->id, False, MOUSEMASK, GrabModeAsync,
GrabModeAsync, None, None /* cursor */, CurrentTime) != GrabSuccess)
@@
-4309,7
+4325,7
@@
setconfquirk(char *selector, char *value, int flags)
void
setup_quirks(void)
{
void
setup_quirks(void)
{
- setquirk("MPlayer", "xv", SWM_Q_FLOAT | SWM_Q_FULLSCREEN);
+ setquirk("MPlayer", "xv", SWM_Q_FLOAT | SWM_Q_FULLSCREEN | SWM_Q_FOCUSPREV);
setquirk("OpenOffice.org 3.2", "VCLSalFrame", SWM_Q_FLOAT);
setquirk("Firefox-bin", "firefox-bin", SWM_Q_TRANSSZ);
setquirk("Firefox", "Dialog", SWM_Q_FLOAT);
setquirk("OpenOffice.org 3.2", "VCLSalFrame", SWM_Q_FLOAT);
setquirk("Firefox-bin", "firefox-bin", SWM_Q_TRANSSZ);
setquirk("Firefox", "Dialog", SWM_Q_FLOAT);
@@
-5037,6
+5053,8
@@
configurenotify(XEvent *e)
adjust_font(win);
if (font_adjusted)
stack();
adjust_font(win);
if (font_adjusted)
stack();
+ if (focus_mode == SWM_FOCUS_DEFAULT)
+ drain_enter_notify();
}
}
}
}
@@
-5060,6
+5078,8
@@
destroynotify(XEvent *e)
unmanage_window(win);
stack();
unmanage_window(win);
stack();
+ if (focus_mode == SWM_FOCUS_DEFAULT)
+ drain_enter_notify();
free_window(win);
}
free_window(win);
}
@@
-5346,6
+5366,9
@@
unmapnotify(XEvent *e)
/* resend unmap because we ated it */
XUnmapWindow(display, e->xunmap.window);
}
/* resend unmap because we ated it */
XUnmapWindow(display, e->xunmap.window);
}
+
+ if (focus_mode == SWM_FOCUS_DEFAULT)
+ drain_enter_notify();
}
void
}
void
@@
-5607,6
+5630,8
@@
screenchange(XEvent *e) {
TAILQ_FOREACH(r, &screens[i].rl, entry)
bar_setup(r);
stack();
TAILQ_FOREACH(r, &screens[i].rl, entry)
bar_setup(r);
stack();
+ if (focus_mode == SWM_FOCUS_DEFAULT)
+ drain_enter_notify();
}
void
}
void
@@
-5859,6
+5884,8
@@
main(int argc, char *argv[])
grabkeys();
stack();
grabkeys();
stack();
+ if (focus_mode == SWM_FOCUS_DEFAULT)
+ drain_enter_notify();
xfd = ConnectionNumber(display);
while (running) {
xfd = ConnectionNumber(display);
while (running) {