static void virgo_update(Virgo *v) { unsigned i, e; Windows *desk; HWND hwnd; for (i=0; i<NUM_DESKTOPS; i++) { desk = &(v->desktops[i]); for (e=0; e<desk->count; e++) { hwnd = desk->windows[e]; if (!GetWindowThreadProcessId(desk->windows[e], NULL)) { windows_del(desk, hwnd); } } } desk = &v->desktops[v->current]; for (i=0; i<desk->count; i++) { hwnd = desk->windows[i]; if (!IsWindowVisible(hwnd)) { windows_del(desk, hwnd); } } EnumWindows((WNDENUMPROC)&enum_func, (LPARAM)v); }
static void virgo_move_to_desk(Virgo *v, int desk) { HWND hwnd; if(v->current == desk) { return; } virgo_update(v); hwnd = GetForegroundWindow(); if(!hwnd || !is_valid_window(hwnd)) { return; } windows_del(&v->desktops[v->current], hwnd); windows_add(&v->desktops[desk], hwnd); ShowWindow(hwnd, SW_HIDE); }