diff options
| author | Jabiertxof <jabier.arraiza@marker.es> | 2019-07-28 16:59:09 +0000 |
|---|---|---|
| committer | Jabiertxof <jabier.arraiza@marker.es> | 2019-07-29 07:20:15 +0000 |
| commit | a7e562fc5b5f2c6a41548eaee85d9803cada7621 (patch) | |
| tree | 1e36150108dac936157db57f01bd999c7be56c53 /src | |
| parent | Fix for bug https://gitlab.com/inkscape/inbox/issues/699 (diff) | |
| download | inkscape-a7e562fc5b5f2c6a41548eaee85d9803cada7621.tar.gz inkscape-a7e562fc5b5f2c6a41548eaee85d9803cada7621.zip | |
Add Patrick improvements to verbs toggle menu items
Diffstat (limited to 'src')
| -rw-r--r-- | src/desktop.cpp | 21 | ||||
| -rw-r--r-- | src/desktop.h | 2 | ||||
| -rw-r--r-- | src/object/sp-namedview.cpp | 5 | ||||
| -rw-r--r-- | src/object/sp-namedview.h | 2 | ||||
| -rw-r--r-- | src/ui/desktop/menubar.cpp | 45 | ||||
| -rw-r--r-- | src/ui/desktop/menubar.h | 1 | ||||
| -rw-r--r-- | src/verbs.cpp | 2 | ||||
| -rw-r--r-- | src/widgets/desktop-widget.cpp | 2 |
8 files changed, 43 insertions, 37 deletions
diff --git a/src/desktop.cpp b/src/desktop.cpp index 6cace5989..b458d0e78 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -66,6 +66,7 @@ #include "ui/tool-factory.h" #include "ui/tools/box3d-tool.h" #include "ui/tools/select-tool.h" +#include "ui/desktop/menubar.h" #include "widgets/desktop-widget.h" @@ -1422,7 +1423,7 @@ SPDesktop::toggleRulers() _widget->toggleRulers(); Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_TOGGLE_RULERS); if (verb) { - _menu_update.emit(verb->get_code()); + _menu_update.emit(verb->get_code(), getStateFromPref(this, "rulers")); } } @@ -1432,7 +1433,7 @@ SPDesktop::toggleScrollbars() _widget->toggleScrollbars(); Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_TOGGLE_SCROLLBARS); if (verb) { - _menu_update.emit(verb->get_code()); + _menu_update.emit(verb->get_code(), getStateFromPref(this, "scrollbars")); } } @@ -1445,7 +1446,7 @@ void SPDesktop::toggleToolbar(gchar const *toolbar_name, unsigned int verbenum) prefs->setBool(pref_path, !visible); Inkscape::Verb *verb = Inkscape::Verb::get(verbenum); if (verb) { - _menu_update.emit(verb->get_code()); + _menu_update.emit(verb->get_code(), getStateFromPref(this, toolbar_name)); } layoutWidget(); } @@ -1589,7 +1590,7 @@ void SPDesktop::toggleColorProfAdjust() _widget->toggleColorProfAdjust(); Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_VIEW_CMS_TOGGLE); if (verb) { - _menu_update.emit(verb->get_code()); + _menu_update.emit(verb->get_code(), colorProfAdjustEnabled()); } } @@ -1598,7 +1599,7 @@ void SPDesktop::toggleGuidesLock() sp_namedview_guides_toggle_lock(this->getDocument(), namedview); Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_EDIT_GUIDES_TOGGLE_LOCK); if (verb) { - _menu_update.emit(verb->get_code()); + _menu_update.emit(verb->get_code(), namedview->lockguides); } } @@ -1620,7 +1621,7 @@ void SPDesktop::toggleGrids() } Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_TOGGLE_GRID); if (verb) { - _menu_update.emit(verb->get_code()); + _menu_update.emit(verb->get_code(), gridsEnabled()); } } @@ -1632,14 +1633,14 @@ void SPDesktop::toggleSplitMode() _xray = !_xray; Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_VIEW_TOGGLE_XRAY); if (verb) { - _menu_update.emit(verb->get_code()); + _menu_update.emit(verb->get_code(), xrayMode()); } } SPCanvas *canvas = getCanvas(); canvas->requestFullRedraw(); Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_VIEW_TOGGLE_SPLIT); if (verb) { - _menu_update.emit(verb->get_code()); + _menu_update.emit(verb->get_code(), splitMode()); } } } @@ -1652,14 +1653,14 @@ void SPDesktop::toggleXRay() _split_canvas = !_split_canvas; Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_VIEW_TOGGLE_SPLIT); if (verb) { - _menu_update.emit(verb->get_code()); + _menu_update.emit(verb->get_code(), splitMode()); } } SPCanvas *canvas = getCanvas(); canvas->requestFullRedraw(); Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_VIEW_TOGGLE_XRAY); if (verb) { - _menu_update.emit(verb->get_code()); + _menu_update.emit(verb->get_code(), xrayMode()); } } } diff --git a/src/desktop.h b/src/desktop.h index cff48aa99..1e9c9819f 100644 --- a/src/desktop.h +++ b/src/desktop.h @@ -206,7 +206,7 @@ public: Glib::ustring _reconstruction_old_layer_id; sigc::signal<void, sp_verb_t> _tool_changed; - sigc::signal<void, unsigned int> _menu_update; + sigc::signal<void, unsigned int, bool> _menu_update; sigc::signal<void, SPObject *> _layer_changed_signal; sigc::signal<bool, const SPCSSAttr *>::accumulated<StopOnTrue> _set_style_signal; sigc::signal<int, SPStyle *, int>::accumulated<StopOnNonZero> _query_style_signal; diff --git a/src/object/sp-namedview.cpp b/src/object/sp-namedview.cpp index 7fed2b9b5..80d1d0b41 100644 --- a/src/object/sp-namedview.cpp +++ b/src/object/sp-namedview.cpp @@ -976,9 +976,10 @@ static void sp_namedview_lock_single_guide(SPGuide* guide, bool locked) guide->set_locked(locked, true); } -void sp_namedview_toggle_guides(SPDocument *doc, Inkscape::XML::Node *repr) +void sp_namedview_toggle_guides(SPDocument *doc, SPNamedView *namedview) { unsigned int v; + Inkscape::XML::Node *repr = namedview->getRepr(); unsigned int set = sp_repr_get_boolean(repr, "showguides", &v); if (!set) { // hide guides if not specified, for backwards compatibility v = FALSE; @@ -994,7 +995,7 @@ void sp_namedview_toggle_guides(SPDocument *doc, Inkscape::XML::Node *repr) if (desktop) { Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_TOGGLE_GUIDES); if (verb) { - desktop->_menu_update.emit(verb->get_code()); + desktop->_menu_update.emit(verb->get_code(), namedview->getGuides()); } } doc->setModifiedSinceSave(); diff --git a/src/object/sp-namedview.h b/src/object/sp-namedview.h index 85db55a27..3aabacfc2 100644 --- a/src/object/sp-namedview.h +++ b/src/object/sp-namedview.h @@ -125,7 +125,7 @@ void sp_namedview_zoom_and_view_from_document(SPDesktop *desktop); void sp_namedview_document_from_window(SPDesktop *desktop); void sp_namedview_update_layers_from_document (SPDesktop *desktop); -void sp_namedview_toggle_guides(SPDocument *doc, Inkscape::XML::Node *repr); +void sp_namedview_toggle_guides(SPDocument *doc, SPNamedView *namedview); void sp_namedview_guides_toggle_lock(SPDocument *doc, SPNamedView *namedview); void sp_namedview_show_grids(SPNamedView *namedview, bool show, bool dirty_document); Inkscape::CanvasGrid * sp_namedview_get_first_enabled_grid(SPNamedView *namedview); diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 0ada70284..79c3f5aaf 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -41,6 +41,9 @@ // ================= Common ==================== +std::vector<std::pair<unsigned int, Gtk::CheckMenuItem *> > checkmenuitems; +unsigned int lastverb = 0;; + // Sets tip static void select_action(SPAction *action) @@ -56,31 +59,31 @@ deselect_action(SPAction *action) } // Trigger action -static void item_activate(Gtk::MenuItem *menuitem, SPAction *action) +static void +item_activate(Gtk::MenuItem *menuitem, SPAction *action) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - bool freeze = prefs->getBool("/menu/freeze", false); - if (!freeze) { - prefs->setBool("/menu/freeze", true); - sp_action_perform(action, nullptr); - prefs->setBool("/menu/freeze", false); + if (action->verb->get_code() == lastverb) { + lastverb = 0; + return; } + lastverb = action->verb->get_code(); + sp_action_perform(action, nullptr); + lastverb = 0; } -void activate_checkmenu(unsigned int emited_verb, unsigned int recibe_verb, Gtk::CheckMenuItem *menuitem) +static void +toggle_checkmenu(unsigned int emitting_verb, bool value) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - bool freeze = prefs->getBool("/menu/freeze", false); - if (!freeze) { - prefs->setBool("/menu/freeze", true); - if (emited_verb == recibe_verb) { - if (menuitem->get_active()) { - menuitem->property_active() = false; - } else { - menuitem->property_active() = true; + for (auto menu : checkmenuitems) { + if (emitting_verb == menu.first) { + if (emitting_verb == lastverb) { + lastverb = 0; + return; } + lastverb = emitting_verb; + menu.second->property_active() = value; + lastverb = 0; } - prefs->setBool("/menu/freeze", false); } } @@ -180,7 +183,7 @@ build_menu_item_from_verb(SPAction* action, // =============== CheckMenuItem ================== -static bool +bool getStateFromPref(SPDesktop* dt, Glib::ustring item) { Glib::ustring pref_path; @@ -449,8 +452,7 @@ build_menu(Gtk::MenuShell* menu, Inkscape::XML::Node* xml, Inkscape::UI::View::V Gtk::CheckMenuItem* menuitem = build_menu_check_item_from_verb(action); if (menuitem) { - SP_ACTIVE_DESKTOP->_menu_update.connect( - sigc::bind(sigc::ptr_fun(&activate_checkmenu), verb->get_code(), menuitem)); + checkmenuitems.push_back(std::make_pair(verb->get_code(), menuitem)); menu->append(*menuitem); } @@ -530,6 +532,7 @@ build_menu(Gtk::MenuShell* menu, Inkscape::XML::Node* xml, Inkscape::UI::View::V std::cerr << "build_menu: xml node has no name!" << std::endl; } } + SP_ACTIVE_DESKTOP->_menu_update.connect(sigc::ptr_fun(&toggle_checkmenu)); } diff --git a/src/ui/desktop/menubar.h b/src/ui/desktop/menubar.h index cf50c7f88..c04ff57d0 100644 --- a/src/ui/desktop/menubar.h +++ b/src/ui/desktop/menubar.h @@ -29,6 +29,7 @@ namespace View { } } +bool getStateFromPref(SPDesktop* dt, Glib::ustring item); Gtk::MenuBar* build_menubar(Inkscape::UI::View::View* view); #endif // SEEN_DESKTOP_MENUBAR_H diff --git a/src/verbs.cpp b/src/verbs.cpp index 67e0ba69c..2574ef784 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -2053,7 +2053,7 @@ void ZoomVerb::perform(SPAction *action, void *data) dt->toggleToolbar("statusbar", SP_VERB_TOGGLE_STATUSBAR); break; case SP_VERB_TOGGLE_GUIDES: - sp_namedview_toggle_guides(doc, repr); + sp_namedview_toggle_guides(doc, dt->namedview); break; case SP_VERB_TOGGLE_SNAPPING: { diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 99f24f818..7ddf56eb2 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -2369,7 +2369,7 @@ SPDesktopWidget::on_ruler_box_button_release_event(GdkEventButton *event, Gtk::E if (!_ruler_dragged) { // Ruler click (without drag) toggle the guide visibility on and off Inkscape::XML::Node *repr = desktop->namedview->getRepr(); - sp_namedview_toggle_guides(desktop->getDocument(), repr); + sp_namedview_toggle_guides(desktop->getDocument(), desktop->namedview); } _ruler_clicked = false; |
