summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2021-05-26 17:41:38 +0100
committerCaolán McNamara <caolanm@redhat.com>2021-05-26 21:50:21 +0200
commitca242dfefa03016a9b0f675cb91b4605ce80875d (patch)
tree1b877c5ae9cce61b24ff3a7bc252415ed8c5d01c
parent7768abbf86731a1105fcebe7c2557cb9ac5ba86a (diff)
gtk[3|4] gtk_widget_get_root returns null when no root
unlike gtk_widget_get_toplevel which returns itself if that is the case Change-Id: If977440265bd8ae2c892ee5d52091ebf16ad03cf Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116218 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--vcl/inc/unx/gtk/gtkdata.hxx5
-rw-r--r--vcl/unx/gtk3/fpicker/SalGtkPicker.cxx2
-rw-r--r--vcl/unx/gtk3/gtkframe.cxx4
-rw-r--r--vcl/unx/gtk3/gtkinst.cxx42
-rw-r--r--vcl/unx/gtk3/gtkobject.cxx2
-rw-r--r--vcl/unx/gtk3/salnativewidgets-gtk.cxx6
6 files changed, 31 insertions, 30 deletions
diff --git a/vcl/inc/unx/gtk/gtkdata.hxx b/vcl/inc/unx/gtk/gtkdata.hxx
index b343021d3d30..5b37adaed263 100644
--- a/vcl/inc/unx/gtk/gtkdata.hxx
+++ b/vcl/inc/unx/gtk/gtkdata.hxx
@@ -73,10 +73,11 @@ inline void css_provider_load_from_data(GtkCssProvider *css_provider,
#endif
}
-inline GtkWidget* widget_get_root(GtkWidget* pWidget)
+inline GtkWidget* widget_get_toplevel(GtkWidget* pWidget)
{
#if GTK_CHECK_VERSION(4, 0, 0)
- return pWidget ? GTK_WIDGET(gtk_widget_get_root(pWidget)) : nullptr;
+ GtkRoot* pRoot = gtk_widget_get_root(pWidget);
+ return pRoot ? GTK_WIDGET(pRoot) : pWidget;
#else
return gtk_widget_get_toplevel(pWidget);
#endif
diff --git a/vcl/unx/gtk3/fpicker/SalGtkPicker.cxx b/vcl/unx/gtk3/fpicker/SalGtkPicker.cxx
index 41ff066a0c55..a14582bc2b20 100644
--- a/vcl/unx/gtk3/fpicker/SalGtkPicker.cxx
+++ b/vcl/unx/gtk3/fpicker/SalGtkPicker.cxx
@@ -101,7 +101,7 @@ GtkWindow* RunDialog::GetTransientFor()
GtkSalFrame *pFrame = dynamic_cast<GtkSalFrame*>(pWindow->ImplGetFrame());
if (!pFrame)
return nullptr;
- return GTK_WINDOW(widget_get_root(pFrame->getWindow()));
+ return GTK_WINDOW(widget_get_toplevel(pFrame->getWindow()));
}
RunDialog::RunDialog(GtkWidget *pDialog, const uno::Reference<awt::XExtendedToolkit>& rToolkit,
diff --git a/vcl/unx/gtk3/gtkframe.cxx b/vcl/unx/gtk3/gtkframe.cxx
index 3a4a0abed28c..ba3fcf4e7615 100644
--- a/vcl/unx/gtk3/gtkframe.cxx
+++ b/vcl/unx/gtk3/gtkframe.cxx
@@ -1259,7 +1259,7 @@ void GtkSalFrame::Init( SalFrame* pParent, SalFrameStyleFlags nStyle )
{
if (m_pParent)
{
- GtkWidget* pTopLevel = widget_get_root(m_pParent->m_pWindow);
+ GtkWidget* pTopLevel = widget_get_toplevel(m_pParent->m_pWindow);
#if !GTK_CHECK_VERSION(4,0,0)
if (!isChild())
gtk_window_set_screen(GTK_WINDOW(m_pWindow), gtk_widget_get_screen(pTopLevel));
@@ -3671,7 +3671,7 @@ void GtkSalFrame::signalSetFocus(GtkWindow*, GtkWidget* pWidget, gpointer frame)
else
pGrabWidget = GTK_WIDGET(pThis->m_pDrawingArea);
- GtkWidget* pTopLevel = widget_get_root(pGrabWidget);
+ GtkWidget* pTopLevel = widget_get_toplevel(pGrabWidget);
// see commentary in GtkSalObjectWidgetClip::Show
if (pTopLevel && g_object_get_data(G_OBJECT(pTopLevel), "g-lo-BlockFocusChange"))
return;
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index c03da186f0af..406a0d0aa11b 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -2256,7 +2256,7 @@ protected:
void signal_focus_in()
{
- GtkWidget* pTopLevel = widget_get_root(m_pWidget);
+ GtkWidget* pTopLevel = widget_get_toplevel(m_pWidget);
// see commentary in GtkSalObjectWidgetClip::Show
if (pTopLevel && g_object_get_data(G_OBJECT(pTopLevel), "g-lo-BlockFocusChange"))
return;
@@ -2306,7 +2306,7 @@ protected:
void signal_focus_out()
{
- GtkWidget* pTopLevel = widget_get_root(m_pWidget);
+ GtkWidget* pTopLevel = widget_get_toplevel(m_pWidget);
// see commentary in GtkSalObjectWidgetClip::Show
if (pTopLevel && g_object_get_data(G_OBJECT(pTopLevel), "g-lo-BlockFocusChange"))
return;
@@ -2940,7 +2940,7 @@ public:
virtual bool is_active() const override
{
- GtkWindow* pTopLevel = GTK_WINDOW(widget_get_root(m_pWidget));
+ GtkWindow* pTopLevel = GTK_WINDOW(widget_get_toplevel(m_pWidget));
return pTopLevel && gtk_window_is_active(pTopLevel) && has_focus();
}
@@ -3334,7 +3334,7 @@ public:
GtkWindow* getWindow()
{
- return GTK_WINDOW(widget_get_root(m_pWidget));
+ return GTK_WINDOW(widget_get_toplevel(m_pWidget));
}
#if GTK_CHECK_VERSION(4, 0, 0)
@@ -4667,7 +4667,7 @@ namespace
#if !GTK_CHECK_VERSION(4, 0, 0)
void do_collect_screenshot_data(GtkWidget* pItem, gpointer data)
{
- GtkWidget* pTopLevel = widget_get_root(pItem);
+ GtkWidget* pTopLevel = widget_get_toplevel(pItem);
gtk_coord x, y;
gtk_widget_translate_coordinates(pItem, pTopLevel, 0, 0, &x, &y);
@@ -8423,7 +8423,7 @@ void do_ungrab(GtkWidget* pWidget)
GtkPositionType show_menu_older_gtk(GtkWidget* pMenuButton, GtkWindow* pMenu)
{
//place the toplevel just below its launcher button
- GtkWidget* pToplevel = widget_get_root(pMenuButton);
+ GtkWidget* pToplevel = widget_get_toplevel(pMenuButton);
gtk_coord x, y, absx, absy;
gtk_widget_translate_coordinates(pMenuButton, pToplevel, 0, 0, &x, &y);
GdkSurface* pWindow = widget_get_surface(pToplevel);
@@ -8522,7 +8522,7 @@ bool show_menu_newer_gtk(GtkWidget* pComboBox, GtkWindow* pMenu)
#endif
//place the toplevel just below its launcher button
- GtkWidget* pToplevel = widget_get_root(pComboBox);
+ GtkWidget* pToplevel = widget_get_toplevel(pComboBox);
gtk_coord x, y;
gtk_widget_translate_coordinates(pComboBox, pToplevel, 0, 0, &x, &y);
@@ -8563,7 +8563,7 @@ GtkPositionType show_menu(GtkWidget* pMenuButton, GtkWindow* pMenu)
// the same top level parent. The problem is that since gtk 3.24 tooltips are also
// implemented as popups, which means that we cannot show any popup if there is a
// visible tooltip.
- GtkWidget* pParent = widget_get_root(pMenuButton);
+ GtkWidget* pParent = widget_get_toplevel(pMenuButton);
GtkSalFrame* pFrame = pParent ? GtkSalFrame::getFromWindow(pParent) : nullptr;
if (pFrame)
{
@@ -8632,7 +8632,7 @@ private:
gtk_widget_set_size_request(GTK_WIDGET(m_pMenuHack), -1, -1);
// undo show_menu tooltip blocking
- GtkWidget* pParent = widget_get_root(GTK_WIDGET(m_pMenuButton));
+ GtkWidget* pParent = widget_get_toplevel(GTK_WIDGET(m_pMenuButton));
GtkSalFrame* pFrame = pParent ? GtkSalFrame::getFromWindow(pParent) : nullptr;
if (pFrame)
pFrame->UnblockTooltip();
@@ -9974,7 +9974,7 @@ public:
if (gtk_widget_has_focus(m_pWidget))
return true;
- GtkWidget* pTopLevel = widget_get_root(m_pWidget);
+ GtkWidget* pTopLevel = widget_get_toplevel(m_pWidget);
if (!GTK_IS_WINDOW(pTopLevel))
return false;
GtkWidget* pFocus = gtk_window_get_focus(GTK_WINDOW(pTopLevel));
@@ -16122,7 +16122,7 @@ private:
tree_view_set_cursor(m_nPrePopupCursorPos);
// undo show_menu tooltip blocking
- GtkWidget* pParent = widget_get_root(m_pToggleButton);
+ GtkWidget* pParent = widget_get_toplevel(m_pToggleButton);
GtkSalFrame* pFrame = pParent ? GtkSalFrame::getFromWindow(pParent) : nullptr;
if (pFrame)
pFrame->UnblockTooltip();
@@ -16318,7 +16318,7 @@ private:
bool combobox_activate()
{
GtkWidget *pComboBox = GTK_WIDGET(m_pToggleButton);
- GtkWidget *pToplevel = widget_get_root(pComboBox);
+ GtkWidget *pToplevel = widget_get_toplevel(pComboBox);
GtkWindow *pWindow = GTK_WINDOW(pToplevel);
if (!pWindow)
return false;
@@ -18107,7 +18107,7 @@ private:
#if !GTK_CHECK_VERSION(4, 0, 0)
if (gtk_expander_get_resize_toplevel(pExpander))
{
- GtkWidget *pToplevel = widget_get_root(GTK_WIDGET(pExpander));
+ GtkWidget *pToplevel = widget_get_toplevel(GTK_WIDGET(pExpander));
// https://gitlab.gnome.org/GNOME/gtk/issues/70
// I imagine at some point a release with a fix will be available in which
@@ -19148,7 +19148,7 @@ private:
{
assert(!m_bAllowCycleFocusOut); // we only expect this to be called when this holds
- GtkWidget* pTopLevel = widget_get_root(m_pParentWidget);
+ GtkWidget* pTopLevel = widget_get_toplevel(m_pParentWidget);
assert(pTopLevel);
GtkSalFrame* pFrame = GtkSalFrame::getFromWindow(pTopLevel);
assert(pFrame);
@@ -19169,7 +19169,7 @@ private:
{
assert(!m_bAllowCycleFocusOut); // we only expect this to be called when this holds
- GtkWidget* pTopLevel = widget_get_root(m_pParentWidget);
+ GtkWidget* pTopLevel = widget_get_toplevel(m_pParentWidget);
assert(pTopLevel);
GtkSalFrame* pFrame = GtkSalFrame::getFromWindow(pTopLevel);
assert(pFrame);
@@ -19297,7 +19297,7 @@ public:
//gtk impl emulate this by doing this implicitly at weld time
void auto_add_parentless_widgets_to_container(GtkWidget* pWidget)
{
- if (widget_get_root(pWidget) == pWidget && !GTK_IS_POPOVER(pWidget) && !GTK_IS_WINDOW(pWidget))
+ if (widget_get_toplevel(pWidget) == pWidget && !GTK_IS_POPOVER(pWidget) && !GTK_IS_WINDOW(pWidget))
{
#if GTK_CHECK_VERSION(4, 0, 0)
gtk_widget_set_parent(pWidget, m_pParentWidget);
@@ -19312,7 +19312,7 @@ public:
GtkMessageDialog* pMessageDialog = GTK_MESSAGE_DIALOG(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pMessageDialog)
return nullptr;
- gtk_window_set_transient_for(GTK_WINDOW(pMessageDialog), GTK_WINDOW(widget_get_root(m_pParentWidget)));
+ gtk_window_set_transient_for(GTK_WINDOW(pMessageDialog), GTK_WINDOW(widget_get_toplevel(m_pParentWidget)));
return std::make_unique<GtkInstanceMessageDialog>(pMessageDialog, this, true);
}
@@ -19322,7 +19322,7 @@ public:
if (!pAssistant)
return nullptr;
if (m_pParentWidget)
- gtk_window_set_transient_for(GTK_WINDOW(pAssistant), GTK_WINDOW(widget_get_root(m_pParentWidget)));
+ gtk_window_set_transient_for(GTK_WINDOW(pAssistant), GTK_WINDOW(widget_get_toplevel(m_pParentWidget)));
return std::make_unique<GtkInstanceAssistant>(pAssistant, this, true);
}
@@ -19332,7 +19332,7 @@ public:
if (!pDialog)
return nullptr;
if (m_pParentWidget)
- gtk_window_set_transient_for(pDialog, GTK_WINDOW(widget_get_root(m_pParentWidget)));
+ gtk_window_set_transient_for(pDialog, GTK_WINDOW(widget_get_toplevel(m_pParentWidget)));
return std::make_unique<GtkInstanceDialog>(pDialog, this, true);
}
@@ -19371,7 +19371,7 @@ public:
}
if (m_pParentWidget)
- gtk_window_set_transient_for(pDialog, GTK_WINDOW(widget_get_root(m_pParentWidget)));
+ gtk_window_set_transient_for(pDialog, GTK_WINDOW(widget_get_toplevel(m_pParentWidget)));
return std::make_unique<GtkInstanceDialog>(pDialog, this, true);
#else
return nullptr;
@@ -19986,7 +19986,7 @@ weld::Window* GtkInstance::GetFrameWeld(const css::uno::Reference<css::awt::XWin
weld::Window* GtkSalFrame::GetFrameWeld() const
{
if (!m_xFrameWeld)
- m_xFrameWeld.reset(new GtkInstanceWindow(GTK_WINDOW(widget_get_root(getWindow())), nullptr, false));
+ m_xFrameWeld.reset(new GtkInstanceWindow(GTK_WINDOW(widget_get_toplevel(getWindow())), nullptr, false));
return m_xFrameWeld.get();
}
diff --git a/vcl/unx/gtk3/gtkobject.cxx b/vcl/unx/gtk3/gtkobject.cxx
index c4807dff539b..fbe5a7c39a75 100644
--- a/vcl/unx/gtk3/gtkobject.cxx
+++ b/vcl/unx/gtk3/gtkobject.cxx
@@ -499,7 +499,7 @@ void GtkSalObjectWidgetClip::Show( bool bVisible )
// cursor in a sidebar comment and scroll the page so the comment is invisible, we want the focus
// to stay in the invisible widget, so its there when we scroll back or on a keypress the widget
// gets the keystroke and scrolls back to make it visible again
- GtkWidget* pTopLevel = widget_get_root(m_pScrolledWindow);
+ GtkWidget* pTopLevel = widget_get_toplevel(m_pScrolledWindow);
GtkWidget* pOldFocus = GTK_IS_WINDOW(pTopLevel) ? gtk_window_get_focus(GTK_WINDOW(pTopLevel)) : nullptr;
g_object_set_data(G_OBJECT(pTopLevel), "g-lo-BlockFocusChange", GINT_TO_POINTER(true) );
diff --git a/vcl/unx/gtk3/salnativewidgets-gtk.cxx b/vcl/unx/gtk3/salnativewidgets-gtk.cxx
index fc4ddb0617e0..852aa7ed3774 100644
--- a/vcl/unx/gtk3/salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk3/salnativewidgets-gtk.cxx
@@ -1065,7 +1065,7 @@ GtkStyleContext* GtkSalGraphics::makeContext(GtkWidgetPath *pPath, GtkStyleConte
gtk_style_context_set_path(context, pPath);
if (pParent == nullptr)
{
- GtkWidget* pTopLevel = widget_get_root(mpWindow);
+ GtkWidget* pTopLevel = widget_get_toplevel(mpWindow);
GtkStyleContext* pStyle = gtk_widget_get_style_context(pTopLevel);
gtk_style_context_set_parent(context, pStyle);
gtk_style_context_set_scale (context, gtk_style_context_get_scale (pStyle));
@@ -1748,7 +1748,7 @@ bool GtkSalGraphics::drawNativeControl( ControlType nType, ControlPart nPart, co
renderType = RenderType::TabItem;
break;
case ControlType::WindowBackground:
- context = gtk_widget_get_style_context(widget_get_root(mpWindow));
+ context = gtk_widget_get_style_context(widget_get_toplevel(mpWindow));
break;
case ControlType::Frame:
{
@@ -2289,7 +2289,7 @@ vcl::Font pango_to_vcl(const PangoFontDescription* font, const css::lang::Locale
bool GtkSalGraphics::updateSettings(AllSettings& rSettings)
{
- GtkWidget* pTopLevel = widget_get_root(mpWindow);
+ GtkWidget* pTopLevel = widget_get_toplevel(mpWindow);
GtkStyleContext* pStyle = gtk_widget_get_style_context(pTopLevel);
StyleContextSave aContextState;
aContextState.save(pStyle);