[geany/geany-plugins] a35ac1: projectorganizer: Better color of external directories with dark themes
Jiří Techet
git-noreply at xxxxx
Fri Dec 19 11:42:03 UTC 2014
Branch: refs/heads/master
Author: Jiří Techet <techet at gmail.com>
Committer: Jiří Techet <techet at gmail.com>
Date: Fri, 19 Dec 2014 11:42:03 UTC
Commit: a35ac165216176151228f9c76e247d69deefa42a
https://github.com/geany/geany-plugins/commit/a35ac165216176151228f9c76e247d69deefa42a
Log Message:
-----------
projectorganizer: Better color of external directories with dark themes
Wait with sidebar reload after sidebar is realized so we can get correct
colors from the theme.
Modified Paths:
--------------
projectorganizer/src/prjorg-sidebar.c
Modified: projectorganizer/src/prjorg-sidebar.c
62 lines changed, 40 insertions(+), 22 deletions(-)
===================================================================
@@ -49,7 +49,9 @@ typedef enum
MATCH_PATTERN
} MatchType;
-static GdkColor external_color;
+static GdkColor s_external_color;
+static GtkWidget *s_toolbar = NULL;
+static gboolean s_pending_reload = FALSE;
static GtkWidget *s_file_view_vbox = NULL;
static GtkWidget *s_file_view = NULL;
@@ -884,7 +886,7 @@ static void create_branch(gint level, GSList *leaf_list, GtkTreeIter *parent,
FILEVIEW_COLUMN_ICON, icon_dir,
FILEVIEW_COLUMN_NAME, last_dir_name, -1);
if (!project)
- gtk_tree_store_set(s_file_store, &iter, FILEVIEW_COLUMN_COLOR, &external_color, -1);
+ gtk_tree_store_set(s_file_store, &iter, FILEVIEW_COLUMN_COLOR, &s_external_color, -1);
create_branch(level+1, tmp_list, &iter, header_patterns, source_patterns, project);
@@ -901,7 +903,7 @@ static void create_branch(gint level, GSList *leaf_list, GtkTreeIter *parent,
FILEVIEW_COLUMN_ICON, icon_dir,
FILEVIEW_COLUMN_NAME, last_dir_name, -1);
if (!project)
- gtk_tree_store_set(s_file_store, &iter, FILEVIEW_COLUMN_COLOR, &external_color, -1);
+ gtk_tree_store_set(s_file_store, &iter, FILEVIEW_COLUMN_COLOR, &s_external_color, -1);
create_branch(level+1, tmp_list, &iter, header_patterns, source_patterns, project);
@@ -933,7 +935,7 @@ static void create_branch(gint level, GSList *leaf_list, GtkTreeIter *parent,
FILEVIEW_COLUMN_ICON, icon,
FILEVIEW_COLUMN_NAME, path_arr[level], -1);
if (!project)
- gtk_tree_store_set(s_file_store, &iter, FILEVIEW_COLUMN_COLOR, &external_color, -1);
+ gtk_tree_store_set(s_file_store, &iter, FILEVIEW_COLUMN_COLOR, &s_external_color, -1);
}
else if (patterns_match(source_patterns, path_arr[level]))
{
@@ -944,7 +946,7 @@ static void create_branch(gint level, GSList *leaf_list, GtkTreeIter *parent,
FILEVIEW_COLUMN_ICON, icon,
FILEVIEW_COLUMN_NAME, path_arr[level], -1);
if (!project)
- gtk_tree_store_set(s_file_store, &iter, FILEVIEW_COLUMN_COLOR, &external_color, -1);
+ gtk_tree_store_set(s_file_store, &iter, FILEVIEW_COLUMN_COLOR, &s_external_color, -1);
}
else
{
@@ -955,7 +957,7 @@ static void create_branch(gint level, GSList *leaf_list, GtkTreeIter *parent,
FILEVIEW_COLUMN_ICON, icon,
FILEVIEW_COLUMN_NAME, path_arr[level], -1);
if (!project)
- gtk_tree_store_set(s_file_store, &iter, FILEVIEW_COLUMN_COLOR, &external_color, -1);
+ gtk_tree_store_set(s_file_store, &iter, FILEVIEW_COLUMN_COLOR, &s_external_color, -1);
}
if (icon)
@@ -1045,6 +1047,9 @@ static void load_project(void)
header_patterns = get_precompiled_patterns(prj_org->header_patterns);
source_patterns = get_precompiled_patterns(prj_org->source_patterns);
+ /* reload on every refresh to update the color e.g. when the theme changes */
+ s_external_color = gtk_widget_get_style(s_toolbar)->bg[GTK_STATE_NORMAL];
+
foreach_slist (elem, prj_org->roots)
{
PrjOrgRoot *root = elem->data;
@@ -1060,7 +1065,7 @@ static void load_project(void)
FILEVIEW_COLUMN_ICON, icon_dir,
FILEVIEW_COLUMN_NAME, name, -1);
if (!first)
- gtk_tree_store_set(s_file_store, &iter, FILEVIEW_COLUMN_COLOR, &external_color, -1);
+ gtk_tree_store_set(s_file_store, &iter, FILEVIEW_COLUMN_COLOR, &s_external_color, -1);
load_project_root(root, &iter, header_patterns, source_patterns, first);
@@ -1175,7 +1180,14 @@ static gboolean follow_editor_on_idle(gpointer foo)
void prjorg_sidebar_update(gboolean reload)
{
if (reload)
- load_project();
+ {
+ /* we get color information only after the sidebar is realized -
+ * postpone reload if this is not the case yet */
+ if (gtk_widget_get_realized(s_toolbar))
+ load_project();
+ else
+ s_pending_reload = TRUE;
+ }
if (s_follow_editor)
/* perform on idle - avoids unnecessary jumps on project load */
plugin_idle_add(geany_plugin, (GSourceFunc)follow_editor_on_idle, NULL);
@@ -1194,9 +1206,15 @@ void prjorg_sidebar_find_tag_in_active(void)
}
+static void sidebar_realized_cb (GtkWidget *widget) {
+ if (s_pending_reload)
+ prjorg_sidebar_update(TRUE);
+}
+
+
void prjorg_sidebar_init(void)
{
- GtkWidget *scrollwin, *toolbar, *item, *image;
+ GtkWidget *scrollwin, *item, *image;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
GtkTreeSelection *sel;
@@ -1207,57 +1225,57 @@ void prjorg_sidebar_init(void)
/**** toolbar ****/
- toolbar = gtk_toolbar_new();
- gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar), GTK_ICON_SIZE_MENU);
- gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);
+ s_toolbar = gtk_toolbar_new();
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(s_toolbar), GTK_ICON_SIZE_MENU);
+ gtk_toolbar_set_style(GTK_TOOLBAR(s_toolbar), GTK_TOOLBAR_ICONS);
- external_color = gtk_widget_get_style(toolbar)->bg[GTK_STATE_NORMAL];
+ g_signal_connect (s_toolbar, "realize", G_CALLBACK (sidebar_realized_cb), NULL);
item = GTK_WIDGET(gtk_tool_button_new(NULL, NULL));
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(item), "prjorg-refresh");
ui_widget_set_tooltip_text(item, _("Reload all"));
g_signal_connect(item, "clicked", G_CALLBACK(on_reload_project), NULL);
- gtk_container_add(GTK_CONTAINER(toolbar), item);
+ gtk_container_add(GTK_CONTAINER(s_toolbar), item);
item = GTK_WIDGET(gtk_separator_tool_item_new());
- gtk_container_add(GTK_CONTAINER(toolbar), item);
+ gtk_container_add(GTK_CONTAINER(s_toolbar), item);
item = GTK_WIDGET(gtk_tool_button_new(NULL, NULL));
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(item), "prjorg-add-external");
ui_widget_set_tooltip_text(item, _("Add external directory"));
g_signal_connect(item, "clicked", G_CALLBACK(on_add_external), NULL);
- gtk_container_add(GTK_CONTAINER(toolbar), item);
+ gtk_container_add(GTK_CONTAINER(s_toolbar), item);
s_project_toolbar.add = item;
item = GTK_WIDGET(gtk_separator_tool_item_new());
- gtk_container_add(GTK_CONTAINER(toolbar), item);
+ gtk_container_add(GTK_CONTAINER(s_toolbar), item);
item = GTK_WIDGET(gtk_tool_button_new(NULL, NULL));
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(item), "prjorg-expand");
ui_widget_set_tooltip_text(item, _("Expand all"));
g_signal_connect(item, "clicked", G_CALLBACK(on_expand_all), NULL);
- gtk_container_add(GTK_CONTAINER(toolbar), item);
+ gtk_container_add(GTK_CONTAINER(s_toolbar), item);
s_project_toolbar.expand = item;
item = GTK_WIDGET(gtk_tool_button_new(NULL, NULL));
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(item), "prjorg-collapse");
ui_widget_set_tooltip_text(item, _("Collapse to project root"));
g_signal_connect(item, "clicked", G_CALLBACK(on_collapse_all), NULL);
- gtk_container_add(GTK_CONTAINER(toolbar), item);
+ gtk_container_add(GTK_CONTAINER(s_toolbar), item);
s_project_toolbar.collapse = item;
item = GTK_WIDGET(gtk_separator_tool_item_new());
- gtk_container_add(GTK_CONTAINER(toolbar), item);
+ gtk_container_add(GTK_CONTAINER(s_toolbar), item);
item = GTK_WIDGET(gtk_toggle_tool_button_new());
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(item), TRUE);
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(item), "prjorg-follow");
ui_widget_set_tooltip_text(item, _("Follow active editor"));
g_signal_connect(item, "clicked", G_CALLBACK(on_follow_active), NULL);
- gtk_container_add(GTK_CONTAINER(toolbar), item);
+ gtk_container_add(GTK_CONTAINER(s_toolbar), item);
s_project_toolbar.follow = item;
- gtk_box_pack_start(GTK_BOX(s_file_view_vbox), toolbar, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(s_file_view_vbox), s_toolbar, FALSE, FALSE, 0);
/**** tree view ****/
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Plugins-Commits
mailing list