Merge lp:~3v1n0/ido/parent-signals-disconnection-trusty into lp:ido/14.04

Proposed by Marco Trevisan (Treviño)
Status: Merged
Approved by: Marco Trevisan (Treviño)
Approved revision: 187
Merged at revision: 187
Proposed branch: lp:~3v1n0/ido/parent-signals-disconnection-trusty
Merge into: lp:ido/14.04
Diff against target: 136 lines (+48/-8)
2 files modified
debian/changelog (+7/-0)
src/idocalendarmenuitem.c (+41/-8)
To merge this branch: bzr merge lp:~3v1n0/ido/parent-signals-disconnection-trusty
Reviewer Review Type Date Requested Status
Indicator Applet Developers Pending
Review via email: mp+321735@code.launchpad.net

Commit message

IdoCalendarMenuItem: disconnect from parent signals on item destruction

To post a comment you must log in.
Revision history for this message
Marco Trevisan (Treviño) (3v1n0) wrote :

Self-approving as they're the PRs with same code already landed in 16.04 and upstream.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/changelog'
--- debian/changelog 2015-10-21 15:52:32 +0000
+++ debian/changelog 2017-04-03 16:06:58 +0000
@@ -1,3 +1,10 @@
1ido (13.10.0+14.04.20151021-0ubuntu2) UNRELEASED; urgency=medium
2
3 * IdoCalendarMenuItem: disconnect from parent signals on item
4 destruction (LP: #1506427)
5
6 -- Marco Trevisan (Treviño) <mail@3v1n0.net> Mon, 03 Apr 2017 23:58:23 +0800
7
1ido (13.10.0+14.04.20151021-0ubuntu1) trusty; urgency=medium8ido (13.10.0+14.04.20151021-0ubuntu1) trusty; urgency=medium
29
3 * IdoCalendarMenuItem: add crash guard on10 * IdoCalendarMenuItem: add crash guard on
411
=== modified file 'src/idocalendarmenuitem.c'
--- src/idocalendarmenuitem.c 2015-10-15 11:23:52 +0000
+++ src/idocalendarmenuitem.c 2017-04-03 16:06:58 +0000
@@ -28,8 +28,9 @@
28#include "idocalendarmenuitem.h"28#include "idocalendarmenuitem.h"
29#include "config.h"29#include "config.h"
3030
31static void ido_calendar_menu_item_select (GtkMenuItem *item);31static void ido_calendar_menu_item_finalize (GObject *item);
32static void ido_calendar_menu_item_deselect (GtkMenuItem *item);32static void ido_calendar_menu_item_select (GtkMenuItem *item);
33static void ido_calendar_menu_item_deselect (GtkMenuItem *item);
33static gboolean ido_calendar_menu_item_button_release (GtkWidget *widget,34static gboolean ido_calendar_menu_item_button_release (GtkWidget *widget,
34 GdkEventButton *event);35 GdkEventButton *event);
35static gboolean ido_calendar_menu_item_button_press (GtkWidget *widget,36static gboolean ido_calendar_menu_item_button_press (GtkWidget *widget,
@@ -54,6 +55,7 @@
54{55{
55 GtkWidget *box;56 GtkWidget *box;
56 GtkWidget *calendar;57 GtkWidget *calendar;
58 GtkWidget *parent;
57 gboolean selected;59 gboolean selected;
58};60};
5961
@@ -72,6 +74,8 @@
72 widget_class = GTK_WIDGET_CLASS (klass);74 widget_class = GTK_WIDGET_CLASS (klass);
73 menu_item_class = GTK_MENU_ITEM_CLASS (klass);75 menu_item_class = GTK_MENU_ITEM_CLASS (klass);
7476
77 gobject_class->finalize = ido_calendar_menu_item_finalize;
78
75 widget_class->button_release_event = ido_calendar_menu_item_button_release;79 widget_class->button_release_event = ido_calendar_menu_item_button_release;
76 widget_class->button_press_event = ido_calendar_menu_item_button_press;80 widget_class->button_press_event = ido_calendar_menu_item_button_press;
7781
@@ -81,12 +85,12 @@
81 menu_item_class->hide_on_activate = TRUE;85 menu_item_class->hide_on_activate = TRUE;
8286
83 g_type_class_add_private (gobject_class, sizeof (IdoCalendarMenuItemPrivate));87 g_type_class_add_private (gobject_class, sizeof (IdoCalendarMenuItemPrivate));
84 88
85 g_signal_new("month-changed", G_TYPE_FROM_CLASS(klass),89 g_signal_new("month-changed", G_TYPE_FROM_CLASS(klass),
86 G_SIGNAL_RUN_LAST, 0, NULL, NULL,90 G_SIGNAL_RUN_LAST, 0, NULL, NULL,
87 g_cclosure_marshal_VOID__VOID,91 g_cclosure_marshal_VOID__VOID,
88 G_TYPE_NONE, 0);92 G_TYPE_NONE, 0);
89 93
90 g_signal_new("day-selected", G_TYPE_FROM_CLASS(klass),94 g_signal_new("day-selected", G_TYPE_FROM_CLASS(klass),
91 G_SIGNAL_RUN_LAST, 0, NULL, NULL,95 G_SIGNAL_RUN_LAST, 0, NULL, NULL,
92 g_cclosure_marshal_VOID__VOID,96 g_cclosure_marshal_VOID__VOID,
@@ -107,6 +111,8 @@
107 /* Will be disposed automatically */111 /* Will be disposed automatically */
108 priv->calendar = g_object_new (gtk_calendar_get_type (),112 priv->calendar = g_object_new (gtk_calendar_get_type (),
109 NULL);113 NULL);
114 g_object_add_weak_pointer (G_OBJECT (priv->calendar),
115 (gpointer*) &priv->calendar);
110116
111 g_signal_connect (priv->calendar,117 g_signal_connect (priv->calendar,
112 "realize",118 "realize",
@@ -127,6 +133,29 @@
127}133}
128134
129static void135static void
136ido_calendar_menu_item_finalize (GObject *object)
137{
138 IdoCalendarMenuItem *item = IDO_CALENDAR_MENU_ITEM (object);
139 IdoCalendarMenuItemPrivate *priv = IDO_CALENDAR_MENU_ITEM_GET_PRIVATE (item);
140
141 if (G_IS_OBJECT (priv->calendar))
142 {
143 g_object_remove_weak_pointer (G_OBJECT (priv->calendar),
144 (gpointer*) &priv->calendar);
145 g_signal_handlers_disconnect_by_data (priv->calendar, item);
146 }
147
148 if (G_IS_OBJECT (priv->parent))
149 {
150 g_object_remove_weak_pointer (G_OBJECT (priv->parent),
151 (gpointer*) &priv->parent);
152 g_signal_handlers_disconnect_by_data (priv->parent, item);
153 }
154
155 G_OBJECT_CLASS (ido_calendar_menu_item_parent_class)->finalize (object);
156}
157
158static void
130ido_calendar_menu_item_send_focus_change (GtkWidget *widget,159ido_calendar_menu_item_send_focus_change (GtkWidget *widget,
131 gboolean in)160 gboolean in)
132{161{
@@ -258,7 +287,6 @@
258 ido_calendar_menu_item_send_focus_change (GTK_WIDGET (IDO_CALENDAR_MENU_ITEM (item)->priv->calendar), FALSE);287 ido_calendar_menu_item_send_focus_change (GTK_WIDGET (IDO_CALENDAR_MENU_ITEM (item)->priv->calendar), FALSE);
259}288}
260289
261
262static void290static void
263calendar_realized_cb (GtkWidget *widget,291calendar_realized_cb (GtkWidget *widget,
264 IdoCalendarMenuItem *item)292 IdoCalendarMenuItem *item)
@@ -268,11 +296,16 @@
268 gdk_window_raise (gtk_widget_get_window (widget));296 gdk_window_raise (gtk_widget_get_window (widget));
269 }297 }
270298
271 g_signal_connect (gtk_widget_get_parent (GTK_WIDGET (item)),299 item->priv->parent = gtk_widget_get_parent (GTK_WIDGET (item));
300
301 g_object_add_weak_pointer (G_OBJECT (item->priv->parent),
302 (gpointer*) &item->priv->parent);
303
304 g_signal_connect (item->priv->parent,
272 "key-press-event",305 "key-press-event",
273 G_CALLBACK (ido_calendar_menu_item_key_press),306 G_CALLBACK (ido_calendar_menu_item_key_press),
274 item);307 item);
275 308
276 g_signal_connect (item->priv->calendar,309 g_signal_connect (item->priv->calendar,
277 "month-changed",310 "month-changed",
278 G_CALLBACK (calendar_month_changed_cb),311 G_CALLBACK (calendar_month_changed_cb),
@@ -285,7 +318,7 @@
285 "day-selected-double-click",318 "day-selected-double-click",
286 G_CALLBACK (calendar_day_selected_double_click_cb),319 G_CALLBACK (calendar_day_selected_double_click_cb),
287 item);320 item);
288 321
289 ido_calendar_menu_item_send_focus_change (widget, TRUE);322 ido_calendar_menu_item_send_focus_change (widget, TRUE);
290}323}
291324

Subscribers

People subscribed via source and target branches