X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-runtime.c;h=c4bbdc8542dcd500af9589e7f528dd428587c09c;hb=b44c0d3d98fc823023727ee0287511089b086478;hp=c51fbd64f7ebb98e356a14ddab130794abdc9fab;hpb=29675b14cbc6a762e020b92ee39f47ad3d8e7a1c;p=modest diff --git a/src/modest-runtime.c b/src/modest-runtime.c index c51fbd6..c4bbdc8 100644 --- a/src/modest-runtime.c +++ b/src/modest-runtime.c @@ -42,18 +42,20 @@ #include #include #include +#include #if MODEST_PLATFORM_ID==2 /* maemo/hildon */ #include -static gboolean hildon_init (void); +static gboolean init_hildon (void); #endif /* MODEST_PLATFORM_ID==2 */ static gboolean init_header_columns (ModestConf *conf, gboolean overwrite); static gboolean init_local_folders (void); static gboolean init_default_account_maybe (ModestAccountMgr *acc_mgr); static void init_i18n (void); -static void debug_g_type_init (void); -static void debug_logging_init (void); +static void init_stock_icons (void); +static void init_debug_g_type (void); +static void init_debug_logging (void); static ModestSingletons *_singletons = NULL; @@ -98,6 +100,7 @@ static const TnyFolderType LOCAL_FOLDERS[] = { TNY_FOLDER_TYPE_OUTBOX, TNY_FOLDER_TYPE_DRAFTS, TNY_FOLDER_TYPE_SENT, + TNY_FOLDER_TYPE_TRASH, TNY_FOLDER_TYPE_ARCHIVE }; @@ -114,11 +117,11 @@ modest_runtime_init (void) } init_i18n(); - debug_g_type_init(); - debug_logging_init(); + init_debug_g_type(); + init_debug_logging(); g_thread_init(NULL); - gdk_threads_init (); + gdk_threads_init (); my_singletons = modest_singletons_new (); if (!my_singletons) { @@ -127,7 +130,7 @@ modest_runtime_init (void) } #if MODEST_PLATFORM_ID==2 - if (!hildon_init ()) { + if (!init_hildon ()) { modest_runtime_uninit (); g_printerr ("modest: failed to initialize hildon\n"); return FALSE; @@ -171,6 +174,8 @@ modest_runtime_init_ui (gint argc, gchar** argv) g_printerr ("modest: failed to initialize graphical ui\n"); return FALSE; } + + init_stock_icons (); return TRUE; } @@ -178,14 +183,13 @@ modest_runtime_init_ui (gint argc, gchar** argv) gboolean modest_runtime_uninit (void) { - if (!_singletons) { - g_printerr ("modest: modest_runtime is not initialized\n"); - return FALSE; + if (_singletons) { + g_object_unref (G_OBJECT(_singletons)); + _singletons = NULL; } + if (G_IS_OBJECT(_singletons)) + g_warning ("BUG: _singletons is still alive\n"); - g_object_unref (G_OBJECT(_singletons)); - _singletons = NULL; - return TRUE; } @@ -229,15 +233,32 @@ modest_runtime_get_mail_operation_queue (void) } -ModestWidgetFactory* -modest_runtime_get_widget_factory (void) + +ModestTnySendQueue* +modest_runtime_get_send_queue (TnyTransportAccount *account) { + ModestCacheMgr *cache_mgr; + GHashTable *send_queue_cache; + gpointer orig_key, send_queue; + g_return_val_if_fail (_singletons, NULL); - return modest_singletons_get_widget_factory (_singletons); + g_return_val_if_fail (TNY_IS_TRANSPORT_ACCOUNT(account), NULL); + + cache_mgr = modest_singletons_get_cache_mgr (_singletons); + send_queue_cache = modest_cache_mgr_get_cache (cache_mgr, + MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE); + + if (!g_hash_table_lookup_extended (send_queue_cache, account, &orig_key, &send_queue)) { + send_queue = (gpointer)modest_tny_send_queue_new (TNY_CAMEL_TRANSPORT_ACCOUNT(account)); + g_hash_table_insert (send_queue_cache, account, send_queue); + } + + return MODEST_TNY_SEND_QUEUE(send_queue); } + /* http://primates.ximian.com/~federico/news-2006-04.html#memory-debugging-infrastructure*/ ModestRuntimeDebugFlags modest_runtime_get_debug_flags () @@ -425,7 +446,7 @@ init_default_account_maybe (ModestAccountMgr *acc_mgr) gchar *default_account; gboolean retval = TRUE; - all_accounts = modest_account_mgr_account_names (acc_mgr, NULL); + all_accounts = modest_account_mgr_account_names (acc_mgr); if (all_accounts) { /* if there are any accounts, there should be a default one */ default_account = modest_account_mgr_get_default_account (acc_mgr); @@ -450,7 +471,7 @@ init_default_account_maybe (ModestAccountMgr *acc_mgr) static void -debug_g_type_init (void) +init_debug_g_type (void) { GTypeDebugFlags gflags; ModestRuntimeDebugFlags mflags; @@ -467,7 +488,7 @@ debug_g_type_init (void) } static void -debug_logging_init (void) +init_debug_logging (void) { ModestRuntimeDebugFlags mflags; mflags = modest_runtime_get_debug_flags (); @@ -491,7 +512,7 @@ init_i18n (void) #if MODEST_PLATFORM_ID==2 static gboolean -hildon_init (void) +init_hildon (void) { osso_context_t *osso_context = osso_initialize(PACKAGE, PACKAGE_VERSION, @@ -502,3 +523,78 @@ hildon_init (void) } } #endif /* MODEST_PLATFORM_ID==2 */ + + +/* + * This function registers our custom toolbar icons, so they can be + * themed. The idea of this function was taken from the gtk-demo + */ +static void +init_stock_icons (void) +{ + static gboolean registered = FALSE; + + if (!registered) { + GdkPixbuf *pixbuf; + GtkIconFactory *factory; + gint i; + + static GtkStockItem items[] = { + { MODEST_STOCK_MAIL_SEND, "send mail", 0, 0, NULL }, + { MODEST_STOCK_NEW_MAIL, "new mail", 0, 0, NULL }, + { MODEST_STOCK_SEND_RECEIVE, "send receive", 0, 0, NULL }, + { MODEST_STOCK_REPLY, "reply", 0, 0, NULL }, + { MODEST_STOCK_REPLY_ALL, "reply all", 0, 0, NULL }, + { MODEST_STOCK_FORWARD, "forward", 0, 0, NULL }, + { MODEST_STOCK_DELETE, "delete", 0, 0, NULL }, + { MODEST_STOCK_NEXT, "next", 0, 0, NULL }, + { MODEST_STOCK_PREV, "prev", 0, 0, NULL }, +/* { MODEST_STOCK_STOP, "stop", 0, 0, NULL } */ + }; + + static gchar *items_names [] = { + MODEST_TOOLBAR_ICON_MAIL_SEND, + MODEST_TOOLBAR_ICON_NEW_MAIL, + MODEST_TOOLBAR_ICON_SEND_RECEIVE, + MODEST_TOOLBAR_ICON_REPLY, + MODEST_TOOLBAR_ICON_REPLY_ALL, + MODEST_TOOLBAR_ICON_FORWARD, + MODEST_TOOLBAR_ICON_DELETE, + MODEST_TOOLBAR_ICON_NEXT, + MODEST_TOOLBAR_ICON_PREV, +/* MODEST_TOOLBAR_ICON_STOP */ + }; + + registered = TRUE; + + /* Register our stock items */ + gtk_stock_add (items, G_N_ELEMENTS (items)); + + /* Add our custom icon factory to the list of defaults */ + factory = gtk_icon_factory_new (); + gtk_icon_factory_add_default (factory); + + /* Register icons to accompany stock items */ + for (i = 0; i < G_N_ELEMENTS (items); i++) { + pixbuf = NULL; + pixbuf = gdk_pixbuf_new_from_file (items_names[i], NULL); + + if (pixbuf != NULL) { + GtkIconSet *icon_set; + GdkPixbuf *transparent; + + transparent = gdk_pixbuf_add_alpha (pixbuf, TRUE, 0xff, 0xff, 0xff); + + icon_set = gtk_icon_set_new_from_pixbuf (transparent); + gtk_icon_factory_add (factory, items[i].stock_id, icon_set); + gtk_icon_set_unref (icon_set); + g_object_unref (pixbuf); + g_object_unref (transparent); + } + else + g_warning ("failed to load %s icon", items_names[i]); + } + /* Drop our reference to the factory, GTK will hold a reference. */ + g_object_unref (factory); + } +}