More display switching repairs

git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1120414 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
v3.5.13-sru
tpearson 14 years ago
parent 5669b778e5
commit 71519fb37e

@ -136,14 +136,13 @@ void KRandRSystemTray::contextMenuAboutToShow(KPopupMenu* menu)
findPrimaryDisplay();
refresh();
#ifndef QT_XRANDR_FIXES_01
// HACK
// This is needed because Qt does not properly generate screen
// This is needed because all unpatched versions of Qt does not properly generate screen
// resize events when switching screens, so KDE gets stuck in the old resolution
// This only seems to happen with more than one screen, so check for that condition...
if (kapp->desktop()->numScreens() > 1) {
currentScreen()->proposeSize(GetHackResolutionParameter());
currentScreen()->applyProposed();
}
currentScreen()->proposeSize(GetHackResolutionParameter());
currentScreen()->applyProposed();
#endif
currentScreen()->proposeSize(GetDefaultResolutionParameter());
currentScreen()->applyProposed();
@ -257,6 +256,9 @@ int KRandRSystemTray::GetDefaultResolutionParameter()
return returnIndex;
}
#ifndef QT_XRANDR_FIXES_01
#warning "Your version of Qt3 does not contain the XRandR screen switching patch. This will force a slow and suboptimal display switching method."
// HACK
int KRandRSystemTray::GetHackResolutionParameter() {
int resparm;
@ -265,6 +267,7 @@ int KRandRSystemTray::GetHackResolutionParameter() {
return resparm;
}
#endif
void KRandRSystemTray::populateMenu(KPopupMenu* menu)
{
@ -558,6 +561,7 @@ void KRandRSystemTray::slotCycleDisplays()
findPrimaryDisplay();
refresh();
#ifndef QT_XRANDR_FIXES_01
// HACK
// This is needed because Qt does not properly generate screen
// resize events when switching screens, so KDE gets stuck in the old resolution
@ -566,6 +570,7 @@ void KRandRSystemTray::slotCycleDisplays()
currentScreen()->proposeSize(GetHackResolutionParameter());
currentScreen()->applyProposed();
}
#endif
currentScreen()->proposeSize(GetDefaultResolutionParameter());
currentScreen()->applyProposed();
@ -741,6 +746,7 @@ void KRandRSystemTray::slotOutputChanged(int parameter)
findPrimaryDisplay();
refresh();
#ifndef QT_XRANDR_FIXES_01
// HACK
// This is needed because Qt does not properly generate screen
// resize events when switching screens, so KDE gets stuck in the old resolution
@ -749,6 +755,7 @@ void KRandRSystemTray::slotOutputChanged(int parameter)
currentScreen()->proposeSize(GetHackResolutionParameter());
currentScreen()->applyProposed();
}
#endif
currentScreen()->proposeSize(GetDefaultResolutionParameter());
currentScreen()->applyProposed();

@ -21,6 +21,7 @@
#include <qptrlist.h>
#include <qapplication.h>
#include <ksystemtray.h>
#include <kglobalaccel.h>
@ -62,7 +63,9 @@ private:
void populateMenu(KPopupMenu* menu);
void addOutputMenu(KPopupMenu* menu);
int GetDefaultResolutionParameter();
#ifndef QT_XRANDR_FIXES_01
int GetHackResolutionParameter();
#endif
void findPrimaryDisplay();
bool m_popupUp;

@ -600,7 +600,11 @@ void KRootWm::slotWindowList() {
// kdDebug() << "KRootWm::slotWindowList" << endl;
// Popup at the center of the screen, this is from keyboard shortcut.
QDesktopWidget* desktop = KApplication::desktop();
QRect r = desktop->screenGeometry( desktop->screenNumber(QCursor::pos()));
QRect r;
if (desktop->numScreens() < 2)
r = desktop->geometry();
else
r = desktop->screenGeometry( desktop->screenNumber(QCursor::pos()));
windowListMenu->init();
disconnect( windowListMenu, SIGNAL( aboutToShow() ),
this, SLOT( slotWindowListAboutToShow() ) ); // avoid calling init() twice
@ -616,7 +620,11 @@ void KRootWm::slotSwitchUser() {
if (!sessionsMenu)
return;
QDesktopWidget* desktop = KApplication::desktop();
QRect r = desktop->screenGeometry( desktop->screenNumber(QCursor::pos()));
QRect r;
if (desktop->numScreens() < 2)
r = desktop->geometry();
else
r = desktop->screenGeometry( desktop->screenNumber(QCursor::pos()));
slotPopulateSessions();
disconnect( sessionsMenu, SIGNAL( aboutToShow() ),
this, SLOT( slotPopulateSessions() ) ); // avoid calling init() twice

@ -150,7 +150,11 @@ void MenuManager::kmenuAccelActivated()
QPoint p;
// Popup the K-menu at the center of the screen.
QDesktopWidget* desktop = KApplication::desktop();
QRect r = desktop->screenGeometry(desktop->screenNumber(QCursor::pos()));
QRect r;
if (desktop->numScreens() < 2)
r = desktop->geometry();
else
r = desktop->screenGeometry(desktop->screenNumber(QCursor::pos()));
// kMenu->rect() is not valid before showing, use sizeHint()
p = r.center() - QRect( QPoint( 0, 0 ), m_kmenu->sizeHint()).center();
m_kmenu->popup(p);

@ -1568,7 +1568,7 @@ void Workspace::setActiveScreenMouse( QPoint mousepos )
QRect Workspace::screenGeometry( int screen ) const
{
if( !options->xineramaEnabled )
if (( !options->xineramaEnabled ) || (kapp->desktop()->numScreens() < 2))
return qApp->desktop()->geometry();
return qApp->desktop()->screenGeometry( screen );
}

Loading…
Cancel
Save