X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fview%2Fedit-widget.cpp;h=bac6854a13e873d874e65526fc3a0bee10c7788c;hb=0dd12485e26b98c7eb9963768ec4bd9869186d98;hp=71838c5776ea70f820be6933c90923426ab286d4;hpb=083019a06eddd168409cffb43567353f0604b854;p=inkscape.git diff --git a/src/ui/view/edit-widget.cpp b/src/ui/view/edit-widget.cpp index 71838c577..bac6854a1 100644 --- a/src/ui/view/edit-widget.cpp +++ b/src/ui/view/edit-widget.cpp @@ -1,13 +1,13 @@ /** * \brief This class implements the functionality of the window layout, menus, * and signals. - * + * * This is a reimplementation into C++/Gtkmm of Sodipodi's SPDesktopWidget class. * Both SPDesktopWidget and EditWidget adhere to the EditWidgetInterface, so * they both can serve as widget for the same SPDesktop/Edit class. * * Ideally, this class should only contain the handling of the Window (i.e., - * content construction and window signals) and implement its + * content construction and window signals) and implement its * EditWidgetInterface. * * Authors: @@ -16,7 +16,11 @@ * Derek P. Moore * Lauris Kaplinski * Frank Felfe + * John Bintz + * Johan Engelen * + * Copyright (C) 2007 Johan Engelen + * Copyright (C) 2006 John Bintz * Copyright (C) 1999-2005 Authors * Copyright (C) 2000-2001 Ximian, Inc. * @@ -29,6 +33,7 @@ #include #include +#include #include #include #include @@ -37,6 +42,8 @@ #include #include +#include + #include "macros.h" #include "path-prefix.h" #include "prefs-utils.h" @@ -58,12 +65,6 @@ #include "interface.h" #include "extension/db.h" -#ifdef WITH_INKBOARD -#include "ui/dialog/whiteboard-connect.h" -#include "ui/dialog/whiteboard-sharewithuser.h" -#include "ui/dialog/whiteboard-sharewithchat.h" -#endif - using namespace Inkscape::UI; using namespace Inkscape::UI::Widget; @@ -77,7 +78,8 @@ EditWidget::EditWidget (SPDocument *doc) _act_grp(Gtk::ActionGroup::create()), _ui_mgr(Gtk::UIManager::create()), _update_s_f(false), - _update_a_f(false) + _update_a_f(false), + _interaction_disabled_counter(0) { g_warning("Creating new EditWidget"); @@ -278,7 +280,7 @@ EditWidget::onDialogObjectProperties() _dlg_mgr.showDialog("ObjectProperties"); } -void +void EditWidget::onDialogTextProperties() { _dlg_mgr.showDialog("TextProperties"); @@ -289,7 +291,7 @@ EditWidget::onDialogTrace() { } -void +void EditWidget::onDialogTransformation() { _dlg_mgr.showDialog("Transformation"); @@ -301,50 +303,11 @@ EditWidget::onDialogXmlEditor() _dlg_mgr.showDialog("XmlEditor"); } -#ifdef WITH_INKBOARD -void -EditWidget::onDialogWhiteboardConnect() -{ - Dialog::WhiteboardConnectDialogImpl* dlg = dynamic_cast< Dialog::WhiteboardConnectDialogImpl* >(_dlg_mgr.getDialog("WhiteboardConnect")); - dlg->setSessionManager(); - _dlg_mgr.showDialog("WhiteboardConnect"); -} - -void -EditWidget::onDialogWhiteboardShareWithUser() -{ - Dialog::WhiteboardShareWithUserDialogImpl* dlg = dynamic_cast< Dialog::WhiteboardShareWithUserDialogImpl* >(_dlg_mgr.getDialog("WhiteboardShareWithUser")); - dlg->setSessionManager(); - _dlg_mgr.showDialog("WhiteboardShareWithUser"); -} - -void -EditWidget::onDialogWhiteboardShareWithChat() -{ - Dialog::WhiteboardShareWithChatroomDialogImpl* dlg = dynamic_cast< Dialog::WhiteboardShareWithChatroomDialogImpl* >(_dlg_mgr.getDialog("WhiteboardShareWithChat")); - dlg->setSessionManager(); - _dlg_mgr.showDialog("WhiteboardShareWithChat"); -} - -void -EditWidget::onDialogOpenSessionFile() -{ - g_log(NULL, G_LOG_LEVEL_DEBUG, "not reimplemented yet"); -} - -void -EditWidget::onDumpXMLTracker() -{ - g_log(NULL, G_LOG_LEVEL_DEBUG, "not reimplemented yet"); -} - -#endif - void EditWidget::onUriChanged() { g_message("onUriChanged called"); - + } // FIXME: strings are replaced by placeholders, NOT to be translated until the code is enabled @@ -360,9 +323,6 @@ EditWidget::initMenuActions() // _act_grp->add(Gtk::Action::create("MenuObject", _("PLACEHOLDER, do not translate"))); // _act_grp->add(Gtk::Action::create("MenuPath", _("PLACEHOLDER, do not translate"))); // _act_grp->add(Gtk::Action::create("MenuText", _("PLACEHOLDER, do not translate"))); -#ifdef WITH_INKBOARD -// _act_grp->add(Gtk::Action::create("MenuWhiteboard", _("PLACEHOLDER, do not translate"))); -#endif // _act_grp->add(Gtk::Action::create("MenuHelp", _("PLACEHOLDER, do not translate"))); // temporarily replaced with non-gettext version to have a well-sized menu // for testing: @@ -374,9 +334,6 @@ EditWidget::initMenuActions() _act_grp->add(Gtk::Action::create("MenuObject", "Object")); _act_grp->add(Gtk::Action::create("MenuPath", "Path")); _act_grp->add(Gtk::Action::create("MenuText", "Text")); -#ifdef WITH_INKBOARD - _act_grp->add(Gtk::Action::create("MenuWhiteboard", "Whiteboard")); -#endif _act_grp->add(Gtk::Action::create("MenuHelp", "Help")); // File menu @@ -458,6 +415,10 @@ EditWidget::initMenuActions() Gtk::Stock::REDO, Glib::ustring(), _("PLACEHOLDER, do not translate"))); + _act_grp->add(Gtk::Action::create("UndoHistory", + Stock::UNDO_HISTORY, Glib::ustring(), + _("PLACEHOLDER, do not translate"))); + _act_grp->add(Gtk::Action::create("Cut", Gtk::Stock::CUT, Glib::ustring(), _("PLACEHOLDER, do not translate"))); @@ -820,30 +781,6 @@ EditWidget::initMenuActions() // Whiteboard menu #ifdef WITH_INKBOARD - _act_grp->add(Gtk::Action::create("DialogWhiteboardConnect", - Gtk::Stock::CLEAR, Glib::ustring(), - _("PLACEHOLDER, do not translate")), - sigc::mem_fun(*this, &EditWidget::onDialogWhiteboardConnect)); - - _act_grp->add(Gtk::Action::create("DialogWhiteboardShareWithUser", - Gtk::Stock::CLEAR, Glib::ustring(), - _("PLACEHOLDER, do not translate")), - sigc::mem_fun(*this, &EditWidget::onDialogWhiteboardShareWithUser)); - - _act_grp->add(Gtk::Action::create("DialogWhiteboardShareWithChat", - Gtk::Stock::CLEAR, Glib::ustring(), - _("PLACEHOLDER, do not translate")), - sigc::mem_fun(*this, &EditWidget::onDialogWhiteboardShareWithChat)); - - _act_grp->add(Gtk::Action::create("WhiteboardOpenSessionFile", - Gtk::Stock::CLEAR, Glib::ustring(), - _("PLACEHOLDER, do not translate")), - sigc::mem_fun(*this, &EditWidget::onDialogOpenSessionFile)); - - _act_grp->add(Gtk::Action::create("WhiteboardDumpXMLTracker", - Gtk::Stock::CLEAR, Glib::ustring(), - _("PLACEHOLDER, do not translate")), - sigc::mem_fun(*this, &EditWidget::onDumpXMLTracker)); #endif // About menu @@ -1083,7 +1020,7 @@ void EditWidget::initTopRuler() { _viewport_table.attach(_top_ruler, 1, 2, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK); - + _tooltips.set_tip (_top_ruler, _top_ruler.get_tip()); } @@ -1091,7 +1028,7 @@ void EditWidget::initLeftRuler() { _viewport_table.attach(_left_ruler, 0, 1, 1, 2, Gtk::SHRINK, Gtk::FILL|Gtk::EXPAND); - + _tooltips.set_tip (_left_ruler, _left_ruler.get_tip()); } @@ -1112,14 +1049,14 @@ EditWidget::initRightScrollbar() _right_scrollbar.property_adjustment() = new Gtk::Adjustment (0.0, -4000.0, 4000.0, 10.0, 100.0, 4.0); } -void +void EditWidget::initStickyZoom() { _viewport_table.attach(_sticky_zoom, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); _sticky_zoom.set_active (prefs_get_int_attribute ("options.stickyzoom", "value", 0) != 0); _tooltips.set_tip (_sticky_zoom, _("Zoom drawing if window size changes")); - + /// \todo icon not implemented } @@ -1134,8 +1071,8 @@ EditWidget::initStatusbar() _layer_selector.reference(); _statusbar.pack_start (_layer_selector, false, false, 1); - _coord_status.property_n_rows() = 2; - _coord_status.property_n_columns() = 5; + _coord_status.property_n_rows() = 2; + _coord_status.property_n_columns() = 5; _coord_status.property_row_spacing() = 0; _coord_status.property_column_spacing() = 2; _coord_eventbox.add (_coord_status); @@ -1159,11 +1096,11 @@ EditWidget::initStatusbar() _select_status.set_markup (_("Welcome to Inkscape! Use shape or freehand tools to create objects; use selector (arrow) to move or transform them.")); // include this again with Gtk+-2.6 #if GTK_VERSION_GE(2,6) - _select_status.property_ellipsize() = Pango::ELLIPSIZE_END; + gtk_label_set_ellipsize (GTK_LABEL(_select_status.gobj()), PANGO_ELLIPSIZE_END); #endif _select_status.set_size_request (1, -1); _statusbar.pack_start (_select_status, true, true, 0); - + _main_window_table.attach(_statusbar, 0, 1, 3, 4, Gtk::FILL, Gtk::SHRINK); } @@ -1171,69 +1108,67 @@ EditWidget::initStatusbar() //----------implements EditWidgetInterface void * -EditWidget::getWindow() -{ - return this; +EditWidget::getWindow() +{ + return this; } -void -EditWidget::setTitle (gchar const* new_title) +void +EditWidget::setTitle (gchar const* new_title) { - set_title (new_title); + set_title (new_title); } -void -EditWidget::layout() +void +EditWidget::layout() { show_all_children(); } -void -EditWidget::present() +void +EditWidget::present() { this->Gtk::Window::present(); } -void -EditWidget::getGeometry (gint &x, gint &y, gint &w, gint &h) +void +EditWidget::getGeometry (gint &x, gint &y, gint &w, gint &h) { get_position (x, y); get_size (w, h); } -void -EditWidget::setSize (gint w, gint h) +void +EditWidget::setSize (gint w, gint h) { resize (w, h); } -void -EditWidget::setPosition (NR::Point p) +void +EditWidget::setPosition (NR::Point p) { move (int(p[NR::X]), int(p[NR::Y])); } /// \param p is already gobj()! -void -EditWidget::setTransient (void* p, int i) +void +EditWidget::setTransient (void* p, int i) { -#ifndef WIN32 gtk_window_set_transient_for (static_cast(p), this->gobj()); if (i==2) this->Gtk::Window::present(); -#endif } -NR::Point -EditWidget::getPointer() -{ +NR::Point +EditWidget::getPointer() +{ int x, y; get_pointer (x, y); - return NR::Point (x, y); + return NR::Point (x, y); } -void -EditWidget::setFullscreen() +void +EditWidget::setFullscreen() { fullscreen(); } @@ -1244,25 +1179,25 @@ EditWidget::setFullscreen() * to save, discard, or cancel. Returns TRUE if the shutdown operation * is cancelled or if the save is cancelled or fails, FALSE otherwise. */ -bool -EditWidget::shutdown() +bool +EditWidget::shutdown() { g_assert (_desktop != NULL); if (Inkscape::NSApplication::Editor::isDuplicatedView (_desktop)) return false; SPDocument *doc = _desktop->doc(); - if (sp_document_repr_root(doc)->attribute("sodipodi:modified") != NULL) + if (sp_document_repr_root(doc)->attribute("sodipodi:modified") != NULL) { gchar *markup; - /// \todo FIXME !!! obviously this will have problems if the document + /// \todo FIXME !!! obviously this will have problems if the document /// name contains markup characters markup = g_strdup_printf( _("Save changes to document \"%s\" before closing?\n\n" "If you close without saving, your changes will be discarded."), SP_DOCUMENT_NAME(doc)); - - Gtk::MessageDialog dlg (*this, + + Gtk::MessageDialog dlg (*this, markup, true, Gtk::MESSAGE_WARNING, @@ -1277,7 +1212,7 @@ EditWidget::shutdown() dlg.set_default_response (Gtk::RESPONSE_YES); int response = dlg.run(); - switch (response) + switch (response) { case Gtk::RESPONSE_YES: sp_document_ref(doc); @@ -1298,18 +1233,18 @@ EditWidget::shutdown() /* Code to check data loss */ bool allow_data_loss = FALSE; - while (sp_document_repr_root(doc)->attribute("inkscape:dataloss") != NULL && allow_data_loss == FALSE) + while (sp_document_repr_root(doc)->attribute("inkscape:dataloss") != NULL && allow_data_loss == FALSE) { gchar *markup; - /// \todo FIXME !!! obviously this will have problems if the document + /// \todo FIXME !!! obviously this will have problems if the document /// name contains markup characters markup = g_strdup_printf( _("The file \"%s\" was saved with a format (%s) that may cause data loss!\n\n" "Do you want to save this file in another format?"), SP_DOCUMENT_NAME(doc), Inkscape::Extension::db.get(sp_document_repr_root(doc)->attribute("inkscape:output_extension"))->get_name()); - - Gtk::MessageDialog dlg (*this, + + Gtk::MessageDialog dlg (*this, markup, true, Gtk::MESSAGE_WARNING, @@ -1324,8 +1259,8 @@ EditWidget::shutdown() dlg.set_default_response (Gtk::RESPONSE_YES); int response = dlg.run(); - - switch (response) + + switch (response) { case Gtk::RESPONSE_YES: sp_document_ref(doc); @@ -1344,39 +1279,72 @@ EditWidget::shutdown() break; } } - + return false; } -void -EditWidget::destroy() -{ - delete this; +void +EditWidget::destroy() +{ + delete this; } -void -EditWidget::requestCanvasUpdate() +void +EditWidget::requestCanvasUpdate() { _svg_canvas.widget().queue_draw(); } -void -EditWidget::activateDesktop() +void +EditWidget::requestCanvasUpdateAndWait() +{ + requestCanvasUpdate(); + + while (gtk_events_pending()) + gtk_main_iteration_do(FALSE); +} + +void +EditWidget::enableInteraction() +{ + g_return_if_fail(_interaction_disabled_counter > 0); + + _interaction_disabled_counter--; + + if (_interaction_disabled_counter == 0) { + this->set_sensitive(true); + } +} + +void +EditWidget::disableInteraction() +{ + if (_interaction_disabled_counter == 0) { + this->set_sensitive(false); + } + + _interaction_disabled_counter++; +} + +void +EditWidget::activateDesktop() { - /// \todo active_desktop_indicator not implemented + /// \todo active_desktop_indicator not implemented } -void -EditWidget::deactivateDesktop() +void +EditWidget::deactivateDesktop() { /// \todo active_desktop_indicator not implemented } -void -EditWidget::viewSetPosition (NR::Point p) +void +EditWidget::viewSetPosition (NR::Point p) { - p -= _namedview->gridorigin; + // p -= _namedview->gridorigin; + /// \todo Why was the origin corrected for the grid origin? (johan) + double lo, up, pos, max; _top_ruler.get_range (lo, up, pos, max); _top_ruler.set_range (lo, up, p[NR::X], max); @@ -1384,26 +1352,27 @@ EditWidget::viewSetPosition (NR::Point p) _left_ruler.set_range (lo, up, p[NR::Y], max); } -void -EditWidget::updateRulers() -{ - NR::Point origin = _namedview->gridorigin; - +void +EditWidget::updateRulers() +{ + //NR::Point gridorigin = _namedview->gridorigin; + /// \todo Why was the origin corrected for the grid origin? (johan) + NR::Rect const viewbox = _svg_canvas.spobj()->getViewbox(); double lo, up, pos, max; double const scale = _desktop->current_zoom(); - double s = viewbox.min()[NR::X] / scale - origin[NR::X]; - double e = viewbox.max()[NR::X] / scale - origin[NR::X]; + double s = viewbox.min()[NR::X] / scale; //- gridorigin[NR::X]; + double e = viewbox.max()[NR::X] / scale; //- gridorigin[NR::X]; _top_ruler.get_range(lo, up, pos, max); _top_ruler.set_range(s, e, pos, e); - s = viewbox.min()[NR::Y] / -scale - origin[NR::Y]; - e = viewbox.max()[NR::Y] / -scale - origin[NR::Y]; - _left_ruler.set_range(s, e, origin[NR::Y], e); + s = viewbox.min()[NR::Y] / -scale; //- gridorigin[NR::Y]; + e = viewbox.max()[NR::Y] / -scale; //- gridorigin[NR::Y]; + _left_ruler.set_range(s, e, 0 /*gridorigin[NR::Y]*/, e); /// \todo is that correct? } -void -EditWidget::updateScrollbars (double scale) +void +EditWidget::updateScrollbars (double scale) { // do not call this function before canvas has its size allocated if (!is_realized() || _update_s_f) { @@ -1414,11 +1383,11 @@ EditWidget::updateScrollbars (double scale) /* The desktop region we always show unconditionally */ SPDocument *doc = _desktop->doc(); - NR::Rect const r = sp_item_bbox_desktop(SP_ITEM(SP_DOCUMENT_ROOT(doc))); - NR::Rect darea(NR::Point(MIN(r.min()[NR::X], -sp_document_width(doc)), - MIN(r.min()[NR::Y], -sp_document_height(doc))), - NR::Point(MAX(r.max()[NR::X], 2 * sp_document_width(doc)), - MAX(r.max()[NR::Y], 2 * sp_document_height(doc)))); + NR::Rect darea = NR::Rect(NR::Point(-sp_document_width(doc), + -sp_document_height(doc)), + NR::Point(2 * sp_document_width(doc), + 2 * sp_document_height(doc))); + darea = NR::union_bounds(darea, sp_item_bbox_desktop(SP_ITEM(SP_DOCUMENT_ROOT(doc)))); /* Canvas region we always show unconditionally */ NR::Rect carea(NR::Point(darea.min()[NR::X] * scale - 64, @@ -1429,7 +1398,7 @@ EditWidget::updateScrollbars (double scale) NR::Rect const viewbox = _svg_canvas.spobj()->getViewbox(); /* Viewbox is always included into scrollable region */ - carea = NR::Rect::union_bounds(carea, viewbox); + carea = NR::union_bounds(carea, viewbox); Gtk::Adjustment *adj = _bottom_scrollbar.get_adjustment(); adj->set_value(viewbox.min()[NR::X]); @@ -1451,7 +1420,7 @@ EditWidget::updateScrollbars (double scale) } void -EditWidget::toggleRulers() +EditWidget::toggleRulers() { if (_top_ruler.is_visible()) { @@ -1465,8 +1434,8 @@ EditWidget::toggleRulers() } } -void -EditWidget::toggleScrollbars() +void +EditWidget::toggleScrollbars() { if (_bottom_scrollbar.is_visible()) { @@ -1480,39 +1449,39 @@ EditWidget::toggleScrollbars() } } -void -EditWidget::updateZoom() +void +EditWidget::updateZoom() { _zoom_status.update(); } -void -EditWidget::letZoomGrabFocus() +void +EditWidget::letZoomGrabFocus() { _zoom_status.grab_focus(); } -void +void EditWidget::setToolboxFocusTo (const gchar *) { /// \todo not implemented } -void +void EditWidget::setToolboxAdjustmentValue (const gchar *, double) { /// \todo not implemented } -bool +bool EditWidget::isToolboxButtonActive (gchar const*) { /// \todo not implemented return true; } -void -EditWidget::setCoordinateStatus (NR::Point p) +void +EditWidget::setCoordinateStatus (NR::Point p) { gchar *cstr = g_strdup_printf ("%6.2f", _dt2r * p[NR::X]); _coord_status_x.property_label() = cstr; @@ -1522,16 +1491,16 @@ EditWidget::setCoordinateStatus (NR::Point p) g_free (cstr); } -void -EditWidget::setMessage (Inkscape::MessageType type, gchar const* msg) +void +EditWidget::setMessage (Inkscape::MessageType type, gchar const* msg) { _select_status.set_markup (msg? msg : ""); } -bool +bool EditWidget::warnDialog (gchar* msg) { - Gtk::MessageDialog dlg (*this, + Gtk::MessageDialog dlg (*this, msg, true, Gtk::MESSAGE_WARNING, @@ -1542,7 +1511,19 @@ EditWidget::warnDialog (gchar* msg) } -void +void EditWidget::_namedview_modified (SPObject *obj, guint flags) { + SPNamedView *nv = static_cast(obj); + if (flags & SP_OBJECT_MODIFIED_FLAG) { + this->_dt2r = 1.0 / nv->doc_units->unittobase; + this->_top_ruler.update_metric(); + this->_left_ruler.update_metric(); + this->_tooltips.set_tip(this->_top_ruler, this->_top_ruler.get_tip()); + this->_tooltips.set_tip(this->_left_ruler, this->_left_ruler.get_tip()); + this->updateRulers(); + } +} + +void EditWidget::initEdit (SPDocument *doc) { _desktop = new SPDesktop(); @@ -1552,14 +1533,15 @@ EditWidget::initEdit (SPDocument *doc) _svg_canvas.init (_desktop); _desktop->init (_namedview, _svg_canvas.spobj()); sp_namedview_window_from_document (_desktop); + sp_namedview_update_layers_from_document (_desktop); _dt2r = 1.0 / _namedview->doc_units->unittobase; /// \todo convert to sigc++ when SPObject hierarchy gets converted /* Listen on namedview modification */ - g_signal_connect (G_OBJECT (_desktop->namedview), "modified", G_CALLBACK (_namedview_modified), this); + _namedview_modified_connection = _desktop->namedview->connectModified(sigc::mem_fun(*this, &EditWidget::_namedview_modified)); _layer_selector.setDesktop (_desktop); _selected_style_status.setDesktop (_desktop); - + Inkscape::NSApplication::Editor::addDesktop (_desktop); _zoom_status.init (_desktop); @@ -1568,13 +1550,13 @@ EditWidget::initEdit (SPDocument *doc) updateRulers(); } -void +void EditWidget::destroyEdit() { if (_desktop) { _layer_selector.unreference(); Inkscape::NSApplication::Editor::removeDesktop (_desktop); // clears selection too - sp_signal_disconnect_by_data (G_OBJECT (_desktop->namedview), this); + _namedview_modified_connection.disconnect(); _desktop->destroy(); Inkscape::GC::release (_desktop); _desktop = 0; @@ -1585,7 +1567,7 @@ EditWidget::destroyEdit() //----------start of other callbacks -bool +bool EditWidget::on_key_press_event (GdkEventKey* event) { // this is the original code from helper/window.cpp @@ -1598,17 +1580,17 @@ EditWidget::on_key_press_event (GdkEventKey* event) SP_SHORTCUT_CONTROL_MASK : 0 ) | ( event->state & GDK_MOD1_MASK ? SP_SHORTCUT_ALT_MASK : 0 ); - return sp_shortcut_invoke (shortcut, + return sp_shortcut_invoke (shortcut, Inkscape::NSApplication::Editor::getActiveDesktop()); } -bool +bool EditWidget::on_delete_event (GdkEventAny*) { return shutdown(); } -bool +bool EditWidget::on_focus_in_event (GdkEventFocus*) { Inkscape::NSApplication::Editor::activateDesktop (_desktop); @@ -1621,7 +1603,7 @@ void EditWidget::onWindowSizeAllocate (Gtk::Allocation &newall) { if (!is_realized()) return; - + const Gtk::Allocation& all = get_allocation(); if ((newall.get_x() == all.get_x()) && (newall.get_y() == all.get_y()) && @@ -1651,12 +1633,12 @@ EditWidget::onWindowRealize() NR::Rect d(NR::Point(0, 0), NR::Point(sp_document_width(_desktop->doc()), sp_document_height(_desktop->doc()))); - if (fabs(d.dimensions()[NR::X]) < 1.0 || fabs(d.dimensions()[NR::Y]) < 1.0) { + if (d.isEmpty(1.0)) { return; } _desktop->set_display_area(d.min()[NR::X], d.min()[NR::Y], d.max()[NR::X], d.max()[NR::Y], 10); - _namedview_modified(_desktop->namedview, SP_OBJECT_MODIFIED_FLAG, this); + _namedview_modified(_desktop->namedview, SP_OBJECT_MODIFIED_FLAG); setTitle (SP_DOCUMENT_NAME(_desktop->doc())); } @@ -1665,29 +1647,16 @@ EditWidget::onAdjValueChanged() { if (_update_a_f) return; _update_a_f = true; - - sp_canvas_scroll_to (_svg_canvas.spobj(), - _bottom_scrollbar.get_value(), - _right_scrollbar.get_value(), + + sp_canvas_scroll_to (_svg_canvas.spobj(), + _bottom_scrollbar.get_value(), + _right_scrollbar.get_value(), false); updateRulers(); - + _update_a_f = false; } -/// \todo make this a member function when the signal is a sigc++ signal -void _namedview_modified (SPNamedView* nv, guint flags, EditWidget* ew) -{ - if (flags & SP_OBJECT_MODIFIED_FLAG) - { - ew->_dt2r = 1.0 / nv->doc_units->unittobase; - ew->_top_ruler.update_metric(); - ew->_left_ruler.update_metric(); - ew->_tooltips.set_tip (ew->_top_ruler, ew->_top_ruler.get_tip()); - ew->_tooltips.set_tip (ew->_left_ruler, ew->_left_ruler.get_tip()); - ew->updateRulers(); - } -} } // namespace View } // namespace UI