From 2f056a734ab9f23e89e8b52df5c28d61dcb7eee0 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Fri, 27 Sep 2019 01:01:08 +0200 Subject: [PATCH 01/29] No mac attemp to fix https://gitlab.com/inkscape/inbox/issues/546 --- src/desktop.cpp | 38 ++++++++++++++++++++++++++++ src/ui/desktop/menubar.cpp | 51 +++++++++++++++++++++++++++++++++++++- 2 files changed, 88 insertions(+), 1 deletion(-) diff --git a/src/desktop.cpp b/src/desktop.cpp index 76d534f50f..60b9c049df 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -553,6 +553,12 @@ bool SPDesktop::displayModeToggle() Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_NORMAL); switch (_display_mode) { case Inkscape::RENDERMODE_NORMAL: +#ifdef GDK_WINDOWING_QUARTZ + verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_NORMAL); + if (verb) { + _menu_update.emit(verb->get_code(), false); + } +#endif _setDisplayMode(Inkscape::RENDERMODE_NO_FILTERS); verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_NO_FILTERS); if (verb) { @@ -560,6 +566,12 @@ bool SPDesktop::displayModeToggle() } break; case Inkscape::RENDERMODE_NO_FILTERS: +#ifdef GDK_WINDOWING_QUARTZ + verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_NO_FILTERS); + if (verb) { + _menu_update.emit(verb->get_code(), false); + } +#endif _setDisplayMode(Inkscape::RENDERMODE_OUTLINE); verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_OUTLINE); if (verb) { @@ -568,6 +580,12 @@ bool SPDesktop::displayModeToggle() break; case Inkscape::RENDERMODE_OUTLINE: +#ifdef GDK_WINDOWING_QUARTZ + verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_OUTLINE); + if (verb) { + _menu_update.emit(verb->get_code(), false); + } +#endif _setDisplayMode(Inkscape::RENDERMODE_VISIBLE_HAIRLINES); verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES); if (verb) { @@ -575,13 +593,21 @@ bool SPDesktop::displayModeToggle() } break; case Inkscape::RENDERMODE_VISIBLE_HAIRLINES: +#ifdef GDK_WINDOWING_QUARTZ + verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES); + if (verb) { + _menu_update.emit(verb->get_code(), false); + } +#endif _setDisplayMode(Inkscape::RENDERMODE_NORMAL); + verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_NORMAL); if (verb) { _menu_update.emit(verb->get_code(), setDisplayModeNormal()); } break; default: _setDisplayMode(Inkscape::RENDERMODE_NORMAL); + verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_NORMAL); if (verb) { _menu_update.emit(verb->get_code(), setDisplayModeNormal()); } @@ -594,12 +620,24 @@ bool SPDesktop::displayColorModeToggle() switch (_display_color_mode) { case Inkscape::COLORMODE_NORMAL: _setDisplayColorMode(Inkscape::COLORMODE_GRAYSCALE); +#ifdef GDK_WINDOWING_QUARTZ + verb = Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_NORMAL); + if (verb) { + _menu_update.emit(verb->get_code(), false); + } +#endif verb = Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_GRAYSCALE); if (verb) { _menu_update.emit(verb->get_code(), setDisplayColorModeGrayscale()); } break; case Inkscape::COLORMODE_GRAYSCALE: +#ifdef GDK_WINDOWING_QUARTZ + verb = Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_GRAYSCALE); + if (verb) { + _menu_update.emit(verb->get_code(), false); + } +#endif _setDisplayColorMode(Inkscape::COLORMODE_NORMAL); if (verb) { _menu_update.emit(verb->get_code(), setDisplayColorModeNormal()); diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 6fac675c78..1a6337745f 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -81,6 +81,12 @@ static void set_menuitems(unsigned int emitting_verb, bool value) return; } lastverb = emitting_verb; +#ifdef GDK_WINDOWING_QUARTZ + Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); + if (check) { + check->property_active() = value; + } +#else Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); Gtk::RadioMenuItem *radio = dynamic_cast(menu.first.second); if (radio) { @@ -88,6 +94,7 @@ static void set_menuitems(unsigned int emitting_verb, bool value) } else if (check) { check->property_active() = value; } +#endif lastverb = -1; } } @@ -322,7 +329,26 @@ add_tasks(Gtk::MenuShell* menu, SPDesktop* dt) }; int active = Inkscape::UI::UXManager::getInstance()->getDefaultTask(dt); +#ifdef GDK_WINDOWING_QUARTZ + for (unsigned int i = 0; i < 3; ++i) { + + Gtk::CheckMenuItem* menuitem = Gtk::manage(new Gtk::CheckMenuItem(data[i][0])); + if (menuitem) { + if (active == i) { + menuitem->set_active(); + } + menuitem->signal_toggled().connect( + sigc::bind(sigc::ptr_fun(&task_activated), dt, i)); + menuitem->signal_select().connect( + sigc::bind(sigc::ptr_fun(&select_task), dt, data[i][1])); + menuitem->signal_deselect().connect( + sigc::bind(sigc::ptr_fun(&deselect_task),dt)); + + menu->append(*menuitem); + } + } +#else Gtk::RadioMenuItem::Group group; for (unsigned int i = 0; i < 3; ++i) { @@ -343,6 +369,7 @@ add_tasks(Gtk::MenuShell* menu, SPDesktop* dt) menu->append(*menuitem); } } +#endif } @@ -453,7 +480,28 @@ build_menu(Gtk::MenuShell* menu, Inkscape::XML::Node* xml, Inkscape::UI::View::V if (verb != nullptr && verb->get_code() != SP_VERB_NONE) { SPAction* action = verb->get_action(Inkscape::ActionContext(view)); - +#ifdef GDK_WINDOWING_QUARTZ + if (menu_ptr->attribute("check") != nullptr || menu_ptr->attribute("radio") != nullptr) { + Gtk::MenuItem *menuitem = build_menu_check_item_from_verb(action); + if (menuitem) { + if (menu_ptr->attribute("default") != nullptr) { + auto checkmenuitem = dynamic_cast(menuitem); + if (checkmenuitem) { + checkmenuitem->set_active(true); + } + } + std::pair, Inkscape::UI::View::View *> + verbmenuitem = std::make_pair(std::make_pair(verb->get_code(), menuitem), view); + menuitems.push_back(verbmenuitem); + menu->append(*menuitem); + } + } else { + Gtk::MenuItem* menuitem = build_menu_item_from_verb(action, show_icons_curr); + if (menuitem) { + menu->append(*menuitem); + } + } +#else if (menu_ptr->attribute("check") != nullptr) { Gtk::MenuItem *menuitem = build_menu_check_item_from_verb(action); if (menuitem) { @@ -482,6 +530,7 @@ build_menu(Gtk::MenuShell* menu, Inkscape::XML::Node* xml, Inkscape::UI::View::V menu->append(*menuitem); } } +#endif } else if (true #if !HAVE_ASPELL && !strcmp(verb_name.c_str(), "DialogSpellcheck") -- GitLab From 2f4e09c48c7f853e4f1de9a311c7e858132f2382 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Fri, 27 Sep 2019 09:54:15 +0200 Subject: [PATCH 02/29] Try to fix mac menu --- src/ui/desktop/menubar.cpp | 40 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 1a6337745f..00f7e0528a 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -66,6 +66,40 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) lastverb = -1; return; } + lastverb = -1; +#ifdef GDK_WINDOWING_QUARTZ + for (auto menu : menuitems) { + if (menu.second == SP_ACTIVE_DESKTOP) { + switch (action->verb->get_code()) { + case Inkscape::RENDERMODE_NORMAL: + case Inkscape::RENDERMODE_NO_FILTERS: + case Inkscape::RENDERMODE_OUTLINE: + case Inkscape::RENDERMODE_VISIBLE_HAIRLINES: + switch (menu.first.first) { + case Inkscape::RENDERMODE_NORMAL: + case Inkscape::RENDERMODE_NO_FILTERS: + case Inkscape::RENDERMODE_OUTLINE: + case Inkscape::RENDERMODE_VISIBLE_HAIRLINES: + check->property_active() = false; + break; + default; + } + break; + case Inkscape::COLORMODE_GRAYSCALE: + case Inkscape::COLORMODE_NORMAL: + switch (menu.first.first) { + case Inkscape::COLORMODE_GRAYSCALE: + case Inkscape::COLORMODE_NORMAL: + check->property_active() = false; + break; + default; + } + break; + default; + } + } + } +#endif lastverb = action->verb->get_code(); sp_action_perform(action, nullptr); lastverb = -1; @@ -335,7 +369,9 @@ add_tasks(Gtk::MenuShell* menu, SPDesktop* dt) Gtk::CheckMenuItem* menuitem = Gtk::manage(new Gtk::CheckMenuItem(data[i][0])); if (menuitem) { if (active == i) { - menuitem->set_active(); + menuitem->set_active(true); + } else { + menuitem->set_active(false); } menuitem->signal_toggled().connect( @@ -356,7 +392,7 @@ add_tasks(Gtk::MenuShell* menu, SPDesktop* dt) Gtk::RadioMenuItem* menuitem = Gtk::manage(new Gtk::RadioMenuItem(group, data[i][0])); if (menuitem) { if (active == i) { - menuitem->set_active(); + menuitem->set_active(true); } menuitem->signal_toggled().connect( -- GitLab From eb8b7756b8eacbde954c549eabf89e8f4855183f Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Fri, 27 Sep 2019 17:07:53 +0200 Subject: [PATCH 03/29] Fix compiling issue --- src/ui/desktop/menubar.cpp | 56 ++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 00f7e0528a..72a5ff5d37 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -70,32 +70,36 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) #ifdef GDK_WINDOWING_QUARTZ for (auto menu : menuitems) { if (menu.second == SP_ACTIVE_DESKTOP) { - switch (action->verb->get_code()) { - case Inkscape::RENDERMODE_NORMAL: - case Inkscape::RENDERMODE_NO_FILTERS: - case Inkscape::RENDERMODE_OUTLINE: - case Inkscape::RENDERMODE_VISIBLE_HAIRLINES: - switch (menu.first.first) { - case Inkscape::RENDERMODE_NORMAL: - case Inkscape::RENDERMODE_NO_FILTERS: - case Inkscape::RENDERMODE_OUTLINE: - case Inkscape::RENDERMODE_VISIBLE_HAIRLINES: - check->property_active() = false; - break; - default; - } - break; - case Inkscape::COLORMODE_GRAYSCALE: - case Inkscape::COLORMODE_NORMAL: - switch (menu.first.first) { - case Inkscape::COLORMODE_GRAYSCALE: - case Inkscape::COLORMODE_NORMAL: - check->property_active() = false; - break; - default; - } - break; - default; + Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); + if (check) { + switch (action->verb->get_code()) { + case Inkscape::RENDERMODE_NORMAL: + case Inkscape::RENDERMODE_NO_FILTERS: + case Inkscape::RENDERMODE_OUTLINE: + case Inkscape::RENDERMODE_VISIBLE_HAIRLINES: + switch (menu.first.first) { + case Inkscape::RENDERMODE_NORMAL: + case Inkscape::RENDERMODE_NO_FILTERS: + case Inkscape::RENDERMODE_OUTLINE: + case Inkscape::RENDERMODE_VISIBLE_HAIRLINES: + + check->property_active() = false; + break; + default; + } + break; + case Inkscape::COLORMODE_GRAYSCALE: + case Inkscape::COLORMODE_NORMAL: + switch (menu.first.first) { + case Inkscape::COLORMODE_GRAYSCALE: + case Inkscape::COLORMODE_NORMAL: + check->property_active() = false; + break; + default; + } + break; + default; + } } } } -- GitLab From 0807fca5bfa043a7c55f6915ef0f5c0ddcbe0ddb Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Fri, 27 Sep 2019 17:19:00 +0200 Subject: [PATCH 04/29] second attemp to fix --- src/ui/desktop/menubar.cpp | 61 +++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 72a5ff5d37..881e7e397d 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -68,37 +68,44 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) } lastverb = -1; #ifdef GDK_WINDOWING_QUARTZ + bool view_mode = false; + if (action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_NORMAL) || + action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_NO_FILTERS) || + action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_OUTLINE) || + action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) + { + view_mode = true; + } + bool color_mode = false; + if (action->verb == Inkscape::Verb::get(SP_VERB_COLORMODE_NORMAL) || + action->verb == Inkscape::Verb::get(SP_VERB_COLORMODE_GRAYSCALE)) + { + color_mode = true; + } + for (auto menu : menuitems) { if (menu.second == SP_ACTIVE_DESKTOP) { Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { - switch (action->verb->get_code()) { - case Inkscape::RENDERMODE_NORMAL: - case Inkscape::RENDERMODE_NO_FILTERS: - case Inkscape::RENDERMODE_OUTLINE: - case Inkscape::RENDERMODE_VISIBLE_HAIRLINES: - switch (menu.first.first) { - case Inkscape::RENDERMODE_NORMAL: - case Inkscape::RENDERMODE_NO_FILTERS: - case Inkscape::RENDERMODE_OUTLINE: - case Inkscape::RENDERMODE_VISIBLE_HAIRLINES: - - check->property_active() = false; - break; - default; - } - break; - case Inkscape::COLORMODE_GRAYSCALE: - case Inkscape::COLORMODE_NORMAL: - switch (menu.first.first) { - case Inkscape::COLORMODE_GRAYSCALE: - case Inkscape::COLORMODE_NORMAL: - check->property_active() = false; - break; - default; - } - break; - default; + if (view_mode) { + switch (menu.first.first) { + case Inkscape::RENDERMODE_NORMAL: + case Inkscape::RENDERMODE_NO_FILTERS: + case Inkscape::RENDERMODE_OUTLINE: + case Inkscape::RENDERMODE_VISIBLE_HAIRLINES: + + check->property_active() = false; + break; + default: + } + } else if (color_mode) { + switch (menu.first.first) { + case Inkscape::COLORMODE_GRAYSCALE: + case Inkscape::COLORMODE_NORMAL: + check->property_active() = false; + break; + default: + } } } } -- GitLab From c3ddb94f897fbe824038926d246f3d8cd51d5305 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Fri, 27 Sep 2019 17:28:10 +0200 Subject: [PATCH 05/29] Fix compiling issue --- src/ui/desktop/menubar.cpp | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 881e7e397d..686e73ce70 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -77,8 +77,8 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) view_mode = true; } bool color_mode = false; - if (action->verb == Inkscape::Verb::get(SP_VERB_COLORMODE_NORMAL) || - action->verb == Inkscape::Verb::get(SP_VERB_COLORMODE_GRAYSCALE)) + if (action->verb == Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_NORMAL) || + action->verb == Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) { color_mode = true; } @@ -87,25 +87,18 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) if (menu.second == SP_ACTIVE_DESKTOP) { Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { - if (view_mode) { - switch (menu.first.first) { - case Inkscape::RENDERMODE_NORMAL: - case Inkscape::RENDERMODE_NO_FILTERS: - case Inkscape::RENDERMODE_OUTLINE: - case Inkscape::RENDERMODE_VISIBLE_HAIRLINES: - - check->property_active() = false; - break; - default: - } - } else if (color_mode) { - switch (menu.first.first) { - case Inkscape::COLORMODE_GRAYSCALE: - case Inkscape::COLORMODE_NORMAL: - check->property_active() = false; - break; - default: - } + if (view_mode && + (menu.first.first == Inkscape::RENDERMODE_NORMAL || + menu.first.first == Inkscape::RENDERMODE_NO_FILTERS || + menu.first.first == Inkscape::RENDERMODE_OUTLINE || + menu.first.first == Inkscape::RENDERMODE_VISIBLE_HAIRLINES)) + { + check->property_active() = false; + } else if (color_mode && + (menu.first.first == Inkscape::COLORMODE_GRAYSCALE || + menu.first.first ==Inkscape::COLORMODE_NORMAL)) + { + check->property_active() = false; } } } -- GitLab From a242aa306c033ed2a5c983918dd1cb493584d5b4 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Sat, 28 Sep 2019 10:21:23 +0200 Subject: [PATCH 06/29] Attem to fix Mac menu III --- src/ui/desktop/menubar.cpp | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 686e73ce70..887be014cb 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -72,14 +72,12 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) if (action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_NORMAL) || action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_NO_FILTERS) || action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_OUTLINE) || - action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) - { + action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) { view_mode = true; } bool color_mode = false; if (action->verb == Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_NORMAL) || - action->verb == Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) - { + action->verb == Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) { color_mode = true; } @@ -88,15 +86,15 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { if (view_mode && - (menu.first.first == Inkscape::RENDERMODE_NORMAL || - menu.first.first == Inkscape::RENDERMODE_NO_FILTERS || - menu.first.first == Inkscape::RENDERMODE_OUTLINE || - menu.first.first == Inkscape::RENDERMODE_VISIBLE_HAIRLINES)) + (menu.first.first == SP_VERB_VIEW_MODE_NORMAL || + menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || + menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || + menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) { check->property_active() = false; - } else if (color_mode && - (menu.first.first == Inkscape::COLORMODE_GRAYSCALE || - menu.first.first ==Inkscape::COLORMODE_NORMAL)) + } else if (color_mode && + (menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || + menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) { check->property_active() = false; } @@ -123,7 +121,7 @@ static void set_menuitems(unsigned int emitting_verb, bool value) Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { check->property_active() = value; - } + } #else Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); Gtk::RadioMenuItem *radio = dynamic_cast(menu.first.second); @@ -370,7 +368,7 @@ add_tasks(Gtk::MenuShell* menu, SPDesktop* dt) #ifdef GDK_WINDOWING_QUARTZ for (unsigned int i = 0; i < 3; ++i) { - Gtk::CheckMenuItem* menuitem = Gtk::manage(new Gtk::CheckMenuItem(data[i][0])); + Gtk::CheckMenuItem *menuitem = Gtk::manage(new Gtk::CheckMenuItem(data[i][0])); if (menuitem) { if (active == i) { menuitem->set_active(true); @@ -378,12 +376,10 @@ add_tasks(Gtk::MenuShell* menu, SPDesktop* dt) menuitem->set_active(false); } - menuitem->signal_toggled().connect( - sigc::bind(sigc::ptr_fun(&task_activated), dt, i)); + menuitem->signal_toggled().connect(sigc::bind(sigc::ptr_fun(&task_activated), dt, i)); menuitem->signal_select().connect( - sigc::bind(sigc::ptr_fun(&select_task), dt, data[i][1])); - menuitem->signal_deselect().connect( - sigc::bind(sigc::ptr_fun(&deselect_task),dt)); + sigc::bind(sigc::ptr_fun(&select_task), dt, data[i][1])); + menuitem->signal_deselect().connect(sigc::bind(sigc::ptr_fun(&deselect_task), dt)); menu->append(*menuitem); } @@ -525,7 +521,7 @@ build_menu(Gtk::MenuShell* menu, Inkscape::XML::Node* xml, Inkscape::UI::View::V Gtk::MenuItem *menuitem = build_menu_check_item_from_verb(action); if (menuitem) { if (menu_ptr->attribute("default") != nullptr) { - auto checkmenuitem = dynamic_cast(menuitem); + auto checkmenuitem = dynamic_cast(menuitem); if (checkmenuitem) { checkmenuitem->set_active(true); } @@ -536,7 +532,7 @@ build_menu(Gtk::MenuShell* menu, Inkscape::XML::Node* xml, Inkscape::UI::View::V menu->append(*menuitem); } } else { - Gtk::MenuItem* menuitem = build_menu_item_from_verb(action, show_icons_curr); + Gtk::MenuItem *menuitem = build_menu_item_from_verb(action, show_icons_curr); if (menuitem) { menu->append(*menuitem); } -- GitLab From 58b52045647b53338a9a9f74cfc9a976e8888315 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Sat, 28 Sep 2019 10:23:36 +0200 Subject: [PATCH 07/29] Tini fix styling --- src/ui/desktop/menubar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 887be014cb..556d641c6a 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -94,7 +94,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) check->property_active() = false; } else if (color_mode && (menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || - menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) + menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) { check->property_active() = false; } -- GitLab From 8da5a4a91886bee152b1711e415e39a498e2c39c Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Sat, 28 Sep 2019 11:40:43 +0200 Subject: [PATCH 08/29] Improve menu handling --- src/desktop.cpp | 36 -------------------- src/ui/desktop/menubar.cpp | 69 ++++++++++++++++++++------------------ 2 files changed, 37 insertions(+), 68 deletions(-) diff --git a/src/desktop.cpp b/src/desktop.cpp index 60b9c049df..49fd1c3938 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -553,12 +553,6 @@ bool SPDesktop::displayModeToggle() Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_NORMAL); switch (_display_mode) { case Inkscape::RENDERMODE_NORMAL: -#ifdef GDK_WINDOWING_QUARTZ - verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_NORMAL); - if (verb) { - _menu_update.emit(verb->get_code(), false); - } -#endif _setDisplayMode(Inkscape::RENDERMODE_NO_FILTERS); verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_NO_FILTERS); if (verb) { @@ -566,12 +560,6 @@ bool SPDesktop::displayModeToggle() } break; case Inkscape::RENDERMODE_NO_FILTERS: -#ifdef GDK_WINDOWING_QUARTZ - verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_NO_FILTERS); - if (verb) { - _menu_update.emit(verb->get_code(), false); - } -#endif _setDisplayMode(Inkscape::RENDERMODE_OUTLINE); verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_OUTLINE); if (verb) { @@ -580,12 +568,6 @@ bool SPDesktop::displayModeToggle() break; case Inkscape::RENDERMODE_OUTLINE: -#ifdef GDK_WINDOWING_QUARTZ - verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_OUTLINE); - if (verb) { - _menu_update.emit(verb->get_code(), false); - } -#endif _setDisplayMode(Inkscape::RENDERMODE_VISIBLE_HAIRLINES); verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES); if (verb) { @@ -593,12 +575,6 @@ bool SPDesktop::displayModeToggle() } break; case Inkscape::RENDERMODE_VISIBLE_HAIRLINES: -#ifdef GDK_WINDOWING_QUARTZ - verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES); - if (verb) { - _menu_update.emit(verb->get_code(), false); - } -#endif _setDisplayMode(Inkscape::RENDERMODE_NORMAL); verb = Inkscape::Verb::get(SP_VERB_VIEW_MODE_NORMAL); if (verb) { @@ -620,24 +596,12 @@ bool SPDesktop::displayColorModeToggle() switch (_display_color_mode) { case Inkscape::COLORMODE_NORMAL: _setDisplayColorMode(Inkscape::COLORMODE_GRAYSCALE); -#ifdef GDK_WINDOWING_QUARTZ - verb = Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_NORMAL); - if (verb) { - _menu_update.emit(verb->get_code(), false); - } -#endif verb = Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_GRAYSCALE); if (verb) { _menu_update.emit(verb->get_code(), setDisplayColorModeGrayscale()); } break; case Inkscape::COLORMODE_GRAYSCALE: -#ifdef GDK_WINDOWING_QUARTZ - verb = Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_GRAYSCALE); - if (verb) { - _menu_update.emit(verb->get_code(), false); - } -#endif _setDisplayColorMode(Inkscape::COLORMODE_NORMAL); if (verb) { _menu_update.emit(verb->get_code(), setDisplayColorModeNormal()); diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 556d641c6a..257d0a4828 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -68,33 +68,16 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) } lastverb = -1; #ifdef GDK_WINDOWING_QUARTZ - bool view_mode = false; - if (action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_NORMAL) || - action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_NO_FILTERS) || - action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_OUTLINE) || - action->verb == Inkscape::Verb::get(SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) { - view_mode = true; - } - bool color_mode = false; - if (action->verb == Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_NORMAL) || - action->verb == Inkscape::Verb::get(SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) { - color_mode = true; - } - for (auto menu : menuitems) { if (menu.second == SP_ACTIVE_DESKTOP) { Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { - if (view_mode && - (menu.first.first == SP_VERB_VIEW_MODE_NORMAL || - menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || - menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || - menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) - { - check->property_active() = false; - } else if (color_mode && - (menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || - menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) + if (menu.first.first == SP_VERB_VIEW_MODE_NORMAL || + menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || + menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || + menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) + menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || + menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) { check->property_active() = false; } @@ -108,7 +91,36 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) } static void set_menuitems(unsigned int emitting_verb, bool value) -{ +#ifdef GDK_WINDOWING_QUARTZ + for (auto menu : menuitems) { + if (menu.second == SP_ACTIVE_DESKTOP) { + Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); + if (check) { + if (emitting_verb == menu.first.first) { + if (emitting_verb == lastverb) { + lastverb = -1; + return; + } + lastverb = emitting_verb; + Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); + check->property_active() = value; + } + lastverb = -1; + } else { + if (menu.first.first == SP_VERB_VIEW_MODE_NORMAL || + menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || + menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || + menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) + menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || + menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) + { + check->property_active() = false; + } + } + } + } + } +#else for (auto menu : menuitems) { if (menu.second == SP_ACTIVE_DESKTOP) { if (emitting_verb == menu.first.first) { @@ -116,13 +128,6 @@ static void set_menuitems(unsigned int emitting_verb, bool value) lastverb = -1; return; } - lastverb = emitting_verb; -#ifdef GDK_WINDOWING_QUARTZ - Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); - if (check) { - check->property_active() = value; - } -#else Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); Gtk::RadioMenuItem *radio = dynamic_cast(menu.first.second); if (radio) { @@ -130,11 +135,11 @@ static void set_menuitems(unsigned int emitting_verb, bool value) } else if (check) { check->property_active() = value; } -#endif lastverb = -1; } } } +#endif } // Change label name (used in the Undo/Redo menu items). -- GitLab From 15d4e0502f74ef472e2aa111443cd718b2ff9fdf Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Sat, 28 Sep 2019 11:51:19 +0200 Subject: [PATCH 09/29] More fixes to menu --- src/ui/desktop/menubar.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 257d0a4828..c476636ecc 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -66,7 +66,6 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) lastverb = -1; return; } - lastverb = -1; #ifdef GDK_WINDOWING_QUARTZ for (auto menu : menuitems) { if (menu.second == SP_ACTIVE_DESKTOP) { @@ -79,6 +78,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) { + lastverb = menu.first.first; check->property_active() = false; } } @@ -92,6 +92,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) static void set_menuitems(unsigned int emitting_verb, bool value) #ifdef GDK_WINDOWING_QUARTZ + unsigned int current_verb = lastverb; for (auto menu : menuitems) { if (menu.second == SP_ACTIVE_DESKTOP) { Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); @@ -102,9 +103,7 @@ static void set_menuitems(unsigned int emitting_verb, bool value) return; } lastverb = emitting_verb; - Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); - check->property_active() = value; - } + check->property_active() = value; lastverb = -1; } else { if (menu.first.first == SP_VERB_VIEW_MODE_NORMAL || @@ -114,7 +113,9 @@ static void set_menuitems(unsigned int emitting_verb, bool value) menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) { + lastverb = menu.first.first; check->property_active() = false; + lastverb = current_verb; } } } -- GitLab From 42f9fe5535edf90553862387fd15d616ec2a6298 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Sat, 28 Sep 2019 11:58:48 +0200 Subject: [PATCH 10/29] fix compiling issue --- src/ui/desktop/menubar.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index c476636ecc..f33767a637 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -90,7 +90,8 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) lastverb = -1; } -static void set_menuitems(unsigned int emitting_verb, bool value) +static void set_menuitems(unsigned int emitting_verb, bool value) +{ #ifdef GDK_WINDOWING_QUARTZ unsigned int current_verb = lastverb; for (auto menu : menuitems) { -- GitLab From 2d290bcc72d48997e1652709dd54315a62184c24 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Sat, 28 Sep 2019 12:49:42 +0200 Subject: [PATCH 11/29] Improve menu handling --- src/ui/desktop/menubar.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index f33767a637..75944d3fe2 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -71,7 +71,11 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) if (menu.second == SP_ACTIVE_DESKTOP) { Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { - if (menu.first.first == SP_VERB_VIEW_MODE_NORMAL || + if (action->verb->get_code() == menu.first.first) { + lastverb = action->verb->get_code(); + sp_action_perform(action, nullptr); + lastverb = -1; + } else if (menu.first.first == SP_VERB_VIEW_MODE_NORMAL || menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) @@ -84,10 +88,11 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) } } } -#endif +#else lastverb = action->verb->get_code(); sp_action_perform(action, nullptr); lastverb = -1; +#endif } static void set_menuitems(unsigned int emitting_verb, bool value) -- GitLab From 1d442b9bacf13fd0d293e49f0eeeb8e4084b6ffa Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Sat, 28 Sep 2019 12:55:37 +0200 Subject: [PATCH 12/29] More fixes --- src/ui/desktop/menubar.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 75944d3fe2..1bc7ee9a94 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -88,6 +88,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) } } } + lastverb = -1; #else lastverb = action->verb->get_code(); sp_action_perform(action, nullptr); -- GitLab From 473a7c991ed6f920531c01269650a4f53a989ea3 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Sat, 28 Sep 2019 22:17:37 +0200 Subject: [PATCH 13/29] Fic compiling issue --- src/ui/desktop/menubar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 1bc7ee9a94..394dc9d831 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -78,7 +78,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) } else if (menu.first.first == SP_VERB_VIEW_MODE_NORMAL || menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || - menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) + menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES || menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) { @@ -116,7 +116,7 @@ static void set_menuitems(unsigned int emitting_verb, bool value) if (menu.first.first == SP_VERB_VIEW_MODE_NORMAL || menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || - menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) + menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES || menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) { -- GitLab From a2fa94935897635f6c0a95cb83b076b5ddbd8942 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Sun, 29 Sep 2019 21:54:01 +0200 Subject: [PATCH 14/29] fix compiling issue --- src/ui/desktop/menubar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 394dc9d831..d6c556261a 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -80,7 +80,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES || menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || - menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) + menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) { lastverb = menu.first.first; check->property_active() = false; @@ -118,7 +118,7 @@ static void set_menuitems(unsigned int emitting_verb, bool value) menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES || menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || - menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) + menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) { lastverb = menu.first.first; check->property_active() = false; -- GitLab From 34277db9fde429b7b5eebdbfee54a9082b2c30a6 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Mon, 30 Sep 2019 00:27:04 +0200 Subject: [PATCH 15/29] Fix issues pointed by Patrick Junker in issue https://gitlab.com/inkscape/inbox/issues/546 --- src/ui/desktop/menubar.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index d6c556261a..5c356a3150 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -73,6 +73,11 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) if (check) { if (action->verb->get_code() == menu.first.first) { lastverb = action->verb->get_code(); + if (check->property_active() = false) { + check->property_active() = true; + lastverb = -1; + continue; + } sp_action_perform(action, nullptr); lastverb = -1; } else if (menu.first.first == SP_VERB_VIEW_MODE_NORMAL || @@ -105,9 +110,9 @@ static void set_menuitems(unsigned int emitting_verb, bool value) Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { if (emitting_verb == menu.first.first) { - if (emitting_verb == lastverb) { + if (emitting_verb == lastverb || !value) { lastverb = -1; - return; + continue; } lastverb = emitting_verb; check->property_active() = value; @@ -285,6 +290,12 @@ checkitem_update(Gtk::CheckMenuItem* menuitem, SPAction* action) } else if (id == "ViewCmsToggle") { active = dt->colorProfAdjustEnabled(); + } else if (id == "ViewModeNormal") { + active = true; + + } else if (id == "ViewColorModeNormal") { + active = true; + } else if (id == "ViewSplitModeToggle") { active = dt->splitMode(); -- GitLab From d14052a36a524881e56833751b7228ab3985d6a6 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Mon, 30 Sep 2019 21:00:54 +0200 Subject: [PATCH 16/29] Improvements to menu --- src/ui/desktop/menubar.cpp | 73 ++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 5c356a3150..61de0039c4 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -71,34 +71,39 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) if (menu.second == SP_ACTIVE_DESKTOP) { Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { - if (action->verb->get_code() == menu.first.first) { - lastverb = action->verb->get_code(); - if (check->property_active() = false) { + if (action->verb->get_code() == SP_VERB_VIEW_MODE_NORMAL || + action->verb->get_code() == SP_VERB_VIEW_MODE_NO_FILTERS || + action->verb->get_code() == SP_VERB_VIEW_MODE_OUTLINE || + action->verb->get_code() == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES || + action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_NORMAL || + action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) + { + if (action->verb->get_code() == menu.first.first) { + lastverb = action->verb->get_code(); + // maybe we can uncomment this if work,no mac to try + /* if (!check->property_active()) { */ + sp_action_perform(action, nullptr); + /* } */ check->property_active() = true; lastverb = -1; - continue; + } else { + lastverb = menu.first.first; + check->property_active() = false; + lastverb = -1; } + } else { + lastverb = action->verb->get_code(); sp_action_perform(action, nullptr); lastverb = -1; - } else if (menu.first.first == SP_VERB_VIEW_MODE_NORMAL || - menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || - menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || - menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES || - menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || - menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) - { - lastverb = menu.first.first; - check->property_active() = false; } } } } - lastverb = -1; #else lastverb = action->verb->get_code(); sp_action_perform(action, nullptr); - lastverb = -1; #endif + lastverb = -1; } static void set_menuitems(unsigned int emitting_verb, bool value) @@ -107,28 +112,34 @@ static void set_menuitems(unsigned int emitting_verb, bool value) unsigned int current_verb = lastverb; for (auto menu : menuitems) { if (menu.second == SP_ACTIVE_DESKTOP) { + if (emitting_verb == menu.first.first) { + if (emitting_verb == current_verb) { + lastverb = -1; + return; + } + } Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { - if (emitting_verb == menu.first.first) { - if (emitting_verb == lastverb || !value) { + if (emitting_verb == SP_VERB_VIEW_MODE_NORMAL || + emitting_verb == SP_VERB_VIEW_MODE_NO_FILTERS || + emitting_verb == SP_VERB_VIEW_MODE_OUTLINE || + emitting_verb == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES || + emitting_verb == SP_VERB_VIEW_COLOR_MODE_NORMAL || + emitting_verb == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) + { + if (emitting_verb == menu.first.first) { + lastverb = menu.first.first; + check->property_active() = true; lastverb = -1; - continue; - } - lastverb = emitting_verb; - check->property_active() = value; - lastverb = -1; - } else { - if (menu.first.first == SP_VERB_VIEW_MODE_NORMAL || - menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || - menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || - menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES || - menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || - menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) - { + } else { lastverb = menu.first.first; check->property_active() = false; - lastverb = current_verb; + lastverb = -1; } + } else if (emitting_verb == menu.first.first) { + lastverb = menu.first.first; + check->property_active() = value; + lastverb = -1; } } } -- GitLab From 303543e69f956bb191b994d8d0e1bce586a4a23d Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Wed, 2 Oct 2019 10:13:40 +0200 Subject: [PATCH 17/29] Fix last bug mentioned by @edke --- src/ui/desktop/menubar.cpp | 55 +++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 61de0039c4..36cce239c4 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -71,19 +71,29 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) if (menu.second == SP_ACTIVE_DESKTOP) { Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { - if (action->verb->get_code() == SP_VERB_VIEW_MODE_NORMAL || - action->verb->get_code() == SP_VERB_VIEW_MODE_NO_FILTERS || - action->verb->get_code() == SP_VERB_VIEW_MODE_OUTLINE || - action->verb->get_code() == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES || - action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_NORMAL || - action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) - { + if (action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_NORMAL || + action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) { if (action->verb->get_code() == menu.first.first) { lastverb = action->verb->get_code(); - // maybe we can uncomment this if work,no mac to try - /* if (!check->property_active()) { */ + if (!check->property_active()) { sp_action_perform(action, nullptr); - /* } */ + } + check->property_active() = true; + lastverb = -1; + } else { + lastverb = menu.first.first; + check->property_active() = false; + lastverb = -1; + } + } else if (action->verb->get_code() == SP_VERB_VIEW_MODE_NORMAL || + action->verb->get_code() == SP_VERB_VIEW_MODE_NO_FILTERS || + action->verb->get_code() == SP_VERB_VIEW_MODE_OUTLINE || + action->verb->get_code() == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) { + if (action->verb->get_code() == menu.first.first) { + lastverb = action->verb->get_code(); + if (!check->property_active()) { + sp_action_perform(action, nullptr); + } check->property_active() = true; lastverb = -1; } else { @@ -106,7 +116,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) lastverb = -1; } -static void set_menuitems(unsigned int emitting_verb, bool value) +static void set_menuitems(unsigned int emitting_verb, bool value) { #ifdef GDK_WINDOWING_QUARTZ unsigned int current_verb = lastverb; @@ -120,18 +130,25 @@ static void set_menuitems(unsigned int emitting_verb, bool value) } Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { - if (emitting_verb == SP_VERB_VIEW_MODE_NORMAL || - emitting_verb == SP_VERB_VIEW_MODE_NO_FILTERS || - emitting_verb == SP_VERB_VIEW_MODE_OUTLINE || - emitting_verb == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES || - emitting_verb == SP_VERB_VIEW_COLOR_MODE_NORMAL || - emitting_verb == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) - { + if (emitting_verb == SP_VERB_VIEW_COLOR_MODE_NORMAL || + emitting_verb == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) { if (emitting_verb == menu.first.first) { lastverb = menu.first.first; check->property_active() = true; lastverb = -1; - } else { + } else { + lastverb = menu.first.first; + check->property_active() = false; + lastverb = -1; + } + } else if (emitting_verb == SP_VERB_VIEW_MODE_NORMAL || emitting_verb == SP_VERB_VIEW_MODE_NO_FILTERS || + emitting_verb == SP_VERB_VIEW_MODE_OUTLINE || + emitting_verb == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) { + if (emitting_verb == menu.first.first) { + lastverb = menu.first.first; + check->property_active() = true; + lastverb = -1; + } else { lastverb = menu.first.first; check->property_active() = false; lastverb = -1; -- GitLab From 26d212cbf6f6f5a1d6411b07caf372f207d9a720 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Wed, 2 Oct 2019 20:29:22 +0200 Subject: [PATCH 18/29] Fix selecting --- src/ui/desktop/menubar.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 36cce239c4..bea11ff579 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -75,9 +75,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) { if (action->verb->get_code() == menu.first.first) { lastverb = action->verb->get_code(); - if (!check->property_active()) { - sp_action_perform(action, nullptr); - } + sp_action_perform(action, nullptr); check->property_active() = true; lastverb = -1; } else { @@ -91,9 +89,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) action->verb->get_code() == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) { if (action->verb->get_code() == menu.first.first) { lastverb = action->verb->get_code(); - if (!check->property_active()) { - sp_action_perform(action, nullptr); - } + sp_action_perform(action, nullptr); check->property_active() = true; lastverb = -1; } else { -- GitLab From c46eaa3d9ec3227936594dc769f5c5fe28390535 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Thu, 3 Oct 2019 00:25:52 +0200 Subject: [PATCH 19/29] Improve Mac menu --- src/ui/desktop/menubar.cpp | 42 +++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index bea11ff579..c06d39b1e3 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -71,8 +71,11 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) if (menu.second == SP_ACTIVE_DESKTOP) { Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { - if (action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_NORMAL || - action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) { + if ((menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || + menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) && + action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_NORMAL || + action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) + { if (action->verb->get_code() == menu.first.first) { lastverb = action->verb->get_code(); sp_action_perform(action, nullptr); @@ -83,21 +86,27 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) check->property_active() = false; lastverb = -1; } - } else if (action->verb->get_code() == SP_VERB_VIEW_MODE_NORMAL || - action->verb->get_code() == SP_VERB_VIEW_MODE_NO_FILTERS || - action->verb->get_code() == SP_VERB_VIEW_MODE_OUTLINE || - action->verb->get_code() == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) { + } else if ((menu.first.first == SP_VERB_VIEW_MODE_NORMAL || + menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || + menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || + menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) && + action->verb->get_code() == SP_VERB_VIEW_MODE_NORMAL || + action->verb->get_code() == SP_VERB_VIEW_MODE_NO_FILTERS || + action->verb->get_code() == SP_VERB_VIEW_MODE_OUTLINE || + action->verb->get_code() == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) + { if (action->verb->get_code() == menu.first.first) { lastverb = action->verb->get_code(); sp_action_perform(action, nullptr); check->property_active() = true; lastverb = -1; + view = true; } else { lastverb = menu.first.first; check->property_active() = false; lastverb = -1; } - } else { + } else if (action->verb->get_code() == menu.first.first) { lastverb = action->verb->get_code(); sp_action_perform(action, nullptr); lastverb = -1; @@ -126,8 +135,11 @@ static void set_menuitems(unsigned int emitting_verb, bool value) } Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); if (check) { - if (emitting_verb == SP_VERB_VIEW_COLOR_MODE_NORMAL || - emitting_verb == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) { + if ((menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || + menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) && + emitting_verb == SP_VERB_VIEW_COLOR_MODE_NORMAL || + emitting_verb == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) + { if (emitting_verb == menu.first.first) { lastverb = menu.first.first; check->property_active() = true; @@ -137,9 +149,15 @@ static void set_menuitems(unsigned int emitting_verb, bool value) check->property_active() = false; lastverb = -1; } - } else if (emitting_verb == SP_VERB_VIEW_MODE_NORMAL || emitting_verb == SP_VERB_VIEW_MODE_NO_FILTERS || - emitting_verb == SP_VERB_VIEW_MODE_OUTLINE || - emitting_verb == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) { + } else if ((menu.first.first == SP_VERB_VIEW_MODE_NORMAL || + menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || + menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || + menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) && + emitting_verb == SP_VERB_VIEW_MODE_NORMAL || + emitting_verb == SP_VERB_VIEW_MODE_NO_FILTERS || + emitting_verb == SP_VERB_VIEW_MODE_OUTLINE || + emitting_verb == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) + { if (emitting_verb == menu.first.first) { lastverb = menu.first.first; check->property_active() = true; -- GitLab From 06523449cce6de9439082682caf13735f7105716 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Thu, 3 Oct 2019 00:35:19 +0200 Subject: [PATCH 20/29] fix compiling issue --- src/ui/desktop/menubar.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index c06d39b1e3..24a198558b 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -73,8 +73,8 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) if (check) { if ((menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) && - action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_NORMAL || - action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) + (action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_NORMAL || + action->verb->get_code() == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) { if (action->verb->get_code() == menu.first.first) { lastverb = action->verb->get_code(); @@ -90,10 +90,10 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) && - action->verb->get_code() == SP_VERB_VIEW_MODE_NORMAL || + (action->verb->get_code() == SP_VERB_VIEW_MODE_NORMAL || action->verb->get_code() == SP_VERB_VIEW_MODE_NO_FILTERS || action->verb->get_code() == SP_VERB_VIEW_MODE_OUTLINE || - action->verb->get_code() == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) + action->verb->get_code() == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) { if (action->verb->get_code() == menu.first.first) { lastverb = action->verb->get_code(); @@ -137,8 +137,8 @@ static void set_menuitems(unsigned int emitting_verb, bool value) if (check) { if ((menu.first.first == SP_VERB_VIEW_COLOR_MODE_NORMAL || menu.first.first == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) && - emitting_verb == SP_VERB_VIEW_COLOR_MODE_NORMAL || - emitting_verb == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE) + (emitting_verb == SP_VERB_VIEW_COLOR_MODE_NORMAL || + emitting_verb == SP_VERB_VIEW_COLOR_MODE_GRAYSCALE)) { if (emitting_verb == menu.first.first) { lastverb = menu.first.first; @@ -153,10 +153,10 @@ static void set_menuitems(unsigned int emitting_verb, bool value) menu.first.first == SP_VERB_VIEW_MODE_NO_FILTERS || menu.first.first == SP_VERB_VIEW_MODE_OUTLINE || menu.first.first == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) && - emitting_verb == SP_VERB_VIEW_MODE_NORMAL || + (emitting_verb == SP_VERB_VIEW_MODE_NORMAL || emitting_verb == SP_VERB_VIEW_MODE_NO_FILTERS || emitting_verb == SP_VERB_VIEW_MODE_OUTLINE || - emitting_verb == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES) + emitting_verb == SP_VERB_VIEW_MODE_VISIBLE_HAIRLINES)) { if (emitting_verb == menu.first.first) { lastverb = menu.first.first; -- GitLab From 185f78bc57b8d02a24f753718c8293659084d6e9 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Thu, 3 Oct 2019 00:48:54 +0200 Subject: [PATCH 21/29] Erase remaining bar to compile --- src/ui/desktop/menubar.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 24a198558b..8f41f89fd1 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -100,7 +100,6 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) sp_action_perform(action, nullptr); check->property_active() = true; lastverb = -1; - view = true; } else { lastverb = menu.first.first; check->property_active() = false; -- GitLab From 0e30d8c4e9fa6812ea8772fd88940a05aa75f86d Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Thu, 3 Oct 2019 18:27:05 +0200 Subject: [PATCH 22/29] fix activate no check items --- src/ui/desktop/menubar.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 8f41f89fd1..dde3e4944e 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -110,6 +110,10 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) sp_action_perform(action, nullptr); lastverb = -1; } + } else { + lastverb = action->verb->get_code(); + sp_action_perform(action, nullptr); + lastverb = -1; } } } -- GitLab From a6627722014e07e346e0474837101a50f4ad9d87 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Thu, 3 Oct 2019 20:08:30 +0200 Subject: [PATCH 23/29] allow use non check buttons --- src/ui/desktop/menubar.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index dde3e4944e..3ab9e8bcc5 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -67,6 +67,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) return; } #ifdef GDK_WINDOWING_QUARTZ + nocheck = true; for (auto menu : menuitems) { if (menu.second == SP_ACTIVE_DESKTOP) { Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); @@ -81,6 +82,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) sp_action_perform(action, nullptr); check->property_active() = true; lastverb = -1; + nocheck = false; } else { lastverb = menu.first.first; check->property_active() = false; @@ -100,6 +102,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) sp_action_perform(action, nullptr); check->property_active() = true; lastverb = -1; + nocheck = false; } else { lastverb = menu.first.first; check->property_active() = false; @@ -109,14 +112,15 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) lastverb = action->verb->get_code(); sp_action_perform(action, nullptr); lastverb = -1; + nocheck = false; } - } else { - lastverb = action->verb->get_code(); - sp_action_perform(action, nullptr); - lastverb = -1; } } } + if (nocheck) { + lastverb = action->verb->get_code(); + sp_action_perform(action, nullptr); + } #else lastverb = action->verb->get_code(); sp_action_perform(action, nullptr); -- GitLab From caa59066514d71055f515f4043de1e5b38dc0acf Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Thu, 3 Oct 2019 21:56:59 +0200 Subject: [PATCH 24/29] fix compiling issue --- src/ui/desktop/menubar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 3ab9e8bcc5..81f92f77a4 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -67,7 +67,7 @@ static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) return; } #ifdef GDK_WINDOWING_QUARTZ - nocheck = true; + bool nocheck = true; for (auto menu : menuitems) { if (menu.second == SP_ACTIVE_DESKTOP) { Gtk::CheckMenuItem *check = dynamic_cast(menu.first.second); -- GitLab From b0c7800d14d968358c25b011e93f72c341d04b18 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Wed, 9 Oct 2019 23:56:10 +0200 Subject: [PATCH 25/29] Try to fix task radio menus --- src/ui/desktop/menubar.cpp | 42 +++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 81f92f77a4..8111568a62 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -407,6 +407,23 @@ build_menu_check_item_from_verb(SPAction* action) return menuitem; } +#ifdef GDK_WINDOWING_QUARTZ +// ================= Tasks Submenu Mac============== +static void +task_activated_mac(SPDesktop* dt, int number, std::vector taskitems) +{ + Inkscape::UI::UXManager::getInstance()->setTask(dt, number); + int counter = 0; + for (auto menuitem : taskitems) { + if (counter == number) { + menuitem->set_active = true; + } else { + menuitem->set_active = false; + } + } +} +#endif + // ================= Tasks Submenu ============== static void task_activated(SPDesktop* dt, int number) @@ -439,23 +456,24 @@ add_tasks(Gtk::MenuShell* menu, SPDesktop* dt) int active = Inkscape::UI::UXManager::getInstance()->getDefaultTask(dt); #ifdef GDK_WINDOWING_QUARTZ + std::vector taskitems; for (unsigned int i = 0; i < 3; ++i) { - Gtk::CheckMenuItem *menuitem = Gtk::manage(new Gtk::CheckMenuItem(data[i][0])); if (menuitem) { - if (active == i) { - menuitem->set_active(true); - } else { - menuitem->set_active(false); - } + taskitems->push_back(menuitem); + } + } + for (unsigned int i = 0; i < 3; ++i) { + if (active == i) { + taskitems[i]->set_active(true); + } else { + taskitems[i]->set_active(false); + } - menuitem->signal_toggled().connect(sigc::bind(sigc::ptr_fun(&task_activated), dt, i)); - menuitem->signal_select().connect( - sigc::bind(sigc::ptr_fun(&select_task), dt, data[i][1])); - menuitem->signal_deselect().connect(sigc::bind(sigc::ptr_fun(&deselect_task), dt)); + menuitem->signal_clicked().connect( + sigc::bind(sigc::ptr_fun(&task_activated_mac), dt, i, taskitem)); - menu->append(*menuitem); - } + menu->append(*menuitem); } #else Gtk::RadioMenuItem::Group group; -- GitLab From 69d457b93bac0560a8cf240a109209e5f26cc82e Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Thu, 10 Oct 2019 00:50:16 +0200 Subject: [PATCH 26/29] fix compiling issues --- src/ui/desktop/menubar.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 8111568a62..7b12f454d9 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -416,9 +416,9 @@ task_activated_mac(SPDesktop* dt, int number, std::vector int counter = 0; for (auto menuitem : taskitems) { if (counter == number) { - menuitem->set_active = true; + menuitem->set_active(true); } else { - menuitem->set_active = false; + menuitem->set_active(false); } } } @@ -460,7 +460,7 @@ add_tasks(Gtk::MenuShell* menu, SPDesktop* dt) for (unsigned int i = 0; i < 3; ++i) { Gtk::CheckMenuItem *menuitem = Gtk::manage(new Gtk::CheckMenuItem(data[i][0])); if (menuitem) { - taskitems->push_back(menuitem); + taskitems.push_back(menuitem); } } for (unsigned int i = 0; i < 3; ++i) { @@ -470,10 +470,10 @@ add_tasks(Gtk::MenuShell* menu, SPDesktop* dt) taskitems[i]->set_active(false); } - menuitem->signal_clicked().connect( - sigc::bind(sigc::ptr_fun(&task_activated_mac), dt, i, taskitem)); + taskitems[i]->signal_clicked().connect( + sigc::bind(sigc::ptr_fun(&task_activated_mac), dt, i, taskitems)); - menu->append(*menuitem); + menu->append(*taskitems[i]); } #else Gtk::RadioMenuItem::Group group; -- GitLab From a3b42e8b06cfb48adbd8f1d87b1b422039b882b6 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Thu, 10 Oct 2019 07:16:25 +0000 Subject: [PATCH 27/29] Fix compiling issue --- src/ui/desktop/menubar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 7b12f454d9..b16ae8843f 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -470,7 +470,7 @@ add_tasks(Gtk::MenuShell* menu, SPDesktop* dt) taskitems[i]->set_active(false); } - taskitems[i]->signal_clicked().connect( + taskitems[i]->signal_toggled().connect( sigc::bind(sigc::ptr_fun(&task_activated_mac), dt, i, taskitems)); menu->append(*taskitems[i]); -- GitLab From 0f62124b662cf3ea504bbee88e11a8cc28108e8f Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Thu, 10 Oct 2019 11:44:56 +0000 Subject: [PATCH 28/29] Fix infinite loop --- src/ui/desktop/menubar.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index b16ae8843f..afccfcacae 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -43,7 +43,8 @@ std::vector, Inkscape::UI::View::View *>> menuitems; unsigned int lastverb = -1; -; +bool updatingtask = false; + // Sets tip static void @@ -412,6 +413,10 @@ build_menu_check_item_from_verb(SPAction* action) static void task_activated_mac(SPDesktop* dt, int number, std::vector taskitems) { + if (updatingtask) { + return; + } + updatingtask = true; Inkscape::UI::UXManager::getInstance()->setTask(dt, number); int counter = 0; for (auto menuitem : taskitems) { @@ -421,6 +426,7 @@ task_activated_mac(SPDesktop* dt, int number, std::vector menuitem->set_active(false); } } + updatingtask = false; } #endif -- GitLab From 6db8e19a5cb331b9d36b7065aa316a83616d0b2b Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Thu, 10 Oct 2019 23:01:20 +0200 Subject: [PATCH 29/29] fix issue toggling --- src/ui/desktop/menubar.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index afccfcacae..3f5babebb4 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -425,6 +425,7 @@ task_activated_mac(SPDesktop* dt, int number, std::vector } else { menuitem->set_active(false); } + counter++; } updatingtask = false; } -- GitLab