[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    Re: KDE/kdebase/workspace
From:       Chani <chanika () gmail ! com>
Date:       2010-12-16 20:29:19
Message-ID: AANLkTi=gHr0zCW9S+PKqLzFuM==b=3i9gW=gALbfJt1R () mail ! gmail ! com
[Download RAW message or body]

sorry, git-svn fail. :(

this was actually several commits on two subjects, and should have
shown up as such; I'm not sure why it didn't.
most of the commits were for better showing of SessionInteract
windows; one was for allowing 'ALL' to mean "on all activities" in the
x property (as opposed to an empty string, which now only means "this
window hasn't thought about it yet" :)

here's the git log for the branch (which had itself suffered a merge
accident, so it's a bit confused):

commit aff3b4c38f086f3abe9b01178e297189cc4edf65
Author: Chani Armitage <chanika@gmail.com>
Date:   Thu Dec 16 21:03:11 2010 +0100

    show the parent of the sessioninteract window too.

    it's usually the window with the unsaved document the dialog is asking
    about.

commit 6830301fc03e52a15718fec4a4615f4729b13b20
Author: Chani Armitage <chanika@gmail.com>
Date:   Thu Dec 16 12:01:31 2010 +0100

    incorporate the 'allow' thing more nicely.

    it still won't change activities to satisfy that; I'm not convinced it
    should.

commit 0fbc44e8a79fdb4f381b13f350d821c29601a0ef
Merge: f9f179b 5a02e44
Author: Chani Armitage <chanika@gmail.com>
Date:   Thu Dec 16 11:19:39 2010 +0100

    Merge branches 'allactivities' and 'kwin-wip' into allactivities

    Conflicts:
        kwin/client.cpp
        kwin/client.h

commit f9f179b4a0c9d2f8a2eb40eb0c858475e123ee01
Author: Chani Armitage <chanika@gmail.com>
Date:   Thu Dec 16 11:13:14 2010 +0100

    allow windows to be explicitly on all activities, or have no preference.

commit 5a02e448d49755873651a5341c73f517e2ee0217
Author: Chani Armitage <chanika@gmail.com>
Date:   Mon Dec 13 11:59:28 2010 +0100

    unfinished stuff for fixing the sessioninteract request



On Thu, Dec 16, 2010 at 9:14 PM, Chani Armitage <chanika@gmail.com> wrote:
> SVN commit 1207069 by chani:
> 
> Merge branch 'allactivities'
> 
> M  +33 -3     kwin/client.cpp
> M  +6 -0      kwin/client.h
> M  +26 -3     kwin/manage.cpp
> M  +10 -0     kwin/sm.cpp
> M  +0 -5      kwin/workspace.h
> M  +1 -1      libs/taskmanager/task.cpp
> 
> 
> --- trunk/KDE/kdebase/workspace/kwin/client.cpp #1207068:1207069
> @@ -128,6 +128,8 @@
> , demandAttentionKNotifyTimer( NULL )
> , paintRedirector( 0 )
> , electricMaximizing( false )
> +    , activitiesDefined( false )
> +    , needsSessionInteract(false)
> { // TODO: Do all as initialization
> 
> scriptCache = new QHash<QScriptEngine*, ClientResolution>();
> @@ -1607,6 +1609,9 @@
> */
> int Client::desktop() const
> {
> +    if (needsSessionInteract) {
> +        return NET::OnAllDesktops;
> +    }
> return desk;
> }
> 
> @@ -1617,6 +1622,9 @@
> */
> QStringList Client::activities() const
> {
> +    if (needsSessionInteract) {
> +        return QStringList();
> +    }
> return activityList;
> }
> 
> @@ -1646,7 +1654,8 @@
> if( on )
> {
> activityList.clear();
> -        XDeleteProperty( display(), window(), atoms->activities );
> +        XChangeProperty(display(), window(), atoms->activities, XA_STRING, 8,
> +                        PropModeReplace, (const unsigned char *)"ALL", 3);
> updateActivities( true );
> }
> else
> @@ -2247,9 +2256,25 @@
> {
> QStringList newActivitiesList;
> QByteArray prop = getStringProperty(window(), atoms->activities);
> -    if ( ! prop.isEmpty() )
> +    activitiesDefined = !prop.isEmpty();
> +    if (prop == "ALL") {
> +        //copied from setOnAllActivities to avoid a redundant XChangeProperty.
> +        if (!activityList.isEmpty()) {
> +            activityList.clear();
> +            updateActivities( true );
> +        }
> +        return;
> +    }
> +    if (prop.isEmpty()) {
> +        //note: this makes it *act* like it's on all activities but doesn't set \
> the property to 'ALL' +        if (!activityList.isEmpty()) {
> +            activityList.clear();
> +            updateActivities( true );
> +        }
> +        return;
> +    }
> +
> newActivitiesList = QString(prop).split(',');
> -
> if (newActivitiesList == activityList)
> return; //expected change, it's ok.
> 
> @@ -2272,6 +2297,11 @@
> setOnActivities( newActivitiesList );
> }
> 
> +void Client::setSessionInteract(bool needed)
> +{
> +    needsSessionInteract = needed;
> +}
> +
> } // namespace
> 
> #include "client.moc"
> --- trunk/KDE/kdebase/workspace/kwin/client.h #1207068:1207069
> @@ -400,6 +400,9 @@
> 
> TabBox::TabBoxClientImpl* tabBoxClient() const { return m_tabBoxClient; }
> 
> +        //sets whether the client should be treated as a SessionInteract window
> +        void setSessionInteract(bool needed);
> +
> private slots:
> void autoRaise();
> void shadeHover();
> @@ -694,6 +697,9 @@
> friend class SWrapper::Client;
> 
> void checkActivities();
> +        bool activitiesDefined; //whether the x property was actually set
> +
> +        bool needsSessionInteract;
> };
> 
> /**
> --- trunk/KDE/kdebase/workspace/kwin/manage.cpp #1207068:1207069
> @@ -207,7 +207,7 @@
> desk = info->desktop(); // Window had the initial desktop property, force it
> if( desktop() == 0 && asn_valid && asn_data.desktop() != 0 )
> desk = asn_data.desktop();
> -        if (!isMapped && !noborder && isNormalWindow() && isOnAllActivities()) {
> +        if (!isMapped && !noborder && isNormalWindow() && !activitiesDefined) {
> //a new, regular window, when we're not recovering from a crash,
> //and it hasn't got an activity. let's try giving it the current one.
> //TODO: decide whether to keep this before the 4.6 release
> @@ -551,10 +551,33 @@
> else
> allow = workspace()->allowClientActivation( this, userTime(), false );
> 
> -        // If session saving, force showing new windows (i.e. "save file?" dialogs \
> etc.) +        if (!(isMapped || session)) {
> +            if (workspace()->sessionSaving()) {
> +                /*
> +                 * If we get a new window during session saving, we assume it's \
> some 'save file?' dialog +                 * which the user really needs to see (to \
> know why logout's stalled). +                 * We also assume it'll be destroyed \
> when it's done - we never unset this flag. +                 *
> +                 * Given the current session management protocol, I can't see a \
> nicer way of doing this. +                 * Someday I'd like to see a protocol \
> that tells the windowmanager who's doing SessionInteract. +                 */
> +                needsSessionInteract = true;
> +                //show the parent too
> +                ClientList mainclients = mainClients();
> +                for( ClientList::ConstIterator it = mainclients.constBegin();
> +                    it != mainclients.constEnd(); ++it ) {
> +                    (*it)->setSessionInteract(true);
> +                }
> +            } else if (allow) {
> // also force if activation is allowed
> -        if( !isOnCurrentDesktop() && !isMapped && !session && ( allow || \
> workspace()->sessionSaving() )) +                if( !isOnCurrentDesktop() ) {
> workspace()->setCurrentDesktop( desktop() );
> +                }
> +                /*if (!isOnCurrentActivity()) {
> +                    workspace()->setCurrentActivity( activities().first() );
> +                } FIXME no such method*/
> +            }
> +        }
> 
> bool belongs_to_desktop = false;
> for( ClientList::ConstIterator it = group()->members().constBegin();
> --- trunk/KDE/kdebase/workspace/kwin/sm.cpp #1207068:1207069
> @@ -134,6 +134,7 @@
> 
> void Workspace::storeClient( KConfigGroup &cg, int num, Client *c )
> {
> +    c->setSessionInteract(false); //make sure we get the real values
> QString n = QString::number(num);
> cg.writeEntry( QString("sessionId")+n, c->sessionId().constData() );
> cg.writeEntry( QString("windowRole")+n, c->windowRole().constData() );
> @@ -613,6 +614,15 @@
> IceProcessMessages( SmcGetIceConnection( conn ), 0, 0 );
> }
> 
> +void Workspace::sessionSaveDone()
> +{
> +    session_saving = false;
> +    //remove sessionInteract flag from all clients
> +    foreach( Client* c, clients ) {
> +        c->setSessionInteract(false);
> +    }
> +}
> +
> } // namespace
> 
> #include "sm.moc"
> --- trunk/KDE/kdebase/workspace/kwin/workspace.h #1207068:1207069
> @@ -1246,11 +1246,6 @@
> session_saving = true;
> }
> 
> -inline void Workspace::sessionSaveDone()
> -    {
> -    session_saving = false;
> -    }
> -
> inline bool Workspace::sessionSaving() const
> {
> return session_saving;
> --- trunk/KDE/kdebase/workspace/libs/taskmanager/task.cpp #1207068:1207069
> @@ -679,7 +679,7 @@
> unsigned long properties[] = { 0, NET::WM2Activities };
> NETWinInfo info(QX11Info::display(), d->win, QX11Info::appRootWindow(), properties, \
> 2); QString result(info.activities());
> -    if (result.isEmpty()) {
> +    if (result.isEmpty() || result == "ALL") {
> d->activities.clear();
> } else {
> d->activities = result.split(',');
> 



-- 
This message brought to you by evyl bananas and the number 3.
www.chani3.com


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic