ctypedef char const_char "const char"
ctypedef int size_t
ctypedef void* va_list
+ char* charptr "char *"
+ glib.GCallback glibcb "GCallback"
+ void* va_arg(void *action, void *type)
request_cbs = {}
-cdef void *request_input (const_char *title, const_char *primary,
- const_char *secondary, const_char *default_value,
- glib.gboolean multiline, glib.gboolean masked,
- glib.gchar *hint, const_char *ok_text,
- glib.GCallback ok_cb, const_char *cancel_text,
- glib.GCallback cancel_cb,
- account.PurpleAccount *account, const_char *who,
- conversation.PurpleConversation *conv,
- void *user_data):
- debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", "request_input\n")
- try:
- (<object>request_cbs["request_input"])("request_input")
- except KeyError:
- pass
-
-cdef void *request_choice (const_char *title, const_char *primary,
- const_char *secondary, int default_value,
- const_char *ok_text, glib.GCallback ok_cb,
- const_char *cancel_text,
- glib.GCallback cancel_cb,
- account.PurpleAccount *account, const_char *who,
- conversation.PurpleConversation *conv,
- void *user_data, va_list choices):
- debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request",
- "request_choice\n")
- try:
- (<object>request_cbs["request_choice"])("request_choice")
- except KeyError:
- pass
-
-cdef void *request_action (const_char *title, const_char *primary,
- const_char *secondary, int default_action,
- account.PurpleAccount *account, const_char *who,
- conversation.PurpleConversation *conv,
- void *user_data, size_t action_count,
- va_list actions):
- debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request",
- "request_action\n")
- try:
- (<object>request_cbs["request_action"])("request_action")
- except KeyError:
- pass
-
-cdef void *request_fields (const_char *title, const_char *primary,
- const_char *secondary,
- request.PurpleRequestFields *fields,
- const_char *ok_text, glib.GCallback ok_cb,
- const_char *cancel_text, glib.GCallback cancel_cb,
- account.PurpleAccount *account, const_char *who,
- conversation.PurpleConversation *conv,
- void *user_data):
- debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request",
- "request_fields\n")
- try:
- (<object>request_cbs["request_fields"])("request_fields")
- except KeyError:
- pass
-
-cdef void *request_file (const_char *title, const_char *filename,
- glib.gboolean savedialog, glib.GCallback ok_cb,
- glib.GCallback cancel_cb,
- account.PurpleAccount *account, const_char *who,
- conversation.PurpleConversation *conv,
- void *user_data):
- debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", "request_file\n")
- try:
- (<object>request_cbs["request_file"])("request_file")
- except KeyError:
- pass
-
-cdef void close_request (request.PurpleRequestType type, void *ui_handle):
- debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", "close_request\n")
- try:
- (<object>request_cbs["close_request"])("close_request")
- except KeyError:
- pass
-
-cdef void *request_folder (const_char *title, const_char *dirname,
- glib.GCallback ok_cb,
- glib.GCallback cancel_cb,
- account.PurpleAccount *account,
- const_char *who,
- conversation.PurpleConversation *conv,
- void *user_data):
- debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request",
- "request_folder\n")
- try:
- (<object>request_cbs["request_folder"])("request_folder")
- except KeyError:
- pass
+cdef request.PurpleRequestActionCb req_actions_cb[10]
+cdef object req_actions_list = []
+cdef void *req_action_user_data = NULL
+
+cdef void *request_input(const_char *title, const_char *primary, \
+ const_char *secondary, const_char *default_value, \
+ glib.gboolean multiline, glib.gboolean masked, glib.gchar *hint, \
+ const_char *ok_text, glib.GCallback ok_cb, const_char *cancel_text, \
+ glib.GCallback cancel_cb, \
+ account.PurpleAccount *account, const_char *who, \
+ conversation.PurpleConversation *conv, void *user_data):
+ """
+ @see purple_request_input().
+ """
+ debug.purple_debug_info("request", "%s", "request-input\n")
+ if request_cbs.has_key("request-input"):
+ (<object> request_cbs["request-input"])("request-input: TODO")
+
+cdef void *request_choice(const_char *title, const_char *primary, \
+ const_char *secondary, int default_value, const_char *ok_text, \
+ glib.GCallback ok_cb, const_char *cancel_text, \
+ glib.GCallback cancel_cb, account.PurpleAccount *account, \
+ const_char *who, conversation.PurpleConversation *conv, \
+ void *user_data, va_list choices):
+ """
+ @see purple_request_choice_varg().
+ """
+ debug.purple_debug_info("request", "%s", "request-choice\n")
+ if request_cbs.has_key("request-choice"):
+ (<object> request_cbs["request-choice"])("request-choice: TODO")
+
+cdef void __call_action(int i):
+ global req_actions_cb
+ global req_actions_list
+ global req_action_user_data
+
+ cdef request.PurpleRequestActionCb cb
+
+ if req_actions_list and len(req_actions_list) > i:
+ cb = req_actions_cb[i]
+ cb(req_action_user_data, i)
+
+cdef void *request_action(const_char *title, const_char *primary, \
+ const_char *secondary, int default_action, \
+ account.PurpleAccount *account, const_char *who, \
+ conversation.PurpleConversation *conv, void *user_data, \
+ size_t action_count, va_list actions):
+ """
+ @see purple_request_action_varg().
+ """
+ global req_actions_cb
+ global req_actions_list
+ global req_action_user_data
+ cdef int i
+ cdef char *btn_txt
+ cdef void *cb
+
+ i = 0
+
+ req_action_user_data = user_data
+ req_actions_list = []
+
+ #FIXME: i < 10 max size to req_actions_cb
+ while i < action_count and i < 10:
+ btn_txt = <char *> va_arg(actions, charptr)
+ req_actions_cb[i] = <request.PurpleRequestActionCb> va_arg(actions, glibcb)
+ req_actions_list.append(btn_txt)
+ i = i + 1
+
+ debug.purple_debug_info("request", "%s", "request-action\n")
+ if request_cbs.has_key("request-action"):
+ (<object> request_cbs["request-action"])(<char *> title,
+ <char *> primary, <char *> secondary,
+ default_action, req_actions_list)
+
+cdef void *request_fields(const_char *title, const_char *primary, \
+ const_char *secondary, request.PurpleRequestFields *fields, \
+ const_char *ok_text, glib.GCallback ok_cb, const_char *cancel_text, \
+ glib.GCallback cancel_cb, account.PurpleAccount *account, \
+ const_char *who, conversation.PurpleConversation *conv, \
+ void *user_data):
+ """
+ @see purple_request_fields().
+ """
+ debug.purple_debug_info("request", "%s", "request-fields\n")
+ if request_cbs.has_key("request-fields"):
+ (<object> request_cbs["request-fields"])("request-fields: TODO")
+
+cdef void *request_file(const_char *title, const_char *filename, \
+ glib.gboolean savedialog, glib.GCallback ok_cb, \
+ glib.GCallback cancel_cb, account.PurpleAccount *account, \
+ const_char *who, conversation.PurpleConversation *conv, \
+ void *user_data):
+ """
+ @see purple_request_file().
+ """
+ debug.purple_debug_info("request", "%s", "request-file\n")
+ if request_cbs.has_key("request-file"):
+ (<object> request_cbs["request-file"])("request-file: TODO")
+
+cdef void close_request(request.PurpleRequestType type, void *ui_handle):
+ """
+ TODO
+ """
+ debug.purple_debug_info("request", "%s", "close-request\n")
+ if request_cbs.has_key("close-request"):
+ (<object> request_cbs["close-request"])("close-request: TODO")
+
+cdef void *request_folder(const_char *title, const_char *dirname, \
+ glib.GCallback ok_cb, glib.GCallback cancel_cb, \
+ account.PurpleAccount *account, const_char *who, \
+ conversation.PurpleConversation *conv, void *user_data):
+ """
+ @see purple_request_folder().
+ """
+ debug.purple_debug_info("request", "%s", "request-folder\n")
+ if request_cbs.has_key("request-folder"):
+ (<object> request_cbs["request-folder"])("request-folder: TODO")