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

📄 plugins.c

📁 系统任务管理器
💻 C
📖 第 1 页 / 共 3 页
字号:
			g_free(s);			continue;			}		m = install_plugin(s);		if (m)	/* s is saved for use */			{			plugins_list = g_list_append(plugins_list, m);			s = g_path_get_basename(m->path);			if (! gkrellm_string_in_list(plugins_enable_list, s))				m->privat->enabled = FALSE;			}		g_free(s);		}	g_dir_close(dir);	}voidgkrellm_plugins_load(void)	{	GkrellmMonitor	*m;	gchar			*path;	if (_GK.command_line_plugin)		{		if (   *_GK.command_line_plugin != '.'			&& !strchr(_GK.command_line_plugin, G_DIR_SEPARATOR)		   )			path = g_strconcat(".", G_DIR_SEPARATOR_S,						_GK.command_line_plugin, NULL);		else			path = g_strdup(_GK.command_line_plugin);		plugin_log(_("*** Command line plugin:\n"), NULL);		if ((m = install_plugin(path)) == NULL)			g_free(path);		else			{			m->privat->from_command_line = TRUE;			plugins_list = g_list_append(plugins_list, m);			}		plugin_log("\n", NULL);		}	load_plugins_enable_file();	load_plugins_placement_file();	path = g_strconcat(gkrellm_homedir(), G_DIR_SEPARATOR_S,				GKRELLM_PLUGINS_DIR, NULL);	scan_for_plugins(path);	g_free(path);#if defined(LOCAL_PLUGINS_DIR)	scan_for_plugins(LOCAL_PLUGINS_DIR);#endif#if defined(SYSTEM_PLUGINS_DIR)	scan_for_plugins(SYSTEM_PLUGINS_DIR);#endif	}#if 0voidshuffle_test(void)	{	GList			*list;	GkrellmMonitor	*mon;	gint			i;	static gboolean	srand_done;	extern GtkWidget *gkrellm_monitor_vbox();	if (!srand_done)		{		srandom((unsigned int) time(0));		srand_done = TRUE;		}	for (list = gkrellm_monitor_list; list; list = list->next)		{		i = (gint) random();		i = (i % (g_list_length(gkrellm_monitor_list) - 2)) + 1;		mon = (GkrellmMonitor *) list->data;		if (mon->privat->main_vbox && mon != gkrellm_mon_host())			{			gtk_box_reorder_child(GTK_BOX(gkrellm_monitor_vbox()),						mon->privat->main_vbox, i);			}		}	}#endifstatic voidreplace_plugins()	{	GList			*new_monitor_list, *list;	GkrellmMonitor	*mon;	extern GtkWidget *gkrellm_monitor_vbox();	new_monitor_list = NULL;	for (list = gkrellm_monitor_list; list; list = list->next)		{		mon = (GkrellmMonitor *) list->data;		if (mon->privat->main_vbox && mon != gkrellm_mon_host())			{			gtk_widget_ref(mon->privat->main_vbox);			gtk_container_remove(GTK_CONTAINER(gkrellm_monitor_vbox()),					mon->privat->main_vbox);			}		if (MONITOR_ID(mon) != MON_PLUGIN)			new_monitor_list = g_list_append(new_monitor_list, mon);		}	for (list = gkrellm_monitor_list; list; list = list->next)		{		mon = (GkrellmMonitor *) list->data;		if (MONITOR_ID(mon) == MON_PLUGIN)			gkrellm_place_plugin(&new_monitor_list, mon);		}	g_list_free(gkrellm_monitor_list);	gkrellm_monitor_list = new_monitor_list;	for (list = gkrellm_monitor_list; list; list = list->next)		{		mon = (GkrellmMonitor *) list->data;		if (mon->privat->main_vbox && mon != gkrellm_mon_host())			{			gtk_box_pack_start(GTK_BOX(gkrellm_monitor_vbox()),					mon->privat->main_vbox, FALSE, FALSE, 0);			gtk_widget_unref(mon->privat->main_vbox);			}		}	}static GtkWidget	*place_plugin_window;static GtkWidget	*place_plugin_vbox;static gboolean		setting_place_buttons;static voidapply_place(void)	{	GList			*list;	GkrellmMonitor	*mon;	gint			i;	if (!place_plugin || setting_place_buttons)		return;	for (i = 0; i < N_BUILTIN_MONITORS; ++i)		if (GTK_TOGGLE_BUTTON(builtin_button[i])->active)			break;	for (list = gkrellm_monitor_list; list; list = list->next)		{		mon = (GkrellmMonitor *) list->data;		if (MONITOR_ID(mon) == MON_PLUGIN || i != mon->privat->button_id)			continue;		place_plugin->privat->insert_before_id = mon->id;		place_plugin->privat->insert_after =				GTK_TOGGLE_BUTTON(after_button)->active;		if (place_plugin->privat->insert_after)			place_plugin->privat->gravity = 0;		else			place_plugin->privat->gravity = gtk_spin_button_get_value_as_int(						GTK_SPIN_BUTTON(gravity_spin_button));		replace_plugins();		plugin_placement_modified = TRUE;		break;		}	}static voidcb_close_place(void)	{	if (place_plugin_window)		gtk_widget_destroy(place_plugin_window);	place_plugin_window = NULL;	place_plugin_vbox = NULL;	}static gintplace_plugin_window_delete_event(GtkWidget *widget, GdkEvent *ev,gpointer data)	{	cb_close_place();	return FALSE;	}static voidcb_place_default(GtkWidget *widget, gpointer data)	{	GkrellmMonitor	*mon;	if (!place_plugin)		return;	if (PLUGIN_INSERT_AFTER(place_plugin))		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(after_button),				TRUE);	else		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(before_button),				TRUE);	gtk_spin_button_set_value(GTK_SPIN_BUTTON(gravity_spin_button),			(gfloat) PLUGIN_GRAVITY(place_plugin));	mon = gkrellm_monitor_from_id(PLUGIN_INSERT_BEFORE_ID(place_plugin));	if (mon && mon->privat->button_id >= 0)		gtk_toggle_button_set_active(			GTK_TOGGLE_BUTTON(builtin_button[mon->privat->button_id]), TRUE);	}static voidplace_button_sensitivity(GkrellmMonitor *plugin, gboolean state)	{	GkrellmMonitor	*mon = NULL;	if (gkrellm_demo_mode())		{		gtk_widget_set_sensitive(place_button, FALSE);		return;		}	place_plugin = plugin;	if (state && plugin && plugin->create_monitor)		{		gtk_widget_set_sensitive(place_button, TRUE);		if (place_plugin_vbox)			gtk_widget_set_sensitive(place_plugin_vbox, TRUE);		}	else		{		gtk_widget_set_sensitive(place_button, FALSE);		if (place_plugin_vbox)			gtk_widget_set_sensitive(place_plugin_vbox, FALSE);		return;		}	if (!place_plugin_window)		return;	setting_place_buttons = TRUE;	gtk_label_set_text(GTK_LABEL(place_label), plugin->name);	if (plugin->privat->insert_after)		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(after_button), TRUE);	else		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(before_button), TRUE);	gtk_spin_button_set_value(GTK_SPIN_BUTTON(gravity_spin_button),			(gfloat) plugin->privat->gravity);	mon = gkrellm_monitor_from_id(plugin->privat->insert_before_id);	if (mon && mon->privat->button_id >= 0)		gtk_toggle_button_set_active(			GTK_TOGGLE_BUTTON(builtin_button[mon->privat->button_id]), TRUE);	setting_place_buttons = FALSE;	}static gbooleancb_place(GtkToggleButton *button, gpointer data)	{	if (!button->active)		return FALSE;	apply_place();	return TRUE;	}static voidcb_place_spin(GtkWidget *widget, GtkSpinButton *spin)	{	if (!place_plugin)		return;	if (place_plugin->privat->insert_after)		gtk_spin_button_set_value(GTK_SPIN_BUTTON(gravity_spin_button), 0.0);	else		apply_place();	return;	}static voidcb_place_button(GtkWidget *widget, gpointer data)	{	GtkWidget		*main_vbox, *vbox, *vbox1, *vbox2, *vbox3, *hbox;	GtkWidget		*button;	GtkTreeModel	*model;	GtkTreePath		*path;	GtkTreeIter		iter;	GSList			*group;	GList			*list;	GkrellmMonitor	*mon;	GkrellmMonprivate *mp;	gint			i;	if (gkrellm_demo_mode())		return;	if (!place_plugin_window)		{		place_plugin_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);		g_signal_connect(G_OBJECT(place_plugin_window), "delete_event",				G_CALLBACK(place_plugin_window_delete_event), NULL);		gtk_window_set_title(GTK_WINDOW(place_plugin_window),				_("GKrellM Place Plugin"));		gtk_window_set_wmclass(GTK_WINDOW(place_plugin_window),				"Gkrellm_conf", "Gkrellm");		main_vbox = gtk_vbox_new(FALSE, 0);		gtk_container_add(GTK_CONTAINER(place_plugin_window), main_vbox);		place_plugin_vbox = main_vbox;		vbox = gkrellm_gtk_framed_vbox(main_vbox, NULL, 3, FALSE, 4, 3);		hbox = gtk_hbox_new(FALSE, 0);		gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);		vbox1 = gkrellm_gtk_framed_vbox(hbox, _("Builtin Monitors"),				3, FALSE, 4, 3);		group = NULL;		for (i = 0, list = gkrellm_monitor_list; list; list = list->next)			{			mon = (GkrellmMonitor *) list->data;			mp  = mon->privat;			mon->privat->button_id = -1;			if (MONITOR_ID(mon) != MON_PLUGIN)				{				if (   !mon->name || !mon->create_monitor					|| mon == gkrellm_mon_host()				   )					continue;				button = gtk_radio_button_new_with_label(group, mon->name);				g_signal_connect(G_OBJECT(button), "clicked",						G_CALLBACK(cb_place), NULL);				gtk_box_pack_start(GTK_BOX(vbox1), button, FALSE, FALSE, 0);				if (i < N_BUILTIN_MONITORS)					{					builtin_button[i] = button;					mon->privat->button_id = i++;					}				group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button));				}			}		vbox1 = gtk_vbox_new(FALSE, 0);		gtk_box_pack_start(GTK_BOX(hbox), vbox1, FALSE, FALSE, 0);		place_label = gtk_label_new("");		gtk_box_pack_start(GTK_BOX(vbox1), place_label, FALSE, FALSE, 10);		vbox2 = gkrellm_gtk_framed_vbox(vbox1, _("Place Plugin"),				3, FALSE, 4, 3);		group = NULL;		vbox3 = gkrellm_gtk_framed_vbox(vbox2, NULL, 3, FALSE, 4, 3);		before_button = gtk_radio_button_new_with_label(group,				_("Before selected builtin monitor"));		g_signal_connect(G_OBJECT(before_button), "clicked",				G_CALLBACK(cb_place), NULL);		gtk_box_pack_start(GTK_BOX(vbox3), before_button, FALSE, FALSE, 0);		gkrellm_gtk_spin_button(vbox3, &gravity_spin_button, 8,				0.0, 15.0, 1, 1, 0, 50,				cb_place_spin, NULL, FALSE,				_("With gravity"));		vbox3 = gkrellm_gtk_framed_vbox(vbox2, NULL, 3, FALSE, 4, 3);		group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(before_button));		after_button = gtk_radio_button_new_with_label(group,				_("After selected builtin monitor"));		g_signal_connect(G_OBJECT(after_button), "clicked",				G_CALLBACK(cb_place), NULL);		gtk_box_pack_start(GTK_BOX(vbox3), after_button, FALSE, FALSE, 0);		hbox = gtk_hbox_new(FALSE, 0);		gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, FALSE, 0);		gkrellm_gtk_button_connected(hbox, NULL, TRUE, FALSE, 0,				cb_place_default, NULL, _("Plugin Defaults"));		hbox = gtk_hbutton_box_new();		gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_END);		gtk_box_set_spacing(GTK_BOX(hbox), 5);		gtk_box_pack_end(GTK_BOX(vbox1), hbox, FALSE, FALSE, 0);		button = gtk_button_new_from_stock(GTK_STOCK_OK);		GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);		g_signal_connect(G_OBJECT(button), "clicked",				G_CALLBACK(cb_close_place), NULL);		gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);		gtk_widget_show_all(place_plugin_window);		}	else		gtk_window_present(GTK_WINDOW(place_plugin_window));//		gdk_window_raise(place_plugin_window->window);	if (row_reference)		{		model = gtk_tree_view_get_model(treeview);		path = gtk_tree_row_reference_get_path(row_reference);		gtk_tree_model_get_iter(model, &iter, path);		gtk_tree_model_get(model, &iter, MON_COLUMN, &mon, -1);		place_button_sensitivity(mon, mon->privat->enabled);		}	}static voidcb_enable_plugin(GtkCellRendererToggle *cell, gchar *path_str, gpointer data)	{	GtkTreeModel	*model = (GtkTreeModel *)data;	GtkTreeIter		iter;	GtkTreePath		*path;	GkrellmMonitor	*mon;	gboolean		enable;	path = gtk_tree_path_new_from_string(path_str);	gtk_tree_model_get_iter(model, &iter, path);	gtk_tree_path_free(path);	gtk_tree_model_get(model, &iter,				ENABLE_COLUMN, &enable,				MON_COLUMN, &mon,				-1);	if (mon->privat->from_command_line)		enable = TRUE;	else		enable = !enable;	gtk_list_store_set(GTK_LIST_STORE(model), &iter,				ENABLE_COLUMN, enable, -1);	if (enable)		enable_plugin(mon);	else		disable_plugin(mon);	place_button_sensitivity(mon, enable);	}static voidcb_tree_selection_changed(GtkTreeSelection *selection, gpointer data)	{	GtkTreeIter		iter;	GtkTreeModel	*model;	GtkTreePath		*path;	GkrellmMonitor	*mon;	gtk_tree_row_reference_free(row_reference);	if (!gtk_tree_selection_get_selected(selection, &model, &iter))		{		row_reference = NULL;		place_button_sensitivity(NULL, FALSE);		return;		}	path = gtk_tree_model_get_path(model, &iter);	row_reference = gtk_tree_row_reference_new(model, path);	gtk_tree_model_get(model, &iter, MON_COLUMN, &mon, -1);	place_button_sensitivity(mon, mon->privat->enabled);	}voidgkrellm_plugins_config_close(void)	{	save_plugins_enable_file();	save_plugins_placement_file();	cb_close_place();	}static GtkTreeModel *create_model(void)	{	GtkListStore	*store;	GtkTreeIter		iter;	GkrellmMonitor	*mon;	GList			*list;	gchar			*buf;	store = gtk_list_store_new(N_COLUMNS,				G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_POINTER);	for (list = plugins_list; list; list = list->next)		{		mon = (GkrellmMonitor *) list->data;		if (mon->privat->from_command_line)			buf = g_strdup_printf("%s  (%s)", mon->name,					_("from command line"));		else			buf = NULL;		gtk_list_store_append(store, &iter);		gtk_list_store_set(store, &iter,				NAME_COLUMN, buf ? buf : mon->name,				ENABLE_COLUMN, mon->privat->enabled,				MON_COLUMN, mon,				-1);		g_free(buf);		}	return GTK_TREE_MODEL(store);	}voidgkrellm_plugins_config_create(GtkWidget *tab_vbox)	{	GtkWidget			*tabs;	GtkWidget			*vbox;	GtkWidget			*hbox;	GtkWidget			*scrolled;	GtkWidget			*view;	GtkTreeModel		*model;	GtkCellRenderer		*renderer;	GtkTreeSelection	*selection;	GtkTreeViewColumn	*column;	GtkTextIter			iter;	GtkTextBuffer		*buffer;	row_reference = NULL;	tabs = gtk_notebook_new();	gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tabs), GTK_POS_TOP);	gtk_box_pack_start(GTK_BOX(tab_vbox), tabs, TRUE, TRUE, 0);/* -- Plugins tab */	vbox = gkrellm_gtk_framed_notebook_page(tabs, _("Plugins"));	scrolled = gtk_scrolled_window_new(NULL, NULL);	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),			GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);	gtk_box_pack_start(GTK_BOX(vbox), scrolled, TRUE, TRUE, 2);	model = create_model();	treeview = GTK_TREE_VIEW(gtk_tree_view_new_with_model(model));	g_object_unref(G_OBJECT(model));	gtk_tree_view_set_rules_hint(treeview, TRUE);	renderer = gtk_cell_renderer_toggle_new();	gtk_tree_view_insert_column_with_attributes(treeview, -1, _("Enable"),				renderer,				"active", ENABLE_COLUMN, NULL);	g_signal_connect (G_OBJECT(renderer), "toggled",				G_CALLBACK(cb_enable_plugin), model);	renderer = gtk_cell_renderer_text_new();	column = gtk_tree_view_column_new_with_attributes (_("Plugin"),				renderer,				"text", NAME_COLUMN, NULL);	gtk_tree_view_append_column(treeview, column);	gtk_tree_view_column_set_sort_column_id(column, NAME_COLUMN);	gtk_tree_view_column_clicked(column);		/* Sort it *//* gtk_tree_sortable_set_sort_column_id(model,			NAME_COLUMN, GTK_ORDER_ASCENDING);*/	gtk_container_add(GTK_CONTAINER(scrolled), GTK_WIDGET(treeview));	selection = gtk_tree_view_get_selection(treeview);	gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);	g_signal_connect(G_OBJECT(selection), "changed",				G_CALLBACK(cb_tree_selection_changed), NULL);	hbox = gtk_hbutton_box_new();	gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_START);	gtk_box_set_spacing(GTK_BOX(hbox), 5);	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 2);	place_button = gtk_button_new_with_label(_("Place"));	gtk_box_pack_start(GTK_BOX(hbox), place_button, TRUE, TRUE, 0);	g_signal_connect(G_OBJECT(GTK_BUTTON(place_button)), "clicked",			G_CALLBACK(cb_place_button), NULL);	gtk_widget_set_sensitive(place_button, FALSE);/* --Plugins detect log tab */	vbox = gkrellm_gtk_framed_notebook_page(tabs, _("Install Log"));	view = gkrellm_gtk_scrolled_text_view(vbox, NULL,				GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));	gtk_text_buffer_get_end_iter(buffer, &iter);	if (plugin_install_log)		gtk_text_buffer_insert(buffer, &iter, plugin_install_log, -1);	else		gtk_text_buffer_insert(buffer, &iter, _("No plugins found."), -1);	}

⌨️ 快捷键说明

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