void EExit(int exitcode) { int i; if (EDebug(EDBUG_TYPE_SESSION)) Eprintf("%s: %d\n", __func__, exitcode); if (disp) { EUngrabServer(); GrabPointerRelease(); XAllowEvents(disp, AsyncBoth, CurrentTime); /* XSetInputFocus(disp, NoXID, RevertToParent, CurrentTime); */ /* I think this is a better way to release the grabs: (felix) */ XSetInputFocus(disp, PointerRoot, RevertToPointerRoot, CurrentTime); ESelectInput(VROOT, 0); EDisplayClose(); } if (Mode.wm.master) { for (i = 0; i < Mode.wm.child_count; i++) kill(Mode.wm.children[i], SIGINT); } else { exitcode = 0; } exit(exitcode); }
static Window ExtInitWinMain(void) { int i, loop, err; Ecore_X_Window win; XGCValues gcv; GC gc; Pixmap pmap; Atom a; EiwData eiwd; EiwLoopFunc *eiwc_loop_func; if (EDebug(EDBUG_TYPE_SESSION)) Eprintf("ExtInitWinMain enter\n"); err = EDisplayOpen(NULL, -1); if (err) return None; EGrabServer(); EImageInit(); eiwd.attr.backing_store = NotUseful; eiwd.attr.override_redirect = True; eiwd.attr.colormap = WinGetCmap(VROOT); eiwd.attr.border_pixel = 0; eiwd.attr.background_pixel = 0; eiwd.attr.save_under = True; win = XCreateWindow(disp, WinGetXwin(VROOT), 0, 0, WinGetW(VROOT), WinGetH(VROOT), 0, CopyFromParent, InputOutput, CopyFromParent, CWOverrideRedirect | CWSaveUnder | CWBackingStore | CWColormap | CWBackPixel | CWBorderPixel, &eiwd.attr); pmap = XCreatePixmap(disp, win, WinGetW(VROOT), WinGetH(VROOT), WinGetDepth(VROOT)); gcv.subwindow_mode = IncludeInferiors; gc = XCreateGC(disp, win, GCSubwindowMode, &gcv); XCopyArea(disp, WinGetXwin(VROOT), pmap, gc, 0, 0, WinGetW(VROOT), WinGetH(VROOT), 0, 0); XSetWindowBackgroundPixmap(disp, win, pmap); XMapRaised(disp, win); XFreePixmap(disp, pmap); XFreeGC(disp, gc); a = EInternAtom("ENLIGHTENMENT_RESTART_SCREEN"); ecore_x_window_prop_window_set(WinGetXwin(VROOT), a, &win, 1); XSelectInput(disp, win, StructureNotifyMask); EUngrabServer(); ESync(0); #if USE_EIWC_WINDOW && USE_EIWC_RENDER eiwc_loop_func = _eiw_render_init(win, &eiwd); if (!eiwc_loop_func) eiwc_loop_func = _eiw_window_init(win, &eiwd); #elif USE_EIWC_RENDER eiwc_loop_func = _eiw_render_init(win, &eiwd); #elif USE_EIWC_WINDOW eiwc_loop_func = _eiw_window_init(win, &eiwd); #endif if (!eiwc_loop_func) return None; { XWindowAttributes xwa; char s[1024]; EImage *im; for (i = loop = 1;; i++, loop++) { if (i > 12) i = 1; /* If we get unmapped we are done */ XGetWindowAttributes(disp, win, &xwa); if (xwa.map_state == IsUnmapped) break; Esnprintf(s, sizeof(s), "pix/wait%i.png", i); if (EDebug(EDBUG_TYPE_SESSION) > 1) Eprintf("ExtInitWinCreate - child %s\n", s); im = ThemeImageLoad(s); if (im) { eiwc_loop_func(win, im, &eiwd); EImageFree(im); } ESync(0); usleep(50000); /* If we still are here after 5 sec something is wrong. */ if (loop > 100) break; } } if (EDebug(EDBUG_TYPE_SESSION)) Eprintf("ExtInitWinMain exit\n"); EDisplayClose(); exit(0); }