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

Proposed by Marco Trevisan (Treviño)
Status: Merged
Approved by: Andrea Azzarone
Approved revision: 198
Merged at revision: 197
Proposed branch: lp:~3v1n0/ido/parent-signals-disconnection
Merge into: lp:ido/16.04
Diff against target: 121 lines (+41/-8)
1 file modified
src/idocalendarmenuitem.c (+41/-8)
To merge this branch: bzr merge lp:~3v1n0/ido/parent-signals-disconnection
Reviewer Review Type Date Requested Status
Andrea Azzarone (community) Approve
Review via email: mp+309620@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
Andrea Azzarone (azzar1) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/idocalendarmenuitem.c'
2--- src/idocalendarmenuitem.c 2015-07-22 14:00:57 +0000
3+++ src/idocalendarmenuitem.c 2016-10-28 22:38:38 +0000
4@@ -28,8 +28,9 @@
5 #include "idocalendarmenuitem.h"
6 #include "config.h"
7
8-static void ido_calendar_menu_item_select (GtkMenuItem *item);
9-static void ido_calendar_menu_item_deselect (GtkMenuItem *item);
10+static void ido_calendar_menu_item_finalize (GObject *item);
11+static void ido_calendar_menu_item_select (GtkMenuItem *item);
12+static void ido_calendar_menu_item_deselect (GtkMenuItem *item);
13 static gboolean ido_calendar_menu_item_button_release (GtkWidget *widget,
14 GdkEventButton *event);
15 static gboolean ido_calendar_menu_item_button_press (GtkWidget *widget,
16@@ -54,6 +55,7 @@
17 {
18 GtkWidget *box;
19 GtkWidget *calendar;
20+ GtkWidget *parent;
21 gboolean selected;
22 };
23
24@@ -72,6 +74,8 @@
25 widget_class = GTK_WIDGET_CLASS (klass);
26 menu_item_class = GTK_MENU_ITEM_CLASS (klass);
27
28+ gobject_class->finalize = ido_calendar_menu_item_finalize;
29+
30 widget_class->button_release_event = ido_calendar_menu_item_button_release;
31 widget_class->button_press_event = ido_calendar_menu_item_button_press;
32
33@@ -81,12 +85,12 @@
34 menu_item_class->hide_on_activate = TRUE;
35
36 g_type_class_add_private (gobject_class, sizeof (IdoCalendarMenuItemPrivate));
37-
38+
39 g_signal_new("month-changed", G_TYPE_FROM_CLASS(klass),
40 G_SIGNAL_RUN_LAST, 0, NULL, NULL,
41 g_cclosure_marshal_VOID__VOID,
42 G_TYPE_NONE, 0);
43-
44+
45 g_signal_new("day-selected", G_TYPE_FROM_CLASS(klass),
46 G_SIGNAL_RUN_LAST, 0, NULL, NULL,
47 g_cclosure_marshal_VOID__VOID,
48@@ -107,6 +111,8 @@
49 /* Will be disposed automatically */
50 priv->calendar = g_object_new (gtk_calendar_get_type (),
51 NULL);
52+ g_object_add_weak_pointer (G_OBJECT (priv->calendar),
53+ (gpointer*) &priv->calendar);
54
55 g_signal_connect (priv->calendar,
56 "realize",
57@@ -127,6 +133,29 @@
58 }
59
60 static void
61+ido_calendar_menu_item_finalize (GObject *object)
62+{
63+ IdoCalendarMenuItem *item = IDO_CALENDAR_MENU_ITEM (object);
64+ IdoCalendarMenuItemPrivate *priv = IDO_CALENDAR_MENU_ITEM_GET_PRIVATE (item);
65+
66+ if (G_IS_OBJECT (priv->calendar))
67+ {
68+ g_object_remove_weak_pointer (G_OBJECT (priv->calendar),
69+ (gpointer*) &priv->calendar);
70+ g_signal_handlers_disconnect_by_data (priv->calendar, item);
71+ }
72+
73+ if (G_IS_OBJECT (priv->parent))
74+ {
75+ g_object_remove_weak_pointer (G_OBJECT (priv->parent),
76+ (gpointer*) &priv->parent);
77+ g_signal_handlers_disconnect_by_data (priv->parent, item);
78+ }
79+
80+ G_OBJECT_CLASS (ido_calendar_menu_item_parent_class)->finalize (object);
81+}
82+
83+static void
84 ido_calendar_menu_item_send_focus_change (GtkWidget *widget,
85 gboolean in)
86 {
87@@ -258,7 +287,6 @@
88 ido_calendar_menu_item_send_focus_change (GTK_WIDGET (IDO_CALENDAR_MENU_ITEM (item)->priv->calendar), FALSE);
89 }
90
91-
92 static void
93 calendar_realized_cb (GtkWidget *widget,
94 IdoCalendarMenuItem *item)
95@@ -268,11 +296,16 @@
96 gdk_window_raise (gtk_widget_get_window (widget));
97 }
98
99- g_signal_connect (gtk_widget_get_parent (GTK_WIDGET (item)),
100+ item->priv->parent = gtk_widget_get_parent (GTK_WIDGET (item));
101+
102+ g_object_add_weak_pointer (G_OBJECT (item->priv->parent),
103+ (gpointer*) &item->priv->parent);
104+
105+ g_signal_connect (item->priv->parent,
106 "key-press-event",
107 G_CALLBACK (ido_calendar_menu_item_key_press),
108 item);
109-
110+
111 g_signal_connect (item->priv->calendar,
112 "month-changed",
113 G_CALLBACK (calendar_month_changed_cb),
114@@ -285,7 +318,7 @@
115 "day-selected-double-click",
116 G_CALLBACK (calendar_day_selected_double_click_cb),
117 item);
118-
119+
120 ido_calendar_menu_item_send_focus_change (widget, TRUE);
121 }
122

Subscribers

People subscribed via source and target branches