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

📄 battery.c

📁 系统任务管理器
💻 C
📖 第 1 页 / 共 3 页
字号:
			t = bat->percent;			if (t == -1)	/* APM battery flags should cause hide... but */				snprintf(buf, sizeof(buf), "no bat");			else				snprintf(buf, sizeof(buf), "%d%%", t);			break;		}	d = bat->time_decal;	w = gkrellm_gdk_string_width(d->text_style.font, buf);	x = (d->w - w) / 2;	if (x < 0)		x = 0;	d->x_off = x;	gkrellm_draw_decal_text(bat->panel, d, buf, force ? -1 : t);	}static voidupdate_battery_panel(Battery *bat)	{	GkrellmPanel	*p  = bat->panel;	if (!p)		return;	if (!bat->present)		{	/* Battery can be removed while running */		gkrellm_panel_hide(p);		return;		}	gkrellm_panel_show(p);	if (bat->time_left > 0 && bat->charging)		bat->charge_rate = (gfloat) (100 - bat->percent) / (gfloat) bat->time_left;	else		bat->charge_rate = 0.0;	if (enable_estimate)		estimate_battery_time_left(bat);	if (bat->on_line)		{		gkrellm_reset_alert(bat->alert);		gkrellm_freeze_alert(bat->alert);		gkrellm_draw_decal_pixmap(p, bat->power_decal, D_MISC_AC);		}	else		{		if (   (bat == composite_battery && enable_composite)			|| (bat != composite_battery && enable_each)			)			{			gkrellm_thaw_alert(bat->alert);			gkrellm_check_alert(bat->alert, alert_units_percent						? bat->percent : bat->time_left);			}		gkrellm_draw_decal_pixmap(p, bat->power_decal, D_MISC_BATTERY);		}	draw_time_left_decal(bat, FALSE);	gkrellm_update_krell(p, bat->krell, bat->percent);	gkrellm_draw_panel_layers(p);	}static voidupdate_battery(void)	{	GList		*list;	Battery		*bat;	static gint	seconds = 0;	if (!enable_each && !enable_composite)		return;	if (GK.second_tick)		{		if (seconds == 0)			{			for (list = battery_list; list; list = list->next)				((Battery *) list->data)->present = FALSE;			(*read_battery_data)();			for (list = battery_list; list; list = list->next)				{				bat = (Battery *) list->data;				if (!bat->panel)					create_battery_panel(bat, TRUE);				if (bat->enabled)					update_battery_panel(bat);				}			}		seconds = (seconds + 1) % poll_interval;		}	}static gbooleancb_expose_event(GtkWidget *widget, GdkEventExpose *ev, GkrellmPanel *p)	{	gdk_draw_drawable(widget->window,			widget->style->fg_gc[GTK_WIDGET_STATE(widget)], p->pixmap,			ev->area.x, ev->area.y, ev->area.x, ev->area.y,			ev->area.width, ev->area.height);	return FALSE;	}static gbooleancb_panel_enter(GtkWidget *w, GdkEventButton *ev, Battery *bat)	{	gkrellm_decal_on_top_layer(bat->time_decal, TRUE);	gkrellm_draw_panel_layers(bat->panel);	return FALSE;	}static gbooleancb_panel_leave(GtkWidget *w, GdkEventButton *ev, Battery *bat)	{	gkrellm_decal_on_top_layer(bat->time_decal, FALSE);	gkrellm_draw_panel_layers(bat->panel);	return FALSE;	}static gbooleancb_panel_press(GtkWidget *widget, GdkEventButton *ev, Battery *bat)	{	GkrellmDecal			*d;	static gboolean	time_unavailable_warned;	d = launch.decal;	if (ev->button == 3)		gkrellm_open_config_window(mon_battery);	else if (   ev->button == 2			 || (ev->button == 1 && !d)			 || (ev->button == 1 && d && ev->x < d->x)			)		{		if (bat->time_left == -1 && bat->present)			{			if (!time_unavailable_warned)				gkrellm_message_dialog(_("GKrellM Battery"),					_("Battery times are unavailable.  You\n"					  "could select the Estimated Time option."));			time_unavailable_warned = TRUE;			bat->display_mode = BATTERYDISPLAY_PERCENT;			}		else			{			bat->display_mode++;			if (bat->display_mode == BATTERYDISPLAY_EOM)				bat->display_mode = 0;			draw_time_left_decal(bat, TRUE);			gkrellm_draw_panel_layers(bat->panel);			gkrellm_config_modified();			}		}	return FALSE;	}static voidcreate_battery_panel(Battery *bat, gboolean first_create)	{	GkrellmPanel		*p;	GkrellmStyle		*style;	GkrellmMargin		*m;	gint				x, w;	if (!bat->panel)		bat->panel = gkrellm_panel_new0();	p = bat->panel;	style = gkrellm_meter_style(style_id);	m = gkrellm_get_style_margins(style);	bat->power_decal = gkrellm_create_decal_pixmap(p,			gkrellm_decal_misc_pixmap(), gkrellm_decal_misc_mask(),			N_MISC_DECALS, style, m->left, -1);	x = bat->power_decal->x + bat->power_decal->w + 2;	w = gkrellm_chart_width() - x - m->right;	bat->time_decal = gkrellm_create_decal_text(p, "8/%",						gkrellm_meter_textstyle(style_id),						style, x, -1, w);	bat->krell = gkrellm_create_krell(p,						gkrellm_krell_meter_piximage(style_id), style);	gkrellm_monotonic_krell_values(bat->krell, FALSE);	gkrellm_set_krell_full_scale(bat->krell, 100, 1);	gkrellm_panel_configure(p, NULL, style);	gkrellm_panel_create(battery_vbox, mon_battery, p);	/* Center the decals with respect to each other.	*/	if (bat->power_decal->h > bat->time_decal->h)		bat->time_decal->y += (bat->power_decal->h - bat->time_decal->h) / 2;	else		bat->power_decal->y += (bat->time_decal->h - bat->power_decal->h) / 2;	if (first_create)		{		g_signal_connect(G_OBJECT(p->drawing_area), "expose_event",				G_CALLBACK(cb_expose_event), p);		g_signal_connect(G_OBJECT(p->drawing_area), "button_press_event",				G_CALLBACK(cb_panel_press), bat);		g_signal_connect(G_OBJECT(p->drawing_area), "enter_notify_event",                G_CALLBACK(cb_panel_enter), bat);		g_signal_connect(G_OBJECT(p->drawing_area), "leave_notify_event",                G_CALLBACK(cb_panel_leave), bat);		 }	gkrellm_setup_decal_launcher(p, &launch, bat->time_decal);	if (   (bat == composite_battery && enable_composite)		|| (bat->id == 0 && composite_battery && !enable_composite)		|| (bat->id == 0 && !composite_battery)		)		launch_battery = bat;	if (bat == composite_battery)		bat->enabled = enable_composite;	else		bat->enabled = enable_each;	if (bat->enabled)		update_battery_panel(bat);	else		gkrellm_panel_hide(p);	}static voidspacer_visibility(void)	{	GList		*list;	Battery		*bat;	gboolean	enabled = FALSE;	for (list = battery_list; list; list = list->next)		{		bat = (Battery *) list->data;		enabled |= bat->enabled;		}	if (enabled)		gkrellm_spacers_show(mon_battery);	else		gkrellm_spacers_hide(mon_battery);	}static voidcreate_battery(GtkWidget *vbox, gint first_create)	{	GList	*list;	Battery	*bat;	battery_vbox = vbox;	if (_GK.demo)		enable_each = TRUE;	for (list = battery_list; list; list = list->next)		{		bat = (Battery *) list->data;		create_battery_panel(bat, first_create);		}	spacer_visibility();	}  /* Expand alert command substitution variables:  |  $H - hostname           $n - battery id  |  $t - time left          $p - percent  |  $o - online (boolean)   $c - charging (boolean)  */static voidcb_command_process(GkrellmAlert *alert, gchar *src, gchar *buf, gint size,			Battery *bat)	{	gchar		c, *s;	gint		len, value;	if (!buf || size < 1)		return;	--size;	*buf = '\0';	if (!src)		return;	for (s = src; *s != '\0' && size > 0; ++s)		{		len = 1;		if (*s == '$' && *(s + 1) != '\0')			{			value = -1;			if ((c = *(s + 1)) == 'H')				len = snprintf(buf, size, "%s", gkrellm_sys_get_host_name());			else if (c == 'n' && bat != composite_battery)				value = bat->id;			else if (c == 't')				value = bat->time_left;			else if (c == 'p')				value = bat->percent;			else if (c == 'o')				value = bat->on_line;			else if (c == 'c')				value = bat->charging;			else				len = 0;			if (value >= 0)				len = snprintf(buf, size, "%d", value);			++s;			}		else			*buf = *s;		size -= len;		buf += len;		}	*buf = '\0';	}static voidcb_battery_alert_trigger(GkrellmAlert *alert, Battery *bat)	{	GkrellmAlertdecal	*ad;	GkrellmDecal		*d;	alert->panel = bat->panel;	ad = &alert->ad;	d = bat->time_decal;	ad->x = d->x + 1;	ad->y = d->y - 2;	ad->w = d->w - 1;	ad->h = d->h + 4;	gkrellm_render_default_alert_decal(alert);	}static voiddup_battery_alert(void)	{	GList	*list;	Battery	*bat;	for (list = battery_list; list; list = list->next)		{		bat = (Battery *) list->data;		gkrellm_alert_dup(&bat->alert, bat_alert);		gkrellm_alert_trigger_connect(bat->alert,					cb_battery_alert_trigger, bat);		gkrellm_alert_command_process_connect(bat->alert,					cb_command_process, bat);		}	}  /* If the OS reports battery times, alerts will always have minutes units.  |  If the OS does not report battery times the initial alert create will  |  have minutes units if the estimate time option is enabled and it will  |  have battery percent level units if estimate time option is off.  Alert  |  creates from load config will have units in effect at last save config.  */static voidcreate_alert(void)	{	Battery	*bat;	if (!battery_list)		return;	bat = (Battery *) battery_list->data;	if (!bat_alert)		{		alert_units_need_estimate_mode = FALSE;		if (   alert_units_percent			|| (bat->time_left == -1 && !enable_estimate)		   )			{			if (bat->time_left == -1)				alert_units_percent = TRUE;			bat_alert = gkrellm_alert_create(NULL, _("Battery"),					_("Battery Percent Limits"),					FALSE, TRUE, TRUE, 99, 0, 1, 10, 0);			}		else			{			bat_alert = gkrellm_alert_create(NULL, _("Battery"),					_("Battery Minutes Remaining Limits"),					FALSE, TRUE, TRUE, 500, 0, 1, 10, 0);			if (bat->time_left == -1)				alert_units_need_estimate_mode = TRUE;			}		}	gkrellm_alert_config_connect(bat_alert, dup_battery_alert, NULL);	/* This alert is a master to be dupped and is itself never checked */	}static voidsave_battery_config(FILE *f)	{	GList	*list;	Battery	*bat;	fprintf(f, "%s enable %d\n", BAT_CONFIG_KEYWORD, enable_each);	fprintf(f, "%s enable_composite %d\n", BAT_CONFIG_KEYWORD,					enable_composite);	fprintf(f, "%s estimate_time %d\n", BAT_CONFIG_KEYWORD, enable_estimate);	/* 2.1.15: scale saved float values to avoid decimal points in the config.	*/	fprintf(f, "%s estimate_time_discharge %.0f\n", BAT_CONFIG_KEYWORD,				estimate_runtime[0] * GKRELLM_FLOAT_FACTOR);	fprintf(f, "%s estimate_time_charge %.0f\n", BAT_CONFIG_KEYWORD,				estimate_runtime[1] * GKRELLM_FLOAT_FACTOR);	fprintf(f, "%s estimate_time_charge_model %d\n", BAT_CONFIG_KEYWORD,				estimate_model[1]);	fprintf(f, "%s full_cap_fallback %d\n", BAT_CONFIG_KEYWORD,						full_cap_fallback);	if (!_GK.client_mode)		fprintf(f, "%s poll_interval %d\n", BAT_CONFIG_KEYWORD, poll_interval);	if (launch.command)		fprintf(f, "%s launch1 %s\n", BAT_CONFIG_KEYWORD, launch.command);	if (launch.tooltip_comment)		fprintf(f, "%s tooltip_comment %s\n",					BAT_CONFIG_KEYWORD, launch.tooltip_comment);	fprintf(f, "%s alert_units_percent %d\n", BAT_CONFIG_KEYWORD,				alert_units_percent);	for (list = battery_list; list; list = list->next)		{		bat = (Battery *) list->data;		if (bat == composite_battery)	/* Don't 2.1.16 backwards break */			fprintf(f, "%s display_mode_composite %d %d\n", BAT_CONFIG_KEYWORD,						bat->display_mode, bat->id);		else			fprintf(f, "%s display_mode %d %d\n", BAT_CONFIG_KEYWORD,						bat->display_mode, bat->id);		}

⌨️ 快捷键说明

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