summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabiertxof <jabier.arraiza@marker.es>2019-07-28 16:59:09 +0000
committerJabiertxof <jabier.arraiza@marker.es>2019-07-29 07:20:15 +0000
commita7e562fc5b5f2c6a41548eaee85d9803cada7621 (patch)
tree1e36150108dac936157db57f01bd999c7be56c53 /src
parentFix for bug https://gitlab.com/inkscape/inbox/issues/699 (diff)
downloadinkscape-a7e562fc5b5f2c6a41548eaee85d9803cada7621.tar.gz
inkscape-a7e562fc5b5f2c6a41548eaee85d9803cada7621.zip
Add Patrick improvements to verbs toggle menu items
Diffstat (limited to 'src')
-rw-r--r--src/desktop.cpp21
-rw-r--r--src/desktop.h2
-rw-r--r--src/object/sp-namedview.cpp5
-rw-r--r--src/object/sp-namedview.h2
-rw-r--r--src/ui/desktop/menubar.cpp45
-rw-r--r--src/ui/desktop/menubar.h1
-rw-r--r--src/verbs.cpp2
-rw-r--r--src/widgets/desktop-widget.cpp2
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;