Ejemplo n.º 1
0
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
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;
    }
}
Ejemplo n.º 3
0
static void scaleaddonSelectWindow(CompWindow * w)
{
	CompScreen *s = w->screen;

	ADDON_DISPLAY(s->display);
	ADDON_SCREEN(s);
	SCALE_SCREEN(s);

	ad->highlightedWindow = w->id;

	scaleaddonCheckWindowHighlight(s);

	UNWRAP(as, ss, selectWindow);
	(*ss->selectWindow) (w);
	WRAP(as, ss, selectWindow, scaleaddonSelectWindow);
}
Ejemplo n.º 4
0
static void
scaleaddonHandleCompizEvent(CompDisplay * d,
			    const char *pluginName,
			    const char *eventName,
			    CompOption * option, int nOption)
{
	ADDON_DISPLAY(d);

	UNWRAP(ad, d, handleCompizEvent);
	(*d->handleCompizEvent) (d, pluginName, eventName, option, nOption);
	WRAP(ad, d, handleCompizEvent, scaleaddonHandleCompizEvent);

	if ((strcmp(pluginName, "scale") == 0) &&
	    (strcmp(eventName, "activate") == 0)) {
		Window xid;
		Bool activated;
		CompScreen *s;

		xid = getIntOptionNamed(option, nOption, "root", 0);
		activated =
		    getBoolOptionNamed(option, nOption, "active", FALSE);
		s = findScreenAtDisplay(d, xid);

		if (s) {
			if (activated) {
				addScreenAction(s, scaleaddonGetCloseKey(d));
				addScreenAction(s, scaleaddonGetZoomKey(d));
				addScreenAction(s, scaleaddonGetPullKey(d));
				addScreenAction(s, scaleaddonGetCloseButton(d));
				addScreenAction(s, scaleaddonGetZoomButton(d));
				addScreenAction(s, scaleaddonGetPullButton(d));

				/* TODO: or better
				   ad->highlightedWindow     = sd->selectedWindow;
				   here? do we want to show up the highlight without
				   mouse move initially? */

				ad->highlightedWindow = None;
				ad->lastHighlightedWindow = None;
				scaleaddonCheckWindowHighlight(s);
			} else {
				CompWindow *w;

				for (w = s->windows; w; w = w->next) {
					ADDON_WINDOW(w);
					aw->rescaled = FALSE;
				}

				removeScreenAction(s, scaleaddonGetCloseKey(d));
				removeScreenAction(s, scaleaddonGetZoomKey(d));
				removeScreenAction(s, scaleaddonGetPullKey(d));
				removeScreenAction(s,
						   scaleaddonGetCloseButton(d));
				removeScreenAction(s,
						   scaleaddonGetZoomButton(d));
				removeScreenAction(s,
						   scaleaddonGetPullButton(d));
			}
		}
	}
}