static void scaleaddonCheckWindowHighlight (CompScreen *s) { CompDisplay *d = s->display; ADDON_DISPLAY (d); if (ad->highlightedWindow != ad->lastHighlightedWindow) { CompWindow *w; w = findWindowAtDisplay (d, ad->highlightedWindow); if (w) { scaleaddonRenderWindowTitle (w); addWindowDamage (w); } w = findWindowAtDisplay (d, ad->lastHighlightedWindow); if (w) { scaleaddonRenderWindowTitle (w); addWindowDamage (w); } ad->lastHighlightedWindow = ad->highlightedWindow; } }
static void scaleaddonDonePaintScreen(CompScreen * s) { ADDON_SCREEN(s); SCALE_SCREEN(s); if (ss->state != SCALE_STATE_NONE && as->lastState == SCALE_STATE_NONE) { CompWindow *w; for (w = s->windows; w; w = w->next) scaleaddonRenderWindowTitle(w); } else if (ss->state == SCALE_STATE_NONE && as->lastState != SCALE_STATE_NONE) { CompWindow *w; for (w = s->windows; w; w = w->next) scaleaddonFreeWindowTitle(w); } if (ss->state == SCALE_STATE_OUT && as->lastState != SCALE_STATE_OUT) { ADDON_DISPLAY(s->display); ad->lastHighlightedWindow = None; scaleaddonCheckWindowHighlight(s); } as->lastState = ss->state; UNWRAP(as, s, donePaintScreen); (*s->donePaintScreen) (s); WRAP(as, s, donePaintScreen, scaleaddonDonePaintScreen); }
static void scaleaddonScreenOptionChanged(CompScreen * s, CompOption * opt, ScaleaddonScreenOptions num) { switch (num) { case ScaleaddonScreenOptionWindowTitle: case ScaleaddonScreenOptionTitleBold: case ScaleaddonScreenOptionTitleSize: case ScaleaddonScreenOptionBorderSize: case ScaleaddonScreenOptionFontColor: case ScaleaddonScreenOptionBackColor: { CompWindow *w; for (w = s->windows; w; w = w->next) { ADDON_WINDOW(w); if (aw->textData) scaleaddonRenderWindowTitle(w); } } break; default: break; } }
static void scaleaddonHandleEvent (CompDisplay *d, XEvent *event) { ADDON_DISPLAY (d); UNWRAP (ad, d, handleEvent); (*d->handleEvent) (d, event); WRAP (ad, d, handleEvent, scaleaddonHandleEvent); switch (event->type) { case PropertyNotify: { if (event->xproperty.atom == XA_WM_NAME) { CompWindow *w; w = findWindowAtDisplay (d, event->xproperty.window); if (w) { SCALE_SCREEN (w->screen); if (ss->grabIndex) { scaleaddonRenderWindowTitle (w); addWindowDamage (w); } } } } break; case MotionNotify: { CompScreen *s; s = findScreenAtDisplay (d, event->xmotion.root); if (s) { SCALE_SCREEN (s); if (ss->grabIndex) { SCALE_DISPLAY (d); ad->highlightedWindow = sd->hoveredWindow; scaleaddonCheckWindowHighlight (s); } } } break; default: break; } }
static Bool scaleaddonZoomWindow(CompDisplay * d, CompAction * action, CompActionState state, CompOption * option, int nOption) { CompScreen *s; Window xid; xid = getIntOptionNamed(option, nOption, "root", 0); s = findScreenAtDisplay(d, xid); if (s) { CompWindow *w; SCALE_SCREEN(s); ADDON_DISPLAY(d); if (!ss->grabIndex) return FALSE; w = findWindowAtDisplay(d, ad->highlightedWindow); if (w) { SCALE_WINDOW(w); ADDON_WINDOW(w); XRectangle outputRect; BOX outputBox; int head; if (!sw->slot) return FALSE; head = outputDeviceForPoint(s, sw->slot->x1, sw->slot->y1); outputBox = w->screen->outputDev[head].region.extents; outputRect.x = outputBox.x1; outputRect.y = outputBox.y1; outputRect.width = outputBox.x2 - outputBox.x1; outputRect.height = outputBox.y2 - outputBox.y1; /* damage old rect */ addWindowDamage(w); if (!aw->rescaled) { aw->oldAbove = w->next; raiseWindow(w); /* backup old values */ aw->origSlot = *sw->slot; aw->rescaled = TRUE; sw->slot->x1 = (outputRect.width / 2) - (WIN_W(w) / 2) + w->input.left + outputRect.x; sw->slot->y1 = (outputRect.height / 2) - (WIN_H(w) / 2) + w->input.top + outputRect.y; sw->slot->x2 = sw->slot->x1 + WIN_W(w); sw->slot->y2 = sw->slot->y1 + WIN_H(w); sw->slot->scale = 1.0f; } else { if (aw->oldAbove) restackWindowBelow(w, aw->oldAbove); aw->rescaled = FALSE; *(sw->slot) = aw->origSlot; } sw->adjust = TRUE; ss->state = SCALE_STATE_OUT; /* slot size may have changed, so * update window title */ scaleaddonRenderWindowTitle(w); addWindowDamage(w); return TRUE; } } return FALSE; }