Start setting up the protocol specific set mood menu items

Tue, 07 Apr 2020 01:20:01 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Tue, 07 Apr 2020 01:20:01 -0500
changeset 40384
8f6c0247f9f2
parent 40383
dbc5c2d601ab
child 40385
c3e9a7d14e6f

Start setting up the protocol specific set mood menu items

pidgin/pidginaccountactionsmenu.c file | annotate | diff | comparison | revisions
pidgin/resources/Accounts/actionsmenu.ui file | annotate | diff | comparison | revisions
--- a/pidgin/pidginaccountactionsmenu.c	Tue Apr 07 00:55:43 2020 -0500
+++ b/pidgin/pidginaccountactionsmenu.c	Tue Apr 07 01:20:01 2020 -0500
@@ -33,6 +33,7 @@
 	GtkMenu parent;
 
 	GtkWidget *separator;
+	GtkWidget *set_mood;
 
 	PurpleAccount *account;
 };
@@ -62,6 +63,11 @@
 }
 
 static void
+pidgin_account_actions_menu_set_mood_cb(GtkMenuItem *item, gpointer data) {
+	g_warning("open the mood dialog");
+}
+
+static void
 pidgin_account_actions_menu_action(GtkMenuItem *item, gpointer data) {
 	PurpleProtocolAction *action = (PurpleProtocolAction *)data;
 
@@ -80,7 +86,7 @@
 	PurpleConnection *connection = NULL;
 	PurpleProtocol *protocol = NULL;
 	GList *children = NULL, *l = NULL;
-	gboolean items_added = FALSE;
+	gboolean show_separator = FALSE;
 	gint position = 0;
 
 	g_clear_object(&menu->account);
@@ -106,11 +112,11 @@
 	 */
 	children = gtk_container_get_children(GTK_CONTAINER(menu));
 	for(l = children, position = 0; l != NULL; l = l->next, position++) {
-		/* check if the widget is our separator and if so, bail out of the
+		/* check if the widget is the `set_mood` item and if so, bail out of the
 		 * loop.
 		 */
-		if(l->data == menu->separator) {
-			/* and push position past the separator */
+		if(l->data == menu->set_mood) {
+			/* and push position past the set_mood item */
 			position++;
 
 			break;
@@ -119,6 +125,13 @@
 	g_list_free(children);
 
 	protocol = purple_connection_get_protocol(connection);
+
+	if(PURPLE_PROTOCOL_IMPLEMENTS(protocol, CLIENT, get_moods)) {
+		gtk_widget_show(menu->set_mood);
+
+		show_separator = TRUE;
+	}
+
 	if(PURPLE_PROTOCOL_IMPLEMENTS(protocol, CLIENT, get_actions)) {
 		GtkWidget *item = NULL;
 		GList *actions = NULL, *l = NULL;
@@ -154,14 +167,14 @@
 			gtk_widget_show(item);
 
 			/* since we added an item, make sure items_added is true */
-			items_added = TRUE;
+			show_separator = TRUE;
 		}
 
 		g_list_free(actions);
 	}
 
 	/* if we added any items, make our separator visible. */
-	if(items_added) {
+	if(show_separator) {
 		gtk_widget_show(menu->separator);
 	}
 }
@@ -253,11 +266,15 @@
 
 	gtk_widget_class_bind_template_child(widget_class, PidginAccountActionsMenu,
 	                                     separator);
+	gtk_widget_class_bind_template_child(widget_class, PidginAccountActionsMenu,
+	                                     set_mood);
 
    	gtk_widget_class_bind_template_callback(widget_class,
    	                                        pidgin_account_actions_menu_edit_cb);
    	gtk_widget_class_bind_template_callback(widget_class,
    	                                        pidgin_account_actions_menu_disable_cb);
+   	gtk_widget_class_bind_template_callback(widget_class,
+   	                                        pidgin_account_actions_menu_set_mood_cb);
 }
 
 /******************************************************************************
--- a/pidgin/resources/Accounts/actionsmenu.ui	Tue Apr 07 00:55:43 2020 -0500
+++ b/pidgin/resources/Accounts/actionsmenu.ui	Tue Apr 07 01:20:01 2020 -0500
@@ -43,6 +43,14 @@
       </object>
     </child>
     <child>
+      <object class="GtkMenuItem" id="set_mood">
+        <property name="can_focus">False</property>
+        <property name="label" translatable="yes">Set _Mood...</property>
+        <property name="use_underline">True</property>
+        <signal name="activate" handler="pidgin_account_actions_menu_set_mood_cb" object="PidginAccountActionsMenu" swapped="no"/>
+      </object>
+    </child>
+    <child>
       <object class="GtkSeparatorMenuItem">
         <property name="visible">True</property>
         <property name="can_focus">False</property>

mercurial