update window groups properly when activities change
also cleaned up the activity functions a little svn path=/trunk/KDE/kdebase/workspace/; revision=1128678icc-effect-5.14.5
parent
24c7f96416
commit
d44b3f11f1
40
client.cpp
40
client.cpp
|
@ -1497,31 +1497,44 @@ void Client::setOnActivity( const QString &activity, bool enable )
|
|||
return;
|
||||
//check whether we should set it to all activities
|
||||
QStringList newActivitiesList = activityList;
|
||||
QStringList allActivities = KActivityConsumer().availableActivities();
|
||||
if (enable)
|
||||
{
|
||||
QStringList allActivities = KActivityConsumer().availableActivities();
|
||||
if( !allActivities.contains(activity) ) //bogus ID
|
||||
return;
|
||||
newActivitiesList.append(activity);
|
||||
}
|
||||
else
|
||||
newActivitiesList.removeOne(activity);
|
||||
setOnActivities( newActivitiesList );
|
||||
}
|
||||
|
||||
/**
|
||||
* set exactly which activities this client is on
|
||||
*/
|
||||
void Client::setOnActivities( QStringList newActivitiesList )
|
||||
{
|
||||
QStringList allActivities = KActivityConsumer().availableActivities();
|
||||
if( newActivitiesList.size() == allActivities.size() || newActivitiesList.isEmpty() )
|
||||
{
|
||||
setOnAllActivities(true);
|
||||
return;
|
||||
}
|
||||
activityList = newActivitiesList;
|
||||
/* FIXME I don't think I need the transients but what about the rest?
|
||||
if(( was_desk == NET::OnAllDesktops ) != ( desktop == NET::OnAllDesktops ))
|
||||
{ // onAllDesktops changed
|
||||
if( isShown( true ))
|
||||
Notify::raise( isOnAllDesktops() ? Notify::OnAllDesktops : Notify::NotOnAllDesktops );
|
||||
workspace()->updateOnAllDesktopsOfTransients( this );
|
||||
}
|
||||
updateActivities( false );
|
||||
}
|
||||
|
||||
/**
|
||||
* update after activities changed
|
||||
*/
|
||||
void Client::updateActivities( bool includeTransients )
|
||||
{
|
||||
/* FIXME do I need this?
|
||||
if( decoration != NULL )
|
||||
decoration->desktopChange();
|
||||
*/
|
||||
if( includeTransients )
|
||||
workspace()->updateOnAllActivitiesOfTransients( this );
|
||||
workspace()->updateFocusChains( this, Workspace::FocusChainMakeFirst );
|
||||
updateVisibility();
|
||||
updateWindowRules();
|
||||
|
@ -1579,22 +1592,13 @@ void Client::setOnAllActivities( bool on )
|
|||
if( on )
|
||||
{
|
||||
activityList.clear();
|
||||
workspace()->updateOnAllActivitiesOfTransients( this );
|
||||
updateActivities( true );
|
||||
}
|
||||
else
|
||||
{
|
||||
setOnActivity(Workspace::self()->currentActivity(), true);
|
||||
workspace()->updateOnAllActivitiesOfTransients( this );
|
||||
return;
|
||||
}
|
||||
|
||||
//FIXME c&p'd from setOnActivity, I probably need more code and should probably factor it out
|
||||
workspace()->updateFocusChains( this, Workspace::FocusChainMakeFirst );
|
||||
updateVisibility();
|
||||
updateWindowRules();
|
||||
// Update states of all other windows in this group
|
||||
if( clientGroup() )
|
||||
clientGroup()->updateStates( this );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
2
client.h
2
client.h
|
@ -146,6 +146,8 @@ class Client
|
|||
virtual QStringList activities() const;
|
||||
void setOnActivity( const QString &activity, bool enable );
|
||||
void setOnAllActivities( bool set );
|
||||
void setOnActivities( QStringList newActivitiesList );
|
||||
void updateActivities( bool includeTransients );
|
||||
|
||||
/// Is not minimized and not hidden. I.e. normally visible on some virtual desktop.
|
||||
bool isShown( bool shaded_is_shown ) const;
|
||||
|
|
|
@ -297,6 +297,8 @@ void ClientGroup::updateStates( Client* main, Client* only )
|
|||
(*i)->setDesktop( main->desktop() );
|
||||
if( (*i)->isOnAllDesktops() != main->isOnAllDesktops() )
|
||||
(*i)->setOnAllDesktops( main->isOnAllDesktops() );
|
||||
if( (*i)->activities() != main->activities() )
|
||||
(*i)->setOnActivities( main->activities() );
|
||||
if( (*i)->keepAbove() != main->keepAbove() )
|
||||
(*i)->setKeepAbove( main->keepAbove() );
|
||||
if( (*i)->keepBelow() != main->keepBelow() )
|
||||
|
|
Loading…
Reference in New Issue