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