/* * Return !0 if it is OK to focus ewin. */ static int FocusEwinValid(EWin * ewin, int want_on_screen, int click, int want_visible) { if (!ewin) return 0; #if 0 Eprintf("%s: %#x %s: st=%d sh=%d inh=%d cl=%d(%d) vis=%d(%d)\n", __func__, EwinGetClientXwin(ewin), EwinGetTitle(ewin), ewin->state.state, EoIsShown(ewin), ewin->state.inhibit_focus, click, ewin->props.focusclick, want_visible, ewin->state.visibility); #endif if (ewin->state.inhibit_focus) return 0; if (!EoIsMapped(ewin) || !EoIsShown(ewin) || ewin->state.state != EWIN_STATE_MAPPED) return 0; if (ewin->props.focusclick && !click) return 0; if (want_visible && ewin->state.visibility == VisibilityFullyObscured) return 0; return !want_on_screen || EwinIsOnScreen(ewin); }
static void MagwinIpc(const char *params) { const char *p; char cmd[128], prm[4096]; int len, show; cmd[0] = prm[0] = '\0'; p = params; if (p) { len = 0; sscanf(p, "%100s %4000s %n", cmd, prm, &len); p += len; } show = MagWin && EoIsShown(MagWin->ewin); if (!p) { show = !show; } else if (!strcmp(cmd, "show")) { show = 1; } else if (!strcmp(cmd, "hide")) { show = 0; } if (show) MagwinShow(); else MagwinHide(); }
static void WarpFocusHide(void) { WarpFocusWin *fw = warpFocusWindow; if (fw && EoIsShown(fw)) WarpFocusWinHide(fw); Efree(warplist); warplist = NULL; warplist_num = 0; }
static void IconboxesEwinIconify(EWin * ewin) { Container *ct; ct = SelectIconboxForEwin(ewin); if (!ct) return; SoundPlay(SOUND_ICONIFY); if (EoIsShown(ewin) && ct->anim_mode && !ewin->state.showingdesk) IB_Animate(ct, 1, ewin); IconboxObjEwinAdd(ct, ewin); }
static void WarpFocusShow(void) { WarpFocusWin *fw = warpFocusWindow; if (!warplist) return; if (!fw) { warpFocusWindow = fw = WarpFocusWinCreate(); if (!fw) return; } if (!EoIsShown(fw)) WarpFocusWinShow(fw); WarpFocusWinPaint(fw); }
void WarpFocus(int delta) { WarpFocusWin *fw = warpFocusWindow; EWin *const *lst; EWin *ewin; int i, num; WarplistItem *wl; /* Remember invoking keycode (ugly hack) */ if (!fw || !EoIsShown(fw)) { warpFocusKey = Mode.events.last_keycode; warpFocusState = Mode.events.last_keystate; } if (!warplist) { warplist_num = 0; /* Not necessary but silences clang */ lst = EwinListFocusGet(&num); for (i = 0; i < num; i++) { ewin = lst[i]; if ( /* Either visible or iconified */ ((EwinIsOnScreen(ewin)) || (ewin->state.iconified) || (Conf.warplist.showalldesks)) && /* Exclude windows that explicitely say so */ (!ewin->props.skip_focuslist) && (!ewin->props.skip_ext_task) && /* Keep shaded windows if conf say so */ ((!ewin->state.shaded) || (Conf.warplist.showshaded)) && /* Keep sticky windows if conf say so */ ((!EoIsSticky(ewin)) || (Conf.warplist.showsticky)) && /* Keep iconified windows if conf say so */ ((!ewin->state.iconified) || (Conf.warplist.showiconified))) { warplist_num++; warplist = EREALLOC(WarplistItem, warplist, warplist_num); wl = warplist + warplist_num - 1; wl->ewin = ewin; } } /* Hmmm. Hack... */ if (warplist_num >= 2 && warplist[1].ewin == GetFocusEwin()) { warplist[1].ewin = warplist[0].ewin; warplist[0].ewin = GetFocusEwin(); } warpFocusIndex = 0; } if (!warplist) return; warpFocusIndex = (warpFocusIndex + warplist_num + delta) % warplist_num; ewin = warplist[warpFocusIndex].ewin; if (!EwinFindByPtr(ewin)) ewin = NULL; if (!ewin) return; WarpFocusShow(); if (!EwinIsOnScreen(ewin)) return; if (Conf.warplist.show_shape) WarpShapeDraw(ewin); if (Conf.focus.raise_on_next) EwinRaise(ewin); if (Conf.focus.warp_on_next) EwinWarpTo(ewin, 0); if (Conf.warplist.warpfocused) FocusToEWin(ewin, FOCUS_SET); }