Convert privacy combo box to the new drop down

Mon, 05 Sep 2022 20:24:04 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Mon, 05 Sep 2022 20:24:04 -0500
changeset 41643
f7af70658fe5
parent 41642
eaf836c5f87b
child 41644
974d440d7fd3

Convert privacy combo box to the new drop down

Also set the content area to expand vertically.

Testing Done:
Opened privacy dialog, changed setting around and saw that the list of specific contacts came up depending on the option chosen. The add/remove buttons also became enabled as expected.

Reviewed at https://reviews.imfreedom.org/r/1716/

pidgin/gtkprivacy.c file | annotate | diff | comparison | revisions
pidgin/resources/Privacy/dialog.ui file | annotate | diff | comparison | revisions
--- a/pidgin/gtkprivacy.c	Mon Sep 05 20:22:34 2022 -0500
+++ b/pidgin/gtkprivacy.c	Mon Sep 05 20:24:04 2022 -0500
@@ -144,7 +144,7 @@
 
 	for (i = 0; i < menu_entry_count; i++) {
 		if (menu_entries[i].type == purple_account_get_privacy_type(account)) {
-			gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->type_menu), i);
+			gtk_drop_down_set_selected(GTK_DROP_DOWN(dialog->type_menu), i);
 			break;
 		}
 	}
@@ -158,10 +158,10 @@
  *       Even better: the privacy API needs to not suck.
  */
 static void
-type_changed_cb(GtkComboBox *combo, PidginPrivacyDialog *dialog)
-{
+type_changed_cb(GObject *obj, G_GNUC_UNUSED GParamSpec *pspec, gpointer data) {
+	PidginPrivacyDialog *dialog = data;
 	PurpleAccountPrivacyType new_type =
-		menu_entries[gtk_combo_box_get_active(combo)].type;
+		menu_entries[gtk_drop_down_get_selected(GTK_DROP_DOWN(obj))].type;
 	gboolean buttons_sensitive;
 
 	purple_account_set_privacy_type(dialog->account, new_type);
@@ -301,8 +301,8 @@
 static void
 pidgin_privacy_dialog_init(PidginPrivacyDialog *dialog) {
 	PidginAccountChooser *chooser = NULL;
-	gssize selected = -1;
-	gsize i;
+	GtkStringList *model = NULL;
+	guint selected = GTK_INVALID_LIST_POSITION;
 
 	gtk_widget_init_template(GTK_WIDGET(dialog));
 
@@ -310,20 +310,21 @@
 	dialog->account = pidgin_account_chooser_get_selected(chooser);
 
 	/* Add the drop-down list with the allow/block types. */
-	for (i = 0; i < menu_entry_count; i++) {
-		gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(dialog->type_menu),
-		                          _(menu_entries[i].text));
+	model = GTK_STRING_LIST(gtk_drop_down_get_model(GTK_DROP_DOWN(dialog->type_menu)));
+	for (guint i = 0; i < menu_entry_count; i++) {
+		gtk_string_list_append(model, _(menu_entries[i].text));
 
-		if (menu_entries[i].type == purple_account_get_privacy_type(dialog->account))
-			selected = (gssize)i;
+		if (menu_entries[i].type == purple_account_get_privacy_type(dialog->account)) {
+			selected = i;
+		}
 	}
-	gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->type_menu), selected);
+	gtk_drop_down_set_selected(GTK_DROP_DOWN(dialog->type_menu), selected);
 
 	/* Rebuild the allow and block lists views. */
 	rebuild_allow_list(dialog);
 	rebuild_block_list(dialog);
 
-	type_changed_cb(GTK_COMBO_BOX(dialog->type_menu), dialog);
+	type_changed_cb(G_OBJECT(dialog->type_menu), NULL, dialog);
 }
 
 void
--- a/pidgin/resources/Privacy/dialog.ui	Mon Sep 05 20:22:34 2022 -0500
+++ b/pidgin/resources/Privacy/dialog.ui	Mon Sep 05 20:24:04 2022 -0500
@@ -44,6 +44,7 @@
       <object class="GtkBox">
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
+        <property name="vexpand">1</property>
         <child>
           <object class="GtkLabel">
             <property name="valign">center</property>
@@ -76,8 +77,12 @@
           </object>
         </child>
         <child>
-          <object class="GtkComboBoxText" id="type_menu">
-            <signal name="changed" handler="type_changed_cb" object="PidginPrivacyDialog" swapped="no"/>
+          <object class="GtkDropDown" id="type_menu">
+            <property name="model">
+              <object class="GtkStringList">
+              </object>
+            </property>
+            <signal name="notify::selected" handler="type_changed_cb" object="PidginPrivacyDialog" swapped="no"/>
           </object>
         </child>
         <child>

mercurial