1
1
mirror of https://github.com/profanity-im/profanity.git synced 2025-02-02 15:08:15 -05:00

Add /tray timer <seconds>

closes #787
This commit is contained in:
James Booth 2016-05-15 01:41:34 +01:00
parent d00615beba
commit c6a6e3a51c
7 changed files with 75 additions and 7 deletions

View File

@ -1420,12 +1420,14 @@ static struct cmd_t command_defs[] =
CMD_TAG_UI)
CMD_SYN(
"/tray on|off",
"/tray read on|off")
"/tray read on|off",
"/tray timer <seconds>")
CMD_DESC(
"Display an icon in the tray that will indicate new messages.")
CMD_ARGS(
{ "on|off", "Show tray icon." },
{ "read on|off", "Show tray icon when no unread messages." })
{ "on|off", "Show tray icon." },
{ "read on|off", "Show tray icon when no unread messages." },
{ "timer <seconds>", "Set tray icon timer, seconds must be between 1-10" })
CMD_NOEXAMPLES
},
@ -2868,6 +2870,7 @@ cmd_init(void)
autocomplete_add(tray_ac, "on");
autocomplete_add(tray_ac, "off");
autocomplete_add(tray_ac, "read");
autocomplete_add(tray_ac, "timer");
}
void

View File

@ -5865,9 +5865,35 @@ gboolean
cmd_tray(ProfWin *window, const char *const command, gchar **args)
{
#ifdef HAVE_GTK
if (g_strcmp0(args[0], "read") == 0) {
if (g_strcmp0(args[0], "timer") == 0) {
if (args[1] == NULL) {
cons_bad_cmd_usage(command);
return TRUE;
}
if (prefs_get_boolean(PREF_TRAY) == FALSE) {
cons_show("Tray icon no currently enable, see /help tray");
cons_show("Tray icon not currently enabled, see /help tray");
return TRUE;
}
int intval = 0;
char *err_msg = NULL;
gboolean res = strtoi_range(args[1], &intval, 1, 10, &err_msg);
if (res) {
cons_show("Tray timer set to %d seconds.", intval);
prefs_set_tray_timer(intval);
if (prefs_get_boolean(PREF_TRAY)) {
tray_set_timer(intval);
}
} else {
cons_show(err_msg);
free(err_msg);
}
return TRUE;
} else if (g_strcmp0(args[0], "read") == 0) {
if (prefs_get_boolean(PREF_TRAY) == FALSE) {
cons_show("Tray icon not currently enabled, see /help tray");
} else if (g_strcmp0(args[1], "on") == 0) {
prefs_set_boolean(PREF_TRAY_READ, TRUE);
cons_show("Tray icon enabled when no unread messages.");
@ -5877,6 +5903,8 @@ cmd_tray(ProfWin *window, const char *const command, gchar **args)
} else {
cons_bad_cmd_usage(command);
}
return TRUE;
} else {
gboolean old = prefs_get_boolean(PREF_TRAY);
_cmd_set_boolean_preference(args[0], command, "Tray icon", PREF_TRAY);
@ -5888,8 +5916,9 @@ cmd_tray(ProfWin *window, const char *const command, gchar **args)
tray_disable();
}
}
return TRUE;
}
return TRUE;
#else
cons_show("This version of Profanity has not been built with GTK Tray Icon support enabled");
return TRUE;

View File

@ -591,6 +591,25 @@ prefs_set_autoxa_time(gint value)
_save_prefs();
}
void
prefs_set_tray_timer(gint value)
{
g_key_file_set_integer(prefs, PREF_GROUP_NOTIFICATIONS, "tray.timer", value);
_save_prefs();
}
gint
prefs_get_tray_timer(void)
{
gint result = g_key_file_get_integer(prefs, PREF_GROUP_NOTIFICATIONS, "tray.timer", NULL);
if (result == 0) {
return 5;
} else {
return result;
}
}
gchar**
prefs_get_plugins(void)
{

View File

@ -224,6 +224,9 @@ void prefs_set_roster_presence_indent(gint value);
void prefs_add_login(const char *jid);
void prefs_set_tray_timer(gint value);
gint prefs_get_tray_timer(void);
gboolean prefs_add_alias(const char *const name, const char *const value);
gboolean prefs_remove_alias(const char *const name);
char* prefs_get_alias(const char *const name);

View File

@ -192,13 +192,22 @@ tray_shutdown(void)
g_string_free(icon_msg_filename, TRUE);
}
void
tray_set_timer(int interval)
{
g_source_remove(timer);
_tray_change_icon(NULL);
timer = g_timeout_add(interval * 1000, _tray_change_icon, NULL);
}
void
tray_enable(void)
{
prof_tray = gtk_status_icon_new_from_file(icon_filename->str);
shutting_down = FALSE;
_tray_change_icon(NULL);
timer = g_timeout_add(5000, _tray_change_icon, NULL);
int interval = prefs_get_tray_timer() * 1000;
timer = g_timeout_add(interval, _tray_change_icon, NULL);
}
void

View File

@ -51,4 +51,6 @@ void tray_enable(void);
*/
void tray_disable(void);
void tray_set_timer(int interval);
#endif

View File

@ -1193,6 +1193,9 @@ cons_tray_setting(void)
cons_show("Tray icon read (/tray) : ON");
else
cons_show("Tray icon read (/tray) : OFF");
int seconds = prefs_get_tray_timer();
cons_show("Tray timer (/tray) : %d seconds", seconds);
}
void