Mon, 10 Jul 2017 20:09:13 -0500
gtkmedia: Port Hold, Mute, & Pause buttons to use GActions
This patch ports the Hold, Mute, and Pause buttons to toggle the
GActions instead of having separate toggled handlers. This allows
for menu items or plugins to more easily access these actions.
| pidgin/gtkmedia.c | file | annotate | diff | comparison | revisions |
--- a/pidgin/gtkmedia.c Mon Jul 10 18:50:02 2017 -0500 +++ b/pidgin/gtkmedia.c Mon Jul 10 20:09:13 2017 -0500 @@ -201,30 +201,45 @@ } static void -pidgin_media_hold_toggled(GtkToggleButton *toggle, PidginMedia *media) +pidgin_media_hold_change_state_cb(GSimpleAction *action, GVariant *value, + gpointer user_data) { + PidginMedia *media = PIDGIN_MEDIA(user_data); + purple_media_stream_info(media->priv->media, - gtk_toggle_button_get_active(toggle) ? + g_variant_get_boolean(value) ? PURPLE_MEDIA_INFO_HOLD : PURPLE_MEDIA_INFO_UNHOLD, NULL, NULL, TRUE); + + g_simple_action_set_state(action, value); } static void -pidgin_media_mute_toggled(GtkToggleButton *toggle, PidginMedia *media) +pidgin_media_mute_change_state_cb(GSimpleAction *action, GVariant *value, + gpointer user_data) { + PidginMedia *media = PIDGIN_MEDIA(user_data); + purple_media_stream_info(media->priv->media, - gtk_toggle_button_get_active(toggle) ? + g_variant_get_boolean(value) ? PURPLE_MEDIA_INFO_MUTE : PURPLE_MEDIA_INFO_UNMUTE, NULL, NULL, TRUE); + + g_simple_action_set_state(action, value); } static void -pidgin_media_pause_toggled(GtkToggleButton *toggle, PidginMedia *media) +pidgin_media_pause_change_state_cb(GSimpleAction *action, GVariant *value, + gpointer user_data) { + PidginMedia *media = PIDGIN_MEDIA(user_data); + purple_media_stream_info(media->priv->media, - gtk_toggle_button_get_active(toggle) ? + g_variant_get_boolean(value) ? PURPLE_MEDIA_INFO_PAUSE : PURPLE_MEDIA_INFO_UNPAUSE, NULL, NULL, TRUE); + + g_simple_action_set_state(action, value); } static gboolean @@ -275,6 +290,9 @@ 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 }, }; static const gchar *media_menu = @@ -925,9 +943,9 @@ gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->hold, FALSE, FALSE, 0); gtk_widget_show(gtkmedia->priv->hold); - g_signal_connect(gtkmedia->priv->hold, "toggled", - G_CALLBACK(pidgin_media_hold_toggled), - gtkmedia); + gtk_actionable_set_action_name( + GTK_ACTIONABLE(gtkmedia->priv->hold), + "win.Hold"); } else { send_widget = gtkmedia->priv->send_widget; button_widget = gtkmedia->priv->button_widget; @@ -992,9 +1010,9 @@ gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->pause, FALSE, FALSE, 0); gtk_widget_show(gtkmedia->priv->pause); - g_signal_connect(gtkmedia->priv->pause, "toggled", - G_CALLBACK(pidgin_media_pause_toggled), - gtkmedia); + gtk_actionable_set_action_name( + GTK_ACTIONABLE(gtkmedia->priv->pause), + "win.Pause"); gtkmedia->priv->local_video = local_video; } @@ -1010,9 +1028,9 @@ gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->mute, FALSE, FALSE, 0); gtk_widget_show(gtkmedia->priv->mute); - g_signal_connect(gtkmedia->priv->mute, "toggled", - G_CALLBACK(pidgin_media_mute_toggled), - gtkmedia); + gtk_actionable_set_action_name( + GTK_ACTIONABLE(gtkmedia->priv->mute), + "win.Mute"); gtk_box_pack_end(GTK_BOX(recv_widget), pidgin_media_add_audio_widget(gtkmedia,