Bug 99800 - fade between opacity changes> fade from zero after window move
Summary: fade between opacity changes> fade from zero after window move
Status: RESOLVED FIXED
Alias: None
Product: kwin
Classification: Plasma
Component: general (other bugs)
Version First Reported In: unspecified
Platform: unspecified Linux
: NOR normal
Target Milestone: ---
Assignee: KWin default assignee
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-02-19 17:42 UTC by Mircea Bardac
Modified: 2005-02-21 13:39 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Mircea Bardac 2005-02-19 17:42:28 UTC
Version:            (using KDE KDE 3.3.92)
Installed from:    Unlisted Binary Package

Composite extension: enabled
Use translucency/shadows: checked
Fade between opacity changes: checked 

Moving a window would:
1. fade out (to A%)
2. move
3. fade in, but not from A% to 100%, but from 0% to 100%.

This is extremely annoying since it creates a flickering effect.
Moving might not be the only situation where "fade between changes" does not behave properly.
Comment 1 Thomas Lübking 2005-02-19 20:25:19 UTC
can't reproduce
there was some error on the opacity change fades in kompmgr, but that should be fixed.
do you resolve this bug with the latest kompmgr cvs?
Comment 2 Mircea Bardac 2005-02-19 22:01:33 UTC
Err.. haven't tested the CVS. I use the binary comming in my distro's repos.

Might take some time building kcompmgr, mostly because I don't know where to get it. 

Managed to get it (just kdebase/kwin/kompmgr), but.. it doesn't compile separately... too bad...
Comment 3 Thomas Lübking 2005-02-19 22:33:20 UTC
CVS commit by luebking: 



BUGS:99800
fixes problem with missing fade deques on unshadowed windows


  M +17 -13    kompmgr.c   1.21


--- kdebase/kwin/kompmgr/kompmgr.c  #1.20:1.21
@@ -418,8 +418,8 @@ run_fades (Display *dpy)
                         w->shadow = None;
                         w->extents = win_extents(dpy, w);
+                }
                         /* Must do this last as it might destroy f->w in callbacks */
                         if (need_dequeue)
                                 dequeue_fade (dpy, f);
-                }
                 determine_mode (dpy, w);
         }
@@ -2535,5 +2535,5 @@ main (int argc, char **argv)
         }
 
-        fprintf(stderr, "Started");
+        fprintf(stderr, "Started\n");
         /* get atoms */
         shadowAtom = XInternAtom (dpy, SHADOW_PROP, False);
@@ -2741,8 +2741,8 @@ main (int argc, char **argv)
                                                 /* reset mode and redraw window */
                                                 win * w = find_win(dpy, ev.xproperty.window);
-                                                unsigned int oldShadowSize = w->shadowSize;
-                                                unsigned int tmp;
                                                 if (w)
                                                 {
+                                                    unsigned int tmp;
+                                                    unsigned int oldShadowSize = w->shadowSize;
                                                         if (ev.xproperty.atom == opacityAtom)
                                                         {
@@ -2752,6 +2752,5 @@ main (int argc, char **argv)
                                                                 if (fadeTrans)
                                                                 {
-                                                                        set_fade (dpy, w, w->opacity*1.0/OPAQUE, (tmp*1.0)/OPAQUE,
-                                            fade_out_step, 0, False, True, True, False);
+                                                                    set_fade (dpy, w, w->opacity*1.0/OPAQUE, (tmp*1.0)/OPAQUE, fade_out_step, 0, False, False, True, False);
                                     break;
                                     }
@@ -2765,4 +2764,6 @@ main (int argc, char **argv)
                                     break; /*skip if shadow does not change*/
                                 w->shadowSize = tmp;
+/*                                if (w->isInFade)
+                                    break;*/
                                 }
                             if (w->shadow)
@@ -2786,5 +2787,8 @@ main (int argc, char **argv)
             default:
                 if (ev.type == damage_event + XDamageNotify)
+                {
+                    /*                     printf("damaging win: %u\n",ev.xany.window);*/
                     damage_win (dpy, (XDamageNotifyEvent *) &ev);
+                }
                 else if (ev.type == shapeEvent)
                 {


Comment 4 Mircea Bardac 2005-02-21 13:39:53 UTC
After using the last conditions presented in bug http://bugs.kde.org/show_bug.cgi?id=99841 , I've noticed that fading in (after a window was moved) is not done from 0%, but from inactive% - but I guess the patch above covered this also.

Just wanted to add this too, to correct the initial bug description.