diff --git a/po/POTFILES.src.in b/po/POTFILES.src.in index 1357a8ee5a6e36261cf7eba714518e74c2f05107..bc6aeb358a54a095ed5fac529cffab3f1d7fbb18 100644 --- a/po/POTFILES.src.in +++ b/po/POTFILES.src.in @@ -296,6 +296,7 @@ ../src/ui/tool/path-manipulator.cpp ../src/ui/tool/transform-handle-set.cpp ../src/ui/toolbar/arc-toolbar.cpp +../src/ui/toolbar/aux-toolbox.cpp ../src/ui/toolbar/box3d-toolbar.cpp ../src/ui/toolbar/calligraphy-toolbar.cpp ../src/ui/toolbar/connector-toolbar.cpp diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index 82760efe9527fad9bb0b1b611a9979d3c6e5a333..4bf29e88bc4367f6f8255d8a39ce14fa92af27fa 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -38,6 +38,7 @@ set(ui_SRC tool/transform-handle-set.cpp toolbar/arc-toolbar.cpp + toolbar/aux-toolbox.cpp toolbar/box3d-toolbar.cpp toolbar/calligraphy-toolbar.cpp toolbar/connector-toolbar.cpp @@ -341,6 +342,7 @@ set(ui_SRC tool/transform-handle-set.h toolbar/arc-toolbar.h + toolbar/aux-toolbox.h toolbar/box3d-toolbar.h toolbar/calligraphy-toolbar.h toolbar/connector-toolbar.h diff --git a/src/ui/toolbar/arc-toolbar.cpp b/src/ui/toolbar/arc-toolbar.cpp index fc5d48ec82f822d5a02ba8d1b44dd0b37cb624f9..ddda3172e89c30b05c5b361c6f3a7552461b8e36 100644 --- a/src/ui/toolbar/arc-toolbar.cpp +++ b/src/ui/toolbar/arc-toolbar.cpp @@ -221,11 +221,10 @@ ArcToolbar::~ArcToolbar() } } -GtkWidget * +Toolbar * ArcToolbar::create(SPDesktop *desktop) { - auto toolbar = new ArcToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new ArcToolbar(desktop); } void diff --git a/src/ui/toolbar/arc-toolbar.h b/src/ui/toolbar/arc-toolbar.h index b0b04500b99a4c5651c3da1f8a9427f66415a820..9bd0d14d17d8d46e7dcc7cd445d21a191ac8e246 100644 --- a/src/ui/toolbar/arc-toolbar.h +++ b/src/ui/toolbar/arc-toolbar.h @@ -100,7 +100,7 @@ protected: ~ArcToolbar() override; public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); static void event_attr_changed(Inkscape::XML::Node *repr, gchar const *name, gchar const *old_value, diff --git a/src/ui/toolbar/aux-toolbox.cpp b/src/ui/toolbar/aux-toolbox.cpp new file mode 100644 index 0000000000000000000000000000000000000000..86c9fbc94a97b4ba4e185f8df5c5687493413459 --- /dev/null +++ b/src/ui/toolbar/aux-toolbox.cpp @@ -0,0 +1,253 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/** + * @file + * Inkscape Auxilliary toolbar + * Each tool should have its own xxx-toolbar implementation file + * + * @authors Inkscape Authors + * Copyright (C) 1999-2010 Authors + * + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#include "aux-toolbox.h" + +#include + +#include +#include + +#include "ui/toolbar/arc-toolbar.h" +#include "ui/toolbar/box3d-toolbar.h" +#include "ui/toolbar/calligraphy-toolbar.h" +#include "ui/toolbar/connector-toolbar.h" +#include "ui/toolbar/dropper-toolbar.h" +#include "ui/toolbar/eraser-toolbar.h" +#include "ui/toolbar/gradient-toolbar.h" +#include "ui/toolbar/lpe-toolbar.h" +#include "ui/toolbar/mesh-toolbar.h" +#include "ui/toolbar/measure-toolbar.h" +#include "ui/toolbar/node-toolbar.h" +#include "ui/toolbar/rect-toolbar.h" +#include "ui/toolbar/paintbucket-toolbar.h" +#include "ui/toolbar/pencil-toolbar.h" +#include "ui/toolbar/select-toolbar.h" +#include "ui/toolbar/spray-toolbar.h" +#include "ui/toolbar/spiral-toolbar.h" +#include "ui/toolbar/star-toolbar.h" +#include "ui/toolbar/tweak-toolbar.h" +#include "ui/toolbar/text-toolbar.h" +#include "ui/toolbar/zoom-toolbar.h" + +#include "ui/tools/tool-base.h" + +#include "ui/widget/style-swatch.h" + +#include "widgets/toolbox.h" +#include "widgets/widget-sizes.h" + +#include "verbs.h" + +static struct { + gchar const *type_name; + gchar const *data_name; + Inkscape::UI::Toolbar::Toolbar *(*create_func)(SPDesktop *desktop); + gchar const *ui_name; + gint swatch_verb_id; + gchar const *swatch_tool; + gchar const *swatch_tip; +} const aux_toolboxes[] = { + { "/tools/select", "select_toolbox", Inkscape::UI::Toolbar::SelectToolbar::create, "SelectToolbar", + SP_VERB_INVALID, nullptr, nullptr}, + { "/tools/nodes", "node_toolbox", Inkscape::UI::Toolbar::NodeToolbar::create, "NodeToolbar", + SP_VERB_INVALID, nullptr, nullptr}, + { "/tools/tweak", "tweak_toolbox", Inkscape::UI::Toolbar::TweakToolbar::create, "TweakToolbar", + SP_VERB_CONTEXT_TWEAK_PREFS, "/tools/tweak", N_("Color/opacity used for color tweaking")}, + { "/tools/spray", "spray_toolbox", Inkscape::UI::Toolbar::SprayToolbar::create, "SprayToolbar", + SP_VERB_INVALID, nullptr, nullptr}, + { "/tools/zoom", "zoom_toolbox", Inkscape::UI::Toolbar::ZoomToolbar::create, "ZoomToolbar", + SP_VERB_INVALID, nullptr, nullptr}, + // If you change MeasureToolbar here, change it also in desktop-widget.cpp + { "/tools/measure", "measure_toolbox", Inkscape::UI::Toolbar::MeasureToolbar::create, "MeasureToolbar", + SP_VERB_INVALID, nullptr, nullptr}, + { "/tools/shapes/star", "star_toolbox", Inkscape::UI::Toolbar::StarToolbar::create, "StarToolbar", + SP_VERB_CONTEXT_STAR_PREFS, "/tools/shapes/star", N_("Style of new stars")}, + { "/tools/shapes/rect", "rect_toolbox", Inkscape::UI::Toolbar::RectToolbar::create, "RectToolbar", + SP_VERB_CONTEXT_RECT_PREFS, "/tools/shapes/rect", N_("Style of new rectangles")}, + { "/tools/shapes/3dbox", "3dbox_toolbox", Inkscape::UI::Toolbar::Box3DToolbar::create, "3DBoxToolbar", + SP_VERB_CONTEXT_3DBOX_PREFS, "/tools/shapes/3dbox", N_("Style of new 3D boxes")}, + { "/tools/shapes/arc", "arc_toolbox", Inkscape::UI::Toolbar::ArcToolbar::create, "ArcToolbar", + SP_VERB_CONTEXT_ARC_PREFS, "/tools/shapes/arc", N_("Style of new ellipses")}, + { "/tools/shapes/spiral", "spiral_toolbox", Inkscape::UI::Toolbar::SpiralToolbar::create, "SpiralToolbar", + SP_VERB_CONTEXT_SPIRAL_PREFS, "/tools/shapes/spiral", N_("Style of new spirals")}, + { "/tools/freehand/pencil", "pencil_toolbox", Inkscape::UI::Toolbar::PencilToolbar::create_pencil, "PencilToolbar", + SP_VERB_CONTEXT_PENCIL_PREFS, "/tools/freehand/pencil", N_("Style of new paths created by Pencil")}, + { "/tools/freehand/pen", "pen_toolbox", Inkscape::UI::Toolbar::PencilToolbar::create_pen, "PenToolbar", + SP_VERB_CONTEXT_PEN_PREFS, "/tools/freehand/pen", N_("Style of new paths created by Pen")}, + { "/tools/calligraphic", "calligraphy_toolbox", Inkscape::UI::Toolbar::CalligraphyToolbar::create, "CalligraphyToolbar", + SP_VERB_CONTEXT_CALLIGRAPHIC_PREFS, "/tools/calligraphic", N_("Style of new calligraphic strokes")}, + { "/tools/eraser", "eraser_toolbox", Inkscape::UI::Toolbar::EraserToolbar::create, "EraserToolbar", + SP_VERB_CONTEXT_ERASER_PREFS, "/tools/eraser", _("TBD")}, + { "/tools/lpetool", "lpetool_toolbox", Inkscape::UI::Toolbar::LPEToolbar::create, "LPEToolToolbar", + SP_VERB_CONTEXT_LPETOOL_PREFS, "/tools/lpetool", _("TBD")}, + // If you change TextToolbar here, change it also in desktop-widget.cpp + { "/tools/text", "text_toolbox", Inkscape::UI::Toolbar::TextToolbar::create, "TextToolbar", + SP_VERB_INVALID, nullptr, nullptr}, + { "/tools/dropper", "dropper_toolbox", Inkscape::UI::Toolbar::DropperToolbar::create, "DropperToolbar", + SP_VERB_INVALID, nullptr, nullptr}, + { "/tools/connector", "connector_toolbox", Inkscape::UI::Toolbar::ConnectorToolbar::create, "ConnectorToolbar", + SP_VERB_INVALID, nullptr, nullptr}, + { "/tools/gradient", "gradient_toolbox", Inkscape::UI::Toolbar::GradientToolbar::create, "GradientToolbar", + SP_VERB_INVALID, nullptr, nullptr}, + { "/tools/mesh", "mesh_toolbox", Inkscape::UI::Toolbar::MeshToolbar::create, "MeshToolbar", + SP_VERB_INVALID, nullptr, nullptr}, + { "/tools/paintbucket", "paintbucket_toolbox", Inkscape::UI::Toolbar::PaintbucketToolbar::create, "PaintbucketToolbar", + SP_VERB_CONTEXT_PAINTBUCKET_PREFS, "/tools/paintbucket", N_("Style of Paint Bucket fill objects")}, + { nullptr, nullptr, nullptr, nullptr, + SP_VERB_INVALID, nullptr, nullptr } +}; + +namespace Inkscape { +namespace UI { +namespace Toolbar { + +AuxToolbox::AuxToolbox() +{ + set_name("AuxToolbox"); + + _box = Gtk::make_managed(Gtk::ORIENTATION_VERTICAL, 0); + _box->set_homogeneous(false); + add(*_box); + set_sensitive(false); + show_all(); +} + +void +AuxToolbox::setup(SPDesktop *desktop) +{ + _desktop = desktop; + auto prefs = Inkscape::Preferences::get(); + + // Loop through all the toolbars that can be shown here, create them and + // store each one in a different cell of the main box + for (int i = 0 ; aux_toolboxes[i].type_name ; i++ ) { + if (aux_toolboxes[i].create_func) { + auto sub_toolbox = aux_toolboxes[i].create_func(desktop); + + // We use a Gtk::Grid here so that we can show a tool-specific + // swatch next to the toolbar + auto holder = Gtk::make_managed(); + holder->attach(*sub_toolbox, 0, 0, 1, 1); + + // This part is just for styling + if ( prefs->getBool( "/toolbox/icononly", true) ) { + sub_toolbox->set_toolbar_style(Gtk::TOOLBAR_ICONS); + } + + auto toolboxSize = ToolboxFactory::prefToSize("/toolbox/small"); + sub_toolbox->set_icon_size(static_cast(toolboxSize)); + sub_toolbox->set_hexpand(true); + + // Add a swatch widget if one was specified + if ( aux_toolboxes[i].swatch_verb_id != SP_VERB_INVALID ) { + auto swatch = Gtk::make_managed(nullptr, _(aux_toolboxes[i].swatch_tip)); + swatch->setDesktop(desktop); + swatch->setClickVerb(aux_toolboxes[i].swatch_verb_id); + swatch->setWatchedTool(aux_toolboxes[i].swatch_tool, true); + swatch->set_margin_start(AUX_BETWEEN_BUTTON_GROUPS); + swatch->set_margin_end(AUX_BETWEEN_BUTTON_GROUPS); + swatch->set_margin_top(AUX_SPACING); + swatch->set_margin_bottom(AUX_SPACING); + + holder->attach(*swatch, 1, 0, 1, 1); + } + + // Add the new toolbar into the toolbox + // and also store a pointer to it inside the toolbox. This allows the + // active toolbar to be changed. + _box->add(*holder); + holder->set_name(aux_toolboxes[i].ui_name); + _toolbar_map[aux_toolboxes[i].data_name] = holder; + sub_toolbox->show(); + holder->show_all(); + } else if (aux_toolboxes[i].swatch_verb_id != SP_VERB_NONE) { + g_warning("Could not create toolbox %s", aux_toolboxes[i].ui_name); + } + } +} + +void +AuxToolbox::update(SPDesktop * /*desktop*/, Tools::ToolBase *eventcontext) +{ + gchar const *tname = ( eventcontext + ? eventcontext->getPrefsPath().c_str() //g_type_name(G_OBJECT_TYPE(eventcontext)) + : nullptr ); + for (int i = 0 ; aux_toolboxes[i].type_name ; i++ ) { + auto sub_toolbox = _toolbar_map[aux_toolboxes[i].data_name]; + if (tname && !strcmp(tname, aux_toolboxes[i].type_name)) { + sub_toolbox->show_all(); + _shows = sub_toolbox; + } else { + sub_toolbox->hide(); + } + //FIX issue #Inkscape686 + auto allocation = sub_toolbox->get_allocation(); + sub_toolbox->size_allocate(allocation); + } + //FIX issue #Inkscape125 + auto allocation = get_allocation(); + size_allocate(allocation); +} + +void +AuxToolbox::set_desktop(decltype(_desktop) desktop) +{ + auto old_desktop = _desktop; + + // purge all existing toolbars + if (old_desktop) { + auto children = get_children(); + for (auto i:children) { + gtk_container_remove(GTK_CONTAINER(gobj()), i->gobj()); + } + } + + _desktop = desktop; + + if (desktop) { + set_sensitive(true); + setup(desktop); + update(desktop, desktop->event_context); + _event_context_connection = desktop->connectEventContextChanged(sigc::mem_fun(*this, &AuxToolbox::update)); + } else { + set_sensitive(false); + } +} + +/** + * Shows the currently selected tool-specific toolbar + */ +void +AuxToolbox::show_aux_toolbox() +{ + show(); + + if (_shows) { + _shows->show_all(); + } +} + +} // namespace Toolbar +} // namespace UI +} // namespace Inkscape + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/ui/toolbar/aux-toolbox.h b/src/ui/toolbar/aux-toolbox.h new file mode 100644 index 0000000000000000000000000000000000000000..cf0e78dd1117e820b53846a16dbb3a5dfba4caef --- /dev/null +++ b/src/ui/toolbar/aux-toolbox.h @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +#ifndef SEEN_AUX_TOOLBOX_H +#define SEEN_AUX_TOOLBOX_H + +/** + * @file + * Inkscape auxilliary toolbar + * + * @authors Inkscape Authors + * Copyright (C) 1999-2020 authors + * + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#include + +class SPDesktop; + +namespace Gtk { + class Box; + class Grid; +} + +namespace Inkscape { +namespace UI { +namespace Tools { + class ToolBase; +} + +namespace Toolbar { + +/** + * A toolbox that can hold tool-specific widgets and swatches. + * This is the bar that normally appears directly below the main menu. + * + * The contents depends on the currently-selected tool. + */ +class AuxToolbox : public Gtk::EventBox { +private: + SPDesktop *_desktop = nullptr; + sigc::connection _event_context_connection; + + /** + * This box stores each possible toolbar that could be displayed within + * a different cell. Only one of them should be shown at a time. + */ + Gtk::Box *_box = nullptr; + + /// A map of all the toolbars that can be shown here + std::map _toolbar_map; + + /// The toolbar that is currently being shown + Gtk::Grid *_shows = nullptr; + + void update(SPDesktop *desktop, Tools::ToolBase *eventcontext); + void setup(SPDesktop *desktop); + +public: + AuxToolbox(); + + void show_aux_toolbox(); + void set_desktop(decltype(_desktop) desktop); +}; + +} // namespace Toolbar +} // namespace UI +} // namespace Inkscape + +#endif /* !SEEN_AUX_TOOLBOX_H */ + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/ui/toolbar/box3d-toolbar.cpp b/src/ui/toolbar/box3d-toolbar.cpp index fe6201748a37b4d4359eaa4076c735a73e77b02e..73b9cc579d47037f4d2eb2b001f6bd9048fc3fb1 100644 --- a/src/ui/toolbar/box3d-toolbar.cpp +++ b/src/ui/toolbar/box3d-toolbar.cpp @@ -173,11 +173,10 @@ Box3DToolbar::Box3DToolbar(SPDesktop *desktop) show_all(); } -GtkWidget * +Toolbar * Box3DToolbar::create(SPDesktop *desktop) { - auto toolbar = new Box3DToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new Box3DToolbar(desktop); } void diff --git a/src/ui/toolbar/box3d-toolbar.h b/src/ui/toolbar/box3d-toolbar.h index 8ba7872d9188f98e99350154b628ae2a3c2f788a..52f8ee2f9495cf4b5d3a8c922eba1870a5785030 100644 --- a/src/ui/toolbar/box3d-toolbar.h +++ b/src/ui/toolbar/box3d-toolbar.h @@ -93,7 +93,7 @@ protected: ~Box3DToolbar() override; public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); static void event_attr_changed(Inkscape::XML::Node *repr, gchar const *name, gchar const *old_value, diff --git a/src/ui/toolbar/calligraphy-toolbar.cpp b/src/ui/toolbar/calligraphy-toolbar.cpp index 5f0ecfcb22bf86c5de0ffde0c13a48ad92cdbea9..3b535587f2a84a96b6e68c20f5dbc63d90dd1b76 100644 --- a/src/ui/toolbar/calligraphy-toolbar.cpp +++ b/src/ui/toolbar/calligraphy-toolbar.cpp @@ -267,11 +267,10 @@ CalligraphyToolbar::CalligraphyToolbar(SPDesktop *desktop) show_all(); } -GtkWidget * +Toolbar * CalligraphyToolbar::create(SPDesktop *desktop) { - auto toolbar = new CalligraphyToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new CalligraphyToolbar(desktop); } void diff --git a/src/ui/toolbar/calligraphy-toolbar.h b/src/ui/toolbar/calligraphy-toolbar.h index d2168888c3201fe4ba073713094f8bdd7490fed5..a3141ce2d19555cf8ba3d97d782c928ae1a8ff04 100644 --- a/src/ui/toolbar/calligraphy-toolbar.h +++ b/src/ui/toolbar/calligraphy-toolbar.h @@ -93,7 +93,7 @@ protected: CalligraphyToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); }; } diff --git a/src/ui/toolbar/connector-toolbar.cpp b/src/ui/toolbar/connector-toolbar.cpp index 5a964f2867c5a79a70c0164ee7e8de061a36536c..228aa7871dc3ef2e1623ef7d94b2e0e5e9172f51 100644 --- a/src/ui/toolbar/connector-toolbar.cpp +++ b/src/ui/toolbar/connector-toolbar.cpp @@ -183,12 +183,11 @@ ConnectorToolbar::ConnectorToolbar(SPDesktop *desktop) show_all(); } -GtkWidget * +Toolbar * ConnectorToolbar::create( SPDesktop *desktop) { - auto toolbar = new ConnectorToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); -} // end of ConnectorToolbar::prep() + return new ConnectorToolbar(desktop); +} // end of ConnectorToolbar::create() void ConnectorToolbar::path_set_avoid() diff --git a/src/ui/toolbar/connector-toolbar.h b/src/ui/toolbar/connector-toolbar.h index 66df79ee93222c45836f3e7a8a15dee7d5495cf5..0cbe30a5600becc757112f0908aa6c34c22a0812 100644 --- a/src/ui/toolbar/connector-toolbar.h +++ b/src/ui/toolbar/connector-toolbar.h @@ -76,7 +76,7 @@ protected: ConnectorToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); static void event_attr_changed(Inkscape::XML::Node *repr, gchar const *name, diff --git a/src/ui/toolbar/dropper-toolbar.cpp b/src/ui/toolbar/dropper-toolbar.cpp index 83a18c37a28e3ce8e62b541b9bb361e9d9d11266..bb765e87f32597e1442571755758024eaaf8f7be 100644 --- a/src/ui/toolbar/dropper-toolbar.cpp +++ b/src/ui/toolbar/dropper-toolbar.cpp @@ -95,11 +95,10 @@ DropperToolbar::DropperToolbar(SPDesktop *desktop) show_all(); } -GtkWidget * +Toolbar * DropperToolbar::create(SPDesktop *desktop) { - auto toolbar = Gtk::manage(new DropperToolbar(desktop)); - return GTK_WIDGET(toolbar->gobj()); + return new DropperToolbar(desktop); } } } diff --git a/src/ui/toolbar/dropper-toolbar.h b/src/ui/toolbar/dropper-toolbar.h index c8aa42f309847a6c68a0631574d9134681dc7f0c..dfebe277172a9b5db70f49958f46dc75a1bc380f 100644 --- a/src/ui/toolbar/dropper-toolbar.h +++ b/src/ui/toolbar/dropper-toolbar.h @@ -51,7 +51,7 @@ protected: DropperToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); }; } } diff --git a/src/ui/toolbar/eraser-toolbar.cpp b/src/ui/toolbar/eraser-toolbar.cpp index 5b8dc2004bfa3efa4120fce3b686de579b935845..ab17e618fa02452ac3949ae29285dd1073acb6af 100644 --- a/src/ui/toolbar/eraser-toolbar.cpp +++ b/src/ui/toolbar/eraser-toolbar.cpp @@ -215,11 +215,10 @@ EraserToolbar::EraserToolbar(SPDesktop *desktop) set_eraser_mode_visibility(eraser_mode); } -GtkWidget * +Toolbar * EraserToolbar::create(SPDesktop *desktop) { - auto toolbar = new EraserToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new EraserToolbar(desktop); } void diff --git a/src/ui/toolbar/eraser-toolbar.h b/src/ui/toolbar/eraser-toolbar.h index 4ab94b77304a77fcb028f86ac6d301aa95e83ee8..c0e9ad417d78f9e11377012d3097ced36c84caa3 100644 --- a/src/ui/toolbar/eraser-toolbar.h +++ b/src/ui/toolbar/eraser-toolbar.h @@ -85,7 +85,7 @@ protected: EraserToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); }; } diff --git a/src/ui/toolbar/gradient-toolbar.cpp b/src/ui/toolbar/gradient-toolbar.cpp index 677ae06876090601b4185a8efc479b601adaea45..46f9613455cea7578b394965d03640f6c3ecfea3 100644 --- a/src/ui/toolbar/gradient-toolbar.cpp +++ b/src/ui/toolbar/gradient-toolbar.cpp @@ -549,11 +549,10 @@ GradientToolbar::GradientToolbar(SPDesktop *desktop) * Gradient auxiliary toolbar construction and setup. * */ -GtkWidget * +Toolbar * GradientToolbar::create(SPDesktop * desktop) { - auto toolbar = new GradientToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new GradientToolbar(desktop); } void diff --git a/src/ui/toolbar/gradient-toolbar.h b/src/ui/toolbar/gradient-toolbar.h index 96beb0f08b8a8d2fbcfc872336478cb714f88c2b..e0c31da23f1d4534339b36782739e96c8414fef2 100644 --- a/src/ui/toolbar/gradient-toolbar.h +++ b/src/ui/toolbar/gradient-toolbar.h @@ -95,7 +95,7 @@ protected: GradientToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); }; } diff --git a/src/ui/toolbar/lpe-toolbar.cpp b/src/ui/toolbar/lpe-toolbar.cpp index ad08f6a15b2cf073a0f32e4b04e25bd9754351d5..15b322197fbae8fb9034f00fc94ea94df04ca418 100644 --- a/src/ui/toolbar/lpe-toolbar.cpp +++ b/src/ui/toolbar/lpe-toolbar.cpp @@ -190,11 +190,10 @@ LPEToolbar::set_mode(int mode) _mode_buttons[mode]->set_active(); } -GtkWidget * +Toolbar * LPEToolbar::create(SPDesktop *desktop) { - auto toolbar = new LPEToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new LPEToolbar(desktop); } // this is called when the mode is changed via the toolbar (i.e., one of the subtool buttons is pressed) diff --git a/src/ui/toolbar/lpe-toolbar.h b/src/ui/toolbar/lpe-toolbar.h index 903d9daf92d6d1b9e586c4d6aed5e28e525f5bd2..2f7e8ddd263edf8150ecc9abb17a48cfc0e85629 100644 --- a/src/ui/toolbar/lpe-toolbar.h +++ b/src/ui/toolbar/lpe-toolbar.h @@ -90,7 +90,7 @@ protected: LPEToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); void set_mode(int mode); }; diff --git a/src/ui/toolbar/measure-toolbar.cpp b/src/ui/toolbar/measure-toolbar.cpp index 4418025a7aa2c3c1314a1e48fca4e0521fe4a435..b25f4884c1fb1c351508a3ed2af4664aea9c6da3 100644 --- a/src/ui/toolbar/measure-toolbar.cpp +++ b/src/ui/toolbar/measure-toolbar.cpp @@ -224,12 +224,11 @@ MeasureToolbar::MeasureToolbar(SPDesktop *desktop) show_all(); } -GtkWidget * +Toolbar * MeasureToolbar::create(SPDesktop * desktop) { - auto toolbar = new MeasureToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); -} // MeasureToolbar::prep() + return new MeasureToolbar(desktop); +} // MeasureToolbar::create() void MeasureToolbar::fontsize_value_changed() diff --git a/src/ui/toolbar/measure-toolbar.h b/src/ui/toolbar/measure-toolbar.h index a922fa15e04e7f777e22d075563530e34bffad44..22f66d90b530169dd5029b4f34cf6feae1b5fd41 100644 --- a/src/ui/toolbar/measure-toolbar.h +++ b/src/ui/toolbar/measure-toolbar.h @@ -81,7 +81,7 @@ protected: MeasureToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); }; } diff --git a/src/ui/toolbar/mesh-toolbar.cpp b/src/ui/toolbar/mesh-toolbar.cpp index d5915215d07227dd7208dd467f2f58d5fe2eb20f..054f705f0919490699b60b4a697a731e9d63882a 100644 --- a/src/ui/toolbar/mesh-toolbar.cpp +++ b/src/ui/toolbar/mesh-toolbar.cpp @@ -350,11 +350,10 @@ MeshToolbar::MeshToolbar(SPDesktop *desktop) * Don't forget to add to XML in widgets/toolbox.cpp! * */ -GtkWidget * +Toolbar * MeshToolbar::create(SPDesktop * desktop) { - auto toolbar = new MeshToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new MeshToolbar(desktop); } void diff --git a/src/ui/toolbar/mesh-toolbar.h b/src/ui/toolbar/mesh-toolbar.h index 2df441135dfb2aa9c8eaf6cc2f49704eb738fe0c..0f8b3fcfb1f3c7195fa48cd4a7bf6ffae18b776c 100644 --- a/src/ui/toolbar/mesh-toolbar.h +++ b/src/ui/toolbar/mesh-toolbar.h @@ -87,7 +87,7 @@ protected: MeshToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); }; } diff --git a/src/ui/toolbar/node-toolbar.cpp b/src/ui/toolbar/node-toolbar.cpp index a9b193dea4d61c5d9770cbd0051fad3d53abd754..e6d05a89513426b4183f2b20daf8a2539983b5f4 100644 --- a/src/ui/toolbar/node-toolbar.cpp +++ b/src/ui/toolbar/node-toolbar.cpp @@ -356,12 +356,11 @@ NodeToolbar::NodeToolbar(SPDesktop *desktop) show_all(); } -GtkWidget * +Toolbar * NodeToolbar::create(SPDesktop *desktop) { - auto holder = new NodeToolbar(desktop); - return GTK_WIDGET(holder->gobj()); -} // NodeToolbar::prep() + return new NodeToolbar(desktop); +} // NodeToolbar::create() void NodeToolbar::value_changed(Geom::Dim2 d) diff --git a/src/ui/toolbar/node-toolbar.h b/src/ui/toolbar/node-toolbar.h index fc603cbf50f21eef1a253c0d2e4102863955c71c..f6c82e113ca27c4a9b4949cf45935b0c99dd6411 100644 --- a/src/ui/toolbar/node-toolbar.h +++ b/src/ui/toolbar/node-toolbar.h @@ -107,7 +107,7 @@ protected: NodeToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); }; } } diff --git a/src/ui/toolbar/paintbucket-toolbar.cpp b/src/ui/toolbar/paintbucket-toolbar.cpp index ad0f9fbde4324cd271406cccf47ea4b2e73da653..ae00908a7898478f04733a65e3240b7cca902402 100644 --- a/src/ui/toolbar/paintbucket-toolbar.cpp +++ b/src/ui/toolbar/paintbucket-toolbar.cpp @@ -154,11 +154,10 @@ PaintbucketToolbar::PaintbucketToolbar(SPDesktop *desktop) show_all(); } -GtkWidget * +Toolbar * PaintbucketToolbar::create(SPDesktop *desktop) { - auto toolbar = new PaintbucketToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new PaintbucketToolbar(desktop); } void diff --git a/src/ui/toolbar/paintbucket-toolbar.h b/src/ui/toolbar/paintbucket-toolbar.h index d1b1a775e835f747b24e18b7a8afad7d0412602e..c8e8f441bdd92b972c838b6a9465db622897e1f5 100644 --- a/src/ui/toolbar/paintbucket-toolbar.h +++ b/src/ui/toolbar/paintbucket-toolbar.h @@ -62,7 +62,7 @@ protected: PaintbucketToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); }; } diff --git a/src/ui/toolbar/pencil-toolbar.cpp b/src/ui/toolbar/pencil-toolbar.cpp index 3c2f6216a1b52a47f1e8223b49981eab0466ed0c..794bd6ab9033904f599a1d0630d57865b4d2a250 100644 --- a/src/ui/toolbar/pencil-toolbar.cpp +++ b/src/ui/toolbar/pencil-toolbar.cpp @@ -168,11 +168,10 @@ PencilToolbar::PencilToolbar(SPDesktop *desktop, } } -GtkWidget * +Toolbar * PencilToolbar::create_pencil(SPDesktop *desktop) { - auto toolbar = new PencilToolbar(desktop, true); - return GTK_WIDGET(toolbar->gobj()); + return new PencilToolbar(desktop, true); } PencilToolbar::~PencilToolbar() @@ -507,11 +506,10 @@ PencilToolbar::flatten_spiro_bspline() } } -GtkWidget * +Toolbar * PencilToolbar::create_pen(SPDesktop *desktop) { - auto toolbar = new PencilToolbar(desktop, false); - return GTK_WIDGET(toolbar->gobj()); + return new PencilToolbar(desktop, false); } void diff --git a/src/ui/toolbar/pencil-toolbar.h b/src/ui/toolbar/pencil-toolbar.h index 631b3dfc98adc74684438074629571a7c444bba7..9da9ebd537b685de54cca0f542e510f6ec49139e 100644 --- a/src/ui/toolbar/pencil-toolbar.h +++ b/src/ui/toolbar/pencil-toolbar.h @@ -96,8 +96,8 @@ protected: ~PencilToolbar() override; public: - static GtkWidget * create_pencil(SPDesktop *desktop); - static GtkWidget * create_pen(SPDesktop *desktop); + static Toolbar * create_pencil(SPDesktop *desktop); + static Toolbar * create_pen(SPDesktop *desktop); }; } } diff --git a/src/ui/toolbar/rect-toolbar.cpp b/src/ui/toolbar/rect-toolbar.cpp index 461935a7f7ea400d84f0558b30348119b19db324..d24d6b4bd5cb4a7434c5e5baaa5ff46eaa3fc08b 100644 --- a/src/ui/toolbar/rect-toolbar.cpp +++ b/src/ui/toolbar/rect-toolbar.cpp @@ -196,11 +196,10 @@ RectToolbar::~RectToolbar() } } -GtkWidget * +Toolbar * RectToolbar::create(SPDesktop *desktop) { - auto toolbar = new RectToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new RectToolbar(desktop); } void diff --git a/src/ui/toolbar/rect-toolbar.h b/src/ui/toolbar/rect-toolbar.h index 58d4b2c1c6119d57e1935ea2cbf3ab983aedb5f8..c8d9f399475d96bf9f3a70cebf1fcb2442167516 100644 --- a/src/ui/toolbar/rect-toolbar.h +++ b/src/ui/toolbar/rect-toolbar.h @@ -95,7 +95,7 @@ protected: ~RectToolbar() override; public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); static void event_attr_changed(Inkscape::XML::Node *repr, gchar const *name, diff --git a/src/ui/toolbar/select-toolbar.cpp b/src/ui/toolbar/select-toolbar.cpp index 7330ebf3dba5c659e3e4a6ecf177dbfe5ce9bd42..d44f22e08ec97010c89c65152b1bcee5e0ee0750 100644 --- a/src/ui/toolbar/select-toolbar.cpp +++ b/src/ui/toolbar/select-toolbar.cpp @@ -233,11 +233,10 @@ void SelectToolbar::on_unrealize() parent_type::on_unrealize(); } -GtkWidget * +Toolbar * SelectToolbar::create(SPDesktop *desktop) { - auto toolbar = new SelectToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new SelectToolbar(desktop); } void diff --git a/src/ui/toolbar/select-toolbar.h b/src/ui/toolbar/select-toolbar.h index b86405f8e28d7db4b01cb0599b0d800355e3f9dd..0eb89034a344f6ba359ad2fde6efe91e64846d9d 100644 --- a/src/ui/toolbar/select-toolbar.h +++ b/src/ui/toolbar/select-toolbar.h @@ -68,7 +68,7 @@ protected: void on_unrealize() override; public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); }; } diff --git a/src/ui/toolbar/snap-toolbar.cpp b/src/ui/toolbar/snap-toolbar.cpp index 63347f221907ebd775877f59520351a1b4886bae..3726c33bd2a3df295579025a66b6ac2ee224d742 100644 --- a/src/ui/toolbar/snap-toolbar.cpp +++ b/src/ui/toolbar/snap-toolbar.cpp @@ -196,11 +196,10 @@ SnapToolbar::SnapToolbar(SPDesktop *desktop) show_all(); } -GtkWidget * +Toolbar * SnapToolbar::create(SPDesktop *desktop) { - auto tb = Gtk::manage(new SnapToolbar(desktop)); - return GTK_WIDGET(tb->gobj()); + return new SnapToolbar(desktop); } void diff --git a/src/ui/toolbar/snap-toolbar.h b/src/ui/toolbar/snap-toolbar.h index 9d948a11b66a3a7108180ee034b7d532db313b3b..b870903f8b82e4b163481a8c528c7e8deb5be7a5 100644 --- a/src/ui/toolbar/snap-toolbar.h +++ b/src/ui/toolbar/snap-toolbar.h @@ -49,7 +49,7 @@ protected: SnapToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); static void update(SnapToolbar *tb); }; diff --git a/src/ui/toolbar/spiral-toolbar.cpp b/src/ui/toolbar/spiral-toolbar.cpp index 05ce65424227d209b94500197bf2908ab75900ff..9b921dcf79b15e05e502d89d618fcb741aa67426 100644 --- a/src/ui/toolbar/spiral-toolbar.cpp +++ b/src/ui/toolbar/spiral-toolbar.cpp @@ -150,11 +150,10 @@ SpiralToolbar::~SpiralToolbar() } } -GtkWidget * +Toolbar * SpiralToolbar::create(SPDesktop *desktop) { - auto toolbar = new SpiralToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new SpiralToolbar(desktop); } void diff --git a/src/ui/toolbar/spiral-toolbar.h b/src/ui/toolbar/spiral-toolbar.h index 9c27eb560addcd69729a63ad2ca9c797daab9889..6211481025f4d54c2f498178449e79d531d68759 100644 --- a/src/ui/toolbar/spiral-toolbar.h +++ b/src/ui/toolbar/spiral-toolbar.h @@ -82,7 +82,7 @@ protected: ~SpiralToolbar() override; public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); static void event_attr_changed(Inkscape::XML::Node *repr, gchar const *name, diff --git a/src/ui/toolbar/spray-toolbar.cpp b/src/ui/toolbar/spray-toolbar.cpp index b55ba875d008bc074ccf910840260fe87e216d1c..0f983fefe1dd865b30d3bba76cb04cb5a19163a7 100644 --- a/src/ui/toolbar/spray-toolbar.cpp +++ b/src/ui/toolbar/spray-toolbar.cpp @@ -359,11 +359,10 @@ SprayToolbar::SprayToolbar(SPDesktop *desktop) : init(); } -GtkWidget * +Toolbar * SprayToolbar::create(SPDesktop *desktop) { - auto toolbar = new SprayToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new SprayToolbar(desktop); } void diff --git a/src/ui/toolbar/spray-toolbar.h b/src/ui/toolbar/spray-toolbar.h index 4587cf03399d5f1395b24815acb13eb082ca36a5..6c248e6a08b5daf8d2b01564bc9815a95511e66c 100644 --- a/src/ui/toolbar/spray-toolbar.h +++ b/src/ui/toolbar/spray-toolbar.h @@ -96,7 +96,7 @@ protected: SprayToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); void set_mode(int mode); }; diff --git a/src/ui/toolbar/star-toolbar.cpp b/src/ui/toolbar/star-toolbar.cpp index d9b09ff5915f3add76a4163371595dc59c44423e..35761c4e7d6ed5ebdcbaef2ab0ba3a10e81764a0 100644 --- a/src/ui/toolbar/star-toolbar.cpp +++ b/src/ui/toolbar/star-toolbar.cpp @@ -201,11 +201,10 @@ StarToolbar::~StarToolbar() } } -GtkWidget * +Toolbar * StarToolbar::create(SPDesktop *desktop) { - auto toolbar = new StarToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new StarToolbar(desktop); } void diff --git a/src/ui/toolbar/star-toolbar.h b/src/ui/toolbar/star-toolbar.h index c44caab225264696ee6f1e60b12330305e4ae115..93184578d3892bb5c62e86df57258e11bddbf079 100644 --- a/src/ui/toolbar/star-toolbar.h +++ b/src/ui/toolbar/star-toolbar.h @@ -91,7 +91,7 @@ protected: ~StarToolbar() override; public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); static void event_attr_changed(Inkscape::XML::Node *repr, gchar const *name, diff --git a/src/ui/toolbar/text-toolbar.cpp b/src/ui/toolbar/text-toolbar.cpp index 3b02a39efbce96cbbd713d88183773ba75d9e5d6..6a68689f34b9bdb97606751a784cdba58d378409 100644 --- a/src/ui/toolbar/text-toolbar.cpp +++ b/src/ui/toolbar/text-toolbar.cpp @@ -745,11 +745,10 @@ TextToolbar::fontfamily_value_changed() #endif } -GtkWidget * +Toolbar * TextToolbar::create(SPDesktop *desktop) { - auto tb = Gtk::manage(new TextToolbar(desktop)); - return GTK_WIDGET(tb->gobj()); + return new TextToolbar(desktop); } void diff --git a/src/ui/toolbar/text-toolbar.h b/src/ui/toolbar/text-toolbar.h index 6108dd60f245b7cdc53940f2857e918e8e44100f..3993e454e2bcbcbabed20c129707920f9287eb7b 100644 --- a/src/ui/toolbar/text-toolbar.h +++ b/src/ui/toolbar/text-toolbar.h @@ -140,7 +140,7 @@ private: TextToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); }; } } diff --git a/src/ui/toolbar/toolbar.cpp b/src/ui/toolbar/toolbar.cpp index 445f5b7e831c3bfaf02fdab345597690ac5d4415..8414d4c047170c101432149d865b9a7d5903acc4 100644 --- a/src/ui/toolbar/toolbar.cpp +++ b/src/ui/toolbar/toolbar.cpp @@ -81,11 +81,10 @@ Toolbar::add_separator() add(* Gtk::manage(new Gtk::SeparatorToolItem())); } -GtkWidget * +Toolbar * Toolbar::create(SPDesktop *desktop) { - auto toolbar = Gtk::manage(new Toolbar(desktop)); - return GTK_WIDGET(toolbar->gobj()); + return new Toolbar(desktop); } } } diff --git a/src/ui/toolbar/toolbar.h b/src/ui/toolbar/toolbar.h index 18c0510b124b367f1b75d3467916bdfefb62bb1d..e254ede5ba6d6a4801f3fd718689444a69177632 100644 --- a/src/ui/toolbar/toolbar.h +++ b/src/ui/toolbar/toolbar.h @@ -48,7 +48,7 @@ protected: void add_separator(); protected: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); }; } } diff --git a/src/ui/toolbar/tweak-toolbar.cpp b/src/ui/toolbar/tweak-toolbar.cpp index eefdd7a51d6e8c694533935067eed95d7e98efdd..07973440e191149cc192609e963431226e07feae 100644 --- a/src/ui/toolbar/tweak-toolbar.cpp +++ b/src/ui/toolbar/tweak-toolbar.cpp @@ -250,11 +250,10 @@ TweakToolbar::set_mode(int mode) _mode_buttons[mode]->set_active(); } -GtkWidget * +Toolbar * TweakToolbar::create(SPDesktop *desktop) { - auto toolbar = new TweakToolbar(desktop); - return GTK_WIDGET(toolbar->gobj()); + return new TweakToolbar(desktop); } void diff --git a/src/ui/toolbar/tweak-toolbar.h b/src/ui/toolbar/tweak-toolbar.h index cd1c7d048f6eb7ceaffb6ce91fed674563a01397..9f968a0cc79b4f40caeaeb70b586f566dcbe4c16 100644 --- a/src/ui/toolbar/tweak-toolbar.h +++ b/src/ui/toolbar/tweak-toolbar.h @@ -78,7 +78,7 @@ protected: TweakToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); void set_mode(int mode); }; diff --git a/src/ui/toolbar/zoom-toolbar.cpp b/src/ui/toolbar/zoom-toolbar.cpp index 3b4d3d6bc3b10b1dee592aee9d917a5f5eeb3603..c6a227b7e3d7953f21b8b9f28abf66d941513eb5 100644 --- a/src/ui/toolbar/zoom-toolbar.cpp +++ b/src/ui/toolbar/zoom-toolbar.cpp @@ -63,11 +63,10 @@ ZoomToolbar::ZoomToolbar(SPDesktop *desktop) show_all(); } -GtkWidget * +Toolbar * ZoomToolbar::create(SPDesktop *desktop) { - auto toolbar = Gtk::manage(new ZoomToolbar(desktop)); - return GTK_WIDGET(toolbar->gobj()); + return new ZoomToolbar(desktop); } } } diff --git a/src/ui/toolbar/zoom-toolbar.h b/src/ui/toolbar/zoom-toolbar.h index b5d34de40b0cb504bea6e617f6b0fe4fff7439c4..5e81e234bf9a1567d131e41ff3d4d6fe07ba4007 100644 --- a/src/ui/toolbar/zoom-toolbar.h +++ b/src/ui/toolbar/zoom-toolbar.h @@ -42,7 +42,7 @@ protected: ZoomToolbar(SPDesktop *desktop); public: - static GtkWidget * create(SPDesktop *desktop); + static Toolbar * create(SPDesktop *desktop); }; } } diff --git a/src/ui/uxmanager.cpp b/src/ui/uxmanager.cpp index 08ee66c2cef24f5c01bed0789ee6ab58726f8d9e..45861958edf7ff25b740f3f3ca076a6965362115 100644 --- a/src/ui/uxmanager.cpp +++ b/src/ui/uxmanager.cpp @@ -10,10 +10,13 @@ * Released under GNU GPL v2+, read the file 'COPYING' for more information. */ +#include "uxmanager.h" + #include -#include "widgets/desktop-widget.h" -#include "uxmanager.h" +#include + +#include "widgets/desktop-widget.h" #include "desktop.h" #include "ui/monitor.h" #include "widgets/toolbox.h" @@ -27,7 +30,7 @@ public: {} sigc::connection destroyConn; - std::vector boxes; + std::vector boxes; }; static std::vector desktops; @@ -79,7 +82,7 @@ public: void addTrack( SPDesktopWidget* dtw ) override; void delTrack( SPDesktopWidget* dtw ) override; - void connectToDesktop( std::vector const & toolboxes, SPDesktop *desktop ) override; + void connectToDesktop( std::vector const & toolboxes, SPDesktop *desktop ) override; gint getDefaultTask( SPDesktop *desktop ) override; void setTask(SPDesktop* dt, gint val) override; @@ -196,17 +199,20 @@ void UXManagerImpl::delTrack( SPDesktopWidget* dtw ) } } -void UXManagerImpl::connectToDesktop( std::vector const & toolboxes, SPDesktop *desktop ) +void UXManagerImpl::connectToDesktop( std::vector const & toolboxes, SPDesktop *desktop ) { if (!desktop) { return; } TrackItem &tracker = trackedBoxes[desktop]; - std::vector& tracked = tracker.boxes; + auto & tracked = tracker.boxes; tracker.destroyConn = desktop->connectDestroy(&desktopDestructHandler); for (auto toolbox : toolboxes) { + if(!toolbox) { + g_warning("Can't get toolbox in connectToDesktop"); + } ToolboxFactory::setToolboxDesktop( toolbox, desktop ); if (find(tracked.begin(), tracked.end(), toolbox) == tracked.end()) { tracked.push_back(toolbox); diff --git a/src/ui/uxmanager.h b/src/ui/uxmanager.h index 5cb799ce995f1dbf107bbf0eda761b57b4e97477..cfcdea85a4099fc6f7e5a1a4968fe27392c115ce 100644 --- a/src/ui/uxmanager.h +++ b/src/ui/uxmanager.h @@ -19,6 +19,10 @@ extern "C" typedef struct _GtkWidget GtkWidget; class SPDesktop; struct SPDesktopWidget; +namespace Gtk { +class EventBox; +} + namespace Inkscape { namespace UI { @@ -31,7 +35,7 @@ public: virtual void addTrack( SPDesktopWidget* dtw ) = 0; virtual void delTrack( SPDesktopWidget* dtw ) = 0; - virtual void connectToDesktop( std::vector const & toolboxes, SPDesktop *desktop ) = 0; + virtual void connectToDesktop(std::vector const & toolboxes, SPDesktop *desktop) = 0; virtual gint getDefaultTask( SPDesktop *desktop ) = 0; virtual void setTask( SPDesktop* dt, gint val ) = 0; diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 36635094dcd7dce68b946aac31a1e53795e73e03..6679826b754e89f9dcbea44d9409aee522e8aada 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -57,6 +57,9 @@ #include "ui/icon-names.h" #include "ui/tools/box3d-tool.h" #include "ui/uxmanager.h" + +#include "ui/toolbar/aux-toolbox.h" + #include "ui/widget/button.h" #include "ui/widget/canvas.h" #include "ui/widget/canvas-grid.h" @@ -250,19 +253,19 @@ SPDesktopWidget::SPDesktopWidget() dtw->_vbox->pack_end(*dtw->_hbox, true, true); /* Toolboxes */ - dtw->aux_toolbox = ToolboxFactory::createAuxToolbox(); - dtw->_vbox->pack_end(*Glib::wrap(dtw->aux_toolbox), false, true); + dtw->aux_toolbox = Gtk::make_managed(); + dtw->_vbox->pack_end(*dtw->aux_toolbox, false, true); dtw->snap_toolbox = ToolboxFactory::createSnapToolbox(); - ToolboxFactory::setOrientation( dtw->snap_toolbox, GTK_ORIENTATION_VERTICAL ); - dtw->_hbox->pack_end(*Glib::wrap(dtw->snap_toolbox), false, true); + ToolboxFactory::setOrientation(dtw->snap_toolbox, Gtk::ORIENTATION_VERTICAL); + dtw->_hbox->pack_end(*dtw->snap_toolbox, false, true); dtw->commands_toolbox = ToolboxFactory::createCommandsToolbox(); - dtw->_vbox->pack_end(*Glib::wrap(dtw->commands_toolbox), false, true); + dtw->_vbox->pack_end(*dtw->commands_toolbox, false, true); dtw->tool_toolbox = ToolboxFactory::createToolToolbox(); - ToolboxFactory::setOrientation( dtw->tool_toolbox, GTK_ORIENTATION_VERTICAL ); - dtw->_hbox->pack_start(*Glib::wrap(dtw->tool_toolbox), false, true); + ToolboxFactory::setOrientation(dtw->tool_toolbox, Gtk::ORIENTATION_VERTICAL); + dtw->_hbox->pack_start(*dtw->tool_toolbox, false, true); /* Canvas Grid (canvas, rulers, scrollbars, etc.) */ dtw->_canvas_grid = Gtk::manage(new Inkscape::UI::Widget::CanvasGrid(this)); @@ -1229,29 +1232,29 @@ void SPDesktopWidget::layoutWidgets() } if (!prefs->getBool(pref_root + "commands/state", true)) { - gtk_widget_hide (dtw->commands_toolbox); + dtw->commands_toolbox->hide(); } else { - gtk_widget_show_all (dtw->commands_toolbox); + dtw->commands_toolbox->show_all(); } if (!prefs->getBool(pref_root + "snaptoolbox/state", true)) { - gtk_widget_hide (dtw->snap_toolbox); + dtw->snap_toolbox->hide(); } else { - gtk_widget_show_all (dtw->snap_toolbox); + dtw->snap_toolbox->show_all(); } if (!prefs->getBool(pref_root + "toppanel/state", true)) { - gtk_widget_hide (dtw->aux_toolbox); + dtw->aux_toolbox->hide(); } else { // we cannot just show_all because that will show all tools' panels; // this is a function from toolbox.cpp that shows only the current tool's panel - ToolboxFactory::showAuxToolbox(dtw->aux_toolbox); + dtw->aux_toolbox->show_aux_toolbox(); } if (!prefs->getBool(pref_root + "toolbox/state", true)) { - gtk_widget_hide (dtw->tool_toolbox); + dtw->tool_toolbox->hide(); } else { - gtk_widget_show_all (dtw->tool_toolbox); + dtw->tool_toolbox->show_all(); } if (!prefs->getBool(pref_root + "statusbar/state", true)) { @@ -1275,7 +1278,7 @@ SPDesktopWidget::get_toolbar_by_name(const Glib::ustring& name) { // The name is actually attached to the GtkGrid that contains // the toolbar, so we need to get the grid first - auto widget = sp_search_by_name_recursive(Glib::wrap(aux_toolbox), name); + auto widget = sp_search_by_name_recursive(aux_toolbox, name); auto grid = dynamic_cast(widget); if (!grid) return nullptr; @@ -1290,11 +1293,11 @@ void SPDesktopWidget::setToolboxFocusTo (const gchar* label) { // First try looking for a named widget - auto hb = sp_search_by_name_recursive(Glib::wrap(aux_toolbox), label); + auto hb = sp_search_by_name_recursive(aux_toolbox, label); // Fallback to looking for a named data member (deprecated) if (!hb) { - hb = Glib::wrap(GTK_WIDGET(sp_search_by_data_recursive(aux_toolbox, (gpointer) label))); + hb = Glib::wrap(GTK_WIDGET(sp_search_by_data_recursive(GTK_WIDGET(aux_toolbox->gobj()), (gpointer) label))); } if (hb) @@ -1307,11 +1310,11 @@ void SPDesktopWidget::setToolboxAdjustmentValue (gchar const *id, double value) { // First try looking for a named widget - auto hb = sp_search_by_name_recursive(Glib::wrap(aux_toolbox), id); + auto hb = sp_search_by_name_recursive(aux_toolbox, id); // Fallback to looking for a named data member (deprecated) if (!hb) { - hb = Glib::wrap(GTK_WIDGET(sp_search_by_data_recursive(aux_toolbox, (gpointer)id))); + hb = Glib::wrap(GTK_WIDGET(sp_search_by_data_recursive(GTK_WIDGET(aux_toolbox->gobj()), (gpointer)id))); } if (hb) { @@ -1329,7 +1332,7 @@ bool SPDesktopWidget::isToolboxButtonActive (const gchar* id) { bool isActive = false; - gpointer thing = sp_search_by_data_recursive(aux_toolbox, (gpointer) id); + gpointer thing = sp_search_by_data_recursive(GTK_WIDGET(aux_toolbox->gobj()), (gpointer) id); if ( !thing ) { //g_message( "Unable to locate item for {%s}", id ); } else if ( GTK_IS_TOGGLE_BUTTON(thing) ) { @@ -1351,7 +1354,7 @@ SPDesktopWidget::isToolboxButtonActive (const gchar* id) void SPDesktopWidget::setToolboxPosition(Glib::ustring const& id, GtkPositionType pos) { // Note - later on these won't be individual member variables. - GtkWidget* toolbox = nullptr; + Gtk::EventBox *toolbox = nullptr; if (id == "ToolToolbar") { toolbox = tool_toolbox; } else if (id == "AuxToolbar") { @@ -1367,33 +1370,33 @@ void SPDesktopWidget::setToolboxPosition(Glib::ustring const& id, GtkPositionTyp switch(pos) { case GTK_POS_TOP: case GTK_POS_BOTTOM: - if ( gtk_widget_is_ancestor(toolbox, GTK_WIDGET(_hbox->gobj())) ) { + if (toolbox->is_ancestor(*_hbox)) { // Removing a widget can reduce ref count to zero - g_object_ref(G_OBJECT(toolbox)); - _hbox->remove(*Glib::wrap(toolbox)); - _vbox->add(*Glib::wrap(toolbox)); - g_object_unref(G_OBJECT(toolbox)); + // g_object_ref(G_OBJECT(toolbox)); + _hbox->remove(*toolbox); + _vbox->add(*toolbox); + // g_object_unref(G_OBJECT(toolbox)); // Function doesn't seem to be in Gtkmm wrapper yet - gtk_box_set_child_packing(_vbox->gobj(), toolbox, FALSE, TRUE, 0, GTK_PACK_START); + gtk_box_set_child_packing(_vbox->gobj(), GTK_WIDGET(toolbox->gobj()), FALSE, TRUE, 0, GTK_PACK_START); } - ToolboxFactory::setOrientation(toolbox, GTK_ORIENTATION_HORIZONTAL); + ToolboxFactory::setOrientation(toolbox, Gtk::ORIENTATION_HORIZONTAL); break; case GTK_POS_LEFT: case GTK_POS_RIGHT: - if ( !gtk_widget_is_ancestor(toolbox, GTK_WIDGET(_hbox->gobj())) ) { - g_object_ref(G_OBJECT(toolbox)); - _vbox->remove(*Glib::wrap(toolbox)); - _hbox->add(*Glib::wrap(toolbox)); - g_object_unref(G_OBJECT(toolbox)); + if (!toolbox->is_ancestor(*_hbox)) { + // g_object_ref(G_OBJECT(toolbox)); + _vbox->remove(*toolbox); + _hbox->add(*toolbox); + // g_object_unref(G_OBJECT(toolbox)); // Function doesn't seem to be in Gtkmm wrapper yet - gtk_box_set_child_packing(_hbox->gobj(), toolbox, FALSE, TRUE, 0, GTK_PACK_START); + gtk_box_set_child_packing(_hbox->gobj(), GTK_WIDGET(toolbox->gobj()), FALSE, TRUE, 0, GTK_PACK_START); if (pos == GTK_POS_LEFT) { - _hbox->reorder_child(*Glib::wrap(toolbox), 0 ); + _hbox->reorder_child(*toolbox, 0); } } - ToolboxFactory::setOrientation(toolbox, GTK_ORIENTATION_VERTICAL); + ToolboxFactory::setOrientation(toolbox, Gtk::ORIENTATION_VERTICAL); break; } } @@ -1440,10 +1443,14 @@ SPDesktopWidget::SPDesktopWidget(SPDocument *document) dtw->layoutWidgets(); - std::vector toolboxes; + std::vector toolboxes; + if(!tool_toolbox) g_warning("Can't get tool_toolbox"); toolboxes.push_back(dtw->tool_toolbox); + if(!aux_toolbox) g_warning("Can't get aux_toolbox"); toolboxes.push_back(dtw->aux_toolbox); + if(!commands_toolbox) g_warning("Can't get commands_toolbox"); toolboxes.push_back(dtw->commands_toolbox); + if(!snap_toolbox) g_warning("Can't get snap_toolbox"); toolboxes.push_back(dtw->snap_toolbox); dtw->_panels->setDesktop( dtw->desktop ); diff --git a/src/widgets/desktop-widget.h b/src/widgets/desktop-widget.h index 600576ee47af11854deda9e70aa3ed6bc21244c9..4aa327eb59b9314585ed38cc921fa72611ae3103 100644 --- a/src/widgets/desktop-widget.h +++ b/src/widgets/desktop-widget.h @@ -39,10 +39,15 @@ class SPObject; namespace Inkscape { namespace UI { + namespace Dialog { class SwatchesPanel; } // namespace Dialog +namespace Toolbar { +class AuxToolbox; +} // namespace Toolbar + namespace Widget { class Button; class Canvas; @@ -212,10 +217,10 @@ public: void sticky_zoom_toggled(); private: - GtkWidget *tool_toolbox; - GtkWidget *aux_toolbox; - GtkWidget *commands_toolbox; - GtkWidget *snap_toolbox; + Gtk::EventBox *tool_toolbox = nullptr; + Inkscape::UI::Toolbar::AuxToolbox *aux_toolbox = nullptr; + Gtk::EventBox *commands_toolbox = nullptr; + Gtk::EventBox *snap_toolbox = nullptr; void namedviewModified(SPObject *obj, guint flags); int zoom_input(double *new_val); diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index bc1ef63a2c61bba77787055b1f7ac10f0c1c4247..d3fb4f12d3ca8b0bcd4d0c2b8d7708b399f9677d 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -56,7 +56,6 @@ #include "ui/uxmanager.h" #include "ui/widget/button.h" #include "ui/widget/spinbutton.h" -#include "ui/widget/style-swatch.h" #include "ui/widget/unit-tracker.h" #include "widgets/spw-utilities.h" @@ -65,28 +64,8 @@ #include "xml/attribute-record.h" #include "xml/node-event-vector.h" -#include "ui/toolbar/arc-toolbar.h" -#include "ui/toolbar/box3d-toolbar.h" -#include "ui/toolbar/calligraphy-toolbar.h" -#include "ui/toolbar/connector-toolbar.h" -#include "ui/toolbar/dropper-toolbar.h" -#include "ui/toolbar/eraser-toolbar.h" -#include "ui/toolbar/gradient-toolbar.h" -#include "ui/toolbar/lpe-toolbar.h" -#include "ui/toolbar/mesh-toolbar.h" -#include "ui/toolbar/measure-toolbar.h" -#include "ui/toolbar/node-toolbar.h" -#include "ui/toolbar/rect-toolbar.h" -#include "ui/toolbar/paintbucket-toolbar.h" -#include "ui/toolbar/pencil-toolbar.h" -#include "ui/toolbar/select-toolbar.h" +#include "ui/toolbar/aux-toolbox.h" #include "ui/toolbar/snap-toolbar.h" -#include "ui/toolbar/spray-toolbar.h" -#include "ui/toolbar/spiral-toolbar.h" -#include "ui/toolbar/star-toolbar.h" -#include "ui/toolbar/tweak-toolbar.h" -#include "ui/toolbar/text-toolbar.h" -#include "ui/toolbar/zoom-toolbar.h" #include "toolbox.h" @@ -102,12 +81,11 @@ using Inkscape::UI::Tools::ToolBase; using Inkscape::IO::Resource::get_filename; using Inkscape::IO::Resource::UIS; -typedef void (*SetupFunction)(GtkWidget *toolbox, SPDesktop *desktop); -typedef void (*UpdateFunction)(SPDesktop *desktop, ToolBase *eventcontext, GtkWidget *toolbox); +typedef void (*SetupFunction)(Gtk::Bin *toolbox, SPDesktop *desktop); +typedef void (*UpdateFunction)(SPDesktop *desktop, ToolBase *eventcontext, Gtk::Bin *toolbox); enum BarId { BAR_TOOL = 0, - BAR_AUX, BAR_COMMANDS, BAR_SNAP, }; @@ -167,78 +145,15 @@ static struct { { nullptr, nullptr, 0, 0 } }; -static struct { - gchar const *type_name; - gchar const *data_name; - GtkWidget *(*create_func)(SPDesktop *desktop); - gchar const *ui_name; - gint swatch_verb_id; - gchar const *swatch_tool; - gchar const *swatch_tip; -} const aux_toolboxes[] = { - { "/tools/select", "select_toolbox", Inkscape::UI::Toolbar::SelectToolbar::create, "SelectToolbar", - SP_VERB_INVALID, nullptr, nullptr}, - { "/tools/nodes", "node_toolbox", Inkscape::UI::Toolbar::NodeToolbar::create, "NodeToolbar", - SP_VERB_INVALID, nullptr, nullptr}, - { "/tools/tweak", "tweak_toolbox", Inkscape::UI::Toolbar::TweakToolbar::create, "TweakToolbar", - SP_VERB_CONTEXT_TWEAK_PREFS, "/tools/tweak", N_("Color/opacity used for color tweaking")}, - { "/tools/spray", "spray_toolbox", Inkscape::UI::Toolbar::SprayToolbar::create, "SprayToolbar", - SP_VERB_INVALID, nullptr, nullptr}, - { "/tools/zoom", "zoom_toolbox", Inkscape::UI::Toolbar::ZoomToolbar::create, "ZoomToolbar", - SP_VERB_INVALID, nullptr, nullptr}, - // If you change MeasureToolbar here, change it also in desktop-widget.cpp - { "/tools/measure", "measure_toolbox", Inkscape::UI::Toolbar::MeasureToolbar::create, "MeasureToolbar", - SP_VERB_INVALID, nullptr, nullptr}, - { "/tools/shapes/star", "star_toolbox", Inkscape::UI::Toolbar::StarToolbar::create, "StarToolbar", - SP_VERB_CONTEXT_STAR_PREFS, "/tools/shapes/star", N_("Style of new stars")}, - { "/tools/shapes/rect", "rect_toolbox", Inkscape::UI::Toolbar::RectToolbar::create, "RectToolbar", - SP_VERB_CONTEXT_RECT_PREFS, "/tools/shapes/rect", N_("Style of new rectangles")}, - { "/tools/shapes/3dbox", "3dbox_toolbox", Inkscape::UI::Toolbar::Box3DToolbar::create, "3DBoxToolbar", - SP_VERB_CONTEXT_3DBOX_PREFS, "/tools/shapes/3dbox", N_("Style of new 3D boxes")}, - { "/tools/shapes/arc", "arc_toolbox", Inkscape::UI::Toolbar::ArcToolbar::create, "ArcToolbar", - SP_VERB_CONTEXT_ARC_PREFS, "/tools/shapes/arc", N_("Style of new ellipses")}, - { "/tools/shapes/spiral", "spiral_toolbox", Inkscape::UI::Toolbar::SpiralToolbar::create, "SpiralToolbar", - SP_VERB_CONTEXT_SPIRAL_PREFS, "/tools/shapes/spiral", N_("Style of new spirals")}, - { "/tools/freehand/pencil", "pencil_toolbox", Inkscape::UI::Toolbar::PencilToolbar::create_pencil, "PencilToolbar", - SP_VERB_CONTEXT_PENCIL_PREFS, "/tools/freehand/pencil", N_("Style of new paths created by Pencil")}, - { "/tools/freehand/pen", "pen_toolbox", Inkscape::UI::Toolbar::PencilToolbar::create_pen, "PenToolbar", - SP_VERB_CONTEXT_PEN_PREFS, "/tools/freehand/pen", N_("Style of new paths created by Pen")}, - { "/tools/calligraphic", "calligraphy_toolbox", Inkscape::UI::Toolbar::CalligraphyToolbar::create, "CalligraphyToolbar", - SP_VERB_CONTEXT_CALLIGRAPHIC_PREFS, "/tools/calligraphic", N_("Style of new calligraphic strokes")}, - { "/tools/eraser", "eraser_toolbox", Inkscape::UI::Toolbar::EraserToolbar::create, "EraserToolbar", - SP_VERB_CONTEXT_ERASER_PREFS, "/tools/eraser", _("TBD")}, - { "/tools/lpetool", "lpetool_toolbox", Inkscape::UI::Toolbar::LPEToolbar::create, "LPEToolToolbar", - SP_VERB_CONTEXT_LPETOOL_PREFS, "/tools/lpetool", _("TBD")}, - // If you change TextToolbar here, change it also in desktop-widget.cpp - { "/tools/text", "text_toolbox", Inkscape::UI::Toolbar::TextToolbar::create, "TextToolbar", - SP_VERB_INVALID, nullptr, nullptr}, - { "/tools/dropper", "dropper_toolbox", Inkscape::UI::Toolbar::DropperToolbar::create, "DropperToolbar", - SP_VERB_INVALID, nullptr, nullptr}, - { "/tools/connector", "connector_toolbox", Inkscape::UI::Toolbar::ConnectorToolbar::create, "ConnectorToolbar", - SP_VERB_INVALID, nullptr, nullptr}, - { "/tools/gradient", "gradient_toolbox", Inkscape::UI::Toolbar::GradientToolbar::create, "GradientToolbar", - SP_VERB_INVALID, nullptr, nullptr}, - { "/tools/mesh", "mesh_toolbox", Inkscape::UI::Toolbar::MeshToolbar::create, "MeshToolbar", - SP_VERB_INVALID, nullptr, nullptr}, - { "/tools/paintbucket", "paintbucket_toolbox", Inkscape::UI::Toolbar::PaintbucketToolbar::create, "PaintbucketToolbar", - SP_VERB_CONTEXT_PAINTBUCKET_PREFS, "/tools/paintbucket", N_("Style of Paint Bucket fill objects")}, - { nullptr, nullptr, nullptr, nullptr, - SP_VERB_INVALID, nullptr, nullptr } -}; - - static Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ); -static void setup_snap_toolbox(GtkWidget *toolbox, SPDesktop *desktop); +static void setup_snap_toolbox(Gtk::Bin *toolbox, SPDesktop *desktop); -static void setup_tool_toolbox(GtkWidget *toolbox, SPDesktop *desktop); -static void update_tool_toolbox(SPDesktop *desktop, ToolBase *eventcontext, GtkWidget *toolbox); +static void setup_tool_toolbox(Gtk::Bin *toolbox, SPDesktop *desktop); +static void update_tool_toolbox(SPDesktop *desktop, ToolBase *eventcontext, Gtk::Bin *toolbox); -static void setup_aux_toolbox(GtkWidget *toolbox, SPDesktop *desktop); -static void update_aux_toolbox(SPDesktop *desktop, ToolBase *eventcontext, GtkWidget *toolbox); - -static void setup_commands_toolbox(GtkWidget *toolbox, SPDesktop *desktop); -static void update_commands_toolbox(SPDesktop *desktop, ToolBase *eventcontext, GtkWidget *toolbox); +static void setup_commands_toolbox(Gtk::Bin *toolbox, SPDesktop *desktop); +static void update_commands_toolbox(SPDesktop *desktop, ToolBase *eventcontext, Gtk::Bin *toolbox); static void trigger_sp_action( GtkAction* /*act*/, gpointer user_data ) { @@ -274,7 +189,7 @@ static std::map > groups; static void desktopDestructHandler(SPDesktop *desktop) { - std::map >::iterator it = groups.find(desktop); + auto it = groups.find(desktop); if (it != groups.end()) { groups.erase(it); @@ -379,265 +294,227 @@ static Glib::RefPtr create_or_fetch_actions( SPDesktop* deskto } -static GtkWidget* toolboxNewCommon( GtkWidget* tb, BarId id, GtkPositionType /*handlePos*/ ) +static Gtk::EventBox * toolboxNewCommon(Gtk::Box * tb, BarId id, Gtk::PositionType /*handlePos*/) { - g_object_set_data(G_OBJECT(tb), "desktop", nullptr); + tb->set_data("desktop", nullptr); - gtk_widget_set_sensitive(tb, FALSE); + tb->set_sensitive(false); - GtkWidget *hb = gtk_event_box_new(); // A simple, neutral container. - gtk_widget_set_name(hb, "ToolboxCommon"); + auto hb = Gtk::make_managed(); // A simple, neutral container. + hb->set_name("ToolboxCommon"); - gtk_container_add(GTK_CONTAINER(hb), tb); - gtk_widget_show(GTK_WIDGET(tb)); + hb->add(*tb); + tb->show(); sigc::connection* conn = new sigc::connection; - g_object_set_data(G_OBJECT(hb), "event_context_connection", conn); + hb->set_data("event_context_connection", conn); gpointer val = GINT_TO_POINTER(id); - g_object_set_data(G_OBJECT(hb), BAR_ID_KEY, val); + hb->set_data(BAR_ID_KEY, val); return hb; } -GtkWidget *ToolboxFactory::createToolToolbox() -{ - auto tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); - gtk_widget_set_name(tb, "ToolToolbox"); - gtk_box_set_homogeneous(GTK_BOX(tb), FALSE); - - return toolboxNewCommon( tb, BAR_TOOL, GTK_POS_TOP ); -} - -GtkWidget *ToolboxFactory::createAuxToolbox() +Gtk::EventBox * ToolboxFactory::createToolToolbox() { - auto tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); - gtk_widget_set_name(tb, "AuxToolbox"); - gtk_box_set_homogeneous(GTK_BOX(tb), FALSE); + auto tb = Gtk::make_managed(Gtk::ORIENTATION_VERTICAL, 0); + tb->set_name("ToolToolbox"); + tb->set_homogeneous(false); - return toolboxNewCommon( tb, BAR_AUX, GTK_POS_LEFT ); + return toolboxNewCommon(tb, BAR_TOOL, Gtk::POS_TOP); } //#################################### //# Commands Bar //#################################### -GtkWidget *ToolboxFactory::createCommandsToolbox() +Gtk::EventBox * ToolboxFactory::createCommandsToolbox() { - auto tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); - gtk_widget_set_name(tb, "CommandsToolbox"); - gtk_box_set_homogeneous(GTK_BOX(tb), FALSE); + auto tb = Gtk::make_managed(Gtk::ORIENTATION_VERTICAL, 0); + tb->set_name("CommandsToolbox"); + tb->set_homogeneous(false); - return toolboxNewCommon( tb, BAR_COMMANDS, GTK_POS_LEFT ); + return toolboxNewCommon(tb, BAR_COMMANDS, Gtk::POS_LEFT); } -GtkWidget *ToolboxFactory::createSnapToolbox() +Gtk::EventBox * ToolboxFactory::createSnapToolbox() { - auto tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); - gtk_widget_set_name(tb, "SnapToolbox"); - gtk_box_set_homogeneous(GTK_BOX(tb), FALSE); + auto tb = Gtk::make_managed(Gtk::ORIENTATION_VERTICAL, 0); + tb->set_name("SnapToolbox"); + tb->set_homogeneous(false); - return toolboxNewCommon( tb, BAR_SNAP, GTK_POS_LEFT ); + return toolboxNewCommon(tb, BAR_SNAP, Gtk::POS_LEFT); } -void ToolboxFactory::setToolboxDesktop(GtkWidget *toolbox, SPDesktop *desktop) +void ToolboxFactory::setToolboxDesktop(Gtk::EventBox *toolbox, SPDesktop *desktop) { - sigc::connection *conn = static_cast(g_object_get_data(G_OBJECT(toolbox), - "event_context_connection")); - - BarId id = static_cast( GPOINTER_TO_INT(g_object_get_data(G_OBJECT(toolbox), BAR_ID_KEY)) ); - - SetupFunction setup_func = nullptr; - UpdateFunction update_func = nullptr; - - switch (id) { - case BAR_TOOL: - setup_func = setup_tool_toolbox; - update_func = update_tool_toolbox; - break; - - case BAR_AUX: - toolbox = gtk_bin_get_child(GTK_BIN(toolbox)); - setup_func = setup_aux_toolbox; - update_func = update_aux_toolbox; - break; - - case BAR_COMMANDS: - setup_func = setup_commands_toolbox; - update_func = update_commands_toolbox; - break; - - case BAR_SNAP: - setup_func = setup_snap_toolbox; - update_func = updateSnapToolbox; - break; - default: - g_warning("Unexpected toolbox id encountered."); + auto aux_toolbox = dynamic_cast(toolbox); + + if (aux_toolbox) { + aux_toolbox->set_desktop(desktop); } + else { + auto conn = static_cast(toolbox->get_data("event_context_connection")); + + BarId id = static_cast(GPOINTER_TO_INT(toolbox->get_data(BAR_ID_KEY))); + + SetupFunction setup_func = nullptr; + UpdateFunction update_func = nullptr; + + switch (id) { + case BAR_TOOL: + setup_func = setup_tool_toolbox; + update_func = update_tool_toolbox; + break; + + case BAR_COMMANDS: + setup_func = setup_commands_toolbox; + update_func = update_commands_toolbox; + break; - gpointer ptr = g_object_get_data(G_OBJECT(toolbox), "desktop"); - SPDesktop *old_desktop = static_cast(ptr); + case BAR_SNAP: + setup_func = setup_snap_toolbox; + update_func = updateSnapToolbox; + break; - if (old_desktop) { - std::vector children = Glib::wrap(GTK_CONTAINER(toolbox))->get_children(); - for ( auto i:children ) { - gtk_container_remove( GTK_CONTAINER(toolbox), i->gobj() ); + default: + g_warning("Unexpected toolbox id encountered."); } - } - g_object_set_data(G_OBJECT(toolbox), "desktop", (gpointer)desktop); + SPDesktop *old_desktop = static_cast(toolbox->get_data("desktop")); - if (desktop && setup_func && update_func) { - gtk_widget_set_sensitive(toolbox, TRUE); - setup_func(toolbox, desktop); - update_func(desktop, desktop->event_context, toolbox); - *conn = desktop->connectEventContextChanged(sigc::bind (sigc::ptr_fun(update_func), toolbox)); - } else { - gtk_widget_set_sensitive(toolbox, FALSE); - } + if (old_desktop) { + auto children = toolbox->get_children(); + for ( auto i:children ) { + gtk_container_remove(GTK_CONTAINER(toolbox->gobj()), i->gobj()); + } + } + toolbox->set_data("desktop", (gpointer)desktop); + + if (desktop && setup_func && update_func) { + toolbox->set_sensitive(true); + setup_func(toolbox, desktop); + update_func(desktop, desktop->event_context, toolbox); + *conn = desktop->connectEventContextChanged(sigc::bind(sigc::ptr_fun(update_func), toolbox)); + } else { + toolbox->set_sensitive(false); + } + } } // end of sp_toolbox_set_desktop() -static void setupToolboxCommon( GtkWidget *toolbox, +static void setupToolboxCommon( Gtk::Bin *toolbox, SPDesktop *desktop, gchar const *ui_file, gchar const* toolbarName, gchar const* sizePref ) { - Glib::RefPtr mainActions = create_or_fetch_actions( desktop ); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - - GtkUIManager* mgr = gtk_ui_manager_new(); - GError* err = nullptr; - - GtkOrientation orientation = GTK_ORIENTATION_HORIZONTAL; + auto mainActions = create_or_fetch_actions(desktop); + auto prefs = Inkscape::Preferences::get(); + auto mgr = Gtk::UIManager::create(); + auto orientation = Gtk::ORIENTATION_HORIZONTAL; - gtk_ui_manager_insert_action_group( mgr, mainActions->gobj(), 0 ); + mgr->insert_action_group(mainActions, 0); - Glib::ustring filename = get_filename(UIS, ui_file); - gtk_ui_manager_add_ui_from_file( mgr, filename.c_str(), &err ); - if(err) { - g_warning("Failed to load %s: %s", filename.c_str(), err->message); - g_error_free(err); + auto filename = get_filename(UIS, ui_file); + try { + mgr->add_ui_from_file(filename); + } catch (Glib::Error &err) { + g_warning("Failed to load %s: %s", filename.c_str(), err.what().c_str()); return; } - GtkWidget* toolBar = gtk_ui_manager_get_widget( mgr, toolbarName ); + auto toolBar = dynamic_cast(mgr->get_widget(toolbarName)); if ( prefs->getBool("/toolbox/icononly", true) ) { - gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS ); + toolBar->set_toolbar_style(Gtk::TOOLBAR_ICONS); } - GtkIconSize toolboxSize = ToolboxFactory::prefToSize(sizePref); - gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), static_cast(toolboxSize) ); + auto toolboxSize = ToolboxFactory::prefToSize(sizePref); + toolBar->set_icon_size(static_cast(toolboxSize)); - GtkPositionType pos = static_cast(GPOINTER_TO_INT(g_object_get_data( G_OBJECT(toolbox), HANDLE_POS_MARK ))); - orientation = ((pos == GTK_POS_LEFT) || (pos == GTK_POS_RIGHT)) ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL; - gtk_orientable_set_orientation (GTK_ORIENTABLE(toolBar), orientation); - gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolBar), TRUE); + auto pos = static_cast(GPOINTER_TO_INT(toolbox->get_data(HANDLE_POS_MARK))); + orientation = ((pos == Gtk::POS_LEFT) || (pos == Gtk::POS_RIGHT)) ? Gtk::ORIENTATION_HORIZONTAL : Gtk::ORIENTATION_VERTICAL; + gtk_orientable_set_orientation(GTK_ORIENTABLE(toolBar->gobj()), static_cast(orientation)); + toolBar->set_show_arrow(true); - g_object_set_data(G_OBJECT(toolBar), "desktop", nullptr); + toolBar->set_data("desktop", nullptr); - GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox)); - if ( child ) { - gtk_container_remove( GTK_CONTAINER(toolbox), child ); + auto child = toolbox->get_child(); + if (child) { + gtk_container_remove(GTK_CONTAINER(toolbox->gobj()), child->gobj()); } - gtk_container_add( GTK_CONTAINER(toolbox), toolBar ); + toolbox->add(*toolBar); } #define noDUMP_DETAILS 1 -void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientation) +void ToolboxFactory::setOrientation(Gtk::EventBox *toolbox, Gtk::Orientation orientation) { -#if DUMP_DETAILS - g_message("Set orientation for %p to be %d", toolbox, orientation); - GType type = G_OBJECT_TYPE(toolbox); - g_message(" [%s]", g_type_name(type)); - g_message(" %p", g_object_get_data(G_OBJECT(toolbox), BAR_ID_KEY)); -#endif - - GtkPositionType pos = (orientation == GTK_ORIENTATION_HORIZONTAL) ? GTK_POS_LEFT : GTK_POS_TOP; - - if (GTK_IS_BIN(toolbox)) { -#if DUMP_DETAILS - g_message(" is a BIN"); -#endif // DUMP_DETAILS - GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox)); - if (child) { -#if DUMP_DETAILS - GType type2 = G_OBJECT_TYPE(child); - g_message(" child [%s]", g_type_name(type2)); -#endif // DUMP_DETAILS - - if (GTK_IS_BOX(child)) { -#if DUMP_DETAILS - g_message(" is a BOX"); -#endif // DUMP_DETAILS - - std::vector children = Glib::wrap(GTK_CONTAINER(child))->get_children(); - if (!children.empty()) { - for (auto curr:children) { - GtkWidget* child2 = curr->gobj(); -#if DUMP_DETAILS - GType type3 = G_OBJECT_TYPE(child2); - g_message(" child2 [%s]", g_type_name(type3)); -#endif // DUMP_DETAILS - - if (GTK_IS_CONTAINER(child2)) { - std::vector children2 = Glib::wrap(GTK_CONTAINER(child2))->get_children(); - if (!children2.empty()) { - for (auto curr2:children2) { - GtkWidget* child3 = curr2->gobj(); -#if DUMP_DETAILS - GType type4 = G_OBJECT_TYPE(child3); - g_message(" child3 [%s]", g_type_name(type4)); -#endif // DUMP_DETAILS - if (GTK_IS_TOOLBAR(child3)) { - GtkToolbar* childBar = GTK_TOOLBAR(child3); - gtk_orientable_set_orientation(GTK_ORIENTABLE(childBar), orientation); - } + auto pos = (orientation == Gtk::ORIENTATION_HORIZONTAL) ? Gtk::POS_LEFT : Gtk::POS_TOP; + + auto child = toolbox->get_child(); + if (child) { + auto child_box = dynamic_cast(child); + auto child_toolbar = dynamic_cast(child); + + if (child_box) { + auto children = child_box->get_children(); + if (!children.empty()) { + for (auto child2:children) { + auto child2_container = dynamic_cast(child2); + + if (child2_container) { + auto children2 = child2_container->get_children(); + if (!children2.empty()) { + for (auto child3:children2) { + auto child3_toolbar = dynamic_cast(child3); + if (child3_toolbar) { + gtk_orientable_set_orientation(GTK_ORIENTABLE(child3_toolbar->gobj()), + static_cast(orientation)); } } } + } + auto child2_toolbar = dynamic_cast(child2); - if (GTK_IS_TOOLBAR(child2)) { - GtkToolbar* childBar = GTK_TOOLBAR(child2); - gtk_orientable_set_orientation(GTK_ORIENTABLE(childBar), orientation); - } else { - g_message("need to add dynamic switch"); - } + if (child2_toolbar) { + gtk_orientable_set_orientation(GTK_ORIENTABLE(child2_toolbar->gobj()), + static_cast(orientation)); + } else { + g_message("need to add dynamic switch"); } - } else { - // The call is being made before the toolbox proper has been setup. - g_object_set_data(G_OBJECT(toolbox), HANDLE_POS_MARK, GINT_TO_POINTER(pos)); } - } else if (GTK_IS_TOOLBAR(child)) { - GtkToolbar* toolbar = GTK_TOOLBAR(child); - gtk_orientable_set_orientation( GTK_ORIENTABLE(toolbar), orientation ); + } else { + // The call is being made before the toolbox proper has been setup. + toolbox->set_data(HANDLE_POS_MARK, GINT_TO_POINTER(pos)); } + } else if (child_toolbar) { + gtk_orientable_set_orientation(GTK_ORIENTABLE(child_toolbar->gobj()), + static_cast(orientation)); } } } -void setup_tool_toolbox(GtkWidget *toolbox, SPDesktop *desktop) +void setup_tool_toolbox(Gtk::Bin *toolbox, SPDesktop *desktop) { setupToolboxCommon(toolbox, desktop, "toolbar-tool.ui", "/ui/ToolToolbar", "/toolbox/tools/small"); } -void update_tool_toolbox( SPDesktop *desktop, ToolBase *eventcontext, GtkWidget * /*toolbox*/ ) +void update_tool_toolbox( SPDesktop *desktop, ToolBase *eventcontext, Gtk::Bin * /*toolbox*/ ) { gchar const *const tname = ( eventcontext ? eventcontext->getPrefsPath().c_str() //g_type_name(G_OBJECT_TYPE(eventcontext)) : nullptr ); - Glib::RefPtr mainActions = create_or_fetch_actions( desktop ); + auto mainActions = create_or_fetch_actions( desktop ); for (int i = 0 ; tools[i].type_name ; i++ ) { - Glib::RefPtr act = mainActions->get_action( Inkscape::Verb::get(tools[i].verb)->get_id() ); + auto act = mainActions->get_action( Inkscape::Verb::get(tools[i].verb)->get_id() ); if ( act ) { bool setActive = tname && !strcmp(tname, tools[i].type_name); - Glib::RefPtr verbAct = Glib::RefPtr::cast_dynamic(act); + auto verbAct = Glib::RefPtr::cast_dynamic(act); if ( verbAct ) { verbAct->set_active(setActive); } @@ -645,176 +522,53 @@ void update_tool_toolbox( SPDesktop *desktop, ToolBase *eventcontext, GtkWidget } } -/** - * \brief Generate the auxiliary toolbox - * - * \details This is the one that appears below the main menu, and contains - * tool-specific toolbars. Each toolbar is created here, using - * its "create" method. - * - * The actual method used for each toolbar is specified in the - * "aux_toolboxes" array, defined above. - */ -void setup_aux_toolbox(GtkWidget *toolbox, SPDesktop *desktop) -{ - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - - // Loop through all the toolboxes and create them using either - // their "create" methods. - for (int i = 0 ; aux_toolboxes[i].type_name ; i++ ) { - if (aux_toolboxes[i].create_func) { - GtkWidget *sub_toolbox = aux_toolboxes[i].create_func(desktop); - gtk_widget_set_name( sub_toolbox, "SubToolBox" ); - - auto holder = gtk_grid_new(); - gtk_grid_attach(GTK_GRID(holder), sub_toolbox, 0, 0, 1, 1); - - // This part is just for styling - if ( prefs->getBool( "/toolbox/icononly", true) ) { - gtk_toolbar_set_style( GTK_TOOLBAR(sub_toolbox), GTK_TOOLBAR_ICONS ); - } - - GtkIconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/small"); - gtk_toolbar_set_icon_size( GTK_TOOLBAR(sub_toolbox), static_cast(toolboxSize) ); - gtk_widget_set_hexpand(sub_toolbox, TRUE); - - // Add a swatch widget if one was specified - if ( aux_toolboxes[i].swatch_verb_id != SP_VERB_INVALID ) { - auto swatch = new Inkscape::UI::Widget::StyleSwatch( nullptr, _(aux_toolboxes[i].swatch_tip) ); - swatch->setDesktop( desktop ); - swatch->setClickVerb( aux_toolboxes[i].swatch_verb_id ); - swatch->setWatchedTool( aux_toolboxes[i].swatch_tool, true ); - swatch->set_margin_start(AUX_BETWEEN_BUTTON_GROUPS); - swatch->set_margin_end(AUX_BETWEEN_BUTTON_GROUPS); - swatch->set_margin_top(AUX_SPACING); - swatch->set_margin_bottom(AUX_SPACING); - - auto swatch_ = GTK_WIDGET( swatch->gobj() ); - gtk_grid_attach( GTK_GRID(holder), swatch_, 1, 0, 1, 1); - } - - // Add the new toolbar into the toolbox (i.e., make it the visible toolbar) - // and also store a pointer to it inside the toolbox. This allows the - // active toolbar to be changed. - gtk_container_add(GTK_CONTAINER(toolbox), holder); - gtk_widget_set_name( holder, aux_toolboxes[i].ui_name ); - - // TODO: We could make the toolbox a custom subclass of GtkEventBox - // so that we can store a list of toolbars, rather than using - // GObject data - g_object_set_data(G_OBJECT(toolbox), aux_toolboxes[i].data_name, holder); - gtk_widget_show(sub_toolbox); - gtk_widget_show(holder); - } else if (aux_toolboxes[i].swatch_verb_id != SP_VERB_NONE) { - g_warning("Could not create toolbox %s", aux_toolboxes[i].ui_name); - } - } -} -void update_aux_toolbox(SPDesktop * /*desktop*/, ToolBase *eventcontext, GtkWidget *toolbox) -{ - gchar const *tname = ( eventcontext - ? eventcontext->getPrefsPath().c_str() //g_type_name(G_OBJECT_TYPE(eventcontext)) - : nullptr ); - for (int i = 0 ; aux_toolboxes[i].type_name ; i++ ) { - GtkWidget *sub_toolbox = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbox), aux_toolboxes[i].data_name)); - if (tname && !strcmp(tname, aux_toolboxes[i].type_name)) { - gtk_widget_show_now(sub_toolbox); - g_object_set_data(G_OBJECT(toolbox), "shows", sub_toolbox); - } else { - gtk_widget_hide(sub_toolbox); - } - //FIX issue #Inkscape686 - GtkAllocation allocation; - gtk_widget_get_allocation(sub_toolbox, &allocation); - gtk_widget_size_allocate(sub_toolbox, &allocation); - } - //FIX issue #Inkscape125 - GtkAllocation allocation; - gtk_widget_get_allocation(toolbox, &allocation); - gtk_widget_size_allocate(toolbox, &allocation); -} - -void setup_commands_toolbox(GtkWidget *toolbox, SPDesktop *desktop) +void setup_commands_toolbox(Gtk::Bin *toolbox, SPDesktop *desktop) { setupToolboxCommon(toolbox, desktop, "toolbar-commands.ui", "/ui/CommandsToolbar", "/toolbox/small"); } -void update_commands_toolbox(SPDesktop * /*desktop*/, ToolBase * /*eventcontext*/, GtkWidget * /*toolbox*/) +void update_commands_toolbox(SPDesktop * /*desktop*/, ToolBase * /*eventcontext*/, Gtk::Bin * /*toolbox*/) { } -void setup_snap_toolbox(GtkWidget *toolbox, SPDesktop *desktop) +void setup_snap_toolbox(Gtk::Bin *toolbox, SPDesktop *desktop) { Glib::ustring sizePref("/toolbox/secondary"); auto toolBar = Inkscape::UI::Toolbar::SnapToolbar::create(desktop); auto prefs = Inkscape::Preferences::get(); if ( prefs->getBool("/toolbox/icononly", true) ) { - gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS ); + toolBar->set_toolbar_style(Gtk::TOOLBAR_ICONS); } - GtkIconSize toolboxSize = ToolboxFactory::prefToSize(sizePref.c_str()); - gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), static_cast(toolboxSize) ); + auto toolboxSize = ToolboxFactory::prefToSize(sizePref.c_str()); + toolBar->set_icon_size(static_cast(toolboxSize)); - GtkPositionType pos = static_cast(GPOINTER_TO_INT(g_object_get_data( G_OBJECT(toolbox), HANDLE_POS_MARK ))); - auto orientation = ((pos == GTK_POS_LEFT) || (pos == GTK_POS_RIGHT)) ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL; - gtk_orientable_set_orientation (GTK_ORIENTABLE(toolBar), orientation); - gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolBar), TRUE); + auto pos = static_cast(GPOINTER_TO_INT(toolbox->get_data(HANDLE_POS_MARK))); + auto orientation = ((pos == Gtk::POS_LEFT) || (pos == Gtk::POS_RIGHT)) ? Gtk::ORIENTATION_HORIZONTAL : Gtk::ORIENTATION_VERTICAL; + gtk_orientable_set_orientation(GTK_ORIENTABLE(toolBar->gobj()), static_cast(orientation)); + toolBar->set_show_arrow(true); - GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox)); - if ( child ) { - gtk_container_remove( GTK_CONTAINER(toolbox), child ); + auto child = toolbox->get_child(); + if (child) { + gtk_container_remove(GTK_CONTAINER(toolbox->gobj()), child->gobj()); } - gtk_container_add( GTK_CONTAINER(toolbox), toolBar ); + toolbox->add(*toolBar); } -Glib::ustring ToolboxFactory::getToolboxName(GtkWidget* toolbox) +void ToolboxFactory::updateSnapToolbox(SPDesktop *desktop, ToolBase * /*eventcontext*/, Gtk::Bin *toolbox) { - Glib::ustring name; - BarId id = static_cast( GPOINTER_TO_INT(g_object_get_data(G_OBJECT(toolbox), BAR_ID_KEY)) ); - switch(id) { - case BAR_TOOL: - name = "ToolToolbar"; - break; - case BAR_AUX: - name = "AuxToolbar"; - break; - case BAR_COMMANDS: - name = "CommandsToolbar"; - break; - case BAR_SNAP: - name = "SnapToolbar"; - break; - } - - return name; -} - -void ToolboxFactory::updateSnapToolbox(SPDesktop *desktop, ToolBase * /*eventcontext*/, GtkWidget *toolbox) -{ - auto tb = dynamic_cast(Glib::wrap(GTK_TOOLBAR(gtk_bin_get_child(GTK_BIN(toolbox))))); + auto tb = dynamic_cast(toolbox->get_child()); if (!tb) { - std::cerr << "Can't get snap toolbar" << std::endl; return; } Inkscape::UI::Toolbar::SnapToolbar::update(tb); } -void ToolboxFactory::showAuxToolbox(GtkWidget *toolbox_toplevel) -{ - gtk_widget_show(toolbox_toplevel); - GtkWidget *toolbox = gtk_bin_get_child(GTK_BIN(toolbox_toplevel)); - - GtkWidget *shown_toolbox = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbox), "shows")); - if (!shown_toolbox) { - return; - } - gtk_widget_show(toolbox); -} #define MODE_LABEL_WIDTH 70 diff --git a/src/widgets/toolbox.h b/src/widgets/toolbox.h index f3ec74dca14109d9dd0a38f5c60d08ba051efdab..2cf9deae3ecc576db28da9acfc41aa3af1ebb908 100644 --- a/src/widgets/toolbox.h +++ b/src/widgets/toolbox.h @@ -15,7 +15,7 @@ */ #include -#include + #include #include "preferences.h" @@ -24,6 +24,11 @@ class SPDesktop; +namespace Gtk { +class Bin; +class EventBox; +} + namespace Inkscape { namespace UI { namespace Tools { @@ -47,19 +52,14 @@ namespace Widget { class ToolboxFactory { public: - static void setToolboxDesktop(GtkWidget *toolbox, SPDesktop *desktop); - static void setOrientation(GtkWidget* toolbox, GtkOrientation orientation); - static void showAuxToolbox(GtkWidget* toolbox); - - static GtkWidget *createToolToolbox(); - static GtkWidget *createAuxToolbox(); - static GtkWidget *createCommandsToolbox(); - static GtkWidget *createSnapToolbox(); + static void setToolboxDesktop(Gtk::EventBox *toolbox, SPDesktop *desktop); + static void setOrientation(Gtk::EventBox *toolbox, Gtk::Orientation orientation); + static Gtk::EventBox * createToolToolbox(); + static Gtk::EventBox * createCommandsToolbox(); + static Gtk::EventBox * createSnapToolbox(); - static Glib::ustring getToolboxName(GtkWidget* toolbox); - - static void updateSnapToolbox(SPDesktop *desktop, Inkscape::UI::Tools::ToolBase *eventcontext, GtkWidget *toolbox); + static void updateSnapToolbox(SPDesktop *desktop, Inkscape::UI::Tools::ToolBase *eventcontext, Gtk::Bin *toolbox); static GtkIconSize prefToSize(Glib::ustring const &path, int base = 0 ); static Gtk::IconSize prefToSize_mm(Glib::ustring const &path, int base = 0); @@ -67,8 +67,6 @@ public: ToolboxFactory() = delete; }; - - } // namespace UI } // namespace Inkscape