commit 29c5878d4c7d62def831471ebc82f63ecfd7105b
parent e70d87e83bdc49b24c302131f281fe0c6eac0634
Author: Christoph Lohmann <20h@r-36.net>
Date:   Mon,  3 Dec 2012 21:28:02 +0100
Adding fullscreen mode to tabbed.
Diffstat:
3 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/config.def.h b/config.def.h
@@ -16,11 +16,13 @@ static Key keys[] = { \
 	/* modifier                     key        function        argument */
 	{ MODKEY|ShiftMask,             XK_Return, focusonce,      { 0 } },
 	{ MODKEY|ShiftMask,             XK_Return, spawn,          { 0 } },
+
 	{ MODKEY|ShiftMask,             XK_l,      rotate,         { .i = +1 } },
 	{ MODKEY|ShiftMask,             XK_h,      rotate,         { .i = -1 } },
 	{ MODKEY|ShiftMask,             XK_j,      movetab,        { .i = -1 } },
 	{ MODKEY|ShiftMask,             XK_k,      movetab,        { .i = +1 } },
 	{ MODKEY,                       XK_Tab,    rotate,         { .i = 0 } },
+
 	{ MODKEY,                       XK_1,      move,           { .i = 0 } },
 	{ MODKEY,                       XK_2,      move,           { .i = 1 } },
 	{ MODKEY,                       XK_3,      move,           { .i = 2 } },
@@ -31,6 +33,9 @@ static Key keys[] = { \
 	{ MODKEY,                       XK_8,      move,           { .i = 7 } },
 	{ MODKEY,                       XK_9,      move,           { .i = 8 } },
 	{ MODKEY,                       XK_0,      move,           { .i = 9 } },
+
 	{ MODKEY,                       XK_q,      killclient,     { 0 } },
+
+	{ 0,                            XK_F11,    fullscreen,     { 0 } },
 };
 
diff --git a/tabbed.1 b/tabbed.1
@@ -72,6 +72,9 @@ close tab
 .TP
 .B Ctrl\-[0..9]
 jumps to nth tab
+.TP
+.B F11
+Toggle fullscreen mode.
 .SH EXAMPLES
 $ tabbed surf -e
 .TP
diff --git a/tabbed.c b/tabbed.c
@@ -49,7 +49,8 @@
 #define TEXTW(x)                 (textnw(x, strlen(x)) + dc.font.height)
 
 enum { ColFG, ColBG, ColLast };                         /* color */
-enum { WMProtocols, WMDelete, WMName, XEmbed, WMLast }; /* default atoms */
+enum { WMProtocols, WMDelete, WMName, WMState, WMFullscreen,
+	XEmbed, WMLast };                               /* default atoms */
 
 typedef union {
 	int i;
@@ -103,6 +104,7 @@ static void expose(const XEvent *e);
 static void focus(int c);
 static void focusin(const XEvent *e);
 static void focusonce(const Arg *arg);
+static void fullscreen(const Arg *arg);
 static int getclient(Window w);
 static unsigned long getcolor(const char *colstr);
 static int getfirsttab(void);
@@ -463,6 +465,20 @@ focusonce(const Arg *arg) {
 	nextfocus = True;
 }
 
+void
+fullscreen(const Arg *arg) {
+	XEvent e;
+
+	e.type = ClientMessage;
+	e.xclient.window = win;
+	e.xclient.message_type = wmatom[WMState];
+	e.xclient.format = 32;
+	e.xclient.data.l[0] = 2;
+	e.xclient.data.l[1] = wmatom[WMFullscreen];
+	e.xclient.data.l[2] = 0;
+	XSendEvent(dpy, root, False, SubstructureNotifyMask, &e);
+}
+
 int
 getclient(Window w) {
 	int i;
@@ -839,6 +855,9 @@ setup(void) {
 	wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
 	wmatom[XEmbed] = XInternAtom(dpy, "_XEMBED", False);
 	wmatom[WMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
+	wmatom[WMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
+	wmatom[WMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN",
+			False);
 
 	/* init appearance */
 	wx = 0;