soc.2009.vulture: 8f96c050: Show correct fields for specified prpl i...
gdick at soc.pidgin.im
gdick at soc.pidgin.im
Tue Jul 7 19:05:39 EDT 2009
-----------------------------------------------------------------
Revision: 8f96c050fc8ae5d4a03592dfff86fe2de8f355db
Ancestor: 694f93d71ba6c93f3df22db6cd643ee2be43eb3a
Author: gdick at soc.pidgin.im
Date: 2009-07-07T15:37:49
Branch: im.pidgin.soc.2009.vulture
URL: http://d.pidgin.im/viewmtn/revision/info/8f96c050fc8ae5d4a03592dfff86fe2de8f355db
Modified files:
vulture/purpleconv.c vulture/purpleconv.h
vulture/purplequeue.c vulture/purplequeue.h
vulture/resource.h vulture/vulture-res.rc
vulture/vultureblist.c vulture/vulturedlg.c
vulture/vulturedlg.h
ChangeLog:
Show correct fields for specified prpl in join-chat dialogue.
-------------- next part --------------
============================================================
--- vulture/purpleconv.c 71fe111525db627aec38394a42085bd1d0757770
+++ vulture/purpleconv.c 602a1ec80af31223f69b4b588a64bd511580c151
@@ -200,3 +200,26 @@ LPTSTR PurpleIMGetStatusText(PurpleConve
return PurpleBuddyGetStatusText(purple_find_buddy(lpconv->account, lpconv->name));
}
+
+
+/**
+ * Gets the parameters required to specify a chat for a given account.
+ *
+ * @param lppac Account.
+ */
+GList* PurpleGetChatFields(PurpleAccount *lppac)
+{
+ PurpleConnection *lppconn;
+ GList* (*lpfnChatInfo)(PurpleConnection*);
+
+ if(!lppac)
+ return NULL;
+
+ lppconn = purple_account_get_connection(lppac);
+ lpfnChatInfo = PURPLE_PLUGIN_PROTOCOL_INFO(lppconn->prpl)->chat_info;
+
+ if(lpfnChatInfo)
+ return lpfnChatInfo(lppconn);
+
+ return NULL;
+}
============================================================
--- vulture/purpleconv.h 4c41ac97acf8ccd812df3e714c39922bf1e849d8
+++ vulture/purpleconv.h 536ee563a286c8473bedd90f8ffdf5bb6c11faae
@@ -36,6 +36,7 @@ LPTSTR PurpleIMGetStatusText(PurpleConve
void PurpleConvChanged(PurpleConversation *lpconv, PurpleConvUpdateType pcut);
LPTSTR PurpleConvGetTitle(PurpleConversation *lpconv);
LPTSTR PurpleIMGetStatusText(PurpleConversation *lpconv);
+GList* PurpleGetChatFields(PurpleAccount *lppac);
#endif
============================================================
--- vulture/purplequeue.c be933e1dd436c643c5ae2292931aa176c21af73a
+++ vulture/purplequeue.c 1e63aaea35e35e994c4d20f7cb67db175a1a2710
@@ -32,6 +32,7 @@
#include "purpleconv.h"
#include "purpleblist.h"
#include "vultureblist.h"
+#include "vulturedlg.h"
/** Queue node representing a libpurple call. */
@@ -233,6 +234,14 @@ static void DispatchPurpleCall(PURPLE_CA
break;
+ case PC_GETCHATFIELDS:
+ {
+ VULTURE_GET_CHAT_FIELDS *lpgetchatfields = lppurplecall->lpvParam;
+ lpgetchatfields->lpglistFields = PurpleGetChatFields(lpgetchatfields->lpvac->lppac);
+ }
+
+ break;
+
case PC_QUIT:
purple_core_quit();
g_main_loop_quit(g_lpgmainloop);
============================================================
--- vulture/purplequeue.h 988265e45873a784dee1804a3110174d2664e120
+++ vulture/purplequeue.h 5d73a21f5ed89cb91fdc9fefc99191e06f8f2e7d
@@ -70,6 +70,9 @@ enum PURPLE_CALL_ID
/* (VULTURE_IM_GET_STATUS_MSG*) */
PC_IMGETSTATUSMSG,
+
+ /* (VULTURE_GET_CHAT_FIELDS*) */
+ PC_GETCHATFIELDS,
};
============================================================
--- vulture/resource.h b0e6ad885e4d16ff0f82307b3623e9eb2d19a46f
+++ vulture/resource.h 7aa8930203dfef3e9009f5715597e4513d0c245e
@@ -27,7 +27,6 @@
#define IDM_BLIST_BUDDIES_JOINCHAT 40002
#define IDS_ACCMGR_ACCOUNT 40002
#define IDC_EDIT_STATUSMSG 40003
-#define IDM__1 40003
#define IDS_ACCMGR_PROTOCOL 40003
#define IDC_TREE_BLIST 40004
#define IDS_ERROR_CONVCONTCLASS 40004
============================================================
--- vulture/vulture-res.rc 242f1d6eceec7a8031eb4d6230059c0b9fdce03e
+++ vulture/vulture-res.rc 7c0b9e9ac0950ea9f4cf0d5f9cc2da4d4a5170aa
@@ -95,31 +95,31 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_U
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
-IDD_JOINCHAT DIALOG 0, 0, 204, 123
-STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_FIXEDSYS | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU
-CAPTION "Join a Chat"
-FONT 8, "Ms Shell Dlg 2"
+IDD_IM DIALOG 0, 0, 325, 235
+STYLE DS_3DLOOK | DS_CENTER | DS_SHELLFONT | WS_CHILDWINDOW | WS_DISABLED
+FONT 8, "Ms Shell Dlg"
{
- DEFPUSHBUTTON "OK", IDOK, 95, 105, 50, 14, BS_DEFPUSHBUTTON
- PUSHBUTTON "Cancel", IDCANCEL, 150, 105, 50, 14, BS_PUSHBUTTON
- LTEXT "Please choose an account, and then enter the details of the chat that you wish to join.", IDC_STATIC, 5, 5, 195, 20, SS_LEFT
- LTEXT "Account:", IDC_STATIC, 5, 32, 35, 10, SS_LEFT
- CONTROL "", IDC_CBEX_ACCOUNTS, "ComboBoxEx32", 0x50000003, 45, 30, 155, 90
- GROUPBOX "Details", IDC_STATIC_DETAILS, 5, 50, 195, 50
+ CONTROL "", IDC_RICHEDIT_CONV, RICHEDIT_CLASS, WS_TABSTOP | WS_VSCROLL | WS_BORDER | ES_AUTOVSCROLL | ES_MULTILINE | ES_READONLY, 5, 35, 310, 150
+ CONTROL "", IDC_RICHEDIT_INPUT, RICHEDIT_CLASS, WS_TABSTOP | WS_BORDER | ES_MULTILINE | ES_WANTRETURN, 5, 190, 310, 40
+ CONTROL "", IDC_STATIC, WC_STATIC, SS_BITMAP, 5, 5, 20, 17
+ LTEXT "", IDC_STATIC_NAME, 40, 5, 275, 8, SS_LEFT
+ LTEXT "", IDC_STATIC_STATUS, 40, 15, 275, 8, SS_LEFT
}
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
-IDD_IM DIALOG 0, 0, 325, 235
-STYLE DS_3DLOOK | DS_CENTER | DS_SHELLFONT | WS_CHILDWINDOW | WS_DISABLED
-FONT 8, "Ms Shell Dlg"
+IDD_JOINCHAT DIALOG 0, 0, 204, 132
+STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU
+CAPTION "Join a Chat"
+FONT 8, "Ms Shell Dlg 2"
{
- CONTROL "Rich Edit", IDC_RICHEDIT_CONV, RICHEDIT_CLASS, WS_TABSTOP | WS_VSCROLL | WS_BORDER | ES_AUTOVSCROLL | ES_MULTILINE | ES_READONLY, 5, 35, 310, 150
- CONTROL "Rich Edit", IDC_RICHEDIT_INPUT, RICHEDIT_CLASS, WS_TABSTOP | WS_BORDER | ES_MULTILINE | ES_WANTRETURN, 5, 190, 310, 40
- CONTROL "", IDC_STATIC, WC_STATIC, SS_BITMAP, 5, 5, 20, 17
- LTEXT "", IDC_STATIC_NAME, 40, 5, 275, 8, SS_LEFT
- LTEXT "", IDC_STATIC_STATUS, 40, 15, 275, 8, SS_LEFT
+ DEFPUSHBUTTON "OK", IDOK, 95, 115, 50, 14, BS_DEFPUSHBUTTON
+ PUSHBUTTON "Cancel", IDCANCEL, 150, 115, 50, 14, BS_PUSHBUTTON
+ LTEXT "Please choose an account, and then enter the details of the chat that you wish to join.", IDC_STATIC, 5, 5, 195, 20, SS_LEFT
+ LTEXT "Account:", IDC_STATIC, 5, 32, 35, 10, SS_LEFT
+ CONTROL "", IDC_CBEX_ACCOUNTS, "ComboBoxEx32", 0x50000003, 45, 30, 155, 90
+ GROUPBOX "Details", IDC_STATIC_DETAILS, 5, 50, 195, 58
}
============================================================
--- vulture/vultureblist.c 8289535165a647135867e6daa5158cf8a6cfa73a
+++ vulture/vultureblist.c 0a3f1d1362b4b969935f2948b9ffde22b1ae0104
@@ -166,7 +166,11 @@ static LRESULT CALLBACK MainWndProc(HWND
switch(LOWORD(wParam))
{
case IDM_BLIST_BUDDIES_JOINCHAT:
- VultureJoinChatDlg(hwnd);
+ {
+ VULTURE_JOIN_CHAT_DATA vjcd;
+ VultureJoinChatDlg(hwnd, &vjcd);
+ }
+
return 0;
case IDM_BLIST_BUDDIES_CLOSE:
============================================================
--- vulture/vulturedlg.c 97c26ad3083fd5aad7252a31fc5358e0f8253d7b
+++ vulture/vulturedlg.c 08c6b9d2f153a7852d2f7fb4e247ba0a49da188e
@@ -33,21 +33,46 @@
#include "purpleacct.h"
+typedef struct _JOIN_DLG_FIELD
+{
+ LPCSTR szID;
+ HWND hwndLabel, hwndEdit;
+ BOOL bIsInt, bRequired;
+} JOIN_DLG_FIELD;
+
+
+/* Dialogue co-ordinates for the join-chat fields. */
+#define X_JC_LABEL 15
+#define X_JC_EDIT 75
+#define CX_JC_LABEL 55
+#define CY_JC_LABEL 10
+#define CX_JC_EDIT 120
+#define CY_JC_EDIT 12
+#define Y_JC_LABEL_FIRST 62
+#define Y_JC_EDIT_FIRST 60
+#define CY_JC_INCREMENT 15
+
+/* First ID for dynamic join-chat controls. */
+#define IDC_JC_DYNAMIC 2000
+
+
static INT_PTR CALLBACK JoinChatDlgProc(HWND hwndDlg, UINT uiMsg, WPARAM wParam, LPARAM lParam);
static void PopulateAccountsCombo(HWND hwndCBEx, GList *lpglistAccounts);
+static HWND CreateJoinDlgLabel(HWND hwndDlg, int iFieldNum, LPCSTR szLabelUTF8);
+static HWND CreateJoinDlgEdit(HWND hwndDlg, int iFieldNum, BOOL bNumber, BOOL bSecret);
/**
* Displays the "Join a Chat" dialogue.
*
* @param hwndParent Parent window handle.
+ * @param[out] lpvjcd Details of chat to join are returned here.
*
- * @return Hash table containing details of chat to join, and which caller is
- * responsible for freeing; or NULL if cancelled.
+ * @return TRUE iff OKed.
*/
-GHashTable* VultureJoinChatDlg(HWND hwndParent)
+BOOL VultureJoinChatDlg(HWND hwndParent, VULTURE_JOIN_CHAT_DATA *lpvjcd)
{
- return (GHashTable*)DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_JOINCHAT), hwndParent, JoinChatDlgProc);
+ return (BOOL)DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_JOINCHAT), hwndParent, JoinChatDlgProc, (LPARAM)lpvjcd);
}
@@ -66,6 +91,9 @@ static INT_PTR CALLBACK JoinChatDlgProc(
{
static int s_cyNonGroup = 0, s_cyButtonMargin = 0;
static GList *s_lpglistAccounts = NULL;
+ static VULTURE_JOIN_CHAT_DATA *s_lpvjcd = NULL;
+ static GList *s_lpglistFields = NULL;
+ static int s_iMaxShowFields;
switch(uiMsg)
{
@@ -86,11 +114,25 @@ static INT_PTR CALLBACK JoinChatDlgProc(
/* Remember metrics. */
GetClientRect(hwndDlg, &rcDlg);
- GetClientRect(GetDlgItem(hwndDlg, IDC_STATIC_DETAILS), &rcGroup);
- GetClientRect(GetDlgItem(hwndDlg, IDOK), &rcButton);
+ GetWindowRect(GetDlgItem(hwndDlg, IDC_STATIC_DETAILS), &rcGroup);
+ GetWindowRect(GetDlgItem(hwndDlg, IDOK), &rcButton);
+ MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)(LPVOID)&rcGroup, 2);
+ MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)(LPVOID)&rcButton, 2);
+
s_cyNonGroup = rcDlg.bottom - rcGroup.bottom + rcGroup.top;
s_cyButtonMargin = rcDlg.bottom - rcButton.top;
+
+ /* We return stuff here. */
+ s_lpvjcd = (VULTURE_JOIN_CHAT_DATA*)lParam;
+
+ /* No fields to start with. */
+ s_lpglistFields = NULL;
+
+ /* The dialogue is initially big enough to show three
+ * fields.
+ */
+ s_iMaxShowFields = 3;
}
/* Let the system set the focus. */
@@ -100,13 +142,87 @@ static INT_PTR CALLBACK JoinChatDlgProc(
switch(LOWORD(wParam))
{
case IDOK:
- /* TODO: return hash table. */
- EndDialog(hwndDlg, (INT_PTR)NULL);
+ EndDialog(hwndDlg, TRUE);
return TRUE;
case IDCANCEL:
- EndDialog(hwndDlg, (INT_PTR)NULL);
+ EndDialog(hwndDlg, FALSE);
return TRUE;
+
+ case IDC_CBEX_ACCOUNTS:
+ if(HIWORD(wParam) == CBN_SELCHANGE)
+ {
+ GList *lpglistRover;
+ VULTURE_GET_CHAT_FIELDS getchatfields;
+ COMBOBOXEXITEM cbexitem;
+ int iFieldNum;
+
+ /* Destroy existing fields. */
+ for(lpglistRover = s_lpglistFields; lpglistRover; lpglistRover = lpglistRover->next)
+ {
+ JOIN_DLG_FIELD *lpjdf = lpglistRover->data;
+ DestroyWindow(lpjdf->hwndLabel);
+ DestroyWindow(lpjdf->hwndEdit);
+
+ ProcHeapFree(lpjdf);
+ }
+
+ g_list_free(s_lpglistFields);
+
+ /* Get the selected account. */
+ cbexitem.mask = CBEIF_LPARAM;
+ cbexitem.iItem = SendDlgItemMessage(hwndDlg, IDC_CBEX_ACCOUNTS, CB_GETCURSEL, 0, 0);
+ SendDlgItemMessage(hwndDlg, IDC_CBEX_ACCOUNTS, CBEM_GETITEM, 0, (LPARAM)&cbexitem);
+
+ /* Find out what we need to specify for chats
+ * on this account.
+ */
+ getchatfields.lpvac = (VULTURE_ACCOUNT*)cbexitem.lParam;
+ VultureSingleSyncPurpleCall(PC_GETCHATFIELDS, &getchatfields);
+
+ s_lpglistFields = NULL;
+
+ /* Create new fields. */
+ for(lpglistRover = getchatfields.lpglistFields, iFieldNum = 0;
+ lpglistRover;
+ lpglistRover = lpglistRover->next, iFieldNum++)
+ {
+ struct proto_chat_entry *lppce = lpglistRover->data;
+ JOIN_DLG_FIELD *lpjdf = ProcHeapAlloc(sizeof(JOIN_DLG_FIELD));
+
+ lpjdf->bIsInt = lppce->is_int;
+ lpjdf->bRequired = lppce->required;
+ lpjdf->szID = lppce->identifier;
+
+ lpjdf->hwndLabel = CreateJoinDlgLabel(hwndDlg, iFieldNum, lppce->label);
+ lpjdf->hwndEdit = CreateJoinDlgEdit(hwndDlg, iFieldNum, lppce->is_int && (lppce->min >= 0), lppce->secret);
+
+ s_lpglistFields = g_list_prepend(s_lpglistFields, lpjdf);
+ }
+
+ if(iFieldNum > s_iMaxShowFields)
+ {
+ RECT rcAdjust, rcCurrent;
+
+ /* How much extra height? */
+ SetRect(&rcAdjust, 0, 0, 0, (iFieldNum - s_iMaxShowFields) * CY_JC_INCREMENT);
+ MapDialogRect(hwndDlg, &rcAdjust);
+
+ /* Get current dimensions and adjust. */
+ GetWindowRect(hwndDlg, &rcCurrent);
+ rcCurrent.bottom += rcAdjust.bottom;
+
+ SetWindowPos(hwndDlg, NULL, 0, 0, rcCurrent.right - rcCurrent.left, rcCurrent.bottom - rcCurrent.top, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
+
+ s_iMaxShowFields = iFieldNum;
+ }
+
+ s_lpglistFields = g_list_reverse(s_lpglistFields);
+
+ g_list_free(getchatfields.lpglistFields);
+ }
+
+ return TRUE;
}
break;
@@ -120,9 +236,14 @@ static INT_PTR CALLBACK JoinChatDlgProc(
HWND hwndCancel = GetDlgItem(hwndDlg, IDCANCEL);
GetClientRect(hwndGroup, &rcGroup);
- GetClientRect(hwndOK, &rcOK);
- GetClientRect(hwndCancel, &rcCancel);
+ GetWindowRect(GetDlgItem(hwndDlg, IDC_STATIC_DETAILS), &rcGroup);
+ GetWindowRect(GetDlgItem(hwndDlg, IDOK), &rcOK);
+ GetWindowRect(GetDlgItem(hwndDlg, IDCANCEL), &rcCancel);
+ MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)(LPVOID)&rcGroup, 2);
+ MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)(LPVOID)&rcOK, 2);
+ MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)(LPVOID)&rcCancel, 2);
+
/* Adjust group and buttons so that they fill the
* dialogue.
*/
@@ -136,7 +257,17 @@ static INT_PTR CALLBACK JoinChatDlgProc(
return TRUE;
case WM_DESTROY:
- VultureFreeAccountList(s_lpglistAccounts);
+ {
+ GList *lpglistRover;
+
+ VultureFreeAccountList(s_lpglistAccounts);
+
+ for(lpglistRover = s_lpglistFields; lpglistRover; lpglistRover = lpglistRover->next)
+ ProcHeapFree(lpglistRover->data);
+
+ g_list_free(s_lpglistFields);
+ }
+
return TRUE;
}
@@ -158,6 +289,7 @@ static void PopulateAccountsCombo(HWND h
SendMessage(hwndCBEx, CB_RESETCONTENT, 0, 0);
cbexitem.mask = CBEIF_TEXT | CBEIF_LPARAM;
+ cbexitem.iItem = -1;
/* Add each account. */
for(lpglistRover = lpglistAccounts; lpglistRover; lpglistRover = lpglistRover->next)
@@ -169,3 +301,91 @@ static void PopulateAccountsCombo(HWND h
SendMessage(hwndCBEx, CBEM_INSERTITEM, 0, (LPARAM)&cbexitem);
}
}
+
+
+/**
+ * Creates a label for a chat parameter in the join-chat dialogue.
+ *
+ * @param hwndDlg Join-chat dialogue.
+ * @param iFieldNum Zero-based field number.
+ * @param szLabelUTF8 Label text, in UTF-8.
+ *
+ * @return Window handle for label.
+ */
+static HWND CreateJoinDlgLabel(HWND hwndDlg, int iFieldNum, LPCSTR szLabelUTF8)
+{
+ LPTSTR szLabel = VultureUTF8ToTCHAR(szLabelUTF8);
+ HWND hwndLabel;
+ RECT rc;
+ HFONT hfont;
+
+ /* We cheat slightly and use right, bottom for width, height resp. */
+ rc.left = X_JC_LABEL;
+ rc.top = Y_JC_LABEL_FIRST + iFieldNum * CY_JC_INCREMENT;
+ rc.right = CX_JC_LABEL;
+ rc.bottom = CY_JC_LABEL;
+ MapDialogRect(hwndDlg, &rc);
+
+ hwndLabel = CreateWindowEx(
+ 0,
+ TEXT("STATIC"),
+ szLabel,
+ WS_CHILD | WS_VISIBLE,
+ rc.left, rc.top,
+ rc.right, rc.bottom,
+ hwndDlg,
+ (HMENU)(IDC_JC_DYNAMIC + iFieldNum * 2),
+ g_hInstance,
+ NULL);
+
+ g_free(szLabel);
+
+ /* Set the font, by querying the dialogue first. */
+ hfont = (HFONT)SendMessage(hwndDlg, WM_GETFONT, 0, 0);
+ SendMessage(hwndLabel, WM_SETFONT, (WPARAM)hfont, FALSE);
+
+ return hwndLabel;
+}
+
+
+/**
+ * Creates an edit box for a chat parameter in the join-chat dialogue.
+ *
+ * @param hwndDlg Join-chat dialogue.
+ * @param iFieldNum Zero-based field number.
+ * @param bNumber Whether the field should accept only numbers.
+ * @param bSecret Whether the field is password-esque.
+ *
+ * @return Window handle for edit box.
+ */
+static HWND CreateJoinDlgEdit(HWND hwndDlg, int iFieldNum, BOOL bNumber, BOOL bSecret)
+{
+ HWND hwndEdit;
+ RECT rc;
+ HFONT hfont;
+
+ /* We cheat slightly and use right, bottom for width, height resp. */
+ rc.left = X_JC_EDIT;
+ rc.top = Y_JC_EDIT_FIRST + iFieldNum * CY_JC_INCREMENT;
+ rc.right = CX_JC_EDIT;
+ rc.bottom = CY_JC_EDIT;
+ MapDialogRect(hwndDlg, &rc);
+
+ hwndEdit = CreateWindowEx(
+ WS_EX_CLIENTEDGE,
+ TEXT("EDIT"),
+ TEXT(""),
+ WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL | (bNumber ? ES_NUMBER : 0) | (bSecret ? ES_PASSWORD : 0),
+ rc.left, rc.top,
+ rc.right, rc.bottom,
+ hwndDlg,
+ (HMENU)(IDC_JC_DYNAMIC + iFieldNum * 2 + 1),
+ g_hInstance,
+ NULL);
+
+ /* Set the font, by querying the dialogue first. */
+ hfont = (HFONT)SendMessage(hwndDlg, WM_GETFONT, 0, 0);
+ SendMessage(hwndEdit, WM_SETFONT, (WPARAM)hfont, FALSE);
+
+ return hwndEdit;
+}
============================================================
--- vulture/vulturedlg.h b7a8a4b54369c0475abf8bbaa7f5da0558c3b9bc
+++ vulture/vulturedlg.h 347a73a6ddd85a0a6a67f2c24eb00aaf24e6cef7
@@ -27,8 +27,23 @@
#include <windows.h>
#include <glib.h>
+#include "acctmanager.h"
-GHashTable* VultureJoinChatDlg(HWND hwndParent);
+typedef struct _VULTURE_JOIN_CHAT_DATA
+{
+ VULTURE_ACCOUNT *lpvac;
+ GHashTable *lphashParameters;
+} VULTURE_JOIN_CHAT_DATA;
+typedef struct _VULTURE_GET_CHAT_FIELDS
+{
+ VULTURE_ACCOUNT *lpvac;
+ GList *lpglistFields;
+} VULTURE_GET_CHAT_FIELDS;
+
+
+BOOL VultureJoinChatDlg(HWND hwndParent, VULTURE_JOIN_CHAT_DATA *lpvjcd);
+
+
#endif
More information about the Commits
mailing list