pidgin/pidgin

Switch XMPP console to GtkMenuButton

2022-05-25, Elliott Sales de Andrade
3c68dae90dc5
Parents f18c86c63885
Children c2969c67490e
Switch XMPP console to GtkMenuButton

This understands Popover children, and takes care of tracking all the
visibility state. It's also Popover-aware enough for GTK4 as well.
--- a/pidgin/plugins/xmppconsole/console.ui Wed May 25 23:52:45 2022 -0500
+++ b/pidgin/plugins/xmppconsole/console.ui Wed May 25 23:52:46 2022 -0500
@@ -167,11 +167,17 @@
<property name="can_focus">False</property>
<property name="toolbar_style">text</property>
<child>
- <object class="GtkToggleToolButton" id="iq">
+ <object class="GtkToolItem">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label">&lt;iq/&gt;</property>
- <signal name="toggled" handler="toggle_button_toggled_cb" object="iq.popover" swapped="no"/>
+ <child>
+ <object class="GtkMenuButton">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">&lt;iq/&gt;</property>
+ <property name="popover">iq.popover</property>
+ </object>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -179,11 +185,17 @@
</packing>
</child>
<child>
- <object class="GtkToggleToolButton" id="presence">
+ <object class="GtkToolItem">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label">&lt;presence/&gt;</property>
- <signal name="toggled" handler="toggle_button_toggled_cb" object="presence.popover" swapped="no"/>
+ <child>
+ <object class="GtkMenuButton">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">&lt;presence/&gt;</property>
+ <property name="popover">presence.popover</property>
+ </object>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -191,11 +203,17 @@
</packing>
</child>
<child>
- <object class="GtkToggleToolButton" id="message">
+ <object class="GtkToolItem">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label">&lt;message/&gt;</property>
- <signal name="toggled" handler="toggle_button_toggled_cb" object="message.popover" swapped="no"/>
+ <child>
+ <object class="GtkMenuButton">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">&lt;message/&gt;</property>
+ <property name="popover">message.popover</property>
+ </object>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -235,9 +253,7 @@
</template>
<object class="GtkPopover" id="iq.popover">
<property name="can_focus">False</property>
- <property name="relative_to">iq</property>
<property name="position">right</property>
- <signal name="closed" handler="popover_closed_cb" object="iq" swapped="no"/>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
@@ -314,9 +330,7 @@
</object>
<object class="GtkPopover" id="message.popover">
<property name="can_focus">False</property>
- <property name="relative_to">message</property>
<property name="position">right</property>
- <signal name="closed" handler="popover_closed_cb" object="message" swapped="no"/>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
@@ -465,9 +479,7 @@
</object>
<object class="GtkPopover" id="presence.popover">
<property name="can_focus">False</property>
- <property name="relative_to">presence</property>
<property name="position">right</property>
- <signal name="closed" handler="popover_closed_cb" object="presence" swapped="no"/>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
--- a/pidgin/plugins/xmppconsole/xmppconsole.c Wed May 25 23:52:45 2022 -0500
+++ b/pidgin/plugins/xmppconsole/xmppconsole.c Wed May 25 23:52:46 2022 -0500
@@ -329,22 +329,6 @@
}
static void
-popover_closed_cb(GtkPopover *popover, gpointer data)
-{
- GtkToggleToolButton *button = GTK_TOGGLE_TOOL_BUTTON(data);
-
- gtk_toggle_tool_button_set_active(button, FALSE);
-}
-
-static void
-toggle_button_toggled_cb(GtkToolButton *button, gpointer data)
-{
- GtkPopover *popover = GTK_POPOVER(data);
-
- gtk_popover_popup(popover);
-}
-
-static void
iq_clicked_cb(GtkWidget *w, gpointer data)
{
PidginXmppConsole *console = data;
@@ -526,10 +510,6 @@
gtk_widget_class_bind_template_child(widget_class, PidginXmppConsole,
tags.xmlns);
- gtk_widget_class_bind_template_callback(widget_class,
- toggle_button_toggled_cb);
- gtk_widget_class_bind_template_callback(widget_class, popover_closed_cb);
-
/* Popover for <iq/> button. */
gtk_widget_class_bind_template_child(widget_class, PidginXmppConsole,
iq.popover);