From kde-commits Sat Oct 31 23:03:51 2009 From: David Jarvie Date: Sat, 31 Oct 2009 23:03:51 +0000 To: kde-commits Subject: KDE/kdepim/kalarm Message-Id: <1257030231.058010.32637.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=125703025019990 SVN commit 1043172 by djarvie: Bug 211696: If dual screens, show alarm in other screen if active window is full screen M +8 -8 lib/desktop.cpp M +2 -2 lib/desktop.h M +10 -13 messagewin.cpp M +1 -1 messagewin.h --- trunk/KDE/kdepim/kalarm/lib/desktop.cpp #1043171:1043172 @@ -1,7 +1,7 @@ /* * desktop.cpp - desktop functions * Program: kalarm - * Copyright © 2008 by David Jarvie + * Copyright © 2008,2009 by David Jarvie * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,23 +21,23 @@ #include "desktop.h" #ifdef Q_WS_X11 #include -#else +#endif #include #include -#endif namespace KAlarm { /****************************************************************************** -* Return the size of the usable area of the desktop. +* Return the size of the usable area of the desktop, optionally for a specific +* screen in a multi-head setup. */ -QRect desktopWorkArea() +QRect desktopWorkArea(int screen) { #ifdef Q_WS_X11 - return KWindowSystem::workArea(); -#else - return qApp->desktop()->availableGeometry(); + if (screen < 0) + return KWindowSystem::workArea(); #endif + return qApp->desktop()->availableGeometry(screen); } } // namespace KAlarm --- trunk/KDE/kdepim/kalarm/lib/desktop.h #1043171:1043172 @@ -1,7 +1,7 @@ /* * desktop.h - desktop functions * Program: kalarm - * Copyright © 2008 by David Jarvie + * Copyright © 2008,2009 by David Jarvie * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ namespace KAlarm { -QRect desktopWorkArea(); +QRect desktopWorkArea(int screen = -1); } // namespace KAlarm --- trunk/KDE/kdepim/kalarm/messagewin.cpp #1043171:1043172 @@ -516,7 +516,7 @@ topLayout->addSpacing(vspace); topLayout->addStretch(); // Don't include any horizontal margins if message is 2/3 screen width - if (text->sizeHint().width() >= mDesktopArea.width()*2/3) + if (text->sizeHint().width() >= KAlarm::desktopWorkArea(mScreenNumber).width()*2/3) topLayout->addWidget(text, 1, Qt::AlignHCenter); else { @@ -1531,7 +1531,7 @@ } // Limit the size to fit inside the working area of the desktop - QSize desktop = KAlarm::desktopWorkArea().size(); + QSize desktop = KAlarm::desktopWorkArea(mScreenNumber).size(); QSize frameThickness = frameGeometry().size() - geometry().size(); // title bar & window frame return desired.boundedTo(desktop - frameThickness); } @@ -1565,7 +1565,7 @@ KAlarm::readConfigWindowSize("FileMessage", s); resize(s); - QRect desk = KAlarm::desktopWorkArea(); + QRect desk = KAlarm::desktopWorkArea(mScreenNumber); QRect frame = frameGeometry(); mButtonDelay = Preferences::messageButtonDelay() * 1000; @@ -1638,7 +1638,7 @@ void MessageWin::moveEvent(QMoveEvent* e) { MainWindowBase::moveEvent(e); - theApp()->setSpreadWindowsState(isSpread(KAlarm::desktopWorkArea().topLeft())); + theApp()->setSpreadWindowsState(isSpread(KAlarm::desktopWorkArea(mScreenNumber).topLeft())); if (mPositioning) { // The window has just been initially positioned @@ -1660,7 +1660,7 @@ if (width() > s.width() || height() > s.height()) resize(s); } - theApp()->setSpreadWindowsState(isSpread(KAlarm::desktopWorkArea().topLeft())); + theApp()->setSpreadWindowsState(isSpread(KAlarm::desktopWorkArea(mScreenNumber).topLeft())); } /****************************************************************************** @@ -1997,7 +1997,7 @@ */ bool MessageWin::getWorkAreaAndModal() { - mDesktopArea = KAlarm::desktopWorkArea(); + mScreenNumber = -1; bool modal = Preferences::modalMessages(); if (modal) { @@ -2014,26 +2014,23 @@ { // There are multiple screens QRect winRect = wi.frameGeometry(); - int screen = desktop->screenNumber(MainWindow::mainMainWindow()); // KAlarm's screen - if (!winRect.intersects(desktop->screenGeometry(screen))) + mScreenNumber = desktop->screenNumber(MainWindow::mainMainWindow()); // KAlarm's screen + if (!winRect.intersects(desktop->screenGeometry(mScreenNumber))) modal = true; // full screen window isn't on KAlarm's screen else { for (int s = 0; s < numScreens; ++s) { - if (s != screen + if (s != mScreenNumber && !winRect.intersects(desktop->screenGeometry(s))) { // The full screen window isn't on this screen - screen = s; + mScreenNumber = s; modal = true; break; } } - if (!modal) - return modal; } - mDesktopArea = desktop->availableGeometry(screen); } } } --- trunk/KDE/kdepim/kalarm/messagewin.h #1043171:1043172 @@ -163,10 +163,10 @@ QCheckBox* mDontShowAgainCheck; DeferAlarmDlg* mDeferDlg; QDateTime mDeferLimit; // last time to which the message can currently be deferred - QRect mDesktopArea; // usable area of desktop (excluding panel etc.) int mFlags; // event flags int mLateCancel; int mButtonDelay; // delay (ms) after window is shown before buttons are enabled + int mScreenNumber; // screen to display on, or -1 for default bool mAlwaysHide; // the window should never be displayed bool mErrorWindow; // the window is simply an error message bool mNoPostAction; // don't execute any post-alarm action