Wed, 25 May 2022 23:52:46 -0500
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"><iq/></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"><iq/></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"><presence/></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"><presence/></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"><message/></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"><message/></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);