~townsend/compiz/fix-lp1244754-0.9.10

« back to all changes in this revision

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

  • Committer: Tarmac
  • Author(s): Chris Townsend
  • Date: 2013-10-07 18:56:54 UTC
  • mfrom: (3794.2.1 compiz-0.9.10)
  • Revision ID: tarmac-20131007185654-t8cjqyxndl3y9e03
Remove seemingly useless code in the SnapWindow::resizeNotify() method where a snapped window that is being resized on the opposite side of the snap would cause orders of magnitude more calls to window->resize() and kill performance. Fixes: https://bugs.launchpad.net/bugs/1019139.

Approved by Brandon Schaefer, PS Jenkins bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
587
587
    if (!ss->snapping)
588
588
        return;
589
589
 
590
 
    // apply edge resistance
591
 
    if (ss->optionGetSnapTypeMask () & SnapTypeEdgeResistanceMask)
592
 
    {
593
 
        // If there's horizontal snapping, add dx to current buffered
594
 
        // dx and resist (move by -dx) or release the window and move
595
 
        // by buffered dx - dx, same for dh
596
 
        if (!snapGeometry.isEmpty () && snapDirection & HorizontalSnap)
597
 
        {
598
 
            m_dx += dx;
599
 
            if (m_dx < ss->optionGetResistanceDistance ()
600
 
                && m_dx > -ss->optionGetResistanceDistance ())
601
 
            {
602
 
                resize (-dx, 0, 0, 0);
603
 
            }
604
 
            else
605
 
            {
606
 
                resize (m_dx - dx, 0, 0, 0);
607
 
                m_dx = 0;
608
 
                if (!m_dwidth)
609
 
                    snapDirection &= VerticalSnap;
610
 
            }
611
 
            m_dwidth += dwidth;
612
 
            if (m_dwidth < ss->optionGetResistanceDistance ()
613
 
                && m_dwidth > -ss->optionGetResistanceDistance ())
614
 
            {
615
 
                resize (0, 0, -dwidth, 0);
616
 
            }
617
 
            else
618
 
            {
619
 
                resize (0, 0, m_dwidth - dwidth, 0);
620
 
                m_dwidth = 0;
621
 
                if (!m_dx)
622
 
                    snapDirection &= VerticalSnap;
623
 
            }
624
 
        }
625
 
 
626
 
        // Same for vertical snapping and dy/dh
627
 
        if (snapGeometry.isEmpty () && snapDirection & VerticalSnap)
628
 
        {
629
 
            m_dy += dy;
630
 
            if (m_dy < ss->optionGetResistanceDistance ()
631
 
                && m_dy > -ss->optionGetResistanceDistance ())
632
 
            {
633
 
                resize (0, -dy, 0, 0);
634
 
            }
635
 
            else
636
 
            {
637
 
                resize (0, m_dy - dy, 0, 0);
638
 
                m_dy = 0;
639
 
                if (!m_dheight)
640
 
                    snapDirection &= HorizontalSnap;
641
 
            }
642
 
            m_dheight += dheight;
643
 
            if (m_dheight < ss->optionGetResistanceDistance ()
644
 
                && m_dheight > -ss->optionGetResistanceDistance ())
645
 
            {
646
 
                resize (0, 0, 0, -dheight);
647
 
            }
648
 
            else
649
 
            {
650
 
                resize (0, 0, 0, m_dheight - dheight);
651
 
                m_dheight = 0;
652
 
                if (!m_dy)
653
 
                    snapDirection &= HorizontalSnap;
654
 
            }
655
 
        }
656
 
        // If we are no longer snapping in any direction, reset snapped
657
 
        if (!snapGeometry.isEmpty () && !snapDirection)
658
 
            snapGeometry = CompWindow::Geometry ();
659
 
    }
660
 
 
661
590
    // If we don't already snap vertically and horizontally,
662
591
    // check edges status
663
592
    if (snapDirection != (VerticalSnap | HorizontalSnap))