# HG changeset patch
# Node ID c323bb1908d7
# Parent  0fb3b0e7122f
diff --git a/pidgin/gtkblist.c b/pidgin/gtkblist.c
--- a/pidgin/gtkblist.c
+++ b/pidgin/gtkblist.c
@@ -641,10 +641,10 @@ static void gtk_blist_renderer_editing_c
 	pidgin_blist_refresh(list);
 }
 
-static void gtk_blist_renderer_editing_started_cb(GtkCellRenderer *renderer,
-		GtkCellEditable *editable,
-		gchar *path_str,
-		gpointer user_data)
+static void
+gtk_blist_renderer_editing_started_cb(G_GNUC_UNUSED GtkCellRenderer *renderer,
+                                      GtkCellEditable *editable,
+                                      gchar *path_str, gpointer user_data)
 {
 	PidginBuddyList *gtkblist = PIDGIN_BUDDY_LIST(user_data);
 	GtkTreeIter iter;
@@ -785,8 +785,9 @@ gtk_blist_auto_personize(PurpleBlistNode
 		g_list_free(merges);
 }
 
-static void gtk_blist_renderer_edited_cb(GtkCellRendererText *text_rend, char *arg1,
-					 char *arg2, PurpleBuddyList *list)
+static void
+gtk_blist_renderer_edited_cb(G_GNUC_UNUSED GtkCellRendererText *text_rend,
+                             char *arg1, char *arg2, PurpleBuddyList *list)
 {
 	PidginBuddyList *gtkblist = PIDGIN_BUDDY_LIST(list);
 	GtkTreeIter iter;
@@ -904,7 +905,8 @@ do_joinchat(GtkWidget *dialog, int id, P
  * strings are empty then don't allow the user to click on "OK."
  */
 static void
-set_sensitive_if_input_chat_cb(GtkWidget *entry, gpointer user_data)
+set_sensitive_if_input_chat_cb(G_GNUC_UNUSED GtkWidget *entry,
+                               gpointer user_data)
 {
 	PurpleProtocol *protocol;
 	PurpleConnection *gc;
@@ -984,9 +986,10 @@ pidgin_blist_joinchat_is_showable(void)
 
 static void
 make_blist_request_dialog(PidginBlistRequestData *data, PurpleAccount *account,
-	const char *title, const char *window_role, const char *label_text,
-	GCallback callback_func, GtkCustomFilterFunc filter_func,
-	GCallback response_cb)
+                          const char *title, const char *label_text,
+                          GCallback callback_func,
+                          GtkCustomFilterFunc filter_func,
+                          GCallback response_cb)
 {
 	GtkWidget *label;
 	GtkWidget *img;
@@ -1183,7 +1186,7 @@ pidgin_blist_joinchat_show(void)
 	data = g_new0(PidginChatData, 1);
 
 	make_blist_request_dialog((PidginBlistRequestData *)data, NULL,
-		_("Join a Chat"), "join_chat",
+		_("Join a Chat"),
 		_("Please enter the appropriate information about the chat "
 			"you would like to join.\n"),
 		G_CALLBACK(chat_select_account_cb),
@@ -1204,7 +1207,9 @@ pidgin_blist_joinchat_show(void)
 	gtk_widget_show(data->rq_data.window);
 }
 
-static void gtk_blist_row_expanded_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data)
+static void
+gtk_blist_row_expanded_cb(G_GNUC_UNUSED GtkTreeView *tv, GtkTreeIter *iter,
+                          G_GNUC_UNUSED GtkTreePath *path, gpointer user_data)
 {
 	PidginBuddyList *gtkblist = PIDGIN_BUDDY_LIST(user_data);
 	PurpleBlistNode *node;
@@ -1227,7 +1232,9 @@ static void gtk_blist_row_expanded_cb(Gt
 	}
 }
 
-static void gtk_blist_row_collapsed_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data)
+static void
+gtk_blist_row_collapsed_cb(G_GNUC_UNUSED GtkTreeView *tv, GtkTreeIter *iter,
+                           G_GNUC_UNUSED GtkTreePath *path, gpointer user_data)
 {
 	PidginBuddyList *gtkblist = PIDGIN_BUDDY_LIST(user_data);
 	PurpleBlistNode *node;
@@ -1264,7 +1271,10 @@ static void gtk_blist_row_collapsed_cb(G
 	}
 }
 
-static void gtk_blist_row_activated_cb(GtkTreeView *tv, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) {
+static void
+gtk_blist_row_activated_cb(G_GNUC_UNUSED GtkTreeView *tv, GtkTreePath *path,
+                           G_GNUC_UNUSED GtkTreeViewColumn *col, gpointer data)
+{
 	PidginBuddyList *gtkblist = PIDGIN_BUDDY_LIST(data);
 	PurpleBlistNode *node;
 	GtkTreeIter iter;
@@ -1311,7 +1321,8 @@ scroll_to_expanded_cell(gpointer data)
 }
 
 static void
-pidgin_blist_expand_contact_cb(GtkWidget *w, PurpleBlistNode *node)
+pidgin_blist_expand_contact_cb(G_GNUC_UNUSED GtkWidget *w,
+                               PurpleBlistNode *node)
 {
 	PidginBlistNode *gtknode;
 	GtkTreeIter iter, parent;
@@ -1347,7 +1358,8 @@ pidgin_blist_expand_contact_cb(GtkWidget
 }
 
 static void
-pidgin_blist_collapse_contact_cb(GtkWidget *w, PurpleBlistNode *node)
+pidgin_blist_collapse_contact_cb(G_GNUC_UNUSED GtkWidget *w,
+                                 PurpleBlistNode *node)
 {
 	PurpleBlistNode *bnode;
 	PidginBlistNode *gtknode;
@@ -2476,7 +2488,8 @@ static char *pidgin_get_tooltip_text(Pur
 
 static GHashTable *cached_emblems;
 
-static void _cleanup_cached_emblem(gpointer data, GObject *obj) {
+static void
+_cleanup_cached_emblem(gpointer data, G_GNUC_UNUSED GObject *obj) {
 	g_hash_table_remove(cached_emblems, data);
 }
 
@@ -2778,7 +2791,7 @@ static void pidgin_blist_hide_node(Purpl
 
 static void
 conversation_updated_cb(PurpleConversation *conv, PurpleConversationUpdateType type,
-                        PidginBuddyList *gtkblist)
+                        G_GNUC_UNUSED PidginBuddyList *gtkblist)
 {
 	PurpleAccount *account = purple_conversation_get_account(conv);
 
@@ -2807,7 +2820,8 @@ conversation_deleted_update_ui_cb(Purple
 }
 
 static void
-conversation_created_cb(PurpleConversation *conv, PidginBuddyList *gtkblist)
+conversation_created_cb(PurpleConversation *conv,
+                        G_GNUC_UNUSED PidginBuddyList *gtkblist)
 {
 	PurpleAccount *account = purple_conversation_get_account(conv);
 
@@ -2854,7 +2868,9 @@ pidgin_blist_node_free(PidginBlistNode *
 }
 
 static void
-pidgin_blist_new_node(PurpleBuddyList *list, PurpleBlistNode *node) {
+pidgin_blist_new_node(G_GNUC_UNUSED PurpleBuddyList *list,
+                      PurpleBlistNode *node)
+{
 	PidginBlistNode *pidgin_node = NULL;
 
 	pidgin_node = g_new0(PidginBlistNode, 1);
@@ -2897,8 +2913,10 @@ pidgin_blist_setup_sort_methods(void)
 	pidgin_blist_sort_method_set(id);
 }
 
-static void _prefs_change_sort_method(const char *pref_name, PurplePrefType type,
-									  gconstpointer val, gpointer data)
+static void
+_prefs_change_sort_method(const char *pref_name,
+                          G_GNUC_UNUSED PurplePrefType type, gconstpointer val,
+                          G_GNUC_UNUSED gpointer data)
 {
 	if(purple_strequal(pref_name, PIDGIN_PREFS_ROOT "/blist/sort_type"))
 		pidgin_blist_sort_method_set(val);
@@ -3285,7 +3303,9 @@ static gboolean do_selection_changed(Pur
 	return FALSE;
 }
 
-static void pidgin_blist_selection_changed(GtkTreeSelection *selection, gpointer data)
+static void
+pidgin_blist_selection_changed(GtkTreeSelection *selection,
+                               G_GNUC_UNUSED gpointer data)
 {
 	PurpleBlistNode *new_selection = NULL;
 	GtkTreeIter iter;
@@ -3568,7 +3588,9 @@ static void pidgin_blist_update_contact(
 
 
 
-static void pidgin_blist_update_buddy(PurpleBuddyList *list, PurpleBlistNode *node, gboolean status_change)
+static void
+pidgin_blist_update_buddy(PurpleBuddyList *list, PurpleBlistNode *node,
+                          G_GNUC_UNUSED gboolean status_change)
 {
 	PurpleBuddy *buddy;
 	PidginBlistNode *gtkparentnode;
@@ -3691,7 +3713,8 @@ static void pidgin_blist_update(PurpleBu
 	}
 }
 
-static void pidgin_blist_set_visible(PurpleBuddyList *list, gboolean show)
+static void
+pidgin_blist_set_visible(G_GNUC_UNUSED PurpleBuddyList *list, gboolean show)
 {
 	if (!(gtkblist && gtkblist->window))
 		return;
@@ -3706,9 +3729,9 @@ static void pidgin_blist_set_visible(Pur
 }
 
 static void
-pidgin_blist_request_add_buddy(PurpleBuddyList *list, PurpleAccount *account,
-                               const char *username, const char *group,
-                               const char *alias)
+pidgin_blist_request_add_buddy(G_GNUC_UNUSED PurpleBuddyList *list,
+                               PurpleAccount *account, const char *username,
+                               const char *group, const char *alias)
 {
 	GtkWidget *dialog = NULL;
 
@@ -3718,9 +3741,9 @@ pidgin_blist_request_add_buddy(PurpleBud
 }
 
 static void
-pidgin_blist_request_add_chat(PurpleBuddyList *list, PurpleAccount *account,
-                              PurpleGroup *group, const char *alias,
-                              const char *name)
+pidgin_blist_request_add_chat(G_GNUC_UNUSED PurpleBuddyList *list,
+                              PurpleAccount *account, PurpleGroup *group,
+                              const char *alias, const char *name)
 {
 	GtkWidget *dialog = NULL;
 
@@ -3730,7 +3753,8 @@ pidgin_blist_request_add_chat(PurpleBudd
 }
 
 static void
-add_group_cb(PurpleConnection *gc, const char *group_name)
+add_group_cb(G_GNUC_UNUSED PurpleConnection *connection,
+             const char *group_name)
 {
 	PurpleGroup *group;
 
@@ -3742,7 +3766,7 @@ add_group_cb(PurpleConnection *gc, const
 }
 
 static void
-pidgin_blist_request_add_group(PurpleBuddyList *list)
+pidgin_blist_request_add_group(G_GNUC_UNUSED PurpleBuddyList *list)
 {
 	purple_request_input(NULL, _("Add Group"), NULL,
 					   _("Please enter the name of the group to be added."),
@@ -3758,7 +3782,8 @@ pidgin_blist_get_default_gtk_blist(void)
 	return gtkblist;
 }
 
-static gboolean autojoin_cb(PurpleConnection *gc, gpointer data)
+static gboolean
+autojoin_cb(PurpleConnection *gc, G_GNUC_UNUSED gpointer data)
 {
 	PurpleAccount *account = purple_connection_get_account(gc);
 	PurpleBlistNode *gnode, *cnode;
@@ -3888,7 +3913,7 @@ pidgin_blist_uninit(void) {
  * GTK Buddy list GObject code
  **************************************************************************/
 static void
-pidgin_buddy_list_init(PidginBuddyList *self)
+pidgin_buddy_list_init(G_GNUC_UNUSED PidginBuddyList *self)
 {
 }
 
@@ -4000,7 +4025,9 @@ void pidgin_blist_sort_method_set(const 
  ** Sort Methods
  ******************************************/
 
-static void sort_method_none(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter parent_iter, GtkTreeIter *cur, GtkTreeIter *iter)
+static void
+sort_method_none(PurpleBlistNode *node, G_GNUC_UNUSED PurpleBuddyList *blist,
+                 GtkTreeIter parent_iter, GtkTreeIter *cur, GtkTreeIter *iter)
 {
 	PurpleBlistNode *sibling = node->prev;
 	GtkTreeIter sibling_iter;
diff --git a/pidgin/gtkconv.c b/pidgin/gtkconv.c
--- a/pidgin/gtkconv.c
+++ b/pidgin/gtkconv.c
@@ -95,7 +95,7 @@ close_this_sucker(gpointer data)
 }
 
 static gboolean
-close_conv_cb(GtkButton *button, PidginConversation *gtkconv)
+close_conv_cb(G_GNUC_UNUSED GtkButton *button, PidginConversation *gtkconv)
 {
 	/* We are going to destroy the conversations immediately only if the 'close immediately'
 	 * preference is selected. Otherwise, close the conversation after a reasonable timeout
@@ -234,7 +234,7 @@ check_for_and_do_command(PurpleConversat
 }
 
 static void
-send_cb(GtkWidget *widget, PidginConversation *gtkconv)
+send_cb(G_GNUC_UNUSED GtkWidget *widget, PidginConversation *gtkconv)
 {
 	PurpleConversation *conv = gtkconv->active_conv;
 	PurpleAccount *account;
@@ -624,7 +624,9 @@ handled:
 }
 
 static void
-activate_list_cb(GtkTreeView *list, GtkTreePath *path, GtkTreeViewColumn *column, PidginConversation *gtkconv)
+activate_list_cb(GtkTreeView *list, GtkTreePath *path,
+                 G_GNUC_UNUSED GtkTreeViewColumn *column,
+                 PidginConversation *gtkconv)
 {
 	GtkTreeIter iter;
 	GtkTreeModel *model;
@@ -1006,7 +1008,8 @@ get_chat_user_status_icon(PurpleChatConv
 }
 
 static void
-add_chat_user_common(PurpleChatConversation *chat, PurpleChatUser *cb, const char *old_name)
+add_chat_user_common(PurpleChatConversation *chat, PurpleChatUser *cb,
+                     G_GNUC_UNUSED const char *old_name)
 {
 	PidginConversation *gtkconv;
 	PurpleConversation *conv;
@@ -1073,7 +1076,8 @@ add_chat_user_common(PurpleChatConversat
 	g_free(alias_key);
 }
 
-static void topic_callback(GtkWidget *w, PidginConversation *gtkconv)
+static void
+topic_callback(G_GNUC_UNUSED GtkWidget *w, PidginConversation *gtkconv)
 {
 	PurpleProtocol *protocol = NULL;
 	PurpleConnection *gc;
@@ -1111,7 +1115,8 @@ static void topic_callback(GtkWidget *w,
 }
 
 static gint
-sort_chat_users(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer userdata)
+sort_chat_users(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,
+                G_GNUC_UNUSED gpointer userdata)
 {
 	PurpleChatUserFlags f1 = 0, f2 = 0;
 	char *user1 = NULL, *user2 = NULL;
@@ -1153,7 +1158,9 @@ sort_chat_users(GtkTreeModel *model, Gtk
 }
 
 static void
-update_chat_alias(PurpleBuddy *buddy, PurpleChatConversation *chat, PurpleConnection *gc, PurpleProtocol *protocol)
+update_chat_alias(PurpleBuddy *buddy, PurpleChatConversation *chat,
+                  G_GNUC_UNUSED PurpleConnection *connection,
+                  G_GNUC_UNUSED PurpleProtocol *protocol)
 {
 	PidginConversation *gtkconv = PIDGIN_CONVERSATION(PURPLE_CONVERSATION(chat));
 	PurpleAccount *account = purple_conversation_get_account(PURPLE_CONVERSATION(chat));
@@ -1635,7 +1642,7 @@ ignore_middle_click(G_GNUC_UNUSED GtkGes
  * Conversation UI operations
  **************************************************************************/
 static void
-private_gtkconv_new(PurpleConversation *conv, gboolean hidden)
+private_gtkconv_new(PurpleConversation *conv, G_GNUC_UNUSED gboolean hidden)
 {
 	PidginConversation *gtkconv;
 	GtkWidget *tab_cont, *pane;
@@ -1712,8 +1719,10 @@ pidgin_conversation_detach(PurpleConvers
 }
 
 static void
-received_im_msg_cb(PurpleAccount *account, char *sender, char *message,
-				   PurpleConversation *conv, PurpleMessageFlags flags)
+received_im_msg_cb(G_GNUC_UNUSED PurpleAccount *account,
+                   G_GNUC_UNUSED char *sender, G_GNUC_UNUSED char *message,
+                   PurpleConversation *conv,
+                   G_GNUC_UNUSED PurpleMessageFlags flags)
 {
 	guint timer;
 
@@ -1774,7 +1783,8 @@ pidgin_conv_destroy(PurpleConversation *
 }
 
 static gboolean
-writing_msg(PurpleConversation *conv, PurpleMessage *msg, gpointer _unused)
+writing_msg(PurpleConversation *conv, PurpleMessage *msg,
+            G_GNUC_UNUSED gpointer _unused)
 {
 	PidginConversation *gtkconv;
 
@@ -1862,7 +1872,8 @@ static gboolean get_iter_from_chatuser(P
 }
 
 static void
-pidgin_conv_chat_add_users(PurpleChatConversation *chat, GList *cbuddies, gboolean new_arrivals)
+pidgin_conv_chat_add_users(PurpleChatConversation *chat, GList *cbuddies,
+                           G_GNUC_UNUSED gboolean new_arrivals)
 {
 	PidginConversation *gtkconv;
 	GtkListStore *ls;
@@ -2193,8 +2204,10 @@ pidgin_conversations_get_conv_ui_ops(voi
  * Public conversation utility functions
  **************************************************************************/
 static void
-show_formatting_toolbar_pref_cb(const char *name, PurplePrefType type,
-								gconstpointer value, gpointer data)
+show_formatting_toolbar_pref_cb(G_GNUC_UNUSED const char *name,
+                                G_GNUC_UNUSED PurplePrefType type,
+                                gconstpointer value,
+                                G_GNUC_UNUSED gpointer data)
 {
 	GList *list;
 	PurpleConversation *conv;
@@ -2246,7 +2259,7 @@ get_gtkconv_with_contact(PurpleMetaConta
 }
 
 static void
-account_signed_off_cb(PurpleConnection *gc, gpointer event)
+account_signed_off_cb(PurpleConnection *gc, G_GNUC_UNUSED gpointer event)
 {
 	PurpleConversationManager *manager;
 	GList *list;
@@ -2357,7 +2370,8 @@ update_buddy_privacy_changed(PurpleBuddy
 }
 
 static void
-update_buddy_idle_changed(PurpleBuddy *buddy, gboolean old, gboolean newidle)
+update_buddy_idle_changed(PurpleBuddy *buddy, G_GNUC_UNUSED gboolean old,
+                          G_GNUC_UNUSED gboolean newidle)
 {
 	PurpleConversation *im;
 	PurpleConversationManager *manager;
@@ -2440,7 +2454,8 @@ update_chat(PurpleChatConversation *chat
 }
 
 static void
-update_chat_topic(PurpleChatConversation *chat, const char *old, const char *new)
+update_chat_topic(PurpleChatConversation *chat, G_GNUC_UNUSED const char *old,
+                  G_GNUC_UNUSED const char *new)
 {
 	pidgin_conv_update_fields(PURPLE_CONVERSATION(chat), PIDGIN_CONV_TOPIC);
 }
diff --git a/pidgin/gtkdialogs.c b/pidgin/gtkdialogs.c
--- a/pidgin/gtkdialogs.c
+++ b/pidgin/gtkdialogs.c
@@ -47,7 +47,7 @@ struct _PidginGroupMergeObject {
 };
 
 static void
-pidgin_dialogs_im_cb(gpointer data, PurpleRequestFields *fields)
+pidgin_dialogs_im_cb(G_GNUC_UNUSED gpointer data, PurpleRequestFields *fields)
 {
 	PurpleAccount *account;
 	const char *username;
@@ -59,8 +59,8 @@ pidgin_dialogs_im_cb(gpointer data, Purp
 }
 
 static gboolean
-pidgin_dialogs_im_name_validator(PurpleRequestField *field, gchar **errmsg,
-	void *_fields)
+pidgin_dialogs_im_name_validator(G_GNUC_UNUSED PurpleRequestField *field,
+                                 char **errmsg, gpointer _fields)
 {
 	PurpleRequestFields *fields = _fields;
 	PurpleAccount *account;
@@ -137,7 +137,8 @@ pidgin_dialogs_im_with_user(PurpleAccoun
 }
 
 static void
-pidgin_dialogs_info_cb(gpointer data, PurpleRequestFields *fields)
+pidgin_dialogs_info_cb(G_GNUC_UNUSED gpointer data,
+                       PurpleRequestFields *fields)
 {
 	char *username;
 	PurpleAccount *account;
diff --git a/pidgin/gtkidle.c b/pidgin/gtkidle.c
--- a/pidgin/gtkidle.c
+++ b/pidgin/gtkidle.c
@@ -109,7 +109,7 @@ static const PidginDBusScreenSaverInfo s
 };
 
 static time_t
-pidgin_idle_get_idle_time(PurpleIdleUi *ui) {
+pidgin_idle_get_idle_time(G_GNUC_UNUSED PurpleIdleUi *ui) {
 	static guint idx = 0;
 	GApplication *app;
 	GDBusConnection *conn;
@@ -204,11 +204,11 @@ G_DEFINE_TYPE_EXTENDED(
 );
 
 static void
-pidgin_idle_init(PidginIdle *idle) {
+pidgin_idle_init(G_GNUC_UNUSED PidginIdle *idle) {
 }
 
 static void
-pidgin_idle_class_init(PidginIdleClass *klass) {
+pidgin_idle_class_init(G_GNUC_UNUSED PidginIdleClass *klass) {
 }
 
 /******************************************************************************
diff --git a/pidgin/gtkmedia.c b/pidgin/gtkmedia.c
--- a/pidgin/gtkmedia.c
+++ b/pidgin/gtkmedia.c
@@ -116,7 +116,7 @@ enum {
 };
 
 static gboolean
-pidgin_media_close_request_cb(GtkWindow *window, gpointer data) {
+pidgin_media_close_request_cb(G_GNUC_UNUSED GtkWindow *window, gpointer data) {
 	PidginMedia *media = data;
 
 	if(media->priv->media) {
@@ -167,8 +167,9 @@ pidgin_media_class_init (PidginMediaClas
 }
 
 static void
-pidgin_media_hangup_activate_cb(GSimpleAction *action, GVariant *parameter,
-		gpointer user_data)
+pidgin_media_hangup_activate_cb(G_GNUC_UNUSED GSimpleAction *action,
+                                G_GNUC_UNUSED GVariant *parameter,
+                                gpointer user_data)
 {
 	PidginMedia *media = PIDGIN_MEDIA(user_data);
 
@@ -219,10 +220,25 @@ pidgin_media_pause_change_state_cb(GSimp
 }
 
 static const GActionEntry media_action_entries[] = {
-	{ "Hangup", pidgin_media_hangup_activate_cb },
-	{ "Hold", NULL, NULL, "false", pidgin_media_hold_change_state_cb },
-	{ "Mute", NULL, NULL, "false", pidgin_media_mute_change_state_cb },
-	{ "Pause", NULL, NULL, "false", pidgin_media_pause_change_state_cb },
+	{
+		.name = "Hangup",
+		.activate = pidgin_media_hangup_activate_cb,
+	},
+	{
+		.name = "Hold",
+		.state = "false",
+		.change_state = pidgin_media_hold_change_state_cb,
+	},
+	{
+		.name = "Mute",
+		.state = "false",
+		.change_state = pidgin_media_mute_change_state_cb,
+	},
+	{
+		.name = "Pause",
+		.state =  "false",
+		.change_state = pidgin_media_pause_change_state_cb,
+	},
 };
 
 static void
@@ -327,8 +343,8 @@ pidgin_media_remove_widget(PidginMedia *
 }
 
 static void
-level_message_cb(PurpleMedia *media, gchar *session_id, gchar *participant,
-		double level, PidginMedia *gtkmedia)
+level_message_cb(G_GNUC_UNUSED PurpleMedia *media, char *session_id,
+                 char *participant, double level, PidginMedia *gtkmedia)
 {
 	GtkWidget *progress = NULL;
 
@@ -412,7 +428,7 @@ pidgin_media_emit_message(PidginMedia *g
 }
 
 static void
-pidgin_media_error_cb(PidginMedia *media, const gchar *error,
+pidgin_media_error_cb(G_GNUC_UNUSED PidginMedia *media, const char *error,
                       PidginMedia *gtkmedia)
 {
 	PurpleConversation *conv;
@@ -439,14 +455,14 @@ pidgin_media_error_cb(PidginMedia *media
 }
 
 static void
-pidgin_media_accept_cb(PurpleMedia *media, int index)
+pidgin_media_accept_cb(PurpleMedia *media, G_GNUC_UNUSED int index)
 {
 	purple_media_stream_info(media, PURPLE_MEDIA_INFO_ACCEPT,
 			NULL, NULL, TRUE);
 }
 
 static void
-pidgin_media_reject_cb(PurpleMedia *media, int index)
+pidgin_media_reject_cb(PurpleMedia *media, G_GNUC_UNUSED int index)
 {
 	GList *iter = purple_media_get_session_ids(media);
 	for (; iter; iter = g_list_delete_link(iter, iter)) {
@@ -503,23 +519,23 @@ pidgin_request_timeout_cb(PidginMedia *g
 }
 
 static void
-pidgin_media_input_volume_changed(GtkScaleButton *range, double value,
-		PurpleMedia *media)
+pidgin_media_input_volume_changed(G_GNUC_UNUSED GtkScaleButton *range,
+                                  double value, PurpleMedia *media)
 {
 	double val = (double)value * 100.0;
 	purple_media_set_input_volume(media, NULL, val);
 }
 
 static void
-pidgin_media_output_volume_changed(GtkScaleButton *range, double value,
-		PurpleMedia *media)
+pidgin_media_output_volume_changed(G_GNUC_UNUSED GtkScaleButton *range,
+                                   double value, PurpleMedia *media)
 {
 	double val = (double)value * 100.0;
 	purple_media_set_output_volume(media, NULL, NULL, val);
 }
 
 static void
-destroy_parent_widget_cb(GtkWidget *widget, GtkWidget *parent)
+destroy_parent_widget_cb(G_GNUC_UNUSED GtkWidget *widget, GtkWidget *parent)
 {
 	g_return_if_fail(GTK_IS_WIDGET(parent));
 
@@ -590,7 +606,8 @@ pidgin_media_add_audio_widget(PidginMedi
 }
 
 static void
-pidgin_media_keypad_pressed_cb(PidginKeypad *keypad, guint key, gpointer data)
+pidgin_media_keypad_pressed_cb(G_GNUC_UNUSED PidginKeypad *keypad, guint key,
+                               gpointer data)
 {
 	PidginMedia *gtkmedia = data;
 	gchar *sid;
@@ -602,7 +619,8 @@ pidgin_media_keypad_pressed_cb(PidginKey
 
 static GtkWidget *
 pidgin_media_add_dtmf_widget(PidginMedia *gtkmedia,
-		PurpleMediaSessionType type, const gchar *_sid)
+                             G_GNUC_UNUSED PurpleMediaSessionType type,
+                             const char *_sid)
 {
 	GtkApplicationWindow *win = GTK_APPLICATION_WINDOW(gtkmedia);
 	GtkWidget *keypad = NULL;
@@ -787,9 +805,11 @@ pidgin_media_state_changed_cb(PurpleMedi
 }
 
 static void
-pidgin_media_stream_info_cb(PurpleMedia *media, PurpleMediaInfoType type,
-		gchar *sid, gchar *name, gboolean local,
-		PidginMedia *gtkmedia)
+pidgin_media_stream_info_cb(G_GNUC_UNUSED PurpleMedia *media,
+                            PurpleMediaInfoType type,
+                            G_GNUC_UNUSED gchar *sid,
+                            G_GNUC_UNUSED gchar *name, gboolean local,
+                            PidginMedia *gtkmedia)
 {
 	if (type == PURPLE_MEDIA_INFO_REJECT) {
 		pidgin_media_emit_message(gtkmedia,
@@ -876,8 +896,9 @@ pidgin_media_set_state(PidginMedia *gtkm
 }
 
 static gboolean
-pidgin_media_new_cb(PurpleMediaManager *manager, PurpleMedia *media,
-		PurpleAccount *account, gchar *screenname, gpointer nul)
+pidgin_media_new_cb(G_GNUC_UNUSED PurpleMediaManager *manager,
+                    PurpleMedia *media, PurpleAccount *account,
+                    char *screenname, G_GNUC_UNUSED gpointer data)
 {
 	PidginMedia *gtkmedia = NULL;
 	PurpleBuddy *buddy = NULL;
diff --git a/pidgin/gtknotify.c b/pidgin/gtknotify.c
--- a/pidgin/gtknotify.c
+++ b/pidgin/gtknotify.c
@@ -58,27 +58,32 @@ typedef struct
 static void pidgin_close_notify(PurpleNotifyType type, void *ui_handle);
 
 static void
-message_response_cb(GtkDialog *dialog, gint id, GtkWidget *widget)
+message_response_cb(G_GNUC_UNUSED GtkDialog *dialog, G_GNUC_UNUSED gint id,
+                    GtkWidget *widget)
 {
 	purple_notify_close(PURPLE_NOTIFY_MESSAGE, widget);
 }
 
 static gboolean
-formatted_close_cb(GtkWidget *win, GdkEvent *event, void *user_data)
+formatted_close_cb(GtkWidget *win, G_GNUC_UNUSED GdkEvent *event,
+                   G_GNUC_UNUSED gpointer user_data)
 {
 	purple_notify_close(PURPLE_NOTIFY_FORMATTED, win);
 	return FALSE;
 }
 
 static gboolean
-searchresults_close_cb(PidginNotifySearchResultsData *data, GdkEvent *event, gpointer user_data)
+searchresults_close_cb(PidginNotifySearchResultsData *data,
+                       G_GNUC_UNUSED GdkEvent *event,
+                       G_GNUC_UNUSED gpointer user_data)
 {
 	purple_notify_close(PURPLE_NOTIFY_SEARCHRESULTS, data);
 	return FALSE;
 }
 
 static void
-searchresults_callback_wrapper_cb(GtkWidget *widget, PidginNotifySearchResultsButtonData *bd)
+searchresults_callback_wrapper_cb(G_GNUC_UNUSED GtkWidget *widget,
+                                  PidginNotifySearchResultsButtonData *bd)
 {
 	PidginNotifySearchResultsData *data = bd->data;
 
@@ -225,7 +230,8 @@ pidgin_notify_message(PurpleNotifyMessag
 
 static gboolean
 formatted_input_cb(GtkWidget *win, guint keyval, G_GNUC_UNUSED guint keycode,
-                   G_GNUC_UNUSED GdkModifierType state, gpointer data)
+                   G_GNUC_UNUSED GdkModifierType state,
+                   G_GNUC_UNUSED gpointer data)
 {
 	if (keyval == GDK_KEY_Escape) {
 		purple_notify_close(PURPLE_NOTIFY_FORMATTED, win);
diff --git a/pidgin/gtkpluginpref.c b/pidgin/gtkpluginpref.c
--- a/pidgin/gtkpluginpref.c
+++ b/pidgin/gtkpluginpref.c
@@ -37,7 +37,7 @@ entry_cb(GtkWidget *entry, gpointer data
 
 
 static void
-multiline_cb(GtkTextBuffer *buffer, gpointer data) {
+multiline_cb(GtkTextBuffer *buffer, G_GNUC_UNUSED gpointer data) {
 	gchar *pref = NULL, *text = NULL;
 
 	pref = g_object_get_data(G_OBJECT(buffer), "pref-key");
diff --git a/pidgin/gtkprivacy.c b/pidgin/gtkprivacy.c
--- a/pidgin/gtkprivacy.c
+++ b/pidgin/gtkprivacy.c
@@ -113,7 +113,8 @@ rebuild_block_list(PidginPrivacyDialog *
 }
 
 static void
-user_selected_cb(GtkTreeSelection *sel, PidginPrivacyDialog *dialog)
+user_selected_cb(G_GNUC_UNUSED GtkTreeSelection *sel,
+                 PidginPrivacyDialog *dialog)
 {
 	gtk_widget_set_sensitive(dialog->remove_button, TRUE);
 }
@@ -206,7 +207,7 @@ type_changed_cb(GObject *obj, G_GNUC_UNU
 }
 
 static void
-add_cb(GtkWidget *button, PidginPrivacyDialog *dialog)
+add_cb(G_GNUC_UNUSED GtkWidget *button, PidginPrivacyDialog *dialog)
 {
 	if (dialog->in_allow_list)
 		pidgin_request_add_permit(dialog->account, NULL);
@@ -215,7 +216,7 @@ add_cb(GtkWidget *button, PidginPrivacyD
 }
 
 static void
-remove_cb(GtkWidget *button, PidginPrivacyDialog *dialog)
+remove_cb(G_GNUC_UNUSED GtkWidget *button, PidginPrivacyDialog *dialog)
 {
 	GtkTreeIter iter;
 	GtkTreeModel *model;
@@ -251,7 +252,7 @@ remove_cb(GtkWidget *button, PidginPriva
 }
 
 static void
-removeall_cb(GtkWidget *button, PidginPrivacyDialog *dialog)
+removeall_cb(G_GNUC_UNUSED GtkWidget *button, PidginPrivacyDialog *dialog)
 {
 	GSList *l;
 	if (dialog->in_allow_list)
@@ -371,7 +372,8 @@ destroy_request_data(PidginPrivacyReques
 }
 
 static void
-confirm_permit_block_cb(PidginPrivacyRequestData *data, int option)
+confirm_permit_block_cb(PidginPrivacyRequestData *data,
+                        G_GNUC_UNUSED int option)
 {
 	if (data->block)
 		purple_account_privacy_deny(data->account, data->name);
@@ -469,14 +471,16 @@ pidgin_request_add_block(PurpleAccount *
 }
 
 static void
-pidgin_permit_added_removed(PurpleAccount *account, const char *name)
+pidgin_permit_added_removed(G_GNUC_UNUSED PurpleAccount *account,
+                            G_GNUC_UNUSED const char *name)
 {
 	if (privacy_dialog != NULL)
 		rebuild_allow_list(privacy_dialog);
 }
 
 static void
-pidgin_deny_added_removed(PurpleAccount *account, const char *name)
+pidgin_deny_added_removed(G_GNUC_UNUSED PurpleAccount *account,
+                          G_GNUC_UNUSED const char *name)
 {
 	if (privacy_dialog != NULL)
 		rebuild_block_list(privacy_dialog);
diff --git a/pidgin/gtkrequest.c b/pidgin/gtkrequest.c
--- a/pidgin/gtkrequest.c
+++ b/pidgin/gtkrequest.c
@@ -120,7 +120,8 @@ generic_response_start(PidginRequestData
 }
 
 static void
-input_response_cb(GtkDialog *dialog, gint id, PidginRequestData *data)
+input_response_cb(G_GNUC_UNUSED GtkDialog *dialog, gint id,
+                  PidginRequestData *data)
 {
 	const char *value;
 	char *multiline_value = NULL;
@@ -162,7 +163,8 @@ input_response_cb(GtkDialog *dialog, gin
 }
 
 static void
-action_response_cb(GtkDialog *dialog, gint id, PidginRequestData *data)
+action_response_cb(G_GNUC_UNUSED GtkDialog *dialog, gint id,
+                   PidginRequestData *data)
 {
 	generic_response_start(data);
 
@@ -174,7 +176,7 @@ action_response_cb(GtkDialog *dialog, gi
 
 
 static void
-choice_response_cb(GtkDialog *dialog, gint id, PidginRequestData *data)
+choice_response_cb(G_GNUC_UNUSED GtkDialog *dialog, G_GNUC_UNUSED gint id, G_GNUC_UNUSED PidginRequestData *data)
 {
 #warning please rewrite me
 #if 0
@@ -224,7 +226,8 @@ field_string_focus_out_cb(GtkEventContro
 }
 
 static void
-req_field_changed_common(GtkWidget *widget, PurpleRequestField *field)
+req_field_changed_common(G_GNUC_UNUSED GtkWidget *widget,
+                         PurpleRequestField *field)
 {
 	PurpleRequestFieldGroup *group;
 	PurpleRequestFields *fields;
@@ -277,7 +280,7 @@ field_choice_menu_cb(GtkComboBox *menu, 
 }
 
 static void
-field_choice_option_cb(GtkCheckButton *button, PurpleRequestField *field)
+field_choice_option_cb(G_GNUC_UNUSED GtkCheckButton *button, G_GNUC_UNUSED PurpleRequestField *field)
 {
 #warning please rewrite me
 #if 0
@@ -327,7 +330,7 @@ multifield_ok_cb(GtkWidget *button, Pidg
 }
 
 static void
-multifield_cancel_cb(GtkWidget *button, PidginRequestData *data)
+multifield_cancel_cb(G_GNUC_UNUSED GtkWidget *button, PidginRequestData *data)
 {
 	generic_response_start(data);
 
@@ -354,7 +357,7 @@ multifield_extra_cb(GtkWidget *button, P
 }
 
 static gboolean
-destroy_multifield_cb(GtkWidget *self, PidginRequestData *data)
+destroy_multifield_cb(G_GNUC_UNUSED GtkWidget *self, PidginRequestData *data)
 {
 	multifield_cancel_cb(NULL, data);
 	return FALSE;
@@ -482,7 +485,7 @@ pidgin_request_dialog_icon(PurpleRequest
 }
 
 static void
-pidgin_request_help_clicked(GtkButton *button, gpointer _unused)
+pidgin_request_help_clicked(GtkButton *button, G_GNUC_UNUSED gpointer _unused)
 {
 	PurpleRequestHelpCb cb;
 	gpointer data;
@@ -932,7 +935,7 @@ pidgin_request_action(const char *title,
 }
 
 static void
-wait_cancel_cb(GtkWidget *button, PidginRequestData *data)
+wait_cancel_cb(G_GNUC_UNUSED GtkWidget *button, PidginRequestData *data)
 {
 	generic_response_start(data);
 
@@ -1447,7 +1450,7 @@ create_account_field(PurpleRequestField 
 }
 
 static void
-select_field_list_item(GtkTreeModel *model, GtkTreePath *path,
+select_field_list_item(GtkTreeModel *model, G_GNUC_UNUSED GtkTreePath *path,
 					   GtkTreeIter *iter, gpointer data)
 {
 	PurpleRequestField *field = (PurpleRequestField *)data;
@@ -1620,6 +1623,7 @@ datasheet_get_selected_row(GtkWidget *sh
 	return purple_request_datasheet_record_find(sheet, key);
 }
 
+#if 0
 static void
 datasheet_button_check_sens(GtkWidget *button, gpointer _sheet_widget)
 {
@@ -1636,9 +1640,10 @@ datasheet_button_check_sens(GtkWidget *b
 		purple_request_datasheet_action_is_sensitive(act,
 			datasheet_get_selected_row(sheet_widget)));
 }
+#endif
 
 static void
-datasheet_selection_changed(GtkWidget *sheet_widget)
+datasheet_selection_changed(G_GNUC_UNUSED GtkWidget *sheet_widget)
 {
 #if 0
 	gpointer buttons_box;
@@ -1773,7 +1778,8 @@ datasheet_update(PurpleRequestDatasheet 
 
 
 static void
-datasheet_selection_changed_cb(GtkTreeSelection *sel, gpointer sheet_widget)
+datasheet_selection_changed_cb(G_GNUC_UNUSED GtkTreeSelection *sel,
+                               gpointer sheet_widget)
 {
 	datasheet_selection_changed(GTK_WIDGET(sheet_widget));
 }
@@ -2251,7 +2257,8 @@ pidgin_request_fields(const char *title,
 }
 
 static void
-file_ok_check_if_exists_cb(GtkWidget *widget, gint response, PidginRequestData *data)
+file_ok_check_if_exists_cb(G_GNUC_UNUSED GtkWidget *widget, gint response,
+                           PidginRequestData *data)
 {
 	GFile *current_path;
 
@@ -2283,8 +2290,9 @@ file_ok_check_if_exists_cb(GtkWidget *wi
 
 static void *
 pidgin_request_file(const char *title, const char *filename,
-	gboolean savedialog, GCallback ok_cb, GCallback cancel_cb,
-	PurpleRequestCommonParameters *cpar, void *user_data)
+                    gboolean savedialog, GCallback ok_cb, GCallback cancel_cb,
+                    G_GNUC_UNUSED PurpleRequestCommonParameters *cpar,
+                    gpointer user_data)
 {
 	PidginRequestData *data;
 	GtkFileChooserNative *filesel;
@@ -2370,8 +2378,9 @@ pidgin_request_file(const char *title, c
 
 static void *
 pidgin_request_folder(const char *title, const char *dirname, GCallback ok_cb,
-	GCallback cancel_cb, PurpleRequestCommonParameters *cpar,
-	void *user_data)
+                      GCallback cancel_cb,
+                      G_GNUC_UNUSED PurpleRequestCommonParameters *cpar,
+                      gpointer user_data)
 {
 	PidginRequestData *data;
 	GtkFileChooserNative *dirsel;
diff --git a/pidgin/gtkroomlist.c b/pidgin/gtkroomlist.c
--- a/pidgin/gtkroomlist.c
+++ b/pidgin/gtkroomlist.c
@@ -216,7 +216,7 @@ pidgin_roomlist_add_to_blist(PidginRooml
 
 static gboolean
 _search_func(GtkTreeModel *model, gint column, const gchar *key,
-             GtkTreeIter *iter, gpointer search_data)
+             GtkTreeIter *iter, G_GNUC_UNUSED gpointer search_data)
 {
 	gboolean result;
 	gchar *name, *fold, *fkey;
@@ -251,7 +251,7 @@ pidgin_roomlist_join(PidginRoomlistDialo
  *****************************************************************************/
 static void
 pidgin_roomlist_add_to_blist_cb(G_GNUC_UNUSED GSimpleAction *action,
-				G_GNUC_UNUSED GVariant *parameter,
+                                G_GNUC_UNUSED GVariant *parameter,
                                 gpointer data)
 {
 	pidgin_roomlist_add_to_blist(data);
@@ -259,7 +259,8 @@ pidgin_roomlist_add_to_blist_cb(G_GNUC_U
 
 
 static void
-pidgin_roomlist_join_cb(GSimpleAction *action, GVariant *parameter,
+pidgin_roomlist_join_cb(G_GNUC_UNUSED GSimpleAction *action,
+                        G_GNUC_UNUSED GVariant *parameter,
                         gpointer data)
 {
 	pidgin_roomlist_join(data);
@@ -280,7 +281,7 @@ static GActionEntry actions[] = {
  *****************************************************************************/
 static void
 pidgin_roomlist_response_cb(GtkDialog *gtk_dialog, gint response_id,
-                            gpointer data)
+                            G_GNUC_UNUSED gpointer data)
 {
 	PidginRoomlistDialog *dialog = PIDGIN_ROOMLIST_DIALOG(gtk_dialog);
 
@@ -349,8 +350,8 @@ selection_changed_cb(GtkTreeSelection *s
 }
 
 static void
-row_activated_cb(GtkTreeView *tv, GtkTreePath *path, GtkTreeViewColumn *arg2,
-                 gpointer data)
+row_activated_cb(G_GNUC_UNUSED GtkTreeView *tv, GtkTreePath *path,
+                 G_GNUC_UNUSED GtkTreeViewColumn *arg2, gpointer data)
 {
 	PidginRoomlistDialog *dialog = data;
 	PidginRoomlist *grl = NULL;
diff --git a/pidgin/gtksavedstatuses.c b/pidgin/gtksavedstatuses.c
--- a/pidgin/gtksavedstatuses.c
+++ b/pidgin/gtksavedstatuses.c
@@ -104,8 +104,11 @@ saved_status_sort_alphabetically_func(gc
 				  purple_savedstatus_get_title(saved_status_b));
 }
 
-static gboolean pidgin_status_menu_add_primitive(GtkListStore *model, GtkWidget *w, PurpleStatusPrimitive primitive,
-	PurpleSavedStatus *current_status)
+static gboolean
+pidgin_status_menu_add_primitive(GtkListStore *model,
+                                 G_GNUC_UNUSED GtkWidget *w,
+                                 PurpleStatusPrimitive primitive,
+                                 PurpleSavedStatus *current_status)
 {
 	GtkTreeIter iter;
 	gboolean currently_selected = FALSE;
diff --git a/pidgin/gtkutils.c b/pidgin/gtkutils.c
--- a/pidgin/gtkutils.c
+++ b/pidgin/gtkutils.c
@@ -193,8 +193,10 @@ pidgin_set_accessible_label(GtkWidget *w
 	                               label, NULL, -1);
 }
 
-static gboolean buddyname_completion_match_func(GtkEntryCompletion *completion,
-		const gchar *key, GtkTreeIter *iter, gpointer user_data)
+static gboolean
+buddyname_completion_match_func(GtkEntryCompletion *completion,
+                                const char *key, GtkTreeIter *iter,
+                                G_GNUC_UNUSED gpointer user_data)
 {
 	GtkTreeModel *model;
 	GValue val1;
@@ -224,8 +226,10 @@ static gboolean buddyname_completion_mat
 	return FALSE;
 }
 
-static gboolean buddyname_completion_match_selected_cb(GtkEntryCompletion *completion,
-		GtkTreeModel *model, GtkTreeIter *iter, PidginCompletionData *data)
+static gboolean
+buddyname_completion_match_selected_cb(G_GNUC_UNUSED GtkEntryCompletion *completion,
+                                       GtkTreeModel *model, GtkTreeIter *iter,
+                                       PidginCompletionData *data)
 {
 	GValue val;
 	GtkWidget *optmenu = data->accountopt;
@@ -369,7 +373,7 @@ add_completion_list(PidginCompletionData
 }
 
 static void
-repopulate_autocomplete(gpointer something, gpointer data)
+repopulate_autocomplete(G_GNUC_UNUSED gpointer something, gpointer data)
 {
 	add_completion_list(data);
 }
@@ -495,8 +499,10 @@ pidgin_screenname_autocomplete_default_f
  * is to add an extra column to the GtkTreeModel.  And this function is
  * used rarely, so it shouldn't matter TOO much.
  */
-gboolean pidgin_tree_view_search_equal_func(GtkTreeModel *model, gint column,
-			const gchar *key, GtkTreeIter *iter, gpointer data)
+gboolean
+pidgin_tree_view_search_equal_func(GtkTreeModel *model, gint column,
+                                   const char *key, GtkTreeIter *iter,
+                                   G_GNUC_UNUSED gpointer data)
 {
 	gchar *enteredstring;
 	gchar *tmp;
diff --git a/pidgin/gtkwhiteboard.c b/pidgin/gtkwhiteboard.c
--- a/pidgin/gtkwhiteboard.c
+++ b/pidgin/gtkwhiteboard.c
@@ -26,6 +26,9 @@
 #include <gtk/gtk.h>
 
 #include <math.h>
+#ifndef M_PI
+#define M_PI (3.14159265358979323846264338327950288)
+#endif
 
 #include <purple.h>
 
@@ -91,7 +94,7 @@ pidgin_whiteboard_rgb24_to_rgba(int colo
 }
 
 static gboolean
-whiteboard_close_cb(GtkWidget *widget, GdkEvent *event,
+whiteboard_close_cb(GtkWidget *widget, G_GNUC_UNUSED GdkEvent *event,
                     G_GNUC_UNUSED gpointer data)
 {
 	PidginWhiteboard *gtkwb = PIDGIN_WHITEBOARD(widget);
@@ -102,8 +105,8 @@ whiteboard_close_cb(GtkWidget *widget, G
 }
 
 static void
-pidgin_whiteboard_resize(GtkDrawingArea *self, gint width, gint height,
-                         gpointer data)
+pidgin_whiteboard_resize(G_GNUC_UNUSED GtkDrawingArea *self, gint width,
+                         gint height, gpointer data)
 {
 	PidginWhiteboard *gtkwb = (PidginWhiteboard*)data;
 	GdkRGBA white = {1.0f, 1.0f, 1.0f, 1.0f};
@@ -122,8 +125,8 @@ pidgin_whiteboard_resize(GtkDrawingArea 
 }
 
 static gboolean
-pidgin_whiteboard_draw_event(GtkWidget *widget, cairo_t *cr,
-	gpointer _gtkwb)
+pidgin_whiteboard_draw_event(G_GNUC_UNUSED GtkWidget *widget, cairo_t *cr,
+                             gpointer _gtkwb)
 {
 	PidginWhiteboard *gtkwb = _gtkwb;
 
@@ -230,8 +233,8 @@ pidgin_whiteboard_draw_brush_line(Purple
 }
 
 static void
-pidgin_whiteboard_brush_down(GtkGestureDrag* self, gdouble x, gdouble y,
-                             gpointer data)
+pidgin_whiteboard_brush_down(G_GNUC_UNUSED GtkGestureDrag* self, gdouble x,
+                             gdouble y, gpointer data)
 {
 	PidginWhiteboard *gtkwb = (PidginWhiteboard*)data;
 	PurpleWhiteboard *wb = gtkwb->wb;
@@ -263,8 +266,8 @@ pidgin_whiteboard_brush_down(GtkGestureD
 }
 
 static void
-pidgin_whiteboard_brush_motion(GtkGestureDrag* self, gdouble x, gdouble y,
-                               gpointer data)
+pidgin_whiteboard_brush_motion(G_GNUC_UNUSED GtkGestureDrag* self, gdouble x,
+                               gdouble y, gpointer data)
 {
 	PidginWhiteboard *gtkwb = (PidginWhiteboard*)data;
 	PurpleWhiteboard *wb = gtkwb->wb;
@@ -298,7 +301,8 @@ pidgin_whiteboard_brush_motion(GtkGestur
 }
 
 static void
-pidgin_whiteboard_brush_up(GtkGestureDrag *self, gdouble x, gdouble y,
+pidgin_whiteboard_brush_up(G_GNUC_UNUSED GtkGestureDrag *self,
+                           G_GNUC_UNUSED gdouble x, G_GNUC_UNUSED gdouble y,
                            gpointer data)
 {
 	PidginWhiteboard *gtkwb = (PidginWhiteboard*)data;
@@ -353,8 +357,7 @@ static void pidgin_whiteboard_clear(Purp
 }
 
 static void
-pidgin_whiteboard_clear_response(GtkDialog *self, guint response,
-                                 gpointer data)
+pidgin_whiteboard_clear_response(GtkDialog *self, gint response, gpointer data)
 {
 	PidginWhiteboard *gtkwb = (PidginWhiteboard *)data;
 
@@ -369,7 +372,9 @@ pidgin_whiteboard_clear_response(GtkDial
 }
 
 static void
-pidgin_whiteboard_button_clear_press(GtkWidget *widget, gpointer data) {
+pidgin_whiteboard_button_clear_press(G_GNUC_UNUSED GtkWidget *widget,
+                                     gpointer data)
+{
 	PidginWhiteboard *gtkwb = (PidginWhiteboard*)(data);
 
 	/* Confirm whether the user really wants to clear */
@@ -422,7 +427,8 @@ pidgin_whiteboard_save_response(GtkNativ
 
 
 static void
-pidgin_whiteboard_button_save_press(GtkWidget *widget, gpointer _gtkwb)
+pidgin_whiteboard_button_save_press(G_GNUC_UNUSED GtkWidget *widget,
+                                    gpointer _gtkwb)
 {
 	PidginWhiteboard *gtkwb = _gtkwb;
 	GtkFileChooserNative *chooser;
diff --git a/pidgin/gtkxfer.c b/pidgin/gtkxfer.c
--- a/pidgin/gtkxfer.c
+++ b/pidgin/gtkxfer.c
@@ -369,7 +369,7 @@ ensure_row_selected(PidginXferDialog *di
  * Callbacks
  **************************************************************************/
 static gboolean
-close_request_cb(GtkWidget *w, gpointer d) {
+close_request_cb(G_GNUC_UNUSED GtkWidget *w, gpointer d) {
 	PidginXferDialog *dialog = (PidginXferDialog *)d;
 
 	pidgin_xfer_dialog_hide(dialog);
@@ -426,7 +426,7 @@ selection_changed_cb(GtkTreeSelection *s
 }
 
 static void
-open_button_cb(GtkButton *button, PidginXferDialog *dialog)
+open_button_cb(G_GNUC_UNUSED GtkButton *button, PidginXferDialog *dialog)
 {
 	gchar *uri = NULL;
 
@@ -437,19 +437,19 @@ open_button_cb(GtkButton *button, Pidgin
 }
 
 static void
-remove_button_cb(GtkButton *button, PidginXferDialog *dialog)
+remove_button_cb(G_GNUC_UNUSED GtkButton *button, PidginXferDialog *dialog)
 {
 	pidgin_xfer_dialog_remove_xfer(dialog, dialog->selected_xfer);
 }
 
 static void
-stop_button_cb(GtkButton *button, PidginXferDialog *dialog)
+stop_button_cb(G_GNUC_UNUSED GtkButton *button, PidginXferDialog *dialog)
 {
 	purple_xfer_cancel_local(dialog->selected_xfer);
 }
 
 static void
-close_button_cb(GtkButton *button, PidginXferDialog *dialog)
+close_button_cb(G_GNUC_UNUSED GtkButton *button, PidginXferDialog *dialog)
 {
 	pidgin_xfer_dialog_hide(dialog);
 }
diff --git a/pidgin/libpidgin.c b/pidgin/libpidgin.c
--- a/pidgin/libpidgin.c
+++ b/pidgin/libpidgin.c
@@ -104,7 +104,8 @@ static void sighandler(int sig)
 }
 
 static gboolean
-mainloop_sighandler(GIOChannel *source, GIOCondition cond, gpointer data)
+mainloop_sighandler(GIOChannel *source, G_GNUC_UNUSED GIOCondition cond,
+                    G_GNUC_UNUSED gpointer data)
 {
 	GIOStatus stat;
 	int sig;
diff --git a/pidgin/meson.build b/pidgin/meson.build
--- a/pidgin/meson.build
+++ b/pidgin/meson.build
@@ -235,7 +235,8 @@ libpidgin = shared_library('pidgin3',
     include_directories : [toplevel_inc, include_directories('prefs')],
     version : PURPLE_LIB_VERSION,
     dependencies : _libpidgin_dependencies,
-    install : true)
+    install : true,
+    override_options : ['c_std=c99', 'warning_level=2'])
 libpidgin_dep = declare_dependency(
     include_directories : [toplevel_inc, libpidgin_inc],
     link_with : libpidgin,
@@ -248,7 +249,8 @@ pidgin = executable('pidgin3',
     include_directories : toplevel_inc,
     dependencies : IS_WIN32 ? [] : [libpurple_dep, libpidgin_dep],
     win_subsystem : 'windows',
-    install : true)
+    install : true,
+    override_options : ['c_std=c99', 'warning_level=2'])
 
 meson.override_dependency(pidgin_filebase, libpidgin_dep)
 
diff --git a/pidgin/pidginaccountsdisabledmenu.c b/pidgin/pidginaccountsdisabledmenu.c
--- a/pidgin/pidginaccountsdisabledmenu.c
+++ b/pidgin/pidginaccountsdisabledmenu.c
@@ -76,7 +76,7 @@ pidgin_accounts_disabled_menu_changed_cb
  * GMenuModel Implementation
  *****************************************************************************/
 static gboolean
-pidgin_accounts_disabled_menu_is_mutable(GMenuModel *model) {
+pidgin_accounts_disabled_menu_is_mutable(G_GNUC_UNUSED GMenuModel *model) {
 	return TRUE;
 }
 
@@ -158,7 +158,8 @@ pidgin_accounts_disabled_menu_get_item_a
 }
 
 static void
-pidgin_accounts_disabled_menu_get_item_links(GMenuModel *model, gint index,
+pidgin_accounts_disabled_menu_get_item_links(G_GNUC_UNUSED GMenuModel *model,
+                                             G_GNUC_UNUSED gint index,
                                              GHashTable **links)
 {
 	*links = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
diff --git a/pidgin/pidginaccountsenabledmenu.c b/pidgin/pidginaccountsenabledmenu.c
--- a/pidgin/pidginaccountsenabledmenu.c
+++ b/pidgin/pidginaccountsenabledmenu.c
@@ -156,7 +156,7 @@ pidgin_accounts_enabled_menu_disconnecte
  * GMenuModel Implementation
  *****************************************************************************/
 static gboolean
-pidgin_accounts_enabled_menu_is_mutable(GMenuModel *model) {
+pidgin_accounts_enabled_menu_is_mutable(G_GNUC_UNUSED GMenuModel *model) {
 	return TRUE;
 }
 
diff --git a/pidgin/pidginactiongroup.c b/pidgin/pidginactiongroup.c
--- a/pidgin/pidginactiongroup.c
+++ b/pidgin/pidginactiongroup.c
@@ -100,8 +100,8 @@ pidgin_action_group_setup_string(PidginA
  * Preference Callbacks
  *****************************************************************************/
 static void
-pidgin_action_group_sort_method_callback(const gchar *name,
-                                         PurplePrefType type,
+pidgin_action_group_sort_method_callback(G_GNUC_UNUSED const gchar *name,
+                                         G_GNUC_UNUSED PurplePrefType type,
                                          gconstpointer value,
                                          gpointer data)
 {
@@ -116,8 +116,8 @@ pidgin_action_group_sort_method_callback
  * Action Callbacks
  *****************************************************************************/
 static void
-pidgin_action_group_sort_method(GSimpleAction *action, GVariant *value,
-                                gpointer data)
+pidgin_action_group_sort_method(G_GNUC_UNUSED GSimpleAction *action,
+                                GVariant *value, G_GNUC_UNUSED gpointer data)
 {
 	purple_prefs_set_string(PIDGIN_PREFS_ROOT "/blist/sort_type",
 	                        g_variant_get_string(value, NULL));
diff --git a/pidgin/pidginapplication.c b/pidgin/pidginapplication.c
--- a/pidgin/pidginapplication.c
+++ b/pidgin/pidginapplication.c
@@ -258,8 +258,8 @@ pidgin_application_actions_set_enabled(P
 }
 
 static void
-pidgin_application_about(GSimpleAction *simple, GVariant *parameter,
-                         gpointer data)
+pidgin_application_about(G_GNUC_UNUSED GSimpleAction *simple,
+                         G_GNUC_UNUSED GVariant *parameter, gpointer data)
 {
 	PidginApplication *application = data;
 	static GtkWidget *about = NULL;
@@ -273,8 +273,8 @@ pidgin_application_about(GSimpleAction *
 }
 
 static void
-pidgin_application_accounts(GSimpleAction *simple, GVariant *parameter,
-                            gpointer data)
+pidgin_application_accounts(G_GNUC_UNUSED GSimpleAction *simple,
+                            G_GNUC_UNUSED GVariant *parameter, gpointer data)
 {
 	PidginApplication *application = data;
 	static GtkWidget *manager = NULL;
@@ -289,29 +289,33 @@ pidgin_application_accounts(GSimpleActio
 }
 
 static void
-pidgin_application_add_buddy(GSimpleAction *simple, GVariant *parameter,
-                             gpointer data)
+pidgin_application_add_buddy(G_GNUC_UNUSED GSimpleAction *simple,
+                             G_GNUC_UNUSED GVariant *parameter,
+                             G_GNUC_UNUSED gpointer data)
 {
 	purple_blist_request_add_buddy(NULL, NULL, NULL, NULL);
 }
 
 static void
-pidgin_application_add_chat(GSimpleAction *simple, GVariant *parameter,
-                            gpointer data)
+pidgin_application_add_chat(G_GNUC_UNUSED GSimpleAction *simple,
+                            G_GNUC_UNUSED GVariant *parameter,
+                            G_GNUC_UNUSED gpointer data)
 {
 	purple_blist_request_add_chat(NULL, NULL, NULL, NULL);
 }
 
 static void
-pidgin_application_add_group(GSimpleAction *simple, GVariant *parameter,
-                             gpointer data)
+pidgin_application_add_group(G_GNUC_UNUSED GSimpleAction *simple,
+                             G_GNUC_UNUSED GVariant *parameter,
+                             G_GNUC_UNUSED gpointer data)
 {
 	purple_blist_request_add_group();
 }
 
 static void
-pidgin_application_connect_account(GSimpleAction *simple, GVariant *parameter,
-                                   gpointer data)
+pidgin_application_connect_account(G_GNUC_UNUSED GSimpleAction *simple,
+                                   GVariant *parameter,
+                                   G_GNUC_UNUSED gpointer data)
 {
 	PurpleAccount *account = NULL;
 	PurpleAccountManager *manager = NULL;
@@ -328,8 +332,9 @@ pidgin_application_connect_account(GSimp
 }
 
 static void
-pidgin_application_debug(GSimpleAction *simple, GVariant *parameter,
-                         gpointer data)
+pidgin_application_debug(G_GNUC_UNUSED GSimpleAction *simple,
+                         G_GNUC_UNUSED GVariant *parameter,
+                         G_GNUC_UNUSED gpointer data)
 {
 	gboolean old = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled");
 	purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/debug/enabled", !old);
@@ -337,8 +342,9 @@ pidgin_application_debug(GSimpleAction *
 
 
 static void
-pidgin_application_disable_account(GSimpleAction *simple, GVariant *parameter,
-                                   gpointer data)
+pidgin_application_disable_account(G_GNUC_UNUSED GSimpleAction *simple,
+                                   GVariant *parameter,
+                                   G_GNUC_UNUSED gpointer data)
 {
 	PurpleAccount *account = NULL;
 	PurpleAccountManager *manager = NULL;
@@ -365,8 +371,8 @@ pidgin_application_donate(G_GNUC_UNUSED 
 }
 
 static void
-pidgin_application_edit_account(GSimpleAction *simple, GVariant *parameter,
-                                gpointer data)
+pidgin_application_edit_account(G_GNUC_UNUSED GSimpleAction *simple,
+                                GVariant *parameter, gpointer data)
 {
 	PidginApplication *application = data;
 	PurpleAccount *account = NULL;
@@ -387,8 +393,9 @@ pidgin_application_edit_account(GSimpleA
 }
 
 static void
-pidgin_application_enable_account(GSimpleAction *simple, GVariant *parameter,
-                                  gpointer data)
+pidgin_application_enable_account(G_GNUC_UNUSED GSimpleAction *simple,
+                                  GVariant *parameter,
+                                  G_GNUC_UNUSED gpointer data)
 {
 	PurpleAccount *account = NULL;
 	PurpleAccountManager *manager = NULL;
@@ -407,29 +414,33 @@ pidgin_application_enable_account(GSimpl
 }
 
 static void
-pidgin_application_file_transfers(GSimpleAction *simple, GVariant *parameter,
-                                  gpointer data)
+pidgin_application_file_transfers(G_GNUC_UNUSED GSimpleAction *simple,
+                                  G_GNUC_UNUSED GVariant *parameter,
+                                  G_GNUC_UNUSED gpointer data)
 {
 	pidgin_xfer_dialog_show(NULL);
 }
 
 static void
-pidgin_application_get_user_info(GSimpleAction *simple, GVariant *parameter,
-                                 gpointer data)
+pidgin_application_get_user_info(G_GNUC_UNUSED GSimpleAction *simple,
+                                 G_GNUC_UNUSED GVariant *parameter,
+                                 G_GNUC_UNUSED gpointer data)
 {
 	pidgin_dialogs_info();
 }
 
 static void
-pidgin_application_join_chat(GSimpleAction *simple, GVariant *parameter,
-                             gpointer data)
+pidgin_application_join_chat(G_GNUC_UNUSED GSimpleAction *simple,
+                             G_GNUC_UNUSED GVariant *parameter,
+                             G_GNUC_UNUSED gpointer data)
 {
 	pidgin_blist_joinchat_show();
 }
 
 static void
-pidgin_application_new_message(GSimpleAction *simple, GVariant *parameter,
-                               gpointer data)
+pidgin_application_new_message(G_GNUC_UNUSED GSimpleAction *simple,
+                               G_GNUC_UNUSED GVariant *parameter,
+                               G_GNUC_UNUSED gpointer data)
 {
 	pidgin_dialogs_im();
 }
@@ -444,15 +455,16 @@ pidgin_application_new_status(G_GNUC_UNU
 }
 
 static void
-pidgin_application_online_help(GSimpleAction *simple, GVariant *parameter,
-                               gpointer data)
+pidgin_application_online_help(G_GNUC_UNUSED GSimpleAction *simple,
+                               G_GNUC_UNUSED GVariant *parameter,
+                               G_GNUC_UNUSED gpointer data)
 {
 	purple_notify_uri(NULL, PURPLE_WEBSITE "help");
 }
 
 static void
-pidgin_application_plugins(GSimpleAction *simple, GVariant *parameter,
-                           gpointer data)
+pidgin_application_plugins(G_GNUC_UNUSED GSimpleAction *simple,
+                           G_GNUC_UNUSED GVariant *parameter, gpointer data)
 {
 	PidginApplication *application = data;
 	static GtkWidget *dialog = NULL;
@@ -467,22 +479,25 @@ pidgin_application_plugins(GSimpleAction
 }
 
 static void
-pidgin_application_preferences(GSimpleAction *simple, GVariant *parameter,
-                               gpointer data)
+pidgin_application_preferences(G_GNUC_UNUSED GSimpleAction *simple,
+                               G_GNUC_UNUSED GVariant *parameter,
+                               G_GNUC_UNUSED gpointer data)
 {
 	pidgin_prefs_show();
 }
 
 static void
-pidgin_application_privacy(GSimpleAction *simple, GVariant *parameter,
-                           gpointer data)
+pidgin_application_privacy(G_GNUC_UNUSED GSimpleAction *simple,
+                           G_GNUC_UNUSED GVariant *parameter,
+                           G_GNUC_UNUSED gpointer data)
 {
 	pidgin_privacy_dialog_show();
 }
 
 static void
-pidgin_application_quit(GSimpleAction *simple, GVariant *parameter,
-                        gpointer data)
+pidgin_application_quit(G_GNUC_UNUSED GSimpleAction *simple,
+                        G_GNUC_UNUSED GVariant *parameter,
+                        G_GNUC_UNUSED gpointer data)
 {
 	GPluginManager *manager = NULL;
 
@@ -498,22 +513,25 @@ pidgin_application_quit(GSimpleAction *s
 }
 
 static void
-pidgin_application_room_list(GSimpleAction *simple, GVariant *parameter,
-                             gpointer data)
+pidgin_application_room_list(G_GNUC_UNUSED GSimpleAction *simple,
+                             G_GNUC_UNUSED GVariant *parameter,
+                             G_GNUC_UNUSED gpointer data)
 {
 	pidgin_roomlist_dialog_show();
 }
 
 static void
-pidgin_application_set_mood(GSimpleAction *simple, GVariant *parameter,
-                            gpointer data)
+pidgin_application_set_mood(G_GNUC_UNUSED GSimpleAction *simple,
+                            G_GNUC_UNUSED GVariant *parameter,
+                            G_GNUC_UNUSED gpointer data)
 {
 	pidgin_mood_dialog_show(NULL);
 }
 
 static void
-pidgin_application_show_status_manager(GSimpleAction *simple,
-                                       GVariant *parameter, gpointer data)
+pidgin_application_show_status_manager(G_GNUC_UNUSED GSimpleAction *simple,
+                                       G_GNUC_UNUSED GVariant *parameter,
+                                       gpointer data)
 {
 	PidginApplication *application = data;
 	static GtkWidget *manager = NULL;
@@ -667,7 +685,9 @@ pidgin_application_signed_on_cb(PurpleAc
 }
 
 static void
-pidgin_application_signed_off_cb(PurpleAccount *account, gpointer data) {
+pidgin_application_signed_off_cb(G_GNUC_UNUSED PurpleAccount *account,
+                                 gpointer data)
+{
 	PidginApplication *application = PIDGIN_APPLICATION(data);
 	gboolean should_disable_chat = TRUE, should_disable_room_list = TRUE;
 	GList *connections = NULL, *l = NULL;
@@ -914,7 +934,7 @@ pidgin_application_startup(GApplication 
 }
 
 static void
-pidgin_application_activate(GApplication *application) {
+pidgin_application_activate(G_GNUC_UNUSED GApplication *application) {
 	GtkWidget *convwin = pidgin_display_window_get_default();
 
 	if(GTK_IS_WINDOW(convwin)) {
@@ -947,7 +967,7 @@ pidgin_application_command_line(GApplica
 }
 
 static gint
-pidgin_application_handle_local_options(GApplication *application,
+pidgin_application_handle_local_options(G_GNUC_UNUSED GApplication *application,
                                         GVariantDict *options)
 {
 	if (g_variant_dict_contains(options, "version")) {
diff --git a/pidgin/pidginattachment.c b/pidgin/pidginattachment.c
--- a/pidgin/pidginattachment.c
+++ b/pidgin/pidginattachment.c
@@ -141,7 +141,7 @@ pidgin_attachment_set_property(GObject *
 }
 
 static void
-pidgin_attachment_init(PidginAttachment *attachment) {
+pidgin_attachment_init(G_GNUC_UNUSED PidginAttachment *attachment) {
 }
 
 static void
diff --git a/pidgin/pidginavatar.c b/pidgin/pidginavatar.c
--- a/pidgin/pidginavatar.c
+++ b/pidgin/pidginavatar.c
@@ -198,8 +198,8 @@ pidgin_avatar_save_response_cb(GtkNative
 }
 
 static void
-pidgin_avatar_save_cb(GSimpleAction *action, GVariant *parameter,
-                      gpointer data)
+pidgin_avatar_save_cb(G_GNUC_UNUSED GSimpleAction *action,
+                      G_GNUC_UNUSED GVariant *parameter, gpointer data)
 {
 	PidginAvatar *avatar = PIDGIN_AVATAR(data);
 	PurpleBuddy *buddy = NULL;
@@ -279,8 +279,8 @@ pidgin_avatar_set_custom_response_cb(Gtk
 }
 
 static void
-pidgin_avatar_set_custom_cb(GSimpleAction *action, GVariant *parameter,
-                            gpointer data)
+pidgin_avatar_set_custom_cb(G_GNUC_UNUSED GSimpleAction *action,
+                            G_GNUC_UNUSED GVariant *parameter, gpointer data)
 {
 	PidginAvatar *avatar = PIDGIN_AVATAR(data);
 	GtkFileChooserNative *native = NULL;
@@ -300,8 +300,8 @@ pidgin_avatar_set_custom_cb(GSimpleActio
 }
 
 static void
-pidgin_avatar_clear_custom_cb(GSimpleAction *action, GVariant *parameter,
-                              gpointer data)
+pidgin_avatar_clear_custom_cb(G_GNUC_UNUSED GSimpleAction *action,
+                              G_GNUC_UNUSED GVariant *parameter, gpointer data)
 {
 	PidginAvatar *avatar = PIDGIN_AVATAR(data);
 	PurpleBuddy *buddy = NULL;
@@ -367,7 +367,9 @@ pidgin_avatar_button_press_handler(G_GNU
  * cause issues if a buddy is changed but a conversation is not and vice versa.
  */
 static void
-pidgin_avatar_buddy_icon_updated(GObject *obj, GParamSpec *pspec, gpointer d) {
+pidgin_avatar_buddy_icon_updated(G_GNUC_UNUSED GObject *obj,
+                                 G_GNUC_UNUSED GParamSpec *pspec, gpointer d)
+{
 	PidginAvatar *avatar = PIDGIN_AVATAR(d);
 
 	pidgin_avatar_update(avatar);
@@ -380,7 +382,8 @@ pidgin_avatar_buddy_icon_updated(GObject
  * cause issues if a buddy is changed but a conversation is not and vice versa.
  */
 static void
-pidgin_avatar_conversation_updated(GObject *obj, GParamSpec *pspec, gpointer d)
+pidgin_avatar_conversation_updated(G_GNUC_UNUSED GObject *obj,
+                                   G_GNUC_UNUSED GParamSpec *pspec, gpointer d)
 {
 	PidginAvatar *avatar = PIDGIN_AVATAR(d);
 
diff --git a/pidgin/pidgincommands.c b/pidgin/pidgincommands.c
--- a/pidgin/pidgincommands.c
+++ b/pidgin/pidgincommands.c
@@ -28,8 +28,9 @@
  * Command Implementations
  *****************************************************************************/
 static PurpleCmdRet
-say_command_cb(PurpleConversation *conv,
-              const char *cmd, char **args, char **error, void *data)
+say_command_cb(PurpleConversation *conv, G_GNUC_UNUSED const char *cmd,
+               char **args, G_GNUC_UNUSED char **error,
+               G_GNUC_UNUSED gpointer data)
 {
 	purple_conversation_send(conv, args[0]);
 
@@ -37,8 +38,9 @@ say_command_cb(PurpleConversation *conv,
 }
 
 static PurpleCmdRet
-me_command_cb(PurpleConversation *conv,
-              const char *cmd, char **args, char **error, void *data)
+me_command_cb(PurpleConversation *conv, G_GNUC_UNUSED const char *cmd,
+              char **args, G_GNUC_UNUSED char **error,
+              G_GNUC_UNUSED gpointer data)
 {
 	char *tmp;
 
@@ -50,8 +52,9 @@ me_command_cb(PurpleConversation *conv,
 }
 
 static PurpleCmdRet
-debug_command_cb(PurpleConversation *conv,
-                 const char *cmd, char **args, char **error, void *data)
+debug_command_cb(PurpleConversation *conv, G_GNUC_UNUSED const char *cmd,
+                 char **args, G_GNUC_UNUSED char **error,
+                 G_GNUC_UNUSED gpointer data)
 {
 	char *tmp, *markup;
 
@@ -126,16 +129,18 @@ debug_command_cb(PurpleConversation *con
 }
 
 static PurpleCmdRet
-clear_command_cb(PurpleConversation *conv,
-                 const char *cmd, char **args, char **error, void *data)
+clear_command_cb(PurpleConversation *conv, G_GNUC_UNUSED const char *cmd,
+                 G_GNUC_UNUSED char **args, G_GNUC_UNUSED char **error,
+                 G_GNUC_UNUSED gpointer data)
 {
 	purple_conversation_clear_message_history(conv);
 	return PURPLE_CMD_RET_OK;
 }
 
 static PurpleCmdRet
-clearall_command_cb(PurpleConversation *conv,
-                 const char *cmd, char **args, char **error, void *data)
+clearall_command_cb(G_GNUC_UNUSED PurpleConversation *conv,
+                    G_GNUC_UNUSED const char *cmd, G_GNUC_UNUSED char **args,
+                    G_GNUC_UNUSED char **error, G_GNUC_UNUSED gpointer data)
 {
 	PurpleConversationManager *manager;
 	GList *list;
@@ -155,8 +160,9 @@ clearall_command_cb(PurpleConversation *
 }
 
 static PurpleCmdRet
-help_command_cb(PurpleConversation *conv,
-                 const char *cmd, char **args, char **error, void *data)
+help_command_cb(PurpleConversation *conv, G_GNUC_UNUSED const char *cmd,
+                char **args, G_GNUC_UNUSED char **error,
+                G_GNUC_UNUSED gpointer data)
 {
 	GList *l, *text;
 	GString *s;
diff --git a/pidgin/pidgindebug.c b/pidgin/pidgindebug.c
--- a/pidgin/pidgindebug.c
+++ b/pidgin/pidgindebug.c
@@ -173,7 +173,7 @@ save_response_cb(GtkNativeDialog *self, 
 }
 
 static void
-save_cb(GtkWidget *w, PidginDebugWindow *win)
+save_cb(G_GNUC_UNUSED GtkWidget *w, PidginDebugWindow *win)
 {
 	GtkFileChooserNative *filesel;
 
@@ -191,7 +191,7 @@ save_cb(GtkWidget *w, PidginDebugWindow 
 }
 
 static void
-clear_cb(GtkWidget *w, PidginDebugWindow *win)
+clear_cb(G_GNUC_UNUSED GtkWidget *w, PidginDebugWindow *win)
 {
 	gtk_text_buffer_set_text(win->buffer, "", 0);
 }
@@ -320,7 +320,8 @@ regex_toggle_filter(PidginDebugWindow *w
 }
 
 static void
-regex_pref_filter_cb(const gchar *name, PurplePrefType type,
+regex_pref_filter_cb(G_GNUC_UNUSED const gchar *name,
+                     G_GNUC_UNUSED PurplePrefType type,
 					 gconstpointer val, gpointer data)
 {
 	PidginDebugWindow *win = (PidginDebugWindow *)data;
@@ -337,7 +338,8 @@ regex_pref_filter_cb(const gchar *name, 
 }
 
 static void
-regex_pref_invert_cb(const gchar *name, PurplePrefType type,
+regex_pref_invert_cb(G_GNUC_UNUSED const gchar *name,
+                     G_GNUC_UNUSED PurplePrefType type,
 					 gconstpointer val, gpointer data)
 {
 	PidginDebugWindow *win = (PidginDebugWindow *)data;
@@ -351,7 +353,8 @@ regex_pref_invert_cb(const gchar *name, 
 }
 
 static void
-regex_pref_highlight_cb(const gchar *name, PurplePrefType type,
+regex_pref_highlight_cb(G_GNUC_UNUSED const gchar *name,
+                        G_GNUC_UNUSED PurplePrefType type,
 						gconstpointer val, gpointer data)
 {
 	PidginDebugWindow *win = (PidginDebugWindow *)data;
@@ -365,7 +368,7 @@ regex_pref_highlight_cb(const gchar *nam
 }
 
 static void
-regex_changed_cb(GtkWidget *w, PidginDebugWindow *win) {
+regex_changed_cb(G_GNUC_UNUSED GtkWidget *w, PidginDebugWindow *win) {
 	const gchar *text;
 
 	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(win->filter))) {
@@ -459,7 +462,7 @@ debug_window_set_filter_level(PidginDebu
 	gboolean scroll;
 	int i;
 
-	if (level != gtk_drop_down_get_selected(GTK_DROP_DOWN(win->filterlevel))) {
+	if (level != (int)gtk_drop_down_get_selected(GTK_DROP_DOWN(win->filterlevel))) {
 		gtk_drop_down_set_selected(GTK_DROP_DOWN(win->filterlevel), level);
 	}
 
@@ -476,7 +479,9 @@ debug_window_set_filter_level(PidginDebu
 }
 
 static void
-filter_level_pref_changed(const char *name, PurplePrefType type, gconstpointer value, gpointer data)
+filter_level_pref_changed(G_GNUC_UNUSED const char *name,
+                          G_GNUC_UNUSED PurplePrefType type,
+                          gconstpointer value, gpointer data)
 {
 	PidginDebugWindow *win = data;
 	int level = GPOINTER_TO_INT(value);
@@ -681,7 +686,7 @@ static void
 debug_enabled_cb(G_GNUC_UNUSED const gchar *name,
                  G_GNUC_UNUSED PurplePrefType type,
                  gconstpointer value,
-                 gpointer data)
+                 G_GNUC_UNUSED gpointer data)
 {
 	debug_enabled_timer = g_timeout_add(0, debug_enabled_timeout_cb,
 	                                    (gpointer)value);
diff --git a/pidgin/pidgindisplaywindow.c b/pidgin/pidgindisplaywindow.c
--- a/pidgin/pidgindisplaywindow.c
+++ b/pidgin/pidgindisplaywindow.c
@@ -348,7 +348,7 @@ pidgin_display_window_selection_changed(
 }
 
 static gboolean
-pidgin_display_window_key_pressed_cb(GtkEventControllerKey *controller,
+pidgin_display_window_key_pressed_cb(G_GNUC_UNUSED GtkEventControllerKey *controller,
                                      guint keyval,
                                      G_GNUC_UNUSED guint keycode,
                                      GdkModifierType state,
diff --git a/pidgin/pidginmessage.c b/pidgin/pidginmessage.c
--- a/pidgin/pidginmessage.c
+++ b/pidgin/pidginmessage.c
@@ -268,7 +268,7 @@ pidgin_message_set_property(GObject *obj
 }
 
 static void
-pidgin_message_init(PidginMessage *message) {
+pidgin_message_init(G_GNUC_UNUSED PidginMessage *message) {
 }
 
 static void
diff --git a/pidgin/pidginnotificationlist.c b/pidgin/pidginnotificationlist.c
--- a/pidgin/pidginnotificationlist.c
+++ b/pidgin/pidginnotificationlist.c
@@ -65,7 +65,9 @@ pidgin_notification_list_unknown_notific
 }
 
 static GtkWidget *
-pidgin_notification_list_create_widget_func(gpointer item, gpointer data) {
+pidgin_notification_list_create_widget_func(gpointer item,
+                                            G_GNUC_UNUSED gpointer data)
+{
 	PurpleNotification *notification = item;
 	GtkWidget *widget = NULL;
 
diff --git a/pidgin/pidginplugininfo.c b/pidgin/pidginplugininfo.c
--- a/pidgin/pidginplugininfo.c
+++ b/pidgin/pidginplugininfo.c
@@ -73,7 +73,7 @@ pidgin_plugin_info_set_property(GObject 
 }
 
 static void
-pidgin_plugin_info_init(PidginPluginInfo *info) {
+pidgin_plugin_info_init(G_GNUC_UNUSED PidginPluginInfo *info) {
 }
 
 static void
diff --git a/pidgin/pidginpluginsmenu.c b/pidgin/pidginpluginsmenu.c
--- a/pidgin/pidginpluginsmenu.c
+++ b/pidgin/pidginpluginsmenu.c
@@ -128,7 +128,7 @@ pidgin_plugins_menu_plugin_unloaded_cb(G
  * GMenuModel Implementation
  *****************************************************************************/
 static gboolean
-pidgin_plugins_menu_is_mutable(GMenuModel *model) {
+pidgin_plugins_menu_is_mutable(G_GNUC_UNUSED GMenuModel *model) {
 	return TRUE;
 }
 
diff --git a/pidgin/pidginpresenceicon.c b/pidgin/pidginpresenceicon.c
--- a/pidgin/pidginpresenceicon.c
+++ b/pidgin/pidginpresenceicon.c
@@ -57,7 +57,8 @@ pidgin_presence_icon_update(PidginPresen
 }
 
 static void
-pidgin_presence_icon_active_status_changed_cb(GObject *obj, GParamSpec *pspec,
+pidgin_presence_icon_active_status_changed_cb(G_GNUC_UNUSED GObject *obj,
+                                              G_GNUC_UNUSED GParamSpec *pspec,
                                               gpointer data)
 {
 	pidgin_presence_icon_update(PIDGIN_PRESENCE_ICON(data));
diff --git a/pidgin/pidginstatuseditor.c b/pidgin/pidginstatuseditor.c
--- a/pidgin/pidginstatuseditor.c
+++ b/pidgin/pidginstatuseditor.c
@@ -151,7 +151,9 @@ pidgin_status_editor_response_cb(GtkDial
 }
 
 static void
-pidgin_status_editor_title_changed_cb(GtkEditable *editable, gpointer data) {
+pidgin_status_editor_title_changed_cb(G_GNUC_UNUSED GtkEditable *editable,
+                                      gpointer data)
+{
 	PidginStatusEditor *editor = data;
 	gboolean title_changed = FALSE, sensitive = FALSE;
 	const gchar *title = NULL;
diff --git a/pidgin/prefs/pidgincredentialprefs.c b/pidgin/prefs/pidgincredentialprefs.c
--- a/pidgin/prefs/pidgincredentialprefs.c
+++ b/pidgin/prefs/pidgincredentialprefs.c
@@ -85,7 +85,7 @@ pidgin_credential_prefs_sort_rows(GtkLis
 }
 
 static void
-pidgin_credential_prefs_list_row_activated_cb(GtkListBox *box,
+pidgin_credential_prefs_list_row_activated_cb(G_GNUC_UNUSED GtkListBox *box,
                                               GtkListBoxRow *row,
                                               G_GNUC_UNUSED gpointer data)
 {
@@ -131,8 +131,8 @@ pidgin_credential_prefs_set_active_provi
 }
 
 static void
-pidgin_credential_prefs_active_provider_changed_cb(PurpleCredentialManager *manager,
-                                                   PurpleCredentialProvider *previous,
+pidgin_credential_prefs_active_provider_changed_cb(G_GNUC_UNUSED PurpleCredentialManager *manager,
+                                                   G_GNUC_UNUSED PurpleCredentialProvider *previous,
                                                    PurpleCredentialProvider *current,
                                                    gpointer data)
 {
diff --git a/pidgin/prefs/pidginnetworkprefs.c b/pidgin/prefs/pidginnetworkprefs.c
--- a/pidgin/prefs/pidginnetworkprefs.c
+++ b/pidgin/prefs/pidginnetworkprefs.c
@@ -54,7 +54,7 @@ G_DEFINE_TYPE(PidginNetworkPrefs, pidgin
  * Helpers
  *****************************************************************************/
 static void
-network_ip_changed(GtkEditable *editable, gpointer data)
+network_ip_changed(GtkEditable *editable, G_GNUC_UNUSED gpointer data)
 {
 	const gchar *text = gtk_editable_get_text(editable);
 	GtkWidget *widget = GTK_WIDGET(editable);
diff --git a/pidgin/prefs/pidginprefs.c b/pidgin/prefs/pidginprefs.c
--- a/pidgin/prefs/pidginprefs.c
+++ b/pidgin/prefs/pidginprefs.c
@@ -51,7 +51,7 @@ G_DEFINE_TYPE(PidginPrefsWindow, pidgin_
  * Helpers
  *****************************************************************************/
 static void
-update_spin_value(GtkWidget *w, GtkWidget *spin)
+update_spin_value(G_GNUC_UNUSED GtkWidget *w, GtkWidget *spin)
 {
 	const char *key = g_object_get_data(G_OBJECT(spin), "val");
 	int value;
@@ -475,7 +475,7 @@ pidgin_prefs_bind_expander_row(const gch
 }
 
 static void
-delete_prefs(GtkWidget *asdf, void *gdsa)
+delete_prefs(G_GNUC_UNUSED GtkWidget *asdf, G_GNUC_UNUSED void *gdsa)
 {
 	/* Close any request dialogs */
 	purple_request_close_with_handle(prefs);
diff --git a/pidgin/prefs/pidginvvprefs.c b/pidgin/prefs/pidginvvprefs.c
--- a/pidgin/prefs/pidginvvprefs.c
+++ b/pidgin/prefs/pidginvvprefs.c
@@ -141,7 +141,7 @@ create_voice_pipeline(PidginVVPrefs *pre
 }
 
 static void
-on_volume_change_cb(GtkWidget *w, gdouble value, gpointer data)
+on_volume_change_cb(GtkWidget *w, G_GNUC_UNUSED gdouble value, gpointer data)
 {
 	PidginVVPrefs *prefs = PIDGIN_VV_PREFS(data);
 	GstElement *volume;
@@ -173,7 +173,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
 }
 
 static gboolean
-gst_bus_cb(GstBus *bus, GstMessage *msg, gpointer data)
+gst_bus_cb(G_GNUC_UNUSED GstBus *bus, GstMessage *msg, gpointer data)
 {
 	PidginVVPrefs *prefs = PIDGIN_VV_PREFS(data);
 
@@ -212,7 +212,7 @@ gst_bus_cb(GstBus *bus, GstMessage *msg,
 }
 
 static void
-voice_test_destroy_cb(GtkWidget *w, gpointer data)
+voice_test_destroy_cb(G_GNUC_UNUSED GtkWidget *w, gpointer data)
 {
 	PidginVVPrefs *prefs = PIDGIN_VV_PREFS(data);
 
@@ -262,7 +262,8 @@ toggle_voice_test_cb(GtkToggleButton *te
 }
 
 static void
-volume_changed_cb(GtkScaleButton *button, gdouble value, gpointer data)
+volume_changed_cb(G_GNUC_UNUSED GtkScaleButton *button, gdouble value,
+                  G_GNUC_UNUSED gpointer data)
 {
 	purple_prefs_set_int("/purple/media/audio/volume/input", value * 100);
 }
@@ -338,7 +339,7 @@ create_video_pipeline(void)
 }
 
 static void
-video_test_destroy_cb(GtkWidget *w, gpointer data)
+video_test_destroy_cb(G_GNUC_UNUSED GtkWidget *w, gpointer data)
 {
 	PidginVVPrefs *prefs = PIDGIN_VV_PREFS(data);
 
@@ -389,7 +390,7 @@ toggle_video_test_cb(GtkToggleButton *te
 }
 
 static void
-vv_device_changed_cb(const gchar *name, PurplePrefType type,
+vv_device_changed_cb(const gchar *name, G_GNUC_UNUSED PurplePrefType type,
                      gconstpointer value, gpointer data)
 {
 	PidginVVPrefs *prefs = PIDGIN_VV_PREFS(data);
@@ -465,7 +466,8 @@ bind_vv_frame(PidginVVPrefs *prefs, Pidg
 }
 
 static void
-device_list_changed_cb(PurpleMediaManager *manager, GtkWidget *widget)
+device_list_changed_cb(G_GNUC_UNUSED PurpleMediaManager *manager,
+                       GtkWidget *widget)
 {
 	PidginPrefCombo *combo;
 	PurpleMediaElementType media_type;
