Major enhancements to desktop screen switching--now switches screens in half the time needed before!

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

@ -139,8 +139,11 @@ void KRandRSystemTray::contextMenuAboutToShow(KPopupMenu* menu)
// HACK
// This is needed because Qt does not properly generate screen
// resize events when switching screens, so KDE gets stuck in the old resolution
currentScreen()->proposeSize(GetHackResolutionParameter());
currentScreen()->applyProposed();
// 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(GetDefaultResolutionParameter());
currentScreen()->applyProposed();
@ -558,8 +561,11 @@ void KRandRSystemTray::slotCycleDisplays()
// HACK
// This is needed because Qt does not properly generate screen
// resize events when switching screens, so KDE gets stuck in the old resolution
currentScreen()->proposeSize(GetHackResolutionParameter());
currentScreen()->applyProposed();
// 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(GetDefaultResolutionParameter());
currentScreen()->applyProposed();
@ -738,8 +744,11 @@ void KRandRSystemTray::slotOutputChanged(int parameter)
// HACK
// This is needed because Qt does not properly generate screen
// resize events when switching screens, so KDE gets stuck in the old resolution
currentScreen()->proposeSize(GetHackResolutionParameter());
currentScreen()->applyProposed();
// 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(GetDefaultResolutionParameter());
currentScreen()->applyProposed();

@ -673,7 +673,7 @@ QRect ExtensionManager::workArea(int XineramaScreen, const ExtensionContainer* e
}
QRect workArea;
if (XineramaScreen == XineramaAllScreens)
if ((XineramaScreen == XineramaAllScreens) || (kapp->desktop()->numScreens() < 2))
{
/* special value for all screens */
workArea = Kicker::the()->kwinModule()->workArea(list);

@ -43,7 +43,7 @@ namespace KWinInternal
*/
void Workspace::desktopResized()
{
printf("Workspace::desktopResized()\n\r");
//printf("Workspace::desktopResized()\n\r");
QRect geom = KApplication::desktop()->geometry();
NETSize desktop_geometry;
desktop_geometry.width = geom.width();
@ -59,7 +59,7 @@ void Workspace::desktopResized()
*/
void Workspace::kDestopResized()
{
printf("Workspace::kDesktopResized()\n\r");
//printf("Workspace::kDesktopResized()\n\r");
QRect geom = KApplication::desktop()->geometry();
NETSize desktop_geometry;
desktop_geometry.width = geom.width();
@ -232,38 +232,53 @@ QRect Workspace::clientArea( clientAreaOption opt, int screen, int desktop ) con
{
if( desktop == NETWinInfo::OnAllDesktops || desktop == 0 )
desktop = currentDesktop();
QDesktopWidget *desktopwidget = KApplication::desktop();
QDesktopWidget *desktopwidget = kapp->desktop();
QRect sarea = screenarea // may be NULL during KWin initialization
? screenarea[ desktop ][ screen ]
: desktopwidget->screenGeometry( screen );
QRect warea = workarea[ desktop ].isNull()
? QApplication::desktop()->geometry()
? kapp->desktop()->geometry()
: workarea[ desktop ];
switch (opt)
{
case MaximizeArea:
if (options->xineramaMaximizeEnabled)
return sarea;
if (desktopwidget->numScreens() < 2)
return warea;
else
return sarea;
else
return warea;
case MaximizeFullArea:
if (options->xineramaMaximizeEnabled)
return desktopwidget->screenGeometry( screen );
if (desktopwidget->numScreens() < 2)
return desktopwidget->geometry();
else
return desktopwidget->screenGeometry( screen );
else
return desktopwidget->geometry();
case FullScreenArea:
if (options->xineramaFullscreenEnabled)
return desktopwidget->screenGeometry( screen );
if (desktopwidget->numScreens() < 2)
return desktopwidget->geometry();
else
return desktopwidget->screenGeometry( screen );
else
return desktopwidget->geometry();
case PlacementArea:
if (options->xineramaPlacementEnabled)
return sarea;
if (desktopwidget->numScreens() < 2)
return warea;
else
return sarea;
else
return warea;
case MovementArea:
if (options->xineramaMovementEnabled)
return desktopwidget->screenGeometry( screen );
if (desktopwidget->numScreens() < 2)
return desktopwidget->geometry();
else
return desktopwidget->screenGeometry( screen );
else
return desktopwidget->geometry();
case WorkArea:
@ -271,7 +286,10 @@ QRect Workspace::clientArea( clientAreaOption opt, int screen, int desktop ) con
case FullArea:
return desktopwidget->geometry();
case ScreenArea:
return desktopwidget->screenGeometry( screen );
if (desktopwidget->numScreens() < 2)
return desktopwidget->geometry();
else
return desktopwidget->screenGeometry( screen );
}
assert( false );
return QRect();

Loading…
Cancel
Save