Branch: refs/heads/master Author: Dimitar Zhekov dimitar.zhekov@gmail.com Committer: Colomban Wendling ban@herbesfolles.org Date: Fri, 22 Feb 2013 16:14:53 UTC Commit: 99fbe0bd8ca3882fc4c2c96b4e241301def74ca1 https://github.com/geany/geany/commit/99fbe0bd8ca3882fc4c2c96b4e241301def74c...
Log Message: ----------- Fix plugin_add_toolbar_item insertion order
Modified Paths: -------------- src/pluginutils.c src/ui_utils.c src/ui_utils.h
Modified: src/pluginutils.c 9 files changed, 4 insertions(+), 5 deletions(-) =================================================================== @@ -62,18 +62,17 @@ void plugin_add_toolbar_item(GeanyPlugin *plugin, GtkToolItem *item) gtk_toolbar_insert(toolbar, sep, pos); autosep->widget = GTK_WIDGET(sep);
- gtk_toolbar_insert(toolbar, item, pos + 1); - toolbar_item_ref(sep); - toolbar_item_ref(item); } else { pos = gtk_toolbar_get_item_index(toolbar, GTK_TOOL_ITEM(autosep->widget)); g_return_if_fail(pos >= 0); - gtk_toolbar_insert(toolbar, item, pos); - toolbar_item_ref(item); } + + gtk_toolbar_insert(toolbar, item, pos + autosep->item_count + 1); + toolbar_item_ref(item); + /* hide the separator widget if there are no toolbar items showing for the plugin */ ui_auto_separator_add_ref(autosep, GTK_WIDGET(item)); }
Modified: src/ui_utils.c 30 files changed, 19 insertions(+), 11 deletions(-) =================================================================== @@ -2247,10 +2247,15 @@ void ui_finalize(void)
static void auto_separator_update(GeanyAutoSeparator *autosep) { - g_return_if_fail(autosep->ref_count >= 0); + g_return_if_fail(autosep->item_count >= 0);
if (autosep->widget) - ui_widget_show_hide(autosep->widget, autosep->ref_count > 0); + { + if (autosep->item_count > 0) + ui_widget_show_hide(autosep->widget, autosep->show_count > 0); + else + gtk_widget_destroy(autosep->widget); + } }
@@ -2259,9 +2264,9 @@ static void on_auto_separator_item_show_hide(GtkWidget *widget, gpointer user_da GeanyAutoSeparator *autosep = user_data;
if (GTK_WIDGET_VISIBLE(widget)) - autosep->ref_count++; + autosep->show_count++; else - autosep->ref_count--; + autosep->show_count--; auto_separator_update(autosep); }
@@ -2270,10 +2275,12 @@ static void on_auto_separator_item_destroy(GtkWidget *widget, gpointer user_data { GeanyAutoSeparator *autosep = user_data;
+ autosep->item_count--; + autosep->item_count = MAX(autosep->item_count, 0); /* GTK_WIDGET_VISIBLE won't work now the widget is being destroyed, * so assume widget was visible */ - autosep->ref_count--; - autosep->ref_count = MAX(autosep->ref_count, 0); + autosep->show_count--; + autosep->show_count = MAX(autosep->item_count, 0); auto_separator_update(autosep); }
@@ -2285,15 +2292,16 @@ static void on_auto_separator_item_destroy(GtkWidget *widget, gpointer user_data void ui_auto_separator_add_ref(GeanyAutoSeparator *autosep, GtkWidget *item) { /* set widget ptr NULL when widget destroyed */ - if (autosep->ref_count == 0) + if (autosep->item_count == 0) g_signal_connect(autosep->widget, "destroy", G_CALLBACK(gtk_widget_destroyed), &autosep->widget);
if (GTK_WIDGET_VISIBLE(item)) - { - autosep->ref_count++; - auto_separator_update(autosep); - } + autosep->show_count++; + + autosep->item_count++; + auto_separator_update(autosep); + g_signal_connect(item, "show", G_CALLBACK(on_auto_separator_item_show_hide), autosep); g_signal_connect(item, "hide", G_CALLBACK(on_auto_separator_item_show_hide), autosep); g_signal_connect(item, "destroy", G_CALLBACK(on_auto_separator_item_destroy), autosep);
Modified: src/ui_utils.h 3 files changed, 2 insertions(+), 1 deletions(-) =================================================================== @@ -148,7 +148,8 @@ typedef struct GeanyAutoSeparator { GtkWidget *widget; /* e.g. GtkSeparatorToolItem, GtkSeparatorMenuItem */ - gint ref_count; /* set to zero initially */ + gint show_count; /* visible items, set to zero initially */ + gint item_count; /* total items, set to zero initially */ } GeanyAutoSeparator;
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).