diff --git a/src/gui/dialog/ToolbarManageDialog.cpp b/src/gui/dialog/ToolbarManageDialog.cpp index 1d32d5fd..d4d1bc7d 100644 --- a/src/gui/dialog/ToolbarManageDialog.cpp +++ b/src/gui/dialog/ToolbarManageDialog.cpp @@ -120,7 +120,8 @@ void ToolbarManageDialog::buttonDeleteCallback(GtkButton* button, ToolbarManageD while (gtk_tree_model_iter_next(GTK_TREE_MODEL(dlg->model), &iter)); } - dlg->entrySelected(NULL); + dlg->updateSelectionData(); + delete dlg->selected; } } @@ -192,19 +193,39 @@ void ToolbarManageDialog::entrySelected(ToolbarData* data) this->selected = data; } -void ToolbarManageDialog::treeSelectionChangedCallback(GtkTreeSelection* selection, ToolbarManageDialog* dlg) +void ToolbarManageDialog::updateSelectionData() { - XOJ_CHECK_TYPE_OBJ(dlg, ToolbarManageDialog); + XOJ_CHECK_TYPE(ToolbarManageDialog); GtkTreeIter iter; GtkTreeModel* model = NULL; ToolbarData* data = NULL; + GtkWidget* tree = get("toolbarList"); + + GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); + if (selection == NULL) + { + entrySelected(NULL); + return; + } + if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, COLUMN_POINTER, &data, -1); - dlg->entrySelected(data); + entrySelected(data); } + else + { + entrySelected(NULL); + } +} + +void ToolbarManageDialog::treeSelectionChangedCallback(GtkTreeSelection* selection, ToolbarManageDialog* dlg) +{ + XOJ_CHECK_TYPE_OBJ(dlg, ToolbarManageDialog); + + dlg->updateSelectionData(); } void ToolbarManageDialog::show(GtkWindow* parent) diff --git a/src/gui/dialog/ToolbarManageDialog.h b/src/gui/dialog/ToolbarManageDialog.h index f7a40c8f..71dbd6af 100644 --- a/src/gui/dialog/ToolbarManageDialog.h +++ b/src/gui/dialog/ToolbarManageDialog.h @@ -37,6 +37,8 @@ private: void addToolbarData(ToolbarData* data); void entrySelected(ToolbarData* data); + void updateSelectionData(); + private: XOJ_TYPE_ATTRIB; diff --git a/src/gui/toolbarMenubar/model/ToolbarData.cpp b/src/gui/toolbarMenubar/model/ToolbarData.cpp index 8fc84770..bdd58ffd 100644 --- a/src/gui/toolbarMenubar/model/ToolbarData.cpp +++ b/src/gui/toolbarMenubar/model/ToolbarData.cpp @@ -21,6 +21,19 @@ ToolbarData::ToolbarData(const ToolbarData& data) this->predefined = false; } +void ToolbarData::operator=(const ToolbarData& other) +{ + this->id = other.id; + this->name = other.name; + this->predefined = other.predefined; + + contents.clear(); + for (const ToolbarEntry* e : other.contents) + { + contents.push_back(new ToolbarEntry(*e)); + } +} + ToolbarData::~ToolbarData() { XOJ_CHECK_TYPE(ToolbarData); diff --git a/src/gui/toolbarMenubar/model/ToolbarData.h b/src/gui/toolbarMenubar/model/ToolbarData.h index 6fec3dfd..3ac77d2d 100644 --- a/src/gui/toolbarMenubar/model/ToolbarData.h +++ b/src/gui/toolbarMenubar/model/ToolbarData.h @@ -22,6 +22,8 @@ public: ToolbarData(const ToolbarData& data); virtual ~ToolbarData(); + void operator=(const ToolbarData& other); + public: string getName(); void setName(string name);