Mercurial > pidgin.yaz
view plugins/idle.c @ 4571:51e988d015ed
[gaim-migrate @ 4852]
I don't know if this is gtk's problem or my (our?) misunderstanding of
GtkNotebook, but it seems pages that are deleted aren't destroying the
child widgets, so we're doing that manually now. It should free up a LOT
of memory, and since this is how the old code did it (I think), it should
explain the large memory leaks people used to report.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Tue, 11 Feb 2003 17:26:16 +0000 |
parents | cddb50734169 |
children | 2427d847e39c |
line wrap: on
line source
/* a nifty little plugin to set your idle time to whatever you want it to be. * useful for almost nothing. mostly just a demo plugin. but it's fun to have * 40-day idle times. */ #include "config.h" #ifndef GAIM_PLUGINS #define GAIM_PLUGINS #endif #include "multi.h" #include "gaim.h" #include <sys/time.h> static struct gaim_connection *gc = NULL; const char *name() { return _("I'dle Mak'er"); } const char *description() { return _("Allows you to hand-configure how long you've been idle for"); } char *gaim_plugin_init(GModule *module) { return NULL; } static void set_idle(GtkWidget *button, GtkWidget *spinner) { time_t t; int tm = CLAMP(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinner)), 0, G_MAXINT); if (!gc) { return; } debug_printf("setting idle time for %s to %d\n", gc->username, tm); time(&t); t -= 60 * tm; gc->lastsent = t; serv_set_idle(gc, 60 * tm); gc->is_idle = 0; } static void sel_gc(GtkWidget *opt, struct gaim_connection *g) { gc = g; } static void make_connect_menu(GtkWidget *box) { GtkWidget *optmenu, *menu, *opt; GSList *c = connections; struct gaim_connection *g; optmenu = gtk_option_menu_new(); gtk_box_pack_start(GTK_BOX(box), optmenu, FALSE, FALSE, 5); menu = gtk_menu_new(); while (c) { g = (struct gaim_connection *)c->data; opt = gtk_menu_item_new_with_label(g->username); g_signal_connect(GTK_OBJECT(opt), "activate", G_CALLBACK(sel_gc), g); gtk_menu_append(GTK_MENU(menu), opt); gtk_widget_show(opt); c = g_slist_next(c); } gtk_option_menu_remove_menu(GTK_OPTION_MENU(optmenu)); gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), 0); if (connections) gc = connections->data; else gc = NULL; } struct gaim_plugin_description desc; struct gaim_plugin_description *gaim_plugin_desc() { desc.api_version = PLUGIN_API_VERSION; desc.name = g_strdup("I'dle Mak'er"); desc.version = g_strdup(VERSION); desc.description = g_strdup(_("Allows you to hand-configure how long you've been idle for")); desc.authors = g_strdup("Eric Warmenhoven <eric@warmenhoven.org>"); desc.url = g_strdup(WEBSITE); return &desc; } GtkWidget *gaim_plugin_config_gtk() { GtkWidget *ret; GtkWidget *frame, *label; GtkWidget *vbox, *hbox; GtkAdjustment *adj; GtkWidget *spinner, *button; ret = gtk_vbox_new(FALSE, 18); gtk_container_set_border_width(GTK_CONTAINER(ret), 12); frame = make_frame(ret, _("Idle Time")); vbox = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(frame), vbox); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); label = gtk_label_new(_("Set")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); make_connect_menu(hbox); label = gtk_label_new(_("idle for")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); adj = (GtkAdjustment *)gtk_adjustment_new(10, 0, G_MAXINT, 1, 0, 0); spinner = gtk_spin_button_new(adj, 0, 0); gtk_box_pack_start(GTK_BOX(hbox), spinner, TRUE, TRUE, 0); label = gtk_label_new(_("minutes.")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); hbox = gtk_hbox_new(TRUE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); button = gtk_button_new_with_mnemonic(_("_Set")); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5); g_signal_connect(GTK_OBJECT(button), "clicked", G_CALLBACK(set_idle), spinner); gtk_widget_show_all(ret); return ret; }