lw->toolbar_merge_id[type] = gtk_ui_manager_new_merge_id(lw->ui_manager);
}
+/* Used to create a unique name for toolbar separators */
+static gint i = 0;
+
void layout_toolbar_add(LayoutWindow *lw, ToolbarType type, const gchar *action)
{
const gchar *path = nullptr;
+ gchar *separator_name;
if (!action || !lw->ui_manager) return;
- if (g_list_find_custom(lw->toolbar_actions[type], action, reinterpret_cast<GCompareFunc>(strcmp))) return;
+ /* There can be multiple separators, but only a single of others */
+ if (g_strcmp0(action, "Separator") != 0)
+ {
+ if (g_list_find_custom(lw->toolbar_actions[type], action, reinterpret_cast<GCompareFunc>(strcmp))) return;
+ }
switch (type)
{
gtk_action_group_add_actions(lw->action_group_editors, &entry, 1, lw);
}
}
- gtk_ui_manager_add_ui(lw->ui_manager, lw->toolbar_merge_id[type], path, action, action, GTK_UI_MANAGER_TOOLITEM, FALSE);
+
+ if (g_strcmp0(action, "Separator") == 0)
+ {
+ /* gtk_ui_manager requires items to have unique names */
+ i++;
+ separator_name = g_strdup_printf("separator_%i",i);
+
+ gtk_ui_manager_add_ui(lw->ui_manager, lw->toolbar_merge_id[type], path, separator_name, NULL, GTK_UI_MANAGER_SEPARATOR, FALSE);
+
+ g_free(separator_name);
+ }
+ else
+ {
+ gtk_ui_manager_add_ui(lw->ui_manager, lw->toolbar_merge_id[type], path, action, action, GTK_UI_MANAGER_TOOLITEM, FALSE);
+ }
+
lw->toolbar_actions[type] = g_list_append(lw->toolbar_actions[type], g_strdup(action));
}
menu = popup_menu_short_lived();
+ item = menu_item_add_stock(menu, "Separator", "Separator", G_CALLBACK(toolbarlist_add_cb), toolbarlist);
+ g_object_set_data(G_OBJECT(item), "toolbar_add_name", g_strdup("Separator"));
+ g_object_set_data(G_OBJECT(item), "toolbar_add_label", g_strdup("Separator"));
+ g_object_set_data(G_OBJECT(item), "toolbar_add_stock_id", g_strdup("no-icon"));
+ g_signal_connect(G_OBJECT(item), "destroy", G_CALLBACK(toolbar_button_free), item);
+
list = get_action_items();
work = list;
{
get_toolbar_item(name, &label, &icon);
}
- toolbarlist_add_button(name, label, icon, box);
+
+ if (g_strcmp0(name, "Separator") != 0)
+ {
+ toolbarlist_add_button(name, label, icon, box);
+ }
+ else
+ {
+ toolbarlist_add_button(name, name, "no-icon", box);
+ }
}
}