aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/gconf-bridge.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2009-05-28 20:47:27 +0800
committerMilan Crha <mcrha@redhat.com>2009-05-28 20:47:27 +0800
commitb33ce8f2a6dfab4a17eacd15e296035b4e2cfa49 (patch)
tree833922285e72c6ad219027cec83feac6cb300c9f /e-util/gconf-bridge.c
parentb9149e4e89d6fc56505b75de1e3e0c13dada4b3e (diff)
downloadgsoc2013-evolution-b33ce8f2a6dfab4a17eacd15e296035b4e2cfa49.tar.gz
gsoc2013-evolution-b33ce8f2a6dfab4a17eacd15e296035b4e2cfa49.tar.zst
gsoc2013-evolution-b33ce8f2a6dfab4a17eacd15e296035b4e2cfa49.zip
Bug #535516 - Crash in GConf Bridge while replying
A test patch, maybe not fixing the bug fully, but let's try it.
Diffstat (limited to 'e-util/gconf-bridge.c')
-rw-r--r--e-util/gconf-bridge.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/e-util/gconf-bridge.c b/e-util/gconf-bridge.c
index ff880a12bd..ca130ee2a3 100644
--- a/e-util/gconf-bridge.c
+++ b/e-util/gconf-bridge.c
@@ -649,16 +649,16 @@ window_binding_configure_event_cb (GtkWindow *window,
GdkEventConfigure *event,
WindowBinding *binding)
{
- /* Schedule a sync */
- if (binding->sync_timeout_id == 0) {
- binding->sync_timeout_id =
- g_timeout_add_seconds (WINDOW_BINDING_SYNC_DELAY,
- (GSourceFunc)
- window_binding_perform_scheduled_sync,
- binding);
- }
+ /* re-postpone by cancel of the previous request */
+ if (binding->sync_timeout_id > 0)
+ g_source_remove (binding->sync_timeout_id);
- return FALSE;
+ /* Schedule a sync */
+ binding->sync_timeout_id = g_timeout_add_seconds (WINDOW_BINDING_SYNC_DELAY,
+ (GSourceFunc) window_binding_perform_scheduled_sync,
+ binding);
+
+ return FALSE;
}
/* Called when the window state is being changed */
@@ -667,6 +667,9 @@ window_binding_state_event_cb (GtkWindow *window,
GdkEventWindowState *event,
WindowBinding *binding)
{
+ if (binding->sync_timeout_id > 0)
+ g_source_remove (binding->sync_timeout_id);
+
window_binding_perform_scheduled_sync (binding);
return FALSE;
@@ -696,7 +699,10 @@ window_binding_window_destroyed (gpointer user_data,
binding = (WindowBinding *) user_data;
binding->window = NULL; /* Don't do anything with the window
at unbind() */
-
+
+ if (binding->sync_timeout_id > 0)
+ g_source_remove (binding->sync_timeout_id);
+
g_hash_table_remove (bridge->bindings,
GUINT_TO_POINTER (binding->id));
}