notification: Implement notification option for channels
This commit is contained in:
parent
e03fab07ed
commit
da26097aab
@ -58,6 +58,7 @@ typedef struct
|
|||||||
|
|
||||||
static const channel_options chanopt[] =
|
static const channel_options chanopt[] =
|
||||||
{
|
{
|
||||||
|
{"alert_balloon", NULL, S_F(alert_balloon)},
|
||||||
{"alert_beep", "BEEP", S_F(alert_beep)},
|
{"alert_beep", "BEEP", S_F(alert_beep)},
|
||||||
{"alert_taskbar", NULL, S_F(alert_taskbar)},
|
{"alert_taskbar", NULL, S_F(alert_taskbar)},
|
||||||
{"alert_tray", "TRAY", S_F(alert_tray)},
|
{"alert_tray", "TRAY", S_F(alert_tray)},
|
||||||
@ -182,6 +183,7 @@ typedef struct
|
|||||||
{
|
{
|
||||||
/* Per-Channel Alerts */
|
/* Per-Channel Alerts */
|
||||||
/* use a byte, because we need a pointer to each element */
|
/* use a byte, because we need a pointer to each element */
|
||||||
|
guint8 alert_balloon;
|
||||||
guint8 alert_beep;
|
guint8 alert_beep;
|
||||||
guint8 alert_taskbar;
|
guint8 alert_taskbar;
|
||||||
guint8 alert_tray;
|
guint8 alert_tray;
|
||||||
|
@ -493,6 +493,7 @@ session_new (server *serv, char *from, int type, int focus)
|
|||||||
sess->logfd = -1;
|
sess->logfd = -1;
|
||||||
sess->type = type;
|
sess->type = type;
|
||||||
|
|
||||||
|
sess->alert_balloon = SET_DEFAULT;
|
||||||
sess->alert_beep = SET_DEFAULT;
|
sess->alert_beep = SET_DEFAULT;
|
||||||
sess->alert_taskbar = SET_DEFAULT;
|
sess->alert_taskbar = SET_DEFAULT;
|
||||||
sess->alert_tray = SET_DEFAULT;
|
sess->alert_tray = SET_DEFAULT;
|
||||||
|
@ -363,6 +363,7 @@ typedef struct session
|
|||||||
{
|
{
|
||||||
/* Per-Channel Alerts */
|
/* Per-Channel Alerts */
|
||||||
/* use a byte, because we need a pointer to each element */
|
/* use a byte, because we need a pointer to each element */
|
||||||
|
guint8 alert_balloon;
|
||||||
guint8 alert_beep;
|
guint8 alert_beep;
|
||||||
guint8 alert_taskbar;
|
guint8 alert_taskbar;
|
||||||
guint8 alert_tray;
|
guint8 alert_tray;
|
||||||
|
@ -138,7 +138,9 @@ enum
|
|||||||
CHANNEL_FLAG_TRAY_UNSET = 1 << 18,
|
CHANNEL_FLAG_TRAY_UNSET = 1 << 18,
|
||||||
CHANNEL_FLAG_TASKBAR = 1 << 19,
|
CHANNEL_FLAG_TASKBAR = 1 << 19,
|
||||||
CHANNEL_FLAG_TASKBAR_UNSET = 1 << 20,
|
CHANNEL_FLAG_TASKBAR_UNSET = 1 << 20,
|
||||||
CHANNEL_FLAG_COUNT = 21
|
CHANNEL_FLAG_BALLOON = 1 << 21,
|
||||||
|
CHANNEL_FLAG_BALLOON_UNSET = 1 << 22,
|
||||||
|
CHANNEL_FLAG_COUNT = 23
|
||||||
};
|
};
|
||||||
|
|
||||||
GSList *plugin_list = NULL; /* export for plugingui.c */
|
GSList *plugin_list = NULL; /* export for plugingui.c */
|
||||||
@ -1633,6 +1635,8 @@ hexchat_list_int (hexchat_plugin *ph, hexchat_list *xlist, const char *name)
|
|||||||
channel_flags[18] = ((struct session *)data)->alert_tray == SET_DEFAULT;
|
channel_flags[18] = ((struct session *)data)->alert_tray == SET_DEFAULT;
|
||||||
channel_flags[19] = ((struct session *)data)->alert_taskbar;
|
channel_flags[19] = ((struct session *)data)->alert_taskbar;
|
||||||
channel_flags[20] = ((struct session *)data)->alert_taskbar == SET_DEFAULT;
|
channel_flags[20] = ((struct session *)data)->alert_taskbar == SET_DEFAULT;
|
||||||
|
channel_flags[21] = ((struct session *)data)->alert_balloon;
|
||||||
|
channel_flags[22] = ((struct session *)data)->alert_balloon == SET_DEFAULT;
|
||||||
|
|
||||||
/* Set flags */
|
/* Set flags */
|
||||||
for (channel_flag = 0; channel_flag < CHANNEL_FLAG_COUNT; ++channel_flag) {
|
for (channel_flag = 0; channel_flag < CHANNEL_FLAG_COUNT; ++channel_flag) {
|
||||||
|
@ -1520,14 +1520,32 @@ static void
|
|||||||
mg_create_alertmenu (session *sess, GtkWidget *menu)
|
mg_create_alertmenu (session *sess, GtkWidget *menu)
|
||||||
{
|
{
|
||||||
GtkWidget *submenu;
|
GtkWidget *submenu;
|
||||||
|
int hex_balloon, hex_beep, hex_tray, hex_flash;
|
||||||
|
|
||||||
submenu = menu_quick_sub (_("_Extra Alerts"), menu, NULL, XCMENU_MNEMONIC, -1);
|
|
||||||
|
|
||||||
mg_perchan_menu_item (_("Beep on _Message"), submenu, &sess->alert_beep, prefs.hex_input_beep_chans);
|
switch (sess->type) {
|
||||||
|
case SESS_DIALOG:
|
||||||
|
hex_balloon = prefs.hex_input_balloon_priv;
|
||||||
|
hex_beep = prefs.hex_input_beep_priv;
|
||||||
|
hex_tray = prefs.hex_input_tray_priv;
|
||||||
|
hex_flash = prefs.hex_input_flash_priv;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
hex_balloon = prefs.hex_input_balloon_chans;
|
||||||
|
hex_beep = prefs.hex_input_beep_chans;
|
||||||
|
hex_tray = prefs.hex_input_tray_chans;
|
||||||
|
hex_flash = prefs.hex_input_flash_chans;
|
||||||
|
}
|
||||||
|
|
||||||
mg_perchan_menu_item (_("Blink Tray _Icon"), submenu, &sess->alert_tray, prefs.hex_input_tray_chans);
|
submenu = menu_quick_sub(_("_Extra Alerts"), menu, NULL, XCMENU_MNEMONIC, -1);
|
||||||
|
|
||||||
mg_perchan_menu_item (_("Blink Task _Bar"), submenu, &sess->alert_taskbar, prefs.hex_input_flash_chans);
|
mg_perchan_menu_item(_("Show Notifications"), submenu, &sess->alert_balloon, hex_balloon);
|
||||||
|
|
||||||
|
mg_perchan_menu_item(_("Beep on _Message"), submenu, &sess->alert_beep, hex_beep);
|
||||||
|
|
||||||
|
mg_perchan_menu_item(_("Blink Tray _Icon"), submenu, &sess->alert_tray, hex_tray);
|
||||||
|
|
||||||
|
mg_perchan_menu_item(_("Blink Task _Bar"), submenu, &sess->alert_taskbar, hex_flash);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -25,6 +25,9 @@
|
|||||||
|
|
||||||
static hexchat_plugin *ph;
|
static hexchat_plugin *ph;
|
||||||
|
|
||||||
|
const int CHANNEL_FLAG_BALLOON = 1 << 21;
|
||||||
|
const int CHANNEL_FLAG_BALLOON_UNSET = 1 << 22;
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
should_alert (void)
|
should_alert (void)
|
||||||
{
|
{
|
||||||
@ -117,10 +120,24 @@ static int
|
|||||||
incoming_message_cb (char *word[], gpointer userdata)
|
incoming_message_cb (char *word[], gpointer userdata)
|
||||||
{
|
{
|
||||||
int message;
|
int message;
|
||||||
|
int flags;
|
||||||
|
int alert = 0;
|
||||||
|
|
||||||
if (hexchat_get_prefs (ph, "input_balloon_chans", NULL, &message) == 3 && message && should_alert ())
|
flags = hexchat_list_int(ph, NULL, "flags");
|
||||||
{
|
|
||||||
show_notificationf (word[2], _("Channel message from: %s (%s)"), word[1], hexchat_get_info (ph, "channel"));
|
/* Let sure that can alert */
|
||||||
|
if (should_alert()) {
|
||||||
|
/* Follow the channel rules if set */
|
||||||
|
if (!(flags & CHANNEL_FLAG_BALLOON_UNSET)) {
|
||||||
|
alert = (flags & CHANNEL_FLAG_BALLOON);
|
||||||
|
} else {
|
||||||
|
/* Else follow global environment */
|
||||||
|
alert = (hexchat_get_prefs(ph, "input_balloon_chans", NULL, &message) == 3 && message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (alert) {
|
||||||
|
show_notificationf(word[2], _("Channel message from: %s (%s)"), word[1], hexchat_get_info(ph, "channel"));
|
||||||
}
|
}
|
||||||
return HEXCHAT_EAT_NONE;
|
return HEXCHAT_EAT_NONE;
|
||||||
}
|
}
|
||||||
@ -129,8 +146,23 @@ static int
|
|||||||
incoming_priv_cb (char *word[], gpointer userdata)
|
incoming_priv_cb (char *word[], gpointer userdata)
|
||||||
{
|
{
|
||||||
int priv;
|
int priv;
|
||||||
|
int flags;
|
||||||
|
int alert = 0;
|
||||||
|
|
||||||
if (hexchat_get_prefs (ph, "input_balloon_priv", NULL, &priv) == 3 && priv && should_alert ())
|
flags = hexchat_list_int(ph, NULL, "flags");
|
||||||
|
|
||||||
|
/* Let sure that can alert */
|
||||||
|
if (should_alert()) {
|
||||||
|
/* Follow the private rules if set */
|
||||||
|
if (!(flags & CHANNEL_FLAG_BALLOON_UNSET)) {
|
||||||
|
alert = (flags & CHANNEL_FLAG_BALLOON);
|
||||||
|
} else {
|
||||||
|
/* Else follow global environment */
|
||||||
|
alert = (hexchat_get_prefs(ph, "input_balloon_priv", NULL, &priv) == 3 && priv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (alert)
|
||||||
{
|
{
|
||||||
const char *network = hexchat_get_info (ph, "network");
|
const char *network = hexchat_get_info (ph, "network");
|
||||||
if (!network)
|
if (!network)
|
||||||
|
Loading…
Reference in New Issue
Block a user