static int tray_hilight_cb (char *word[], void *userdata) { /*if (tray_status == TS_HIGHLIGHT) return HEXCHAT_EAT_NONE;*/ if (prefs.hex_input_tray_hilight && (!prefs.hex_away_omit_alerts || tray_find_away_status () != 1)) { tray_set_flash (ICON_HILIGHT); /* FIXME: hides any previous private messages */ tray_hilight_count++; if (tray_hilight_count == 1) tray_set_tipf (_(DISPLAY_NAME": Highlighted message from: %s (%s)"), word[1], hexchat_get_info (ph, "channel")); else tray_set_tipf (_(DISPLAY_NAME": %u highlighted messages, latest from: %s (%s)"), tray_hilight_count, word[1], hexchat_get_info (ph, "channel")); } if (prefs.hex_input_balloon_hilight && (!prefs.hex_away_omit_alerts || tray_find_away_status () != 1)) tray_set_balloonf (word[2], _(DISPLAY_NAME": Highlighted message from: %s (%s)"), word[1], hexchat_get_info (ph, "channel")); return HEXCHAT_EAT_NONE; }
static int tray_dcc_cb (char *word[], void *userdata) { const char *network; /* if (tray_status == TS_FILEOFFER) return HEXCHAT_EAT_NONE;*/ network = hexchat_get_info (ph, "network"); if (!network) network = hexchat_get_info (ph, "server"); if (prefs.hex_input_tray_priv && (!prefs.hex_away_omit_alerts || tray_find_away_status () != 1)) { tray_set_flash (ICON_FILE); tray_file_count++; if (tray_file_count == 1) tray_set_tipf (_(DISPLAY_NAME": File offer from: %s (%s)"), word[1], network); else tray_set_tipf (_(DISPLAY_NAME": %u file offers, latest from: %s (%s)"), tray_file_count, word[1], network); } if (prefs.hex_input_balloon_priv && (!prefs.hex_away_omit_alerts || tray_find_away_status () != 1)) tray_set_balloonf ("", _("File offer from: %s (%s)"), word[1], network); return HEXCHAT_EAT_NONE; }
static void tray_priv (char *from, char *text) { const char *network; if (alert_match_word (from, prefs.hex_irc_no_hilight)) return; tray_set_flash (ICON_MSG); network = hexchat_get_info (ph, "network"); if (!network) network = hexchat_get_info (ph, "server"); tray_priv_count++; if (tray_priv_count == 1) tray_set_tipf (_(DISPLAY_NAME": Private message from: %s (%s)"), from, network); else tray_set_tipf (_(DISPLAY_NAME": %u private messages, latest from: %s (%s)"), tray_priv_count, from, network); if (prefs.hex_input_balloon_priv && (!prefs.hex_away_omit_alerts || tray_find_away_status () != 1)) tray_set_balloonf (text, _(DISPLAY_NAME": Private message from: %s (%s)"), from, network); }
static int tray_invited_cb (char *word[], void *userdata) { /*if (tray_status == TS_HIGHLIGHT) return HEXCHAT_EAT_NONE;*/ if (prefs.hex_input_tray_priv && (!prefs.hex_away_omit_alerts || tray_find_away_status () != 1)) tray_priv (word[2], "Invited"); return HEXCHAT_EAT_NONE; }
static void tray_menu_cb (GtkWidget *widget, guint button, guint time, gpointer userdata) { GtkWidget *menu; GtkWidget *submenu; GtkWidget *item; int away_status; /* ph may have an invalid context now */ xchat_set_context (ph, xchat_find_context (ph, NULL, NULL)); menu = gtk_menu_new (); /*gtk_menu_set_screen (GTK_MENU (menu), gtk_widget_get_screen (widget));*/ if (tray_get_window_status () == WS_HIDDEN) tray_make_item (menu, _("_Restore Window"), tray_menu_restore_cb, NULL); else tray_make_item (menu, _("_Hide Window"), tray_menu_restore_cb, NULL); tray_make_item (menu, NULL, tray_menu_quit_cb, NULL); #ifndef WIN32 /* somehow this is broken on win32 */ submenu = mg_submenu (menu, _("_Blink on")); blink_item (&prefs.input_tray_chans, submenu, _("Channel Message")); blink_item (&prefs.input_tray_priv, submenu, _("Private Message")); blink_item (&prefs.input_tray_hilight, submenu, _("Highlighted Message")); /*blink_item (BIT_FILEOFFER, submenu, _("File Offer"));*/ submenu = mg_submenu (menu, _("_Change status")); away_status = tray_find_away_status (); item = tray_make_item (submenu, _("_Away"), tray_foreach_server, "away"); if (away_status == 1) gtk_widget_set_sensitive (item, FALSE); item = tray_make_item (submenu, _("_Back"), tray_foreach_server, "back"); if (away_status == 2) gtk_widget_set_sensitive (item, FALSE); tray_make_item (menu, NULL, tray_menu_quit_cb, NULL); #endif mg_create_icon_item (_("_Quit"), GTK_STOCK_QUIT, menu, tray_menu_quit_cb, NULL); menu_add_plugin_items (menu, "\x5$TRAY", NULL); g_object_ref (menu); g_object_ref_sink (menu); g_object_unref (menu); g_signal_connect (G_OBJECT (menu), "selection-done", G_CALLBACK (tray_menu_destroy), NULL); gtk_menu_popup (GTK_MENU (menu), NULL, NULL, gtk_status_icon_position_menu, userdata, button, time); }
static int tray_message_cb (char *word[], void *userdata) { if (/*tray_status == TS_MESSAGE ||*/ tray_status == TS_HIGHLIGHT) return HEXCHAT_EAT_NONE; if (prefs.hex_input_tray_chans && (!prefs.hex_away_omit_alerts || tray_find_away_status () != 1)) { tray_set_flash (ICON_MSG); tray_pub_count++; if (tray_pub_count == 1) tray_set_tipf (_(DISPLAY_NAME": New public message from: %s (%s)"), word[1], hexchat_get_info (ph, "channel")); else tray_set_tipf (_(DISPLAY_NAME": %u new public messages."), tray_pub_count); } if (prefs.hex_input_balloon_chans && (!prefs.hex_away_omit_alerts || tray_find_away_status () != 1)) tray_set_balloonf (word[2], _(DISPLAY_NAME": New public message from: %s (%s)"), word[1], hexchat_get_info (ph, "channel")); return HEXCHAT_EAT_NONE; }
static void tray_menu_cb (GtkWidget *widget, guint button, guint time, gpointer userdata) { static GtkWidget *menu; GtkWidget *submenu; GtkWidget *item; int away_status; /* ph may have an invalid context now */ hexchat_set_context (ph, hexchat_find_context (ph, NULL, NULL)); /* close any old menu */ if (G_IS_OBJECT (menu)) { tray_menu_destroy (menu, NULL); } menu = gtk_menu_new (); /*gtk_menu_set_screen (GTK_MENU (menu), gtk_widget_get_screen (widget));*/ if (tray_get_window_status () == WS_HIDDEN) tray_make_item (menu, _("_Restore Window"), tray_menu_restore_cb, NULL); else tray_make_item (menu, _("_Hide Window"), tray_menu_restore_cb, NULL); tray_make_item (menu, NULL, tray_menu_quit_cb, NULL); #ifndef WIN32 /* submenus are buggy on win32 */ submenu = mg_submenu (menu, _("_Blink on")); blink_item (&prefs.hex_input_tray_chans, submenu, _("Channel Message")); blink_item (&prefs.hex_input_tray_priv, submenu, _("Private Message")); blink_item (&prefs.hex_input_tray_hilight, submenu, _("Highlighted Message")); /*blink_item (BIT_FILEOFFER, submenu, _("File Offer"));*/ submenu = mg_submenu (menu, _("_Change status")); #else /* so show away/back in main tray menu */ submenu = menu; #endif away_status = tray_find_away_status (); item = tray_make_item (submenu, _("_Away"), tray_foreach_server, "away"); if (away_status == 1) gtk_widget_set_sensitive (item, FALSE); item = tray_make_item (submenu, _("_Back"), tray_foreach_server, "back"); if (away_status == 2) gtk_widget_set_sensitive (item, FALSE); menu_add_plugin_items (menu, "\x5$TRAY", NULL); #ifdef WIN32 tray_make_item (menu, NULL, tray_menu_quit_cb, NULL); mg_create_icon_item (_("_Preferences"), GTK_STOCK_PREFERENCES, menu, tray_menu_settings, NULL); #endif tray_make_item (menu, NULL, tray_menu_quit_cb, NULL); mg_create_icon_item (_("_Quit"), GTK_STOCK_QUIT, menu, tray_menu_quit_cb, NULL); g_object_ref (menu); g_object_ref_sink (menu); g_object_unref (menu); g_signal_connect (G_OBJECT (menu), "selection-done", G_CALLBACK (tray_menu_destroy), NULL); #ifdef WIN32 g_signal_connect (G_OBJECT (menu), "leave-notify-event", G_CALLBACK (tray_menu_left_cb), NULL); g_signal_connect (G_OBJECT (menu), "enter-notify-event", G_CALLBACK (tray_menu_enter_cb), NULL); tray_menu_timer = g_timeout_add(500, (GSourceFunc) tray_check_hide, menu); #endif gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, userdata, button, time); }