~cmiller/ubuntu/trusty/icewm/translations-cause-crash-lp447883

« back to all changes in this revision

Viewing changes to src/wmmgr.cc

  • Committer: Bazaar Package Importer
  • Author(s): Eduard Bloch
  • Date: 2009-01-26 00:18:14 UTC
  • mfrom: (1.3.1 upstream) (5.1.1 sid)
  • Revision ID: james.westby@ubuntu.com-20090126001814-ea5ceoy4uroruz72
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
117
117
}
118
118
 
119
119
void YWindowManager::grabKeys() {
 
120
    XUngrabKey(xapp->display(), AnyKey, AnyModifier, handle());
 
121
 
120
122
#ifdef CONFIG_ADDRESSBAR
121
123
    ///if (taskBar && taskBar->addressBar())
122
124
        GRAB_WMKEY(gKeySysAddressBar);
217
219
            grabButton(5, xapp->WinMask);
218
220
        }
219
221
    }
 
222
    {
 
223
        YFrameWindow *ff = topLayer();
 
224
        while (ff != 0) {
 
225
            ff->grabKeys();
 
226
            ff = ff->nextLayer();
 
227
        }
 
228
    }
220
229
}
221
230
 
222
231
YProxyWindow::YProxyWindow(YWindow *parent): YWindow(parent) {
490
499
 
491
500
bool YWindowManager::handleKey(const XKeyEvent &key) {
492
501
    if (key.type == KeyPress) {
493
 
        KeySym k = XKeycodeToKeysym(xapp->display(), key.keycode, 0);
 
502
        KeySym k = XKeycodeToKeysym(xapp->display(), (KeyCode)key.keycode, 0);
494
503
        unsigned int m = KEY_MODMASK(key.state);
495
504
        unsigned int vm = VMod(m);
496
505
 
508
517
        }
509
518
        return handled;
510
519
    } else if (key.type == KeyRelease) {
511
 
        KeySym k = XKeycodeToKeysym(xapp->display(), key.keycode, 0);
 
520
        KeySym k = XKeycodeToKeysym(xapp->display(), (KeyCode)key.keycode, 0);
512
521
        unsigned int m = KEY_MODMASK(key.state);
513
522
 
514
523
        (void)m;
630
639
 
631
640
void YWindowManager::handleUnmap(const XUnmapEvent &unmap) {
632
641
#if 1
633
 
    if (unmap.send_event)
634
 
        if (unmap.window != handle())
 
642
    if (unmap.send_event) {
 
643
        if (unmap.window != handle() && handle() != 0)
635
644
            xapp->handleWindowEvent(unmap.window, *(XEvent *)&unmap);
636
645
        else
637
 
            MSG(("unhandled root window unmap"));
 
646
            MSG(("unhandled root window unmap: %lX %lX", (long)unmap.window, (long)handle()));
 
647
    }
638
648
#endif
639
649
}
640
650
 
677
687
            wmapp->actionPerformed(actionWindowList, 0);
678
688
            break;
679
689
        case ICEWM_ACTION_ABOUT:
 
690
#ifndef LITE
680
691
            wmapp->actionPerformed(actionAbout, 0);
 
692
#endif
681
693
            break;
682
694
        }
683
695
    }
1220
1232
void YWindowManager::getNewPosition(YFrameWindow *frame, int &x, int &y, int w, int h, int xiscreen) {
1221
1233
    if (centerTransientsOnOwner && frame->owner() != 0) {
1222
1234
        x = frame->owner()->x() + frame->owner()->width() / 2 - w / 2;
1223
 
        y = frame->owner()->y() + frame->owner()->width() / 2 - h / 2;
 
1235
        y = frame->owner()->y() + frame->owner()->height() / 2 - h / 2;
1224
1236
    } else if (smartPlacement) {
1225
1237
        getSmartPlace(true, frame, x, y, w, h, xiscreen);
1226
1238
    } else {
1320
1332
            client->gravityOffsets(gx, gy);
1321
1333
 
1322
1334
            if (gx > 0)
1323
 
                posX -= 2 * frame->borderXN() - 1 - client->getBorder();
 
1335
                posX -= 2 * frame->borderXN() - client->getBorder() - 1;
1324
1336
            if (gy > 0)
1325
 
                posY -= 2 * frame->borderYN() + frame->titleYN() - 1 - client->getBorder();
 
1337
                posY -= 2 * frame->borderYN() + frame->titleYN() - client->getBorder() - 1;
1326
1338
        }
1327
1339
    }
1328
1340
 
1388
1400
#endif
1389
1401
        }
1390
1402
 
 
1403
        // temp workaround for flashblock problems
 
1404
        if (client->isEmbed()) {
 
1405
            warn("app trying to map XEmbed window 0x%X, ignoring", client->handle());
 
1406
            delete client;
 
1407
            goto end;
 
1408
        }
 
1409
 
1391
1410
        client->setBorder(attributes.border_width);
1392
1411
        client->setColormap(attributes.colormap);
1393
1412
    }
1610
1629
    return true;
1611
1630
}
1612
1631
 
1613
 
YFrameWindow *YWindowManager::getLastFocus(long workspace) {
 
1632
YFrameWindow *YWindowManager::getLastFocus(bool skipSticky, long workspace) {
1614
1633
    if (workspace == -1)
1615
1634
        workspace = activeWorkspace();
1616
1635
 
1626
1645
    }
1627
1646
 
1628
1647
    if (toFocus == 0) {
1629
 
        for (int pass = 0; pass < 2; pass++) {
 
1648
        int pass = 0;
 
1649
        if (!skipSticky)
 
1650
            pass = 1;
 
1651
        for (; pass < 3; pass++) {
1630
1652
            for (YFrameWindow *w = lastFocusFrame();
1631
1653
                 w;
1632
1654
                 w = w->prevFocus())
1641
1663
                    continue;
1642
1664
                if (!w->visibleOn(workspace))
1643
1665
                    continue;
1644
 
                if (w->avoidFocus() || pass == 1)
 
1666
                if (w->avoidFocus() || pass == 2)
1645
1667
                    continue;
1646
1668
                if (w->isSticky() || pass == 1)
1647
1669
                    continue;
1683
1705
    }
1684
1706
 
1685
1707
/// TODO #warning "per workspace?"
1686
 
    YFrameWindow *toFocus = getLastFocus();
 
1708
    YFrameWindow *toFocus = getLastFocus(false);
1687
1709
 
1688
1710
    if (toFocus == 0) {
1689
1711
        focusTopWindow();
1947
1969
        }
1948
1970
 
1949
1971
        if (w->doNotCover() ||
1950
 
            limitByDockLayer && w->getActiveLayer() == WinLayerDock)
 
1972
            (limitByDockLayer && w->getActiveLayer() == WinLayerDock))
1951
1973
        {
1952
1974
            int midX = width() / 4;
1953
1975
            int midY = height() / 4;
2051
2073
    for (YFrameWindow * f = topLayer(); f; f = f->nextLayer()) {
2052
2074
        if (f->inWorkArea()) {
2053
2075
            if (f->isMaximized())
2054
 
                f->updateDerivedSize(0);
 
2076
                f->updateDerivedSize(WinStateMaximizedVert | WinStateMaximizedHoriz);
2055
2077
                f->updateLayout();
2056
2078
        }
2057
2079
    }
2059
2081
 
2060
2082
void YWindowManager::activateWorkspace(long workspace) {
2061
2083
    if (workspace != fActiveWorkspace) {
2062
 
        YFrameWindow *toFocus = getLastFocus(workspace);
 
2084
        YFrameWindow *toFocus = getLastFocus(true, workspace);
2063
2085
 
2064
2086
        lockFocus();
2065
2087
///        XSetInputFocus(app->display(), desktop->handle(), RevertToNone, CurrentTime);