diff options
Diffstat (limited to 'vcl/unx/gtk3/gtkinst.cxx')
-rw-r--r-- | vcl/unx/gtk3/gtkinst.cxx | 158 |
1 files changed, 99 insertions, 59 deletions
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 8a4ca74f266f..278e21f66a71 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -5588,6 +5588,78 @@ public: } }; +#if GTK_CHECK_VERSION(4, 0, 0) +GtkWidget* find_label_widget(GtkWidget* pContainer) +{ + GtkWidget* pLabel = nullptr; + for (GtkWidget* pChild = gtk_widget_get_first_child(pContainer); + pChild; pChild = gtk_widget_get_next_sibling(pChild)) + { + if (GTK_IS_LABEL(pChild)) + { + pLabel = pChild; + break; + } + else + { + pLabel = find_label_widget(pChild); + if (pLabel) + break; + } + } + return pLabel; +} +#else +GtkWidget* find_label_widget(GtkContainer* pContainer) +{ + GList* pChildren = gtk_container_get_children(pContainer); + + GtkWidget* pChild = nullptr; + for (GList* pCandidate = pChildren; pCandidate; pCandidate = pCandidate->next) + { + if (GTK_IS_LABEL(pCandidate->data)) + { + pChild = GTK_WIDGET(pCandidate->data); + break; + } + else if (GTK_IS_CONTAINER(pCandidate->data)) + { + pChild = find_label_widget(GTK_CONTAINER(pCandidate->data)); + if (pChild) + break; + } + } + g_list_free(pChildren); + + return pChild; +} +#endif + +GtkWidget* get_label_widget(GtkWidget* pButton) +{ +#if !GTK_CHECK_VERSION(4, 0, 0) + GtkWidget* pChild = gtk_bin_get_child(GTK_BIN(pButton)); + + if (GTK_IS_CONTAINER(pChild)) + pChild = find_label_widget(GTK_CONTAINER(pChild)); + else if (!GTK_IS_LABEL(pChild)) + pChild = nullptr; + + return pChild; +#else + return find_label_widget(pButton); +#endif +} + +void set_label_wrap(GtkLabel* pLabel, bool bWrap) +{ +#if GTK_CHECK_VERSION(4, 0, 0) + gtk_label_set_wrap(pLabel, bWrap); +#else + gtk_label_set_line_wrap(pLabel, bWrap); +#endif +} + class GtkInstanceAssistant : public GtkInstanceDialog, public virtual weld::Assistant { private: @@ -5629,11 +5701,7 @@ private: { if (GTK_IS_LABEL(pWidget)) { -#if GTK_CHECK_VERSION(4, 0, 0) - gtk_label_set_wrap(GTK_LABEL(pWidget), true); -#else - gtk_label_set_line_wrap(GTK_LABEL(pWidget), true); -#endif + ::set_label_wrap(GTK_LABEL(pWidget), true); gtk_label_set_width_chars(GTK_LABEL(pWidget), 22); gtk_label_set_max_width_chars(GTK_LABEL(pWidget), 22); } @@ -7716,32 +7784,6 @@ private: m_pMouseEventBox = m_pWidget; } -#if !GTK_CHECK_VERSION(4, 0, 0) - static GtkWidget* find_label_widget(GtkContainer* pContainer) - { - GList* pChildren = gtk_container_get_children(pContainer); - - GtkWidget* pChild = nullptr; - for (GList* pCandidate = pChildren; pCandidate; pCandidate = pCandidate->next) - { - if (GTK_IS_LABEL(pCandidate->data)) - { - pChild = GTK_WIDGET(pCandidate->data); - break; - } - else if (GTK_IS_CONTAINER(pCandidate->data)) - { - pChild = find_label_widget(GTK_CONTAINER(pCandidate->data)); - if (pChild) - break; - } - } - g_list_free(pChildren); - - return pChild; - } -#endif - // See: https://developer.gnome.org/Buttons/ void use_custom_content(VirtualDevice* pDevice) { @@ -7775,23 +7817,6 @@ private: GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } -protected: - GtkWidget* get_label_widget() - { -#if !GTK_CHECK_VERSION(4, 0, 0) - GtkWidget* pChild = gtk_bin_get_child(GTK_BIN(m_pButton)); - - if (GTK_IS_CONTAINER(pChild)) - pChild = find_label_widget(GTK_CONTAINER(pChild)); - else if (!GTK_IS_LABEL(pChild)) - pChild = nullptr; - - return pChild; -#else - return nullptr; -#endif - } - public: GtkInstanceButton(GtkButton* pButton, GtkInstanceBuilder* pBuilder, bool bTakeOwnership) : GtkInstanceWidget(GTK_WIDGET(pButton), pBuilder, bTakeOwnership) @@ -7867,20 +7892,10 @@ public: return ::get_label(m_pButton); } - virtual void set_label_wrap(bool wrap) override - { - GtkWidget* pChild = get_label_widget(); -#if GTK_CHECK_VERSION(4, 0, 0) - gtk_label_set_wrap(GTK_LABEL(pChild), wrap); -#else - gtk_label_set_line_wrap(GTK_LABEL(pChild), wrap); -#endif - } - virtual void set_font(const vcl::Font& rFont) override { m_xFont.reset(new vcl::Font(rFont)); - GtkWidget* pChild = get_label_widget(); + GtkWidget* pChild = ::get_label_widget(GTK_WIDGET(m_pButton)); ::set_font(GTK_LABEL(pChild), rFont); } @@ -9880,6 +9895,31 @@ public: #endif } + virtual void set_label(const OUString& rText) override + { +#if GTK_CHECK_VERSION(4, 0, 0) + gtk_check_button_set_label(m_pCheckButton, MapToGtkAccelerator(rText).getStr()); +#else + ::set_label(GTK_BUTTON(m_pCheckButton), rText); +#endif + } + + virtual OUString get_label() const override + { +#if GTK_CHECK_VERSION(4, 0, 0) + const gchar* pStr = gtk_check_button_get_label(m_pCheckButton); + return OUString(pStr, pStr ? strlen(pStr) : 0, RTL_TEXTENCODING_UTF8); +#else + return ::get_label(GTK_BUTTON(m_pCheckButton)); +#endif + } + + virtual void set_label_wrap(bool bWrap) override + { + GtkWidget* pChild = ::get_label_widget(GTK_WIDGET(m_pCheckButton)); + ::set_label_wrap(GTK_LABEL(pChild), bWrap); + } + virtual void disable_notify_events() override { g_signal_handler_block(m_pCheckButton, m_nSignalId); |