projects
/
modest
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
bdaa95d
)
Fixes 125051, crash in ModestDatetimeFormatter after changing the system date
author
Sergio Villar Senin
<svillar@igalia.com>
Mon, 29 Jun 2009 14:06:29 +0000
(16:06 +0200)
committer
Sergio Villar Senin
<svillar@igalia.com>
Mon, 29 Jun 2009 14:07:19 +0000
(16:07 +0200)
src/modest-datetime-formatter.c
patch
|
blob
|
history
diff --git
a/src/modest-datetime-formatter.c
b/src/modest-datetime-formatter.c
index
db50dc1
..
8ce371a
100644
(file)
--- a/
src/modest-datetime-formatter.c
+++ b/
src/modest-datetime-formatter.c
@@
-63,6
+63,14
@@
struct _ModestDatetimeFormatterPrivate {
#endif
};
#endif
};
+/* We need this very nasty stuff because the call to
+ osso_time_set_notification_cb cannot be reverted and thus the
+ handler will be called always even though we try to set another
+ one */
+#ifdef MODEST_USE_LIBTIME
+static ModestDatetimeFormatter *global_self = NULL;
+#endif
+
#define MODEST_DATETIME_FORMATTER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
MODEST_TYPE_DATETIME_FORMATTER, \
ModestDatetimeFormatterPrivate))
#define MODEST_DATETIME_FORMATTER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
MODEST_TYPE_DATETIME_FORMATTER, \
ModestDatetimeFormatterPrivate))
@@
-162,11
+170,13
@@
clock_format_changed (GConfClient *gconf,
#endif
#ifdef MODEST_USE_LIBTIME
#endif
#ifdef MODEST_USE_LIBTIME
-static void
+static void
time_changed_cb (gpointer userdata)
{
time_changed_cb (gpointer userdata)
{
- time_get_synced ();
- g_signal_emit (G_OBJECT (userdata), signals[FORMAT_CHANGED_SIGNAL], 0);
+ if (global_self) {
+ time_get_synced ();
+ g_signal_emit (global_self, signals[FORMAT_CHANGED_SIGNAL], 0);
+ }
}
#endif
}
#endif
@@
-200,9
+210,10
@@
init_format (ModestDatetimeFormatter *obj)
#endif
#ifdef MODEST_USE_LIBTIME
#endif
#ifdef MODEST_USE_LIBTIME
- osso_time_set_notification_cb (modest_platform_get_osso_context (),
- time_changed_cb,
- obj);
+ if (OSSO_OK == osso_time_set_notification_cb (modest_platform_get_osso_context (),
+ time_changed_cb,
+ NULL))
+ global_self = obj;
time_get_synced ();
#endif
time_get_synced ();
#endif
@@
-231,7
+242,9
@@
modest_datetime_formatter_finalize (GObject *obj)
/* Disconnect notification */
#ifdef MODEST_USE_LIBTIME
/* Disconnect notification */
#ifdef MODEST_USE_LIBTIME
- osso_time_set_notification_cb (modest_platform_get_osso_context (), NULL, NULL);
+ if (OSSO_OK != osso_time_set_notification_cb (modest_platform_get_osso_context (),
+ NULL, NULL))
+ global_self = NULL;
#endif
#endif
G_OBJECT_CLASS (parent_class)->finalize (obj);
#endif
#endif
G_OBJECT_CLASS (parent_class)->finalize (obj);