Switch XMPP console to GtkMenuButton

Wed, 25 May 2022 23:52:46 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Wed, 25 May 2022 23:52:46 -0500
changeset 41410
3c68dae90dc5
parent 41409
f18c86c63885
child 41411
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.

pidgin/plugins/xmppconsole/console.ui file | annotate | diff | comparison | revisions
pidgin/plugins/xmppconsole/xmppconsole.c file | annotate | diff | comparison | revisions
--- 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);

mercurial