Fri, 26 Aug 2022 00:13:48 -0500
Fix up the roomlist to work in GTK4
Testing Done:
Opened the room list and verified it functioned as intended.
Reviewed at https://reviews.imfreedom.org/r/1648/
| pidgin/gtkroomlist.c | file | annotate | diff | comparison | revisions | |
| pidgin/resources/Roomlist/roomlist.ui | file | annotate | diff | comparison | revisions |
--- a/pidgin/gtkroomlist.c Thu Aug 25 23:25:12 2022 -0500 +++ b/pidgin/gtkroomlist.c Fri Aug 26 00:13:48 2022 -0500 @@ -56,7 +56,7 @@ GtkWidget *join_button; GtkWidget *close_button; - GtkWidget *popover_menu; + GtkWidget *popover; PurpleAccount *account; PurpleRoomlist *roomlist; @@ -297,6 +297,10 @@ case RESPONSE_JOIN: pidgin_roomlist_join(dialog); break; + case GTK_RESPONSE_CLOSE: + case GTK_RESPONSE_DELETE_EVENT: + gtk_window_destroy(GTK_WINDOW(gtk_dialog)); + break; } } @@ -362,29 +366,28 @@ g_clear_object(&room); } -static gboolean -room_click_cb(GtkWidget *tv, GdkEvent *event, gpointer data) { +static void +room_click_cb(G_GNUC_UNUSED GtkGestureClick *self, gint n_press, gdouble x, + gdouble y, gpointer data) +{ PidginRoomlistDialog *dialog = data; - gdouble x, y; - if (!gdk_event_triggers_context_menu((GdkEvent *)event)) - return FALSE; - - gdk_event_get_position(event, &x, &y); + if(n_press != 1) { + return; + } - if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), x, y, NULL, NULL, NULL, NULL)) - return FALSE; + if(!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(dialog->tree), (gint)x, + (gint)y, NULL, NULL, NULL, NULL)) + { + return; + } - gtk_popover_set_pointing_to(GTK_POPOVER(dialog->popover_menu), + gtk_popover_set_pointing_to(GTK_POPOVER(dialog->popover), &(const GdkRectangle){(int)x, (int)y, 0, 0}); - gtk_popover_popup(GTK_POPOVER(dialog->popover_menu)); - - return FALSE; + gtk_popover_popup(GTK_POPOVER(dialog->popover)); } -#define SMALL_SPACE 6 - static gboolean pidgin_roomlist_query_tooltip(GtkWidget *widget, int x, int y, gboolean keyboard_mode, GtkTooltip *tooltip, @@ -492,7 +495,7 @@ gtk_widget_class_bind_template_child(widget_class, PidginRoomlistDialog, stop_button); gtk_widget_class_bind_template_child(widget_class, PidginRoomlistDialog, - popover_menu); + popover); gtk_widget_class_bind_template_callback(widget_class, close_request_cb); gtk_widget_class_bind_template_callback(widget_class, row_activated_cb);
--- a/pidgin/resources/Roomlist/roomlist.ui Thu Aug 25 23:25:12 2022 -0500 +++ b/pidgin/resources/Roomlist/roomlist.ui Fri Aug 26 00:13:48 2022 -0500 @@ -16,179 +16,148 @@ You should have received a copy of the GNU General Public License along with this library; if not, see <https://www.gnu.org/licenses/>. --> - <interface> <requires lib="gtk" version="4.0"/> <requires lib="pidgin" version="3.0"/> + <!-- interface-license-type gplv2 --> + <!-- interface-name Pidgin --> + <!-- interface-description Internet Messenger --> + <!-- interface-copyright Pidgin Developers <devel@pidgin.im> --> <object class="PidginAccountStore" id="accounts"/> <template class="PidginRoomlistDialog" parent="GtkDialog"> <property name="title" translatable="1">Room List</property> - <property name="role">room list</property> - <property name="type-hint">dialog</property> <signal name="close-request" handler="close_request_cb" swapped="no"/> <signal name="response" handler="pidgin_roomlist_response_cb" swapped="no"/> <child internal-child="content_area"> <object class="GtkBox"> <property name="orientation">vertical</property> - <property name="spacing">2</property> + <property name="spacing">12</property> <child> <object class="GtkBox"> - <property name="orientation">vertical</property> - <property name="spacing">12</property> + <property name="spacing">5</property> <child> - <object class="GtkBox"> - <property name="spacing">5</property> - <child> - <object class="GtkLabel" id="label1"> - <property name="halign">start</property> - <property name="label" translatable="1">_Account:</property> - <property name="use-underline">1</property> - <property name="mnemonic-widget">account_widget</property> - <accessibility> - <relation type="label-for" target="account_widget"/> - </accessibility> - </object> - </child> - <child> - <object class="PidginAccountChooser" id="account_widget"> - <property name="hexpand">1</property> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="model">accounts</property> - <property name="active">0</property> - <property name="halign">fill</property> - <signal name="changed" handler="dialog_select_account_cb" object="PidginRoomlistDialog" swapped="no"/> - <accessibility> - <relation type="labelled-by" target="label1"/> - </accessibility> - </object> - </child> + <object class="GtkLabel" id="label1"> + <property name="halign">start</property> + <property name="label" translatable="1">_Account:</property> + <property name="use-underline">1</property> + <property name="mnemonic-widget">account_widget</property> </object> </child> <child> - <object class="GtkScrolledWindow" id="sw"> - <property name="vexpand">1</property> + <object class="PidginAccountChooser" id="account_widget"> + <property name="hexpand">1</property> + <property name="can-focus">1</property> + <property name="model">accounts</property> + <property name="active">0</property> + <property name="halign">fill</property> + <signal name="changed" handler="dialog_select_account_cb" object="PidginRoomlistDialog" swapped="no"/> + <accessibility> + <relation name="labelled-by">label1</relation> + </accessibility> + </object> + </child> + </object> + </child> + <child> + <object class="GtkScrolledWindow" id="sw"> + <property name="vexpand">1</property> + <property name="focusable">1</property> + <property name="min-content-height">250</property> + <property name="child"> + <object class="GtkTreeView" id="tree"> <property name="focusable">1</property> - <property name="shadow-type">in</property> - <property name="min-content-height">250</property> - <property name="valign">fill</property> - <property name="child"> - <object class="GtkTreeView" id="tree"> - <property name="focusable">1</property> - <property name="search-column">1</property> - <signal name="button-press-event" handler="room_click_cb" object="PidginRoomlistDialog" swapped="no"/> - <signal name="query-tooltip" handler="pidgin_roomlist_query_tooltip" object="PidginRoomlistDialog" swapped="no"/> - <signal name="row-activated" handler="row_activated_cb" object="PidginRoomlistDialog" swapped="no"/> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="tree_selection"> - <signal name="changed" handler="selection_changed_cb" object="PidginRoomlistDialog" swapped="no"/> - </object> - </child> + <property name="search-column">1</property> + <signal name="query-tooltip" handler="pidgin_roomlist_query_tooltip" object="PidginRoomlistDialog" swapped="no"/> + <signal name="row-activated" handler="row_activated_cb" object="PidginRoomlistDialog" swapped="no"/> + <child> + <object class="GtkGestureClick"> + <property name="button">3</property> + <signal name="pressed" handler="room_click_cb" object="PidginRoomlistDialog" swapped="no"/> + </object> + </child> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="tree_selection"> + <signal name="changed" handler="selection_changed_cb" object="PidginRoomlistDialog" swapped="no"/> + </object> + </child> + <child> + <object class="GtkPopoverMenu" id="popover"> + <property name="menu-model">popover_menu</property> + </object> + </child> + <child> + <object class="GtkTreeViewColumn"> + <property name="title" translatable="1">Name</property> <child> - <object class="GtkTreeViewColumn"> - <property name="title" translatable="1">Name</property> - <child> - <object class="GtkCellRendererText"/> - <attributes> - <attribute name="markup">1</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn"> - <property name="title" translatable="1">Description</property> - <child> - <object class="GtkCellRendererText"/> - <attributes> - <attribute name="markup">2</attribute> - </attributes> - </child> - </object> + <object class="GtkCellRendererText"/> + <attributes> + <attribute name="markup">1</attribute> + </attributes> </child> </object> - </property> + </child> + <child> + <object class="GtkTreeViewColumn"> + <property name="title" translatable="1">Description</property> + <child> + <object class="GtkCellRendererText"/> + <attributes> + <attribute name="markup">2</attribute> + </attributes> + </child> + </object> + </child> </object> - </child> - <child> - <object class="GtkProgressBar" id="progress" /> - </child> + </property> + </object> + </child> + <child> + <object class="GtkProgressBar" id="progress"> </object> </child> </object> </child> - <child> - <object class="GtkBox"> - <property name="valign">center</property> - <property name="can-focus">False</property> - <child type="action"> - <object class="GtkButton" id="stop_button"> - <property name="label">_Stop</property> - <property name="sensitive">0</property> - <property name="focusable">1</property> - <property name="receives-default">1</property> - <property name="use-underline">1</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child type="action"> - <object class="GtkButton" id="list_button"> - <property name="label" translatable="1">_Get List</property> - <property name="focusable">1</property> - <property name="receives-default">1</property> - <property name="use-underline">1</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child type="action"> - <object class="GtkButton" id="add_button"> - <property name="label" translatable="1">_Add Chat</property> - <property name="sensitive">0</property> - <property name="focusable">1</property> - <property name="receives-default">1</property> - <property name="use-underline">1</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - <child type="action"> - <object class="GtkButton" id="join_button"> - <property name="label" translatable="1">_Join</property> - <property name="sensitive">0</property> - <property name="focusable">1</property> - <property name="receives-default">1</property> - <property name="use-underline">1</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> - </child> - <child type="action"> - <object class="GtkButton" id="close_button"> - <property name="label">_Close</property> - <property name="focusable">1</property> - <property name="receives-default">1</property> - <property name="use-underline">1</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">4</property> - </packing> - </child> + <child type="action"> + <object class="GtkButton" id="stop_button"> + <property name="label">_Stop</property> + <property name="sensitive">0</property> + <property name="focusable">1</property> + <property name="receives-default">1</property> + <property name="use-underline">1</property> + </object> + </child> + <child type="action"> + <object class="GtkButton" id="list_button"> + <property name="label" translatable="1">_Get List</property> + <property name="focusable">1</property> + <property name="receives-default">1</property> + <property name="use-underline">1</property> + </object> + </child> + <child type="action"> + <object class="GtkButton" id="add_button"> + <property name="label" translatable="1">_Add Chat</property> + <property name="sensitive">0</property> + <property name="focusable">1</property> + <property name="receives-default">1</property> + <property name="use-underline">1</property> + </object> + </child> + <child type="action"> + <object class="GtkButton" id="join_button"> + <property name="label" translatable="1">_Join</property> + <property name="sensitive">0</property> + <property name="focusable">1</property> + <property name="receives-default">1</property> + <property name="use-underline">1</property> + </object> + </child> + <child type="action"> + <object class="GtkButton" id="close_button"> + <property name="label">_Close</property> + <property name="focusable">1</property> + <property name="receives-default">1</property> + <property name="use-underline">1</property> </object> </child> <action-widgets> @@ -196,7 +165,7 @@ <action-widget response="1">list_button</action-widget> <action-widget response="2">add_button</action-widget> <action-widget response="3">join_button</action-widget> - <action-widget response="-6">close_button</action-widget> + <action-widget response="-7">close_button</action-widget> </action-widgets> </template> <menu id="popover_menu">