ESourceSelector: Make source_selector_update_row() public.

Gonna need to call this from the EClientSelector subclass.
This commit is contained in:
Matthew Barnes
2013-02-20 12:03:59 -05:00
parent 214d832ccd
commit a955be9b70
3 changed files with 101 additions and 83 deletions

View File

@ -3115,6 +3115,7 @@ e_source_selector_ref_primary_selection
e_source_selector_set_primary_selection
e_source_selector_ref_source_by_path
e_source_selector_queue_write
e_source_selector_update_row
<SUBSECTION Standard>
E_SOURCE_SELECTOR
E_IS_SOURCE_SELECTOR

View File

@ -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);
}
}

View File

@ -135,6 +135,8 @@ ESource * e_source_selector_ref_source_by_path
GtkTreePath *path);
void e_source_selector_queue_write (ESourceSelector *selector,
ESource *source);
void e_source_selector_update_row (ESourceSelector *selector,
ESource *source);
G_END_DECLS