diff --git a/src/control/Control.cpp b/src/control/Control.cpp index 2a07bdae..19c0823e 100644 --- a/src/control/Control.cpp +++ b/src/control/Control.cpp @@ -882,10 +882,24 @@ void Control::customizeToolbars() { if (res == -8) { // Yes ToolbarData * data = new ToolbarData(*this->win->getSelectedToolbar()); - data->setName(data->getName() + _(" Copy")); - data->setId(data->getId() + _(" Copy")); + ToolbarModel * model = this->win->getToolbarModel(); - this->win->getToolbarModel()->add(data); + for (int i = 0; i < 100; i++) { + String id = data->getId() + " Copy"; + + if(i != 0) { + id += " "; + id += i; + } + + if (!model->existsId(id)) { + data->setName(data->getName() + _(" Copy")); + data->setId(data->getId() + " Copy"); + break; + } + } + + model->add(data); this->win->toolbarSelected(data); // TODO: !!! update toolbar menu } else { diff --git a/src/gui/dialog/toolbarCustomize/ToolbarAdapter.h b/src/gui/dialog/toolbarCustomize/ToolbarAdapter.h index ab7e9f04..633bed35 100644 --- a/src/gui/dialog/toolbarCustomize/ToolbarAdapter.h +++ b/src/gui/dialog/toolbarCustomize/ToolbarAdapter.h @@ -69,6 +69,11 @@ private: GtkWidget * w = GTK_WIDGET(this->spacerItem); GtkWidget * parent = gtk_widget_get_parent(w); gtk_container_remove(GTK_CONTAINER(parent), w); + + GtkToolbar * tb = GTK_TOOLBAR(this->w); + if(gtk_toolbar_get_n_items(tb) == 0) { + gtk_widget_hide(this->w); + } } void showToolbar() { @@ -81,7 +86,7 @@ private: this->spacerItem = it; gtk_toolbar_insert(tb, it, 0); - // TODO: ist hier wirklich metadata nötig? + // TODO: !!!! ist hier wirklich metadata nötig? // ToolitemDragDrop::attachMetadata(GTK_WIDGET(it), -2, NULL); GtkOrientation orientation = gtk_toolbar_get_orientation(tb); diff --git a/src/gui/dialog/toolbarCustomize/ToolbarDragDropHandler.cpp b/src/gui/dialog/toolbarCustomize/ToolbarDragDropHandler.cpp index feddfd68..2851c495 100644 --- a/src/gui/dialog/toolbarCustomize/ToolbarDragDropHandler.cpp +++ b/src/gui/dialog/toolbarCustomize/ToolbarDragDropHandler.cpp @@ -77,6 +77,8 @@ void ToolbarDragDropHandler::toolbarConfigDialogClosed() { delete this->customizeDialog; this->customizeDialog = NULL; + printf("ToolbarDragDropHandler::toolbarConfigDialogClosed()\n"); + MainWindow * win = control->getWindow(); this->clearToolbarsFromDragAndDrop(); diff --git a/src/gui/toolbarMenubar/model/ToolbarData.cpp b/src/gui/toolbarMenubar/model/ToolbarData.cpp index ecc44150..7abf715a 100644 --- a/src/gui/toolbarMenubar/model/ToolbarData.cpp +++ b/src/gui/toolbarMenubar/model/ToolbarData.cpp @@ -105,7 +105,7 @@ void ToolbarData::saveToKeyFile(GKeyFile * config) { line += *it.next(); } - if (line.length() < 2) { + if (line.length() > 2) { g_key_file_set_string(config, group, e.getName().c_str(), line.substring(1).c_str()); } } diff --git a/src/gui/toolbarMenubar/model/ToolbarModel.cpp b/src/gui/toolbarMenubar/model/ToolbarModel.cpp index 06321871..7e394824 100644 --- a/src/gui/toolbarMenubar/model/ToolbarModel.cpp +++ b/src/gui/toolbarMenubar/model/ToolbarModel.cpp @@ -97,6 +97,20 @@ bool ToolbarModel::parse(const char * file, bool predefined) { return true; } +bool ToolbarModel::existsId(String id) { + XOJ_CHECK_TYPE(ToolbarModel); + + for(GList * l = this->toolbars; l != NULL; l = l->next) { + ToolbarData * data = (ToolbarData *) l->data; + if(data->getName() == id) { + return true; + } + } + + return false; +} + + const char * TOOLBAR_INI_HEADER = "# Xournal++ Toolbar configuration\n" "# Here you can customize the Toolbars\n" @@ -144,6 +158,10 @@ void ToolbarModel::save(const char * filename) { gsize len = 0; char * data = g_key_file_to_data(config, &len, NULL); + + printf("->%s\n", data); + + FILE * fp = fopen(filename, "w"); fwrite(data, 1, len, fp); fclose(fp); diff --git a/src/gui/toolbarMenubar/model/ToolbarModel.h b/src/gui/toolbarMenubar/model/ToolbarModel.h index 2dc0da5b..f11051f4 100644 --- a/src/gui/toolbarMenubar/model/ToolbarModel.h +++ b/src/gui/toolbarMenubar/model/ToolbarModel.h @@ -15,6 +15,7 @@ #include #include #include +#include class ToolbarData; @@ -30,6 +31,7 @@ public: void add(ToolbarData * data); void remove(ToolbarData * data); void save(const char * filename); + bool existsId(String id); private: void parseGroup(GKeyFile * config, const char * group, bool predefined);