From 7f67c57da5884d9bf1c44799b29ba9017cb0ac53 Mon Sep 17 00:00:00 2001 From: John Smith Date: Tue, 28 Aug 2012 10:48:54 +0900 Subject: Fix for 1042500 : Align and Distribute dialog when floating doesnt work on active doc (bzr r11625) --- src/ui/dialog/align-and-distribute.cpp | 19 +++++++++++++++++-- src/ui/dialog/align-and-distribute.h | 6 ++++++ 2 files changed, 23 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp index 9653b4e7a..67980cdc1 100644 --- a/src/ui/dialog/align-and-distribute.cpp +++ b/src/ui/dialog/align-and-distribute.cpp @@ -1104,6 +1104,9 @@ AlignAndDistribute::AlignAndDistribute() g_signal_connect (G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (on_selection_changed), this); randomize_bbox = Geom::OptRect(); + _desktopChangeConn = _deskTrack.connectDesktopChanged( sigc::mem_fun(*this, &AlignAndDistribute::setDesktop) ); + _deskTrack.connect(GTK_WIDGET(gobj())); + show_all_children(); on_tool_changed (NULL, NULL, this); // set current mode @@ -1114,11 +1117,23 @@ AlignAndDistribute::~AlignAndDistribute() sp_signal_disconnect_by_data (G_OBJECT (INKSCAPE), this); for (std::list::iterator it = _actionList.begin(); - it != _actionList.end(); - ++it) + it != _actionList.end(); ++it) { delete *it; + } + + _desktopChangeConn.disconnect(); + _deskTrack.disconnect(); +} + +void AlignAndDistribute::setTargetDesktop(SPDesktop *desktop) +{ + if (_desktop != desktop) { + _desktop = desktop; + on_tool_changed (NULL, NULL, this); + } } + void AlignAndDistribute::on_ref_change(){ Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->setInt("/dialogs/align/align-to", _combo.get_active_row_number()); diff --git a/src/ui/dialog/align-and-distribute.h b/src/ui/dialog/align-and-distribute.h index 7e649834e..969703807 100644 --- a/src/ui/dialog/align-and-distribute.h +++ b/src/ui/dialog/align-and-distribute.h @@ -22,6 +22,7 @@ #include #include #include "2geom/rect.h" +#include "ui/dialog/desktop-tracker.h" #if WITH_GTKMM_3_0 #include @@ -108,6 +109,7 @@ protected: void addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, guint row, guint col, Gtk::Table &table, Geom::Dim2 orientation, bool distribute); #endif + void setTargetDesktop(SPDesktop *desktop); std::list _actionList; UI::Widget::Frame _alignFrame, _distributeFrame, _rearrangeFrame, _removeOverlapFrame, _nodesFrame; @@ -129,6 +131,10 @@ protected: Gtk::CheckButton _selgrp; Gtk::ComboBoxText _combo; + SPDesktop *_desktop; + DesktopTracker _deskTrack; + sigc::connection _desktopChangeConn; + private: AlignAndDistribute(AlignAndDistribute const &d); AlignAndDistribute& operator=(AlignAndDistribute const &d); -- cgit v1.2.3