static int _MagwinUpdate(MagWindow * mw) { if (mw != MagWin) return 0; /* Validate ewin */ if (!EwinFindByPtr(mw->ewin)) return 0; /* When switching CM off do a delayed repaint. This will catch up on * at least some clients having processed expose events. */ if (Mode.events.damage_count == 0 && mw->damage_count != 0) mw->update_trig = 10; if (mw->update_trig && --mw->update_trig == 0) mw->update = 1; if (!(mw->update || (Mode.events.damage_count == 0 && mw->update_always) || (Mode.events.damage_count != mw->damage_count))) return 1; mw->damage_count = Mode.events.damage_count; /* FIXME - Check damage */ MagwinRedraw(mw, 1); mw->update = 0; return 1; }
static int AutoraiseTimeout(void *data) { EWin *ewin = (EWin *) data; if (Conf.focus.mode == MODE_FOCUS_CLICK) goto done; if (EwinFindByPtr(ewin)) /* May be gone */ EwinRaise(ewin); done: focus_timer_autoraise = NULL; return 0; }
static void WarpFocusWinPaint(WarpFocusWin * fw) { int i, state, iw; WarplistItem *wi; EImageBorder *pad; pad = ImageclassGetPadding(fw->ic); for (i = 0; i < warplist_num; i++) { wi = warplist + i; if (!EwinFindByPtr(wi->ewin)) wi->ewin = NULL; if (!wi->ewin) continue; state = (i == warpFocusIndex) ? STATE_CLICKED : STATE_NORMAL; ImageclassApply(fw->ic, wi->win, 0, 0, state, ST_WARPLIST); iw = 0; if (Conf.warplist.icon_mode != 0) { int icon_size = fw->mh - 2 * ICON_PAD; EImage *im; im = EwinIconImageGet(wi->ewin, icon_size, Conf.warplist.icon_mode); if (im) { EImageRenderOnDrawable(im, wi->win, None, EIMAGE_BLEND | EIMAGE_ANTI_ALIAS, pad->left + ICON_PAD, ICON_PAD, icon_size, icon_size); EImageFree(im); } iw = fw->mh; } TextDraw(fw->tc, wi->win, None, 0, 0, state, wi->txt, pad->left + iw, pad->top, fw->tw, fw->th, 0, 0); } /* FIXME - Check shape */ EoShapeUpdate(fw, 1); }
static void WarpFocusFinish(void) { EWin *ewin; ewin = warplist[warpFocusIndex].ewin; WarpShapeDraw(NULL); WarpFocusHide(); if (!EwinFindByPtr(ewin)) return; EwinOpActivate(ewin, OPSRC_USER, Conf.warplist.raise_on_select); if (Conf.warplist.warp_on_select) EwinWarpTo(ewin, 0); }
static void FocusRaisePending(void) { EWin *ewin = focus_pending_raise; unsigned int mask; /* The focusing cycle ends when no more modifiers are depressed */ mask = 0; EQueryPointer(NULL, NULL, NULL, NULL, &mask); if ((mask & Mode.masks.mod_key_mask) != 0) return; if (EwinFindByPtr(ewin)) /* May be gone */ EwinListFocusRaise(ewin); GrabKeyboardRelease(); focus_pending_raise = NULL; }
static void WarpFocusClick(int ix) { EWin *ewin; if (!warplist) return; if (ix < 0 || ix >= warplist_num) return; if (ix == warpFocusIndex) return; warpFocusIndex = ix; WarpFocusShow(); ewin = warplist[ix].ewin; if (!EwinFindByPtr(ewin)) return; if (Conf.focus.raise_on_next) EwinRaise(ewin); FocusToEWin(ewin, FOCUS_SET); }
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); }