pidgin/pidgin

Split account display from chooser into its own widget

14 months ago, Elliott Sales de Andrade
3c481d9cc840
Split account display from chooser into its own widget

This will allow re-using it elsewhere when we need to display the account.

Testing Done:
Compiled and opened Add a Buddy dialog, Room List, etc. that used the chooser.

Reviewed at https://reviews.imfreedom.org/r/2360/
/*
* Purple - Internet Messaging Library
* Copyright (C) Pidgin Developers <devel@pidgin.im>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <https://www.gnu.org/licenses/>.
*/
#include <glib.h>
#include <purple.h>
/******************************************************************************
* Tests
*****************************************************************************/
static void
test_purple_conversation_member_new(void) {
PurpleContactInfo *info = NULL;
PurpleConversationMember *member = NULL;
info = purple_contact_info_new(NULL);
g_assert_true(PURPLE_IS_CONTACT_INFO(info));
member = purple_conversation_member_new(info);
g_assert_true(PURPLE_IS_CONVERSATION_MEMBER(member));
g_clear_object(&info);
g_clear_object(&member);
}
static void
test_purple_conversation_member_properties(void) {
PurpleContactInfo *info = NULL;
PurpleContactInfo *info1 = NULL;
PurpleConversationMember *member = NULL;
PurpleTags *tags = NULL;
PurpleTypingState typing_state = PURPLE_TYPING_STATE_NONE;
info = purple_contact_info_new("abc123");
/* Use g_object_new so we can test setting properties by name. All of them
* call the setter methods, so by doing it this way we exercise more of the
* code.
*/
member = g_object_new(
PURPLE_TYPE_CONVERSATION_MEMBER,
"contact-info", info,
"typing-state", PURPLE_TYPING_STATE_TYPING,
NULL);
/* Now use g_object_get to read all of the properties. */
g_object_get(member,
"contact-info", &info1,
"tags", &tags,
"typing-state", &typing_state,
NULL);
/* Compare all the things. */
g_assert_true(info1 == info);
g_assert_true(PURPLE_IS_TAGS(tags));
g_assert_cmpint(typing_state, ==, PURPLE_TYPING_STATE_TYPING);
/* Free/unref all the things. */
g_clear_object(&info1);
g_clear_object(&tags);
g_clear_object(&info);
g_clear_object(&member);
}
/******************************************************************************
* Typing State Timeout
*****************************************************************************/
static void
test_purple_conversation_manager_timeout_notify(G_GNUC_UNUSED GObject *obj,
G_GNUC_UNUSED GParamSpec *pspec,
gpointer data)
{
GMainLoop *loop = data;
static guint count = 0;
/* Increment count each time we're called. We're expecting to be called
* twice, so after that quit the main loop.
*/
count++;
if(count >= 2) {
g_main_loop_quit(loop);
}
}
static gboolean
test_purple_conversation_manager_timeout_fail_safe(gpointer data) {
GMainLoop *loop = data;
g_warning("fail safe triggered");
g_main_loop_quit(loop);
return G_SOURCE_REMOVE;
}
static void
test_purple_conversation_member_typing_state_timeout(void) {
PurpleContactInfo *info = NULL;
PurpleConversationMember *member = NULL;
PurpleTypingState typing_state = PURPLE_TYPING_STATE_TYPING;
GMainLoop *loop = NULL;
/* Create the main loop as we'll need it to let the timeout fire. */
loop = g_main_loop_new(NULL, FALSE);
/* Create the member and add a notify callback on the typing-state property
* so we can check it and exit the main loop.
*/
info = purple_contact_info_new(NULL);
member = purple_conversation_member_new(info);
g_signal_connect(member, "notify::typing-state",
G_CALLBACK(test_purple_conversation_manager_timeout_notify),
loop);
/* Set the state to typing with a timeout of 1 second. */
purple_conversation_member_set_typing_state(member,
PURPLE_TYPING_STATE_TYPING, 1);
/* Add a fail safe timeout at 2 seconds to make sure the test won't get
* stuck waiting forever.
*/
g_timeout_add_seconds(2,
test_purple_conversation_manager_timeout_fail_safe,
loop);
/* Run the main loop and let the timeouts fire. */
g_main_loop_run(loop);
/* Verify that our state got reset back to PURPLE_TYPING_STATE_NONE. */
typing_state = purple_conversation_member_get_typing_state(member);
g_assert_cmpint(typing_state, ==, PURPLE_TYPING_STATE_NONE);
/* Clean everything up. */
g_clear_object(&info);
g_clear_object(&member);
}
/******************************************************************************
* Main
*****************************************************************************/
gint
main(gint argc, gchar *argv[]) {
g_test_init(&argc, &argv, NULL);
g_test_add_func("/conversation-member/new",
test_purple_conversation_member_new);
g_test_add_func("/conversation-member/properties",
test_purple_conversation_member_properties);
g_test_add_func("/conversation-member/typing-state/timeout",
test_purple_conversation_member_typing_state_timeout);
return g_test_run();
}