diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-07-19 16:41:23 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-09-12 17:49:25 +0800 |
commit | b8863f14395f0e9e3201dd8bd2ffee938e7a50c9 (patch) | |
tree | d3cb269fb6527ab034532c5efacff73a121d8b69 /src/empathy-roster-window.c | |
parent | c338d01cc24c9e64789615fffa38d0b266543c65 (diff) | |
download | gsoc2013-empathy-b8863f14395f0e9e3201dd8bd2ffee938e7a50c9.tar gsoc2013-empathy-b8863f14395f0e9e3201dd8bd2ffee938e7a50c9.tar.gz gsoc2013-empathy-b8863f14395f0e9e3201dd8bd2ffee938e7a50c9.tar.bz2 gsoc2013-empathy-b8863f14395f0e9e3201dd8bd2ffee938e7a50c9.tar.lz gsoc2013-empathy-b8863f14395f0e9e3201dd8bd2ffee938e7a50c9.tar.xz gsoc2013-empathy-b8863f14395f0e9e3201dd8bd2ffee938e7a50c9.tar.zst gsoc2013-empathy-b8863f14395f0e9e3201dd8bd2ffee938e7a50c9.zip |
roster-window: unprepare the individual manager before destroying the roster
https://bugzilla.gnome.org/show_bug.cgi?id=660128
Diffstat (limited to 'src/empathy-roster-window.c')
-rw-r--r-- | src/empathy-roster-window.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/empathy-roster-window.c b/src/empathy-roster-window.c index 0ec35e14a..c6a04fa89 100644 --- a/src/empathy-roster-window.c +++ b/src/empathy-roster-window.c @@ -944,13 +944,30 @@ roster_window_key_press_event_cb (GtkWidget *window, } static void +unprepare_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + GtkWidget *self = user_data; + + gtk_widget_destroy (self); +} + +static void roster_window_chat_quit_cb (GSimpleAction *action, GVariant *parameter, gpointer user_data) { EmpathyRosterWindow *self = user_data; - gtk_widget_destroy (GTK_WIDGET (self)); + /* Destroying the window will make us leave the main loop and so exit the + * process. Before doing so we want to unprepare the individual manager. + * Just hide the window now and actually destroy it once Folks is done. + */ + gtk_widget_hide (GTK_WIDGET (self)); + + empathy_individual_manager_unprepare_async (self->priv->individual_manager, + unprepare_cb, self); } static void |