summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohn Smith <john.smith7545@yahoo.com>2012-08-09 07:23:35 +0000
committerJohn Smith <john.smith7545@yahoo.com>2012-08-09 07:23:35 +0000
commit0d1d59a3dfe51740e7601dba044c9ed979e4c9f7 (patch)
tree7b97271b606850781571acd163c8b957aae1e379 /src
parentcopyright message rewritten object properties dialog (diff)
downloadinkscape-0d1d59a3dfe51740e7601dba044c9ed979e4c9f7.tar.gz
inkscape-0d1d59a3dfe51740e7601dba044c9ed979e4c9f7.zip
Fix for 819671 : No visual indication for grid and snap being on/off
(bzr r11600)
Diffstat (limited to 'src')
-rw-r--r--src/desktop.cpp6
-rw-r--r--src/desktop.h1
-rw-r--r--src/interface.cpp71
-rw-r--r--src/menus-skeleton.h8
-rw-r--r--src/sp-namedview.cpp11
-rw-r--r--src/sp-namedview.h1
-rw-r--r--src/ui/view/edit-widget-interface.h3
-rw-r--r--src/widgets/desktop-widget.cpp6
-rw-r--r--src/widgets/desktop-widget.h3
9 files changed, 97 insertions, 13 deletions
diff --git a/src/desktop.cpp b/src/desktop.cpp
index ce1f4cda4..ca981a458 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -1430,6 +1430,11 @@ void SPDesktop::toggleColorProfAdjust()
_widget->toggleColorProfAdjust();
}
+bool SPDesktop::colorProfAdjustEnabled()
+{
+ return _widget->colorProfAdjustEnabled();
+}
+
void SPDesktop::toggleGrids()
{
if (namedview->grids) {
@@ -1460,6 +1465,7 @@ void SPDesktop::toggleSnapGlobal()
namedview->setSnapGlobal(!v);
}
+
//----------------------------------------------------------------------
// Callback implementations. The virtual ones are connected by the view.
diff --git a/src/desktop.h b/src/desktop.h
index 7bc4ba463..919cd905e 100644
--- a/src/desktop.h
+++ b/src/desktop.h
@@ -358,6 +358,7 @@ public:
bool isWaitingCursor() const { return waiting_cursor; };
void toggleColorProfAdjust();
+ bool colorProfAdjustEnabled();
void toggleGrids();
void toggleSnapGlobal();
diff --git a/src/interface.cpp b/src/interface.cpp
index 1d09f2b72..ac624f0e1 100644
--- a/src/interface.cpp
+++ b/src/interface.cpp
@@ -534,16 +534,34 @@ checkitem_toggled(GtkCheckMenuItem *menuitem, gpointer user_data)
{
gchar const *pref = (gchar const *) user_data;
Inkscape::UI::View::View *view = (Inkscape::UI::View::View *) g_object_get_data(G_OBJECT(menuitem), "view");
+ SPAction *action = (SPAction *) g_object_get_data(G_OBJECT(menuitem), "action");
+ if (action) {
+
+ sp_ui_menu_activate(menuitem, action);
+
+ } else if (pref) {
+ // The Show/Hide menu items without actions
+ Glib::ustring pref_path = getLayoutPrefPath( view );
+ pref_path += pref;
+ pref_path += "/state";
+
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ gboolean checked = gtk_check_menu_item_get_active(menuitem);
+ prefs->setBool(pref_path, checked);
+
+ reinterpret_cast<SPDesktop*>(view)->layoutWidget();
+ }
+}
+
+static bool getViewStateFromPref(Inkscape::UI::View::View *view, gchar const *pref)
+{
Glib::ustring pref_path = getLayoutPrefPath( view );
pref_path += pref;
pref_path += "/state";
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- gboolean checked = gtk_check_menu_item_get_active(menuitem);
- prefs->setBool(pref_path, checked);
-
- reinterpret_cast<SPDesktop*>(view)->layoutWidget();
+ return prefs->getBool(pref_path, true);
}
#if GTK_CHECK_VERSION(3,0,0)
@@ -556,13 +574,34 @@ static gboolean checkitem_update(GtkWidget *widget, GdkEventExpose * /*event*/,
gchar const *pref = (gchar const *) user_data;
Inkscape::UI::View::View *view = (Inkscape::UI::View::View *) g_object_get_data(G_OBJECT(menuitem), "view");
+ SPAction *action = (SPAction *) g_object_get_data(G_OBJECT(menuitem), "action");
+ SPDesktop *dt = static_cast<SPDesktop*>(view);
- Glib::ustring pref_path = getLayoutPrefPath( view );
- pref_path += pref;
- pref_path += "/state";
+ bool ison = false;
+ if (action) {
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- bool ison = prefs->getBool(pref_path, true);
+ if (!strcmp(action->id, "ToggleGrid")) {
+ ison = dt->gridsEnabled();
+ }
+ if (!strcmp(action->id, "ToggleGuides")) {
+ ison = dt->namedview->getGuides();
+ }
+ if (!strcmp(action->id, "ToggleSnapGlobal")) {
+ ison = dt->namedview->getSnapGlobal();
+ }
+ if (!strcmp(action->id, "ViewCmsToggle")) {
+ ison = dt->colorProfAdjustEnabled();
+ }
+ if (!strcmp(action->id, "ToggleRulers")) {
+ ison = getViewStateFromPref(view, pref);
+ }
+ if (!strcmp(action->id, "ToggleScrollbars")) {
+ ison = getViewStateFromPref(view, pref);
+ }
+ } else if (pref) {
+ // The Show/Hide menu items without actions
+ ison = getViewStateFromPref(view, pref);
+ }
g_signal_handlers_block_by_func(G_OBJECT(menuitem), (gpointer)(GCallback)checkitem_toggled, user_data);
gtk_check_menu_item_set_active(menuitem, ison);
@@ -571,6 +610,7 @@ static gboolean checkitem_update(GtkWidget *widget, GdkEventExpose * /*event*/,
return FALSE;
}
+
static void taskToggled(GtkCheckMenuItem *menuitem, gpointer userData)
{
if ( gtk_check_menu_item_get_active(menuitem) ) {
@@ -647,6 +687,7 @@ sp_ui_menu_append_check_item_from_verb(GtkMenu *menu, Inkscape::UI::View::View *
SPAction *action = (verb) ? verb->get_action(view) : 0;
GtkWidget *item = gtk_check_menu_item_new();
+
if (verb && shortcut!=GDK_KEY_VoidSymbol) {
gchar* c = sp_shortcut_get_label(shortcut);
@@ -688,6 +729,7 @@ sp_ui_menu_append_check_item_from_verb(GtkMenu *menu, Inkscape::UI::View::View *
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
g_object_set_data(G_OBJECT(item), "view", (gpointer) view);
+ g_object_set_data(G_OBJECT(item), "action", (gpointer) action);
g_signal_connect( G_OBJECT(item), "toggled", (GCallback) callback_toggle, (void *) pref);
@@ -697,8 +739,11 @@ sp_ui_menu_append_check_item_from_verb(GtkMenu *menu, Inkscape::UI::View::View *
g_signal_connect( G_OBJECT(item), "expose_event", (GCallback) callback_update, (void *) pref);
#endif
+ (*callback_update)(item, NULL, (void *)pref);
+
g_signal_connect( G_OBJECT(item), "select", G_CALLBACK(sp_ui_menu_select), (gpointer) (action ? action->tip : tip));
g_signal_connect( G_OBJECT(item), "deselect", G_CALLBACK(sp_ui_menu_deselect), NULL);
+
}
static void
@@ -912,6 +957,14 @@ void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, GtkWidget *menu, Inkscape
g_signal_connect( G_OBJECT(item), "expose_event", (GCallback) update_view_menu, (void *) action);
#endif
}
+ } else if (menu_pntr->attribute("check") != NULL) {
+ SPAction *action = NULL;
+ if (verb->get_code() != SP_VERB_NONE) {
+ action = verb->get_action(view);
+ }
+ sp_ui_menu_append_check_item_from_verb(GTK_MENU(menu), view, action->name, action->tip, NULL,
+ checkitem_toggled, checkitem_update, verb);
+
} else {
sp_ui_menu_append_item_from_verb(GTK_MENU(menu), verb, view);
group = NULL;
diff --git a/src/menus-skeleton.h b/src/menus-skeleton.h
index 21e25c6dc..7ea720419 100644
--- a/src/menus-skeleton.h
+++ b/src/menus-skeleton.h
@@ -129,10 +129,10 @@ static char const menus_skeleton[] =
//" <verb verb-id=\"DialogPrintColorsPreview\" />\n"
" </submenu>\n"
" <separator/>\n"
-" <verb verb-id=\"ToggleGrid\" />\n"
-" <verb verb-id=\"ToggleGuides\" />\n"
-" <verb verb-id=\"ToggleSnapGlobal\" />\n"
-" <verb verb-id=\"ViewCmsToggle\" />\n"
+" <verb verb-id=\"ToggleGrid\" check=\"yes\" />\n"
+" <verb verb-id=\"ToggleGuides\" check=\"yes\" />\n"
+" <verb verb-id=\"ToggleSnapGlobal\" check=\"yes\" />\n"
+" <verb verb-id=\"ViewCmsToggle\" check=\"yes\" />\n"
" <separator/>\n"
" <submenu name=\"" N_("Sh_ow/Hide") "\">\n"
" <objects-checkboxes/>\n"
diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp
index d9c68f7fb..75c2f8343 100644
--- a/src/sp-namedview.cpp
+++ b/src/sp-namedview.cpp
@@ -1073,6 +1073,17 @@ void SPNamedView::setGuides(bool v)
sp_repr_set_boolean(this->getRepr(), "inkscape:guide-bbox", v);
}
+bool SPNamedView::getGuides()
+{
+ g_assert(this->getRepr() != NULL);
+ unsigned int v;
+ unsigned int set = sp_repr_get_boolean(this->getRepr(), "showguides", &v);
+ if (!set) { // hide guides if not specified, for backwards compatibility
+ v = FALSE;
+ }
+
+ return v;
+}
/**
* Gets page fitting margin information from the namedview node in the XML.
* \param nv_repr reference to this document's namedview
diff --git a/src/sp-namedview.h b/src/sp-namedview.h
index 69cc9c2b5..e83ead69e 100644
--- a/src/sp-namedview.h
+++ b/src/sp-namedview.h
@@ -89,6 +89,7 @@ struct SPNamedView : public SPObjectGroup {
bool getSnapGlobal() const;
void setSnapGlobal(bool v);
void setGuides(bool v);
+ bool getGuides();
private:
double getMarginLength(gchar const * const key,SPUnit const * const margin_units,SPUnit const * const return_units,double const width,double const height,bool const use_width);
diff --git a/src/ui/view/edit-widget-interface.h b/src/ui/view/edit-widget-interface.h
index 2426fa5b1..412c7ff8c 100644
--- a/src/ui/view/edit-widget-interface.h
+++ b/src/ui/view/edit-widget-interface.h
@@ -119,6 +119,9 @@ struct EditWidgetInterface
/// Toggle CMS on/off and set preference value accordingly
virtual void toggleColorProfAdjust() = 0;
+ /// Is CMS on/off
+ virtual bool colorProfAdjustEnabled() = 0;
+
/// Temporarily block signals and update zoom display
virtual void updateZoom() = 0;
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index 50c87a9a8..81361f0f9 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -1924,6 +1924,12 @@ sp_desktop_widget_toggle_scrollbars (SPDesktopWidget *dtw)
}
}
+bool sp_desktop_widget_color_prof_adj_enabled( SPDesktopWidget *dtw )
+{
+ return gtk_widget_get_sensitive( dtw->cms_adjust ) &&
+ SP_BUTTON_IS_DOWN(dtw->cms_adjust) ;
+}
+
void sp_desktop_widget_toggle_color_prof_adj( SPDesktopWidget *dtw )
{
diff --git a/src/widgets/desktop-widget.h b/src/widgets/desktop-widget.h
index 4fd26d11d..73194304f 100644
--- a/src/widgets/desktop-widget.h
+++ b/src/widgets/desktop-widget.h
@@ -49,6 +49,7 @@ void sp_desktop_widget_toggle_rulers (SPDesktopWidget *dtw);
void sp_desktop_widget_toggle_scrollbars (SPDesktopWidget *dtw);
void sp_desktop_widget_update_scrollbars (SPDesktopWidget *dtw, double scale);
void sp_desktop_widget_toggle_color_prof_adj( SPDesktopWidget *dtw );
+bool sp_desktop_widget_color_prof_adj_enabled( SPDesktopWidget *dtw );
void sp_dtw_desktop_activate (SPDesktopWidget *dtw);
void sp_dtw_desktop_deactivate (SPDesktopWidget *dtw);
@@ -179,6 +180,8 @@ struct SPDesktopWidget {
{ sp_desktop_widget_toggle_scrollbars (_dtw); }
virtual void toggleColorProfAdjust()
{ sp_desktop_widget_toggle_color_prof_adj(_dtw); }
+ virtual bool colorProfAdjustEnabled()
+ { return sp_desktop_widget_color_prof_adj_enabled(_dtw); }
virtual void updateZoom()
{ sp_desktop_widget_update_zoom (_dtw); }
virtual void letZoomGrabFocus()