diff --git a/plugins/rotate.c b/plugins/rotate.c index c19030b..b74c40c 100644 --- a/plugins/rotate.c +++ b/plugins/rotate.c @@ -400,6 +400,30 @@ rotateReleaseMoveWindow (CompScreen *s) rs->moveWindow = None; } +static void rotateEvent(CompScreen *s, + Bool rotating, + Bool manual) +{ + CompOption o[3]; + + o[0].type = CompOptionTypeInt; + o[0].name = "root"; + o[0].value.i = s->root; + + o[1].type = CompOptionTypeBool; + o[1].name = "rotating"; + o[1].value.b = rotating; + + o[2].type = CompOptionTypeBool; + o[2].name = "manual"; + o[2].value.b = manual; + + (*s->display->handleCompizEvent)(s->display, + "rotate", + "rotateEvent", + o, 3); +} + static void rotatePreparePaintScreen (CompScreen *s, int msSinceLastPaint) @@ -485,6 +509,8 @@ rotatePreparePaintScreen (CompScreen *s, else tx = (s->hsize * xrot / 360.0f) + 0.5f; + rotateEvent (s, FALSE, FALSE); + moveScreenViewport (s, tx, 0, TRUE); rs->xrot = 0.0f; @@ -638,6 +664,10 @@ rotateInitiate (CompDisplay *d, rs->moving = FALSE; rs->slow = FALSE; + /* notify other plugins that rotation starts - if action is + non-NULL, we are called from the 'Initiate rotate' binding */ + rotateEvent (s, TRUE, (action != NULL)); + if (!rs->grabIndex) { rs->grabIndex = pushScreenGrab (s, s->invisibleCursor, "rotate");