예제 #1
0
파일: misc.c 프로젝트: B-Rich/LilyTerm
void set_VTE_CJK_WIDTH_environ(gint VTE_CJK_WIDTH)
{
#ifdef DETAIL
	g_debug("! Launch set_VTE_CJK_WIDTH_environ() with VTE_CJK_WIDTH = %d", VTE_CJK_WIDTH);
#endif
	// Set the VTE_CJK_WIDTH environment
	switch (VTE_CJK_WIDTH)
	{
		case 0:
			// Don't touch VTE_CJK_WIDTH
			break;
		//case 1:
		//	// The VTE_CJK_WIDTH will be setted depend on the LC environ in newer libvte version.
		//	unsetenv("VTE_CJK_WIDTH");
		//	break;
		case 1:
			// VTE_CJK_WIDTH=narrow only work for vte >= 0.16.14
			setenv("VTE_CJK_WIDTH", "narrow", TRUE);
			break;
		case 2:
			setenv("VTE_CJK_WIDTH", "wide", TRUE);
			break;
		default:
#ifdef FATAL
			print_switch_out_of_range_error_dialog("set_VTE_CJK_WIDTH_environ",
							       "VTE_CJK_WIDTH",
							       VTE_CJK_WIDTH);
#endif
			break;

	}
}
예제 #2
0
파일: misc.c 프로젝트: B-Rich/LilyTerm
// get default locale from environ
// The returned string CAN NOT be free()!
gchar *get_default_LC_DATA(gint LC_TYPE)
{
#ifdef DETAIL
	g_debug("! Launch get_default_LC_DATA() with LC_TYPE= %d", LC_TYPE);
#endif
	char *LC_DATA;
	switch (LC_TYPE)
	{
		case LC_CTYPE:
			LC_DATA = (char*)g_getenv("LC_CTYPE");
			break;
		case LC_MESSAGES:
			LC_DATA = (char*)g_getenv("LC_MESSAGES");
			break;
		default:
#ifdef FATAL
			print_switch_out_of_range_error_dialog("get_default_LC_DATA", "LC_TYPE", LC_TYPE);
#endif
			return "";
	}
	char *LC_ALL = (char*)g_getenv("LC_ALL");
	char *LANG = (char*)g_getenv("LANG");

	if ( (!LC_DATA) && LANG)
		LC_DATA = LANG;

	if (LC_ALL)
		LC_DATA = LC_ALL;

//	g_debug("Get LC_DATA = %s", LC_DATA);
	if (LC_DATA)
		return LC_DATA;
	else
		return "";
}
예제 #3
0
파일: misc.c 프로젝트: B-Rich/LilyTerm
gchar *get_VTE_CJK_WIDTH_str(gint VTE_CJK_WIDTH)
{
#ifdef DETAIL
	g_debug("! Launch get_VTE_CJK_WIDTH_str() with VTE_CJK_WIDTH = %d", VTE_CJK_WIDTH);
#endif
	switch (VTE_CJK_WIDTH)
	{
		case 0:
			return NULL;
		case 1:
			return "narrow";
		case 2:
			return "wide";
		default:
#ifdef FATAL
			print_switch_out_of_range_error_dialog("get_VTE_CJK_WIDTH_str",
							       "VTE_CJK_WIDTH",
							       VTE_CJK_WIDTH);
#endif
			break;
	}
	return NULL;
}
예제 #4
0
파일: misc.c 프로젝트: Tetralet/LilyTerm
// get default locale from environ
// The returned string CAN NOT be free()!
const gchar *get_default_lc_data(gint lc_type)
{
#ifdef DETAIL
	g_debug("! Launch get_default_lc_data() with lc_type= %d", lc_type);
#endif
	const char *lc_data;
	switch (lc_type)
	{
		case LC_CTYPE:
			lc_data = g_getenv("LC_CTYPE");
			break;
		case LC_MESSAGES:
			lc_data = g_getenv("LC_MESSAGES");
			break;
		case LANGUAGE:
			return g_getenv("LANGUAGE");
		default:
#ifdef FATAL
			print_switch_out_of_range_error_dialog("get_default_lc_data", "lc_type", lc_type);
#endif
			return "";
	}
	const char *lc_all = g_getenv("LC_ALL");
	const char *lang = g_getenv("LANG");

	if ( (!lc_data) && lang)
		lc_data = lang;

	if (lc_all)
		lc_data = lc_all;

//	g_debug("Get lc_data = %s", lc_data);
	if (lc_data)
		return lc_data;
	else
		return "";
}
예제 #5
0
파일: font.c 프로젝트: enferex/LilyTerm
void reset_vte_size(GtkWidget *vte, gchar *new_font_name, Font_Reset_Type type)
{
#ifdef DETAIL
	g_debug("! Launch reset_vte_size() with vte = %p, new_font_name = %s, type = %d",
		vte, new_font_name, type);
#endif
#ifdef SAFEMODE
	if ((vte==NULL) || (new_font_name==NULL)) return;
#endif

	// type 0, RESET_CURRENT_TAB_FONT: change current page's font
	// type 1, RESET_ALL_TO_CURRENT_TAB: apply current column & row to every vte
	// type 2, RESET_ALL_TO_DEFAULT: apply default column & row to every vte
	// type 3, RESET_ALL_TO_SYSTEM: apply system column & row to every vte

	struct Page *page_data = (struct Page *)g_object_get_data(G_OBJECT(vte), "Page_Data");
#ifdef SAFEMODE
	if (page_data==NULL) return;
#endif
	struct Window *win_data = (struct Window *)g_object_get_data(G_OBJECT(page_data->window), "Win_Data");
#ifdef SAFEMODE
	if (win_data==NULL) return;
#endif
	// g_debug("Get win_data = %d when reset vte size!", win_data);

	switch (type)
	{
		case RESET_CURRENT_TAB_FONT:
			// We need to apply a new font to a single vte.
			// so that we should insure that this won't change the size of window.
			// g_debug("Trying to apply font %s to vte", current_font_name);
			vte_terminal_set_font_from_string_full( VTE_TERMINAL(vte),
								new_font_name,
								win_data->font_anti_alias);
			// g_debug("reset_vte_size(): call window_resizable() with run_once = %d", win_data->update_hints);
			// g_debug("reset_vte_size(): launch update_window_hint()!");
			update_window_hint(win_data, page_data);
			break;
		case RESET_ALL_TO_CURRENT_TAB:
			// increase/decrease window size & font size for every vte
			// g_debug("Trying to apply font %s to every vte", current_font_name);
			// struct Page *page_data = (struct Page *)g_object_get_data(G_OBJECT(current_vte), "Page_Data");
			apply_font_to_every_vte( page_data->window, new_font_name,
						 vte_terminal_get_column_count(VTE_TERMINAL(win_data->current_vte)),
						 vte_terminal_get_row_count(VTE_TERMINAL(win_data->current_vte)));
			break;
		case RESET_ALL_TO_DEFAULT:
			// reset window size & font size for every vte
			// g_debug("Trying to apply font %s to every vte", current_font_name);
			apply_font_to_every_vte(page_data->window, new_font_name,
						win_data->default_column, win_data->default_row);
			break;
		case RESET_ALL_TO_SYSTEM:
			// reset window size & font size for every vte
			// g_debug("Trying to apply font %s to every vte", current_font_name);
			apply_font_to_every_vte(page_data->window, new_font_name,
						SYSTEM_COLUMN, SYSTEM_ROW);
			break;
		default:
#ifdef FATAL
			print_switch_out_of_range_error_dialog("reset_vte_size", "type", type);
#endif
			break;
	}
}
예제 #6
0
파일: font.c 프로젝트: enferex/LilyTerm
void set_vte_font(GtkWidget *widget, Font_Set_Type type)
{
#ifdef DETAIL
	g_debug("! Launch set_vte_font() with type = %d", type);
#endif
#ifdef SAFEMODE
	if (menu_active_window==NULL) return;
#endif

	// GtkWidget *vte = current_vte;
	struct Window *win_data = (struct Window *)g_object_get_data(G_OBJECT(menu_active_window), "Win_Data");
#ifdef SAFEMODE
	if (win_data==NULL) return;
#endif
	GtkWidget *vte = win_data->current_vte;
	gchar *new_font_name = NULL;

	// type 0, FONT_RESET: reset current page's font size
	// type 1, FONT_INCREASE: increase current page's font size
	// type 2, FONT_DECREASE: decrease current page's font size
	// type 3, FONT_ZOOM_OUT: increase window size & font size for every vte
	// type 4, FONT_ZOOM_IN: decrease window size & font size for every vte
	// type 5, FONT_RESET_DEFAULT: reset window size & font size to default for every vte
	// type 6, FONT_RESET_SYSTEM: reset window size & font size to system for every vte
	// type 7, FONT_SET_TO_SELECTED: change every vte to the selected font name

	switch (type)
	{
		case FONT_RESET:		// 0
			// reset current page's font size
			new_font_name = get_resize_font(vte, FONT_NAME_RESTORE);
			reset_vte_size(vte, new_font_name, RESET_CURRENT_TAB_FONT);
			break;
		case FONT_INCREASE:		// 1
			// increase current page's font size
			new_font_name = get_resize_font(vte, FONT_NAME_INCREASE);
			reset_vte_size(vte, new_font_name, RESET_CURRENT_TAB_FONT);
			break;
		case FONT_DECREASE:		// 2
			// decrease current page's font size
			new_font_name = get_resize_font(vte, FONT_NAME_DECREASE);
			reset_vte_size(vte, new_font_name, RESET_CURRENT_TAB_FONT);
			break;
		case FONT_ZOOM_OUT:		// 3
			// increase window size & font size for every vte
			new_font_name = get_resize_font(vte, FONT_NAME_ZOOM_OUT);
			reset_vte_size(vte, new_font_name, RESET_ALL_TO_CURRENT_TAB);
			break;
		case FONT_ZOOM_IN:		// 4
			// decrease window size & font size for every vte
			new_font_name = get_resize_font(vte, FONT_NAME_ZOOM_IN);
			reset_vte_size(vte, new_font_name, RESET_ALL_TO_CURRENT_TAB);
			break;
		case FONT_RESET_DEFAULT:	// 5
			// reset window size & font size to default for every vte
			new_font_name = get_resize_font(vte, FONT_NAME_DEFAULT);
			reset_vte_size(vte, new_font_name, RESET_ALL_TO_DEFAULT);
			break;
		case FONT_RESET_SYSTEM:		// 6
			// reset window size & font size to system for every vte
			new_font_name = get_resize_font(vte, FONT_NAME_SYSTEM);
			reset_vte_size(vte, new_font_name, RESET_ALL_TO_SYSTEM);
			break;
		case FONT_SET_TO_SELECTED:	// 7
			// change every vte to the selected font name
			new_font_name = get_resize_font(vte, FONT_NAME_UPDATE);
			reset_vte_size(vte, new_font_name, RESET_ALL_TO_CURRENT_TAB);
			break;
		default:
#ifdef FATAL
			print_switch_out_of_range_error_dialog("set_vte_font", "type", type);
#endif
			break;
	}
	g_free(new_font_name);
}
예제 #7
0
파일: font.c 프로젝트: enferex/LilyTerm
// it will update the new_font_name and page_data->font_name
gchar *get_resize_font(GtkWidget *vte, Font_Name_Type type)
{
#ifdef DETAIL
	g_debug("! Launch get_resize_font() for vte %p with type %d", vte, type);
#endif
#ifdef SAFEMODE
	if (vte==NULL) return NULL;
#endif
	// we must insure that vte!=NULL
	struct Page *page_data = (struct Page *)g_object_get_data(G_OBJECT(vte), "Page_Data");
#ifdef SAFEMODE
	if (page_data==NULL) return NULL;
#endif
	struct Window *win_data = (struct Window *)g_object_get_data(G_OBJECT(page_data->window), "Win_Data");
#ifdef SAFEMODE
	if (win_data==NULL) return NULL;
#endif
	// g_debug("Get win_data = %d when get resize font!", win_data);
	// type 0, FONT_NAME_DEFAULT: restore font to default_font_name
	// type 1, FONT_NAME_SYSTEM: restore font to system_font_name
	// type 2, FONT_NAME_RESTORE: restore font to restore_font_name
	// type 3, FONT_NAME_UPDATE: do nothing but only update new_font_name
	// type 4, FONT_NAME_ZOOM_OUT: increase window by *1.1 or +1
	// type 5, FONT_NAME_ZOOM_IN: decrease window by /1.1 or -1
	// type 6, FONT_NAME_INCREASE: increase font by *1.1 or +1
	// type 7, FONT_NAME_DECREASE: decrease font by /1.1 or -1

	if (win_data->restore_font_name == NULL)
	{
		// win_data->restore_font_name = g_strdup(page_data->font_name);
		win_data->restore_font_name = g_strdup(win_data->default_font_name);
		// g_debug("Restore the font to %s!", win_data->restore_font_name);
		if (type==FONT_NAME_RESTORE)
			return g_strdup(page_data->font_name);
	}

	switch (type)
	{
		case FONT_NAME_DEFAULT:
		case FONT_NAME_SYSTEM:
		case FONT_NAME_RESTORE:
			g_free(page_data->font_name);
			break;
		default:
			break;
	}

	// we use font_size to save current font size
	// font_size = (the size in font_name) * PANGO_SCALE
	// if font_size == 0 -> use the data in font_name

	switch (type)
	{
		case FONT_NAME_DEFAULT:
			// restore font to default_font_name
			page_data->font_name = g_strdup(win_data->default_font_name);
			page_data->font_size = 0;
			break;
		case FONT_NAME_SYSTEM:
			// restore font to default_font_name
			page_data->font_name = g_strdup(SYSTEM_FONT_NAME);
			page_data->font_size = 0;
			break;
		case FONT_NAME_RESTORE:
			// restore font to default_font_name
			page_data->font_name = g_strdup(win_data->restore_font_name);
			page_data->font_size = 0;
			break;
		case FONT_NAME_UPDATE:
			break;
		case FONT_NAME_ZOOM_OUT:
		case FONT_NAME_ZOOM_IN:
		case FONT_NAME_INCREASE:
		case FONT_NAME_DECREASE:
		{
#ifdef SAFEMODE
			if (page_data->font_name==NULL) break;
#endif
			gint oldfontsize=0, fontsize=0;

			// g_debug("old font name: %s", page_data->font_name);
			PangoFontDescription *font_desc = pango_font_description_from_string(
								page_data->font_name);
			// increase/decrease font
			oldfontsize = (pango_font_description_get_size(font_desc)/PANGO_SCALE);
			if (page_data->font_size==0)
				page_data->font_size = pango_font_description_get_size(font_desc);

			switch (type)
			{
				// g_debug("window_resize_ratio = %f",  win_data->window_resize_ratio);
				case FONT_NAME_ZOOM_OUT:
					if (win_data->window_resize_ratio)
						page_data->font_size = page_data->font_size *
								       win_data->window_resize_ratio +
								       0.5;
					else
						page_data->font_size = page_data->font_size + PANGO_SCALE;
					break;
				case FONT_NAME_ZOOM_IN:
					if (win_data->window_resize_ratio)
						page_data->font_size = page_data->font_size /
								       win_data->window_resize_ratio +
								       0.5;
					else
						page_data->font_size = page_data->font_size - PANGO_SCALE;
					break;
				case FONT_NAME_INCREASE:
					if (win_data->font_resize_ratio)
						page_data->font_size = page_data->font_size *
								       win_data->font_resize_ratio +
								       0.5;
					else
						page_data->font_size = page_data->font_size + PANGO_SCALE;
					break;
				case FONT_NAME_DECREASE:
					if (win_data->font_resize_ratio)
						page_data->font_size = page_data->font_size /
								       win_data->font_resize_ratio +
								       0.5;
					else
						page_data->font_size = page_data->font_size - PANGO_SCALE;
					break;
				default:
					break;
			}
			// g_debug("font_size = %d", page_data->font_size);
			fontsize = (page_data->font_size)/PANGO_SCALE;

			// to avoid the fontsize is unchanged or = 0
			switch (type)
			{
				case FONT_NAME_ZOOM_OUT:
				case FONT_NAME_INCREASE:
					if (oldfontsize==fontsize)
						fontsize++;
					break;
				case FONT_NAME_ZOOM_IN:
				case FONT_NAME_DECREASE:
					if (oldfontsize==fontsize)
						fontsize--;
					if (fontsize<1)
						fontsize=1;
					break;
				default:
					break;
			}

			// g_debug("Trying to change the font size to %d.", fontsize);
			pango_font_description_set_size(font_desc, fontsize*PANGO_SCALE);
			g_free(page_data->font_name);
			page_data->font_name = pango_font_description_to_string(font_desc);
			pango_font_description_free(font_desc);
			break;
		default:
#ifdef FATAL
			print_switch_out_of_range_error_dialog("get_resize_font", "type", type);
#endif
			return NULL;
		}
	}

	// g_debug("new font name: %s", page_data->font_name);

	switch (type)
	{
		case FONT_NAME_DEFAULT:
		case FONT_NAME_SYSTEM:
		case FONT_NAME_UPDATE:
		case FONT_NAME_ZOOM_OUT:
		case FONT_NAME_ZOOM_IN:
			// if not using <Ctrl><+ - enter> to change the font size.
			g_free(win_data->restore_font_name);
			win_data->restore_font_name = g_strdup(page_data->font_name);
			break;
		case FONT_NAME_INCREASE:
		case FONT_NAME_DECREASE:
			// Check if we can specify page_data->font_size = 0
			if ( ! compare_strings(page_data->font_name, win_data->restore_font_name, TRUE))
			{
				page_data->font_size = 0;
				// g_debug("The font is restored to win_data->restore_font_name");
			}
			break;
		default:
			break;
	}
	return g_strdup(page_data->font_name);
}
예제 #8
0
파일: main.c 프로젝트: ChunHungLiu/LilyTerm
// it will always return FALSE
gboolean socket_fault(int type, GError *error, GIOChannel *channel, gboolean unref)
{
#ifdef DETAIL
	g_debug("! Launch socket_fault() to show the error message !");
#endif
#ifdef UNIT_TEST
#  define G_WARNING g_message
#else
#  define G_WARNING g_warning
#endif
	switch (type)
	{
		case 1:
			G_WARNING("Error when create %s socket(%s): %s",
				  PACKAGE, address.sun_path, g_strerror (errno));
			break;
		case 2:
			g_message("Can NOT connect to a existing %s socket!", PACKAGE);
			break;
		case 3:
			G_WARNING("Can NOT bind on the socket!");
			break;
		case 4:
			G_WARNING("Can NOT listen on the socket!");
			break;
		case 5:
			G_WARNING("Can not watch on the socket!");
			break;
		case 6:
			G_WARNING("Error when accepting client request via socket!");
			break;
		case 7:
			G_WARNING("Error when reading the data client sent via socket!");
			break;
		case 8:
			G_WARNING("Error when running fcntl command on socket!");
			break;
		case 9:
#ifdef SAFEMODE
			if (error)
#endif
				G_WARNING("Error when setting the encoding of channel: %s", error->message);
			break;
		case 10:
#ifdef SAFEMODE
			if (error)
#endif
				G_WARNING("Error when shutdowning a channel: %s", error->message);
			break;
		case 11:
#ifdef SAFEMODE
			if (error)
#endif
				G_WARNING("Error when writing data to the channel: %s", error->message);
			break;
		case 12:
			G_WARNING("Can NOT create a channel for this socket");
			break;
		case 13:
#ifdef SAFEMODE
			if (error)
#endif
				G_WARNING("Error when flushing the write buffer for the channel: %s", error->message);
			break;
		case 14:
			G_WARNING("Got a NULL string from the socket!");
			break;
		default:
#ifdef FATAL
			print_switch_out_of_range_error_dialog("socket_fault", "type", type);
#endif
			break;
	}
	if (error) g_clear_error (&error);
	clear_channel(channel, unref);
#ifdef UNIT_TEST
#  undef G_WARNING
#endif
	return FALSE;
}
예제 #9
0
파일: pagename.c 프로젝트: B-Rich/LilyTerm
// it will update the text in label ,page_name, and the title of window
// return FALSE if update the label (and page_name) fault.
// updating the title of window will never fault.
gboolean get_and_update_page_name(struct Page *page_data, gboolean lost_focus)
{
#ifdef DETAIL
	g_debug("! Launch get_and_update_page_name() with page_data = %p, lost_focus = %d", page_data, lost_focus);
#endif
#ifdef DEFENSIVE
	if ((page_data==NULL) || (page_data->window==NULL)) return FALSE;
#endif
	struct Window *win_data = (struct Window *)g_object_get_data(G_OBJECT(page_data->window), "Win_Data");
	// g_debug("Get win_data = %p (page_data->window = %p) when update tab name!", win_data, page_data->window);
#ifdef DEFENSIVE
	if (win_data==NULL) return FALSE;
#endif
	// page_color should not be free().
	gchar *page_name = NULL, *page_color = NULL;

	// g_debug("Get pid=%d, tpgid=%d", page_data->pid, page_data->current_tpgid);
	// g_debug("win_data->page_shows_window_title = %d", win_data->page_shows_window_title);
	// g_debug("page_data->window_title_updated = %d", page_data->window_title_updated);
	// g_debug("lost_focus = %d", lost_focus);
	// g_debug("page_data->page_update_method = %d", page_data->page_update_method);

	switch (page_data->page_update_method)
	{
		case PAGE_METHOD_AUTOMATIC:
		case PAGE_METHOD_REFRESH:
			break;
		case PAGE_METHOD_WINDOW_TITLE:
			update_page_name_wintitle(&page_name, &page_color, win_data, page_data);
			break;
		case PAGE_METHOD_CMDLINE:
			update_page_name_cmdline(&page_name, &page_color, win_data, page_data);
			break;
		case PAGE_METHOD_PWD:
			update_page_name_pwd(&page_name, &page_color, win_data, page_data, lost_focus);
			break;
		case PAGE_METHOD_NORMAL:
			update_page_name_normal(&page_name, &page_color, win_data, page_data);
			break;
		default:
#ifdef FATAL
			print_switch_out_of_range_error_dialog("get_and_update_page_name",
							       "page_data->page_update_method",
							       page_data->page_update_method);
#endif
			return FALSE;
	}
	if (page_name==NULL)
	{
		update_page_name_wintitle(&page_name, &page_color, win_data, page_data);
		update_page_name_cmdline(&page_name, &page_color, win_data, page_data);
		update_page_name_pwd(&page_name, &page_color, win_data, page_data, lost_focus);
		update_page_name_normal(&page_name, &page_color, win_data, page_data);
	}

#ifdef DEFENSIVE
	// if we can NOT got any page_name... it should not happen!
	if (page_name==NULL) return FALSE;
#endif

	if (page_data->is_root)
		page_color = win_data->user_page_color[4];

	// even though custom_page_name is setted, we still need to set the page_name for it.
	// therefore if we disable custom_page_name sometime, we still have the page_name for use.
	if (page_data->custom_page_name!=NULL)
	{
		page_color = win_data->user_page_color[3];
		// g_debug("page_shows_custom_dir : page_name = %s, color = %s", page_name, page_color);
	}

	// g_debug("Final : page_name = %s, color = %s", page_name, page_color);

	if (win_data->use_color_page)
		page_data->tab_color = page_color;
	else
		// we Must clean the value for page_color here. for drag&drop tabs.
		page_data->tab_color = NULL;

	g_free(page_data->page_name);
	gchar *local_page_name = convert_str_to_utf8(page_name, page_data->encoding_str);
#ifdef DEFENSIVE
	if (local_page_name == NULL)
		page_data->page_name = page_name;
	else
	{
#endif
		g_free(page_name);
		page_data->page_name = local_page_name;
#ifdef DEFENSIVE
	}
#endif

	gboolean return_value = FALSE;
	// g_debug ("Launch update_page_name() in get_and_update_page_name()!!!");
	if (update_page_name(page_data->window, page_data->vte, page_data->page_name, page_data->label_text,
			     page_data->page_no+1, page_data->custom_page_name, page_color, page_data->is_root,
			     page_data->is_bold, compare_strings(win_data->runtime_encoding,
								 page_data->encoding_str,
								 FALSE),
			     page_data->encoding_str, page_data->custom_window_title, lost_focus))
	{
		// g_debug("Update page_data->displayed_tpgid (%d) = page_data->current_tpgid (%d)",
		//	page_data->displayed_tpgid, page_data->current_tpgid);
		if (! lost_focus)
		{
			page_data->displayed_tpgid = page_data->current_tpgid;
			g_free(page_data->window_title_pwd);
			page_data->window_title_pwd = g_strdup(page_data->pwd);
		}
		return_value = TRUE;
	}
	else
	{
		// update_page_name() is failed, but the pagename datas is updated already.
		// We set page_data->displayed_tpgid = -1 here to mark that the update_page_name() is failed.
		page_data->displayed_tpgid = -1;
		if (page_data->page_update_method == PAGE_METHOD_WINDOW_TITLE)
			page_data->window_title_updated = PAGE_METHOD_CMDLINE;
	}

	// update page_data->pwd or page_data->window_title_pwd, if it was not updated
	if (page_data->page_update_method == PAGE_METHOD_WINDOW_TITLE)
	{
		if (win_data->page_shows_current_cmdline)
			page_data->displayed_tpgid = page_data->current_tpgid;

		if (win_data->page_shows_current_dir)
		{
			g_free(page_data->pwd);
			page_data->pwd = get_tab_name_with_current_dir(page_data->current_tpgid);
		}
	}

	win_data->window_title_tpgid = page_data->current_tpgid;
	// g_debug("Final: page_data->displayed_tpgid = %d", page_data->displayed_tpgid);
	// g_debug("Final: page_data->window_title_tpgid = %d", *(page_data->window_title_tpgid));

	// g_debug("(get_and_update_page_name): return_value = %d", return_value);
	return return_value;
}