static int rmb(void) { static Menu menu = {nil, menugen}; int n; Win *w; File *f; if(actw != nil && actw->tab->rmb != nil && actw->tab->rmb(actw, mc) >= 0) return 0; n = menuhit(3, mc, &menu, nil); if(n < 0) return 0; switch(n){ case ZEROX: w = winsel(mc, 3); if(w != nil) winzerox(w, mc); return 0; case CLOSE: w = winsel(mc, 3); if(w != nil) winclose(w); return 0; case RESIZE: winresize(winsel(mc, 3), mc); return 0; case WRITE: w = winsel(mc, 3); if(w != nil) winwrite(w, nil); return 0; case QUIT: return quit(); } if(n < WIN) sysfatal("rmb: no action for n=%d", n); if(n == 0){ setfocus(cmdw); return 0; } n -= WIN; for(f = flist.next; f != &flist; f = f->next) if(--n == 0){ if(f->wins.wnext == &f->wins){ newwinsel(f->type, mc, f); return 0; } for(w = f->wins.wnext; w != &f->wins && w != actw; w = w->wnext) ; if(w->wnext == &f->wins) w = w->wnext; setfocus(w->wnext); return 0; } return 0; }
Win * newwin(int t, Rectangle r, File *f) { Win *w; w = emalloc(sizeof(*w)); w->next = &wlist; w->prev = wlist.prev; w->next->prev = w; w->prev->next = w; w->type = t; w->tab = tabs[t]; w->entire = r; w->inner = insetrect(r, BORDSIZ); w->im = allocwindow(scr, r, Refbackup, 0); draw(w->im, w->inner, w->tab->cols[BACK], nil, ZP); if(f != nil){ incref(f); w->wprev = f->wins.wprev; w->wnext = &f->wins; f->wins.wprev->wnext = w; f->wins.wprev = w; w->f = f; } w->tab->init(w); setfocus(w); w->tab->draw(w); return w; }
void rmclient(Client *c) { Client *cc; if (c == clients) clients = c->next; else if((cc = clients)) for (; cc->next; cc = cc->next) if (cc->next == c) { cc->next = cc->next->next; break; } if(c->active) { if(!menuactive) setfocus(None); c->active=False; activeclient = NULL; XInstallColormap(dpy, scr->cmap); } else if(prefs.focus==FOC_CLICKTOTYPE) XUngrabButton(dpy, Button1, AnyModifier, c->parent); #ifdef USE_FONTSETS if(c->title) free(c->title); #else if(c->title.value) XFree(c->title.value); #endif if(c->parent != c->scr->root) { XDestroyWindow(dpy, c->parent); XDeleteContext(dpy, c->parent, client_context); } if(c->close) XDeleteContext(dpy, c->close, client_context); if(c->drag) XDeleteContext(dpy, c->drag, client_context); if(c->iconify) XDeleteContext(dpy, c->iconify, client_context); if(c->zoom) XDeleteContext(dpy, c->zoom, client_context); if(c->depth) XDeleteContext(dpy, c->depth, client_context); if(c->resize) XDeleteContext(dpy, c->resize, client_context); if(c->icon) rmicon(c->icon); if(c->window) XDeleteContext(dpy, c->window, client_context); free(c); }
void winclick(Mousectl *mc) { Win *w; w = winpoint(mc->xy); if(w != nil){ if(w != actw) setfocus(w); w->tab->click(w, mc); } while((mc->buttons & 1) != 0) readmouse(mc); }
void WindowTestCase::FocusEvent() { #ifndef __WXOSX__ EventCounter setfocus(m_window, wxEVT_SET_FOCUS); EventCounter killfocus(m_window, wxEVT_KILL_FOCUS); m_window->SetFocus(); CPPUNIT_ASSERT_EQUAL(1, setfocus.GetCount()); CPPUNIT_ASSERT(m_window->HasFocus()); wxButton* button = new wxButton(wxTheApp->GetTopWindow(), wxID_ANY); button->SetFocus(); CPPUNIT_ASSERT_EQUAL(1, killfocus.GetCount()); CPPUNIT_ASSERT(!m_window->HasFocus()); #endif }
bool draw::dodialog(int id) { auto temp_execute = current_execute; current_execute = 0; if(temp_execute) { temp_execute(); return true; } switch(id) { case KeyTab: case KeyTab | Shift: case KeyTab | Ctrl: case KeyTab | Ctrl | Shift: id = getnext(getfocus(), id); if(id) setfocus(id, true); return true; } return false; }
void winresize(Win *w, Mousectl *mc) { Rectangle r; if(w == nil) return; r = getrect(3, mc); if(Dx(r) < MINSIZ || Dy(r) < MINSIZ) return; rectclip(&r, screen->r); freeimage(w->im); w->entire = r; w->inner = insetrect(r, BORDSIZ); w->im = allocwindow(scr, r, Refbackup, 0); draw(w->im, w->inner, w->tab->cols[BACK], nil, ZP); setfocus(w); w->tab->draw(w); }
static void init_traps(void) { char buf[1]; int fd[2]; if(pipe(fd) != 0) fatal("Can't pipe(): %r"); if(doublefork() == 0) { close(fd[1]); close(ConnectionNumber(display)); setsid(); display = XOpenDisplay(nil); if(!display) fatal("Can't open display"); /* Wait for parent to exit */ read(fd[0], buf, 1); setfocus(pointerwin, RevertToPointerRoot); XCloseDisplay(display); exit(0); } close(fd[0]); sleeperfd = fd[1]; sa.sa_flags = 0; sa.sa_handler = cleanup_handler; sigaction(SIGINT, &sa, nil); sigaction(SIGTERM, &sa, nil); sigaction(SIGQUIT, &sa, nil); sigaction(SIGHUP, &sa, nil); sigaction(SIGUSR1, &sa, nil); sigaction(SIGUSR2, &sa, nil); }
int main(int argc, char *argv[]) { IxpMsg m; char **oargv; char *wmiirc, *s; int i; quotefmtinstall(); fmtinstall('r', errfmt); fmtinstall('a', afmt); fmtinstall('C', Cfmt); extern int fmtevent(Fmt*); fmtinstall('E', fmtevent); wmiirc = "wmiirc"; oargv = argv; ARGBEGIN{ case 'a': address = EARGF(usage()); break; case 'r': wmiirc = EARGF(usage()); break; case 'v': print("%s", version); exit(0); case 'D': s = EARGF(usage()); m = ixp_message(s, strlen(s), 0); msg_debug(&m); break; default: usage(); break; }ARGEND; if(argc) usage(); setlocale(LC_CTYPE, ""); starting = true; initdisplay(); traperrors(true); selectinput(&scr.root, EnterWindowMask | SubstructureRedirectMask); if(traperrors(false)) fatal("another window manager is already running"); passwd = getpwuid(getuid()); user = estrdup(passwd->pw_name); init_environment(); fmtinstall('F', Ffmt); ixp_printfcall = printfcall; sock = ixp_announce(address); if(sock < 0) fatal("Can't create socket '%s': %r", address); closeexec(ConnectionNumber(display)); closeexec(sock); if(wmiirc[0]) spawn_command(wmiirc); init_traps(); init_cursors(); init_lock_keys(); ewmh_init(); xext_init(); srv.preselect = check_preselect; ixp_listen(&srv, sock, &p9srv, serve_9pcon, nil); ixp_listen(&srv, ConnectionNumber(display), nil, check_x_event, closedisplay); def.border = 1; def.colmode = Colstack; def.font = loadfont(FONT); def.incmode = ISqueeze; def.mod = Mod1Mask; strcpy(def.grabmod, "Mod1"); loadcolor(&def.focuscolor, FOCUSCOLORS); loadcolor(&def.normcolor, NORMCOLORS); disp.sel = pointerscreen(); init_screens(); root_init(); disp.focus = nil; setfocus(screen->barwin, RevertToParent); view_select("1"); scan_wins(); starting = false; view_update_all(); ewmh_updateviews(); event("FocusTag %s\n", selview->name); i = ixp_serverloop(&srv); if(i) fprint(2, "%s: error: %r\n", argv0); else event("Quit"); cleanup(); if(exitsignal) raise(exitsignal); if(execstr) { char *toks[32]; int n; n = unquote(strdup(execstr), toks, nelem(toks)-1); toks[n] = nil; execvp(toks[0], toks); fprint(2, "%s: failed to exec %q: %r\n", argv0, execstr); execvp(argv0, oargv); fatal("failed to exec myself"); } return i; }
int main(int argc, char *argv[]) { char *wmiirc; WMScreen *s; WinAttr wa; int i; fmtinstall('r', errfmt); fmtinstall('C', Cfmt); wmiirc = "wmiistartrc"; ARGBEGIN{ case 'v': print("%s", version); exit(0); case 'V': verbose = True; break; case 'a': address = EARGF(usage()); break; case 'r': wmiirc = EARGF(usage()); break; default: usage(); break; }ARGEND; if(argc) usage(); setlocale(LC_CTYPE, ""); starting = True; initdisplay(); xlib_errorhandler = XSetErrorHandler(errorhandler); check_other_wm = True; XSelectInput(display, scr.root.w, SubstructureRedirectMask | EnterWindowMask); XSync(display, False); check_other_wm = False; passwd = getpwuid(getuid()); user = estrdup(passwd->pw_name); init_environment(); sock = ixp_announce(address); if(sock < 0) fatal("Can't create socket '%s': %r", address); if(wmiirc) spawn_command(wmiirc); init_traps(); init_atoms(); init_cursors(); init_lock_keys(); srv.preselect = check_preselect; ixp_listen(&srv, sock, &p9srv, serve_9pcon, nil); ixp_listen(&srv, ConnectionNumber(display), nil, check_x_event, closedisplay); def.font = loadfont(FONT); def.border = 1; def.colmode = Coldefault; def.mod = Mod1Mask; strcpy(def.grabmod, "Mod1"); loadcolor(&def.focuscolor, FOCUSCOLORS); loadcolor(&def.normcolor, NORMCOLORS); num_screens = 1; screens = emallocz(num_screens * sizeof(*screens)); screen = &screens[0]; for(i = 0; i < num_screens; i++) { s = &screens[i]; init_screen(s); s->ibuf = allocimage(Dx(s->r), Dy(s->r), scr.depth); wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask | FocusChangeMask; wa.cursor = cursor[CurNormal]; setwinattr(&scr.root, &wa, CWEventMask | CWCursor); initbar(s); } screen->focus = nil; setfocus(screen->barwin, RevertToParent); scan_wins(); starting = False; select_view("nil"); update_views(); write_event("FocusTag %s\n", screen->sel->name); check_x_event(nil); i = ixp_serverloop(&srv); if(i) fprint(2, "%s: error: %r\n", argv0); cleanup(); if(exitsignal) raise(exitsignal); if(execstr) execl("/bin/sh", "sh", "-c", execstr, nil); return i; }