(purple) NotifyMessage dialog

First of the NotifyUiOps― not sure if the others are used for anything
useful in our use-case, I'll implement as I run into them.
This commit is contained in:
Jaidyn Ann 2021-07-12 10:09:29 -05:00
parent 2415be542e
commit 91ab9d8fb7
5 changed files with 47 additions and 3 deletions

View File

@ -33,6 +33,7 @@ APP_MIME_SIG = application/x-vnd.caya.purple
# Also note that spaces in folder names do not work well with this Makefile. # Also note that spaces in folder names do not work well with this Makefile.
SRCS = \ SRCS = \
protocols/purple/PurpleApp.cpp \ protocols/purple/PurpleApp.cpp \
protocols/purple/PurpleDialog.cpp \
protocols/purple/PurpleProtocol.cpp \ protocols/purple/PurpleProtocol.cpp \
# Specify the resource definition files to use. Full or relative paths can be # Specify the resource definition files to use. Full or relative paths can be

View File

@ -25,6 +25,7 @@
#include <glib.h> #include <glib.h>
#include <libpurple/status.h> #include <libpurple/status.h>
#include <Alert.h>
#include <Directory.h> #include <Directory.h>
#include <MessageRunner.h> #include <MessageRunner.h>
#include <Path.h> #include <Path.h>
@ -916,11 +917,30 @@ static PurpleRequestUiOps _ui_op_request =
}; };
static PurpleNotifyUiOps _ui_op_notify =
{
ui_op_notify_message,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
};
void void
init_ui_ops() init_ui_ops()
{ {
purple_eventloop_set_ui_ops(&_ui_op_eventloops); purple_eventloop_set_ui_ops(&_ui_op_eventloops);
purple_request_set_ui_ops(&_ui_op_request); purple_request_set_ui_ops(&_ui_op_request);
purple_notify_set_ui_ops(&_ui_op_notify);
} }
@ -1275,6 +1295,25 @@ ui_op_request_action_with_icon(const char* title, const char* primary,
} }
static void*
ui_op_notify_message(PurpleNotifyMsgType type, const char* title,
const char* primary, const char* secondary)
{
BString text = primary;
text << "\n" << secondary;
BAlert* alert = new BAlert(title, text.String(), "OK");
if (type == PURPLE_NOTIFY_MSG_WARNING)
alert->SetType(B_WARNING_ALERT);
else if (type == PURPLE_NOTIFY_MSG_ERROR)
alert->SetType(B_STOP_ALERT);
alert->Go(NULL);
return NULL;
}
bool bool
is_own_user(PurpleAccount* account, const char* name) is_own_user(PurpleAccount* account, const char* name)
{ {

View File

@ -200,6 +200,11 @@ private:
void* user_data, size_t action_count, void* user_data, size_t action_count,
va_list actions); va_list actions);
// Notify ui ops
static void* ui_op_notify_message(PurpleNotifyMsgType type,
const char* title, const char* primary,
const char* secondary);
// Util // Util
bool is_own_user(PurpleAccount* account, const char* name); bool is_own_user(PurpleAccount* account, const char* name);

View File

@ -38,8 +38,8 @@ PurpleDialog::MessageReceived(BMessage* msg)
int32 id; int32 id;
if (msg->FindInt32("index", &id) != B_OK) break; if (msg->FindInt32("index", &id) != B_OK) break;
PurpleRequestActionCb cb = fActions.ItemAt(0)->callback.action; PurpleRequestActionCb cb = fActions.ItemAt(id)->callback.action;
cb(fUserData, fActions.ItemAt(0)->index); cb(fUserData, fActions.ItemAt(id)->index);
Quit(); Quit();
break; break;
} }

View File

@ -13,7 +13,6 @@
const uint32 ACTION_BUTTON = 'PDab'; const uint32 ACTION_BUTTON = 'PDab';
struct RequestAction struct RequestAction
{ {
BString name; BString name;