diff options
Diffstat (limited to 'twin/workspace.cpp')
| -rw-r--r-- | twin/workspace.cpp | 205 | 
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;  | 
