Merge lp:~victored/granite/lp-1062967 into lp:~elementary-pantheon/granite/granite

Proposed by Victor Martinez
Status: Merged
Merged at revision: 424
Proposed branch: lp:~victored/granite/lp-1062967
Merge into: lp:~elementary-pantheon/granite/granite
Diff against target: 40 lines (+12/-10)
1 file modified
lib/Widgets/DecoratedWindow.vala (+12/-10)
To merge this branch: bzr merge lp:~victored/granite/lp-1062967
Reviewer Review Type Date Requested Status
Tom Beckmann (community) Approve
Review via email: mp+130868@code.launchpad.net

Commit message

[Widgets.DecoratedWindow] When the close button (X) is clicked, don't propagate the button-release event to prevent the widgets underneath the window from receiving it. This revision also fixes a small memory leak when calling the delete-event. Fixes lp:1062967

Description of the change

Avoid propagating DecoratedWindow's button-release events to the widgets underneath. Fixes bug #1062967

Thanks in advance for the review :)

To post a comment you must log in.
lp:~victored/granite/lp-1062967 updated
420. By Victor Martinez

Fix crash. GtkWindow doesn't implement button_release_event

Revision history for this message
Tom Beckmann (tombeckmann) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/Widgets/DecoratedWindow.vala'
--- lib/Widgets/DecoratedWindow.vala 2012-09-12 03:23:30 +0000
+++ lib/Widgets/DecoratedWindow.vala 2012-10-23 02:55:23 +0000
@@ -121,7 +121,6 @@
121121
122 this.add_events (Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.POINTER_MOTION_MASK);122 this.add_events (Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.POINTER_MOTION_MASK);
123 this.motion_notify_event.connect (on_motion_notify);123 this.motion_notify_event.connect (on_motion_notify);
124 this.button_press_event.connect (on_button_press);
125 this.delete_event.connect_after (on_delete_event);124 this.delete_event.connect_after (on_delete_event);
126 this.size_allocate.connect (on_size_allocate);125 this.size_allocate.connect (on_size_allocate);
127 this.draw.connect (draw_widget);126 this.draw.connect (draw_widget);
@@ -188,16 +187,19 @@
188 return true;187 return true;
189 }188 }
190189
191 private bool on_button_press (Gdk.EventButton e) {190 public override bool button_press_event (Gdk.EventButton e) {
192 if (coords_over_close_button (e.x, e.y)) {191 if (coords_over_close_button (e.x, e.y)) {
193 var event = (Gdk.Event*)(&e);192 var event = (Gdk.Event*) (&e);
194 this.delete_event (event->copy ().any);193 this.delete_event (event->any);
195 }
196 else {
197 this.begin_move_drag ((int)e.button, (int)e.x_root, (int)e.y_root, e.time);
198 }
199
200 return true;194 return true;
195 }
196
197 this.begin_move_drag ((int) e.button, (int) e.x_root, (int) e.y_root, e.time);
198 return base.button_press_event (e);
199 }
200
201 public override bool button_release_event (Gdk.EventButton e) {
202 return coords_over_close_button (e.x, e.y);
201 }203 }
202204
203 private bool coords_over_close_button (double x, double y) {205 private bool coords_over_close_button (double x, double y) {

Subscribers

People subscribed via source and target branches