summaryrefslogtreecommitdiff
path: root/plugins/mailcheck/mailcheck.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/mailcheck/mailcheck.c')
-rw-r--r--plugins/mailcheck/mailcheck.c618
1 files changed, 0 insertions, 618 deletions
diff --git a/plugins/mailcheck/mailcheck.c b/plugins/mailcheck/mailcheck.c
deleted file mode 100644
index d25847d4..00000000
--- a/plugins/mailcheck/mailcheck.c
+++ /dev/null
@@ -1,618 +0,0 @@
-/* mailcheck.c
- *
- * Copyright (C) 2002 Jasper Huijsmans (huysmans@users.sourceforge.net)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Library General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <sys/stat.h>
-#include <gtk/gtk.h>
-
-#include <xfce_iconbutton.h>
-
-#include "global.h"
-#include "xfce_support.h"
-#include "icons.h"
-#include "controls.h"
-#include "settings.h"
-
-#if 0
-/* mailcheck icons */
-#include "icons/mail.xpm"
-#include "icons/nomail.xpm"
-#include "icons/oldmail.xpm"
-#endif
-
-/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
- Globals
--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-static GtkTooltips *tooltips = NULL;
-
-/* this is checked when the control is loaded */
-int is_xfce_panel_control = 1;
-
-#define MAILCHECK_ROOT "Mailcheck"
-
-/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
- General definitions
--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-enum
-{
- NO_MAIL,
- NEW_MAIL,
- OLD_MAIL
-};
-
-/* control data structure */
-typedef struct
-{
- int status;
- int interval;
- char *mbox;
-
- GdkPixbuf *nomail_pb;
- GdkPixbuf *newmail_pb;
- GdkPixbuf *oldmail_pb;
-
- char *command;
- gboolean term;
- char *tooltip;
-
- GtkWidget *button;
-}
-t_mailcheck;
-
-/* Icons
- * -----
-*/
-static char *mailcheck_icon_names[] = {
- "nomail",
- "newmail",
- "oldmail"
-};
-
-static GdkPixbuf *get_mailcheck_pixbuf(int id)
-{
- GdkPixbuf *pb;
- char *name = mailcheck_icon_names[id];
- pb = get_themed_pixbuf(name);
-
- if(!pb || !GDK_IS_PIXBUF(pb))
- pb = get_pixbuf_by_id(UNKNOWN_ICON);
-
- return pb;
-}
-
-/* Configuration
- * -------------
-*/
-static void make_sensitive(GtkWidget *w)
-{
- gtk_widget_set_sensitive(w, TRUE);
-}
-
-static void mailcheck_set_tip(t_mailcheck *mc)
-{
- if(!tooltips)
- tooltips = gtk_tooltips_new();
-
- if (mc->tooltip)
- {
- gtk_tooltips_set_tip(tooltips, mc->button, mc->tooltip, NULL);
- }
- else
- {
- char *tip = g_strdup(mc->command);
-
- *tip = g_ascii_toupper(*tip);
-
- gtk_tooltips_set_tip(tooltips, mc->button, tip, NULL);
-
- g_free(tip);
- }
-}
-
-void mailcheck_read_config(PanelControl *pc, xmlNodePtr node)
-{
- char *file;
- const char *mail, *logname;
- xmlChar *value;
- int n;
-
- t_mailcheck *mc = (t_mailcheck *)pc->data;
-
- if(!node || !node->children)
- return;
-
- node = node->children;
-
- if(!xmlStrEqual(node->name, (const xmlChar *)MAILCHECK_ROOT))
- return;
-
- value = xmlGetProp(node, (const xmlChar *)"interval");
-
- if (value)
- {
- n = atoi(value);
-
- if (n > 0)
- mc->interval = n;
-
- g_free(value);
- }
-
- /* Now parse the xml tree */
- for(node = node->children; node; node = node->next)
- {
- if(xmlStrEqual(node->name, (const xmlChar *)"Mbox"))
- {
- value = DATA(node);
-
- if(value)
- {
- g_free(mc->mbox);
- mc->mbox = (char *)value;
- }
- }
- else if(xmlStrEqual(node->name, (const xmlChar *)"Command"))
- {
- value = DATA(node);
-
- if(value)
- {
- g_free(mc->command);
- mc->command = (char *)value;
- }
-
- value = xmlGetProp(node, "term");
-
- if(value)
- {
- int n = atoi(value);
-
- if(n == 1)
- mc->term = TRUE;
- else
- mc->term = FALSE;
-
- g_free(value);
- }
- }
- else if(xmlStrEqual(node->name, (const xmlChar *)"Tooltip"))
- {
- value = DATA(node);
-
- if(value)
- {
- g_free(mc->tooltip);
- mc->tooltip = (char *)value;
- }
- }
- }
-
- mailcheck_set_tip(mc);
-}
-
-void mailcheck_write_config(PanelControl *pc, xmlNodePtr parent)
-{
- xmlNodePtr root, node;
- char value[MAXSTRLEN + 1];
-
- t_mailcheck *mc = (t_mailcheck *)pc->data;
-
- root = xmlNewTextChild(parent, NULL, MAILCHECK_ROOT, NULL);
-
- g_snprintf(value, 4, "%d", mc->interval);
- xmlSetProp(root, "interval", value);
-
- xmlNewTextChild(root, NULL, "Mbox", mc->mbox);
-
- node = xmlNewTextChild(root, NULL, "Command", mc->command);
-
- snprintf(value, 2, "%d", mc->term);
- xmlSetProp(node, "term", value);
-
- if (mc->tooltip)
- xmlNewTextChild(root, NULL, "Tooltip", mc->tooltip);
-}
-
-static void run_mail_command(t_mailcheck *mc)
-{
- exec_cmd(mc->command, mc->term);
-}
-
-static t_mailcheck *mailcheck_new(void)
-{
- PanelItem *pi;
- t_mailcheck *mailcheck;
- const char *mail;
-
- mailcheck = g_new(t_mailcheck, 1);
-
- mailcheck->status = NO_MAIL;
- mailcheck->interval = 30;
- mailcheck->mbox = NULL;
- mailcheck->command = NULL;
- mailcheck->tooltip = NULL;
-
- mailcheck->nomail_pb = get_mailcheck_pixbuf(NO_MAIL);
- mailcheck->oldmail_pb = get_mailcheck_pixbuf(OLD_MAIL);
- mailcheck->newmail_pb = get_mailcheck_pixbuf(NEW_MAIL);
-
- mail = g_getenv("MAIL");
-
- if(mail)
- mailcheck->mbox = g_strdup(mail);
- else
- {
- const char *logname = g_getenv("LOGNAME");
- mailcheck->mbox = g_strconcat("/var/spool/mail/", logname, NULL);
- }
-
- mailcheck->command = g_strdup("pine");
- mailcheck->term = TRUE;
-
- mailcheck->button = xfce_iconbutton_new_from_pixbuf(mailcheck->nomail_pb);
- gtk_widget_show(mailcheck->button);
- gtk_button_set_relief(GTK_BUTTON(mailcheck->button), GTK_RELIEF_NONE);
-
- g_signal_connect_swapped(mailcheck->button,
- "clicked", G_CALLBACK(run_mail_command),
- mailcheck);
-
- mailcheck_set_tip(mailcheck);
-
- return mailcheck;
-}
-
-void mailcheck_free(PanelControl * pc)
-{
- t_mailcheck *mailcheck = (t_mailcheck *) pc->data;
-
- g_free(mailcheck->mbox);
- g_free(mailcheck->command);
-
- g_object_unref(mailcheck->nomail_pb);
- g_object_unref(mailcheck->oldmail_pb);
- g_object_unref(mailcheck->newmail_pb);
-
- g_free(mailcheck);
-}
-
-static gboolean check_mail(PanelControl * pc)
-{
- t_mailcheck *mailcheck = (t_mailcheck *) pc->data;
- int mail;
- struct stat s;
-
- if(stat(mailcheck->mbox, &s) < 0)
- mail = NO_MAIL;
- else if(!s.st_size)
- mail = NO_MAIL;
- else if(s.st_mtime < s.st_atime)
- mail = OLD_MAIL;
- else
- mail = NEW_MAIL;
-
- if(mail != mailcheck->status)
- {
- mailcheck->status = mail;
-
- if(mail == NO_MAIL)
- xfce_iconbutton_set_pixbuf(XFCE_ICONBUTTON(mailcheck->button), mailcheck->nomail_pb);
- else if(mail == OLD_MAIL)
- xfce_iconbutton_set_pixbuf(XFCE_ICONBUTTON(mailcheck->button), mailcheck->oldmail_pb);
- else
- xfce_iconbutton_set_pixbuf(XFCE_ICONBUTTON(mailcheck->button), mailcheck->newmail_pb);
- }
-
- return TRUE;
-}
-
-static void mailcheck_set_theme(PanelControl *pc, const char *theme)
-{
- t_mailcheck *mailcheck = (t_mailcheck *) pc->data;
-
- g_object_unref(mailcheck->nomail_pb);
- g_object_unref(mailcheck->oldmail_pb);
- g_object_unref(mailcheck->newmail_pb);
-
- mailcheck->nomail_pb = get_mailcheck_pixbuf(NO_MAIL);
- mailcheck->oldmail_pb = get_mailcheck_pixbuf(OLD_MAIL);
- mailcheck->newmail_pb = get_mailcheck_pixbuf(NEW_MAIL);
-
- if(mailcheck->status == NO_MAIL)
- xfce_iconbutton_set_pixbuf(XFCE_ICONBUTTON(mailcheck->button), mailcheck->nomail_pb);
- else if(mailcheck->status == OLD_MAIL)
- xfce_iconbutton_set_pixbuf(XFCE_ICONBUTTON(mailcheck->button), mailcheck->oldmail_pb);
- else
- xfce_iconbutton_set_pixbuf(XFCE_ICONBUTTON(mailcheck->button), mailcheck->newmail_pb);
-}
-
-/* Options dialog
- * --------------
-*/
-static GtkWidget *mbox_entry;
-static GtkWidget *command_entry;
-static GtkWidget *term_checkbutton;
-static GtkWidget *spinbutton;
-
-static GtkWidget *revert_button;
-
-struct BackUp
-{
- char *mbox;
- char *command;
- gboolean term;
- int interval;
- char *tooltip;
-};
-
-static struct BackUp backup;
-
-static void create_mailcheck_backup(t_mailcheck *mc)
-{
- backup.mbox = g_strdup(mc->mbox);
- backup.command = g_strdup(mc->command);
- backup.term = mc->term;
- backup.interval = mc->interval;
- backup.tooltip = g_strdup(mc->tooltip);
-}
-
-static void clean_mailcheck_backup(void)
-{
- g_free(backup.mbox);
- backup.mbox = NULL;
- g_free(backup.command);
- backup.command = NULL;
- g_free(backup.tooltip);
-}
-
-static void update_options_box(t_mailcheck *mc)
-{
- gtk_entry_set_text(GTK_ENTRY(mbox_entry), mc->mbox);
- gtk_entry_set_text(GTK_ENTRY(command_entry), mc->command);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(term_checkbutton),
- mc->term);
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton), mc->interval);
-}
-
-static void mailcheck_revert_options(PanelControl *pc)
-{
- t_mailcheck *mc = (t_mailcheck *) pc->data;
-
- g_free(mc->mbox);
- mc->mbox = g_strdup(backup.mbox);
-
- g_free(mc->command);
- mc->command = g_strdup(backup.command);
-
- mc->term = backup.term;
- mc->interval = backup.interval;
-
- pc->interval = 1000 * mc->interval;
-
- update_options_box(mc);
-}
-
-static void mailcheck_apply_options(PanelControl * pc)
-{
- const char *tmp;
- t_mailcheck *mc = (t_mailcheck *) pc->data;
-
- tmp = gtk_entry_get_text(GTK_ENTRY(command_entry));
-
- if(tmp && *tmp)
- {
- g_free(mc->command);
- mc->command = g_strdup(tmp);
- }
-
- mc->term =
- gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(term_checkbutton));
-
- tmp = gtk_entry_get_text(GTK_ENTRY(mbox_entry));
-
- if(tmp && *tmp)
- {
- g_free(mc->mbox);
- mc->mbox = g_strdup(tmp);
- }
-
- mc->interval =
- gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton));
-
- pc->interval = 1000 * mc->interval;
-
- mailcheck_set_tip(mc);
-}
-
-static void browse_cb(GtkWidget * b, GtkEntry * entry)
-{
- const char *text = gtk_entry_get_text(entry);
- char *file;
-
- file = select_file_name(NULL, text, NULL);
-
- if(file)
- {
- gtk_entry_set_text(entry, file);
- make_sensitive(revert_button);
- }
-}
-
-gboolean mailcheck_entry_changed(PanelControl *pc)
-{
- mailcheck_apply_options(pc);
-
- make_sensitive(revert_button);
-
- /* needed to let entry handle focus-out as well */
- return FALSE;
-}
-
-void mailcheck_add_options(PanelControl * pc, GtkContainer * container,
- GtkWidget *revert, GtkWidget *done)
-{
- GtkWidget *vbox;
- GtkWidget *hbox;
- GtkWidget *label;
- GtkWidget *mbox_button;
- GtkWidget *command_button;
- GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
- t_mailcheck *mc = (t_mailcheck *) pc->data;
-
- create_mailcheck_backup(mc);
- revert_button = revert;
-
- vbox = gtk_vbox_new(TRUE, 8);
- gtk_container_set_border_width(GTK_CONTAINER(vbox), 10);
-
- /* mbox location */
- hbox = gtk_hbox_new(FALSE, 4);
-
- label = gtk_label_new(_("Mail box:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
- gtk_size_group_add_widget(sg, label);
- gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-
- mbox_entry = gtk_entry_new();
- gtk_box_pack_start(GTK_BOX(hbox), mbox_entry, TRUE, TRUE, 0);
-
- mbox_button = gtk_button_new_with_label(" ... ");
- gtk_box_pack_start(GTK_BOX(hbox), mbox_button, FALSE, FALSE, 0);
-
- g_signal_connect(mbox_button, "clicked", G_CALLBACK(browse_cb), mbox_entry);
-
- gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
-
- /* activate revert button when changing the label */
- g_signal_connect_swapped(mbox_entry, "insert-at-cursor",
- G_CALLBACK(make_sensitive), revert_button);
- g_signal_connect(mbox_entry, "delete-from-cursor",
- G_CALLBACK(make_sensitive), revert_button);
-
- /* only set label on focus out */
- g_signal_connect_swapped(mbox_entry, "focus-out-event",
- G_CALLBACK(mailcheck_entry_changed), pc);
-
- /* mail command */
- hbox = gtk_hbox_new(FALSE, 4);
-
- label = gtk_label_new(_("Mail command:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
- gtk_size_group_add_widget(sg, label);
- gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-
- command_entry = gtk_entry_new();
- gtk_tooltips_set_tip(tooltips, command_entry,
- _
- ("Command to run when the button on the panel is clicked"),
- NULL);
- gtk_box_pack_start(GTK_BOX(hbox), command_entry, TRUE, TRUE, 0);
-
- command_button = gtk_button_new_with_label(" ... ");
- gtk_box_pack_start(GTK_BOX(hbox), command_button, FALSE, FALSE, 0);
-
- g_signal_connect(command_button, "clicked", G_CALLBACK(browse_cb),
- command_entry);
-
- gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
-
- /* activate revert button when changing the label */
- g_signal_connect_swapped(command_entry, "insert-at-cursor",
- G_CALLBACK(make_sensitive), revert_button);
- g_signal_connect_swapped(command_entry, "delete-from-cursor",
- G_CALLBACK(make_sensitive), revert_button);
-
- /* only set label on focus out */
- g_signal_connect_swapped(command_entry, "focus-out-event",
- G_CALLBACK(mailcheck_entry_changed), pc);
-
- /* run in terminal ? */
- hbox = gtk_hbox_new(FALSE, 4);
-
- label = gtk_label_new(_(""));
- gtk_size_group_add_widget(sg, label);
- gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-
- term_checkbutton = gtk_check_button_new_with_mnemonic(_("Run in _terminal"));
- gtk_box_pack_start(GTK_BOX(hbox), term_checkbutton, FALSE, FALSE, 0);
-
- gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
-
- g_signal_connect_swapped(term_checkbutton, "toggled",
- G_CALLBACK(make_sensitive), revert_button);
-
- g_signal_connect_swapped(term_checkbutton, "toggled",
- G_CALLBACK(mailcheck_apply_options), pc);
-
- /* mail check interval */
- hbox = gtk_hbox_new(FALSE, 4);
-
- label = gtk_label_new(_("Interval (sec):"));
- gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
- gtk_size_group_add_widget(sg, label);
- gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-
- spinbutton = gtk_spin_button_new_with_range(1, 600, 1);
- gtk_box_pack_start(GTK_BOX(hbox), spinbutton, FALSE, FALSE, 0);
-
- gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
-
- g_signal_connect_swapped(spinbutton, "value-changed",
- G_CALLBACK(make_sensitive), revert_button);
-
- g_signal_connect_swapped(spinbutton, "value-changed",
- G_CALLBACK(mailcheck_apply_options), pc);
-
- update_options_box(mc);
-
- gtk_widget_show_all(vbox);
-
- /* signals */
- g_signal_connect_swapped(revert, "clicked",
- G_CALLBACK(mailcheck_revert_options), pc);
-
- g_signal_connect_swapped(done, "clicked",
- G_CALLBACK(mailcheck_apply_options), pc);
-
- gtk_container_add(container, vbox);
-}
-
-/* this must be called 'module_init', because that is what we look for
- * when opening the gmodule */
-void module_init(PanelControl * pc)
-{
- t_mailcheck *mailcheck = mailcheck_new();
- GtkWidget *b = mailcheck->button;
-
- gtk_container_add(GTK_CONTAINER(pc->base), b);
-
- pc->caption = g_strdup(_("Mail check"));
- pc->data = (gpointer) mailcheck;
- pc->main = b;
-
- pc->interval = 1000 * mailcheck->interval; /* in msec */
- pc->update = check_mail;
-
- pc->free = mailcheck_free;
-
- pc->read_config = mailcheck_read_config;
- pc->write_config = mailcheck_write_config;
- pc->set_theme = mailcheck_set_theme;
-
- pc->add_options = (gpointer) mailcheck_add_options;
-}