mirror of
https://github.com/Tha14/toxic.git
synced 2024-11-26 15:03:27 +01:00
code cleanup and fix bug that sometimes prevented tab notifications from working
This commit is contained in:
parent
e823233149
commit
96b68058bb
@ -59,7 +59,7 @@ static struct cmd_func global_commands[] = {
|
|||||||
{ "/lsdev", cmd_list_devices },
|
{ "/lsdev", cmd_list_devices },
|
||||||
{ "/sdev", cmd_change_device },
|
{ "/sdev", cmd_change_device },
|
||||||
#endif /* _AUDIO */
|
#endif /* _AUDIO */
|
||||||
{ NULL, NULL },
|
{ NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct cmd_func chat_commands[] = {
|
static struct cmd_func chat_commands[] = {
|
||||||
@ -77,7 +77,7 @@ static struct cmd_func chat_commands[] = {
|
|||||||
{ "/mute", cmd_mute },
|
{ "/mute", cmd_mute },
|
||||||
{ "/sense", cmd_sense },
|
{ "/sense", cmd_sense },
|
||||||
#endif /* _AUDIO */
|
#endif /* _AUDIO */
|
||||||
{ NULL, NULL },
|
{ NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Parses input command and puts args into arg array.
|
/* Parses input command and puts args into arg array.
|
||||||
@ -101,7 +101,7 @@ static int parse_command(WINDOW *w, ToxWindow *self, const char *input, char (*a
|
|||||||
i = char_find(1, cmd, '\"');
|
i = char_find(1, cmd, '\"');
|
||||||
|
|
||||||
if (cmd[i] == '\0') {
|
if (cmd[i] == '\0') {
|
||||||
char *errmsg = "Invalid argument. Did you forget a closing \"?";
|
const char *errmsg = "Invalid argument. Did you forget a closing \"?";
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, errmsg);
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, errmsg);
|
||||||
free(cmd);
|
free(cmd);
|
||||||
return -1;
|
return -1;
|
||||||
@ -118,7 +118,7 @@ static int parse_command(WINDOW *w, ToxWindow *self, const char *input, char (*a
|
|||||||
|
|
||||||
char tmp[MAX_STR_SIZE];
|
char tmp[MAX_STR_SIZE];
|
||||||
snprintf(tmp, sizeof(tmp), "%s", &cmd[i + 1]);
|
snprintf(tmp, sizeof(tmp), "%s", &cmd[i + 1]);
|
||||||
strcpy(cmd, tmp);
|
strcpy(cmd, tmp); /* tmp will always fit inside cmd */
|
||||||
}
|
}
|
||||||
|
|
||||||
free(cmd);
|
free(cmd);
|
||||||
|
196
src/notify.c
196
src/notify.c
@ -24,10 +24,12 @@
|
|||||||
#include "device.h"
|
#include "device.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "line_info.h"
|
#include "line_info.h"
|
||||||
|
#include "misc_tools.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@ -59,6 +61,7 @@
|
|||||||
#include <libnotify/notify.h>
|
#include <libnotify/notify.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MAX_BOX_MSG_LEN 127
|
||||||
#define SOUNDS_SIZE 10
|
#define SOUNDS_SIZE 10
|
||||||
#define ACTIVE_NOTIFS_MAX 50
|
#define ACTIVE_NOTIFS_MAX 50
|
||||||
|
|
||||||
@ -74,7 +77,7 @@ struct _Control {
|
|||||||
|
|
||||||
#if defined(_SOUND_NOTIFY) || defined(_BOX_NOTIFY)
|
#if defined(_SOUND_NOTIFY) || defined(_BOX_NOTIFY)
|
||||||
pthread_mutex_t poll_mutex[1];
|
pthread_mutex_t poll_mutex[1];
|
||||||
_Bool poll_active;
|
bool poll_active;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _SOUND_NOTIFY
|
#ifdef _SOUND_NOTIFY
|
||||||
@ -87,13 +90,13 @@ struct _ActiveNotifications {
|
|||||||
#ifdef _SOUND_NOTIFY
|
#ifdef _SOUND_NOTIFY
|
||||||
uint32_t source;
|
uint32_t source;
|
||||||
uint32_t buffer;
|
uint32_t buffer;
|
||||||
_Bool looping;
|
bool looping;
|
||||||
#endif
|
#endif
|
||||||
_Bool active;
|
bool active;
|
||||||
int *id_indicator;
|
int *id_indicator;
|
||||||
#ifdef _BOX_NOTIFY
|
#ifdef _BOX_NOTIFY
|
||||||
NotifyNotification* box;
|
NotifyNotification* box;
|
||||||
char messages[128][128];
|
char messages[MAX_BOX_MSG_LEN + 1][MAX_BOX_MSG_LEN + 1];
|
||||||
char title[24];
|
char title[24];
|
||||||
size_t size;
|
size_t size;
|
||||||
time_t n_timeout;
|
time_t n_timeout;
|
||||||
@ -105,6 +108,20 @@ struct _ActiveNotifications {
|
|||||||
/**********************************************************************************/
|
/**********************************************************************************/
|
||||||
/**********************************************************************************/
|
/**********************************************************************************/
|
||||||
|
|
||||||
|
/* coloured tab notifications: primary notification type */
|
||||||
|
static void tab_notify(ToxWindow *self, uint64_t flags)
|
||||||
|
{
|
||||||
|
if (self == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (flags & NT_WNDALERT_0)
|
||||||
|
self->alert = WINDOW_ALERT_0;
|
||||||
|
else if ( (flags & NT_WNDALERT_1) && (!self->alert || self->alert > WINDOW_ALERT_0) )
|
||||||
|
self->alert = WINDOW_ALERT_1;
|
||||||
|
else if ( (flags & NT_WNDALERT_2) && (!self->alert || self->alert > WINDOW_ALERT_1) )
|
||||||
|
self->alert = WINDOW_ALERT_2;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _X11
|
#ifdef _X11
|
||||||
long unsigned int get_focused_window_id()
|
long unsigned int get_focused_window_id()
|
||||||
{
|
{
|
||||||
@ -117,13 +134,13 @@ long unsigned int get_focused_window_id()
|
|||||||
}
|
}
|
||||||
#endif /* _X11 */
|
#endif /* _X11 */
|
||||||
|
|
||||||
static _Bool notifications_are_disabled(const uint64_t flags)
|
static bool notifications_are_disabled(uint64_t flags)
|
||||||
{
|
{
|
||||||
return ( (flags & NT_RESTOL && Control.cooldown > time(NULL)) ||
|
bool res = flags & NT_RESTOL && Control.cooldown > get_unix_time();
|
||||||
#ifdef _X11
|
#ifdef _X11
|
||||||
(flags & NT_NOFOCUS && Control.this_window == get_focused_window_id()) );
|
return res || (flags & NT_NOFOCUS && Control.this_window == get_focused_window_id());
|
||||||
#else
|
#else
|
||||||
0 );
|
return res;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,7 +159,7 @@ static void control_unlock()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _SOUND_NOTIFY
|
#ifdef _SOUND_NOTIFY
|
||||||
_Bool is_playing(int source)
|
bool is_playing(int source)
|
||||||
{
|
{
|
||||||
int ready;
|
int ready;
|
||||||
alGetSourcei(source, AL_SOURCE_STATE, &ready);
|
alGetSourcei(source, AL_SOURCE_STATE, &ready);
|
||||||
@ -232,7 +249,7 @@ void* do_playing(void* _p)
|
|||||||
pthread_exit(NULL);
|
pthread_exit(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int play_source(uint32_t source, uint32_t buffer, _Bool looping)
|
int play_source(uint32_t source, uint32_t buffer, bool looping)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (; i < ACTIVE_NOTIFS_MAX && actives[i].active; i ++);
|
for (; i < ACTIVE_NOTIFS_MAX && actives[i].active; i ++);
|
||||||
@ -371,7 +388,7 @@ int set_sound(Notification sound, const char* value)
|
|||||||
return stat(value, &buf) == 0;
|
return stat(value, &buf) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int play_sound_internal(Notification what, _Bool loop)
|
int play_sound_internal(Notification what, bool loop)
|
||||||
{
|
{
|
||||||
uint32_t source;
|
uint32_t source;
|
||||||
uint32_t buffer;
|
uint32_t buffer;
|
||||||
@ -448,13 +465,8 @@ void m_notify_action(NotifyNotification *box, char *action, void* data)
|
|||||||
|
|
||||||
int sound_notify(ToxWindow* self, Notification notif, uint64_t flags, int* id_indicator)
|
int sound_notify(ToxWindow* self, Notification notif, uint64_t flags, int* id_indicator)
|
||||||
{
|
{
|
||||||
/* Consider colored notify as primary */
|
tab_notify(self, flags);
|
||||||
if (self) {
|
|
||||||
if (flags & NT_WNDALERT_0) self->alert = WINDOW_ALERT_0;
|
|
||||||
else if ( (flags & NT_WNDALERT_1) && (!self->alert || self->alert > WINDOW_ALERT_0) ) self->alert = WINDOW_ALERT_1;
|
|
||||||
else if ( (flags & NT_WNDALERT_2) && (!self->alert || self->alert > WINDOW_ALERT_1) ) self->alert = WINDOW_ALERT_2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notifications_are_disabled(flags))
|
if (notifications_are_disabled(flags))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -491,12 +503,7 @@ int sound_notify(ToxWindow* self, Notification notif, uint64_t flags, int* id_in
|
|||||||
|
|
||||||
int sound_notify2(ToxWindow* self, Notification notif, uint64_t flags, int id)
|
int sound_notify2(ToxWindow* self, Notification notif, uint64_t flags, int id)
|
||||||
{
|
{
|
||||||
/* Consider colored notify as primary */
|
tab_notify(self, flags);
|
||||||
if (self) {
|
|
||||||
if (flags & NT_WNDALERT_0) self->alert = WINDOW_ALERT_0;
|
|
||||||
else if ( (flags & NT_WNDALERT_1) && (!self->alert || self->alert > WINDOW_ALERT_0) ) self->alert = WINDOW_ALERT_1;
|
|
||||||
else if ( (flags & NT_WNDALERT_2) && (!self->alert || self->alert > WINDOW_ALERT_1) ) self->alert = WINDOW_ALERT_2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notifications_are_disabled(flags))
|
if (notifications_are_disabled(flags))
|
||||||
return -1;
|
return -1;
|
||||||
@ -536,40 +543,42 @@ int sound_notify2(ToxWindow* self, Notification notif, uint64_t flags, int id)
|
|||||||
|
|
||||||
int box_notify(ToxWindow* self, Notification notif, uint64_t flags, int* id_indicator, char* title, const char* format, ...)
|
int box_notify(ToxWindow* self, Notification notif, uint64_t flags, int* id_indicator, char* title, const char* format, ...)
|
||||||
{
|
{
|
||||||
if (notifications_are_disabled(flags))
|
if (notifications_are_disabled(flags)) {
|
||||||
|
tab_notify(self, flags);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _BOX_NOTIFY
|
#ifdef _BOX_NOTIFY
|
||||||
|
|
||||||
int id = sound_notify(self, notif, flags, id_indicator);
|
int id = sound_notify(self, notif, flags, id_indicator);
|
||||||
|
|
||||||
control_lock();
|
control_lock();
|
||||||
|
|
||||||
#ifdef _SOUND_NOTIFY
|
#ifdef _SOUND_NOTIFY
|
||||||
if (id == -1) { /* Could not play */
|
if (id == -1) { /* Could not play */
|
||||||
|
|
||||||
for (id = 0; id < ACTIVE_NOTIFS_MAX && actives[id].active; id ++);
|
for (id = 0; id < ACTIVE_NOTIFS_MAX && actives[id].active; id ++);
|
||||||
if ( id == ACTIVE_NOTIFS_MAX ) {
|
if ( id == ACTIVE_NOTIFS_MAX ) {
|
||||||
control_unlock();
|
control_unlock();
|
||||||
return -1; /* Full */
|
return -1; /* Full */
|
||||||
}
|
}
|
||||||
|
|
||||||
actives[id].active = 1;
|
actives[id].active = 1;
|
||||||
actives[id].id_indicator = id_indicator;
|
actives[id].id_indicator = id_indicator;
|
||||||
if (id_indicator) *id_indicator = id;
|
if (id_indicator) *id_indicator = id;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
strncpy(actives[id].title, title, 24);
|
strncpy(actives[id].title, title, 24);
|
||||||
if (strlen(title) > 23) strcpy(actives[id].title + 20, "...");
|
if (strlen(title) > 23) strcpy(actives[id].title + 20, "...");
|
||||||
|
|
||||||
va_list __ARGS__; va_start (__ARGS__, format);
|
va_list __ARGS__; va_start (__ARGS__, format);
|
||||||
vsnprintf (actives[id].messages[0], 127, format, __ARGS__);
|
vsnprintf (actives[id].messages[0], MAX_BOX_MSG_LEN, format, __ARGS__);
|
||||||
va_end (__ARGS__);
|
va_end (__ARGS__);
|
||||||
|
|
||||||
if (strlen(actives[id].messages[0]) > 124)
|
if (strlen(actives[id].messages[0]) > MAX_BOX_MSG_LEN - 3)
|
||||||
strcpy(actives[id].messages[0] + 124, "...");
|
strcpy(actives[id].messages[0] + MAX_BOX_MSG_LEN - 3, "...");
|
||||||
|
|
||||||
actives[id].box = notify_notification_new(actives[id].title, actives[id].messages[0], NULL);
|
actives[id].box = notify_notification_new(actives[id].title, actives[id].messages[0], NULL);
|
||||||
actives[id].size ++;
|
actives[id].size ++;
|
||||||
actives[id].n_timeout = time(NULL) + Control.notif_timeout / 1000;
|
actives[id].n_timeout = time(NULL) + Control.notif_timeout / 1000;
|
||||||
@ -578,7 +587,7 @@ int box_notify(ToxWindow* self, Notification notif, uint64_t flags, int* id_indi
|
|||||||
notify_notification_set_app_name(actives[id].box, "toxic");
|
notify_notification_set_app_name(actives[id].box, "toxic");
|
||||||
/*notify_notification_add_action(actives[id].box, "lel", "default", m_notify_action, self, NULL);*/
|
/*notify_notification_add_action(actives[id].box, "lel", "default", m_notify_action, self, NULL);*/
|
||||||
notify_notification_show(actives[id].box, NULL);
|
notify_notification_show(actives[id].box, NULL);
|
||||||
|
|
||||||
control_unlock();
|
control_unlock();
|
||||||
return id;
|
return id;
|
||||||
#else
|
#else
|
||||||
@ -590,45 +599,44 @@ int box_notify2(ToxWindow* self, Notification notif, uint64_t flags, int id, con
|
|||||||
{
|
{
|
||||||
if (notifications_are_disabled(flags))
|
if (notifications_are_disabled(flags))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
#ifdef _BOX_NOTIFY
|
#ifdef _BOX_NOTIFY
|
||||||
|
|
||||||
if (sound_notify2(self, notif, flags, id) == -1)
|
if (sound_notify2(self, notif, flags, id) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
control_lock();
|
control_lock();
|
||||||
|
|
||||||
if (!actives[id].box || actives[id].size >= 128 ) {
|
if (!actives[id].box || actives[id].size >= MAX_BOX_MSG_LEN + 1) {
|
||||||
control_unlock();
|
control_unlock();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
va_list __ARGS__; va_start (__ARGS__, format);
|
va_list __ARGS__; va_start (__ARGS__, format);
|
||||||
vsnprintf (actives[id].messages[actives[id].size], 127, format, __ARGS__);
|
vsnprintf (actives[id].messages[actives[id].size], MAX_BOX_MSG_LEN, format, __ARGS__);
|
||||||
va_end (__ARGS__);
|
va_end (__ARGS__);
|
||||||
|
|
||||||
if (strlen(actives[id].messages[actives[id].size]) > 124)
|
if (strlen(actives[id].messages[actives[id].size]) > MAX_BOX_MSG_LEN - 3)
|
||||||
strcpy(actives[id].messages[actives[id].size] + 124, "...");
|
strcpy(actives[id].messages[actives[id].size] + MAX_BOX_MSG_LEN - 3, "...");
|
||||||
|
|
||||||
actives[id].size ++;
|
actives[id].size ++;
|
||||||
actives[id].n_timeout = time(NULL) + Control.notif_timeout / 1000;
|
actives[id].n_timeout = time(NULL) + Control.notif_timeout / 1000;
|
||||||
|
|
||||||
char formated[128 * 129] = {'\0'};
|
char formated[128 * 129] = {'\0'};
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (; i <actives[id].size; i ++) {
|
for (; i <actives[id].size; i ++) {
|
||||||
strcat(formated, actives[id].messages[i]);
|
strcat(formated, actives[id].messages[i]);
|
||||||
strcat(formated, "\n");
|
strcat(formated, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
formated[strlen(formated) - 1] = '\0';
|
formated[strlen(formated) - 1] = '\0';
|
||||||
|
|
||||||
notify_notification_update(actives[id].box, actives[id].title, formated, NULL);
|
notify_notification_update(actives[id].box, actives[id].title, formated, NULL);
|
||||||
notify_notification_show(actives[id].box, NULL);
|
notify_notification_show(actives[id].box, NULL);
|
||||||
|
|
||||||
control_unlock();
|
control_unlock();
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
#else
|
#else
|
||||||
return sound_notify2(self, notif, flags, id);
|
return sound_notify2(self, notif, flags, id);
|
||||||
@ -637,52 +645,47 @@ int box_notify2(ToxWindow* self, Notification notif, uint64_t flags, int id, con
|
|||||||
|
|
||||||
int box_silent_notify(ToxWindow* self, uint64_t flags, int* id_indicator, const char* title, const char* format, ...)
|
int box_silent_notify(ToxWindow* self, uint64_t flags, int* id_indicator, const char* title, const char* format, ...)
|
||||||
{
|
{
|
||||||
/* Always do colored notify */
|
tab_notify(self, flags);
|
||||||
if (self) {
|
|
||||||
if (flags & NT_WNDALERT_0) self->alert = WINDOW_ALERT_0;
|
|
||||||
else if ( (flags & NT_WNDALERT_1) && (!self->alert || self->alert > WINDOW_ALERT_0) ) self->alert = WINDOW_ALERT_1;
|
|
||||||
else if ( (flags & NT_WNDALERT_2) && (!self->alert || self->alert > WINDOW_ALERT_1) ) self->alert = WINDOW_ALERT_2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notifications_are_disabled(flags))
|
if (notifications_are_disabled(flags))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
#ifdef _BOX_NOTIFY
|
#ifdef _BOX_NOTIFY
|
||||||
|
|
||||||
control_lock();
|
control_lock();
|
||||||
|
|
||||||
int id;
|
int id;
|
||||||
for (id = 0; id < ACTIVE_NOTIFS_MAX && actives[id].active; id ++);
|
for (id = 0; id < ACTIVE_NOTIFS_MAX && actives[id].active; id ++);
|
||||||
if ( id == ACTIVE_NOTIFS_MAX ) {
|
if ( id == ACTIVE_NOTIFS_MAX ) {
|
||||||
control_unlock();
|
control_unlock();
|
||||||
return -1; /* Full */
|
return -1; /* Full */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id_indicator) {
|
if (id_indicator) {
|
||||||
actives[id].id_indicator = id_indicator;
|
actives[id].id_indicator = id_indicator;
|
||||||
*id_indicator = id;
|
*id_indicator = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
strncpy(actives[id].title, title, 24);
|
strncpy(actives[id].title, title, 24);
|
||||||
if (strlen(title) > 23) strcpy(actives[id].title + 20, "...");
|
if (strlen(title) > 23) strcpy(actives[id].title + 20, "...");
|
||||||
|
|
||||||
va_list __ARGS__; va_start (__ARGS__, format);
|
va_list __ARGS__; va_start (__ARGS__, format);
|
||||||
vsnprintf (actives[id].messages[0], 127, format, __ARGS__);
|
vsnprintf (actives[id].messages[0], MAX_BOX_MSG_LEN, format, __ARGS__);
|
||||||
va_end (__ARGS__);
|
va_end (__ARGS__);
|
||||||
|
|
||||||
if (strlen(actives[id].messages[0]) > 124)
|
if (strlen(actives[id].messages[0]) > MAX_BOX_MSG_LEN - 3)
|
||||||
strcpy(actives[id].messages[0] + 124, "...");
|
strcpy(actives[id].messages[0] + MAX_BOX_MSG_LEN - 3, "...");
|
||||||
|
|
||||||
actives[id].active = 1;
|
actives[id].active = 1;
|
||||||
actives[id].box = notify_notification_new(actives[id].title, actives[id].messages[0], NULL);
|
actives[id].box = notify_notification_new(actives[id].title, actives[id].messages[0], NULL);
|
||||||
actives[id].size ++;
|
actives[id].size ++;
|
||||||
actives[id].n_timeout = time(NULL) + Control.notif_timeout / 1000;
|
actives[id].n_timeout = time(NULL) + Control.notif_timeout / 1000;
|
||||||
|
|
||||||
notify_notification_set_timeout(actives[id].box, Control.notif_timeout);
|
notify_notification_set_timeout(actives[id].box, Control.notif_timeout);
|
||||||
notify_notification_set_app_name(actives[id].box, "toxic");
|
notify_notification_set_app_name(actives[id].box, "toxic");
|
||||||
/*notify_notification_add_action(actives[id].box, "lel", "default", m_notify_action, self, NULL);*/
|
/*notify_notification_add_action(actives[id].box, "lel", "default", m_notify_action, self, NULL);*/
|
||||||
notify_notification_show(actives[id].box, NULL);
|
notify_notification_show(actives[id].box, NULL);
|
||||||
|
|
||||||
control_unlock();
|
control_unlock();
|
||||||
return id;
|
return id;
|
||||||
#else
|
#else
|
||||||
@ -692,50 +695,45 @@ int box_silent_notify(ToxWindow* self, uint64_t flags, int* id_indicator, const
|
|||||||
|
|
||||||
int box_silent_notify2(ToxWindow* self, uint64_t flags, int id, const char* format, ...)
|
int box_silent_notify2(ToxWindow* self, uint64_t flags, int id, const char* format, ...)
|
||||||
{
|
{
|
||||||
/* Always do colored notify */
|
tab_notify(self, flags);
|
||||||
if (self) {
|
|
||||||
if (flags & NT_WNDALERT_0) self->alert = WINDOW_ALERT_0;
|
|
||||||
else if ( (flags & NT_WNDALERT_1) && (!self->alert || self->alert > WINDOW_ALERT_0) ) self->alert = WINDOW_ALERT_1;
|
|
||||||
else if ( (flags & NT_WNDALERT_2) && (!self->alert || self->alert > WINDOW_ALERT_1) ) self->alert = WINDOW_ALERT_2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notifications_are_disabled(flags))
|
if (notifications_are_disabled(flags))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
#ifdef _BOX_NOTIFY
|
#ifdef _BOX_NOTIFY
|
||||||
control_lock();
|
control_lock();
|
||||||
|
|
||||||
if (id < 0 || id >= ACTIVE_NOTIFS_MAX || !actives[id].box || actives[id].size >= 128 ) {
|
if (id < 0 || id >= ACTIVE_NOTIFS_MAX || !actives[id].box || actives[id].size >= MAX_BOX_MSG_LEN + 1 ) {
|
||||||
control_unlock();
|
control_unlock();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
va_list __ARGS__; va_start (__ARGS__, format);
|
va_list __ARGS__; va_start (__ARGS__, format);
|
||||||
vsnprintf (actives[id].messages[actives[id].size], 127, format, __ARGS__);
|
vsnprintf (actives[id].messages[actives[id].size], MAX_BOX_MSG_LEN, format, __ARGS__);
|
||||||
va_end (__ARGS__);
|
va_end (__ARGS__);
|
||||||
|
|
||||||
if (strlen(actives[id].messages[actives[id].size]) > 124)
|
if (strlen(actives[id].messages[actives[id].size]) > MAX_BOX_MSG_LEN - 3)
|
||||||
strcpy(actives[id].messages[actives[id].size] + 124, "...");
|
strcpy(actives[id].messages[actives[id].size] + MAX_BOX_MSG_LEN - 3, "...");
|
||||||
|
|
||||||
actives[id].size ++;
|
actives[id].size ++;
|
||||||
actives[id].n_timeout = time(NULL) + Control.notif_timeout / 1000;
|
actives[id].n_timeout = time(NULL) + Control.notif_timeout / 1000;
|
||||||
|
|
||||||
char formated[128 * 129] = {'\0'};
|
char formated[128 * 129] = {'\0'};
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (; i <actives[id].size; i ++) {
|
for (; i <actives[id].size; i ++) {
|
||||||
strcat(formated, actives[id].messages[i]);
|
strcat(formated, actives[id].messages[i]);
|
||||||
strcat(formated, "\n");
|
strcat(formated, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
formated[strlen(formated) - 1] = '\0';
|
formated[strlen(formated) - 1] = '\0';
|
||||||
|
|
||||||
notify_notification_update(actives[id].box, actives[id].title, formated, NULL);
|
notify_notification_update(actives[id].box, actives[id].title, formated, NULL);
|
||||||
notify_notification_show(actives[id].box, NULL);
|
notify_notification_show(actives[id].box, NULL);
|
||||||
|
|
||||||
control_unlock();
|
control_unlock();
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
#else
|
#else
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user