~ubuntu-branches/ubuntu/utopic/compiz/utopic-proposed

« back to all changes in this revision

Viewing changes to plugins/expo/src/expo.cpp

  • Committer: Package Import Robot
  • Author(s): Ubuntu daily release, Chris Townsend, Marco Trevisan (Treviño)
  • Date: 2014-06-06 09:43:06 UTC
  • mfrom: (3248.176.39)
  • Revision ID: package-import@ubuntu.com-20140606094306-pbrwu3aaaafox0z2
Tags: 1:0.9.11+14.10.20140606-0ubuntu1
[ Chris Townsend ]
* Only ungrab the Mod2Mask modifier on buttons 4-7 to allow scrolling
  in unfocused Gtk windows while still allowing keybinding modifiers
  to other scroll wheel actions. (LP: #1311788)
* Fix issue where window decorations would be placed under the Panel
  when opening a new window from an already open window. This is due
  to the already open window being taller or just as tall without be
  maximized than the workspace. (LP: #1303462)
* Only constrain the non-modifier scrolling to the vertical scrolling
  buttons - buttons 4 & 5. (LP: #1311303)
* Fix issue where maximized windows would get moved to different
  workspaces when disconnecting/connecting an external monitor.
  Windows should stay in the same workspace they are in when the
  monitor event occurs. (LP: #1304531)
* Fix issue where custom keyboard shortcuts would get reset to
  defaults when rebooting or restarting Compiz. (LP: #1063617)
* Fixes issue in the Expo plugin where a gap is shown in the place
  where the Launcher and Panel should be when windows are maximized.
  This was originally removed in rev. 3481. (LP: #1087090)
* Fix issue where horizontal and vertical keyboard resizing could not
  happen at the same time. (LP: #347390)

[ Marco Trevisan (Treviño) ]
* Scale: use XShape extension to exclude dnd input in the screen-parts
  outside workArea This will work property also in multi-monitor,
  without requiring multiple X windows for each output device. Also
  don't terminate the scale unless a drag-n-drop action is not really
  over. Add a spinner that shows up over a window, during the DnD
  timeout. Plus, make sure we terminate the scale without focusing the
  selected icon when cancelling it and some code cleanup (LP: #607796)
* Event: set the screen grabbed also when we get a NotifyWhileGrabbed
  Focus{In,Out} event (LP: #1305586)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1461
1461
                     const CompRegion          &region,
1462
1462
                     unsigned int              mask)
1463
1463
{
 
1464
    GLMatrix            wTransform (transform);
 
1465
    GLWindowPaintAttrib wAttrib (attrib);
 
1466
 
1464
1467
    if (eScreen->expoActive)
1465
1468
    {
1466
1469
        if (eScreen->expoCam > 0.0)
1471
1474
                         ExpoScreen::ExpoAnimationZoom;
1472
1475
        bool  hide     = eScreen->optionGetHideDocks () &&
1473
1476
                         (window->wmType () & CompWindowTypeDockMask);
 
1477
        CompPoint vp;
 
1478
        screen->viewportForGeometry (window->geometry (), vp);
1474
1479
 
1475
1480
        if (!zoomAnim)
1476
1481
            opacity = attrib.opacity * eScreen->expoCam;
1486
1491
 
1487
1492
        if (opacity <= 0)
1488
1493
            mask |= PAINT_WINDOW_NO_CORE_INSTANCE_MASK;
 
1494
 
 
1495
        /* Stretch maximized windows a little so that you don't
 
1496
         * have an awkward gap */
 
1497
        if ((window->state () & MAXIMIZE_STATE) == MAXIMIZE_STATE)
 
1498
        {
 
1499
            CompOutput *o = &screen->outputDevs ()[screen->outputDeviceForGeometry(window->geometry())];
 
1500
            float yS = 1.0 + ((o->height () / (float) window->height ()) - 1.0f) * sigmoidProgress (eScreen->expoCam);
 
1501
            float xS = 1.0 + ((o->width () / (float) window->width ()) - 1.0f) * sigmoidProgress (eScreen->expoCam);
 
1502
            wTransform.translate (window->x () + window->width (),
 
1503
                                  window->y () + window->height (),
 
1504
                                  0.0f);
 
1505
            wTransform.scale (xS, yS, 1.0f);
 
1506
            wTransform.translate (-(window->x () + window->width ()),
 
1507
                                  -(window->y () + window->height ()),
 
1508
                                  0.0f);
 
1509
 
 
1510
            if (eScreen->paintingVp != vp)
 
1511
                mask |= PAINT_WINDOW_NO_CORE_INSTANCE_MASK;
 
1512
 
 
1513
            mask |= PAINT_WINDOW_TRANSFORMED_MASK;
 
1514
        }
1489
1515
    }
1490
1516
 
1491
 
    return gWindow->glPaint (attrib, transform, region, mask);
 
1517
    return gWindow->glPaint (wAttrib, wTransform, region, mask);
1492
1518
}
1493
1519
 
1494
1520
bool