[Libreoffice-commits] core.git: vcl/unx
Noel Grandin (via logerrit)
logerrit at kemper.freedesktop.org
Fri Jul 26 14:02:30 UTC 2019
vcl/unx/gtk3/gtk3gtkinst.cxx | 74 ++++++++++++++++++++++++-------------------
1 file changed, 42 insertions(+), 32 deletions(-)
New commits:
commit cba5cd06c8ffd8628ae3d39efe715a5d8b3ac7e7
Author: Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Fri Jul 26 12:49:10 2019 +0200
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Fri Jul 26 16:01:31 2019 +0200
add some error checking to the UI file loading
so we error out early when we have a bug in the file name, or a bug in
the id, instead of triggering a SIGSEGV much later on
Change-Id: Iacde09df620acdd8ae86321d38e8ce0c99715d42
Reviewed-on: https://gerrit.libreoffice.org/76375
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index af20ca70ca06..a472537c2bfd 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -10433,7 +10433,9 @@ public:
osl::FileBase::getSystemPathFromFileURL(aUri, aPath);
m_pBuilder = gtk_builder_new();
m_nNotifySignalId = g_signal_connect_data(G_OBJECT(m_pBuilder), "notify", G_CALLBACK(signalNotify), this, nullptr, G_CONNECT_AFTER);
- gtk_builder_add_from_file(m_pBuilder, OUStringToOString(aPath, RTL_TEXTENCODING_UTF8).getStr(), nullptr);
+ auto rc = gtk_builder_add_from_file(m_pBuilder, OUStringToOString(aPath, RTL_TEXTENCODING_UTF8).getStr(), nullptr);
+ assert(rc && "could not load UI file");
+ (void) rc;
m_pObjectList = gtk_builder_get_objects(m_pBuilder);
g_slist_foreach(m_pObjectList, postprocess, this);
@@ -10486,9 +10488,17 @@ public:
gtk_container_add(GTK_CONTAINER(m_pParentWidget), pWidget);
}
+ static GObject* builder_get_object(GtkBuilder* pBuilder, const OString &id)
+ {
+ auto pObject = gtk_builder_get_object(pBuilder, id.getStr());
+ SAL_WARN_IF(!pObject, "vcl.gtk", "could not load object '" << id << "' from UI file");
+ assert(pObject && "could not load GTK object");
+ return pObject;
+ }
+
virtual std::unique_ptr<weld::MessageDialog> weld_message_dialog(const OString &id, bool bTakeOwnership) override
{
- GtkMessageDialog* pMessageDialog = GTK_MESSAGE_DIALOG(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkMessageDialog* pMessageDialog = GTK_MESSAGE_DIALOG(builder_get_object(m_pBuilder, id));
if (!pMessageDialog)
return nullptr;
gtk_window_set_transient_for(GTK_WINDOW(pMessageDialog), GTK_WINDOW(gtk_widget_get_toplevel(m_pParentWidget)));
@@ -10497,7 +10507,7 @@ public:
virtual std::unique_ptr<weld::AboutDialog> weld_about_dialog(const OString &id, bool bTakeOwnership) override
{
- GtkAboutDialog* pAboutDialog = GTK_ABOUT_DIALOG(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkAboutDialog* pAboutDialog = GTK_ABOUT_DIALOG(builder_get_object(m_pBuilder, id));
if (!pAboutDialog)
return nullptr;
gtk_window_set_transient_for(GTK_WINDOW(pAboutDialog), GTK_WINDOW(gtk_widget_get_toplevel(m_pParentWidget)));
@@ -10506,7 +10516,7 @@ public:
virtual std::unique_ptr<weld::Dialog> weld_dialog(const OString &id, bool bTakeOwnership) override
{
- GtkDialog* pDialog = GTK_DIALOG(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkDialog* pDialog = GTK_DIALOG(builder_get_object(m_pBuilder, id));
if (!pDialog)
return nullptr;
if (m_pParentWidget)
@@ -10516,13 +10526,13 @@ public:
virtual std::unique_ptr<weld::Window> weld_window(const OString &id, bool bTakeOwnership) override
{
- GtkWindow* pWindow = GTK_WINDOW(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkWindow* pWindow = GTK_WINDOW(builder_get_object(m_pBuilder, id));
return pWindow ? std::make_unique<GtkInstanceWindow>(pWindow, this, bTakeOwnership) : nullptr;
}
virtual std::unique_ptr<weld::Widget> weld_widget(const OString &id, bool bTakeOwnership) override
{
- GtkWidget* pWidget = GTK_WIDGET(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkWidget* pWidget = GTK_WIDGET(builder_get_object(m_pBuilder, id));
if (!pWidget)
return nullptr;
auto_add_parentless_widgets_to_container(pWidget);
@@ -10531,7 +10541,7 @@ public:
virtual std::unique_ptr<weld::Container> weld_container(const OString &id, bool bTakeOwnership) override
{
- GtkContainer* pContainer = GTK_CONTAINER(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkContainer* pContainer = GTK_CONTAINER(builder_get_object(m_pBuilder, id));
if (!pContainer)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pContainer));
@@ -10540,7 +10550,7 @@ public:
virtual std::unique_ptr<weld::Frame> weld_frame(const OString &id, bool bTakeOwnership) override
{
- GtkFrame* pFrame = GTK_FRAME(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkFrame* pFrame = GTK_FRAME(builder_get_object(m_pBuilder, id));
if (!pFrame)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pFrame));
@@ -10549,7 +10559,7 @@ public:
virtual std::unique_ptr<weld::ScrolledWindow> weld_scrolled_window(const OString &id, bool bTakeOwnership) override
{
- GtkScrolledWindow* pScrolledWindow = GTK_SCROLLED_WINDOW(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkScrolledWindow* pScrolledWindow = GTK_SCROLLED_WINDOW(builder_get_object(m_pBuilder, id));
if (!pScrolledWindow)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pScrolledWindow));
@@ -10558,7 +10568,7 @@ public:
virtual std::unique_ptr<weld::Notebook> weld_notebook(const OString &id, bool bTakeOwnership) override
{
- GtkNotebook* pNotebook = GTK_NOTEBOOK(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkNotebook* pNotebook = GTK_NOTEBOOK(builder_get_object(m_pBuilder, id));
if (!pNotebook)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pNotebook));
@@ -10567,7 +10577,7 @@ public:
virtual std::unique_ptr<weld::Button> weld_button(const OString &id, bool bTakeOwnership) override
{
- GtkButton* pButton = GTK_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkButton* pButton = GTK_BUTTON(builder_get_object(m_pBuilder, id));
if (!pButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pButton));
@@ -10576,7 +10586,7 @@ public:
virtual std::unique_ptr<weld::MenuButton> weld_menu_button(const OString &id, bool bTakeOwnership) override
{
- GtkMenuButton* pButton = GTK_MENU_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkMenuButton* pButton = GTK_MENU_BUTTON(builder_get_object(m_pBuilder, id));
if (!pButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pButton));
@@ -10585,7 +10595,7 @@ public:
virtual std::unique_ptr<weld::LinkButton> weld_link_button(const OString &id, bool bTakeOwnership) override
{
- GtkLinkButton* pButton = GTK_LINK_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkLinkButton* pButton = GTK_LINK_BUTTON(builder_get_object(m_pBuilder, id));
if (!pButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pButton));
@@ -10594,7 +10604,7 @@ public:
virtual std::unique_ptr<weld::ToggleButton> weld_toggle_button(const OString &id, bool bTakeOwnership) override
{
- GtkToggleButton* pToggleButton = GTK_TOGGLE_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkToggleButton* pToggleButton = GTK_TOGGLE_BUTTON(builder_get_object(m_pBuilder, id));
if (!pToggleButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pToggleButton));
@@ -10603,7 +10613,7 @@ public:
virtual std::unique_ptr<weld::RadioButton> weld_radio_button(const OString &id, bool bTakeOwnership) override
{
- GtkRadioButton* pRadioButton = GTK_RADIO_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkRadioButton* pRadioButton = GTK_RADIO_BUTTON(builder_get_object(m_pBuilder, id));
if (!pRadioButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pRadioButton));
@@ -10612,7 +10622,7 @@ public:
virtual std::unique_ptr<weld::CheckButton> weld_check_button(const OString &id, bool bTakeOwnership) override
{
- GtkCheckButton* pCheckButton = GTK_CHECK_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkCheckButton* pCheckButton = GTK_CHECK_BUTTON(builder_get_object(m_pBuilder, id));
if (!pCheckButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pCheckButton));
@@ -10621,7 +10631,7 @@ public:
virtual std::unique_ptr<weld::Scale> weld_scale(const OString &id, bool bTakeOwnership) override
{
- GtkScale* pScale = GTK_SCALE(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkScale* pScale = GTK_SCALE(builder_get_object(m_pBuilder, id));
if (!pScale)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pScale));
@@ -10630,7 +10640,7 @@ public:
virtual std::unique_ptr<weld::ProgressBar> weld_progress_bar(const OString &id, bool bTakeOwnership) override
{
- GtkProgressBar* pProgressBar = GTK_PROGRESS_BAR(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkProgressBar* pProgressBar = GTK_PROGRESS_BAR(builder_get_object(m_pBuilder, id));
if (!pProgressBar)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pProgressBar));
@@ -10639,7 +10649,7 @@ public:
virtual std::unique_ptr<weld::Spinner> weld_spinner(const OString &id, bool bTakeOwnership) override
{
- GtkSpinner* pSpinner = GTK_SPINNER(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkSpinner* pSpinner = GTK_SPINNER(builder_get_object(m_pBuilder, id));
if (!pSpinner)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pSpinner));
@@ -10648,7 +10658,7 @@ public:
virtual std::unique_ptr<weld::Image> weld_image(const OString &id, bool bTakeOwnership) override
{
- GtkImage* pImage = GTK_IMAGE(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkImage* pImage = GTK_IMAGE(builder_get_object(m_pBuilder, id));
if (!pImage)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pImage));
@@ -10657,7 +10667,7 @@ public:
virtual std::unique_ptr<weld::Calendar> weld_calendar(const OString &id, bool bTakeOwnership) override
{
- GtkCalendar* pCalendar = GTK_CALENDAR(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkCalendar* pCalendar = GTK_CALENDAR(builder_get_object(m_pBuilder, id));
if (!pCalendar)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pCalendar));
@@ -10666,7 +10676,7 @@ public:
virtual std::unique_ptr<weld::Entry> weld_entry(const OString &id, bool bTakeOwnership) override
{
- GtkEntry* pEntry = GTK_ENTRY(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkEntry* pEntry = GTK_ENTRY(builder_get_object(m_pBuilder, id));
if (!pEntry)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pEntry));
@@ -10675,7 +10685,7 @@ public:
virtual std::unique_ptr<weld::SpinButton> weld_spin_button(const OString &id, bool bTakeOwnership) override
{
- GtkSpinButton* pSpinButton = GTK_SPIN_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkSpinButton* pSpinButton = GTK_SPIN_BUTTON(builder_get_object(m_pBuilder, id));
if (!pSpinButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pSpinButton));
@@ -10690,7 +10700,7 @@ public:
virtual std::unique_ptr<weld::FormattedSpinButton> weld_formatted_spin_button(const OString &id, bool bTakeOwnership) override
{
- GtkSpinButton* pSpinButton = GTK_SPIN_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkSpinButton* pSpinButton = GTK_SPIN_BUTTON(builder_get_object(m_pBuilder, id));
if (!pSpinButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pSpinButton));
@@ -10705,7 +10715,7 @@ public:
virtual std::unique_ptr<weld::ComboBox> weld_combo_box(const OString &id, bool bTakeOwnership) override
{
- GtkComboBox* pComboBox = GTK_COMBO_BOX(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkComboBox* pComboBox = GTK_COMBO_BOX(builder_get_object(m_pBuilder, id));
if (!pComboBox)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pComboBox));
@@ -10714,7 +10724,7 @@ public:
virtual std::unique_ptr<weld::TreeView> weld_tree_view(const OString &id, bool bTakeOwnership) override
{
- GtkTreeView* pTreeView = GTK_TREE_VIEW(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkTreeView* pTreeView = GTK_TREE_VIEW(builder_get_object(m_pBuilder, id));
if (!pTreeView)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pTreeView));
@@ -10734,7 +10744,7 @@ public:
virtual std::unique_ptr<weld::Label> weld_label(const OString &id, bool bTakeOwnership) override
{
- GtkLabel* pLabel = GTK_LABEL(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkLabel* pLabel = GTK_LABEL(builder_get_object(m_pBuilder, id));
if (!pLabel)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pLabel));
@@ -10743,7 +10753,7 @@ public:
virtual std::unique_ptr<weld::TextView> weld_text_view(const OString &id, bool bTakeOwnership) override
{
- GtkTextView* pTextView = GTK_TEXT_VIEW(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkTextView* pTextView = GTK_TEXT_VIEW(builder_get_object(m_pBuilder, id));
if (!pTextView)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pTextView));
@@ -10752,7 +10762,7 @@ public:
virtual std::unique_ptr<weld::Expander> weld_expander(const OString &id, bool bTakeOwnership) override
{
- GtkExpander* pExpander = GTK_EXPANDER(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkExpander* pExpander = GTK_EXPANDER(builder_get_object(m_pBuilder, id));
if (!pExpander)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pExpander));
@@ -10762,7 +10772,7 @@ public:
virtual std::unique_ptr<weld::DrawingArea> weld_drawing_area(const OString &id, const a11yref& rA11y,
FactoryFunction /*pUITestFactoryFunction*/, void* /*pUserData*/, bool bTakeOwnership) override
{
- GtkDrawingArea* pDrawingArea = GTK_DRAWING_AREA(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkDrawingArea* pDrawingArea = GTK_DRAWING_AREA(builder_get_object(m_pBuilder, id));
if (!pDrawingArea)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pDrawingArea));
@@ -10771,7 +10781,7 @@ public:
virtual std::unique_ptr<weld::Menu> weld_menu(const OString &id, bool bTakeOwnership) override
{
- GtkMenu* pMenu = GTK_MENU(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkMenu* pMenu = GTK_MENU(builder_get_object(m_pBuilder, id));
if (!pMenu)
return nullptr;
return std::make_unique<GtkInstanceMenu>(pMenu, bTakeOwnership);
@@ -10779,7 +10789,7 @@ public:
virtual std::unique_ptr<weld::Toolbar> weld_toolbar(const OString &id, bool bTakeOwnership) override
{
- GtkToolbar* pToolbar = GTK_TOOLBAR(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ GtkToolbar* pToolbar = GTK_TOOLBAR(builder_get_object(m_pBuilder, id));
if (!pToolbar)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pToolbar));
More information about the Libreoffice-commits
mailing list