Introduction
Introduction Statistics Contact Development Disclaimer Help
ttweak focus to support XEMBED client message and remove focus on EnterNotify. …
git clone git://src.adamsgaard.dk/st
Log
Files
Refs
README
LICENSE
---
commit 8d2d8848e8ac7117adffe9e1d168c5125934dfcf
parent d5f3d120eae2377b8a2f80c94fbb5e4bd7a6189d
Author: AurĂ©lien Aptel <[email protected]>
Date: Fri, 16 Sep 2011 18:03:44 +0200
ttweak focus to support XEMBED client message and remove focus on EnterNotify. …
Diffstat:
M st.c | 26 +++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
---
diff --git a/st.c b/st.c
t@@ -37,6 +37,10 @@
"st-" VERSION ", (c) 2010-2011 st engineers\n" \
"usage: st [-t title] [-c class] [-w windowid] [-v] [-e command...]\n"
+/* XEMBED messages */
+#define XEMBED_FOCUS_IN 4
+#define XEMBED_FOCUS_OUT 5
+
/* Arbitrary sizes */
#define ESC_TITLE_SIZ 256
#define ESC_BUF_SIZ 256
t@@ -217,6 +221,7 @@ static void visibility(XEvent *);
static void unmap(XEvent *);
static char* kmap(KeySym, unsigned int state);
static void kpress(XEvent *);
+static void cmessage(XEvent *);
static void resize(XEvent *);
static void focus(XEvent *);
static void brelease(XEvent *);
t@@ -237,12 +242,11 @@ static int isfullutf8(char *, int);
static void (*handler[LASTEvent])(XEvent *) = {
[KeyPress] = kpress,
+ [ClientMessage] = cmessage,
[ConfigureNotify] = resize,
[VisibilityNotify] = visibility,
[UnmapNotify] = unmap,
[Expose] = expose,
- [EnterNotify] = focus,
- [LeaveNotify] = focus,
[FocusIn] = focus,
[FocusOut] = focus,
[MotionNotify] = bmotion,
t@@ -264,6 +268,7 @@ static char **opt_cmd = NULL;
static char *opt_title = NULL;
static char *opt_embed = NULL;
static char *opt_class = NULL;
+static Atom xembedatom;
int
utf8decode(char *s, long *u) {
t@@ -1666,6 +1671,8 @@ xinit(void) {
&(XColor){.red = 0xffff, .green = 0xffff, .blue = 0xffff},
&(XColor){.red = 0x0000, .green = 0x0000, .blue = 0x0000});
+ xembedatom = XInternAtom(xw.dpy, "_XEMBED", False);
+
XStoreName(xw.dpy, xw.win, opt_title ? opt_title : "st");
XMapWindow(xw.dpy, xw.win);
xhints();
t@@ -1822,7 +1829,7 @@ xseturgency(int add) {
void
focus(XEvent *ev) {
- if(ev->type == FocusIn || ev->type == EnterNotify) {
+ if(ev->type == FocusIn) {
xw.state |= WIN_FOCUSED;
xseturgency(0);
} else
t@@ -1890,6 +1897,19 @@ kpress(XEvent *ev) {
}
void
+cmessage(XEvent *e) {
+ if (e->xclient.message_type == xembedatom && e->xclient.format == 32) {
+ if (e->xclient.data.l[1] == XEMBED_FOCUS_IN) {
+ xw.state |= WIN_FOCUSED;
+ xseturgency(0);
+ } else if (e->xclient.data.l[1] == XEMBED_FOCUS_OUT) {
+ xw.state &= ~WIN_FOCUSED;
+ }
+ draw();
+ }
+}
+
+void
resize(XEvent *e) {
int col, row;
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.