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

📄 fs.c

📁 系统任务管理器
💻 C
📖 第 1 页 / 共 5 页
字号:
		{		fs->label_is_data = TRUE;		fs->restore_label = FALSE;		fs->mouse_entered = TRUE;		gkrellm_config_modified();		}	x_fs_motion = ev->x;	draw_fs_text_decal(fs, 1);	gkrellm_draw_panel_layers(fs->panel);	fs_in_motion = fs;	x_moved = 0;	gkrellm_hide_button(fs->drawer_button);	return TRUE;	}static gintcb_panel_motion(GtkWidget *widget, GdkEventButton *ev)	{	GdkModifierType	state;	GList			*list;	FSmon			*fs;	GkrellmDecal	*d;	PangoFontDescription *font_desc;	gchar			buf[128];	gint			w, x_delta	= 0;	state = ev->state;	if (   !fs_in_motion		|| !(state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK))		|| !fs_in_motion->label_is_data	   )		{		fs_in_motion = NULL;		return FALSE;		}	font_desc = gkrellm_meter_alt_textstyle(style_id)->font;	d = fs_in_motion->text_decal;	format_fs_data(fs_in_motion, data_format_locale, buf, sizeof(buf));	gkrellm_decal_scroll_text_get_size(d, &w, NULL);	if (w > d->w)		{		x_delta = ev->x - x_fs_motion;		x_fs_motion = ev->x;		d->x_off += x_delta;		if (d->x_off < -w)			d->x_off = -w;		if (d->x_off > d->w)			d->x_off = d->w;		x_scroll = d->w / 3 - d->x_off;		for (list = fs_mon_list; list; list = list->next)			{			fs = (FSmon *) list->data;			if (fs->label_is_data)				{				draw_fs_text_decal(fs, 1);				gkrellm_draw_panel_layers(fs->panel);				}			}		if (x_moved > 0)			fs_in_motion->restore_label = FALSE;		}	if (x_moved == 0)		force_fs_check = FORCE_REDRAW;	/* Move krells out of the way */	x_moved += (x_delta > 0) ? x_delta : -x_delta;	return FALSE;	}static voidcb_fs_mount_button(GkrellmDecalbutton *button)	{	if (button)		mount_command((FSmon *) button->data);	}static voidcb_fs_eject_button(GkrellmDecalbutton *button, FSmon *fs)	{	if (button)		eject_tray(fs);	}static voidcb_fs_close_tray(GkrellmDecalbutton *button, FSmon *fs)	{	if (button)		close_tray(fs);	}static voidcreate_fs_monitor(GtkWidget *vbox, FSmon *fs, gint index, gint first_create)	{	GkrellmStyle	*style;	GkrellmMargin	*m;	GkrellmPanel	*p;	gint			h, label_x_position, label_y_off;	if (first_create)		fs->panel = gkrellm_panel_new0();	p = fs->panel;	fs->idx = index;	++n_fs_monitors;	fs->krell_factor = 1;	style = gkrellm_meter_style(style_id);	gkrellm_panel_label_get_position(style, &label_x_position, &label_y_off);	m = gkrellm_get_style_margins(style);	fs->text_decal = gkrellm_create_decal_text(p, "Afp0",			gkrellm_meter_textstyle(style_id), style, -1,			(label_y_off > 0) ? label_y_off : -1,			-1);	fs->mount_decal = gkrellm_create_decal_pixmap(p,			gkrellm_decal_misc_pixmap(), gkrellm_decal_misc_mask(),			N_MISC_DECALS, style, -1, -1);	fs->mount_decal->x =				gkrellm_chart_width() - fs->mount_decal->w - m->right;	if (fs->ejectable)		{		fs->eject_decal = gkrellm_create_decal_pixmap(p,				gkrellm_decal_misc_pixmap(), gkrellm_decal_misc_mask(),				N_MISC_DECALS, style, -1, -1);		if (mounting_supported)			{			x_eject_button_closed = fs->mount_decal->x;			x_eject_button_open = fs->mount_decal->x - fs->eject_decal->w + 1;			}		else			{			x_eject_button_closed = gkrellm_chart_width() - 2;			x_eject_button_open = x_eject_button_closed - fs->eject_decal->w;			}		fs->x_eject_button_target = x_eject_button_closed;		fs->eject_decal->x = x_eject_button_closed;		}	/* Usable width to determine various scrolling parameters.	*/	text_decal_width = fs->mount_decal->x - fs->text_decal->x;	fs->krell = gkrellm_create_krell(p,						gkrellm_krell_meter_piximage(style_id), style);	gkrellm_monotonic_krell_values(fs->krell, FALSE);	gkrellm_panel_configure(p, NULL, style);	gkrellm_panel_create(vbox, mon_fs, p);	fs->md_button = gkrellm_make_decal_button(p, fs->mount_decal,			cb_fs_mount_button, fs, D_MISC_FS_UMOUNTED, D_MISC_FS_PRESSED);	if (index == 0 && have_secondary_panels)		{		if ((h = p->h / 2) > 7)			h = 7;		fs->drawer_button = gkrellm_make_scaled_button(p, NULL,					cb_drawer_button, fs, TRUE, TRUE,					0, 0, 0,	/* NULL image => builtin depth & indices */					(gkrellm_chart_width() - 20) / 2, 0,					20, h);		/* Make it appear under the label decal */		gkrellm_remove_decal(p, fs->drawer_button->decal);		gkrellm_insert_decal_nth(p, fs->drawer_button->decal, 0);		}	if (fs->eject_decal)		{		fs->eject_button = gkrellm_make_decal_button(p, fs->eject_decal,			cb_fs_eject_button, fs, D_MISC_BUTTON_OUT, D_MISC_BUTTON_IN);		gkrellm_hide_button(fs->eject_button);		if (close_cdrom_command || close_cdrom_func)			gkrellm_decal_button_right_connect(fs->eject_button,						cb_fs_close_tray, fs);		}	if (first_create)		{		g_signal_connect(G_OBJECT(p->drawing_area), "expose_event",				G_CALLBACK(fs_expose_event), NULL);		g_signal_connect(G_OBJECT(p->drawing_area),"button_press_event",				G_CALLBACK(cb_panel_press), fs);		g_signal_connect(G_OBJECT(p->drawing_area),"button_release_event",				G_CALLBACK(cb_panel_release), fs);		g_signal_connect(G_OBJECT(p->drawing_area),"scroll_event",				G_CALLBACK(cb_panel_scroll), fs);		g_signal_connect(G_OBJECT(p->drawing_area),"motion_notify_event",				G_CALLBACK(cb_panel_motion), NULL);		g_signal_connect(G_OBJECT(p->drawing_area), "enter_notify_event",				G_CALLBACK(cb_panel_enter), fs);		g_signal_connect(G_OBJECT(p->drawing_area), "leave_notify_event",				G_CALLBACK(cb_panel_leave), fs);		if (   !secondary_monitors_shown && fs->secondary			&& (!fs_is_mounted(fs) || !fs->show_if_mounted))			gkrellm_panel_hide(fs->panel);		}	draw_fs_text_decal(fs, 0);	force_fs_check = FORCE_UPDATE;	if (fs->launch_mount.command == NULL)		fs->launch_mount.command = g_strdup("");	if (fs->launch_umount.command == NULL)		fs->launch_umount.command = g_strdup("");	}static voidfree_fsmon_strings(FSmon *fs)	{	g_free(fs->label);	g_free(fs->label_shadow);	g_free(fs->mount.directory);	g_free(fs->eject_device);	g_free(fs->launch_mount.command);	g_free(fs->launch_umount.command);	}static voiddestroy_fs_monitor(FSmon *fs)	{	gkrellm_reset_alert(fs->alert);	free_fsmon_strings(fs);	gkrellm_panel_destroy(fs->panel);	g_free(fs);	--n_fs_monitors;	}static voidcreate_fs(GtkWidget *vbox, gint first_create)	{	GList	*list;	FSmon	*fs;	gint	i;	if (fs_main_vbox == NULL)		{		fs_main_vbox = gtk_vbox_new(FALSE, 0);		gtk_box_pack_start(GTK_BOX(vbox), fs_main_vbox, FALSE, FALSE, 0);		gtk_widget_show(fs_main_vbox);		fs_secondary_vbox = gtk_vbox_new(FALSE, 0);		gtk_box_pack_start(GTK_BOX(vbox), fs_secondary_vbox, FALSE, FALSE, 0);		gtk_widget_show(fs_secondary_vbox);		secondary_monitors_shown = FALSE;		}	n_fs_monitors = 0;	for (i = 0, list = fs_mon_list; list; ++i, list = list->next)		{		fs = (FSmon *)list->data;		create_fs_monitor(fs->secondary ? fs_secondary_vbox : fs_main_vbox,fs,					i, first_create);		}	if (g_list_length(fs_mon_list) == 0)		gkrellm_spacers_hide(mon_fs);	}#define	FS_CONFIG_KEYWORD	"fs"static voidcb_alert_trigger(GkrellmAlert *alert, FSmon *fs)	{	/* Full panel alert, default decal.	*/	alert->panel = fs->panel;	}static voidcreate_alert(FSmon *fs)	{	fs->alert = gkrellm_alert_create(NULL, fs->label,				_("Percent Usage"),				TRUE, FALSE, TRUE,				100, 10, 1, 10, 0);	gkrellm_alert_trigger_connect(fs->alert, cb_alert_trigger, fs);	gkrellm_alert_config_connect(fs->alert, cb_alert_config, fs);	gkrellm_alert_command_process_connect(fs->alert, cb_command_process, fs);	}static voidsave_fs_config(FILE *f)	{	GList	*list;	FSmon	*fs;	gchar	quoted_label[64];	for (list = fs_mon_list; list; list = list->next)		{		fs = (FSmon *) list->data;		snprintf(quoted_label, sizeof(quoted_label), "\"%s\"", fs->label);		fprintf(f, "%s %s %s %d %d %d %d %d\n", FS_CONFIG_KEYWORD,				quoted_label, fs->mount.directory,				fs->fstab_mounting, fs->secondary,				fs->show_if_mounted, fs->label_is_data, fs->ejectable);		if (*(fs->launch_mount.command))			fprintf(f, "%s mount_command %s\n", FS_CONFIG_KEYWORD,					fs->launch_mount.command);		if (*(fs->launch_umount.command))			fprintf(f, "%s umount_command %s\n", FS_CONFIG_KEYWORD,					fs->launch_umount.command);		if (*(fs->eject_device))			fprintf(f, "%s eject_device %s\n", FS_CONFIG_KEYWORD,					fs->eject_device);		if (fs->alert)			gkrellm_save_alertconfig(f, fs->alert,					FS_CONFIG_KEYWORD, quoted_label);		}	if (!_GK.client_mode)		{		fprintf(f, "%s fs_check_timeout %d\n", FS_CONFIG_KEYWORD,				fs_check_timeout);		fprintf(f, "%s nfs_check_timeout %d\n", FS_CONFIG_KEYWORD,				nfs_check_timeout);		fprintf(f, "%s auto_eject %d\n", FS_CONFIG_KEYWORD, cdrom_auto_eject);		}	fprintf(f, "%s binary_units %d\n", FS_CONFIG_KEYWORD, binary_units);	fprintf(f, "%s data_format %s\n", FS_CONFIG_KEYWORD, data_format);	}static gbooleanfstab_user_permission(Mount *m)	{	struct stat my_stat;		stat(m->device, &my_stat);	if (   strstr(m->options, "user")		|| (strstr(m->options, "owner") && my_stat.st_uid == uid)	   )		return TRUE;	return FALSE;	}static gintfix_fstab_mountable_changed(FSmon *fs)	{	Mount	*m;	if (!mounting_supported)		return FALSE;	m = in_fstab_list(fs->mount.directory);	if (   (!m || (!fstab_user_permission(m) && uid != 0))		&& fs->fstab_mounting	   )		{		fs->fstab_mounting = FALSE;		return TRUE;		}			return FALSE;	}static FSmon *lookup_fs(gchar *name)	{	GList	*list;	FSmon	*fs;	if (!name)		return NULL;	for (list = fs_mon_list; list; list = list->next)		{		fs = (FSmon *) list->data;		if (!strcmp(fs->label, name))			return fs;		}	return NULL;	}static voidload_fs_config(gchar *arg)	{	static FSmon	*fs_prev;	FSmon			*fs;	gchar			*label;	gchar			config[32], item[CFG_BUFSIZE], dir[CFG_BUFSIZE];	gchar			name[64], item1[CFG_BUFSIZE];	gint 			n;	if ((n = sscanf(arg, "%31s %[^\n]", config, item)) != 2)		return;	if (!strcmp(config, "fs_check_timeout"))		{		sscanf(item, "%d", &fs_check_timeout);		if (fs_check_timeout < 2)			fs_check_timeout = 2;		}	else if (!strcmp(config, "nfs_check_timeout"))		{		sscanf(item, "%d", &nfs_check_timeout);		if (nfs_check_timeout < 5)			nfs_check_timeout = 5;		}	else if (!strcmp(config, "auto_eject"))		sscanf(item, "%d", &cdrom_auto_eject);	else if (!strcmp(config, "binary_units"))		sscanf(item, "%d", &binary_units);	else if (!strcmp(config, "data_format"))		gkrellm_locale_dup_string(&data_format, item, &data_format_locale);	else if (fs_prev && !strcmp(config, "mount_command"))		gkrellm_dup_string(&fs_prev->launch_mount.command, item);	else if (fs_prev && !strcmp(config, "umount_command"))		gkrellm_dup_string(&fs_prev->launch_umount.command, item);	else if (fs_prev && !strcmp(config, "eject_device"))		{		if (fs_prev->ejectable)			gkrellm_dup_string(&fs_prev->eject_device, item);		}	else if (!strcmp(config, GKRELLM_ALERTCONFIG_KEYWORD))		{		if (   sscanf(item, "\"%63[^\"]\" %[^\n]", name, item1) == 2			&& (fs = lookup_fs(name)) != NULL		   )			{			if (!fs->alert)				create_alert(fs);			gkrellm_load_alertconfig(&fs->alert, item1);			}		}	else		{		if ((label = gkrellm_cut_quoted_string(arg, &arg)) != NULL)			{			fs = g_new0(FSmon, 1);			gkrellm_locale_dup_string(&fs->label, label, &fs->label_shadow);			dir[0] = '\0';			sscanf(arg, "%s %d %d %d %d %d",  dir, &fs->fstab_mounting,					&fs->secondary, &fs->show_if_mounted,					&fs->label_is_data, &fs->ejectable);			if (fs->fstab_mounting > 1)		/* pre 2.0.0 config fix */				fs->fstab_mounting = FALSE;			if (!ejecting_supported)				fs->ejectable = FALSE;			if (!mounting_supported)				fs->fstab_mounting = fs->show_if_mounted = FALSE;			if (fs->secondary)				have_secondary_panels = TRUE;			fs->mount.directory = g_strdup(dir);			fs->restore_label = fs->label_is_data;			fix_fstab_mountable_changed(fs);			fs->krell_factor = 1;			fs->launch_mount.command = g_strdup("");			fs->launch_umount.command = g_strdup("");			fs->eject_device = g_strdup("");			fs_mon_list = g_list_append(fs_mon_list, fs);			fs_prev = fs;	/* XXX */			}		}	}/* --------------------------------------------------------------------- */enum	{	NAME_COLUMN,	MOUNT_POINT_COLUMN,	SHOW_COLUMN,	FSTAB_COLUMN,	MOUNT_COMMAND_COLUMN,	UMOUNT_COMMAND_COLUMN,	EJECTABLE_COLUMN,	DEVICE_COLUMN,	FSMON_COLUMN,	ALERT_COLUMN,	SHOW_DATA_COLUMN,	VISIBLE_COLUMN,	IMAGE_COLUMN,	N_COLUMNS	};static GtkTreeView		*treeview;static GtkTreeRowReference *row_reference;static GtkTreeSelection	*selection;static GtkWidget				*label_entry,				*dir_combo,				*mount_entry,				*umount_entry,				*mounting_button,				*ejectable_button,				*device_entry,				*secondary_button,				*show_button,				*delete_button,				*new_apply_button;static GtkWidget	*alert_button;static GtkWidget	*data_format_combo;static gboolean	(*original_row_drop_possible)();static void

⌨️ 快捷键说明

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