/** Init WMFS */ void init(void) { /* Init lists heads */ SLIST_INIT(&bwhead); SLIST_INIT(&clients); SLIST_INIT(&trayicons); /* First init */ ewmh_init_hints(); init_conf(); init_gc(); init_font(); init_cursor(); init_key(); init_root(); screen_init_geo(); event_make_array(); infobar_init(); systray_acquire(); ewmh_update_current_tag_prop(); grabkeys(); return; }
void sendkey(void *s,int press_and_release,int toggled){ symbol_x11 *sym=(symbol_x11 *)s; KeyCode modifier; KeySym modifier_sym; assert(dpy); kbio.lastsent=sym->keycode; ungrabkeys(); XFlush(dpy); uk_log("send keysym 0x%x keycode %i %s modifier=%i", (unsigned int)sym->ks, (int)sym->keycode, XKeysymToString(sym->ks), sym->modifier); XTestFakeKeyEvent(dpy,sym->keycode,1,CurrentTime); XFlush(dpy); XTestFakeKeyEvent(dpy,sym->keycode,0,CurrentTime+100); XFlush(dpy); XFlush(dpy); grabkeys(); }
int main(int argc, char *argv[]) { if(!(dpy = XOpenDisplay(NULL))) { printf("wimp: error: Can't open display!\n"); return 1; } if(init()) { printf("fail\n"); return 1; } grabkeys(); /* This is the main loop! */ printf("wimp: Starting main event loop.\n"); while(running) { XNextEvent(dpy, &ev); switch(ev.type) { case KeyPress: keypress(&ev); break; } } XCloseDisplay(dpy); return 0; }
static void mappingnotify(XEvent *e) { XMappingEvent *ev = &e->xmapping; XRefreshKeyboardMapping(ev); if(ev->request == MappingKeyboard) grabkeys(); }
/** MappingNotify handle event * \param ev XMappingEvent pointer */ static void mappingnotify(XMappingEvent *ev) { XRefreshKeyboardMapping(ev); if(ev->request == MappingKeyboard) grabkeys(); return; }
/** Init MWM */ void init(void) { /* First init */ ewmh_init_hints(); init_conf(); init_gc(); init_font(); init_cursor(); init_key(); init_root(); screen_init_geo(); infobar_init(); systray_acquire(); init_status(); ewmh_update_current_tag_prop(); grabkeys(); return; }
void ui_init(int w,int h,int x,int y){ start_time=get_msec(); setup_modifiers(); _w=w; _h=h; winX=x; winY=y; dpy=XOpenDisplay(""); screen=DefaultScreen(dpy); root=DefaultRootWindow(dpy); XMatchVisualInfo(dpy, screen, 32, TrueColor, &visualinfo); uk_log("Iniitializing UI"); uk_log("Win @ (%i,%i,%i,%i)",x,y,w,h); attr.colormap = XCreateColormap( dpy, root, visualinfo.visual, AllocNone) ; attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask; attr.background_pixmap = None ; attr.border_pixel = 0 ; uk_log("root=%x\n",root); uk_log("%i %i %i %i\n",x,y,w,h); win=XCreateWindow(dpy,root, x,y,w,h, 0, visualinfo.depth, InputOutput, visualinfo.visual, CWColormap|CWEventMask|CWBackPixmap|CWBorderPixel, &attr); XWindowAttributes wa; XGetWindowAttributes(dpy,win,&wa); gc = XCreateGC(dpy,win,0,0); double_buffer=XCreatePixmap(dpy,win,wa.width,wa.height,wa.depth); XColor black=_rgb2XColor(255,255,255); XAllocColor(dpy,attr.colormap,&black); XSetForeground(dpy,gc,black.pixel); XFillRectangle(dpy,double_buffer,gc,0,0,wa.width,wa.height); d=double_buffer; uk_log("Created pixmap = %x",double_buffer); XGetWindowAttributes(dpy,win,&wa); load_font(); uk_log("window = %x root = %x",win,root); _set_on_top(dpy,win); _set_sticky(dpy,win); _set_alpha(dpy,win,conf_get_float("alpha",ALPHA)); XMapWindow(dpy,win); XMoveWindow(dpy,win,x,y); // Try to make borderless _make_borderless(dpy,win); // Bind to what stuff? unsigned long eventmask; eventmask=StructureNotifyMask|SubstructureNotifyMask; uk_log("event mask = x%x",eventmask); XSelectInput(dpy,root,eventmask); XFlush(dpy); kbio.start=kbio.stop=kbio.n=0; _setupkeymap(); grabkeys(); // grabkeyboard(); }
int main(int argc, char *argv[]) { int i, j; unsigned int mask; Window w; XEvent ev; XModifierKeymap *modmap; XSetWindowAttributes wa; if(argc == 2 && !strncmp("-v", argv[1], 3)) eprint("cswm-"VERSION", Copyright 2006 Anselm R. Garbe, 2012 Christopher L. Simons\n"); else if(argc != 1) eprint("usage: cswm [-v]\n"); setlocale(LC_CTYPE, ""); dpy = XOpenDisplay(0); if(!dpy) eprint("cswm: cannot open display\n"); screen = DefaultScreen(dpy); root = RootWindow(dpy, screen); otherwm = False; XSetErrorHandler(xerrorstart); /* this causes an error if some other window manager is running */ XSelectInput(dpy, root, SubstructureRedirectMask); XSync(dpy, False); if(otherwm) eprint("cswm: another window manager is already running\n"); XSync(dpy, False); XSetErrorHandler(NULL); xerrorxlib = XSetErrorHandler(xerror); XSync(dpy, False); /* init atoms */ wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, PropModeReplace, (unsigned char *) netatom, NetLast); /* init cursors */ cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); /* init modifier map */ numlockmask = 0; modmap = XGetModifierMapping(dpy); for (i = 0; i < 8; i++) { for (j = 0; j < modmap->max_keypermod; j++) { if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) numlockmask = (1 << i); } } XFreeModifiermap(modmap); /* select for events */ wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask; wa.cursor = cursor[CurNormal]; XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); grabkeys(); /* style */ normcol = getcolor(NORMCOLOR); selcol = getcolor(SELCOLOR); /* geometry */ sx = 0; sy = SY; sw = DisplayWidth(dpy, screen); sh = SH; master = MASTER; nmaster = NMASTER; /* multihead support */ selscreen = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); scan(); runAutostart(); /* main event loop, also reads status text from stdin */ XSync(dpy, False); while(running) { XNextEvent(dpy, &ev); if(handler[ev.type]) (handler[ev.type])(&ev); /* call handler */ } cleanup(); XCloseDisplay(dpy); return 0; }