pidgin/pidgin

Switch XMPP console to GtkMenuButton

24 months ago, 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);