~compiz-team/compiz-plugins-main/0.9.5

« back to all changes in this revision

Viewing changes to grid/src/grid.cpp

  • Committer: smspillaz
  • Date: 2012-01-26 10:10:12 UTC
  • Revision ID: sam.spilsbury@canonical.com-20120126101012-s3niraygksnm8caj
Sync in changes from upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
186
186
            /* move the window to the correct output */
187
187
            if (cw == mGrabWindow)
188
188
            {
189
 
                compiz::window::Geometry ng = cw->serverGeometry ();
190
 
 
191
 
                ng.setPos (CompPoint (workarea.pos () + CompPoint (50, 50)));
192
 
                cw->positionSetEnabled (gw, false);
193
 
                cw->position (ng);
194
 
                cw->positionSetEnabled (gw, true);
 
189
                xwc.x = workarea.x () + 50;
 
190
                xwc.y = workarea.y () + 50;
 
191
                xwc.width = workarea.width ();
 
192
                xwc.height = workarea.height ();
 
193
                cw->configureXWindow (CWX | CWY, &xwc);
195
194
            }
196
195
            cw->maximize (MAXIMIZE_STATE);
197
196
            gw->isGridResized = true;
329
328
            desiredRect = constrainSize (cw, desiredSlot);
330
329
        }
331
330
 
332
 
        compiz::window::Geometry ng (desiredRect.x (),
333
 
                                     desiredRect.y (),
334
 
                                     desiredRect.width (),
335
 
                                     desiredRect.height (),
336
 
                                     cw->serverGeometry ().border ());
 
331
        xwc.x = desiredRect.x ();
 
332
        xwc.y = desiredRect.y ();
 
333
        xwc.width  = desiredRect.width ();
 
334
        xwc.height = desiredRect.height ();
 
335
 
 
336
        /* Store a copy of xwc since configureXWindow changes it's values */
 
337
        XWindowChanges wc = xwc;
337
338
 
338
339
        if (cw->mapNum ())
339
340
            cw->sendSyncRequest ();
341
342
        /* TODO: animate move+resize */
342
343
        if (resize)
343
344
        {
344
 
<<<<<<< TREE
345
345
            unsigned int valueMask = CWX | CWY | CWWidth | CWHeight;
346
 
=======
347
 
>>>>>>> MERGE-SOURCE
348
346
            gw->lastTarget = where;
349
 
<<<<<<< TREE
350
347
            gw->currentSize = CompRect (wc.x, wc.y, wc.width, wc.height);
351
 
=======
352
 
            gw->currentSize = static_cast <CompRect &> (ng);
353
 
>>>>>>> MERGE-SOURCE
354
348
            CompWindowExtents lastBorder = gw->window->border ();
355
349
 
356
350
            gw->sizeHintsFlags = 0;
362
356
                /* First restore the window to its original size */
363
357
                XWindowChanges rwc;
364
358
 
365
 
<<<<<<< TREE
366
359
                rwc.x = gw->originalSize.x ();
367
360
                rwc.y = gw->originalSize.y ();
368
361
                rwc.width = gw->originalSize.width ();
369
362
                rwc.height = gw->originalSize.height ();
370
 
=======
371
 
                compiz::window::Geometry ng (cw->serverGeometry ());
372
 
                ng.applyChange (compiz::window::Geometry (gw->originalSize.x (),
373
 
                                                          gw->originalSize.y (),
374
 
                                                          gw->originalSize.width (),
375
 
                                                          gw->originalSize.height (),
376
 
                                                          0), CHANGE_X | CHANGE_Y | CHANGE_WIDTH | CHANGE_HEIGHT);
377
 
>>>>>>> MERGE-SOURCE
378
363
 
379
 
<<<<<<< TREE
380
364
                cw->configureXWindow (CWX | CWY | CWWidth | CWHeight, &rwc);
381
 
=======
382
 
                cw->positionSetEnabled (gw, false);
383
 
                cw->position (ng);
384
 
                cw->positionSetEnabled (gw, true);
385
 
>>>>>>> MERGE-SOURCE
386
365
 
387
366
                gw->isGridMaximized = true;
388
367
                gw->isGridResized = false;
389
368
 
390
 
<<<<<<< TREE
391
 
=======
392
 
                cw->positionSetEnabled (gw, false);
393
 
 
394
 
>>>>>>> MERGE-SOURCE
395
369
                /* Maximize the window */
396
370
                cw->maximize (CompWindowStateMaximizedVertMask);
397
 
<<<<<<< TREE
398
 
=======
399
 
 
400
 
                cw->positionSetEnabled (gw, true);
401
 
 
402
 
>>>>>>> MERGE-SOURCE
 
371
 
403
372
                /* Be evil */
404
373
                if (cw->sizeHints ().flags & PResizeInc)
405
374
                {
421
390
                        (gw->window->border ().top +
422
391
                         gw->window->border ().bottom);
423
392
 
424
 
<<<<<<< TREE
425
393
            xwc.width += dw;
426
394
            xwc.height += dh;
427
 
=======
428
 
            ng.setWidth (ng.width () + dw);
429
 
            ng.setHeight (ng.height () + dw);
430
 
 
431
 
>>>>>>> MERGE-SOURCE
432
395
 
433
396
            /* Make window the size that we want */
434
 
<<<<<<< TREE
435
397
            cw->configureXWindow (valueMask, &xwc);
436
 
=======
437
 
            cw->positionSetEnabled (gw, false);
438
 
            cw->position (ng);
439
 
            cw->positionSetEnabled (gw, true);
440
 
>>>>>>> MERGE-SOURCE
441
398
 
442
399
            for (unsigned int i = 0; i < animations.size (); i++)
443
400
                animations.at (i).fadingOut = true;
454
411
                 cw->serverBorderRect ().width () <
455
412
                 desiredSlot.width ())
456
413
            {
457
 
                compiz::window::Geometry geom (cw->serverGeometry ());
458
 
                geom.setX  (geom.x () + (workarea.width () >> 1) -
459
 
                            ((cw->serverBorderRect ().width () >> 1) -
460
 
                              cw->border ().left));
461
 
                cw->positionSetEnabled (gw, false);
462
 
                cw->position (geom);
463
 
                cw->positionSetEnabled (gw, true);
 
414
                wc.x = (workarea.width () >> 1) -
 
415
                      ((cw->serverBorderRect ().width () >> 1) -
 
416
                        cw->border ().left);
 
417
                cw->configureXWindow (CWX, &wc);
464
418
            }
465
419
 
466
420
            centerCheck = false;
777
731
    }
778
732
 
779
733
    w = screen->findWindow (CompOption::getIntOptionNamed (o, "window"));
780
 
}
781
 
 
782
 
bool
783
 
GridWindow::position (compiz::window::Geometry &g,
784
 
                      unsigned int             source,
785
 
                      unsigned int             constrainment)
786
 
{
787
 
    /* Don't allow non-pagers to change the size of
788
 
     * this window */
789
 
    if (source != ClientTypePager && !window->grabbed () &&
790
 
        (isGridMaximized || isGridResized))
791
 
        g = window->serverGeometry ();
792
 
 
793
 
    return window->position (g);
 
734
 
 
735
    if (w)
 
736
    {
 
737
        GRID_WINDOW (w);
 
738
 
 
739
        if ((gw->pointerBufDx > SNAPOFF_THRESHOLD ||
 
740
             gw->pointerBufDy > SNAPOFF_THRESHOLD ||
 
741
             gw->pointerBufDx < -SNAPOFF_THRESHOLD ||
 
742
             gw->pointerBufDy < -SNAPOFF_THRESHOLD) &&
 
743
             gw->isGridResized &&
 
744
             optionGetSnapbackWindows ())
 
745
                restoreWindow (0, 0, o);
 
746
    }
794
747
}
795
748
 
796
749
void
814
767
                        unsigned int state,
815
768
                        unsigned int mask)
816
769
{
817
 
<<<<<<< TREE
818
 
    if ((mask & (CompWindowGrabMoveMask | CompWindowGrabButtonMask)) &&
819
 
        !(mask & CompWindowGrabResizeMask))
820
 
=======
821
770
    compiz::grid::window::GrabWindowHandler gwHandler (mask);
822
771
 
823
772
    if (gwHandler.track ())
824
 
>>>>>>> MERGE-SOURCE
825
773
    {
826
774
        gScreen->o[0].value ().set ((int) window->id ());
827
775
 
835
783
            originalSize = gScreen->slotToRect(window,
836
784
                                                    window->serverBorderRect ());
837
785
    }
838
 
<<<<<<< TREE
839
 
 
840
 
    if (mask & CompWindowGrabResizeMask)
841
 
=======
842
786
    else if (gwHandler.resetResize ())
843
 
>>>>>>> MERGE-SOURCE
844
787
    {
845
788
        isGridResized = false;
846
789
        resizeCount = 0;
872
815
}
873
816
 
874
817
void
875
 
GridWindow::applyOffset (const CompPoint &d)
 
818
GridWindow::moveNotify (int dx, int dy, bool immediate)
876
819
{
877
 
<<<<<<< TREE
878
820
    window->moveNotify (dx, dy, immediate);
879
821
 
880
822
    if (isGridResized && !isGridMaximized && !GridScreen::get (screen)->mSwitchingVp)
881
 
=======
882
 
    if ((isGridResized || isGridMaximized) &&
883
 
        !GridScreen::get (screen)->mSwitchingVp)
884
 
>>>>>>> MERGE-SOURCE
885
823
    {
886
824
        if (window->grabbed () && (grabMask & CompWindowGrabMoveMask))
887
825
        {
888
 
<<<<<<< TREE
889
826
            pointerBufDx += dx;
890
827
            pointerBufDy += dy;
891
 
=======
892
 
            pointerBufDx += d.x ();
893
 
            pointerBufDy += d.y ();
894
 
 
895
 
            printf ("%i %i\n", pointerBufDx, pointerBufDy);
896
 
 
897
 
            if ((abs (pointerBufDx) > SNAPOFF_THRESHOLD ||
898
 
                 abs (pointerBufDy) > SNAPOFF_THRESHOLD) &&
899
 
                 (isGridResized || isGridMaximized) &&
900
 
                 gScreen->optionGetSnapbackWindows ())
901
 
            {
902
 
                printf ("restore window\n");
903
 
                    gScreen->restoreWindow (0, 0, gScreen->o);
904
 
            }
905
 
 
906
 
            /* Do not allow the window to be moved while it
907
 
             * is resized */
908
 
            return;
909
 
>>>>>>> MERGE-SOURCE
910
828
        }
911
 
<<<<<<< TREE
912
829
 
913
830
        /* Do not allow the window to be moved while it
914
831
         * is resized */
916
833
        dy = currentSize.y () - window->geometry ().y ();
917
834
 
918
835
        window->move (dx, dy);
919
 
=======
920
 
>>>>>>> MERGE-SOURCE
921
836
    }
922
 
<<<<<<< TREE
923
 
=======
924
 
 
925
 
    CompositeWindow::get (window)->applyOffset (d);
926
 
>>>>>>> MERGE-SOURCE
927
837
}
928
838
 
929
839
void
951
861
                           CompAction::State  state,
952
862
                           CompOption::Vector &option)
953
863
{
 
864
    XWindowChanges xwc;
954
865
    CompWindow *cw = screen->findWindow (screen->activeWindow ());
955
866
 
956
867
    if (!cw)
958
869
 
959
870
    GRID_WINDOW (cw);
960
871
 
 
872
    if (!gw->isGridResized)
 
873
        return false;
 
874
 
961
875
    if (gw->isGridMaximized & !(cw->state () & MAXIMIZE_STATE))
962
876
    {
963
877
        gw->window->sizeHints ().flags |= gw->sizeHintsFlags;
965
879
    }
966
880
    else
967
881
    {
968
 
        compiz::window::Geometry ng (cw->serverGeometry ());
969
 
 
970
882
        if (cw == mGrabWindow)
971
883
        {
972
 
            ng.setX (pointerX - (gw->originalSize.width () >> 1));
973
 
            ng.setY (pointerY - (cw->border ().top));
 
884
            xwc.x = pointerX - (gw->originalSize.width () >> 1);
 
885
            xwc.y = pointerY + (cw->border ().top >> 1);
974
886
        }
975
887
        else
976
888
        {
977
 
            ng.setX (gw->originalSize.x ());
978
 
            ng.setY (gw->originalSize.y ());
 
889
            xwc.x = gw->originalSize.x ();
 
890
            xwc.y = gw->originalSize.y ();
979
891
        }
980
 
 
981
 
        ng.setWidth (gw->originalSize.width ());
982
 
        ng.setHeight (gw->originalSize.height ());
 
892
        xwc.width  = gw->originalSize.width ();
 
893
        xwc.height = gw->originalSize.height ();
983
894
        cw->maximize (0);
984
895
        gw->currentSize = CompRect ();
985
 
<<<<<<< TREE
986
896
        cw->configureXWindow (CWX | CWY | CWWidth | CWHeight, &xwc);
987
 
=======
988
 
        cw->positionSetEnabled (gw, false);
989
 
        cw->position (ng);
990
 
        cw->positionSetEnabled (gw, true);
991
 
>>>>>>> MERGE-SOURCE
992
897
        gw->pointerBufDx = 0;
993
898
        gw->pointerBufDy = 0;
994
899
    }
1063
968
                cScreen->preparePaintSetEnabled (this, false);
1064
969
                cScreen->donePaintSetEnabled (this, false);
1065
970
                if (edge == NoEdge)
1066
 
                {
1067
971
                        glScreen->glPaintOutputSetEnabled (this, false);
1068
 
                }
1069
972
                animations.clear ();
1070
973
                animating = false;
1071
974
        }
1160
1063
    lastTarget (GridUnknown)
1161
1064
{
1162
1065
    WindowInterface::setHandler (window);
1163
 
    CompositeWindowInterface::setHandler (CompositeWindow::get (window));
1164
1066
}
1165
1067
 
1166
1068
GridWindow::~GridWindow ()