summaryrefslogtreecommitdiffstats
path: root/twin/workspace.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'twin/workspace.cpp')
-rw-r--r--twin/workspace.cpp205
1 files changed, 95 insertions, 110 deletions
diff --git a/twin/workspace.cpp b/twin/workspace.cpp
index 950ebf92c..6f6bedb3e 100644
--- a/twin/workspace.cpp
+++ b/twin/workspace.cpp
@@ -201,8 +201,8 @@ Workspace::Workspace( bool restore )
updateXTime(); // needed for proper initialization of user_time in Client ctor
- delayFocusTimer = 0;
-
+ delayFocusTimer = 0;
+
active_time_first = GET_QT_X_TIME();
active_time_last = GET_QT_X_TIME();
@@ -315,7 +315,7 @@ void Workspace::init()
// not used yet
// topDock = 0L;
// maximizedWindowCounter = 0;
-
+
supportWindow = new TQWidget;
XLowerWindow( tqt_xdisplay(), supportWindow->winId()); // see usage in layers.cpp
@@ -461,7 +461,7 @@ void Workspace::init()
unsigned int i, nwins;
Window root_return, parent_return, *wins;
XQueryTree(tqt_xdisplay(), root, &root_return, &parent_return, &wins, &nwins);
- for (i = 0; i < nwins; i++)
+ for (i = 0; i < nwins; i++)
{
XWindowAttributes attr;
XGetWindowAttributes(tqt_xdisplay(), wins[i], &attr);
@@ -469,12 +469,12 @@ void Workspace::init()
continue;
if( topmenu_space && topmenu_space->winId() == wins[ i ] )
continue;
- if (attr.map_state != IsUnmapped)
+ if (attr.map_state != IsUnmapped)
{
if ( addSystemTrayWin( wins[i] ) )
continue;
Client* c = createClient( wins[i], true );
- if ( c != NULL && root != tqt_xrootwin() )
+ if ( c != NULL && root != tqt_xrootwin() )
{ // TODO what is this?
// TODO may use TQWidget:.create
XReparentWindow( tqt_xdisplay(), c->frameId(), root, 0, 0 );
@@ -810,7 +810,7 @@ void Workspace::updateFocusChains( Client* c, FocusChainChange change )
void Workspace::updateOverlappingShadows(unsigned long window)
{
Client *client;
-
+
if ((client = findClient(WindowMatchPredicate((WId)window))))
// Redraw overlapping shadows without waiting for the specified window
// to redraw its own shadow
@@ -820,7 +820,7 @@ void Workspace::updateOverlappingShadows(unsigned long window)
void Workspace::setShadowed(unsigned long window, bool shadowed)
{
Client *client;
-
+
if ((client = findClient(WindowMatchPredicate((WId)window))))
client->setShadowed(shadowed);
}
@@ -916,7 +916,7 @@ void Workspace::updateCurrentTopMenu()
}
// ... then hide the other ones. Avoids flickers.
- for ( ClientList::ConstIterator it = clients.begin(); it != clients.end(); ++it)
+ for ( ClientList::ConstIterator it = clients.begin(); it != clients.end(); ++it)
{
if( (*it)->isTopMenu() && (*it) != menubar )
(*it)->hideClient( true );
@@ -1033,7 +1033,7 @@ void Workspace::updateColormap()
Colormap cmap = default_colormap;
if ( activeClient() && activeClient()->colormap() != None )
cmap = activeClient()->colormap();
- if ( cmap != installed_colormap )
+ if ( cmap != installed_colormap )
{
XInstallColormap(tqt_xdisplay(), cmap );
installed_colormap = cmap;
@@ -1228,7 +1228,7 @@ void Workspace::loadDesktopSettings()
desktop_focus_chain.resize( n );
// make it +1, so that it can be accessed as [1..numberofdesktops]
focus_chain.resize( n + 1 );
- for(int i = 1; i <= n; i++)
+ for(int i = 1; i <= n; i++)
{
TQString s = c->readEntry(TQString("Name_%1").arg(i),
i18n("Desktop %1").arg(i));
@@ -1248,21 +1248,21 @@ void Workspace::saveDesktopSettings()
TDEConfigGroupSaver saver(c,groupname);
c->writeEntry("Number", number_of_desktops );
- for(int i = 1; i <= number_of_desktops; i++)
+ for(int i = 1; i <= number_of_desktops; i++)
{
TQString s = desktopName( i );
TQString defaultvalue = i18n("Desktop %1").arg(i);
- if ( s.isEmpty() )
+ if ( s.isEmpty() )
{
s = defaultvalue;
rootInfo->setDesktopName( i, s.utf8().data() );
}
- if (s != defaultvalue)
+ if (s != defaultvalue)
{
c->writeEntry( TQString("Name_%1").arg(i), s );
}
- else
+ else
{
TQString currentvalue = c->readEntry(TQString("Name_%1").arg(i));
if (currentvalue != defaultvalue)
@@ -1300,10 +1300,10 @@ void Workspace::doNotManage( TQString title )
*/
bool Workspace::isNotManaged( const TQString& title )
{
- for ( TQStringList::Iterator it = doNotManageList.begin(); it != doNotManageList.end(); ++it )
+ for ( TQStringList::Iterator it = doNotManageList.begin(); it != doNotManageList.end(); ++it )
{
TQRegExp r( (*it) );
- if (r.search(title) != -1)
+ if (r.search(title) != -1)
{
doNotManageList.remove( it );
return TRUE;
@@ -1315,7 +1315,7 @@ bool Workspace::isNotManaged( const TQString& title )
/*!
Refreshes all the client windows
*/
-void Workspace::refresh()
+void Workspace::refresh()
{
TQWidget w;
w.setGeometry( TQApplication::desktop()->geometry() );
@@ -1352,7 +1352,7 @@ void ObscuringWindows::create( Client* c )
Window obs_win;
XWindowChanges chngs;
int mask = CWSibling | CWStackMode;
- if( cached->count() > 0 )
+ if( cached->count() > 0 )
{
cached->remove( obs_win = cached->first());
chngs.x = c->x();
@@ -1361,7 +1361,7 @@ void ObscuringWindows::create( Client* c )
chngs.height = c->height();
mask |= CWX | CWY | CWWidth | CWHeight;
}
- else
+ else
{
XSetWindowAttributes a;
a.background_pixmap = None;
@@ -1382,7 +1382,7 @@ ObscuringWindows::~ObscuringWindows()
max_cache_size = TQMAX( max_cache_size, obscuring_windows.count() + 4 ) - 1;
for( TQValueList<Window>::ConstIterator it = obscuring_windows.begin();
it != obscuring_windows.end();
- ++it )
+ ++it )
{
XUnmapWindow( tqt_xdisplay(), *it );
if( cached->count() < max_cache_size )
@@ -1410,7 +1410,7 @@ bool Workspace::setCurrentDesktop( int new_desktop )
StackingUpdatesBlocker blocker( this );
int old_desktop = current_desktop;
- if (new_desktop != current_desktop)
+ if (new_desktop != current_desktop)
{
++block_showing_desktop;
/*
@@ -1449,7 +1449,7 @@ bool Workspace::setCurrentDesktop( int new_desktop )
}
if (desktopHasCompositing) {
- // If composition is in use then we cannot hide the old windows before showing the new ones,
+ // If composition is in use then we cannot hide the old windows before showing the new ones,
// unless you happen to like the "flicker annoyingly to desktop" effect... :-P
XSync( tqt_xdisplay(), false); // Make absolutely certain all new windows are shown before hiding the old ones
for ( ClientList::ConstIterator it = stacking_order.begin(); it != stacking_order.end(); ++it) {
@@ -1472,7 +1472,7 @@ bool Workspace::setCurrentDesktop( int new_desktop )
--block_focus;
Client* c = 0;
- if ( options->focusPolicyIsReasonable())
+ if ( options->focusPolicyIsReasonable())
{
// Search in focus chain
if ( movingClient != NULL && active_client == movingClient
@@ -1481,7 +1481,7 @@ bool Workspace::setCurrentDesktop( int new_desktop )
{
c = active_client; // the requestFocus below will fail, as the client is already active
}
- if ( !c )
+ if ( !c )
{
for( ClientList::ConstIterator it = focus_chain[currentDesktop()].fromLast();
it != focus_chain[currentDesktop()].end();
@@ -1508,9 +1508,9 @@ bool Workspace::setCurrentDesktop( int new_desktop )
if( c != active_client )
setActiveClient( NULL, Allowed );
- if ( c )
+ if ( c )
requestFocus( c );
- else
+ else
focusToNull();
updateCurrentTopMenu();
@@ -1556,7 +1556,7 @@ int Workspace::desktopToRight( int desktop ) const
if (layoutOrientation == Qt::Vertical)
{
dt += y;
- if ( dt >= numberOfDesktops() )
+ if ( dt >= numberOfDesktops() )
{
if ( options->rollOverDesktops )
dt -= numberOfDesktops();
@@ -1567,7 +1567,7 @@ int Workspace::desktopToRight( int desktop ) const
else
{
int d = (dt % x) + 1;
- if ( d >= x )
+ if ( d >= x )
{
if ( options->rollOverDesktops )
d -= x;
@@ -1587,7 +1587,7 @@ int Workspace::desktopToLeft( int desktop ) const
if (layoutOrientation == Qt::Vertical)
{
dt -= y;
- if ( dt < 0 )
+ if ( dt < 0 )
{
if ( options->rollOverDesktops )
dt += numberOfDesktops();
@@ -1598,7 +1598,7 @@ int Workspace::desktopToLeft( int desktop ) const
else
{
int d = (dt % x) - 1;
- if ( d < 0 )
+ if ( d < 0 )
{
if ( options->rollOverDesktops )
d += x;
@@ -1618,7 +1618,7 @@ int Workspace::desktopUp( int desktop ) const
if (layoutOrientation == Qt::Horizontal)
{
dt -= x;
- if ( dt < 0 )
+ if ( dt < 0 )
{
if ( options->rollOverDesktops )
dt += numberOfDesktops();
@@ -1629,7 +1629,7 @@ int Workspace::desktopUp( int desktop ) const
else
{
int d = (dt % y) - 1;
- if ( d < 0 )
+ if ( d < 0 )
{
if ( options->rollOverDesktops )
d += y;
@@ -1649,7 +1649,7 @@ int Workspace::desktopDown( int desktop ) const
if (layoutOrientation == Qt::Horizontal)
{
dt += x;
- if ( dt >= numberOfDesktops() )
+ if ( dt >= numberOfDesktops() )
{
if ( options->rollOverDesktops )
dt -= numberOfDesktops();
@@ -1660,7 +1660,7 @@ int Workspace::desktopDown( int desktop ) const
else
{
int d = (dt % y) + 1;
- if ( d >= y )
+ if ( d >= y )
{
if ( options->rollOverDesktops )
d -= y;
@@ -1688,7 +1688,7 @@ void Workspace::setNumberOfDesktops( int n )
// if increasing the number, do the resizing now,
// otherwise after the moving of windows to still existing desktops
- if( old_number_of_desktops < number_of_desktops )
+ if( old_number_of_desktops < number_of_desktops )
{
rootInfo->setNumberOfDesktops( number_of_desktops );
NETPoint* viewports = new NETPoint[ number_of_desktops ];
@@ -1700,17 +1700,17 @@ void Workspace::setNumberOfDesktops( int n )
// if the number of desktops decreased, move all
// windows that would be hidden to the last visible desktop
- if( old_number_of_desktops > number_of_desktops )
+ if( old_number_of_desktops > number_of_desktops )
{
for( ClientList::ConstIterator it = clients.begin();
it != clients.end();
- ++it)
+ ++it)
{
if( !(*it)->isOnAllDesktops() && (*it)->desktop() > numberOfDesktops())
sendClientToDesktop( *it, numberOfDesktops(), true );
}
}
- if( old_number_of_desktops > number_of_desktops )
+ if( old_number_of_desktops > number_of_desktops )
{
rootInfo->setNumberOfDesktops( number_of_desktops );
NETPoint* viewports = new NETPoint[ number_of_desktops ];
@@ -1750,7 +1750,7 @@ void Workspace::sendClientToDesktop( Client* c, int desk, bool dont_activate )
else
restackClientUnderActive( c );
}
- else
+ else
{
raiseClient( c );
}
@@ -1937,7 +1937,7 @@ void Workspace::propagateSystemTrayWins()
Window *cl = new Window[ systemTrayWins.count()];
int i = 0;
- for ( SystemTrayWindowList::ConstIterator it = systemTrayWins.begin(); it != systemTrayWins.end(); ++it )
+ for ( SystemTrayWindowList::ConstIterator it = systemTrayWins.begin(); it != systemTrayWins.end(); ++it )
{
cl[i++] = (*it).win;
}
@@ -1953,7 +1953,7 @@ void Workspace::killWindowId( Window window_to_kill )
return;
Window window = window_to_kill;
Client* client = NULL;
- for(;;)
+ for(;;)
{
client = findClient( FrameIdMatchPredicate( window ));
if( client != NULL ) // found the client
@@ -2086,12 +2086,12 @@ void Workspace::sendTakeActivity( Client* c, Time timestamp, long flags )
*/
void Workspace::slotGrabWindow()
{
- if ( active_client )
+ if ( active_client )
{
TQPixmap snapshot = TQPixmap::grabWindow( active_client->frameId() );
//No XShape - no work.
- if( Shape::available())
+ if( Shape::available())
{
//As the first step, get the mask from XShape.
int count, order;
@@ -2101,7 +2101,7 @@ void Workspace::slotGrabWindow()
//ShapeBounding - ShapeClipping is defined to be the border.
//Since the border area is part of the window, we use bounding
// to limit our work region
- if (rects)
+ if (rects)
{
//Create a TQRegion from the rectangles describing the bounding mask.
TQRegion contents;
@@ -2152,7 +2152,7 @@ void Workspace::slotGrabDesktop()
void Workspace::slotMouseEmulation()
{
- if ( mouse_emulation )
+ if ( mouse_emulation )
{
XUngrabKeyboard(tqt_xdisplay(), GET_QT_X_TIME());
mouse_emulation = FALSE;
@@ -2162,7 +2162,7 @@ void Workspace::slotMouseEmulation()
if ( XGrabKeyboard(tqt_xdisplay(),
root, FALSE,
GrabModeAsync, GrabModeAsync,
- GET_QT_X_TIME()) == GrabSuccess )
+ GET_QT_X_TIME()) == GrabSuccess )
{
mouse_emulation = TRUE;
mouse_emulation_state = 0;
@@ -2184,7 +2184,7 @@ WId Workspace::getMouseEmulationWindow()
uint state;
Window w;
Client * c = 0;
- do
+ do
{
w = child;
if (!c)
@@ -2206,12 +2206,12 @@ unsigned int Workspace::sendFakedMouseEvent( TQPoint pos, WId w, MouseEmulation
if ( !w )
return state;
TQWidget* widget = TQWidget::find( w );
- if ( (!widget || widget->inherits(TQTOOLBUTTON_OBJECT_NAME_STRING) ) && !findClient( WindowMatchPredicate( w )) )
+ if ( (!widget || widget->inherits(TQTOOLBUTTON_OBJECT_NAME_STRING) ) && !findClient( WindowMatchPredicate( w )) )
{
int x, y;
Window xw;
XTranslateCoordinates( tqt_xdisplay(), tqt_xrootwin(), w, pos.x(), pos.y(), &x, &y, &xw );
- if ( type == EmuMove )
+ if ( type == EmuMove )
{ // motion notify events
XEvent e;
e.type = MotionNotify;
@@ -2227,7 +2227,7 @@ unsigned int Workspace::sendFakedMouseEvent( TQPoint pos, WId w, MouseEmulation
e.xmotion.is_hint = NotifyNormal;
XSendEvent( tqt_xdisplay(), w, TRUE, ButtonMotionMask, &e );
}
- else
+ else
{
XEvent e;
e.type = type == EmuRelease ? ButtonRelease : ButtonPress;
@@ -2243,9 +2243,9 @@ unsigned int Workspace::sendFakedMouseEvent( TQPoint pos, WId w, MouseEmulation
e.xbutton.button = button;
XSendEvent( tqt_xdisplay(), w, TRUE, ButtonPressMask, &e );
- if ( type == EmuPress )
+ if ( type == EmuPress )
{
- switch ( button )
+ switch ( button )
{
case 2:
state |= Button2Mask;
@@ -2258,9 +2258,9 @@ unsigned int Workspace::sendFakedMouseEvent( TQPoint pos, WId w, MouseEmulation
break;
}
}
- else
+ else
{
- switch ( button )
+ switch ( button )
{
case 2:
state &= ~Button2Mask;
@@ -2294,7 +2294,7 @@ bool Workspace::keyPressMouseEmulation( XKeyEvent& ev )
int delta = is_control?1:is_alt?32:8;
TQPoint pos = TQCursor::pos();
- switch ( kc )
+ switch ( kc )
{
case XK_Left:
case XK_KP_Left:
@@ -2339,16 +2339,16 @@ bool Workspace::keyPressMouseEmulation( XKeyEvent& ev )
case XK_Return:
case XK_space:
case XK_KP_Enter:
- case XK_KP_Space:
+ case XK_KP_Space:
{
- if ( !mouse_emulation_state )
+ if ( !mouse_emulation_state )
{
// nothing was pressed, fake a LMB click
mouse_emulation_window = getMouseEmulationWindow();
mouse_emulation_state = sendFakedMouseEvent( pos, mouse_emulation_window, EmuPress, Button1, mouse_emulation_state );
mouse_emulation_state = sendFakedMouseEvent( pos, mouse_emulation_window, EmuRelease, Button1, mouse_emulation_state );
}
- else
+ else
{ // release all
if ( mouse_emulation_state & Button1Mask )
mouse_emulation_state = sendFakedMouseEvent( pos, mouse_emulation_window, EmuRelease, Button1, mouse_emulation_state );
@@ -2534,8 +2534,9 @@ void Workspace::checkActiveBorder(const TQPoint &pos, Time now)
have_borders = true;
}
}
- if( !have_borders )
+ if (!have_borders) {
return;
+ }
// Mouse should not move more than this many pixels
int distance_reset = activation_distance + 10;
@@ -2575,49 +2576,37 @@ void Workspace::checkActiveBorder(const TQPoint &pos, Time now)
active_qtop = pos.y() < activeTop + active_height_quart,
active_qbottom = pos.y() > activeBottom - active_height_quart;
- if (!active_left && !active_right && !active_top && !active_bottom)
- return;
+ int border = ActiveNone;
- kdDebug() << "active border activated "
- << pos.x() << ":" << pos.y() << endl;
+ if (active_left) border |= ActiveLeft;
+ if (active_right) border |= ActiveRight;
+ if (active_top) border |= ActiveTop;
+ if (active_bottom) border |= ActiveBottom;
- ActiveBorder border = ActiveNone;
- if (active_left && active_top) {
- border = ActiveTopLeft;
- }
- else if (active_right && active_top) {
- border = ActiveTopRight;
- }
- else if (active_left && active_bottom) {
- border = ActiveBottomLeft;
+ if (border == ActiveLeft || border == ActiveRight) {
+ if (active_qtop) border |= ActiveTop;
+ if (active_qbottom) border |= ActiveBottom;
}
- else if (active_right && active_bottom) {
- border = ActiveBottomRight;
- }
- else if (active_left) {
- border = active_qtop ? ActiveTopLeft
- : (active_qbottom ? ActiveBottomLeft
- : ActiveLeft);
- }
- else if (active_right) {
- border = active_qtop ? ActiveTopRight
- : (active_qbottom ? ActiveBottomRight
- : ActiveRight);
+
+ else if (border == ActiveTop || border == ActiveBottom) {
+ if (active_qleft) border |= ActiveLeft;
+ if (active_qright) border |= ActiveRight;
}
- else if (active_top) {
- border = active_qleft ? ActiveTopLeft
- : (active_qright ? ActiveTopRight
- : ActiveTop);
+
+ bool border_valid = false;
+ for (int i = 0; i < ACTIVE_BORDER_COUNT; ++i) {
+ if (border == (ActiveBorder)i) {
+ border_valid = true;
+ }
}
- else if (active_bottom) {
- border = active_qleft ? ActiveBottomLeft
- : (active_qright ? ActiveBottomRight
- : ActiveBottom);
+
+ if (!border_valid) {
+ abort();
}
- else abort();
- if( active_windows[border] == None )
+ if (border == ActiveNone || active_windows[border] == None) {
return;
+ }
if ((active_current_border == border) &&
(timestampDiff(active_time_last, now) < treshold_reset) &&
@@ -2625,10 +2614,6 @@ void Workspace::checkActiveBorder(const TQPoint &pos, Time now)
((pos-active_push_point).manhattanLength() < distance_reset))
{
active_time_last = now;
-
- kdDebug() << "time diff between first time and now is: "
- << timestampDiff(active_time_first, now)
- << " vs threshold " << treshold_set << endl;
if (timestampDiff(active_time_first, now) > treshold_set)
{
active_time_last_trigger = now;
@@ -2642,7 +2627,7 @@ void Workspace::checkActiveBorder(const TQPoint &pos, Time now)
if (options->activeBorders() == Options::ActiveSwitchAlways ||
options->activeBorders() == Options::ActiveSwitchOnMove)
{
- activeBorderSwitchDesktop(border, pos);
+ activeBorderSwitchDesktop((ActiveBorder)border, pos);
return; // Don't reset cursor position
}
@@ -2662,7 +2647,7 @@ void Workspace::checkActiveBorder(const TQPoint &pos, Time now)
{
if (!movingClient->isResizable()) return;
movingClient->setActiveBorderMode(ActiveTilingMode);
- movingClient->setActiveBorder(border);
+ movingClient->setActiveBorder((ActiveBorder)border);
movingClient->setActiveBorderMaximizing(true);
}
@@ -2676,7 +2661,7 @@ void Workspace::checkActiveBorder(const TQPoint &pos, Time now)
// Desktop switching
if (options->activeBorders() == Options::ActiveSwitchAlways && isSide)
{
- activeBorderSwitchDesktop(border, pos);
+ activeBorderSwitchDesktop((ActiveBorder)border, pos);
return; // Don't reset cursor position
}
}
@@ -2684,7 +2669,7 @@ void Workspace::checkActiveBorder(const TQPoint &pos, Time now)
}
else
{
- active_current_border = border;
+ active_current_border = (ActiveBorder)border;
active_time_first = now;
active_time_last = now;
active_push_point = pos;
@@ -2693,11 +2678,11 @@ void Workspace::checkActiveBorder(const TQPoint &pos, Time now)
if ((options->activeBorders() == Options::ActiveSwitchAlways && !movingClient) ||
activation_distance < 2)
{
- // reset the pointer to find out whether the user is really pushing
- // (the direction back from which it came, starting from top clockwise)
- const int xdiff[ ACTIVE_BORDER_COUNT ] = { 0, -1, -1, -1, 0, 1, 1, 1 };
- const int ydiff[ ACTIVE_BORDER_COUNT ] = { 1, 1, 0, -1, -1, -1, 0, 1 };
- TQCursor::setPos(pos.x() + xdiff[border], pos.y() + ydiff[border]);
+ // Reset the pointer to find out whether the user is really pushing
+ // (ordered according to enum ActiveBorder minus ActiveNone)
+ const int xdiff[ACTIVE_BORDER_COUNT] = {1, -1, 0, 0, 1, -1, 1, -1};
+ const int ydiff[ACTIVE_BORDER_COUNT] = {0, 0, 1, -1, 1, 1, -1, -1};
+ TQCursor::setPos(pos.x() + xdiff[border - 1], pos.y() + ydiff[border - 1]);
}
}
@@ -3113,8 +3098,8 @@ void Workspace::handleKompmgrOutput( TDEProcess* , char *buffer, int buflen)
proc.start(TDEProcess::DontCare);
}
}
-
-
+
+
void Workspace::setOpacity(unsigned long winId, unsigned int opacityPercent)
{
if (opacityPercent > 100) opacityPercent = 100;