diff --git a/dw/fltkplatform.cc b/dw/fltkplatform.cc index dd872a5..d532c7d 100644 --- a/dw/fltkplatform.cc +++ b/dw/fltkplatform.cc @@ -390,11 +390,10 @@ FltkPlatform::FltkResourceFactory::createLabelButtonResource (const char } core::ui::ComplexButtonResource * -FltkPlatform::FltkResourceFactory::createComplexButtonResource (core::Widget - *widget, +FltkPlatform::FltkResourceFactory::createComplexButtonResource (std::unique_ptr< core::Widget > widget, bool relief) { - return new ui::FltkComplexButtonResource (platform, widget, relief); + return new ui::FltkComplexButtonResource (platform, std::move( widget ), relief); } core::ui::ListResource * diff --git a/dw/fltkplatform.hh b/dw/fltkplatform.hh index 6395594..0e79031 100644 --- a/dw/fltkplatform.hh +++ b/dw/fltkplatform.hh @@ -104,7 +104,7 @@ private: core::ui::LabelButtonResource *createLabelButtonResource (const char *label); core::ui::ComplexButtonResource * - createComplexButtonResource (core::Widget *widget, bool relief); + createComplexButtonResource (std::unique_ptr< core::Widget > widget, bool relief); core::ui::ListResource * createListResource (core::ui::ListResource::SelectionMode selectionMode, int rows); diff --git a/dw/fltkui.cc b/dw/fltkui.cc index c8baa44..2b987e5 100644 --- a/dw/fltkui.cc +++ b/dw/fltkui.cc @@ -726,16 +726,14 @@ void FltkLabelButtonResource::setLabel (const char *label) // ---------------------------------------------------------------------- FltkComplexButtonResource::FltkComplexButtonResource (FltkPlatform *platform, - dw::core::Widget - *widget, bool relief): + std::unique_ptr< dw::core::Widget > widget, + bool relief): FltkSpecificResource (platform) { flatView = topView = NULL; this->relief = relief; FltkResource::init (platform); - std::unique_ptr< dw::core::Widget > widget_unique; - widget_unique.reset( widget ); - ComplexButtonResource::init (std::move( widget_unique )); + ComplexButtonResource::init (std::move( widget )); } FltkComplexButtonResource::~FltkComplexButtonResource () diff --git a/dw/fltkui.hh b/dw/fltkui.hh index e416683..df8613d 100644 --- a/dw/fltkui.hh +++ b/dw/fltkui.hh @@ -284,7 +284,7 @@ protected: Fl_Widget *createNewWidget (core::Allocation *allocation); public: - FltkComplexButtonResource (FltkPlatform *platform, dw::core::Widget *widget, + FltkComplexButtonResource (FltkPlatform *platform, std::unique_ptr< dw::core::Widget > widget, bool relief); ~FltkComplexButtonResource (); }; diff --git a/dw/ui.hh b/dw/ui.hh index bae84ca..09856d8 100644 --- a/dw/ui.hh +++ b/dw/ui.hh @@ -582,7 +582,7 @@ class ResourceFactory: public lout::object::Object public: virtual LabelButtonResource *createLabelButtonResource (const char *label) = 0; - virtual ComplexButtonResource *createComplexButtonResource (Widget *widget, + virtual ComplexButtonResource *createComplexButtonResource (std::unique_ptr< Widget > widget, bool relief) = 0; virtual ListResource *createListResource (ListResource::SelectionMode diff --git a/src/form.cc b/src/form.cc index f26bb5f..bdb8452 100644 --- a/src/form.cc +++ b/src/form.cc @@ -960,10 +960,12 @@ void Html_tag_open_button(DilloHtml *html, const char *tag, int tagsize) * but it caused 100% CPU usage. */ page = new Textblock (false, true); + std::unique_ptr< Widget > page_unique; + page_unique.reset( page ); page->setStyle (html->backgroundStyle ()); ResourceFactory *factory = HT2LT(html)->getResourceFactory(); - Resource *resource = factory->createComplexButtonResource(page, true); + Resource *resource = factory->createComplexButtonResource(std::move( page_unique ), true); embed = new Embed(resource); // a_Dw_button_set_sensitive (DW_BUTTON (button), FALSE); @@ -2043,10 +2045,12 @@ static Embed *Html_input_image(DilloHtml *html, const char *tag, int tagsize) // widget. Notice that the order of the casts matters, because // of multiple inheritance. dw::Image *dwi = (dw::Image*)(dw::core::ImgRenderer*)Image->img_rndr; + std::unique_ptr< dw::core::Widget > dwi_unique; + dwi_unique.reset( dwi ); dwi->setStyle (html->backgroundStyle ()); ResourceFactory *factory = HT2LT(html)->getResourceFactory(); ComplexButtonResource *complex_b_r = - factory->createComplexButtonResource(dwi, false); + factory->createComplexButtonResource(std::move( dwi_unique ), false); button = new Embed(complex_b_r); HT2TB(html)->addWidget (button, html->style ()); }