diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 16:29:01 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 16:29:01 +0000 |
commit | 35a96bde514a8897f6f0fcc41c5833bf63df2e2a (patch) | |
tree | 657d15a03cc46bd099fc2c6546a7a4ad43815d9f /src/ui/view/view-widget.cpp | |
parent | Initial commit. (diff) | |
download | inkscape-35a96bde514a8897f6f0fcc41c5833bf63df2e2a.tar.xz inkscape-35a96bde514a8897f6f0fcc41c5833bf63df2e2a.zip |
Adding upstream version 1.0.2.upstream/1.0.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/ui/view/view-widget.cpp')
-rw-r--r-- | src/ui/view/view-widget.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/ui/view/view-widget.cpp b/src/ui/view/view-widget.cpp new file mode 100644 index 0000000..ce9745d --- /dev/null +++ b/src/ui/view/view-widget.cpp @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Authors: + * Lauris Kaplinski <lauris@kaplinski.com> + * Ralf Stephan <ralf@ark.in-berlin.de> + * + * Copyright (C) 2001-2002 Lauris Kaplinski + * Copyright (C) 2001 Ximian, Inc. + * + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#include "view.h" +#include "view-widget.h" + +//using namespace Inkscape::UI::View; + +// SPViewWidget +static void sp_view_widget_dispose(GObject *object); + +G_DEFINE_TYPE(SPViewWidget, sp_view_widget, GTK_TYPE_EVENT_BOX); + +/** + * Callback to initialize the SPViewWidget vtable. + */ +static void sp_view_widget_class_init(SPViewWidgetClass *vwc) +{ + GObjectClass *object_class = G_OBJECT_CLASS(vwc); + + object_class->dispose = sp_view_widget_dispose; +} + +/** + * Callback to initialize the SPViewWidget. + */ +static void sp_view_widget_init(SPViewWidget *vw) +{ + vw->view = nullptr; +} + +/** + * Callback to disconnect from view and destroy SPViewWidget. + * + * Apparently, this gets only called when a desktop is closed, but then twice! + */ +static void sp_view_widget_dispose(GObject *object) +{ + SPViewWidget *vw = SP_VIEW_WIDGET(object); + + if (vw->view) { + vw->view->close(); + Inkscape::GC::release(vw->view); + vw->view = nullptr; + } + + if (G_OBJECT_CLASS(sp_view_widget_parent_class)->dispose) { + G_OBJECT_CLASS(sp_view_widget_parent_class)->dispose(object); + } + + Inkscape::GC::request_early_collection(); +} + +void sp_view_widget_set_view(SPViewWidget *vw, Inkscape::UI::View::View *view) +{ + g_return_if_fail(vw != nullptr); + g_return_if_fail(SP_IS_VIEW_WIDGET(vw)); + g_return_if_fail(view != nullptr); + + g_return_if_fail(vw->view == nullptr); + + vw->view = view; + Inkscape::GC::anchor(view); + + if (((SPViewWidgetClass *) G_OBJECT_GET_CLASS(vw))->set_view) { + ((SPViewWidgetClass *) G_OBJECT_GET_CLASS(vw))->set_view(vw, view); + } +} + +bool sp_view_widget_shutdown(SPViewWidget *vw) +{ + g_return_val_if_fail(vw != nullptr, TRUE); + g_return_val_if_fail(SP_IS_VIEW_WIDGET(vw), TRUE); + + if (((SPViewWidgetClass *) G_OBJECT_GET_CLASS(vw))->shutdown) { + return ((SPViewWidgetClass *) G_OBJECT_GET_CLASS(vw))->shutdown(vw); + } + + return FALSE; +} + + + +/* + 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 : |