diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-05-26 17:41:38 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2021-05-26 21:50:21 +0200 |
commit | ca242dfefa03016a9b0f675cb91b4605ce80875d (patch) | |
tree | 1b877c5ae9cce61b24ff3a7bc252415ed8c5d01c | |
parent | 7768abbf86731a1105fcebe7c2557cb9ac5ba86a (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.hxx | 5 | ||||
-rw-r--r-- | vcl/unx/gtk3/fpicker/SalGtkPicker.cxx | 2 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtkframe.cxx | 4 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtkinst.cxx | 42 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtkobject.cxx | 2 | ||||
-rw-r--r-- | vcl/unx/gtk3/salnativewidgets-gtk.cxx | 6 |
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); |