void netwm_init_rootwin(WRootWin *rw) { Atom atoms[N_NETWM]; const char *p[1]; atoms[0]=atom_net_wm_name; atoms[1]=atom_net_wm_state; atoms[2]=atom_net_wm_state_fullscreen; atoms[3]=atom_net_wm_state_demands_attention; atoms[4]=atom_net_supporting_wm_check; atoms[5]=atom_net_virtual_roots; atoms[6]=atom_net_active_window; atoms[7]=atom_net_wm_allowed_actions; atoms[8]=atom_net_wm_moveresize; XChangeProperty(ioncore_g.dpy, WROOTWIN_ROOT(rw), atom_net_supporting_wm_check, XA_WINDOW, 32, PropModeReplace, (uchar*)&(rw->dummy_win), 1); XChangeProperty(ioncore_g.dpy, rw->dummy_win, atom_net_supporting_wm_check, XA_WINDOW, 32, PropModeReplace, (uchar*)&(rw->dummy_win), 1); XChangeProperty(ioncore_g.dpy, WROOTWIN_ROOT(rw), atom_net_supported, XA_ATOM, 32, PropModeReplace, (uchar*)atoms, N_NETWM); p[0]=libtu_progbasename(); /** * Unfortunately we cannot determine the charset of libtu_progbasename() * so we'll just have to guess it makes sense in the current locale charset */ xwindow_set_utf8_property(rw->dummy_win, atom_net_wm_name, p, 1); }
static void scan_initial_windows(WRootWin *rootwin) { Window dummy_root, dummy_parent, *wins=NULL; uint nwins=0, i, j; XWMHints *hints; XQueryTree(ioncore_g.dpy, WROOTWIN_ROOT(rootwin), &dummy_root, &dummy_parent, &wins, &nwins); for(i=0; i<nwins; i++){ if(wins[i]==None) continue; hints=XGetWMHints(ioncore_g.dpy, wins[i]); if(hints!=NULL && hints->flags&IconWindowHint){ for(j=0; j<nwins; j++){ if(wins[j]==hints->icon_window){ wins[j]=None; break; } } } if(hints!=NULL) XFree((void*)hints); } rootwin->tmpwins=wins; rootwin->tmpnwins=nwins; }
static void create_wm_windows(WRootWin *rootwin) { rootwin->dummy_win=XCreateWindow(ioncore_g.dpy, WROOTWIN_ROOT(rootwin), 0, 0, 1, 1, 0, CopyFromParent, InputOnly, CopyFromParent, 0, NULL); XSelectInput(ioncore_g.dpy, rootwin->dummy_win, PropertyChangeMask); }
void netwm_init_rootwin(WRootWin *rw) { Atom atoms[N_NETWM]; const char *p[1]; atoms[0]=atom_net_wm_name; atoms[1]=atom_net_wm_state; atoms[2]=atom_net_wm_state_fullscreen; atoms[3]=atom_net_supporting_wm_check; atoms[4]=atom_net_virtual_roots; atoms[5]=atom_net_active_window; XChangeProperty(ioncore_g.dpy, WROOTWIN_ROOT(rw), atom_net_supporting_wm_check, XA_WINDOW, 32, PropModeReplace, (uchar*)&(rw->dummy_win), 1); XChangeProperty(ioncore_g.dpy, WROOTWIN_ROOT(rw), atom_net_supported, XA_ATOM, 32, PropModeReplace, (uchar*)atoms, N_NETWM); p[0]=libtu_progbasename(); xwindow_set_text_property(rw->dummy_win, atom_net_wm_name, p, 1); }
static void create_wm_windows(WRootWin *rootwin) { const char *p[1]; rootwin->dummy_win=XCreateWindow(ioncore_g.dpy, WROOTWIN_ROOT(rootwin), 0, 0, 1, 1, 0, CopyFromParent, InputOnly, CopyFromParent, 0, NULL); p[0] = "WRootWin"; xwindow_set_text_property(rootwin->dummy_win, XA_WM_NAME, p, 1); XSelectInput(ioncore_g.dpy, rootwin->dummy_win, PropertyChangeMask); }
void rootwin_deinit(WRootWin *rw) { WScreen *scr, *next; FOR_ALL_SCREENS_W_NEXT(scr, next){ if(REGION_MANAGER(scr)==(WRegion*)rw) destroy_obj((Obj*)scr); } UNLINK_ITEM(*(WRegion**)&ioncore_g.rootwins, (WRegion*)rw, p_next, p_prev); XSelectInput(ioncore_g.dpy, WROOTWIN_ROOT(rw), 0); XFreeGC(ioncore_g.dpy, rw->xor_gc); window_deinit((WWindow*)rw); }
static void draw_rubberbox(WRootWin *rw, const WRectangle *rect) { XPoint fpts[5]; fpts[0].x=rect->x; fpts[0].y=rect->y; fpts[1].x=rect->x+rect->w; fpts[1].y=rect->y; fpts[2].x=rect->x+rect->w; fpts[2].y=rect->y+rect->h; fpts[3].x=rect->x; fpts[3].y=rect->y+rect->h; fpts[4].x=rect->x; fpts[4].y=rect->y; XDrawLines(ioncore_g.dpy, WROOTWIN_ROOT(rw), rw->xor_gc, fpts, 5, CoordModeOrigin); }
static void preinit_gr(WRootWin *rootwin) { XGCValues gcv; ulong gcvmask; /* Create XOR gc (for resize) */ gcv.line_style=LineSolid; gcv.join_style=JoinBevel; gcv.cap_style=CapButt; gcv.fill_style=FillSolid; gcv.line_width=2; gcv.subwindow_mode=IncludeInferiors; gcv.function=GXxor; gcv.foreground=~0L; gcvmask=(GCLineStyle|GCLineWidth|GCFillStyle| GCJoinStyle|GCCapStyle|GCFunction| GCSubwindowMode|GCForeground); rootwin->xor_gc=XCreateGC(ioncore_g.dpy, WROOTWIN_ROOT(rootwin), gcvmask, &gcv); }
/*EXTL_DOC * refresh \_NET\_WM\_VIRTUAL\_ROOTS */ EXTL_SAFE EXTL_EXPORT void ioncore_screens_updated(WRootWin *rw) { int current_screen = 0; int n_screens; long *virtualroots; WScreen *scr; n_screens = count_screens(); virtualroots = (long*)malloc(n_screens * sizeof(long)); FOR_ALL_SCREENS(scr){ virtualroots[current_screen] = region_xwindow((WRegion *)scr); current_screen++; } XChangeProperty(ioncore_g.dpy, WROOTWIN_ROOT(rw), atom_net_virtual_roots, XA_WINDOW, 32, PropModeReplace, (uchar*)virtualroots, n_screens); free(virtualroots); }