Gtk::Builder::get_widget_derived() Issue on Fedora 33
ahmet öztürk via gtkmm-list <[email protected]> Sat, 14 Nov 2020 16:56:58 +0300
| Newsgroups | gmane.comp.gnome.gtkmm |
|---|---|
| Message-ID | <CAHaNAD=VKUm4u-VaExcmGOBMr1viS16tXGVvoY0vU_As25zS_g@mail.gmail.com> |
Hi all, On Fedora 33, derived widgets does not seem to be constructed properly by Gtk::Builder::get_widget_derived(). The reason I think so is that the overridden methods are not called for these widgets. Apart from that everything seems normal. No error message or anything. I attached a sample code with a very simple case to replicate this problem. on_button_press_event() is never called for the derived widget. I have also noticed that if a dummy instance of the derived widget is created separately (using another constructor) before calling Gkt::Builder::add_from_string(), then the widget created by Builder also works normally. Please note that this may not occur on all distributions. e.g. I know that it does not occur on Arch Linux. Does anybody know if this a Fedora 33 specific issue or is it due to a recent update in Gtkmm that is only affecting Fedora for now? _______________________________________________ gtkmm-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/gtkmm-list
main.cpp
(text/x-c++src, 1.9 KB)
#include <iostream>
#include <gtkmm.h>
class TVDerived : public Gtk::TextView
{
public:
TVDerived() {}
TVDerived( BaseObjectType* obj, const Glib::RefPtr< Gtk::Builder >& )
: Gtk::TextView( obj ) {}
~TVDerived() {}
protected:
bool on_button_press_event( GdkEventButton* event ) override
{
std::cout << "on button press event" << std::endl;
return Gtk::TextView::on_button_press_event( event );
}
};
class ExampleWindow : public Gtk::Window
{
public:
ExampleWindow()
{
set_title( "get_widget_derived() Issue" );
set_default_size( 400, 200 );
const Glib::ustring ui_def =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<interface>\
<object class=\"GtkTextView\" id=\"tvd\">\
<property name=\"visible\">True</property>\
<property name=\"can-focus\">True</property>\
<property name=\"monospace\">True</property>\
</object>\
</interface>";
//TVDerived dummy; // solves the problem when uncommented
auto refBuilder = Gtk::Builder::create();
try
{
refBuilder->add_from_string( ui_def );
}
catch( ... )
{
std::cout << "Glade Error! " << std::endl;
return;
}
refBuilder->get_widget_derived( "tvd", m_TextView );
add( *m_TextView );
show_all_children();
}
virtual ~ExampleWindow() {}
protected:
TVDerived* m_TextView;
};
int main( int argc, char *argv[] )
{
auto app = Gtk::Application::create( argc, argv, "org.gtkmm.example" );
ExampleWindow window;
return app->run(window);
}