From b709a67d2b7ec7657c3e22557242b9d2ee94cd95 Mon Sep 17 00:00:00 2001 From: Sergio Villar Senin Date: Wed, 18 Apr 2007 12:32:06 +0000 Subject: [PATCH] * First review of ModestFolderView visual names for folders * Added the device name management to folder view pmo-trunk-r1584 --- src/maemo/modest-main-window.c | 41 -------------- src/widgets/modest-folder-view.c | 110 +++++++++++++++++++++++++++++++++----- 2 files changed, 96 insertions(+), 55 deletions(-) diff --git a/src/maemo/modest-main-window.c b/src/maemo/modest-main-window.c index 806f318..bbc9221 100644 --- a/src/maemo/modest-main-window.c +++ b/src/maemo/modest-main-window.c @@ -157,37 +157,6 @@ modest_main_window_class_init (ModestMainWindowClass *klass) g_type_class_add_private (gobject_class, sizeof(ModestMainWindowPrivate)); } - -static void -on_key_changed (ModestConf* conf, const gchar *key, ModestConfEvent event, ModestMainWindow *win) -{ - TnyAccount *account; - - if (!key || strcmp (key, MODEST_CONF_DEVICE_NAME) != 0) - return; /* wrong key */ - - /* ok, the device name changed; thus, we have to update the - * local folder account name*/ - account = - modest_tny_account_store_get_tny_account_by_account (modest_runtime_get_account_store(), - MODEST_LOCAL_FOLDERS_ACCOUNT_ID, - TNY_ACCOUNT_TYPE_STORE); - if (!account) { - g_printerr ("modest: could not get account\n"); - return; - } - - if (event == MODEST_CONF_EVENT_KEY_UNSET) - tny_account_set_name (account, MODEST_LOCAL_FOLDERS_DEFAULT_DISPLAY_NAME); - else { - gchar *device_name = modest_conf_get_string (modest_runtime_get_conf(), - MODEST_CONF_DEVICE_NAME, NULL); - tny_account_set_name (account, device_name); - g_free (device_name); - } - g_object_unref (G_OBJECT(account)); -} - static void modest_main_window_init (ModestMainWindow *obj) { @@ -340,16 +309,6 @@ connect_signals (ModestMainWindow *self) g_signal_connect (G_OBJECT (self), "window-state-event", G_CALLBACK (modest_main_window_window_state_event), NULL); - - - - /* modest_maemo_utils_get_device_name will probably change - * MODEST_CONF_DEVICE_NAME. If that happens, we update the local folders - * account name in the callback - */ - g_signal_connect (G_OBJECT(modest_runtime_get_conf()), "key_changed", - G_CALLBACK(on_key_changed), self); - g_signal_connect (G_OBJECT(self), "delete-event", G_CALLBACK(on_delete_event), self); /* Track account changes. We need to refresh the toolbar */ diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index d13655d..7a326f3 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -110,6 +110,11 @@ static gboolean on_key_pressed (GtkWidget *self, GdkEventKey *event, gpointer user_data); +static void on_configuration_key_changed (ModestConf* conf, + const gchar *key, + ModestConfEvent event, + ModestFolderView *self); + enum { FOLDER_SELECTION_CHANGED_SIGNAL, LAST_SIGNAL @@ -128,6 +133,8 @@ struct _ModestFolderViewPrivate { GtkTreeSelection *cur_selection; TnyFolderStoreQuery *query; guint timer_expander; + + gchar *local_account_name; }; #define MODEST_FOLDER_VIEW_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE((o), \ @@ -222,8 +229,13 @@ text_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, if (!fname) return; + + if (!folder) { + g_free (fname); + return; + } - if (folder && type != TNY_FOLDER_TYPE_ROOT) { /* FIXME: tnymail bug? crashes with root folders */ + if (type != TNY_FOLDER_TYPE_ROOT) { if (modest_tny_folder_is_local_folder (folder)) { TnyFolderType type; type = modest_tny_folder_get_local_folder_type (folder); @@ -232,19 +244,34 @@ text_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, fname = g_strdup(modest_local_folder_info_get_type_display_name (type)); } } - } else if (folder && type == TNY_FOLDER_TYPE_ROOT) { - /* FIXME: todo */ + + /* Use bold font style if there are unread messages */ + if (unread > 0) { + gchar *folder_title = g_strdup_printf ("%s (%d)", fname, unread); + g_object_set (rendobj,"text", folder_title, "weight", 800, NULL); + g_free (folder_title); + } else + g_object_set (rendobj,"text", fname, "weight", 400, NULL); + + } else { + ModestFolderViewPrivate *priv; + const gchar *account_name; + + priv = MODEST_FOLDER_VIEW_GET_PRIVATE (data); + + /* Use bold font style */ + account_name = priv->local_account_name; + g_object_set (rendobj,"text", account_name, "weight", 800, NULL); +/* if (modest_tny_folder_is_local_folder (folder)) { */ +/* } else { */ +/* if () { */ +/* } else { */ +/* } */ +/* } */ } - - if (unread > 0) { - gchar *folder_title = g_strdup_printf ("%s (%d)", fname, unread); - g_object_set (rendobj,"text", folder_title, "weight", 800, NULL); - g_free (folder_title); - } else - g_object_set (rendobj,"text", fname, "weight", 400, NULL); - + + g_object_unref (G_OBJECT (folder)); g_free (fname); - if (folder) g_object_unref (G_OBJECT (folder)); } @@ -309,6 +336,7 @@ modest_folder_view_init (ModestFolderView *obj) GtkTreeViewColumn *column; GtkCellRenderer *renderer; GtkTreeSelection *sel; + ModestConf *conf; priv = MODEST_FOLDER_VIEW_GET_PRIVATE(obj); @@ -318,17 +346,22 @@ modest_folder_view_init (ModestFolderView *obj) priv->cur_row = NULL; priv->query = NULL; + /* Initialize the local account name */ + conf = modest_runtime_get_conf(); + priv->local_account_name = modest_conf_get_string (conf, MODEST_CONF_DEVICE_NAME, NULL); + + /* Build treeview */ column = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_cell_data_func(column, renderer, - icon_cell_data, NULL, NULL); + icon_cell_data, obj, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_cell_data_func(column, renderer, - text_cell_data, NULL, NULL); + text_cell_data, obj, NULL); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(obj)); gtk_tree_selection_set_mode (sel, GTK_SELECTION_SINGLE); @@ -341,11 +374,22 @@ modest_folder_view_init (ModestFolderView *obj) gtk_tree_view_append_column (GTK_TREE_VIEW(obj),column); + /* Setup drag and drop */ setup_drag_and_drop (GTK_TREE_VIEW(obj)); + /* Connect signals */ g_signal_connect (G_OBJECT (obj), "key-press-event", G_CALLBACK (on_key_pressed), NULL); + + /* + * Track changes in the local account name (in the device it + * will be the device name) + */ + g_signal_connect (G_OBJECT(conf), + "key_changed", + G_CALLBACK(on_configuration_key_changed), obj); + } static void @@ -390,6 +434,8 @@ modest_folder_view_finalize (GObject *obj) sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(obj)); if (sel) g_signal_handler_disconnect (G_OBJECT(sel), priv->changed_signal); + + g_free (priv->local_account_name); G_OBJECT_CLASS(parent_class)->finalize (obj); } @@ -1180,3 +1226,39 @@ on_key_pressed (GtkWidget *self, return retval; } + +/* + * We listen to the changes in the local folder account name key, + * because we want to show the right name in the view. The local + * folder account name corresponds to the device name in the Maemo + * version. We do this because we do not want to query gconf on each + * tree view refresh. It's better to cache it and change whenever + * necessary. + */ +static void +on_configuration_key_changed (ModestConf* conf, + const gchar *key, + ModestConfEvent event, + ModestFolderView *self) +{ + ModestFolderViewPrivate *priv; + GtkTreeViewColumn *tree_column; + + if (!key || strcmp (key, MODEST_CONF_DEVICE_NAME)) + return; + + priv = MODEST_FOLDER_VIEW_GET_PRIVATE(self); + + g_free (priv->local_account_name); + + if (event == MODEST_CONF_EVENT_KEY_UNSET) + priv->local_account_name = g_strdup (MODEST_LOCAL_FOLDERS_DEFAULT_DISPLAY_NAME); + else + priv->local_account_name = modest_conf_get_string (modest_runtime_get_conf(), + MODEST_CONF_DEVICE_NAME, NULL); + + /* Force a redraw */ + tree_column = gtk_tree_view_get_column (GTK_TREE_VIEW (self), + TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN); + gtk_tree_view_column_queue_resize (tree_column); +} -- 1.7.9.5