~ubuntu-branches/ubuntu/precise/compiz/precise

« back to all changes in this revision

Viewing changes to debian/patches/fix_gtk_w_d_crash.patch

  • Committer: Package Import Robot
  • Author(s): Didier Roche, Łukasz 'sil2100' Zemczak, Didier Roche
  • Date: 2012-03-12 10:22:10 UTC
  • mfrom: (0.168.15)
  • Revision ID: package-import@ubuntu.com-20120312102210-e248pzbccr7r2tdq
Tags: 1:0.9.7.0+bzr3035-0ubuntu1
[ Łukasz 'sil2100' Zemczak ]
* New upstream snapshot:
  - Fix gtk-window-decorator crash upon demaximizing a window (LP: #930071)
  - Fix core keybindings (LP: #930412)
  - Fixes compiz crash with SIGSEGV on shutdown (LP: #931283)
  - Plugins can't tell the difference between a key-tap and modifier
    key-release (LP: #925293)
  - compiz-core r3001 (and 3002) ftbfs (LP: #933226)
  - Semi-maximized windows have no shadow or frame (LP: #924736)
  - Untranslated strings in gtk-window-decorator (LP: #780505)
  - Initialize the _NET_WM_STATE_FOCUSED (LP: #932087)
  - [regression] Customized shortcuts don't work (LP: #931927)
  - Window stacking problem (LP: #936675)
  - Quickly demaximized windows can receive maximized window decorations if 
    they were initially maximized (LP: #936778)
  - Maximized windows do not get shadows at all (LP: #936774)
  - [regression] Launcher, top panel and keyboard un-responsive after using 
    any Super-x shortcut (LP: #934058)
  - No draggable border if mutter isn't installed (LP: #936781)
  - Fix compiz crash with SIGSEGV in XDefineCursor() (LP: #936487)
  - Fixes memory leak at DecorWindow::updateSwitcher() (LP: #940115)
  - Unresolved symbols in plugins cause compiz to exit (LP: #938478)
  - Fix compiz spending about 51% of its CPU time in CompRegion 
    construction/destruction (LP: #940139)
  - Fix Conditional jump or move depends on uninitialised value(s) in 
    decor_match_pixmap (LP: #940066)
  - Fix 'show desktop' behaviour (LP: #871801)
  - Tweak algorithm used to cast shadows on maximized windows (LP: #936784)
  - "Svg" and "Png" should be "SVG and "PNG" (LP: #942890)
  - Fix invalid memory usage after free() in DecorWindow (LP: #943116)
  - Fix alt + F10 (LP: #943223)
* Removed cherry-picked patches
* debian/patches/fix_944631.patch:
  - Always replay the keyboard if something was grabbed and didn't trigger 
    an action and don't trigger actions which aren't added accidentally 
    (LP: #943612) (LP: #944631)
* debian/patches/fix_923683.patch:
  - Backports a patch which prevents the shift race condition

[ Didier Roche ]
* debian/patches/fix_alt_pressing.patch:
  - Patch from ddv to fix all the regressions with the alt key fix and other
    (LP: #943851, #945373)
  - Fix Quicklist are not showing if right-clicking a launcher icon in Expo
    mode if triggered by Super + S (LP: #944979)
* debian/patches/fix_806255.patch:
  - Unity/compiz intercepts keystrokes from grabbed windows (LP: #806255)
* debian/patches/fix_943194.patch:
  - second part for the alt key fix (LP: #943194)
* debian/patches/additional_alt_tapping_fix.patch:
  - again another alt tapping related fix for some regressions from the
    previous branch. Taken from "tapping-panacea" upstream branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
=== modified file 'gtk/window-decorator/events.c'
2
 
--- a/gtk/window-decorator/events.c     2011-10-13 12:22:14 +0000
3
 
+++ b/gtk/window-decorator/events.c     2012-02-10 10:30:27 +0000
4
 
@@ -885,14 +885,12 @@
5
 
                   GdkEvent  *event,
6
 
                   gpointer  data)
7
 
 {
8
 
-    Display    *xdisplay;
9
 
     GdkDisplay *gdkdisplay;
10
 
     XEvent     *xevent = gdkxevent;
11
 
     gulong     xid = 0;
12
 
     Window     select = 0;
13
 
 
14
 
     gdkdisplay = gdk_display_get_default ();
15
 
-    xdisplay   = GDK_DISPLAY_XDISPLAY (gdkdisplay);
16
 
 
17
 
     switch (xevent->type) {
18
 
     case CreateNotify:
19
 
@@ -1018,13 +1016,7 @@
20
 
                    }
21
 
                    else
22
 
                    {
23
 
-                       gwd_decor_frame_unref (d->frame);
24
 
-                       d->frame = NULL;
25
 
-
26
 
-                       gdk_error_trap_push ();
27
 
-                       XDeleteProperty (xdisplay, xid, win_decor_atom);
28
 
-                       gdk_display_sync (gdk_display_get_default ());
29
 
-                       gdk_error_trap_pop ();
30
 
+                       remove_frame_window (win);
31
 
                    }
32
 
                }
33
 
            }
34
 
 
35
 
=== modified file 'gtk/window-decorator/wnck.c'
36
 
--- a/gtk/window-decorator/wnck.c       2011-10-13 09:53:38 +0000
37
 
+++ b/gtk/window-decorator/wnck.c       2012-02-10 10:30:27 +0000
38
 
@@ -588,25 +588,28 @@
39
 
        if (d && d->pixmap)
40
 
        {
41
 
            d->active = wnck_window_is_active (win);
42
 
+
43
 
+            decor_frame_t *frame = d->decorated ? d->frame : gwd_get_decor_frame (get_frame_type (win));
44
 
+
45
 
            if ((d->state & META_MAXIMIZED) == META_MAXIMIZED)
46
 
            {
47
 
                if (!d->frame_window)
48
 
                {
49
 
                   if (d->active)
50
 
                   {
51
 
-                      d->context = &d->frame->max_window_context_active;
52
 
-                      d->shadow  = d->frame->max_border_shadow_active;
53
 
+                      d->context = &frame->max_window_context_active;
54
 
+                      d->shadow  = frame->max_border_shadow_active;
55
 
                   }
56
 
                   else
57
 
                   {
58
 
-                      d->context = &d->frame->max_window_context_inactive;
59
 
-                      d->shadow  = d->frame->max_border_shadow_inactive;
60
 
+                      d->context = &frame->max_window_context_inactive;
61
 
+                      d->shadow  = frame->max_border_shadow_inactive;
62
 
                   }
63
 
-                }
64
 
-               else
65
 
-              {
66
 
+                }
67
 
+                else
68
 
+                {
69
 
                   d->shadow  = d->frame->max_border_no_shadow;
70
 
-              }
71
 
+                }
72
 
            }
73
 
            else
74
 
            {
75
 
@@ -614,13 +617,13 @@
76
 
               {
77
 
                   if (d->active)
78
 
                   {
79
 
-                      d->context = &d->frame->window_context_active;
80
 
-                      d->shadow  = d->frame->border_shadow_active;
81
 
+                      d->context = &frame->window_context_active;
82
 
+                      d->shadow  = frame->border_shadow_active;
83
 
                   }
84
 
                   else
85
 
                   {
86
 
-                      d->context = &d->frame->window_context_inactive;
87
 
-                      d->shadow  = d->frame->border_shadow_inactive;
88
 
+                      d->context = &frame->window_context_inactive;
89
 
+                      d->shadow  = frame->border_shadow_inactive;
90
 
                   }
91
 
               }
92
 
               else
93
 
@@ -629,13 +632,16 @@
94
 
               }
95
 
            }
96
 
 
97
 
+            if (!d->decorated)
98
 
+                gwd_decor_frame_unref (frame);
99
 
+
100
 
            /* We need to update the decoration size here
101
 
            * since the shadow size might have changed and
102
 
            * in that case the decoration will be redrawn,
103
 
            * however if the shadow size doesn't change
104
 
            * then we need to redraw the decoration anyways
105
 
            * since the image would have changed */
106
 
-           if (!update_window_decoration_size (d->win))
107
 
+           if (!update_window_decoration_size (d->win) && d->decorated)
108
 
               queue_decor_draw (d);
109
 
 
110
 
        }
111
 
@@ -649,24 +655,26 @@
112
 
        {
113
 
            d->active = wnck_window_is_active (win);
114
 
 
115
 
+            decor_frame_t *frame = d->decorated ? d->frame : gwd_get_decor_frame (get_frame_type (win));
116
 
+
117
 
            if ((d->state & META_MAXIMIZED) == META_MAXIMIZED)
118
 
            {
119
 
                if (!d->frame_window)
120
 
                {
121
 
                   if (d->active)
122
 
                   {
123
 
-                      d->context = &d->frame->max_window_context_active;
124
 
-                      d->shadow  = d->frame->max_border_shadow_active;
125
 
+                      d->context = &frame->max_window_context_active;
126
 
+                      d->shadow  = frame->max_border_shadow_active;
127
 
                   }
128
 
                   else
129
 
                   {
130
 
-                      d->context = &d->frame->max_window_context_inactive;
131
 
-                      d->shadow  = d->frame->max_border_shadow_inactive;
132
 
+                      d->context = &frame->max_window_context_inactive;
133
 
+                      d->shadow  = frame->max_border_shadow_inactive;
134
 
                   }
135
 
                }
136
 
                else
137
 
                {
138
 
-                  d->shadow  = d->frame->max_border_no_shadow;
139
 
+                  d->shadow  = frame->max_border_no_shadow;
140
 
                }
141
 
            }
142
 
            else
143
 
@@ -675,28 +683,31 @@
144
 
                {
145
 
                   if (d->active)
146
 
                   {
147
 
-                      d->context = &d->frame->window_context_active;
148
 
-                      d->shadow  = d->frame->border_shadow_active;
149
 
+                      d->context = &frame->window_context_active;
150
 
+                      d->shadow  = frame->border_shadow_active;
151
 
                   }
152
 
                   else
153
 
                   {
154
 
-                      d->context = &d->frame->window_context_inactive;
155
 
-                      d->shadow  = d->frame->border_shadow_inactive;
156
 
+                      d->context = &frame->window_context_inactive;
157
 
+                      d->shadow  = frame->border_shadow_inactive;
158
 
                   }
159
 
                }
160
 
                else
161
 
                {
162
 
-                  d->shadow =  d->frame->border_no_shadow;
163
 
+                  d->shadow =  frame->border_no_shadow;
164
 
                }
165
 
            }
166
 
 
167
 
+            if (!d->decorated)
168
 
+                gwd_decor_frame_unref (frame);
169
 
+
170
 
            /* We need to update the decoration size here
171
 
            * since the shadow size might have changed and
172
 
            * in that case the decoration will be redrawn,
173
 
            * however if the shadow size doesn't change
174
 
            * then we need to redraw the decoration anyways
175
 
            * since the image would have changed */
176
 
-           if (!update_window_decoration_size (d->win))
177
 
+           if (!update_window_decoration_size (d->win) && d->decorated)
178
 
               queue_decor_draw (d);
179
 
 
180
 
        }
181