From 893466b04179f1524839f7b674adf458562d3d2e Mon Sep 17 00:00:00 2001 From: joncruz Date: Sat, 5 Apr 2008 23:34:45 +0000 Subject: [PATCH] Enable/disable selection tools to match selection --- src/widgets/select-toolbar.cpp | 48 +++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp index 09f8c35f9..f996abe7a 100644 --- a/src/widgets/select-toolbar.cpp +++ b/src/widgets/select-toolbar.cpp @@ -60,7 +60,6 @@ sp_selection_layout_widget_update(SPWidget *spw, Inkscape::Selection *sel) } g_object_set_data(G_OBJECT(spw), "update", GINT_TO_POINTER(TRUE)); - bool setActive = false; using NR::X; using NR::Y; @@ -90,18 +89,7 @@ sp_selection_layout_widget_update(SPWidget *spw, Inkscape::Selection *sel) gtk_adjustment_set_value(a, sp_pixels_get_units(keyval[i].val, unit)); } } - - setActive = true; - } else { - setActive = false; } - } else { - setActive = false; - } - - GtkActionGroup *selectionActions = GTK_ACTION_GROUP( g_object_get_data(G_OBJECT(spw), "selectionActions") ); - if ( selectionActions ) { -// gtk_action_group_set_sensitive( selectionActions, setActive ); } g_object_set_data(G_OBJECT(spw), "update", GINT_TO_POINTER(FALSE)); @@ -125,8 +113,20 @@ static void sp_selection_layout_widget_change_selection(SPWidget *spw, Inkscape::Selection *selection, gpointer data) { SPDesktop *desktop = (SPDesktop *) data; - if (sp_desktop_selection(desktop) == selection) // only respond to changes in our desktop + if (sp_desktop_selection(desktop) == selection) { // only respond to changes in our desktop + gboolean setActive = (selection && !selection->isEmpty()); + std::vector *contextActions = reinterpret_cast *>(g_object_get_data(G_OBJECT(spw), "contextActions")); + if ( contextActions ) { + for ( std::vector::iterator iter = contextActions->begin(); + iter != contextActions->end(); ++iter) { + if ( setActive != gtk_action_is_sensitive(*iter) ) { + gtk_action_set_sensitive( *iter, setActive ); + } + } + } + sp_selection_layout_widget_update(spw, selection); + } } static void @@ -375,6 +375,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb GtkAction* act = 0; GtkActionGroup* selectionActions = mainActions; // temporary + std::vector* contextActions = new std::vector(); act = create_action_for_verb( Inkscape::Verb::get(SP_VERB_EDIT_SELECT_ALL), view, Inkscape::ICON_SIZE_SMALL_TOOLBAR ); gtk_action_group_add_action( selectionActions, act ); @@ -382,24 +383,33 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb gtk_action_group_add_action( selectionActions, act ); act = create_action_for_verb( Inkscape::Verb::get(SP_VERB_EDIT_DESELECT), view, Inkscape::ICON_SIZE_SMALL_TOOLBAR ); gtk_action_group_add_action( selectionActions, act ); + contextActions->push_back( act ); act = create_action_for_verb( Inkscape::Verb::get(SP_VERB_OBJECT_ROTATE_90_CCW), view, Inkscape::ICON_SIZE_SMALL_TOOLBAR ); gtk_action_group_add_action( selectionActions, act ); + contextActions->push_back( act ); act = create_action_for_verb( Inkscape::Verb::get(SP_VERB_OBJECT_ROTATE_90_CW), view, Inkscape::ICON_SIZE_SMALL_TOOLBAR ); gtk_action_group_add_action( selectionActions, act ); + contextActions->push_back( act ); act = create_action_for_verb( Inkscape::Verb::get(SP_VERB_OBJECT_FLIP_HORIZONTAL), view, Inkscape::ICON_SIZE_SMALL_TOOLBAR ); gtk_action_group_add_action( selectionActions, act ); + contextActions->push_back( act ); act = create_action_for_verb( Inkscape::Verb::get(SP_VERB_OBJECT_FLIP_VERTICAL), view, Inkscape::ICON_SIZE_SMALL_TOOLBAR ); gtk_action_group_add_action( selectionActions, act ); + contextActions->push_back( act ); act = create_action_for_verb( Inkscape::Verb::get(SP_VERB_SELECTION_TO_BACK), view, Inkscape::ICON_SIZE_SMALL_TOOLBAR ); gtk_action_group_add_action( selectionActions, act ); + contextActions->push_back( act ); act = create_action_for_verb( Inkscape::Verb::get(SP_VERB_SELECTION_LOWER), view, Inkscape::ICON_SIZE_SMALL_TOOLBAR ); gtk_action_group_add_action( selectionActions, act ); + contextActions->push_back( act ); act = create_action_for_verb( Inkscape::Verb::get(SP_VERB_SELECTION_RAISE), view, Inkscape::ICON_SIZE_SMALL_TOOLBAR ); gtk_action_group_add_action( selectionActions, act ); + contextActions->push_back( act ); act = create_action_for_verb( Inkscape::Verb::get(SP_VERB_SELECTION_TO_FRONT), view, Inkscape::ICON_SIZE_SMALL_TOOLBAR ); gtk_action_group_add_action( selectionActions, act ); + contextActions->push_back( act ); // Create the parent widget for x y w h tracker. GtkWidget *spw = sp_widget_new_global(INKSCAPE); @@ -430,6 +440,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb -1e6, GTK_WIDGET(desktop->canvas), tracker, spw, _("Horizontal coordinate of selection"), TRUE ); gtk_action_group_add_action( selectionActions, GTK_ACTION(eact) ); + contextActions->push_back( GTK_ACTION(eact) ); //TRANSLATORS: only translate "string" in "context|string". // For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS @@ -437,6 +448,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb -1e6, GTK_WIDGET(desktop->canvas), tracker, spw, _("Vertical coordinate of selection"), FALSE ); gtk_action_group_add_action( selectionActions, GTK_ACTION(eact) ); + contextActions->push_back( GTK_ACTION(eact) ); //TRANSLATORS: only translate "string" in "context|string". // For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS @@ -444,6 +456,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb 1e-3, GTK_WIDGET(desktop->canvas), tracker, spw, _("Width of selection"), FALSE ); gtk_action_group_add_action( selectionActions, GTK_ACTION(eact) ); + contextActions->push_back( GTK_ACTION(eact) ); // lock toggle { @@ -464,12 +477,14 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb 1e-3, GTK_WIDGET(desktop->canvas), tracker, spw, _("Height of selection"), FALSE ); gtk_action_group_add_action( selectionActions, GTK_ACTION(eact) ); + contextActions->push_back( GTK_ACTION(eact) ); // Add the units menu. act = tracker->createAction( "UnitsAction", _("Units"), ("") ); gtk_action_group_add_action( selectionActions, act ); g_object_set_data( G_OBJECT(spw), "selectionActions", selectionActions ); + g_object_set_data( G_OBJECT(spw), "contextActions", contextActions ); // Force update when selection changes. gtk_signal_connect(GTK_OBJECT(spw), "modify_selection", GTK_SIGNAL_FUNC(sp_selection_layout_widget_modify_selection), desktop); @@ -478,6 +493,13 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb // Update now. sp_selection_layout_widget_update(SP_WIDGET(spw), SP_ACTIVE_DESKTOP ? sp_desktop_selection(SP_ACTIVE_DESKTOP) : NULL); + for ( std::vector::iterator iter = contextActions->begin(); + iter != contextActions->end(); ++iter) { + if ( gtk_action_is_sensitive(*iter) ) { + gtk_action_set_sensitive( *iter, FALSE ); + } + } + // Insert spw into the toolbar. gtk_box_pack_start(GTK_BOX(holder), spw, FALSE, FALSE, 0); -- 2.30.2