[Libreoffice-commits] core.git: 2 commits - vcl/unx
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Wed Jul 7 07:28:38 UTC 2021
vcl/unx/gtk3/gtkinst.cxx | 106 ++++++++++++++++++++++++++++++++---------------
1 file changed, 74 insertions(+), 32 deletions(-)
New commits:
commit c1328995c100e61c940c4c848b1e4416a2931fe6
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Tue Jul 6 17:23:40 2021 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Wed Jul 7 09:28:19 2021 +0200
gtk4: use state-flags-changed for toolbar GtkMenuButton toggling
Change-Id: I71b6a3e2e99b52be0c51987f097a3487bf83fac8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118526
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index ac36df0374ac..2f3c9f8da9bd 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -10720,10 +10720,14 @@ private:
// left in the main document and not in the toolbar
#if !GTK_CHECK_VERSION(4, 0, 0)
gtk_button_set_focus_on_click(GTK_BUTTON(pMenuButton), false);
+ g_signal_connect(pMenuButton, "toggled", G_CALLBACK(signalItemToggled), this);
#else
gtk_widget_set_focus_on_click(GTK_WIDGET(pMenuButton), false);
+
+ GtkWidget* pToggleButton = gtk_widget_get_first_child(GTK_WIDGET(pMenuButton));
+ assert(GTK_IS_TOGGLE_BUTTON(pToggleButton));
+ g_signal_connect(pToggleButton, "state-flags-changed", G_CALLBACK(signalItemFlagsChanged), this);
#endif
- g_signal_connect(pMenuButton, "toggled", G_CALLBACK(signalItemToggled), this);
// by default the GtkMenuButton down arrow button is as wide as
// a normal button and LibreOffice's original ones are very
@@ -10779,6 +10783,7 @@ private:
signal_clicked(::get_buildable_id(GTK_BUILDABLE(pItem)));
}
+#if !GTK_CHECK_VERSION(4, 0, 0)
static void signalItemToggled(GtkToggleButton* pItem, gpointer widget)
{
GtkInstanceToolbar* pThis = static_cast<GtkInstanceToolbar*>(widget);
@@ -10797,6 +10802,30 @@ private:
}
}
}
+#else
+ static void signalItemFlagsChanged(GtkToggleButton* pItem, GtkStateFlags flags, gpointer widget)
+ {
+ GtkInstanceToolbar* pThis = static_cast<GtkInstanceToolbar*>(widget);
+ bool bOldChecked = flags & GTK_STATE_FLAG_CHECKED;
+ bool bNewChecked = gtk_widget_get_state_flags(GTK_WIDGET(pItem)) & GTK_STATE_FLAG_CHECKED;
+ if (bOldChecked == bNewChecked)
+ return;
+ SolarMutexGuard aGuard;
+ pThis->signal_item_toggled(pItem);
+ }
+
+ void signal_item_toggled(GtkToggleButton* pItem)
+ {
+ for (auto& a : m_aMenuButtonMap)
+ {
+ if (a.second->getWidget() == gtk_widget_get_parent(GTK_WIDGET(pItem)))
+ {
+ signal_toggle_menu(a.first);
+ break;
+ }
+ }
+ }
+#endif
#if !GTK_CHECK_VERSION(4, 0, 0)
static void set_item_image(GtkToolButton* pItem, const css::uno::Reference<css::graphic::XGraphic>& rIcon)
@@ -10939,10 +10968,6 @@ public:
#if !GTK_CHECK_VERSION(4, 0, 0)
if (GTK_IS_TOGGLE_TOOL_BUTTON(pToolButton))
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(pToolButton), bActive);
-#else
- if (GTK_IS_TOGGLE_BUTTON(pToolButton))
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pToolButton), bActive);
-#endif
else
{
GtkButton* pButton = nullptr;
@@ -10957,6 +10982,20 @@ public:
gtk_widget_set_state_flags(GTK_WIDGET(pButton), static_cast<GtkStateFlags>(eState), true);
}
}
+#else
+ GtkWidget* pWidget;
+ if (GTK_IS_MENU_BUTTON(pToolButton))
+ {
+ pWidget = gtk_widget_get_first_child(pToolButton);
+ assert(GTK_IS_TOGGLE_BUTTON(pWidget));
+ }
+ else
+ pWidget = pToolButton;
+ auto eState = gtk_widget_get_state_flags(pWidget) & ~GTK_STATE_FLAG_CHECKED;
+ if (bActive)
+ eState |= GTK_STATE_FLAG_CHECKED;
+ gtk_widget_set_state_flags(pWidget, static_cast<GtkStateFlags>(eState), true);
+#endif
enable_item_notify_events();
}
@@ -10968,10 +11007,6 @@ public:
#if !GTK_CHECK_VERSION(4, 0, 0)
if (GTK_IS_TOGGLE_TOOL_BUTTON(pToolButton))
return gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(pToolButton));
-#else
- if (GTK_IS_TOGGLE_BUTTON(pToolButton))
- return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pToolButton));
-#endif
else
{
GtkButton* pButton = nullptr;
@@ -10983,6 +11018,17 @@ public:
return gtk_widget_get_state_flags(GTK_WIDGET(pButton)) & GTK_STATE_FLAG_CHECKED;
}
}
+#else
+ GtkWidget* pWidget;
+ if (GTK_IS_MENU_BUTTON(pToolButton))
+ {
+ pWidget = gtk_widget_get_first_child(pToolButton);
+ assert(GTK_IS_TOGGLE_BUTTON(pWidget));
+ }
+ else
+ pWidget = pToolButton;
+ return gtk_widget_get_state_flags(pWidget) & GTK_STATE_FLAG_CHECKED;
+#endif
return false;
}
commit d1640dfa88652aef9cc9b85b68f34626b592c569
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Tue Jul 6 17:09:09 2021 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Wed Jul 7 09:28:03 2021 +0200
pMenuButton check against null inside pMenuButton check against null
and there's no possibility it changed since the first check
Change-Id: Ic32f9ef3c4659178792a35c87f13ee21b1d54228
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118524
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 4503a161cb52..ac36df0374ac 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -10725,32 +10725,28 @@ private:
#endif
g_signal_connect(pMenuButton, "toggled", G_CALLBACK(signalItemToggled), this);
- if (pMenuButton)
+ // by default the GtkMenuButton down arrow button is as wide as
+ // a normal button and LibreOffice's original ones are very
+ // narrow, that assumption is fairly baked into the toolbar and
+ // sidebar designs, try and minimize the width of the dropdown
+ // zone.
+ GtkStyleContext *pButtonContext = gtk_widget_get_style_context(GTK_WIDGET(pMenuButton));
+
+ if (!m_pMenuButtonProvider)
{
- // by default the GtkMenuButton down arrow button is as wide as
- // a normal button and LibreOffice's original ones are very
- // narrow, that assumption is fairly baked into the toolbar and
- // sidebar designs, try and minimize the width of the dropdown
- // zone.
- GtkStyleContext *pButtonContext = gtk_widget_get_style_context(GTK_WIDGET(pMenuButton));
-
- if (!m_pMenuButtonProvider)
- {
- m_pMenuButtonProvider = gtk_css_provider_new();
- static const gchar data[] = "* { "
- "padding: 0;"
- "margin-left: 0px;"
- "margin-right: 0px;"
- "min-width: 4px;"
- "}";
- css_provider_load_from_data(m_pMenuButtonProvider, data, -1);
- }
-
- gtk_style_context_add_provider(pButtonContext,
- GTK_STYLE_PROVIDER(m_pMenuButtonProvider),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ m_pMenuButtonProvider = gtk_css_provider_new();
+ static const gchar data[] = "* { "
+ "padding: 0;"
+ "margin-left: 0px;"
+ "margin-right: 0px;"
+ "min-width: 4px;"
+ "}";
+ css_provider_load_from_data(m_pMenuButtonProvider, data, -1);
}
+ gtk_style_context_add_provider(pButtonContext,
+ GTK_STYLE_PROVIDER(m_pMenuButtonProvider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
}
#if !GTK_CHECK_VERSION(4, 0, 0)
if (!GTK_IS_TOOL_BUTTON(pToolItem))
More information about the Libreoffice-commits
mailing list