⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alerts.c

📁 系统任务管理器
💻 C
📖 第 1 页 / 共 3 页
字号:
	}voidgkrellm_alert_delay_config(GkrellmAlert *alert, gint step,			gint high, gint low)	{	if (!alert || step < 1 || high < step)		return;	low = (low / step) * step;	high = (high / step) * step;	alert->delay_high = (gfloat) high;	alert->delay_low = (gfloat) low;	alert->delay_step = (gfloat) step;	gkrellm_alert_set_delay(alert, low);	}voidgkrellm_alert_dup(GkrellmAlert **a_dst, GkrellmAlert *a_src)	{	GkrellmAlert	*alert;	if (!a_dst || !a_src)		return;	if (*a_dst)		(*a_dst)->plugin_list = NULL;	/* XXX fixme */	gkrellm_alert_destroy(a_dst);	alert = gkrellm_alert_create(a_src->panel, a_src->name,				a_src->unit_string, a_src->check_high, a_src->check_low,				a_src->do_panel_updates, a_src->max_high, a_src->min_low,				a_src->step0, a_src->step1, a_src->digits);	gkrellm_dup_string(&alert->alarm_command, a_src->alarm_command);	gkrellm_dup_string(&alert->warn_command, a_src->warn_command);	alert->warn_repeat_set = a_src->warn_repeat_set;	alert->alarm_repeat_set = a_src->alarm_repeat_set;	alert->low = a_src->low;	alert->high = a_src->high;	gkrellm_alert_set_delay(alert, a_src->delay);	alert->plugin_list = a_src->plugin_list;	/* XXX fixme */	alert->activated = a_src->activated;	*a_dst = alert;	}static voidreset_alert(GkrellmAlert *alert, gboolean suppress)	{	GkrellmTrigger	*th = &alert->high,					*tl = &alert->low;	if (   suppress		&& (   ((th->alarm_on || tl->alarm_on) && alert->alarm_repeat_set == 0)			|| ((th->warn_on || tl->warn_on) && alert->warn_repeat_set == 0)		   )	   )		alert->suppress_command = TRUE;	th->alarm_on = FALSE;	th->warn_on = FALSE;	tl->alarm_on = FALSE;	tl->warn_on = FALSE;	alert->alarm_repeat = 0;	alert->warn_repeat = 0;	destroy_alert_objects(alert);	}voidgkrellm_reset_alert(GkrellmAlert *alert)	{	if (!alert)		return;	if (g_list_find(gkrellm_alert_list, alert))		{		reset_alert(alert, FALSE);		gkrellm_alert_list = g_list_remove(gkrellm_alert_list, alert);		}	}voidgkrellm_reset_alert_soft(GkrellmAlert *alert)	{	if (!alert)		return;	if (g_list_find(gkrellm_alert_list, alert))		{		reset_alert(alert, TRUE);		gkrellm_alert_list = g_list_remove(gkrellm_alert_list, alert);		}	}voidgkrellm_reset_panel_alerts(GkrellmPanel *p)	{	GList			*list;	GkrellmAlert	*alert;	gboolean		done = FALSE;	if (!p)		return;	while (!done)		{		done = TRUE;	/* Assume won't find any */		for (list = gkrellm_alert_list; list; list = list->next)			{			alert = (GkrellmAlert *) list->data;			if (alert->panel != p)				continue;			done = FALSE;			reset_alert(alert, FALSE);			gkrellm_alert_list = g_list_remove(gkrellm_alert_list, alert);			alert->panel = NULL;			alert->cb_trigger = NULL;			alert->cb_trigger_data = NULL;			alert->cb_stop = NULL;			alert->cb_stop_data = NULL;			break;			}		}	}  /* At theme changes, turn all alerts off so there won't be any alert decals  |  in monitor lists when they are destroyed.  The alerts should just get  |  retriggered.  Surely an alert going off is a good time to change themes.  */voidgkrellm_alert_reset_all(void)	{	GList	*list;	for (list = gkrellm_alert_list; list; list = list->next)		reset_alert((GkrellmAlert *) list->data, TRUE);	g_list_free(gkrellm_alert_list);	gkrellm_alert_list = NULL;	}voidgkrellm_alert_update(void)	{	GList					*list, *plist;	GkrellmAlert			*alert;	GkrellmAlertdecal		*ad;	GkrellmAlertkrell		*ak;	GkrellmAlertPlugin		*gap;	GkrellmAlertPluginLink	*apl;	for (list = gkrellm_alert_list; list; list = list->next)		{		alert = (GkrellmAlert *) list->data;		ad = &alert->ad;		ak = &alert->ak;		if (ak->krell)			{			ak->krell_position = (ak->krell_position + 2) % 100;			gkrellm_update_krell(alert->panel, ak->krell, ak->krell_position);			}		if (ad->decal)			{			if (ad->frame <= 0)				ad->dir = 1;			else if (ad->frame >= ad->nframes - 1)				ad->dir = 0;			ad->frame += (ad->dir) ? 1 : -1;			gkrellm_draw_decal_pixmap(alert->panel, ad->decal, ad->frame);			}		if (alert->do_panel_updates)			gkrellm_draw_panel_layers(alert->panel);		if (GK.second_tick)			{			if (alert->alarm_repeat > 0 && --alert->alarm_repeat == 0)				{				run_command(alert, alert->alarm_command);				alert->alarm_repeat = alert->alarm_repeat_set;				}			if (alert->warn_repeat > 0 && --alert->warn_repeat == 0)				{				run_command(alert, alert->warn_command);				alert->warn_repeat = alert->warn_repeat_set;				}			for (plist = alert->plugin_list; plist; plist = plist->next)				{				apl = (GkrellmAlertPluginLink *) plist->data;				gap = apl->alert_plugin;				if (MONITOR_ENABLED(gap->mon) && gap->update_func)					(*gap->update_func)(alert, apl->data);				}			}		}	}gbooleangkrellm_alert_is_activated(GkrellmAlert *alert)	{	if (alert)		return alert->activated;	return FALSE;	}voidgkrellm_alert_get_alert_state(GkrellmAlert *alert, gboolean *alarm_state,				gboolean *warn_state)	{	*warn_state = (alert->high.warn_on || alert->low.warn_on);	*alarm_state = (alert->high.alarm_on || alert->low.alarm_on);	}/* ------------------------------------------------------------ *//* Plugin interface to alerts. */GkrellmAlertPlugin *gkrellm_alert_plugin_add(GkrellmMonitor *mon, gchar *name)	{	GkrellmAlertPlugin	*gap;	if (!mon || !name || !*name)		return NULL;	gap = g_new0(GkrellmAlertPlugin, 1);	gap->mon = mon;	gap->name = g_strdup(name);	alert_plugin_list = g_list_append(alert_plugin_list, gap);	return gap;	}voidgkrellm_alert_plugin_alert_connect(GkrellmAlertPlugin *gap,			void (*alarm_func)(), void (*warn_func)(),			void (*update_func)(), void (*check_func)(),			void (*destroy_func)())	{	gap->alarm_func = alarm_func;	gap->warn_func = warn_func;	gap->update_func = update_func;	gap->check_func = check_func;	gap->destroy_func = destroy_func;	}voidgkrellm_alert_plugin_config_connect(GkrellmAlertPlugin *gap, gchar *tab_name,			void (*config_create_func)(), void (*config_apply_func),			void (*config_save_func)(), void (*config_load_func)())	{	if (!gap)		return;	g_free(gap->tab_name);	gap->tab_name = g_strdup(tab_name);	gap->config_create_func = config_create_func;	gap->config_apply_func = config_apply_func;	gap->config_save_func = config_save_func;	gap->config_load_func = config_load_func;	}  /* The id_string is so a plugin can get a unique config name for an alert.  */gchar *gkrellm_alert_plugin_config_get_id_string(GkrellmAlert *alert)	{	if (alert)		return alert->id_string;	return NULL;	}voidgkrellm_alert_plugin_alert_attach(GkrellmAlertPlugin *gap,			GkrellmAlert *alert, gpointer data)	{	GkrellmAlertPluginLink	*apl;	if (!gap || !alert)		return;	apl = g_new0(GkrellmAlertPluginLink, 1);	apl->alert_plugin = gap;	apl->data = data;	alert->plugin_list = g_list_append(alert->plugin_list, apl);	}voidgkrellm_alert_plugin_alert_detach(GkrellmAlertPlugin *gap, GkrellmAlert *alert)	{	GList					*list;	GkrellmAlertPluginLink	*apl;	if (!gap || !alert)		return;	for (list = alert->plugin_list; list; list = list->next)		{		apl = (GkrellmAlertPluginLink *) list->data;		if (apl->alert_plugin == gap)			{			alert->plugin_list = g_list_remove(alert->plugin_list, apl);			g_free(apl);			break;			}		}	}gpointergkrellm_alert_plugin_get_data(GkrellmAlertPlugin *gap,GkrellmAlert *alert)	{	GList					*list;	GkrellmAlertPluginLink	*apl;	if (!gap || !alert)		return NULL;	for (list = alert->plugin_list; list; list = list->next)		{		apl = (GkrellmAlertPluginLink *) list->data;		if (apl->alert_plugin == gap)			return apl->data;		}	return NULL;	}voidgkrellm_alert_plugin_command_process(GkrellmAlert *alert, gchar *src,			gchar *dst, gint dst_size)	{	if (alert && alert->cb_command_process)		(*alert->cb_command_process)(alert, src, dst, dst_size,				alert->cb_command_process_data);	else		snprintf(dst, dst_size, "%s", src);	}/* ------------------------------------------------------------ */voidgkrellm_alert_command_process_connect(GkrellmAlert *alert, void (*func)(),						gpointer data)	{	if (!alert)		return;	alert->cb_command_process = func;	alert->cb_command_process_data = data;	}voidgkrellm_alert_config_connect(GkrellmAlert *alert, void (*func)(),gpointer data)	{	if (!alert)		return;	alert->cb_config = func;	alert->cb_config_data = data;	}voidgkrellm_alert_config_create_connect(GkrellmAlert *alert,						void (*func)(), gpointer data)	{	if (!alert)		return;	alert->cb_config_create = func;	alert->cb_config_create_data = data;	}static voidalert_delete(GtkWidget *widget, GkrellmAlert **ap)	{	GkrellmAlert			*alert;	if (!ap)		return;	alert = *ap;	alert->activated = FALSE;	alert->config_closing = TRUE;	if (alert->cb_config)		(*alert->cb_config)(alert, alert->cb_config_data);	if (alert->config_window)		gtk_widget_destroy(alert->config_window);	destroy_alert(alert);	*ap = NULL;	}static voidalert_close(GtkWidget *widget, GkrellmAlert **ap)	{	GkrellmAlert	*alert;	if (!ap)		return;	alert = *ap;	if (!alert->activated)		alert_delete(NULL, ap);	else if (alert->config_window)		{		gtk_widget_destroy(alert->config_window);		alert->config_window = NULL;		alert->delete_button = NULL;		}	}voidgkrellm_alert_window_destroy(GkrellmAlert **ap)	{	alert_close(NULL, ap);	}static gintalert_config_window_delete_event(GtkWidget *widget, GdkEvent *ev,		GkrellmAlert **ap)	{	alert_close(widget, ap);	return FALSE;	}static voidalert_apply(GtkWidget *widget, GkrellmAlert **ap)	{	GList					*plist, *list;	GkrellmAlert			*alert;	GkrellmAlertPlugin		*gap;	GkrellmAlertPluginLink	*apl;	gpointer				data;	gchar					*s;	GtkSpinButton			*spin;	gint					n;	alert = *ap;	if (!alert->activated && !alert->config_modified)		return;	if (alert->high.alarm_limit_spin_button)		{		spin = GTK_SPIN_BUTTON(alert->high.alarm_limit_spin_button);		alert->high.alarm_limit = gtk_spin_button_get_value(spin);		spin = GTK_SPIN_BUTTON(alert->high.warn_limit_spin_button);		alert->high.warn_limit = gtk_spin_button_get_value(spin);		}	if (alert->low.alarm_limit_spin_button)		{		spin = GTK_SPIN_BUTTON(alert->low.alarm_limit_spin_button);		alert->low.alarm_limit = gtk_spin_button_get_value(spin);		spin = GTK_SPIN_BUTTON(alert->low.warn_limit_spin_button);		alert->low.warn_limit = gtk_spin_button_get_value(spin);		}	if (alert->high.alarm_limit == 0.0 && alert->low.alarm_limit == 0.0)		return;	if (alert->alarm_command_entry)		{		spin = GTK_SPIN_BUTTON(alert->alarm_repeat_spin_button);		alert->alarm_repeat_set = gtk_spin_button_get_value_as_int(spin);		s = gkrellm_gtk_entry_get_text(&alert->alarm_command_entry);		gkrellm_dup_string(&alert->alarm_command, s);		if (!*s)			alert->alarm_repeat_set = 0;		if (alert->high.alarm_on || alert->low.alarm_on)			alert->alarm_repeat = alert->alarm_repeat_set;		}	if (alert->warn_command_entry)		{		spin = GTK_SPIN_BUTTON(alert->warn_repeat_spin_button);		alert->warn_repeat_set = gtk_spin_button_get_value_as_int(spin);		s = gkrellm_gtk_entry_get_text(&alert->warn_command_entry);		gkrellm_dup_string(&alert->warn_command, s);		if (!*s)			alert->warn_repeat_set = 0;		if (alert->high.warn_on || alert->low.warn_on)			alert->warn_repeat = alert->warn_repeat_set;		}	if (alert->delay_spin_button)		{		spin = GTK_SPIN_BUTTON(alert->delay_spin_button);		n = gtk_spin_button_get_value_as_int(spin);		gkrellm_alert_set_delay(alert, n / alert->delay_step);		}	alert->activated = TRUE;	for (plist = alert_plugin_list; plist; plist = plist->next)		{		data = NULL;		gap = (GkrellmAlertPlugin *) plist->data;		for (list = alert->plugin_list; list; list = list->next)			{			apl = (GkrellmAlertPluginLink *) list->data;			if (apl->alert_plugin == gap)				{				data = apl->data;				break;				}			}		if (MONITOR_ENABLED(gap->mon) && gap->config_apply_func)			(*gap->config_apply_func)(alert, data, alert->config_closing);		}	gtk_widget_set_sensitive(alert->delete_button, alert->activated);	gtk_widget_set_sensitive(alert->icon_box, alert->activated);	if (alert->cb_config)		(*alert->cb_config)(alert, alert->cb_config_data);	gkrellm_config_modified();	}static voidalert_ok(GtkWidget *widget, GkrellmAlert **ap)	{	(*ap)->config_closing = TRUE;	alert_apply(NULL, ap);	alert_close(NULL, ap);	}static voidcb_delay_spin_changed(GtkAdjustment *adjustment, GkrellmAlert *alert)	{	GtkSpinButton	*spin;	gint			delay;	spin = GTK_SPIN_BUTTON(alert->delay_spin_button);	delay = gtk_spin_button_get_value_as_int(spin);	if ((delay % alert->delay_step) != 0)		{		delay = delay / alert->delay_step * alert->delay_step;		gtk_spin_button_set_value(spin, delay);		}	alert->config_modified = TRUE;	gtk_widget_set_sensitive(alert->icon_box, TRUE);	}static voidcb_high_alarm_spin_changed(GtkAdjustment *adjustment, GkrellmAlert *alert)	{	GtkSpinButton	*spin;	gfloat			alarm, warn;	spin = GTK_SPIN_BUTTON(alert->high.alarm_limit_spin_button);	alarm = gtk_spin_button_get_value(spin);	spin = GTK_SPIN_BUTTON(alert->high.warn_limit_spin_button);	warn = gtk_spin_button_get_value(spin);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -