main.c
changeset 76 4bd49f404f10
parent 75 f08271b7cb20
child 77 38c8f7f7d401
equal deleted inserted replaced
75:f08271b7cb20 76:4bd49f404f10
     1 /*
     1 /*
     2  * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
     2  * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
     3  * See LICENSE file for license details.
     3  * See LICENSE file for license details.
     4  */
     4  */
     5 
     5 
       
     6 #include "dwm.h"
       
     7 
     6 #include <errno.h>
     8 #include <errno.h>
     7 #include <stdarg.h>
       
     8 #include <stdio.h>
     9 #include <stdio.h>
     9 #include <stdlib.h>
    10 #include <stdlib.h>
    10 #include <string.h>
    11 #include <string.h>
    11 #include <unistd.h>
    12 #include <unistd.h>
    12 
       
    13 #include <X11/cursorfont.h>
    13 #include <X11/cursorfont.h>
    14 #include <X11/Xatom.h>
    14 #include <X11/Xatom.h>
    15 #include <X11/Xproto.h>
    15 #include <X11/Xproto.h>
    16 
    16 
    17 #include "dwm.h"
       
    18 
       
    19 /********** CUSTOMIZE **********/
       
    20 
       
    21 char *tags[TLast] = {
       
    22 	[Tscratch] = "scratch",
       
    23 	[Tdev] = "dev",
       
    24 	[Twww] = "www",
       
    25 	[Twork] = "work",
       
    26 };
       
    27 
       
    28 /********** CUSTOMIZE **********/
       
    29 
       
    30 /* X structs */
       
    31 Display *dpy;
    17 Display *dpy;
    32 Window root, barwin;
    18 Window root, barwin;
    33 Atom wm_atom[WMLast], net_atom[NetLast];
    19 Atom wm_atom[WMLast], net_atom[NetLast];
    34 Cursor cursor[CurLast];
    20 Cursor cursor[CurLast];
    35 Bool running = True;
    21 Bool running = True;
    46 static Bool otherwm;
    32 static Bool otherwm;
    47 static const char version[] =
    33 static const char version[] =
    48 	"dwm-" VERSION ", (C)opyright MMVI Anselm R. Garbe\n";
    34 	"dwm-" VERSION ", (C)opyright MMVI Anselm R. Garbe\n";
    49 static int (*xerrorxlib)(Display *, XErrorEvent *);
    35 static int (*xerrorxlib)(Display *, XErrorEvent *);
    50 
    36 
       
    37 /* static functions */
       
    38 
    51 static void
    39 static void
    52 usage() {	eprint("usage: dwm [-v]\n"); }
    40 cleanup()
       
    41 {
       
    42 	while(sel) {
       
    43 		resize(sel, True);
       
    44 		unmanage(sel);
       
    45 	}
       
    46 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
       
    47 }
    53 
    48 
    54 static void
    49 static void
    55 scan()
    50 scan()
    56 {
    51 {
    57 	unsigned int i, num;
    52 	unsigned int i, num;
    71 	}
    66 	}
    72 	if(wins)
    67 	if(wins)
    73 		XFree(wins);
    68 		XFree(wins);
    74 }
    69 }
    75 
    70 
    76 static void
       
    77 cleanup()
       
    78 {
       
    79 	while(sel) {
       
    80 		resize(sel, True);
       
    81 		unmanage(sel);
       
    82 	}
       
    83 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
       
    84 }
       
    85 
       
    86 void
       
    87 quit(Arg *arg)
       
    88 {
       
    89 	running = False;
       
    90 }
       
    91 
       
    92 static int
    71 static int
    93 win_property(Window w, Atom a, Atom t, long l, unsigned char **prop)
    72 win_property(Window w, Atom a, Atom t, long l, unsigned char **prop)
    94 {
    73 {
    95 	Atom real;
    74 	Atom real;
    96 	int format;
    75 	int format;
   106 	if(res == 0) {
    85 	if(res == 0) {
   107 		free((void *) *prop);
    86 		free((void *) *prop);
   108 	}
    87 	}
   109 	return res;
    88 	return res;
   110 }
    89 }
       
    90 
       
    91 /*
       
    92  * Startup Error handler to check if another window manager
       
    93  * is already running.
       
    94  */
       
    95 static int
       
    96 xerrorstart(Display *dsply, XErrorEvent *ee)
       
    97 {
       
    98 	otherwm = True;
       
    99 	return -1;
       
   100 }
       
   101 
       
   102 /* extern functions */
   111 
   103 
   112 int
   104 int
   113 getproto(Window w)
   105 getproto(Window w)
   114 {
   106 {
   115 	unsigned char *protocols;
   107 	unsigned char *protocols;
   142 	e.xclient.data.l[1] = CurrentTime;
   134 	e.xclient.data.l[1] = CurrentTime;
   143 	XSendEvent(dpy, w, False, NoEventMask, &e);
   135 	XSendEvent(dpy, w, False, NoEventMask, &e);
   144 	XFlush(dpy);
   136 	XFlush(dpy);
   145 }
   137 }
   146 
   138 
   147 /*
   139 void
   148  * Startup Error handler to check if another window manager
   140 quit(Arg *arg)
   149  * is already running.
   141 {
   150  */
   142 	running = False;
   151 static int
       
   152 xerrorstart(Display *dsply, XErrorEvent *ee)
       
   153 {
       
   154 	otherwm = True;
       
   155 	return -1;
       
   156 }
   143 }
   157 
   144 
   158 /*
   145 /*
   159  * There's no way to check accesses to destroyed windows, thus
   146  * There's no way to check accesses to destroyed windows, thus
   160  * those cases are ignored (especially on UnmapNotify's).
   147  * those cases are ignored (especially on UnmapNotify's).
   199 		case 'v':
   186 		case 'v':
   200 			fprintf(stdout, "%s", version);
   187 			fprintf(stdout, "%s", version);
   201 			exit(0);
   188 			exit(0);
   202 			break;
   189 			break;
   203 		default:
   190 		default:
   204 			usage();
   191 			eprint("usage: dwm [-v]\n");
   205 			break;
   192 			break;
   206 		}
   193 		}
   207 	}
   194 	}
   208 
   195 
   209 	dpy = XOpenDisplay(0);
   196 	dpy = XOpenDisplay(0);