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

📄 gui.c

📁 系统任务管理器
💻 C
📖 第 1 页 / 共 5 页
字号:
	theme = g_new0(Theme, 1);	theme->path = g_strdup("Default");	theme->name = g_strdup(theme->path);	themes_list = g_list_append(themes_list, theme);	theme_dir = g_build_filename(gkrellm_homedir(), GKRELLM_THEMES_DIR, NULL);	add_themes_to_list(theme_dir, FALSE);	g_free(theme_dir);	theme_dir = g_build_filename(gkrellm_homedir(), ".themes", NULL);	add_themes_to_list(theme_dir, TRUE);	g_free(theme_dir);	theme_dir = gtk_rc_get_theme_dir();	add_themes_to_list(theme_dir, TRUE);#if defined(LOCAL_THEMES_DIR)	add_themes_to_list(LOCAL_THEMES_DIR, FALSE);#endif#if defined(SYSTEM_THEMES_DIR)	add_themes_to_list(SYSTEM_THEMES_DIR, FALSE);#endif	themes_list = g_list_sort(themes_list, (GCompareFunc) theme_compare);	if (_GK.command_line_theme)		{		theme = g_new0(Theme, 1);		theme->path = g_strdup(_GK.command_line_theme);		theme->name = g_strdup(theme->path);		themes_list = g_list_append(themes_list, theme);		}	find_theme_position_in_list();	}static GtkTreeModel *theme_create_model(void)	{	GtkListStore	*store;	GtkTreeIter		iter;	GList			*list;	Theme			*theme;	gkrellm_make_themes_list();	store = gtk_list_store_new(N_THEME_COLUMNS, G_TYPE_STRING, G_TYPE_STRING);	for (list = themes_list; list; list = list->next)		{		theme = (Theme *) list->data;		gtk_list_store_append(store, &iter);		gtk_list_store_set(store, &iter,				THEME_COLUMN, theme->name,				PATH_COLUMN, theme->path,				-1);		}	return GTK_TREE_MODEL(store);	}static voidcb_theme_tree_selection_changed(GtkTreeSelection *selection, gpointer data)	{	GtkTreeIter		iter;	GtkTreeModel	*model;	gchar			*path;	if (!gtk_tree_selection_get_selected(selection, &model, &iter))		return;	gtk_spin_button_set_value(GTK_SPIN_BUTTON(theme_alt_spin_button), 0.0);	gtk_tree_model_get(model, &iter, PATH_COLUMN, &path, -1);	gtk_entry_set_text(GTK_ENTRY(theme_entry), path);	gtk_label_set_text(GTK_LABEL(author_label), get_theme_author(path));	if (gkrellm_dup_string(&_GK.theme_path, path))		{		find_theme_position_in_list();		theme_modified = TRUE;		gkrellm_build();		}	}static voidcb_theme_alternative_changed(GtkWidget *widget, GtkSpinButton *spin)	{	gint	i;	i = gtk_spin_button_get_value_as_int(spin);	if (i > _GK.theme_n_alternatives)		{		i = _GK.theme_n_alternatives;		gtk_spin_button_set_value(spin, (gfloat) i);		}	if (i != _GK.theme_alternative)		{		_GK.theme_alternative = i;		theme_modified = TRUE;		gkrellm_build();		}	}static voidcb_theme_scale_changed(GtkWidget *widget, GtkSpinButton *spin)	{	gint	i;	i = gtk_spin_button_get_value_as_int(spin);	if (i != _GK.theme_scale)		{		_GK.theme_scale = i;		theme_modified = TRUE;		gkrellm_build();		}	}voidgkrellm_set_theme_alternatives_label(void)	{	GtkSpinButton	*spin;	gchar			buf[64];	if (!config_window)		return;	spin = GTK_SPIN_BUTTON(theme_alt_spin_button);	gtk_spin_button_set_value(spin, (gfloat) _GK.theme_alternative);	snprintf(buf, sizeof(buf), _("%d total theme alternatives"),					_GK.theme_n_alternatives);	gtk_label_set_text(GTK_LABEL(theme_alt_label), buf);	}voidgkrellm_save_theme_config(void)	{	FILE	*f;	gchar	*path;	/* Assume gkrellm -t is for testing and don't save theme config changes.	|  Similary for _GK.demo.	*/	if (!theme_modified || _GK.command_line_theme || _GK.demo)		return;	path = gkrellm_make_config_file_name(gkrellm_homedir(),					GKRELLM_THEME_CONFIG);	if ((f = fopen(path, "w")) != NULL)		{		fprintf(f, "%s\n", _GK.theme_path);		fprintf(f, "%d\n", _GK.theme_alternative);		fprintf(f, "%s\n", large_font.string);		fprintf(f, "%s\n", normal_font.string);		fprintf(f, "%s\n", small_font.string);		fprintf(f, "%d\n", _GK.theme_scale);		fclose(f);		}	g_free(path);	theme_modified = FALSE;	}voidgkrellm_load_theme_config(void)	{	FILE	*f;	gchar	*path, *s;	gchar	buf[1024];	gint	i;	/* Need to load the theme from ~/.gkrellm/theme_config only at startup	|  or if re-reading because of theme_event - these are only times 	|  _GK.theme_path will be NULL.  Note: _GK.theme_path will not be NULL	|  at startup if there is a command line theme, so no theme scaling if	|  using command line theme.	*/	if (!_GK.theme_path)		{		path = gkrellm_make_config_file_name(gkrellm_homedir(),					GKRELLM_THEME_CONFIG);		f = fopen(path, "r");		g_free(path);		if (f && fgets(buf, sizeof(buf), f))			{			if ((s = strchr(buf, (gint) '\n')) != NULL)				*s = '\0';			if (_GK.debug_level & DEBUG_GUI)				printf("gkrellm_load_theme_config: %s\n", buf);			s = buf;			if (s && *s != '#' && *s != '\0' && strcmp(s, "Default"))				{				if (*s == '/' || s[1] == ':')					_GK.theme_path = g_strdup(s);			  	else					_GK.theme_path = g_strdup_printf("%s/%s/%s",							gkrellm_homedir(), GKRELLM_THEMES_DIR, s);				}			for (i = 0; fgets(buf, sizeof(buf), f); ++i)				{				if ((s = strchr(buf, (gint) '\n')) != NULL)					*s = '\0';				if (_GK.debug_level & DEBUG_GUI)					printf("gkrellm_load_theme_config: %s\n", buf);				if (i == 0)					sscanf(buf, "%d", &_GK.theme_alternative);				if (i == 1 && !strstr(buf, "*-*"))	/* XXX Trap out GdkFont */					gkrellm_dup_string(&large_font.string, buf);				if (i == 2 && !strstr(buf, "*-*"))					gkrellm_dup_string(&normal_font.string, buf);				if (i == 3 && !strstr(buf, "*-*"))					gkrellm_dup_string(&small_font.string, buf);				if (i == 4)					sscanf(buf, "%d", &_GK.theme_scale);				}			}		if (f)			fclose(f);		}	if (!_GK.theme_path || !g_file_test(_GK.theme_path, G_FILE_TEST_IS_DIR))		gkrellm_dup_string(&_GK.theme_path, "");	if (!large_font.string)		gkrellm_dup_string(&large_font.string, "Serif 11");	if (!normal_font.string)		gkrellm_dup_string(&normal_font.string, "Serif 9");	if (!small_font.string)		gkrellm_dup_string(&small_font.string, "Serif 8");	}voidgkrellm_read_theme_event(GtkSettings  *settings)	{	Theme	*theme;	gchar	*s, *theme_name = NULL;	gint	alt = 0;	if (settings)	/* called via "notify::gtk-theme-name" signal connect, */					/* so get the current gtk theme name and switch to it  */		{		g_object_get(_GK.gtk_settings, "gtk-theme-name", &theme_name, NULL);		if ((_GK.debug_level & DEBUG_GUI) && theme_name)			printf("notify::gtk-theme-name: %s\n", theme_name);		if (   gkrellm_dup_string(&_GK.gtk_theme_name, theme_name)			&& _GK.track_gtk_theme_name		   )			{			theme = find_theme_in_list(theme_name);			if (!theme)				{				theme_name = g_strdup(_GK.default_track_theme);				if ((s = strrchr(theme_name, ':')) != NULL)					{					*s++ = '\0';					alt = atoi(s);					}				theme = find_theme_in_list(theme_name);				g_free(theme_name);				}			if (   theme && theme->path				&& gkrellm_dup_string(&_GK.theme_path,							strcmp(theme->path, "Default") ? theme->path : "")			   )				{				_GK.theme_alternative = alt;				theme_modified = TRUE;				gkrellm_save_theme_config();				gkrellm_build();				}			}		}	else		/* Called from cb_client_event() because we were sent the    */				/* _GKRELLM_READ_THEME client event, so reread theme config. */		{		g_free(_GK.theme_path);		_GK.theme_path = NULL;	/* Forces reread of GKRELLM_THEME_CONFIG */		gkrellm_build();		}	}static voidcb_load_theme(gpointer data, guint action, GtkWidget *widget)	{	GtkTreeIter		iter;	GtkTreeModel	*model;	GtkTreePath		*path;	Theme			*theme;	gint			row;	++_GK.theme_reload_count;	if (_GK.no_config)		return;	if (!themes_list)		gkrellm_make_themes_list();	if (action == THEME_ALT_NEXT || action == THEME_ALT_PREV)		{		_GK.theme_alternative += ((action == THEME_ALT_NEXT) ? 1 : -1);		if (_GK.theme_alternative > _GK.theme_n_alternatives)			{			_GK.theme_alternative = 0;			action = THEME_NEXT;			}		if (_GK.theme_alternative < 0)			{			_GK.theme_alternative = 100;			action = THEME_PREV;			}		theme_modified = TRUE;		}	else if (action > THEME_RELOAD)		_GK.theme_alternative = 0;	if (action == THEME_NEXT || action == THEME_PREV)		{		if (action == THEME_NEXT)			{			theme_position_in_list = theme_position_in_list->next;			if (!theme_position_in_list)				theme_position_in_list = themes_list;			}		else			{			theme_position_in_list = theme_position_in_list->prev;			if (!theme_position_in_list)				theme_position_in_list = g_list_last(themes_list);			}		if (config_window)			{			row = g_list_position(themes_list, theme_position_in_list);			model = gtk_tree_view_get_model(theme_treeview);			gtk_tree_model_iter_nth_child(model, &iter, NULL, row);			path = gtk_tree_model_get_path(model, &iter);			gtk_tree_view_set_cursor(theme_treeview, path, NULL, FALSE);			return;		/* cb_theme_tree_selection_changed -> gkrellm_build()*/			}		theme = (Theme *) theme_position_in_list->data;		gkrellm_dup_string(&_GK.theme_path,					strcmp(theme->path, "Default") ? theme->path : "");		theme_modified = TRUE;		}	if (action == THEME_SCALE_UP && _GK.theme_scale < 380)		{		_GK.theme_scale += 20;		theme_modified = TRUE;		}	else if (action == THEME_SCALE_DOWN && _GK.theme_scale > 50)		{		_GK.theme_scale -= 20;		theme_modified = TRUE;		}	gkrellm_build();	}static voiddestroy_font_dialogs(void)	{	if (large_font.fontseldlg)		gtk_widget_destroy(GTK_WIDGET(large_font.fontseldlg));	if (normal_font.fontseldlg)		gtk_widget_destroy(GTK_WIDGET(normal_font.fontseldlg));	if (small_font.fontseldlg)		gtk_widget_destroy(GTK_WIDGET(small_font.fontseldlg));	}static voidclose_theme_config(gint from_close)	{	destroy_font_dialogs();	}static voidcb_font_entry_activate(GtkWidget *widget, gpointer *data)	{	if (!get_font_entries())		return;	theme_modified = TRUE;	gkrellm_build();	}static voidcb_font_entry_changed(GtkWidget *widget, gpointer *data)	{	theme_modified = TRUE;	}gfloatgkrellm_get_theme_scale(void)	{	return (gfloat) (_GK.theme_scale) / 100.0;	}static voidcb_track_gtk(GtkToggleButton *button, GtkWidget *box)	{	_GK.track_gtk_theme_name = button->active;	gtk_widget_set_sensitive(box, _GK.track_gtk_theme_name);	}static voidcb_track_entry_changed(GtkWidget *widget, gpointer *data)	{	gchar	*s;	s = gkrellm_gtk_entry_get_text(&widget);	gkrellm_dup_string(&_GK.default_track_theme, s);	gkrellm_config_modified();	}static voidcreate_theme_tab(GtkWidget *tabs_vbox)	{	GtkWidget		*tabs;	GtkWidget		*vbox, *vbox1, *vbox2, *hbox;	GtkWidget		*label, *entry;	GtkWidget		*scrolled;	GtkTreeModel	*model;	GtkCellRenderer	*renderer;	gchar			*s;	tabs = gtk_notebook_new();	gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tabs), GTK_POS_TOP);	gtk_box_pack_start(GTK_BOX(tabs_vbox), tabs, TRUE, TRUE, 0);/* --Theme tab */	vbox = gkrellm_gtk_framed_notebook_page(tabs, _("Theme"));	hbox = gtk_hbox_new (FALSE, 0);	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);	label = gtk_label_new(_("Theme:"));	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 3);	theme_entry = gtk_entry_new();	gtk_entry_set_max_length(GTK_ENTRY(theme_entry), 128);	if (_GK.theme_path)		gtk_entry_set_text(GTK_ENTRY(theme_entry), _GK.theme_path);	gtk_box_pack_start(GTK_BOX(hbox), theme_entry, TRUE, TRUE,0);	hbox = gtk_hbox_new (FALSE, 0);	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);	label = gtk_label_new(_("Author:"));	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 3);	author_label = gtk_label_new(get_theme_author(_GK.theme_path));	gtk_misc_set_alignment(GTK_MISC(author_label), 0, 0.5);	gtk_box_pack_start(GTK_BOX(hbox), author_label, TRUE, TRUE, 5);	vbox1 = gkrellm_gtk_framed_vbox(vbox, NULL, 4, TRUE, 0, 2);	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(vbox1), scrolled, TRUE, TRUE, 0);	model = theme_create_model();	theme_treeview = GTK_TREE_VIEW(gtk_tree_view_new_with_model(model));	g_object_unref(G_OBJECT(model));	gtk_tree_view_set_rules_hint(theme_treeview, TRUE);	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_insert_column_with_attributes(theme_treeview, -1,				_("Theme"), renderer,				"text", THEME_COLUMN, NULL);	gtk_container_add(GTK_CONTAINER(scrolled), GTK_WIDGET(theme_treeview));	theme_selection = gtk_tree_view_get_selection(theme_treeview);	gtk_tree_selection_set_mode(theme_selection, GTK_SELECTION_SINGLE);	g_signal_connect(G_OBJECT(theme_selection), "changed",				G_CALLBACK(cb_theme_tree_selection_changed), NULL);	hbox = gtk_hbox_new (FALSE, 0);	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 2);	gkrellm_gtk_spin_button(hbox, &theme_alt_spin_button,			(gfloat)_GK.theme_alternative, 0.0, 100.0, 1.0, 5.0, 0, 60,			cb_theme_alternative_changed, NULL, FALSE, NULL);	theme_alt_label = gtk_label_new("");

⌨️ 快捷键说明

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