aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/e-source-selector.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2013-02-21 01:03:59 +0800
committerMatthew Barnes <mbarnes@redhat.com>2013-02-21 05:35:58 +0800
commita955be9b70fd556310fc4c07aeef91c99bde3aaf (patch)
treeae54323a088dcc15b0ae42e7ae530c8e2aeb868f /e-util/e-source-selector.c
parent214d832ccdcb79744f6b0a913ee221cb3d725356 (diff)
downloadgsoc2013-evolution-a955be9b70fd556310fc4c07aeef91c99bde3aaf.tar
gsoc2013-evolution-a955be9b70fd556310fc4c07aeef91c99bde3aaf.tar.gz
gsoc2013-evolution-a955be9b70fd556310fc4c07aeef91c99bde3aaf.tar.bz2
gsoc2013-evolution-a955be9b70fd556310fc4c07aeef91c99bde3aaf.tar.lz
gsoc2013-evolution-a955be9b70fd556310fc4c07aeef91c99bde3aaf.tar.xz
gsoc2013-evolution-a955be9b70fd556310fc4c07aeef91c99bde3aaf.tar.zst
gsoc2013-evolution-a955be9b70fd556310fc4c07aeef91c99bde3aaf.zip
ESourceSelector: Make source_selector_update_row() public.
Gonna need to call this from the EClientSelector subclass.
Diffstat (limited to 'e-util/e-source-selector.c')
-rw-r--r--e-util/e-source-selector.c181
1 files changed, 98 insertions, 83 deletions
diff --git a/e-util/e-source-selector.c b/e-util/e-source-selector.c
index 4a75ed10e5..b746230a59 100644
--- a/e-util/e-source-selector.c
+++ b/e-util/e-source-selector.c
@@ -231,87 +231,6 @@ source_selector_cancel_write (ESourceSelector *selector,
g_hash_table_remove (pending_writes, source);
}
-static void
-source_selector_update_row (ESourceSelector *selector,
- ESource *source)
-{
- GHashTable *source_index;
- ESourceExtension *extension = NULL;
- GtkTreeRowReference *reference;
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreeIter iter;
- const gchar *extension_name;
- const gchar *display_name;
- gboolean selected;
-
- source_index = selector->priv->source_index;
- reference = g_hash_table_lookup (source_index, source);
-
- /* This function runs when ANY ESource in the registry changes.
- * If the ESource is not in our tree model then return silently. */
- if (reference == NULL)
- return;
-
- /* If we do have a row reference, it should be valid. */
- g_return_if_fail (gtk_tree_row_reference_valid (reference));
-
- model = gtk_tree_row_reference_get_model (reference);
- path = gtk_tree_row_reference_get_path (reference);
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_path_free (path);
-
- display_name = e_source_get_display_name (source);
-
- extension_name = e_source_selector_get_extension_name (selector);
- selected = e_source_selector_source_is_selected (selector, source);
-
- if (e_source_has_extension (source, extension_name))
- extension = e_source_get_extension (source, extension_name);
-
- if (extension != NULL) {
- GdkColor color;
- const gchar *color_spec = NULL;
- gboolean show_color = FALSE;
- gboolean show_toggle;
-
- show_color =
- E_IS_SOURCE_SELECTABLE (extension) &&
- e_source_selector_get_show_colors (selector);
-
- if (show_color)
- color_spec = e_source_selectable_get_color (
- E_SOURCE_SELECTABLE (extension));
-
- if (color_spec != NULL && *color_spec != '\0')
- show_color = gdk_color_parse (color_spec, &color);
-
- show_toggle = e_source_selector_get_show_toggles (selector);
-
- gtk_tree_store_set (
- GTK_TREE_STORE (model), &iter,
- COLUMN_NAME, display_name,
- COLUMN_COLOR, show_color ? &color : NULL,
- COLUMN_ACTIVE, selected,
- COLUMN_SHOW_COLOR, show_color,
- COLUMN_SHOW_TOGGLE, show_toggle,
- COLUMN_WEIGHT, PANGO_WEIGHT_NORMAL,
- COLUMN_SOURCE, source,
- -1);
- } else {
- gtk_tree_store_set (
- GTK_TREE_STORE (model), &iter,
- COLUMN_NAME, display_name,
- COLUMN_COLOR, NULL,
- COLUMN_ACTIVE, FALSE,
- COLUMN_SHOW_COLOR, FALSE,
- COLUMN_SHOW_TOGGLE, FALSE,
- COLUMN_WEIGHT, PANGO_WEIGHT_BOLD,
- COLUMN_SOURCE, source,
- -1);
- }
-}
-
static gboolean
source_selector_traverse (GNode *node,
ESourceSelector *selector)
@@ -353,7 +272,7 @@ source_selector_traverse (GNode *node,
g_hash_table_insert (source_index, g_object_ref (source), reference);
gtk_tree_path_free (path);
- source_selector_update_row (selector, source);
+ e_source_selector_update_row (selector, source);
return FALSE;
}
@@ -493,7 +412,7 @@ source_selector_source_changed_cb (ESourceRegistry *registry,
{
source_selector_cancel_write (selector, source);
- source_selector_update_row (selector, source);
+ e_source_selector_update_row (selector, source);
}
static void
@@ -2080,3 +1999,99 @@ e_source_selector_queue_write (ESourceSelector *selector,
g_source_unref (idle_source);
}
+/**
+ * e_source_selector_update_row:
+ * @selector: an #ESourceSelector
+ * @source: an #ESource
+ *
+ * Updates the corresponding #GtkTreeModel row for @source.
+ *
+ * This function is public so it can be called from subclasses like
+ * #EClientSelector.
+ *
+ * Since: 3.8
+ **/
+void
+e_source_selector_update_row (ESourceSelector *selector,
+ ESource *source)
+{
+ GHashTable *source_index;
+ ESourceExtension *extension = NULL;
+ GtkTreeRowReference *reference;
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ const gchar *extension_name;
+ const gchar *display_name;
+ gboolean selected;
+
+ g_return_if_fail (E_IS_SOURCE_SELECTOR (selector));
+ g_return_if_fail (E_IS_SOURCE (source));
+
+ source_index = selector->priv->source_index;
+ reference = g_hash_table_lookup (source_index, source);
+
+ /* This function runs when ANY ESource in the registry changes.
+ * If the ESource is not in our tree model then return silently. */
+ if (reference == NULL)
+ return;
+
+ /* If we do have a row reference, it should be valid. */
+ g_return_if_fail (gtk_tree_row_reference_valid (reference));
+
+ model = gtk_tree_row_reference_get_model (reference);
+ path = gtk_tree_row_reference_get_path (reference);
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_path_free (path);
+
+ display_name = e_source_get_display_name (source);
+
+ extension_name = e_source_selector_get_extension_name (selector);
+ selected = e_source_selector_source_is_selected (selector, source);
+
+ if (e_source_has_extension (source, extension_name))
+ extension = e_source_get_extension (source, extension_name);
+
+ if (extension != NULL) {
+ GdkColor color;
+ const gchar *color_spec = NULL;
+ gboolean show_color = FALSE;
+ gboolean show_toggle;
+
+ show_color =
+ E_IS_SOURCE_SELECTABLE (extension) &&
+ e_source_selector_get_show_colors (selector);
+
+ if (show_color)
+ color_spec = e_source_selectable_get_color (
+ E_SOURCE_SELECTABLE (extension));
+
+ if (color_spec != NULL && *color_spec != '\0')
+ show_color = gdk_color_parse (color_spec, &color);
+
+ show_toggle = e_source_selector_get_show_toggles (selector);
+
+ gtk_tree_store_set (
+ GTK_TREE_STORE (model), &iter,
+ COLUMN_NAME, display_name,
+ COLUMN_COLOR, show_color ? &color : NULL,
+ COLUMN_ACTIVE, selected,
+ COLUMN_SHOW_COLOR, show_color,
+ COLUMN_SHOW_TOGGLE, show_toggle,
+ COLUMN_WEIGHT, PANGO_WEIGHT_NORMAL,
+ COLUMN_SOURCE, source,
+ -1);
+ } else {
+ gtk_tree_store_set (
+ GTK_TREE_STORE (model), &iter,
+ COLUMN_NAME, display_name,
+ COLUMN_COLOR, NULL,
+ COLUMN_ACTIVE, FALSE,
+ COLUMN_SHOW_COLOR, FALSE,
+ COLUMN_SHOW_TOGGLE, FALSE,
+ COLUMN_WEIGHT, PANGO_WEIGHT_BOLD,
+ COLUMN_SOURCE, source,
+ -1);
+ }
+}
+