diff options
48 files changed, 15453 insertions, 15101 deletions
diff --git a/src/eggdesktopfile.c b/src/eggdesktopfile.c index e38d867..cde7b75 100644 --- a/src/eggdesktopfile.c +++ b/src/eggdesktopfile.c @@ -34,13 +34,14 @@  #include <gdk/gdkx.h>  #include <gtk/gtk.h> -struct EggDesktopFile { -  GKeyFile           *key_file; -  char               *source; +struct EggDesktopFile +{ +	GKeyFile           *key_file; +	char               *source; -  char               *name, *icon; -  EggDesktopFileType  type; -  char                document_code; +	char               *name, *icon; +	EggDesktopFileType  type; +	char                document_code;  };  /** @@ -55,17 +56,17 @@ struct EggDesktopFile {  EggDesktopFile *  egg_desktop_file_new (const char *desktop_file_path, GError **error)  { -  GKeyFile *key_file; +	GKeyFile *key_file; -  key_file = g_key_file_new (); -  if (!g_key_file_load_from_file (key_file, desktop_file_path, 0, error)) -    { -      g_key_file_free (key_file); -      return NULL; -    } +	key_file = g_key_file_new (); +	if (!g_key_file_load_from_file (key_file, desktop_file_path, 0, error)) +	{ +		g_key_file_free (key_file); +		return NULL; +	} -  return egg_desktop_file_new_from_key_file (key_file, desktop_file_path, -					     error); +	return egg_desktop_file_new_from_key_file (key_file, desktop_file_path, +	        error);  }  /** @@ -81,25 +82,25 @@ egg_desktop_file_new (const char *desktop_file_path, GError **error)   **/  EggDesktopFile *  egg_desktop_file_new_from_data_dirs (const char  *desktop_file_path, -				     GError     **error) +                                     GError     **error)  { -  EggDesktopFile *desktop_file; -  GKeyFile *key_file; -  char *full_path; - -  key_file = g_key_file_new (); -  if (!g_key_file_load_from_data_dirs (key_file, desktop_file_path, -				       &full_path, 0, error)) -    { -      g_key_file_free (key_file); -      return NULL; -    } - -  desktop_file = egg_desktop_file_new_from_key_file (key_file, -						     full_path, -						     error); -  g_free (full_path); -  return desktop_file; +	EggDesktopFile *desktop_file; +	GKeyFile *key_file; +	char *full_path; + +	key_file = g_key_file_new (); +	if (!g_key_file_load_from_data_dirs (key_file, desktop_file_path, +	                                     &full_path, 0, error)) +	{ +		g_key_file_free (key_file); +		return NULL; +	} + +	desktop_file = egg_desktop_file_new_from_key_file (key_file, +	               full_path, +	               error); +	g_free (full_path); +	return desktop_file;  }  /** @@ -116,26 +117,26 @@ egg_desktop_file_new_from_data_dirs (const char  *desktop_file_path,   **/  EggDesktopFile *  egg_desktop_file_new_from_dirs (const char  *desktop_file_path, -				const char **search_dirs, -				GError     **error) +                                const char **search_dirs, +                                GError     **error)  { -  EggDesktopFile *desktop_file; -  GKeyFile *key_file; -  char *full_path; - -  key_file = g_key_file_new (); -  if (!g_key_file_load_from_dirs (key_file, desktop_file_path, search_dirs, -				  &full_path, 0, error)) -    { -      g_key_file_free (key_file); -      return NULL; -    } - -  desktop_file = egg_desktop_file_new_from_key_file (key_file, -						     full_path, -						     error); -  g_free (full_path); -  return desktop_file; +	EggDesktopFile *desktop_file; +	GKeyFile *key_file; +	char *full_path; + +	key_file = g_key_file_new (); +	if (!g_key_file_load_from_dirs (key_file, desktop_file_path, search_dirs, +	                                &full_path, 0, error)) +	{ +		g_key_file_free (key_file); +		return NULL; +	} + +	desktop_file = egg_desktop_file_new_from_key_file (key_file, +	               full_path, +	               error); +	g_free (full_path); +	return desktop_file;  }  /** @@ -152,153 +153,153 @@ egg_desktop_file_new_from_dirs (const char  *desktop_file_path,   **/  EggDesktopFile *  egg_desktop_file_new_from_key_file (GKeyFile    *key_file, -				    const char  *source, -				    GError     **error) +                                    const char  *source, +                                    GError     **error)  { -  EggDesktopFile *desktop_file; -  char *version, *type; - -  if (!g_key_file_has_group (key_file, EGG_DESKTOP_FILE_GROUP)) -    { -      g_set_error (error, EGG_DESKTOP_FILE_ERROR, -		   EGG_DESKTOP_FILE_ERROR_INVALID, -		   _("File is not a valid .desktop file")); -      g_key_file_free (key_file); -      return NULL; -    } - -  version = g_key_file_get_value (key_file, EGG_DESKTOP_FILE_GROUP, -				  EGG_DESKTOP_FILE_KEY_VERSION, -				  NULL); -  if (version) -    { -      double version_num; -      char *end; - -      version_num = g_ascii_strtod (version, &end); -      if (*end) +	EggDesktopFile *desktop_file; +	char *version, *type; + +	if (!g_key_file_has_group (key_file, EGG_DESKTOP_FILE_GROUP))  	{ -	  g_warning ("Invalid Version string '%s' in %s", -		     version, source ? source : "(unknown)"); +		g_set_error (error, EGG_DESKTOP_FILE_ERROR, +		             EGG_DESKTOP_FILE_ERROR_INVALID, +		             _("File is not a valid .desktop file")); +		g_key_file_free (key_file); +		return NULL;  	} -      else if (version_num > 1.0) + +	version = g_key_file_get_value (key_file, EGG_DESKTOP_FILE_GROUP, +	                                EGG_DESKTOP_FILE_KEY_VERSION, +	                                NULL); +	if (version)  	{ -	  g_set_error (error, EGG_DESKTOP_FILE_ERROR, -		       EGG_DESKTOP_FILE_ERROR_INVALID, -		       _("Unrecognized desktop file Version '%s'"), version); -	  g_free (version); -	  g_key_file_free (key_file); -	  return NULL; +		double version_num; +		char *end; + +		version_num = g_ascii_strtod (version, &end); +		if (*end) +		{ +			g_warning ("Invalid Version string '%s' in %s", +			           version, source ? source : "(unknown)"); +		} +		else if (version_num > 1.0) +		{ +			g_set_error (error, EGG_DESKTOP_FILE_ERROR, +			             EGG_DESKTOP_FILE_ERROR_INVALID, +			             _("Unrecognized desktop file Version '%s'"), version); +			g_free (version); +			g_key_file_free (key_file); +			return NULL; +		} +		g_free (version);  	} -      g_free (version); -    } - -  desktop_file = g_new0 (EggDesktopFile, 1); -  desktop_file->key_file = key_file; - -  if (g_path_is_absolute (source)) -    desktop_file->source = g_filename_to_uri (source, NULL, NULL); -  else -    desktop_file->source = g_strdup (source); - -  desktop_file->name = g_key_file_get_string (key_file, EGG_DESKTOP_FILE_GROUP, -					      EGG_DESKTOP_FILE_KEY_NAME, error); -  if (!desktop_file->name) -    { -      egg_desktop_file_free (desktop_file); -      return NULL; -    } - -  type = g_key_file_get_string (key_file, EGG_DESKTOP_FILE_GROUP, -				EGG_DESKTOP_FILE_KEY_TYPE, error); -  if (!type) -    { -      egg_desktop_file_free (desktop_file); -      return NULL; -    } - -  if (!strcmp (type, "Application")) -    { -      char *exec, *p; - -      desktop_file->type = EGG_DESKTOP_FILE_TYPE_APPLICATION; - -      exec = g_key_file_get_string (key_file, -				    EGG_DESKTOP_FILE_GROUP, -				    EGG_DESKTOP_FILE_KEY_EXEC, -				    error); -      if (!exec) + +	desktop_file = g_new0 (EggDesktopFile, 1); +	desktop_file->key_file = key_file; + +	if (g_path_is_absolute (source)) +		desktop_file->source = g_filename_to_uri (source, NULL, NULL); +	else +		desktop_file->source = g_strdup (source); + +	desktop_file->name = g_key_file_get_string (key_file, EGG_DESKTOP_FILE_GROUP, +	                     EGG_DESKTOP_FILE_KEY_NAME, error); +	if (!desktop_file->name)  	{ -	  egg_desktop_file_free (desktop_file); -	  g_free (type); -	  return NULL; +		egg_desktop_file_free (desktop_file); +		return NULL;  	} -      /* See if it takes paths or URIs or neither */ -      for (p = exec; *p; p++) +	type = g_key_file_get_string (key_file, EGG_DESKTOP_FILE_GROUP, +	                              EGG_DESKTOP_FILE_KEY_TYPE, error); +	if (!type)  	{ -	  if (*p == '%') -	    { -	      if (p[1] == '\0' || strchr ("FfUu", p[1])) -		{ -		  desktop_file->document_code = p[1]; -		  break; -		} -	      p++; -	    } +		egg_desktop_file_free (desktop_file); +		return NULL;  	} -      g_free (exec); -    } -  else if (!strcmp (type, "Link")) -    { -      char *url; +	if (!strcmp (type, "Application")) +	{ +		char *exec, *p; + +		desktop_file->type = EGG_DESKTOP_FILE_TYPE_APPLICATION; -      desktop_file->type = EGG_DESKTOP_FILE_TYPE_LINK; +		exec = g_key_file_get_string (key_file, +		                              EGG_DESKTOP_FILE_GROUP, +		                              EGG_DESKTOP_FILE_KEY_EXEC, +		                              error); +		if (!exec) +		{ +			egg_desktop_file_free (desktop_file); +			g_free (type); +			return NULL; +		} -      url = g_key_file_get_string (key_file, -				   EGG_DESKTOP_FILE_GROUP, -				   EGG_DESKTOP_FILE_KEY_URL, -				   error); -      if (!url) +		/* See if it takes paths or URIs or neither */ +		for (p = exec; *p; p++) +		{ +			if (*p == '%') +			{ +				if (p[1] == '\0' || strchr ("FfUu", p[1])) +				{ +					desktop_file->document_code = p[1]; +					break; +				} +				p++; +			} +		} + +		g_free (exec); +	} +	else if (!strcmp (type, "Link"))  	{ -	  egg_desktop_file_free (desktop_file); -	  g_free (type); -	  return NULL; +		char *url; + +		desktop_file->type = EGG_DESKTOP_FILE_TYPE_LINK; + +		url = g_key_file_get_string (key_file, +		                             EGG_DESKTOP_FILE_GROUP, +		                             EGG_DESKTOP_FILE_KEY_URL, +		                             error); +		if (!url) +		{ +			egg_desktop_file_free (desktop_file); +			g_free (type); +			return NULL; +		} +		g_free (url);  	} -      g_free (url); -    } -  else if (!strcmp (type, "Directory")) -    desktop_file->type = EGG_DESKTOP_FILE_TYPE_DIRECTORY; -  else -    desktop_file->type = EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED; - -  g_free (type); - -  /* Check the Icon key */ -  desktop_file->icon = g_key_file_get_string (key_file, -					      EGG_DESKTOP_FILE_GROUP, -					      EGG_DESKTOP_FILE_KEY_ICON, -					      NULL); -  if (desktop_file->icon && !g_path_is_absolute (desktop_file->icon)) -    { -      char *ext; - -      /* Lots of .desktop files still get this wrong */ -      ext = strrchr (desktop_file->icon, '.'); -      if (ext && (!strcmp (ext, ".png") || -		  !strcmp (ext, ".xpm") || -		  !strcmp (ext, ".svg"))) +	else if (!strcmp (type, "Directory")) +		desktop_file->type = EGG_DESKTOP_FILE_TYPE_DIRECTORY; +	else +		desktop_file->type = EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED; + +	g_free (type); + +	/* Check the Icon key */ +	desktop_file->icon = g_key_file_get_string (key_file, +	                     EGG_DESKTOP_FILE_GROUP, +	                     EGG_DESKTOP_FILE_KEY_ICON, +	                     NULL); +	if (desktop_file->icon && !g_path_is_absolute (desktop_file->icon))  	{ -	  g_warning ("Desktop file '%s' has malformed Icon key '%s'" -		     "(should not include extension)", -		     source ? source : "(unknown)", -		     desktop_file->icon); -	  *ext = '\0'; +		char *ext; + +		/* Lots of .desktop files still get this wrong */ +		ext = strrchr (desktop_file->icon, '.'); +		if (ext && (!strcmp (ext, ".png") || +		            !strcmp (ext, ".xpm") || +		            !strcmp (ext, ".svg"))) +		{ +			g_warning ("Desktop file '%s' has malformed Icon key '%s'" +			           "(should not include extension)", +			           source ? source : "(unknown)", +			           desktop_file->icon); +			*ext = '\0'; +		}  	} -    } -  return desktop_file; +	return desktop_file;  }  /** @@ -310,11 +311,11 @@ egg_desktop_file_new_from_key_file (GKeyFile    *key_file,  void  egg_desktop_file_free (EggDesktopFile *desktop_file)  { -  g_key_file_free (desktop_file->key_file); -  g_free (desktop_file->source); -  g_free (desktop_file->name); -  g_free (desktop_file->icon); -  g_free (desktop_file); +	g_key_file_free (desktop_file->key_file); +	g_free (desktop_file->source); +	g_free (desktop_file->name); +	g_free (desktop_file->icon); +	g_free (desktop_file);  }  /** @@ -328,7 +329,7 @@ egg_desktop_file_free (EggDesktopFile *desktop_file)  const char *  egg_desktop_file_get_source (EggDesktopFile *desktop_file)  { -  return desktop_file->source; +	return desktop_file->source;  }  /** @@ -342,7 +343,7 @@ egg_desktop_file_get_source (EggDesktopFile *desktop_file)  EggDesktopFileType  egg_desktop_file_get_desktop_file_type (EggDesktopFile *desktop_file)  { -  return desktop_file->type; +	return desktop_file->type;  }  /** @@ -356,7 +357,7 @@ egg_desktop_file_get_desktop_file_type (EggDesktopFile *desktop_file)  const char *  egg_desktop_file_get_name (EggDesktopFile *desktop_file)  { -  return desktop_file->name; +	return desktop_file->name;  }  /** @@ -377,82 +378,82 @@ egg_desktop_file_get_name (EggDesktopFile *desktop_file)  const char *  egg_desktop_file_get_icon (EggDesktopFile *desktop_file)  { -  return desktop_file->icon; +	return desktop_file->icon;  }  gboolean  egg_desktop_file_has_key (EggDesktopFile  *desktop_file, -			  const char      *key, -			  GError         **error) +                          const char      *key, +                          GError         **error)  { -  return g_key_file_has_key (desktop_file->key_file, -			     EGG_DESKTOP_FILE_GROUP, key, -			     error); +	return g_key_file_has_key (desktop_file->key_file, +	                           EGG_DESKTOP_FILE_GROUP, key, +	                           error);  }  char *  egg_desktop_file_get_string (EggDesktopFile  *desktop_file, -			     const char      *key, -			     GError         **error) +                             const char      *key, +                             GError         **error)  { -  return g_key_file_get_string (desktop_file->key_file, -				EGG_DESKTOP_FILE_GROUP, key, -				error); +	return g_key_file_get_string (desktop_file->key_file, +	                              EGG_DESKTOP_FILE_GROUP, key, +	                              error);  }  char *  egg_desktop_file_get_locale_string (EggDesktopFile  *desktop_file, -				    const char      *key, -				    const char      *locale, -				    GError         **error) +                                    const char      *key, +                                    const char      *locale, +                                    GError         **error)  { -  return g_key_file_get_locale_string (desktop_file->key_file, -				       EGG_DESKTOP_FILE_GROUP, key, locale, -				       error); +	return g_key_file_get_locale_string (desktop_file->key_file, +	                                     EGG_DESKTOP_FILE_GROUP, key, locale, +	                                     error);  }  gboolean  egg_desktop_file_get_boolean (EggDesktopFile  *desktop_file, -			      const char      *key, -			      GError         **error) +                              const char      *key, +                              GError         **error)  { -  return g_key_file_get_boolean (desktop_file->key_file, -				 EGG_DESKTOP_FILE_GROUP, key, -				 error); +	return g_key_file_get_boolean (desktop_file->key_file, +	                               EGG_DESKTOP_FILE_GROUP, key, +	                               error);  }  double  egg_desktop_file_get_numeric (EggDesktopFile  *desktop_file, -			      const char      *key, -			      GError         **error) +                              const char      *key, +                              GError         **error)  { -  return g_key_file_get_double (desktop_file->key_file, -				EGG_DESKTOP_FILE_GROUP, key, -				error); +	return g_key_file_get_double (desktop_file->key_file, +	                              EGG_DESKTOP_FILE_GROUP, key, +	                              error);  }  char **  egg_desktop_file_get_string_list (EggDesktopFile  *desktop_file, -				  const char      *key, -				  gsize           *length, -				  GError         **error) +                                  const char      *key, +                                  gsize           *length, +                                  GError         **error)  { -  return g_key_file_get_string_list (desktop_file->key_file, -				     EGG_DESKTOP_FILE_GROUP, key, length, -				     error); +	return g_key_file_get_string_list (desktop_file->key_file, +	                                   EGG_DESKTOP_FILE_GROUP, key, length, +	                                   error);  }  char **  egg_desktop_file_get_locale_string_list (EggDesktopFile  *desktop_file, -					 const char      *key, -					 const char      *locale, -					 gsize           *length, -					 GError         **error) +        const char      *key, +        const char      *locale, +        gsize           *length, +        GError         **error)  { -  return g_key_file_get_locale_string_list (desktop_file->key_file, -					    EGG_DESKTOP_FILE_GROUP, key, -					    locale, length, -					    error); +	return g_key_file_get_locale_string_list (desktop_file->key_file, +	        EGG_DESKTOP_FILE_GROUP, key, +	        locale, length, +	        error);  }  /** @@ -477,74 +478,74 @@ egg_desktop_file_get_locale_string_list (EggDesktopFile  *desktop_file,   **/  gboolean  egg_desktop_file_can_launch (EggDesktopFile *desktop_file, -			     const char     *desktop_environment) +                             const char     *desktop_environment)  { -  char *try_exec, *found_program; -  char **only_show_in, **not_show_in; -  gboolean found; -  int i; - -  if (desktop_file->type != EGG_DESKTOP_FILE_TYPE_APPLICATION && -      desktop_file->type != EGG_DESKTOP_FILE_TYPE_LINK) -    return FALSE; - -  if (desktop_environment) -    { -      only_show_in = g_key_file_get_string_list (desktop_file->key_file, -						 EGG_DESKTOP_FILE_GROUP, -						 EGG_DESKTOP_FILE_KEY_ONLY_SHOW_IN, -						 NULL, NULL); -      if (only_show_in) +	char *try_exec, *found_program; +	char **only_show_in, **not_show_in; +	gboolean found; +	int i; + +	if (desktop_file->type != EGG_DESKTOP_FILE_TYPE_APPLICATION && +	        desktop_file->type != EGG_DESKTOP_FILE_TYPE_LINK) +		return FALSE; + +	if (desktop_environment)  	{ -	  for (i = 0, found = FALSE; only_show_in[i] && !found; i++) -	    { -	      if (!strcmp (only_show_in[i], desktop_environment)) -		found = TRUE; -	    } +		only_show_in = g_key_file_get_string_list (desktop_file->key_file, +		               EGG_DESKTOP_FILE_GROUP, +		               EGG_DESKTOP_FILE_KEY_ONLY_SHOW_IN, +		               NULL, NULL); +		if (only_show_in) +		{ +			for (i = 0, found = FALSE; only_show_in[i] && !found; i++) +			{ +				if (!strcmp (only_show_in[i], desktop_environment)) +					found = TRUE; +			} -	  g_strfreev (only_show_in); +			g_strfreev (only_show_in); -	  if (!found) -	    return FALSE; -	} +			if (!found) +				return FALSE; +		} -      not_show_in = g_key_file_get_string_list (desktop_file->key_file, -						EGG_DESKTOP_FILE_GROUP, -						EGG_DESKTOP_FILE_KEY_NOT_SHOW_IN, -						NULL, NULL); -      if (not_show_in) -	{ -	  for (i = 0, found = FALSE; not_show_in[i] && !found; i++) -	    { -	      if (!strcmp (not_show_in[i], desktop_environment)) -		found = TRUE; -	    } +		not_show_in = g_key_file_get_string_list (desktop_file->key_file, +		              EGG_DESKTOP_FILE_GROUP, +		              EGG_DESKTOP_FILE_KEY_NOT_SHOW_IN, +		              NULL, NULL); +		if (not_show_in) +		{ +			for (i = 0, found = FALSE; not_show_in[i] && !found; i++) +			{ +				if (!strcmp (not_show_in[i], desktop_environment)) +					found = TRUE; +			} -	  g_strfreev (not_show_in); +			g_strfreev (not_show_in); -	  if (found) -	    return FALSE; +			if (found) +				return FALSE; +		}  	} -    } - -  if (desktop_file->type == EGG_DESKTOP_FILE_TYPE_APPLICATION) -    { -      try_exec = g_key_file_get_string (desktop_file->key_file, -					EGG_DESKTOP_FILE_GROUP, -					EGG_DESKTOP_FILE_KEY_TRY_EXEC, -					NULL); -      if (try_exec) + +	if (desktop_file->type == EGG_DESKTOP_FILE_TYPE_APPLICATION)  	{ -	  found_program = g_find_program_in_path (try_exec); -	  g_free (try_exec); +		try_exec = g_key_file_get_string (desktop_file->key_file, +		                                  EGG_DESKTOP_FILE_GROUP, +		                                  EGG_DESKTOP_FILE_KEY_TRY_EXEC, +		                                  NULL); +		if (try_exec) +		{ +			found_program = g_find_program_in_path (try_exec); +			g_free (try_exec); -	  if (!found_program) -	    return FALSE; -	  g_free (found_program); +			if (!found_program) +				return FALSE; +			g_free (found_program); +		}  	} -    } -  return TRUE; +	return TRUE;  }  /** @@ -559,7 +560,7 @@ egg_desktop_file_can_launch (EggDesktopFile *desktop_file,  gboolean  egg_desktop_file_accepts_documents (EggDesktopFile *desktop_file)  { -  return desktop_file->document_code != 0; +	return desktop_file->document_code != 0;  }  /** @@ -578,8 +579,8 @@ egg_desktop_file_accepts_documents (EggDesktopFile *desktop_file)  gboolean  egg_desktop_file_accepts_multiple (EggDesktopFile *desktop_file)  { -  return (desktop_file->document_code == 'F' || -	  desktop_file->document_code == 'U'); +	return (desktop_file->document_code == 'F' || +	        desktop_file->document_code == 'U');  }  /** @@ -594,256 +595,256 @@ egg_desktop_file_accepts_multiple (EggDesktopFile *desktop_file)  gboolean  egg_desktop_file_accepts_uris (EggDesktopFile *desktop_file)  { -  return (desktop_file->document_code == 'U' || -	  desktop_file->document_code == 'u'); +	return (desktop_file->document_code == 'U' || +	        desktop_file->document_code == 'u');  }  static void  append_quoted_word (GString    *str, -		    const char *s, -		    gboolean    in_single_quotes, -		    gboolean    in_double_quotes) +                    const char *s, +                    gboolean    in_single_quotes, +                    gboolean    in_double_quotes)  { -  const char *p; - -  if (!in_single_quotes && !in_double_quotes) -    g_string_append_c (str, '\''); -  else if (!in_single_quotes && in_double_quotes) -    g_string_append (str, "\"'"); - -  if (!strchr (s, '\'')) -    g_string_append (str, s); -  else -    { -      for (p = s; *p != '\0'; p++) +	const char *p; + +	if (!in_single_quotes && !in_double_quotes) +		g_string_append_c (str, '\''); +	else if (!in_single_quotes && in_double_quotes) +		g_string_append (str, "\"'"); + +	if (!strchr (s, '\'')) +		g_string_append (str, s); +	else  	{ -	  if (*p == '\'') -	    g_string_append (str, "'\\''"); -	  else -	    g_string_append_c (str, *p); +		for (p = s; *p != '\0'; p++) +		{ +			if (*p == '\'') +				g_string_append (str, "'\\''"); +			else +				g_string_append_c (str, *p); +		}  	} -    } -  if (!in_single_quotes && !in_double_quotes) -    g_string_append_c (str, '\''); -  else if (!in_single_quotes && in_double_quotes) -    g_string_append (str, "'\""); +	if (!in_single_quotes && !in_double_quotes) +		g_string_append_c (str, '\''); +	else if (!in_single_quotes && in_double_quotes) +		g_string_append (str, "'\"");  }  static void  do_percent_subst (EggDesktopFile *desktop_file, -		  char            code, -		  GString        *str, -		  GSList        **documents, -		  gboolean        in_single_quotes, -		  gboolean        in_double_quotes) +                  char            code, +                  GString        *str, +                  GSList        **documents, +                  gboolean        in_single_quotes, +                  gboolean        in_double_quotes)  { -  GSList *d; -  char *doc; - -  switch (code) -    { -    case '%': -      g_string_append_c (str, '%'); -      break; - -    case 'F': -    case 'U': -      for (d = *documents; d; d = d->next) -	{ -	  doc = d->data; -	  g_string_append (str, " "); -	  append_quoted_word (str, doc, in_single_quotes, in_double_quotes); -	} -      *documents = NULL; -      break; +	GSList *d; +	char *doc; -    case 'f': -    case 'u': -      if (*documents) +	switch (code)  	{ -	  doc = (*documents)->data; -	  g_string_append (str, " "); -	  append_quoted_word (str, doc, in_single_quotes, in_double_quotes); -	  *documents = (*documents)->next; -	} -      break; +	case '%': +		g_string_append_c (str, '%'); +		break; -    case 'i': -      if (desktop_file->icon) -	{ -	  g_string_append (str, "--icon "); -	  append_quoted_word (str, desktop_file->icon, -			      in_single_quotes, in_double_quotes); -	} -      break; +	case 'F': +	case 'U': +		for (d = *documents; d; d = d->next) +		{ +			doc = d->data; +			g_string_append (str, " "); +			append_quoted_word (str, doc, in_single_quotes, in_double_quotes); +		} +		*documents = NULL; +		break; -    case 'c': -      if (desktop_file->name) -	{ -	  append_quoted_word (str, desktop_file->name, -			      in_single_quotes, in_double_quotes); -	} -      break; +	case 'f': +	case 'u': +		if (*documents) +		{ +			doc = (*documents)->data; +			g_string_append (str, " "); +			append_quoted_word (str, doc, in_single_quotes, in_double_quotes); +			*documents = (*documents)->next; +		} +		break; -    case 'k': -      if (desktop_file->source) -	{ -	  append_quoted_word (str, desktop_file->source, -			      in_single_quotes, in_double_quotes); +	case 'i': +		if (desktop_file->icon) +		{ +			g_string_append (str, "--icon "); +			append_quoted_word (str, desktop_file->icon, +			                    in_single_quotes, in_double_quotes); +		} +		break; + +	case 'c': +		if (desktop_file->name) +		{ +			append_quoted_word (str, desktop_file->name, +			                    in_single_quotes, in_double_quotes); +		} +		break; + +	case 'k': +		if (desktop_file->source) +		{ +			append_quoted_word (str, desktop_file->source, +			                    in_single_quotes, in_double_quotes); +		} +		break; + +	case 'D': +	case 'N': +	case 'd': +	case 'n': +	case 'v': +	case 'm': +		/* Deprecated; skip */ +		break; + +	default: +		g_warning ("Unrecognized %%-code '%%%c' in Exec", code); +		break;  	} -      break; - -    case 'D': -    case 'N': -    case 'd': -    case 'n': -    case 'v': -    case 'm': -      /* Deprecated; skip */ -      break; - -    default: -      g_warning ("Unrecognized %%-code '%%%c' in Exec", code); -      break; -    }  }  static char *  parse_exec (EggDesktopFile  *desktop_file, -	    GSList         **documents, -	    GError         **error) +            GSList         **documents, +            GError         **error)  { -  char *exec, *p, *command; -  gboolean escape, single_quot, double_quot; -  GString *gs; - -  exec = g_key_file_get_string (desktop_file->key_file, -				EGG_DESKTOP_FILE_GROUP, -				EGG_DESKTOP_FILE_KEY_EXEC, -				error); -  if (!exec) -    return NULL; - -  /* Build the command */ -  gs = g_string_new (NULL); -  escape = single_quot = double_quot = FALSE; - -  for (p = exec; *p != '\0'; p++) -    { -      if (escape) -	{ -	  escape = FALSE; -	  g_string_append_c (gs, *p); -	} -      else if (*p == '\\') -	{ -	  if (!single_quot) -	    escape = TRUE; -	  g_string_append_c (gs, *p); -	} -      else if (*p == '\'') +	char *exec, *p, *command; +	gboolean escape, single_quot, double_quot; +	GString *gs; + +	exec = g_key_file_get_string (desktop_file->key_file, +	                              EGG_DESKTOP_FILE_GROUP, +	                              EGG_DESKTOP_FILE_KEY_EXEC, +	                              error); +	if (!exec) +		return NULL; + +	/* Build the command */ +	gs = g_string_new (NULL); +	escape = single_quot = double_quot = FALSE; + +	for (p = exec; *p != '\0'; p++)  	{ -	  g_string_append_c (gs, *p); -	  if (!single_quot && !double_quot) -	    single_quot = TRUE; -	  else if (single_quot) -	    single_quot = FALSE; -	} -      else if (*p == '"') -	{ -	  g_string_append_c (gs, *p); -	  if (!single_quot && !double_quot) -	    double_quot = TRUE; -	  else if (double_quot) -	    double_quot = FALSE; -	} -      else if (*p == '%' && p[1]) -	{ -	  do_percent_subst (desktop_file, p[1], gs, documents, -			    single_quot, double_quot); -	  p++; -	} -      else -	g_string_append_c (gs, *p); -    } - -  g_free (exec); -  command = g_string_free (gs, FALSE); - -  /* Prepend "xdg-terminal " if needed (FIXME: use gvfs) */ -  if (g_key_file_has_key (desktop_file->key_file, -			  EGG_DESKTOP_FILE_GROUP, -			  EGG_DESKTOP_FILE_KEY_TERMINAL, -			  NULL)) -    { -      GError *terminal_error = NULL; -      gboolean use_terminal = -	g_key_file_get_boolean (desktop_file->key_file, -				EGG_DESKTOP_FILE_GROUP, -				EGG_DESKTOP_FILE_KEY_TERMINAL, -				&terminal_error); -      if (terminal_error) -	{ -	  g_free (command); -	  g_propagate_error (error, terminal_error); -	  return NULL; +		if (escape) +		{ +			escape = FALSE; +			g_string_append_c (gs, *p); +		} +		else if (*p == '\\') +		{ +			if (!single_quot) +				escape = TRUE; +			g_string_append_c (gs, *p); +		} +		else if (*p == '\'') +		{ +			g_string_append_c (gs, *p); +			if (!single_quot && !double_quot) +				single_quot = TRUE; +			else if (single_quot) +				single_quot = FALSE; +		} +		else if (*p == '"') +		{ +			g_string_append_c (gs, *p); +			if (!single_quot && !double_quot) +				double_quot = TRUE; +			else if (double_quot) +				double_quot = FALSE; +		} +		else if (*p == '%' && p[1]) +		{ +			do_percent_subst (desktop_file, p[1], gs, documents, +			                  single_quot, double_quot); +			p++; +		} +		else +			g_string_append_c (gs, *p);  	} -      if (use_terminal) +	g_free (exec); +	command = g_string_free (gs, FALSE); + +	/* Prepend "xdg-terminal " if needed (FIXME: use gvfs) */ +	if (g_key_file_has_key (desktop_file->key_file, +	                        EGG_DESKTOP_FILE_GROUP, +	                        EGG_DESKTOP_FILE_KEY_TERMINAL, +	                        NULL))  	{ -	  gs = g_string_new ("xdg-terminal "); -	  append_quoted_word (gs, command, FALSE, FALSE); -	  g_free (command); -	  command = g_string_free (gs, FALSE); +		GError *terminal_error = NULL; +		gboolean use_terminal = +		    g_key_file_get_boolean (desktop_file->key_file, +		                            EGG_DESKTOP_FILE_GROUP, +		                            EGG_DESKTOP_FILE_KEY_TERMINAL, +		                            &terminal_error); +		if (terminal_error) +		{ +			g_free (command); +			g_propagate_error (error, terminal_error); +			return NULL; +		} + +		if (use_terminal) +		{ +			gs = g_string_new ("xdg-terminal "); +			append_quoted_word (gs, command, FALSE, FALSE); +			g_free (command); +			command = g_string_free (gs, FALSE); +		}  	} -    } -  return command; +	return command;  }  static GSList *  translate_document_list (EggDesktopFile *desktop_file, GSList *documents)  { -  gboolean accepts_uris = egg_desktop_file_accepts_uris (desktop_file); -  GSList *ret, *d; +	gboolean accepts_uris = egg_desktop_file_accepts_uris (desktop_file); +	GSList *ret, *d; -  for (d = documents, ret = NULL; d; d = d->next) -    { -      const char *document = d->data; -      gboolean is_uri = !g_path_is_absolute (document); -      char *translated; - -      if (accepts_uris) -	{ -	  if (is_uri) -	    translated = g_strdup (document); -	  else -	    translated = g_filename_to_uri (document, NULL, NULL); -	} -      else +	for (d = documents, ret = NULL; d; d = d->next)  	{ -	  if (is_uri) -	    translated = g_filename_from_uri (document, NULL, NULL); -	  else -	    translated = g_strdup (document); -	} +		const char *document = d->data; +		gboolean is_uri = !g_path_is_absolute (document); +		char *translated; + +		if (accepts_uris) +		{ +			if (is_uri) +				translated = g_strdup (document); +			else +				translated = g_filename_to_uri (document, NULL, NULL); +		} +		else +		{ +			if (is_uri) +				translated = g_filename_from_uri (document, NULL, NULL); +			else +				translated = g_strdup (document); +		} -      if (translated) -	ret = g_slist_prepend (ret, translated); -    } +		if (translated) +			ret = g_slist_prepend (ret, translated); +	} -  return g_slist_reverse (ret); +	return g_slist_reverse (ret);  }  static void  free_document_list (GSList *documents)  { -  GSList *d; +	GSList *d; -  for (d = documents; d; d = d->next) -    g_free (d->data); -  g_slist_free (documents); +	for (d = documents; d; d = d->next) +		g_free (d->data); +	g_slist_free (documents);  }  /** @@ -864,422 +865,423 @@ free_document_list (GSList *documents)   **/  char *  egg_desktop_file_parse_exec (EggDesktopFile  *desktop_file, -			     GSList          *documents, -			     GError         **error) +                             GSList          *documents, +                             GError         **error)  { -  GSList *translated, *docs; -  char *command; +	GSList *translated, *docs; +	char *command; -  docs = translated = translate_document_list (desktop_file, documents); -  command = parse_exec (desktop_file, &docs, error); -  free_document_list (translated); +	docs = translated = translate_document_list (desktop_file, documents); +	command = parse_exec (desktop_file, &docs, error); +	free_document_list (translated); -  return command; +	return command;  }  static gboolean  parse_link (EggDesktopFile  *desktop_file, -	    EggDesktopFile **app_desktop_file, -	    GSList         **documents, -	    GError         **error) +            EggDesktopFile **app_desktop_file, +            GSList         **documents, +            GError         **error)  { -  char *url; -  GKeyFile *key_file; - -  url = g_key_file_get_string (desktop_file->key_file, -			       EGG_DESKTOP_FILE_GROUP, -			       EGG_DESKTOP_FILE_KEY_URL, -			       error); -  if (!url) -    return FALSE; -  *documents = g_slist_prepend (NULL, url); - -  /* FIXME: use gvfs */ -  key_file = g_key_file_new (); -  g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP, -			 EGG_DESKTOP_FILE_KEY_NAME, -			 "xdg-open"); -  g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP, -			 EGG_DESKTOP_FILE_KEY_TYPE, -			 "Application"); -  g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP, -			 EGG_DESKTOP_FILE_KEY_EXEC, -			 "xdg-open %u"); -  *app_desktop_file = egg_desktop_file_new_from_key_file (key_file, NULL, NULL); -  return TRUE; +	char *url; +	GKeyFile *key_file; + +	url = g_key_file_get_string (desktop_file->key_file, +	                             EGG_DESKTOP_FILE_GROUP, +	                             EGG_DESKTOP_FILE_KEY_URL, +	                             error); +	if (!url) +		return FALSE; +	*documents = g_slist_prepend (NULL, url); + +	/* FIXME: use gvfs */ +	key_file = g_key_file_new (); +	g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP, +	                       EGG_DESKTOP_FILE_KEY_NAME, +	                       "xdg-open"); +	g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP, +	                       EGG_DESKTOP_FILE_KEY_TYPE, +	                       "Application"); +	g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP, +	                       EGG_DESKTOP_FILE_KEY_EXEC, +	                       "xdg-open %u"); +	*app_desktop_file = egg_desktop_file_new_from_key_file (key_file, NULL, NULL); +	return TRUE;  }  #if GTK_CHECK_VERSION (2, 12, 0)  static char *  start_startup_notification (GdkDisplay     *display, -			    EggDesktopFile *desktop_file, -			    const char     *argv0, -			    int             screen, -			    int             workspace, -			    guint32         launch_time) +                            EggDesktopFile *desktop_file, +                            const char     *argv0, +                            int             screen, +                            int             workspace, +                            guint32         launch_time)  { -  static int sequence = 0; -  char *startup_id; -  char *description, *wmclass; -  char *screen_str, *workspace_str; - -  if (g_key_file_has_key (desktop_file->key_file, -			  EGG_DESKTOP_FILE_GROUP, -			  EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY, -			  NULL)) -    { -      if (!g_key_file_get_boolean (desktop_file->key_file, -				   EGG_DESKTOP_FILE_GROUP, -				   EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY, -				   NULL)) -	return NULL; -      wmclass = NULL; -    } -  else -    { -      wmclass = g_key_file_get_string (desktop_file->key_file, -				       EGG_DESKTOP_FILE_GROUP, -				       EGG_DESKTOP_FILE_KEY_STARTUP_WM_CLASS, -				       NULL); -      if (!wmclass) -	return NULL; -    } - -  if (launch_time == (guint32)-1) -    launch_time = gdk_x11_display_get_user_time (display); -  startup_id = g_strdup_printf ("%s-%lu-%s-%s-%d_TIME%lu", -				g_get_prgname (), -				(unsigned long)getpid (), -				g_get_host_name (), -				argv0, -				sequence++, -				(unsigned long)launch_time); - -  description = g_strdup_printf (_("Starting %s"), desktop_file->name); -  screen_str = g_strdup_printf ("%d", screen); -  workspace_str = workspace == -1 ? NULL : g_strdup_printf ("%d", workspace); - -  gdk_x11_display_broadcast_startup_message (display, "new", -					     "ID", startup_id, -					     "NAME", desktop_file->name, -					     "SCREEN", screen_str, -					     "BIN", argv0, -					     "ICON", desktop_file->icon, -					     "DESKTOP", workspace_str, -					     "DESCRIPTION", description, -					     "WMCLASS", wmclass, -					     NULL); - -  g_free (description); -  g_free (wmclass); -  g_free (screen_str); -  g_free (workspace_str); - -  return startup_id; +	static int sequence = 0; +	char *startup_id; +	char *description, *wmclass; +	char *screen_str, *workspace_str; + +	if (g_key_file_has_key (desktop_file->key_file, +	                        EGG_DESKTOP_FILE_GROUP, +	                        EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY, +	                        NULL)) +	{ +		if (!g_key_file_get_boolean (desktop_file->key_file, +		                             EGG_DESKTOP_FILE_GROUP, +		                             EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY, +		                             NULL)) +			return NULL; +		wmclass = NULL; +	} +	else +	{ +		wmclass = g_key_file_get_string (desktop_file->key_file, +		                                 EGG_DESKTOP_FILE_GROUP, +		                                 EGG_DESKTOP_FILE_KEY_STARTUP_WM_CLASS, +		                                 NULL); +		if (!wmclass) +			return NULL; +	} + +	if (launch_time == (guint32)-1) +		launch_time = gdk_x11_display_get_user_time (display); +	startup_id = g_strdup_printf ("%s-%lu-%s-%s-%d_TIME%lu", +	                              g_get_prgname (), +	                              (unsigned long)getpid (), +	                              g_get_host_name (), +	                              argv0, +	                              sequence++, +	                              (unsigned long)launch_time); + +	description = g_strdup_printf (_("Starting %s"), desktop_file->name); +	screen_str = g_strdup_printf ("%d", screen); +	workspace_str = workspace == -1 ? NULL : g_strdup_printf ("%d", workspace); + +	gdk_x11_display_broadcast_startup_message (display, "new", +	        "ID", startup_id, +	        "NAME", desktop_file->name, +	        "SCREEN", screen_str, +	        "BIN", argv0, +	        "ICON", desktop_file->icon, +	        "DESKTOP", workspace_str, +	        "DESCRIPTION", description, +	        "WMCLASS", wmclass, +	        NULL); + +	g_free (description); +	g_free (wmclass); +	g_free (screen_str); +	g_free (workspace_str); + +	return startup_id;  }  static void  end_startup_notification (GdkDisplay *display, -			  const char *startup_id) +                          const char *startup_id)  { -  gdk_x11_display_broadcast_startup_message (display, "remove", -					     "ID", startup_id, -					     NULL); +	gdk_x11_display_broadcast_startup_message (display, "remove", +	        "ID", startup_id, +	        NULL);  }  #define EGG_DESKTOP_FILE_SN_TIMEOUT_LENGTH (30 /* seconds */) -typedef struct { -  GdkDisplay *display; -  char *startup_id; +typedef struct +{ +	GdkDisplay *display; +	char *startup_id;  } StartupNotificationData;  static gboolean  startup_notification_timeout (gpointer data)  { -  StartupNotificationData *sn_data = data; +	StartupNotificationData *sn_data = data; -  end_startup_notification (sn_data->display, sn_data->startup_id); -  g_object_unref (sn_data->display); -  g_free (sn_data->startup_id); -  g_free (sn_data); +	end_startup_notification (sn_data->display, sn_data->startup_id); +	g_object_unref (sn_data->display); +	g_free (sn_data->startup_id); +	g_free (sn_data); -  return FALSE; +	return FALSE;  }  static void  set_startup_notification_timeout (GdkDisplay *display, -				  const char *startup_id) +                                  const char *startup_id)  { -  StartupNotificationData *sn_data; +	StartupNotificationData *sn_data; -  sn_data = g_new (StartupNotificationData, 1); -  sn_data->display = g_object_ref (display); -  sn_data->startup_id = g_strdup (startup_id); +	sn_data = g_new (StartupNotificationData, 1); +	sn_data->display = g_object_ref (display); +	sn_data->startup_id = g_strdup (startup_id); -  g_timeout_add_seconds (EGG_DESKTOP_FILE_SN_TIMEOUT_LENGTH, -			 startup_notification_timeout, sn_data); +	g_timeout_add_seconds (EGG_DESKTOP_FILE_SN_TIMEOUT_LENGTH, +	                       startup_notification_timeout, sn_data);  }  #endif /* GTK 2.12 */  static GPtrArray *  array_putenv (GPtrArray *env, char *variable)  { -  guint i, keylen; +	guint i, keylen; -  if (!env) -    { -      char **envp; - -      env = g_ptr_array_new (); +	if (!env) +	{ +		char **envp; -      envp = g_listenv (); -      for (i = 0; envp[i]; i++) -        { -          const char *value; +		env = g_ptr_array_new (); -          value = g_getenv (envp[i]); -          g_ptr_array_add (env, g_strdup_printf ("%s=%s", envp[i], -                                                 value ? value : "")); -        } -      g_strfreev (envp); -    } +		envp = g_listenv (); +		for (i = 0; envp[i]; i++) +		{ +			const char *value; -  keylen = strcspn (variable, "="); +			value = g_getenv (envp[i]); +			g_ptr_array_add (env, g_strdup_printf ("%s=%s", envp[i], +			                                       value ? value : "")); +		} +		g_strfreev (envp); +	} -  /* Remove old value of key */ -  for (i = 0; i < env->len; i++) -    { -      char *envvar = env->pdata[i]; +	keylen = strcspn (variable, "="); -      if (!strncmp (envvar, variable, keylen) && envvar[keylen] == '=') +	/* Remove old value of key */ +	for (i = 0; i < env->len; i++)  	{ -	  g_free (envvar); -	  g_ptr_array_remove_index_fast (env, i); -	  break; +		char *envvar = env->pdata[i]; + +		if (!strncmp (envvar, variable, keylen) && envvar[keylen] == '=') +		{ +			g_free (envvar); +			g_ptr_array_remove_index_fast (env, i); +			break; +		}  	} -    } -  /* Add new value */ -  g_ptr_array_add (env, g_strdup (variable)); +	/* Add new value */ +	g_ptr_array_add (env, g_strdup (variable)); -  return env; +	return env;  }  static gboolean  egg_desktop_file_launchv (EggDesktopFile *desktop_file, -			  GSList *documents, va_list args, -			  GError **error) +                          GSList *documents, va_list args, +                          GError **error)  { -  EggDesktopFileLaunchOption option; -  GSList *translated_documents = NULL, *docs = NULL; -  char *command, **argv; -  int argc, i, screen_num; -  gboolean success, current_success; -  GdkDisplay *display; -  char *startup_id; - -  GPtrArray   *env = NULL; -  char       **variables = NULL; -  GdkScreen   *screen = NULL; -  int          workspace = -1; -  const char  *directory = NULL; -  guint32      launch_time = (guint32)-1; -  GSpawnFlags  flags = G_SPAWN_SEARCH_PATH; -  GSpawnChildSetupFunc setup_func = NULL; -  gpointer     setup_data = NULL; - -  GPid        *ret_pid = NULL; -  int         *ret_stdin = NULL, *ret_stdout = NULL, *ret_stderr = NULL; -  char       **ret_startup_id = NULL; - -  if (documents && desktop_file->document_code == 0) -    { -      g_set_error (error, EGG_DESKTOP_FILE_ERROR, -		   EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE, -		   _("Application does not accept documents on command line")); -      return FALSE; -    } - -  /* Read the options: technically it's incorrect for the caller to -   * NULL-terminate the list of options (rather than 0-terminating -   * it), but NULL-terminating lets us use G_GNUC_NULL_TERMINATED, -   * it's more consistent with other glib/gtk methods, and it will -   * work as long as sizeof (int) <= sizeof (NULL), and NULL is -   * represented as 0. (Which is true everywhere we care about.) -   */ -  while ((option = va_arg (args, EggDesktopFileLaunchOption))) -    { -      switch (option) +	EggDesktopFileLaunchOption option; +	GSList *translated_documents = NULL, *docs = NULL; +	char *command, **argv; +	int argc, i, screen_num; +	gboolean success, current_success; +	GdkDisplay *display; +	char *startup_id; + +	GPtrArray   *env = NULL; +	char       **variables = NULL; +	GdkScreen   *screen = NULL; +	int          workspace = -1; +	const char  *directory = NULL; +	guint32      launch_time = (guint32)-1; +	GSpawnFlags  flags = G_SPAWN_SEARCH_PATH; +	GSpawnChildSetupFunc setup_func = NULL; +	gpointer     setup_data = NULL; + +	GPid        *ret_pid = NULL; +	int         *ret_stdin = NULL, *ret_stdout = NULL, *ret_stderr = NULL; +	char       **ret_startup_id = NULL; + +	if (documents && desktop_file->document_code == 0)  	{ -	case EGG_DESKTOP_FILE_LAUNCH_CLEARENV: -	  if (env) -	    g_ptr_array_free (env, TRUE); -	  env = g_ptr_array_new (); -	  break; -	case EGG_DESKTOP_FILE_LAUNCH_PUTENV: -	  variables = va_arg (args, char **); -	  for (i = 0; variables[i]; i++) -	    env = array_putenv (env, variables[i]); -	  break; - -	case EGG_DESKTOP_FILE_LAUNCH_SCREEN: -	  screen = va_arg (args, GdkScreen *); -	  break; -	case EGG_DESKTOP_FILE_LAUNCH_WORKSPACE: -	  workspace = va_arg (args, int); -	  break; - -	case EGG_DESKTOP_FILE_LAUNCH_DIRECTORY: -	  directory = va_arg (args, const char *); -	  break; -	case EGG_DESKTOP_FILE_LAUNCH_TIME: -	  launch_time = va_arg (args, guint32); -	  break; -	case EGG_DESKTOP_FILE_LAUNCH_FLAGS: -	  flags |= va_arg (args, GSpawnFlags); -	  /* Make sure they didn't set any flags that don't make sense. */ -	  flags &= ~G_SPAWN_FILE_AND_ARGV_ZERO; -	  break; -	case EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC: -	  setup_func = va_arg (args, GSpawnChildSetupFunc); -	  setup_data = va_arg (args, gpointer); -	  break; - -	case EGG_DESKTOP_FILE_LAUNCH_RETURN_PID: -	  ret_pid = va_arg (args, GPid *); -	  break; -	case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE: -	  ret_stdin = va_arg (args, int *); -	  break; -	case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE: -	  ret_stdout = va_arg (args, int *); -	  break; -	case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE: -	  ret_stderr = va_arg (args, int *); -	  break; -	case EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID: -	  ret_startup_id = va_arg (args, char **); -	  break; - -	default: -	  g_set_error (error, EGG_DESKTOP_FILE_ERROR, -		       EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION, -		       _("Unrecognized launch option: %d"), -		       GPOINTER_TO_INT (option)); -	  success = FALSE; -	  goto out; +		g_set_error (error, EGG_DESKTOP_FILE_ERROR, +		             EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE, +		             _("Application does not accept documents on command line")); +		return FALSE;  	} -    } - -  if (screen) -    { -      char *display_name = gdk_screen_make_display_name (screen); -      char *display_env = g_strdup_printf ("DISPLAY=%s", display_name); -      env = array_putenv (env, display_env); -      g_free (display_name); -      g_free (display_env); - -      display = gdk_screen_get_display (screen); -    } -  else -    { -      display = gdk_display_get_default (); -      screen = gdk_display_get_default_screen (display); -    } -  screen_num = gdk_screen_get_number (screen); - -  translated_documents = translate_document_list (desktop_file, documents); -  docs = translated_documents; - -  success = FALSE; - -  do -    { -      command = parse_exec (desktop_file, &docs, error); -      if (!command) -	goto out; - -      if (!g_shell_parse_argv (command, &argc, &argv, error)) + +	/* Read the options: technically it's incorrect for the caller to +	 * NULL-terminate the list of options (rather than 0-terminating +	 * it), but NULL-terminating lets us use G_GNUC_NULL_TERMINATED, +	 * it's more consistent with other glib/gtk methods, and it will +	 * work as long as sizeof (int) <= sizeof (NULL), and NULL is +	 * represented as 0. (Which is true everywhere we care about.) +	 */ +	while ((option = va_arg (args, EggDesktopFileLaunchOption)))  	{ -	  g_free (command); -	  goto out; +		switch (option) +		{ +		case EGG_DESKTOP_FILE_LAUNCH_CLEARENV: +			if (env) +				g_ptr_array_free (env, TRUE); +			env = g_ptr_array_new (); +			break; +		case EGG_DESKTOP_FILE_LAUNCH_PUTENV: +			variables = va_arg (args, char **); +			for (i = 0; variables[i]; i++) +				env = array_putenv (env, variables[i]); +			break; + +		case EGG_DESKTOP_FILE_LAUNCH_SCREEN: +			screen = va_arg (args, GdkScreen *); +			break; +		case EGG_DESKTOP_FILE_LAUNCH_WORKSPACE: +			workspace = va_arg (args, int); +			break; + +		case EGG_DESKTOP_FILE_LAUNCH_DIRECTORY: +			directory = va_arg (args, const char *); +			break; +		case EGG_DESKTOP_FILE_LAUNCH_TIME: +			launch_time = va_arg (args, guint32); +			break; +		case EGG_DESKTOP_FILE_LAUNCH_FLAGS: +			flags |= va_arg (args, GSpawnFlags); +			/* Make sure they didn't set any flags that don't make sense. */ +			flags &= ~G_SPAWN_FILE_AND_ARGV_ZERO; +			break; +		case EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC: +			setup_func = va_arg (args, GSpawnChildSetupFunc); +			setup_data = va_arg (args, gpointer); +			break; + +		case EGG_DESKTOP_FILE_LAUNCH_RETURN_PID: +			ret_pid = va_arg (args, GPid *); +			break; +		case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE: +			ret_stdin = va_arg (args, int *); +			break; +		case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE: +			ret_stdout = va_arg (args, int *); +			break; +		case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE: +			ret_stderr = va_arg (args, int *); +			break; +		case EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID: +			ret_startup_id = va_arg (args, char **); +			break; + +		default: +			g_set_error (error, EGG_DESKTOP_FILE_ERROR, +			             EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION, +			             _("Unrecognized launch option: %d"), +			             GPOINTER_TO_INT (option)); +			success = FALSE; +			goto out; +		}  	} -      g_free (command); -#if GTK_CHECK_VERSION (2, 12, 0) -      startup_id = start_startup_notification (display, desktop_file, -					       argv[0], screen_num, -					       workspace, launch_time); -      if (startup_id) +	if (screen) +	{ +		char *display_name = gdk_screen_make_display_name (screen); +		char *display_env = g_strdup_printf ("DISPLAY=%s", display_name); +		env = array_putenv (env, display_env); +		g_free (display_name); +		g_free (display_env); + +		display = gdk_screen_get_display (screen); +	} +	else  	{ -	  char *startup_id_env = g_strdup_printf ("DESKTOP_STARTUP_ID=%s", -						  startup_id); -	  env = array_putenv (env, startup_id_env); -	  g_free (startup_id_env); +		display = gdk_display_get_default (); +		screen = gdk_display_get_default_screen (display);  	} +	screen_num = gdk_screen_get_number (screen); + +	translated_documents = translate_document_list (desktop_file, documents); +	docs = translated_documents; + +	success = FALSE; + +	do +	{ +		command = parse_exec (desktop_file, &docs, error); +		if (!command) +			goto out; + +		if (!g_shell_parse_argv (command, &argc, &argv, error)) +		{ +			g_free (command); +			goto out; +		} +		g_free (command); + +#if GTK_CHECK_VERSION (2, 12, 0) +		startup_id = start_startup_notification (display, desktop_file, +		             argv[0], screen_num, +		             workspace, launch_time); +		if (startup_id) +		{ +			char *startup_id_env = g_strdup_printf ("DESKTOP_STARTUP_ID=%s", +			                                        startup_id); +			env = array_putenv (env, startup_id_env); +			g_free (startup_id_env); +		}  #else -      startup_id = NULL; +		startup_id = NULL;  #endif /* GTK 2.12 */ -      if (env != NULL) -	g_ptr_array_add (env, NULL); - -      current_success = -	g_spawn_async_with_pipes (directory, -				  argv, -				  env ? (char **)(env->pdata) : NULL, -				  flags, -				  setup_func, setup_data, -				  ret_pid, -				  ret_stdin, ret_stdout, ret_stderr, -				  error); -      g_strfreev (argv); - -      if (startup_id) -	{ +		if (env != NULL) +			g_ptr_array_add (env, NULL); + +		current_success = +		    g_spawn_async_with_pipes (directory, +		                              argv, +		                              env ? (char **)(env->pdata) : NULL, +		                              flags, +		                              setup_func, setup_data, +		                              ret_pid, +		                              ret_stdin, ret_stdout, ret_stderr, +		                              error); +		g_strfreev (argv); + +		if (startup_id) +		{  #if GTK_CHECK_VERSION (2, 12, 0) -	  if (current_success) -	    { -	      set_startup_notification_timeout (display, startup_id); - -	      if (ret_startup_id) -		*ret_startup_id = startup_id; -	      else -		g_free (startup_id); -	    } -	  else +			if (current_success) +			{ +				set_startup_notification_timeout (display, startup_id); + +				if (ret_startup_id) +					*ret_startup_id = startup_id; +				else +					g_free (startup_id); +			} +			else  #endif /* GTK 2.12 */ -	    g_free (startup_id); +				g_free (startup_id); +		} +		else if (ret_startup_id) +			*ret_startup_id = NULL; + +		if (current_success) +		{ +			/* If we successfully launch any instances of the app, make +			 * sure we return TRUE and don't set @error. +			 */ +			success = TRUE; +			error = NULL; + +			/* Also, only set the output params on the first one */ +			ret_pid = NULL; +			ret_stdin = ret_stdout = ret_stderr = NULL; +			ret_startup_id = NULL; +		}  	} -      else if (ret_startup_id) -	*ret_startup_id = NULL; +	while (docs && current_success); -      if (current_success) +out: +	if (env)  	{ -	  /* If we successfully launch any instances of the app, make -	   * sure we return TRUE and don't set @error. -	   */ -	  success = TRUE; -	  error = NULL; - -	  /* Also, only set the output params on the first one */ -	  ret_pid = NULL; -	  ret_stdin = ret_stdout = ret_stderr = NULL; -	  ret_startup_id = NULL; +		g_ptr_array_foreach (env, (GFunc)g_free, NULL); +		g_ptr_array_free (env, TRUE);  	} -    } -  while (docs && current_success); - - out: -  if (env) -    { -      g_ptr_array_foreach (env, (GFunc)g_free, NULL); -      g_ptr_array_free (env, TRUE); -    } -  free_document_list (translated_documents); - -  return success; +	free_document_list (translated_documents); + +	return success;  }  /** @@ -1349,61 +1351,61 @@ egg_desktop_file_launchv (EggDesktopFile *desktop_file,   **/  gboolean  egg_desktop_file_launch (EggDesktopFile *desktop_file, -			 GSList *documents, GError **error, -			 ...) +                         GSList *documents, GError **error, +                         ...)  { -  va_list args; -  gboolean success; -  EggDesktopFile *app_desktop_file; - -  switch (desktop_file->type) -    { -    case EGG_DESKTOP_FILE_TYPE_APPLICATION: -      va_start (args, error); -      success = egg_desktop_file_launchv (desktop_file, documents, -					  args, error); -      va_end (args); -      break; - -    case EGG_DESKTOP_FILE_TYPE_LINK: -      if (documents) +	va_list args; +	gboolean success; +	EggDesktopFile *app_desktop_file; + +	switch (desktop_file->type)  	{ -	  g_set_error (error, EGG_DESKTOP_FILE_ERROR, -		       EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE, -		       _("Can't pass document URIs to a 'Type=Link' desktop entry")); -	  return FALSE; -	}	   +	case EGG_DESKTOP_FILE_TYPE_APPLICATION: +		va_start (args, error); +		success = egg_desktop_file_launchv (desktop_file, documents, +		                                    args, error); +		va_end (args); +		break; + +	case EGG_DESKTOP_FILE_TYPE_LINK: +		if (documents) +		{ +			g_set_error (error, EGG_DESKTOP_FILE_ERROR, +			             EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE, +			             _("Can't pass document URIs to a 'Type=Link' desktop entry")); +			return FALSE; +		} -      if (!parse_link (desktop_file, &app_desktop_file, &documents, error)) -	return FALSE; +		if (!parse_link (desktop_file, &app_desktop_file, &documents, error)) +			return FALSE; + +		va_start (args, error); +		success = egg_desktop_file_launchv (app_desktop_file, documents, +		                                    args, error); +		va_end (args); + +		egg_desktop_file_free (app_desktop_file); +		free_document_list (documents); +		break; -      va_start (args, error); -      success = egg_desktop_file_launchv (app_desktop_file, documents, -					  args, error); -      va_end (args); - -      egg_desktop_file_free (app_desktop_file); -      free_document_list (documents); -      break; - -    case EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED: -    case EGG_DESKTOP_FILE_TYPE_DIRECTORY: -    default: -      g_set_error (error, EGG_DESKTOP_FILE_ERROR, -		   EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE, -		   _("Not a launchable item")); -      success = FALSE; -      break; -    } - -  return success; +	case EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED: +	case EGG_DESKTOP_FILE_TYPE_DIRECTORY: +	default: +		g_set_error (error, EGG_DESKTOP_FILE_ERROR, +		             EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE, +		             _("Not a launchable item")); +		success = FALSE; +		break; +	} + +	return success;  }  GQuark  egg_desktop_file_error_quark (void)  { -  return g_quark_from_static_string ("egg-desktop_file-error-quark"); +	return g_quark_from_static_string ("egg-desktop_file-error-quark");  } @@ -1414,34 +1416,35 @@ static void  egg_set_desktop_file_internal (const char *desktop_file_path,                                 gboolean set_defaults)  { -  GError *error = NULL; - -  G_LOCK (egg_desktop_file); -  if (egg_desktop_file) -    egg_desktop_file_free (egg_desktop_file); - -  egg_desktop_file = egg_desktop_file_new (desktop_file_path, &error); -  if (error) -    { -      g_warning ("Could not load desktop file '%s': %s", -		 desktop_file_path, error->message); -      g_error_free (error); -    } - -  if (set_defaults && egg_desktop_file != NULL) { -    /* Set localized application name and default window icon */ -    if (egg_desktop_file->name) -      g_set_application_name (egg_desktop_file->name); -    if (egg_desktop_file->icon) -      { -        if (g_path_is_absolute (egg_desktop_file->icon)) -          gtk_window_set_default_icon_from_file (egg_desktop_file->icon, NULL); -        else -          gtk_window_set_default_icon_name (egg_desktop_file->icon); -      } -  } - -  G_UNLOCK (egg_desktop_file); +	GError *error = NULL; + +	G_LOCK (egg_desktop_file); +	if (egg_desktop_file) +		egg_desktop_file_free (egg_desktop_file); + +	egg_desktop_file = egg_desktop_file_new (desktop_file_path, &error); +	if (error) +	{ +		g_warning ("Could not load desktop file '%s': %s", +		           desktop_file_path, error->message); +		g_error_free (error); +	} + +	if (set_defaults && egg_desktop_file != NULL) +	{ +		/* Set localized application name and default window icon */ +		if (egg_desktop_file->name) +			g_set_application_name (egg_desktop_file->name); +		if (egg_desktop_file->icon) +		{ +			if (g_path_is_absolute (egg_desktop_file->icon)) +				gtk_window_set_default_icon_from_file (egg_desktop_file->icon, NULL); +			else +				gtk_window_set_default_icon_name (egg_desktop_file->icon); +		} +	} + +	G_UNLOCK (egg_desktop_file);  }  /** @@ -1466,7 +1469,7 @@ egg_set_desktop_file_internal (const char *desktop_file_path,  void  egg_set_desktop_file (const char *desktop_file_path)  { -  egg_set_desktop_file_internal (desktop_file_path, TRUE); +	egg_set_desktop_file_internal (desktop_file_path, TRUE);  }  /** @@ -1486,25 +1489,25 @@ egg_set_desktop_file (const char *desktop_file_path)  void  egg_set_desktop_file_without_defaults (const char *desktop_file_path)  { -  egg_set_desktop_file_internal (desktop_file_path, FALSE); +	egg_set_desktop_file_internal (desktop_file_path, FALSE);  }  /**   * egg_get_desktop_file: - *  + *   * Gets the application's #EggDesktopFile, as set by   * egg_set_desktop_file(). - *  + *   * Return value: the #EggDesktopFile, or %NULL if it hasn't been set.   **/  EggDesktopFile *  egg_get_desktop_file (void)  { -  EggDesktopFile *retval; +	EggDesktopFile *retval; -  G_LOCK (egg_desktop_file); -  retval = egg_desktop_file; -  G_UNLOCK (egg_desktop_file); +	G_LOCK (egg_desktop_file); +	retval = egg_desktop_file; +	G_UNLOCK (egg_desktop_file); -  return retval; +	return retval;  } diff --git a/src/eggdesktopfile.h b/src/eggdesktopfile.h index 17bd96e..6d887dc 100644 --- a/src/eggdesktopfile.h +++ b/src/eggdesktopfile.h @@ -26,25 +26,26 @@ G_BEGIN_DECLS  typedef struct EggDesktopFile EggDesktopFile; -typedef enum { -	EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED, +typedef enum +{ +    EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED, -	EGG_DESKTOP_FILE_TYPE_APPLICATION, -	EGG_DESKTOP_FILE_TYPE_LINK, -	EGG_DESKTOP_FILE_TYPE_DIRECTORY +    EGG_DESKTOP_FILE_TYPE_APPLICATION, +    EGG_DESKTOP_FILE_TYPE_LINK, +    EGG_DESKTOP_FILE_TYPE_DIRECTORY  } EggDesktopFileType;  EggDesktopFile     *egg_desktop_file_new                (const char   *desktop_file_path, -							 GError      **error); +        GError      **error);  EggDesktopFile     *egg_desktop_file_new_from_data_dirs (const char   *desktop_file_path, -							 GError      **error); +        GError      **error);  EggDesktopFile     *egg_desktop_file_new_from_dirs      (const char   *desktop_file_path, -							 const char  **search_dirs, -							 GError      **error); +        const char  **search_dirs, +        GError      **error);  EggDesktopFile     *egg_desktop_file_new_from_key_file  (GKeyFile     *key_file, -							 const char   *source, -							 GError      **error); +        const char   *source, +        GError      **error);  void                egg_desktop_file_free               (EggDesktopFile  *desktop_file); @@ -56,35 +57,36 @@ const char         *egg_desktop_file_get_name           (EggDesktopFile  *deskto  const char         *egg_desktop_file_get_icon           (EggDesktopFile  *desktop_file);  gboolean            egg_desktop_file_can_launch         (EggDesktopFile  *desktop_file, -							 const char      *desktop_environment); +        const char      *desktop_environment);  gboolean            egg_desktop_file_accepts_documents  (EggDesktopFile  *desktop_file);  gboolean            egg_desktop_file_accepts_multiple   (EggDesktopFile  *desktop_file);  gboolean            egg_desktop_file_accepts_uris       (EggDesktopFile  *desktop_file);  char               *egg_desktop_file_parse_exec         (EggDesktopFile  *desktop_file, -							 GSList          *documents, -							 GError         **error); +        GSList          *documents, +        GError         **error);  gboolean            egg_desktop_file_launch             (EggDesktopFile  *desktop_file, -							 GSList          *documents, -							 GError         **error, -							 ...) G_GNUC_NULL_TERMINATED; - -typedef enum { -	EGG_DESKTOP_FILE_LAUNCH_CLEARENV = 1, -	EGG_DESKTOP_FILE_LAUNCH_PUTENV, -	EGG_DESKTOP_FILE_LAUNCH_SCREEN, -	EGG_DESKTOP_FILE_LAUNCH_WORKSPACE, -	EGG_DESKTOP_FILE_LAUNCH_DIRECTORY, -	EGG_DESKTOP_FILE_LAUNCH_TIME, -	EGG_DESKTOP_FILE_LAUNCH_FLAGS, -	EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC, -	EGG_DESKTOP_FILE_LAUNCH_RETURN_PID, -	EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE, -	EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE, -	EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE, -	EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID +        GSList          *documents, +        GError         **error, +        ...) G_GNUC_NULL_TERMINATED; + +typedef enum +{ +    EGG_DESKTOP_FILE_LAUNCH_CLEARENV = 1, +    EGG_DESKTOP_FILE_LAUNCH_PUTENV, +    EGG_DESKTOP_FILE_LAUNCH_SCREEN, +    EGG_DESKTOP_FILE_LAUNCH_WORKSPACE, +    EGG_DESKTOP_FILE_LAUNCH_DIRECTORY, +    EGG_DESKTOP_FILE_LAUNCH_TIME, +    EGG_DESKTOP_FILE_LAUNCH_FLAGS, +    EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC, +    EGG_DESKTOP_FILE_LAUNCH_RETURN_PID, +    EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE, +    EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE, +    EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE, +    EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID  } EggDesktopFileLaunchOption;  /* Standard Keys */ @@ -112,30 +114,30 @@ typedef enum {  /* Accessors */  gboolean  egg_desktop_file_has_key                (EggDesktopFile  *desktop_file, -						   const char      *key, -						   GError         **error); +        const char      *key, +        GError         **error);  char     *egg_desktop_file_get_string             (EggDesktopFile  *desktop_file, -						   const char      *key, -						   GError         **error) G_GNUC_MALLOC; +        const char      *key, +        GError         **error) G_GNUC_MALLOC;  char     *egg_desktop_file_get_locale_string      (EggDesktopFile  *desktop_file, -						   const char      *key, -						   const char      *locale, -						   GError         **error) G_GNUC_MALLOC; +        const char      *key, +        const char      *locale, +        GError         **error) G_GNUC_MALLOC;  gboolean  egg_desktop_file_get_boolean            (EggDesktopFile  *desktop_file, -						   const char      *key, -						   GError         **error); +        const char      *key, +        GError         **error);  double    egg_desktop_file_get_numeric            (EggDesktopFile  *desktop_file, -						   const char      *key, -						   GError         **error); +        const char      *key, +        GError         **error);  char    **egg_desktop_file_get_string_list        (EggDesktopFile  *desktop_file, -						   const char      *key, -						   gsize           *length, -						   GError         **error) G_GNUC_MALLOC; +        const char      *key, +        gsize           *length, +        GError         **error) G_GNUC_MALLOC;  char    **egg_desktop_file_get_locale_string_list (EggDesktopFile  *desktop_file, -						   const char      *key, -						   const char      *locale, -						   gsize           *length, -						   GError         **error) G_GNUC_MALLOC; +        const char      *key, +        const char      *locale, +        gsize           *length, +        GError         **error) G_GNUC_MALLOC;  /* Errors */ @@ -143,10 +145,11 @@ char    **egg_desktop_file_get_locale_string_list (EggDesktopFile  *desktop_file  GQuark egg_desktop_file_error_quark (void); -typedef enum { -	EGG_DESKTOP_FILE_ERROR_INVALID, -	EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE, -	EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION +typedef enum +{ +    EGG_DESKTOP_FILE_ERROR_INVALID, +    EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE, +    EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION  } EggDesktopFileError;  /* Global application desktop file */ diff --git a/src/eggshell.c b/src/eggshell.c index ff4d2ce..0a83d85 100644 --- a/src/eggshell.c +++ b/src/eggshell.c @@ -60,7 +60,8 @@ egg_shell (const char *shell)  #ifndef G_OS_WIN32  	struct passwd *pw;  	int i; -	static const char shells [][14] = { +	static const char shells [][14] = +	{  		/* Note that on some systems shells can also  		 * be installed in /usr/bin */  		"/bin/bash", "/usr/bin/bash", @@ -71,23 +72,30 @@ egg_shell (const char *shell)  	};  	if (geteuid () == getuid () && -	    getegid () == getgid ()) { +	        getegid () == getgid ()) +	{  		/* only in non-setuid */ -		if (shell != NULL) { -			if (access (shell, X_OK) == 0) { +		if (shell != NULL) +		{ +			if (access (shell, X_OK) == 0) +			{  				return g_strdup (shell);  			}  		}  	}  	pw = getpwuid(getuid()); -	if (pw && pw->pw_shell) { -		if (access (pw->pw_shell, X_OK) == 0) { +	if (pw && pw->pw_shell) +	{ +		if (access (pw->pw_shell, X_OK) == 0) +		{  			return g_strdup (pw->pw_shell);  		}  	} -	for (i = 0; i != G_N_ELEMENTS (shells); i++) { -		if (access (shells [i], X_OK) == 0) { +	for (i = 0; i != G_N_ELEMENTS (shells); i++) +	{ +		if (access (shells [i], X_OK) == 0) +		{  			return g_strdup (shells[i]);  		}  	} diff --git a/src/eggsmclient-osx.c b/src/eggsmclient-osx.c index e6fa376..456616c 100644 --- a/src/eggsmclient-osx.c +++ b/src/eggsmclient-osx.c @@ -51,26 +51,27 @@  typedef struct _EggSMClientOSX        EggSMClientOSX;  typedef struct _EggSMClientOSXClass   EggSMClientOSXClass; -struct _EggSMClientOSX { -  EggSMClient parent; +struct _EggSMClientOSX +{ +	EggSMClient parent; -  AppleEvent quit_event, quit_reply; -  gboolean quit_requested, quitting; +	AppleEvent quit_event, quit_reply; +	gboolean quit_requested, quitting;  };  struct _EggSMClientOSXClass  { -  EggSMClientClass parent_class; +	EggSMClientClass parent_class;  };  static void     sm_client_osx_startup (EggSMClient *client, -				       const char  *client_id); +                                       const char  *client_id);  static void     sm_client_osx_will_quit (EggSMClient *client, -					 gboolean     will_quit); +        gboolean     will_quit);  static gboolean sm_client_osx_end_session (EggSMClient         *client, -					   EggSMClientEndStyle  style, -					   gboolean  request_confirmation); +        EggSMClientEndStyle  style, +        gboolean  request_confirmation);  static pascal OSErr quit_requested (const AppleEvent *, AppleEvent *, long); @@ -79,157 +80,157 @@ G_DEFINE_TYPE (EggSMClientOSX, egg_sm_client_osx, EGG_TYPE_SM_CLIENT)  static void  egg_sm_client_osx_init (EggSMClientOSX *osx)  { -  ; +	;  }  static void  egg_sm_client_osx_class_init (EggSMClientOSXClass *klass)  { -  EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass); +	EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass); -  sm_client_class->startup             = sm_client_osx_startup; -  sm_client_class->will_quit           = sm_client_osx_will_quit; -  sm_client_class->end_session         = sm_client_osx_end_session; +	sm_client_class->startup             = sm_client_osx_startup; +	sm_client_class->will_quit           = sm_client_osx_will_quit; +	sm_client_class->end_session         = sm_client_osx_end_session;  }  EggSMClient *  egg_sm_client_osx_new (void)  { -  return g_object_new (EGG_TYPE_SM_CLIENT_OSX, NULL); +	return g_object_new (EGG_TYPE_SM_CLIENT_OSX, NULL);  }  static void  sm_client_osx_startup (EggSMClient *client, -		       const char  *client_id) +                       const char  *client_id)  { -  AEInstallEventHandler (kCoreEventClass, kAEQuitApplication, -			 NewAEEventHandlerUPP (quit_requested), -			 (long)GPOINTER_TO_SIZE (client), false); +	AEInstallEventHandler (kCoreEventClass, kAEQuitApplication, +	                       NewAEEventHandlerUPP (quit_requested), +	                       (long)GPOINTER_TO_SIZE (client), false);  }  static gboolean  idle_quit_requested (gpointer client)  { -  egg_sm_client_quit_requested (client); -  return FALSE; +	egg_sm_client_quit_requested (client); +	return FALSE;  }  static pascal OSErr  quit_requested (const AppleEvent *aevt, AppleEvent *reply, long refcon)  { -  EggSMClient *client = GSIZE_TO_POINTER ((gsize)refcon); -  EggSMClientOSX *osx = GSIZE_TO_POINTER ((gsize)refcon); - -  g_return_val_if_fail (!osx->quit_requested, userCanceledErr); -     -  /* FIXME AEInteractWithUser? */ - -  osx->quit_requested = TRUE; -  AEDuplicateDesc (aevt, &osx->quit_event); -  AEDuplicateDesc (reply, &osx->quit_reply); -  AESuspendTheCurrentEvent (aevt); - -  /* Don't emit the "quit_requested" signal immediately, since we're -   * called from a weird point in the guts of gdkeventloop-quartz.c -   */ -  g_idle_add (idle_quit_requested, client); -  return noErr; +	EggSMClient *client = GSIZE_TO_POINTER ((gsize)refcon); +	EggSMClientOSX *osx = GSIZE_TO_POINTER ((gsize)refcon); + +	g_return_val_if_fail (!osx->quit_requested, userCanceledErr); + +	/* FIXME AEInteractWithUser? */ + +	osx->quit_requested = TRUE; +	AEDuplicateDesc (aevt, &osx->quit_event); +	AEDuplicateDesc (reply, &osx->quit_reply); +	AESuspendTheCurrentEvent (aevt); + +	/* Don't emit the "quit_requested" signal immediately, since we're +	 * called from a weird point in the guts of gdkeventloop-quartz.c +	 */ +	g_idle_add (idle_quit_requested, client); +	return noErr;  }  static pascal OSErr  quit_requested_resumed (const AppleEvent *aevt, AppleEvent *reply, long refcon)  { -  EggSMClientOSX *osx = GSIZE_TO_POINTER ((gsize)refcon); +	EggSMClientOSX *osx = GSIZE_TO_POINTER ((gsize)refcon); -  osx->quit_requested = FALSE; -  return osx->quitting ? noErr : userCanceledErr; +	osx->quit_requested = FALSE; +	return osx->quitting ? noErr : userCanceledErr;  }  static gboolean  idle_will_quit (gpointer client)  { -  EggSMClientOSX *osx = (EggSMClientOSX *)client; - -  /* Resume the event with a new handler that will return a value to -   * the system. -   */ -  AEResumeTheCurrentEvent (&osx->quit_event, &osx->quit_reply, -			   NewAEEventHandlerUPP (quit_requested_resumed), -			   (long)GPOINTER_TO_SIZE (client)); -  AEDisposeDesc (&osx->quit_event); -  AEDisposeDesc (&osx->quit_reply); - -  if (osx->quitting) -    egg_sm_client_quit (client); -  return FALSE; +	EggSMClientOSX *osx = (EggSMClientOSX *)client; + +	/* Resume the event with a new handler that will return a value to +	 * the system. +	 */ +	AEResumeTheCurrentEvent (&osx->quit_event, &osx->quit_reply, +	                         NewAEEventHandlerUPP (quit_requested_resumed), +	                         (long)GPOINTER_TO_SIZE (client)); +	AEDisposeDesc (&osx->quit_event); +	AEDisposeDesc (&osx->quit_reply); + +	if (osx->quitting) +		egg_sm_client_quit (client); +	return FALSE;  }  static void  sm_client_osx_will_quit (EggSMClient *client, -			 gboolean     will_quit) +                         gboolean     will_quit)  { -  EggSMClientOSX *osx = (EggSMClientOSX *)client; +	EggSMClientOSX *osx = (EggSMClientOSX *)client; -  g_return_if_fail (osx->quit_requested); +	g_return_if_fail (osx->quit_requested); -  osx->quitting = will_quit; +	osx->quitting = will_quit; -  /* Finish in an idle handler since the caller might have called -   * egg_sm_client_will_quit() from inside the "quit_requested" signal -   * handler, but may not expect the "quit" signal to arrive during -   * the _will_quit() call. -   */ -  g_idle_add (idle_will_quit, client); +	/* Finish in an idle handler since the caller might have called +	 * egg_sm_client_will_quit() from inside the "quit_requested" signal +	 * handler, but may not expect the "quit" signal to arrive during +	 * the _will_quit() call. +	 */ +	g_idle_add (idle_will_quit, client);  }  static gboolean  sm_client_osx_end_session (EggSMClient         *client, -			   EggSMClientEndStyle  style, -			   gboolean             request_confirmation) +                           EggSMClientEndStyle  style, +                           gboolean             request_confirmation)  { -  static const ProcessSerialNumber loginwindow_psn = { 0, kSystemProcess }; -  AppleEvent event = { typeNull, NULL }, reply = { typeNull, NULL }; -  AEAddressDesc target; -  AEEventID id; -  OSErr err; - -  switch (style) -    { -    case EGG_SM_CLIENT_END_SESSION_DEFAULT: -    case EGG_SM_CLIENT_LOGOUT: -      id = request_confirmation ? kAELogOut : kAEReallyLogOut; -      break; -    case EGG_SM_CLIENT_REBOOT: -      id = request_confirmation ? kAEShowRestartDialog : kAERestart; -      break; -    case EGG_SM_CLIENT_SHUTDOWN: -      id = request_confirmation ? kAEShowShutdownDialog : kAEShutDown; -      break; -    } - -  err = AECreateDesc (typeProcessSerialNumber, &loginwindow_psn,  -		      sizeof (loginwindow_psn), &target); -  if (err != noErr) -    { -      g_warning ("Could not create descriptor for loginwindow: %d", err); -      return FALSE; -    } - -  err = AECreateAppleEvent (kCoreEventClass, id, &target, -			    kAutoGenerateReturnID, kAnyTransactionID, -			    &event); -  AEDisposeDesc (&target); -  if (err != noErr) -    { -      g_warning ("Could not create logout AppleEvent: %d", err); -      return FALSE; -    } - -  err = AESend (&event, &reply, kAENoReply, kAENormalPriority, -		kAEDefaultTimeout, NULL, NULL); -  AEDisposeDesc (&event); -  if (err == noErr) -    AEDisposeDesc (&reply); - -  return err == noErr; +	static const ProcessSerialNumber loginwindow_psn = { 0, kSystemProcess }; +	AppleEvent event = { typeNull, NULL }, reply = { typeNull, NULL }; +	AEAddressDesc target; +	AEEventID id; +	OSErr err; + +	switch (style) +	{ +	case EGG_SM_CLIENT_END_SESSION_DEFAULT: +	case EGG_SM_CLIENT_LOGOUT: +		id = request_confirmation ? kAELogOut : kAEReallyLogOut; +		break; +	case EGG_SM_CLIENT_REBOOT: +		id = request_confirmation ? kAEShowRestartDialog : kAERestart; +		break; +	case EGG_SM_CLIENT_SHUTDOWN: +		id = request_confirmation ? kAEShowShutdownDialog : kAEShutDown; +		break; +	} + +	err = AECreateDesc (typeProcessSerialNumber, &loginwindow_psn, +	                    sizeof (loginwindow_psn), &target); +	if (err != noErr) +	{ +		g_warning ("Could not create descriptor for loginwindow: %d", err); +		return FALSE; +	} + +	err = AECreateAppleEvent (kCoreEventClass, id, &target, +	                          kAutoGenerateReturnID, kAnyTransactionID, +	                          &event); +	AEDisposeDesc (&target); +	if (err != noErr) +	{ +		g_warning ("Could not create logout AppleEvent: %d", err); +		return FALSE; +	} + +	err = AESend (&event, &reply, kAENoReply, kAENormalPriority, +	              kAEDefaultTimeout, NULL, NULL); +	AEDisposeDesc (&event); +	if (err == noErr) +		AEDisposeDesc (&reply); + +	return err == noErr;  } diff --git a/src/eggsmclient-win32.c b/src/eggsmclient-win32.c index a762c6c..745b265 100644 --- a/src/eggsmclient-win32.c +++ b/src/eggsmclient-win32.c @@ -66,31 +66,32 @@  typedef struct _EggSMClientWin32        EggSMClientWin32;  typedef struct _EggSMClientWin32Class   EggSMClientWin32Class; -struct _EggSMClientWin32 { -  EggSMClient parent; +struct _EggSMClientWin32 +{ +	EggSMClient parent; -  HANDLE message_event, response_event; +	HANDLE message_event, response_event; -  volatile GSourceFunc event; -  volatile gboolean will_quit; +	volatile GSourceFunc event; +	volatile gboolean will_quit;  };  struct _EggSMClientWin32Class  { -  EggSMClientClass parent_class; +	EggSMClientClass parent_class;  };  static void     sm_client_win32_startup (EggSMClient *client, -					 const char  *client_id); +        const char  *client_id);  static void     sm_client_win32_will_quit (EggSMClient *client, -					   gboolean     will_quit); +        gboolean     will_quit);  static gboolean sm_client_win32_end_session (EggSMClient         *client, -					     EggSMClientEndStyle  style, -					     gboolean  request_confirmation); +        EggSMClientEndStyle  style, +        gboolean  request_confirmation);  static GSource *g_win32_handle_source_add (HANDLE handle, GSourceFunc callback, -					gpointer user_data); +        gpointer user_data);  static gboolean got_message (gpointer user_data);  static void sm_client_thread (gpointer data); @@ -99,79 +100,79 @@ G_DEFINE_TYPE (EggSMClientWin32, egg_sm_client_win32, EGG_TYPE_SM_CLIENT)  static void  egg_sm_client_win32_init (EggSMClientWin32 *win32)  { -  ; +	;  }  static void  egg_sm_client_win32_class_init (EggSMClientWin32Class *klass)  { -  EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass); +	EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass); -  sm_client_class->startup             = sm_client_win32_startup; -  sm_client_class->will_quit           = sm_client_win32_will_quit; -  sm_client_class->end_session         = sm_client_win32_end_session; +	sm_client_class->startup             = sm_client_win32_startup; +	sm_client_class->will_quit           = sm_client_win32_will_quit; +	sm_client_class->end_session         = sm_client_win32_end_session;  }  EggSMClient *  egg_sm_client_win32_new (void)  { -  return g_object_new (EGG_TYPE_SM_CLIENT_WIN32, NULL); +	return g_object_new (EGG_TYPE_SM_CLIENT_WIN32, NULL);  }  static void  sm_client_win32_startup (EggSMClient *client, -			 const char  *client_id) +                         const char  *client_id)  { -  EggSMClientWin32 *win32 = (EggSMClientWin32 *)client; +	EggSMClientWin32 *win32 = (EggSMClientWin32 *)client; -  win32->message_event = CreateEvent (NULL, FALSE, FALSE, NULL); -  win32->response_event = CreateEvent (NULL, FALSE, FALSE, NULL); -  g_win32_handle_source_add (win32->message_event, got_message, win32);   -  _beginthread (sm_client_thread, 0, client); +	win32->message_event = CreateEvent (NULL, FALSE, FALSE, NULL); +	win32->response_event = CreateEvent (NULL, FALSE, FALSE, NULL); +	g_win32_handle_source_add (win32->message_event, got_message, win32); +	_beginthread (sm_client_thread, 0, client);  }  static void  sm_client_win32_will_quit (EggSMClient *client, -			   gboolean     will_quit) +                           gboolean     will_quit)  { -  EggSMClientWin32 *win32 = (EggSMClientWin32 *)client; +	EggSMClientWin32 *win32 = (EggSMClientWin32 *)client; -  win32->will_quit = will_quit; -  SetEvent (win32->response_event); +	win32->will_quit = will_quit; +	SetEvent (win32->response_event);  }  static gboolean  sm_client_win32_end_session (EggSMClient         *client, -			     EggSMClientEndStyle  style, -			     gboolean             request_confirmation) +                             EggSMClientEndStyle  style, +                             gboolean             request_confirmation)  { -  UINT uFlags = EWX_LOGOFF; - -  switch (style) -    { -    case EGG_SM_CLIENT_END_SESSION_DEFAULT: -    case EGG_SM_CLIENT_LOGOUT: -      uFlags = EWX_LOGOFF; -      break; -    case EGG_SM_CLIENT_REBOOT: -      uFlags = EWX_REBOOT; -      break; -    case EGG_SM_CLIENT_SHUTDOWN: -      uFlags = EWX_POWEROFF; -      break; -    } - -  /* There's no way to make ExitWindowsEx() show a logout dialog, so -   * we ignore @request_confirmation. -   */ +	UINT uFlags = EWX_LOGOFF; + +	switch (style) +	{ +	case EGG_SM_CLIENT_END_SESSION_DEFAULT: +	case EGG_SM_CLIENT_LOGOUT: +		uFlags = EWX_LOGOFF; +		break; +	case EGG_SM_CLIENT_REBOOT: +		uFlags = EWX_REBOOT; +		break; +	case EGG_SM_CLIENT_SHUTDOWN: +		uFlags = EWX_POWEROFF; +		break; +	} + +	/* There's no way to make ExitWindowsEx() show a logout dialog, so +	 * we ignore @request_confirmation. +	 */  #ifdef SHTDN_REASON_FLAG_PLANNED -  ExitWindowsEx (uFlags, SHTDN_REASON_FLAG_PLANNED); +	ExitWindowsEx (uFlags, SHTDN_REASON_FLAG_PLANNED);  #else -  ExitWindowsEx (uFlags, 0); +	ExitWindowsEx (uFlags, 0);  #endif -  return TRUE; +	return TRUE;  } @@ -180,174 +181,176 @@ sm_client_win32_end_session (EggSMClient         *client,  static gboolean  emit_quit_requested (gpointer smclient)  { -  gdk_threads_enter (); -  egg_sm_client_quit_requested (smclient); -  gdk_threads_leave (); +	gdk_threads_enter (); +	egg_sm_client_quit_requested (smclient); +	gdk_threads_leave (); -  return FALSE; +	return FALSE;  }  static gboolean  emit_quit (gpointer smclient)  { -  EggSMClientWin32 *win32 = smclient; +	EggSMClientWin32 *win32 = smclient; -  gdk_threads_enter (); -  egg_sm_client_quit (smclient); -  gdk_threads_leave (); +	gdk_threads_enter (); +	egg_sm_client_quit (smclient); +	gdk_threads_leave (); -  SetEvent (win32->response_event); -  return FALSE; +	SetEvent (win32->response_event); +	return FALSE;  }  static gboolean  emit_quit_cancelled (gpointer smclient)  { -  EggSMClientWin32 *win32 = smclient; +	EggSMClientWin32 *win32 = smclient; -  gdk_threads_enter (); -  egg_sm_client_quit_cancelled (smclient); -  gdk_threads_leave (); +	gdk_threads_enter (); +	egg_sm_client_quit_cancelled (smclient); +	gdk_threads_leave (); -  SetEvent (win32->response_event); -  return FALSE; +	SetEvent (win32->response_event); +	return FALSE;  }  static gboolean  got_message (gpointer smclient)  { -  EggSMClientWin32 *win32 = smclient; +	EggSMClientWin32 *win32 = smclient; -  win32->event (win32); -  return TRUE; +	win32->event (win32); +	return TRUE;  }  /* Windows HANDLE GSource */ -typedef struct { -  GSource source; -  GPollFD pollfd; +typedef struct +{ +	GSource source; +	GPollFD pollfd;  } GWin32HandleSource;  static gboolean  g_win32_handle_source_prepare (GSource *source, gint *timeout)  { -  *timeout = -1; -  return FALSE; +	*timeout = -1; +	return FALSE;  }  static gboolean  g_win32_handle_source_check (GSource *source)  { -  GWin32HandleSource *hsource = (GWin32HandleSource *)source; +	GWin32HandleSource *hsource = (GWin32HandleSource *)source; -  return hsource->pollfd.revents; +	return hsource->pollfd.revents;  }  static gboolean  g_win32_handle_source_dispatch (GSource *source, GSourceFunc callback, gpointer user_data)  { -  return (*callback) (user_data); +	return (*callback) (user_data);  }  static void  g_win32_handle_source_finalize (GSource *source)  { -  ; +	;  } -GSourceFuncs g_win32_handle_source_funcs = { -  g_win32_handle_source_prepare, -  g_win32_handle_source_check, -  g_win32_handle_source_dispatch, -  g_win32_handle_source_finalize +GSourceFuncs g_win32_handle_source_funcs = +{ +	g_win32_handle_source_prepare, +	g_win32_handle_source_check, +	g_win32_handle_source_dispatch, +	g_win32_handle_source_finalize  };  static GSource *  g_win32_handle_source_add (HANDLE handle, GSourceFunc callback, gpointer user_data)  { -  GWin32HandleSource *hsource; -  GSource *source; - -  source = g_source_new (&g_win32_handle_source_funcs, sizeof (GWin32HandleSource)); -  hsource = (GWin32HandleSource *)source; -  hsource->pollfd.fd = (int)handle; -  hsource->pollfd.events = G_IO_IN; -  hsource->pollfd.revents = 0; -  g_source_add_poll (source, &hsource->pollfd); - -  g_source_set_callback (source, callback, user_data, NULL); -  g_source_attach (source, NULL); -  return source; +	GWin32HandleSource *hsource; +	GSource *source; + +	source = g_source_new (&g_win32_handle_source_funcs, sizeof (GWin32HandleSource)); +	hsource = (GWin32HandleSource *)source; +	hsource->pollfd.fd = (int)handle; +	hsource->pollfd.events = G_IO_IN; +	hsource->pollfd.revents = 0; +	g_source_add_poll (source, &hsource->pollfd); + +	g_source_set_callback (source, callback, user_data, NULL); +	g_source_attach (source, NULL); +	return source;  }  /* logout-listener thread */  LRESULT CALLBACK  sm_client_win32_window_procedure (HWND   hwnd, -				  UINT   message, -				  WPARAM wParam, -				  LPARAM lParam) +                                  UINT   message, +                                  WPARAM wParam, +                                  LPARAM lParam)  { -  EggSMClientWin32 *win32 = -    (EggSMClientWin32 *)GetWindowLongPtr (hwnd, GWLP_USERDATA); +	EggSMClientWin32 *win32 = +	    (EggSMClientWin32 *)GetWindowLongPtr (hwnd, GWLP_USERDATA); -  switch (message) -    { -    case WM_QUERYENDSESSION: -      win32->event = emit_quit_requested; -      SetEvent (win32->message_event); - -      WaitForSingleObject (win32->response_event, INFINITE); -      return win32->will_quit; - -    case WM_ENDSESSION: -      if (wParam) -	{ -	  /* The session is ending */ -	  win32->event = emit_quit; -	} -      else +	switch (message)  	{ -	  /* Nope, the session *isn't* ending */ -	  win32->event = emit_quit_cancelled; +	case WM_QUERYENDSESSION: +		win32->event = emit_quit_requested; +		SetEvent (win32->message_event); + +		WaitForSingleObject (win32->response_event, INFINITE); +		return win32->will_quit; + +	case WM_ENDSESSION: +		if (wParam) +		{ +			/* The session is ending */ +			win32->event = emit_quit; +		} +		else +		{ +			/* Nope, the session *isn't* ending */ +			win32->event = emit_quit_cancelled; +		} + +		SetEvent (win32->message_event); +		WaitForSingleObject (win32->response_event, INFINITE); + +		return 0; + +	default: +		return DefWindowProc (hwnd, message, wParam, lParam);  	} - -      SetEvent (win32->message_event); -      WaitForSingleObject (win32->response_event, INFINITE); - -      return 0; - -    default: -      return DefWindowProc (hwnd, message, wParam, lParam); -    }  }  static void  sm_client_thread (gpointer smclient)  { -  HINSTANCE instance; -  WNDCLASSEXW wcl;  -  ATOM klass; -  HWND window; -  MSG msg; - -  instance = GetModuleHandle (NULL); - -  memset (&wcl, 0, sizeof (WNDCLASSEX)); -  wcl.cbSize = sizeof (WNDCLASSEX); -  wcl.lpfnWndProc = sm_client_win32_window_procedure; -  wcl.hInstance = instance; -  wcl.lpszClassName = L"EggSmClientWindow"; -  klass = RegisterClassEx (&wcl); - -  window = CreateWindowEx (0, MAKEINTRESOURCE (klass), -			   L"EggSmClientWindow", 0, -			   10, 10, 50, 50, GetDesktopWindow (), -			   NULL, instance, NULL); -  SetWindowLongPtr (window, GWLP_USERDATA, (LONG_PTR)smclient); - -  /* main loop */ -  while (GetMessage (&msg, NULL, 0, 0)) -    DispatchMessage (&msg); +	HINSTANCE instance; +	WNDCLASSEXW wcl; +	ATOM klass; +	HWND window; +	MSG msg; + +	instance = GetModuleHandle (NULL); + +	memset (&wcl, 0, sizeof (WNDCLASSEX)); +	wcl.cbSize = sizeof (WNDCLASSEX); +	wcl.lpfnWndProc = sm_client_win32_window_procedure; +	wcl.hInstance = instance; +	wcl.lpszClassName = L"EggSmClientWindow"; +	klass = RegisterClassEx (&wcl); + +	window = CreateWindowEx (0, MAKEINTRESOURCE (klass), +	                         L"EggSmClientWindow", 0, +	                         10, 10, 50, 50, GetDesktopWindow (), +	                         NULL, instance, NULL); +	SetWindowLongPtr (window, GWLP_USERDATA, (LONG_PTR)smclient); + +	/* main loop */ +	while (GetMessage (&msg, NULL, 0, 0)) +		DispatchMessage (&msg);  } diff --git a/src/eggsmclient-xsmp.c b/src/eggsmclient-xsmp.c index 9cf343b..5cade1f 100644 --- a/src/eggsmclient-xsmp.c +++ b/src/eggsmclient-xsmp.c @@ -56,108 +56,109 @@ typedef struct _EggSMClientXSMPClass   EggSMClientXSMPClass;   */  typedef enum  { -  XSMP_STATE_IDLE, -  XSMP_STATE_SAVE_YOURSELF, -  XSMP_STATE_INTERACT_REQUEST, -  XSMP_STATE_INTERACT, -  XSMP_STATE_SAVE_YOURSELF_DONE, -  XSMP_STATE_SHUTDOWN_CANCELLED, -  XSMP_STATE_CONNECTION_CLOSED +    XSMP_STATE_IDLE, +    XSMP_STATE_SAVE_YOURSELF, +    XSMP_STATE_INTERACT_REQUEST, +    XSMP_STATE_INTERACT, +    XSMP_STATE_SAVE_YOURSELF_DONE, +    XSMP_STATE_SHUTDOWN_CANCELLED, +    XSMP_STATE_CONNECTION_CLOSED  } EggSMClientXSMPState; -static const char *state_names[] = { -  "idle", -  "save-yourself", -  "interact-request", -  "interact", -  "save-yourself-done", -  "shutdown-cancelled", -  "connection-closed" +static const char *state_names[] = +{ +	"idle", +	"save-yourself", +	"interact-request", +	"interact", +	"save-yourself-done", +	"shutdown-cancelled", +	"connection-closed"  };  #define EGG_SM_CLIENT_XSMP_STATE(xsmp) (state_names[(xsmp)->state])  struct _EggSMClientXSMP  { -  EggSMClient parent; +	EggSMClient parent; -  SmcConn connection; -  char *client_id; +	SmcConn connection; +	char *client_id; -  EggSMClientXSMPState state; -  char **restart_command; -  gboolean set_restart_command; -  int restart_style; -  char **discard_command; -  gboolean set_discard_command; +	EggSMClientXSMPState state; +	char **restart_command; +	gboolean set_restart_command; +	int restart_style; +	char **discard_command; +	gboolean set_discard_command; -  guint idle; +	guint idle; -  /* Current SaveYourself state */ -  guint expecting_initial_save_yourself : 1; -  guint need_save_state : 1; -  guint need_quit_requested : 1; -  guint interact_errors : 1; -  guint shutting_down : 1; +	/* Current SaveYourself state */ +	guint expecting_initial_save_yourself : 1; +	guint need_save_state : 1; +	guint need_quit_requested : 1; +	guint interact_errors : 1; +	guint shutting_down : 1; -  /* Todo list */ -  guint waiting_to_set_initial_properties : 1; -  guint waiting_to_emit_quit : 1; -  guint waiting_to_emit_quit_cancelled : 1; -  guint waiting_to_save_myself : 1; +	/* Todo list */ +	guint waiting_to_set_initial_properties : 1; +	guint waiting_to_emit_quit : 1; +	guint waiting_to_emit_quit_cancelled : 1; +	guint waiting_to_save_myself : 1;  };  struct _EggSMClientXSMPClass  { -  EggSMClientClass parent_class; +	EggSMClientClass parent_class;  };  static void     sm_client_xsmp_startup (EggSMClient *client, -					const char  *client_id); +                                        const char  *client_id);  static void     sm_client_xsmp_set_restart_command (EggSMClient  *client, -						    int           argc, -						    const char  **argv); +        int           argc, +        const char  **argv);  static void     sm_client_xsmp_set_discard_command (EggSMClient  *client, -						    int           argc, -						    const char  **argv); +        int           argc, +        const char  **argv);  static void     sm_client_xsmp_will_quit (EggSMClient *client, -					  gboolean     will_quit); +        gboolean     will_quit);  static gboolean sm_client_xsmp_end_session (EggSMClient         *client, -					    EggSMClientEndStyle  style, -					    gboolean  request_confirmation); +        EggSMClientEndStyle  style, +        gboolean  request_confirmation);  static void xsmp_save_yourself      (SmcConn   smc_conn, -				     SmPointer client_data, -				     int       save_style, -				     Bool      shutdown, -				     int       interact_style, -				     Bool      fast); +                                     SmPointer client_data, +                                     int       save_style, +                                     Bool      shutdown, +                                     int       interact_style, +                                     Bool      fast);  static void xsmp_die                (SmcConn   smc_conn, -				     SmPointer client_data); +                                     SmPointer client_data);  static void xsmp_save_complete      (SmcConn   smc_conn, -				     SmPointer client_data); +                                     SmPointer client_data);  static void xsmp_shutdown_cancelled (SmcConn   smc_conn, -				     SmPointer client_data); +                                     SmPointer client_data);  static void xsmp_interact           (SmcConn   smc_conn, -				     SmPointer client_data); +                                     SmPointer client_data);  static SmProp *array_prop        (const char    *name, -				  ...); +                                  ...);  static SmProp *ptrarray_prop     (const char    *name, -				  GPtrArray     *values); +                                  GPtrArray     *values);  static SmProp *string_prop       (const char    *name, -				  const char    *value); +                                  const char    *value);  static SmProp *card8_prop        (const char    *name, -				  unsigned char  value); +                                  unsigned char  value);  static void set_properties         (EggSMClientXSMP *xsmp, ...);  static void delete_properties      (EggSMClientXSMP *xsmp, ...);  static GPtrArray *generate_command (char       **argv, -				    const char  *client_id, -				    const char  *state_file); +                                    const char  *client_id, +                                    const char  *state_file);  static void save_state            (EggSMClientXSMP *xsmp);  static void do_save_yourself      (EggSMClientXSMP *xsmp); @@ -166,129 +167,129 @@ static void update_pending_events (EggSMClientXSMP *xsmp);  static void     ice_init             (void);  static gboolean process_ice_messages (IceConn       ice_conn);  static void     smc_error_handler    (SmcConn       smc_conn, -				      Bool          swap, -				      int           offending_minor_opcode, -				      unsigned long offending_sequence, -				      int           error_class, -				      int           severity, -				      SmPointer     values); +                                      Bool          swap, +                                      int           offending_minor_opcode, +                                      unsigned long offending_sequence, +                                      int           error_class, +                                      int           severity, +                                      SmPointer     values);  G_DEFINE_TYPE (EggSMClientXSMP, egg_sm_client_xsmp, EGG_TYPE_SM_CLIENT)  static void  egg_sm_client_xsmp_init (EggSMClientXSMP *xsmp)  { -  xsmp->state = XSMP_STATE_CONNECTION_CLOSED; -  xsmp->connection = NULL; -  xsmp->restart_style = SmRestartIfRunning; +	xsmp->state = XSMP_STATE_CONNECTION_CLOSED; +	xsmp->connection = NULL; +	xsmp->restart_style = SmRestartIfRunning;  }  static void  egg_sm_client_xsmp_class_init (EggSMClientXSMPClass *klass)  { -  EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass); +	EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass); -  sm_client_class->startup             = sm_client_xsmp_startup; -  sm_client_class->set_restart_command = sm_client_xsmp_set_restart_command; -  sm_client_class->set_discard_command = sm_client_xsmp_set_discard_command; -  sm_client_class->will_quit           = sm_client_xsmp_will_quit; -  sm_client_class->end_session         = sm_client_xsmp_end_session; +	sm_client_class->startup             = sm_client_xsmp_startup; +	sm_client_class->set_restart_command = sm_client_xsmp_set_restart_command; +	sm_client_class->set_discard_command = sm_client_xsmp_set_discard_command; +	sm_client_class->will_quit           = sm_client_xsmp_will_quit; +	sm_client_class->end_session         = sm_client_xsmp_end_session;  }  EggSMClient *  egg_sm_client_xsmp_new (void)  { -  if (!g_getenv ("SESSION_MANAGER")) -    return NULL; +	if (!g_getenv ("SESSION_MANAGER")) +		return NULL; -  return g_object_new (EGG_TYPE_SM_CLIENT_XSMP, NULL); +	return g_object_new (EGG_TYPE_SM_CLIENT_XSMP, NULL);  }  static gboolean  sm_client_xsmp_set_initial_properties (gpointer user_data)  { -  EggSMClientXSMP *xsmp = user_data; -  EggDesktopFile *desktop_file; -  GPtrArray *clone, *restart; -  char pid_str[64]; - -  if (xsmp->idle) -    { -      g_source_remove (xsmp->idle); -      xsmp->idle = 0; -    } -  xsmp->waiting_to_set_initial_properties = FALSE; - -  if (egg_sm_client_get_mode () == EGG_SM_CLIENT_MODE_NO_RESTART) -    xsmp->restart_style = SmRestartNever; - -  /* Parse info out of desktop file */ -  desktop_file = egg_get_desktop_file (); -  if (desktop_file) -    { -      GError *err = NULL; -      char *cmdline, **argv; -      int argc; - -      if (xsmp->restart_style == SmRestartIfRunning) +	EggSMClientXSMP *xsmp = user_data; +	EggDesktopFile *desktop_file; +	GPtrArray *clone, *restart; +	char pid_str[64]; + +	if (xsmp->idle)  	{ -	  if (egg_desktop_file_get_boolean (desktop_file,  -					    "X-MATE-AutoRestart", NULL)) -	    xsmp->restart_style = SmRestartImmediately; +		g_source_remove (xsmp->idle); +		xsmp->idle = 0;  	} +	xsmp->waiting_to_set_initial_properties = FALSE; + +	if (egg_sm_client_get_mode () == EGG_SM_CLIENT_MODE_NO_RESTART) +		xsmp->restart_style = SmRestartNever; -      if (!xsmp->set_restart_command) +	/* Parse info out of desktop file */ +	desktop_file = egg_get_desktop_file (); +	if (desktop_file)  	{ -	  cmdline = egg_desktop_file_parse_exec (desktop_file, NULL, &err); -	  if (cmdline && g_shell_parse_argv (cmdline, &argc, &argv, &err)) -	    { -	      egg_sm_client_set_restart_command (EGG_SM_CLIENT (xsmp), -						 argc, (const char **)argv); -	      g_strfreev (argv); -	    } -	  else -	    { -	      g_warning ("Could not parse Exec line in desktop file: %s", -			 err->message); -	      g_error_free (err); -	    } -	  g_free (cmdline); +		GError *err = NULL; +		char *cmdline, **argv; +		int argc; + +		if (xsmp->restart_style == SmRestartIfRunning) +		{ +			if (egg_desktop_file_get_boolean (desktop_file, +			                                  "X-MATE-AutoRestart", NULL)) +				xsmp->restart_style = SmRestartImmediately; +		} + +		if (!xsmp->set_restart_command) +		{ +			cmdline = egg_desktop_file_parse_exec (desktop_file, NULL, &err); +			if (cmdline && g_shell_parse_argv (cmdline, &argc, &argv, &err)) +			{ +				egg_sm_client_set_restart_command (EGG_SM_CLIENT (xsmp), +				                                   argc, (const char **)argv); +				g_strfreev (argv); +			} +			else +			{ +				g_warning ("Could not parse Exec line in desktop file: %s", +				           err->message); +				g_error_free (err); +			} +			g_free (cmdline); +		}  	} -    } - -  if (!xsmp->set_restart_command) -    xsmp->restart_command = g_strsplit (g_get_prgname (), " ", -1); - -  clone = generate_command (xsmp->restart_command, NULL, NULL); -  restart = generate_command (xsmp->restart_command, xsmp->client_id, NULL); - -  g_debug ("Setting initial properties"); - -  /* Program, CloneCommand, RestartCommand, and UserID are required. -   * ProcessID isn't required, but the SM may be able to do something -   * useful with it. -   */ -  g_snprintf (pid_str, sizeof (pid_str), "%lu", (gulong) getpid ()); -  set_properties (xsmp, -		  string_prop   (SmProgram, g_get_prgname ()), -		  ptrarray_prop (SmCloneCommand, clone), -		  ptrarray_prop (SmRestartCommand, restart), -		  string_prop   (SmUserID, g_get_user_name ()), -		  string_prop   (SmProcessID, pid_str), -		  card8_prop    (SmRestartStyleHint, xsmp->restart_style), -		  NULL); -  g_ptr_array_free (clone, TRUE); -  g_ptr_array_free (restart, TRUE); - -  if (desktop_file) -    { -      set_properties (xsmp, -		      string_prop ("_GSM_DesktopFile", egg_desktop_file_get_source (desktop_file)), -		      NULL); -    } - -  update_pending_events (xsmp); -  return FALSE; + +	if (!xsmp->set_restart_command) +		xsmp->restart_command = g_strsplit (g_get_prgname (), " ", -1); + +	clone = generate_command (xsmp->restart_command, NULL, NULL); +	restart = generate_command (xsmp->restart_command, xsmp->client_id, NULL); + +	g_debug ("Setting initial properties"); + +	/* Program, CloneCommand, RestartCommand, and UserID are required. +	 * ProcessID isn't required, but the SM may be able to do something +	 * useful with it. +	 */ +	g_snprintf (pid_str, sizeof (pid_str), "%lu", (gulong) getpid ()); +	set_properties (xsmp, +	                string_prop   (SmProgram, g_get_prgname ()), +	                ptrarray_prop (SmCloneCommand, clone), +	                ptrarray_prop (SmRestartCommand, restart), +	                string_prop   (SmUserID, g_get_user_name ()), +	                string_prop   (SmProcessID, pid_str), +	                card8_prop    (SmRestartStyleHint, xsmp->restart_style), +	                NULL); +	g_ptr_array_free (clone, TRUE); +	g_ptr_array_free (restart, TRUE); + +	if (desktop_file) +	{ +		set_properties (xsmp, +		                string_prop ("_GSM_DesktopFile", egg_desktop_file_get_source (desktop_file)), +		                NULL); +	} + +	update_pending_events (xsmp); +	return FALSE;  }  /* This gets called from two different places: xsmp_die() (when the @@ -298,771 +299,771 @@ sm_client_xsmp_set_initial_properties (gpointer user_data)  static void  sm_client_xsmp_disconnect (EggSMClientXSMP *xsmp)  { -  SmcConn connection; +	SmcConn connection; -  if (!xsmp->connection) -    return; +	if (!xsmp->connection) +		return; -  g_debug ("Disconnecting"); +	g_debug ("Disconnecting"); -  connection = xsmp->connection; -  xsmp->connection = NULL; -  SmcCloseConnection (connection, 0, NULL); -  xsmp->state = XSMP_STATE_CONNECTION_CLOSED; +	connection = xsmp->connection; +	xsmp->connection = NULL; +	SmcCloseConnection (connection, 0, NULL); +	xsmp->state = XSMP_STATE_CONNECTION_CLOSED; -  xsmp->waiting_to_save_myself = FALSE; -  update_pending_events (xsmp); +	xsmp->waiting_to_save_myself = FALSE; +	update_pending_events (xsmp);  }  static void  sm_client_xsmp_startup (EggSMClient *client, -			const char  *client_id) +                        const char  *client_id)  { -  EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; -  SmcCallbacks callbacks; -  char *ret_client_id; -  char error_string_ret[256]; - -  xsmp->client_id = g_strdup (client_id); - -  ice_init (); -  SmcSetErrorHandler (smc_error_handler); - -  callbacks.save_yourself.callback      = xsmp_save_yourself; -  callbacks.die.callback                = xsmp_die; -  callbacks.save_complete.callback      = xsmp_save_complete; -  callbacks.shutdown_cancelled.callback = xsmp_shutdown_cancelled; - -  callbacks.save_yourself.client_data      = xsmp; -  callbacks.die.client_data                = xsmp; -  callbacks.save_complete.client_data      = xsmp; -  callbacks.shutdown_cancelled.client_data = xsmp; - -  client_id = NULL; -  error_string_ret[0] = '\0'; -  xsmp->connection = -    SmcOpenConnection (NULL, xsmp, SmProtoMajor, SmProtoMinor, -		       SmcSaveYourselfProcMask | SmcDieProcMask | -		       SmcSaveCompleteProcMask | -		       SmcShutdownCancelledProcMask, -		       &callbacks, -		       xsmp->client_id, &ret_client_id, -		       sizeof (error_string_ret), error_string_ret); - -  if (!xsmp->connection) -    { -      g_warning ("Failed to connect to the session manager: %s\n", -		 error_string_ret[0] ? -		 error_string_ret : "no error message given"); -      xsmp->state = XSMP_STATE_CONNECTION_CLOSED; -      return; -    } - -  /* We expect a pointless initial SaveYourself if either (a) we -   * didn't have an initial client ID, or (b) we DID have an initial -   * client ID, but the server rejected it and gave us a new one. -   */ -  if (!xsmp->client_id || -      (ret_client_id && strcmp (xsmp->client_id, ret_client_id) != 0)) -    xsmp->expecting_initial_save_yourself = TRUE; - -  if (ret_client_id) -    { -      g_free (xsmp->client_id); -      xsmp->client_id = g_strdup (ret_client_id); -      free (ret_client_id); - -      gdk_threads_enter (); -      gdk_set_sm_client_id (xsmp->client_id); -      gdk_threads_leave (); - -      g_debug ("Got client ID \"%s\"", xsmp->client_id); -    } - -  xsmp->state = XSMP_STATE_IDLE; - -  /* Do not set the initial properties until we reach the main loop, -   * so that the application has a chance to call -   * egg_set_desktop_file(). (This may also help the session manager -   * have a better idea of when the application is fully up and -   * running.) -   */ -  xsmp->waiting_to_set_initial_properties = TRUE; -  xsmp->idle = g_idle_add (sm_client_xsmp_set_initial_properties, client); +	EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; +	SmcCallbacks callbacks; +	char *ret_client_id; +	char error_string_ret[256]; + +	xsmp->client_id = g_strdup (client_id); + +	ice_init (); +	SmcSetErrorHandler (smc_error_handler); + +	callbacks.save_yourself.callback      = xsmp_save_yourself; +	callbacks.die.callback                = xsmp_die; +	callbacks.save_complete.callback      = xsmp_save_complete; +	callbacks.shutdown_cancelled.callback = xsmp_shutdown_cancelled; + +	callbacks.save_yourself.client_data      = xsmp; +	callbacks.die.client_data                = xsmp; +	callbacks.save_complete.client_data      = xsmp; +	callbacks.shutdown_cancelled.client_data = xsmp; + +	client_id = NULL; +	error_string_ret[0] = '\0'; +	xsmp->connection = +	    SmcOpenConnection (NULL, xsmp, SmProtoMajor, SmProtoMinor, +	                       SmcSaveYourselfProcMask | SmcDieProcMask | +	                       SmcSaveCompleteProcMask | +	                       SmcShutdownCancelledProcMask, +	                       &callbacks, +	                       xsmp->client_id, &ret_client_id, +	                       sizeof (error_string_ret), error_string_ret); + +	if (!xsmp->connection) +	{ +		g_warning ("Failed to connect to the session manager: %s\n", +		           error_string_ret[0] ? +		           error_string_ret : "no error message given"); +		xsmp->state = XSMP_STATE_CONNECTION_CLOSED; +		return; +	} + +	/* We expect a pointless initial SaveYourself if either (a) we +	 * didn't have an initial client ID, or (b) we DID have an initial +	 * client ID, but the server rejected it and gave us a new one. +	 */ +	if (!xsmp->client_id || +	        (ret_client_id && strcmp (xsmp->client_id, ret_client_id) != 0)) +		xsmp->expecting_initial_save_yourself = TRUE; + +	if (ret_client_id) +	{ +		g_free (xsmp->client_id); +		xsmp->client_id = g_strdup (ret_client_id); +		free (ret_client_id); + +		gdk_threads_enter (); +		gdk_set_sm_client_id (xsmp->client_id); +		gdk_threads_leave (); + +		g_debug ("Got client ID \"%s\"", xsmp->client_id); +	} + +	xsmp->state = XSMP_STATE_IDLE; + +	/* Do not set the initial properties until we reach the main loop, +	 * so that the application has a chance to call +	 * egg_set_desktop_file(). (This may also help the session manager +	 * have a better idea of when the application is fully up and +	 * running.) +	 */ +	xsmp->waiting_to_set_initial_properties = TRUE; +	xsmp->idle = g_idle_add (sm_client_xsmp_set_initial_properties, client);  }  static void  sm_client_xsmp_set_restart_command (EggSMClient  *client, -				    int           argc, -				    const char  **argv) +                                    int           argc, +                                    const char  **argv)  { -  EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; -  int i; +	EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; +	int i; -  g_strfreev (xsmp->restart_command); +	g_strfreev (xsmp->restart_command); -  xsmp->restart_command = g_new (char *, argc + 1); -  for (i = 0; i < argc; i++) -    xsmp->restart_command[i] = g_strdup (argv[i]); -  xsmp->restart_command[i] = NULL; +	xsmp->restart_command = g_new (char *, argc + 1); +	for (i = 0; i < argc; i++) +		xsmp->restart_command[i] = g_strdup (argv[i]); +	xsmp->restart_command[i] = NULL; -  xsmp->set_restart_command = TRUE; +	xsmp->set_restart_command = TRUE;  }  static void  sm_client_xsmp_set_discard_command (EggSMClient  *client, -				    int           argc, -				    const char  **argv) +                                    int           argc, +                                    const char  **argv)  { -  EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; -  int i; +	EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; +	int i; -  g_strfreev (xsmp->discard_command); +	g_strfreev (xsmp->discard_command); -  xsmp->discard_command = g_new (char *, argc + 1); -  for (i = 0; i < argc; i++) -    xsmp->discard_command[i] = g_strdup (argv[i]); -  xsmp->discard_command[i] = NULL; +	xsmp->discard_command = g_new (char *, argc + 1); +	for (i = 0; i < argc; i++) +		xsmp->discard_command[i] = g_strdup (argv[i]); +	xsmp->discard_command[i] = NULL; -  xsmp->set_discard_command = TRUE; +	xsmp->set_discard_command = TRUE;  }  static void  sm_client_xsmp_will_quit (EggSMClient *client, -			  gboolean     will_quit) +                          gboolean     will_quit)  { -  EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; - -  if (xsmp->state == XSMP_STATE_CONNECTION_CLOSED) -    { -      /* The session manager has already exited! Schedule a quit -       * signal. -       */ -      xsmp->waiting_to_emit_quit = TRUE; -      update_pending_events (xsmp); -      return; -    } -  else if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED) -    { -      /* We received a ShutdownCancelled message while the application -       * was interacting; Schedule a quit_cancelled signal. -       */ -      xsmp->waiting_to_emit_quit_cancelled = TRUE; -      update_pending_events (xsmp); -      return; -    } - -  g_return_if_fail (xsmp->state == XSMP_STATE_INTERACT); - -  g_debug ("Sending InteractDone(%s)", will_quit ? "False" : "True"); -  SmcInteractDone (xsmp->connection, !will_quit); - -  if (will_quit && xsmp->need_save_state) -    save_state (xsmp); - -  g_debug ("Sending SaveYourselfDone(%s)", will_quit ? "True" : "False"); -  SmcSaveYourselfDone (xsmp->connection, will_quit); -  xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE; +	EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; + +	if (xsmp->state == XSMP_STATE_CONNECTION_CLOSED) +	{ +		/* The session manager has already exited! Schedule a quit +		 * signal. +		 */ +		xsmp->waiting_to_emit_quit = TRUE; +		update_pending_events (xsmp); +		return; +	} +	else if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED) +	{ +		/* We received a ShutdownCancelled message while the application +		 * was interacting; Schedule a quit_cancelled signal. +		 */ +		xsmp->waiting_to_emit_quit_cancelled = TRUE; +		update_pending_events (xsmp); +		return; +	} + +	g_return_if_fail (xsmp->state == XSMP_STATE_INTERACT); + +	g_debug ("Sending InteractDone(%s)", will_quit ? "False" : "True"); +	SmcInteractDone (xsmp->connection, !will_quit); + +	if (will_quit && xsmp->need_save_state) +		save_state (xsmp); + +	g_debug ("Sending SaveYourselfDone(%s)", will_quit ? "True" : "False"); +	SmcSaveYourselfDone (xsmp->connection, will_quit); +	xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;  }  static gboolean  sm_client_xsmp_end_session (EggSMClient         *client, -			    EggSMClientEndStyle  style, -			    gboolean             request_confirmation) +                            EggSMClientEndStyle  style, +                            gboolean             request_confirmation)  { -  EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; -  int save_type; - -  /* To end the session via XSMP, we have to send a -   * SaveYourselfRequest. We aren't allowed to do that if anything -   * else is going on, but we don't want to expose this fact to the -   * application. So we do our best to patch things up here... -   * -   * In the worst case, this method might block for some length of -   * time in process_ice_messages, but the only time that code path is -   * honestly likely to get hit is if the application tries to end the -   * session as the very first thing it does, in which case it -   * probably won't actually block anyway. It's not worth gunking up -   * the API to try to deal nicely with the other 0.01% of cases where -   * this happens. -   */ - -  while (xsmp->state != XSMP_STATE_IDLE || -	 xsmp->expecting_initial_save_yourself) -    { -      /* If we're already shutting down, we don't need to do anything. */ -      if (xsmp->shutting_down) -	return TRUE; - -      switch (xsmp->state) +	EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; +	int save_type; + +	/* To end the session via XSMP, we have to send a +	 * SaveYourselfRequest. We aren't allowed to do that if anything +	 * else is going on, but we don't want to expose this fact to the +	 * application. So we do our best to patch things up here... +	 * +	 * In the worst case, this method might block for some length of +	 * time in process_ice_messages, but the only time that code path is +	 * honestly likely to get hit is if the application tries to end the +	 * session as the very first thing it does, in which case it +	 * probably won't actually block anyway. It's not worth gunking up +	 * the API to try to deal nicely with the other 0.01% of cases where +	 * this happens. +	 */ + +	while (xsmp->state != XSMP_STATE_IDLE || +	        xsmp->expecting_initial_save_yourself)  	{ -	case XSMP_STATE_CONNECTION_CLOSED: -	  return FALSE; - -	case XSMP_STATE_SAVE_YOURSELF: -	  /* Trying to log out from the save_state callback? Whatever. -	   * Abort the save_state. -	   */ -	  SmcSaveYourselfDone (xsmp->connection, FALSE); -	  xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE; -	  break; - -	case XSMP_STATE_INTERACT_REQUEST: -	case XSMP_STATE_INTERACT: -	case XSMP_STATE_SHUTDOWN_CANCELLED: -	  /* Already in a shutdown-related state, just ignore -	   * the new shutdown request... -	   */ -	  return TRUE; - -	case XSMP_STATE_IDLE: -	  if (xsmp->waiting_to_set_initial_properties) -	    sm_client_xsmp_set_initial_properties (xsmp); - -	  if (!xsmp->expecting_initial_save_yourself) -	    break; -	  /* else fall through */ - -	case XSMP_STATE_SAVE_YOURSELF_DONE: -	  /* We need to wait for some response from the server.*/ -	  process_ice_messages (SmcGetIceConnection (xsmp->connection)); -	  break; +		/* If we're already shutting down, we don't need to do anything. */ +		if (xsmp->shutting_down) +			return TRUE; -	default: -	  /* Hm... shouldn't happen */ -	  return FALSE; +		switch (xsmp->state) +		{ +		case XSMP_STATE_CONNECTION_CLOSED: +			return FALSE; + +		case XSMP_STATE_SAVE_YOURSELF: +			/* Trying to log out from the save_state callback? Whatever. +			 * Abort the save_state. +			 */ +			SmcSaveYourselfDone (xsmp->connection, FALSE); +			xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE; +			break; + +		case XSMP_STATE_INTERACT_REQUEST: +		case XSMP_STATE_INTERACT: +		case XSMP_STATE_SHUTDOWN_CANCELLED: +			/* Already in a shutdown-related state, just ignore +			 * the new shutdown request... +			 */ +			return TRUE; + +		case XSMP_STATE_IDLE: +			if (xsmp->waiting_to_set_initial_properties) +				sm_client_xsmp_set_initial_properties (xsmp); + +			if (!xsmp->expecting_initial_save_yourself) +				break; +			/* else fall through */ + +		case XSMP_STATE_SAVE_YOURSELF_DONE: +			/* We need to wait for some response from the server.*/ +			process_ice_messages (SmcGetIceConnection (xsmp->connection)); +			break; + +		default: +			/* Hm... shouldn't happen */ +			return FALSE; +		}  	} -    } - -  /* xfce4-session will do the wrong thing if we pass SmSaveGlobal and -   * the user chooses to save the session. But mate-session will do -   * the wrong thing if we pass SmSaveBoth and the user chooses NOT to -   * save the session... Sigh. -   */ -  if (!strcmp (SmcVendor (xsmp->connection), "xfce4-session")) -    save_type = SmSaveBoth; -  else -    save_type = SmSaveGlobal; - -  g_debug ("Sending SaveYourselfRequest(SmSaveGlobal, Shutdown, SmInteractStyleAny, %sFast)", request_confirmation ? "!" : ""); -  SmcRequestSaveYourself (xsmp->connection, -			  save_type, -			  True, /* shutdown */ -			  SmInteractStyleAny, -			  !request_confirmation, /* fast */ -			  True /* global */); -  return TRUE; + +	/* xfce4-session will do the wrong thing if we pass SmSaveGlobal and +	 * the user chooses to save the session. But mate-session will do +	 * the wrong thing if we pass SmSaveBoth and the user chooses NOT to +	 * save the session... Sigh. +	 */ +	if (!strcmp (SmcVendor (xsmp->connection), "xfce4-session")) +		save_type = SmSaveBoth; +	else +		save_type = SmSaveGlobal; + +	g_debug ("Sending SaveYourselfRequest(SmSaveGlobal, Shutdown, SmInteractStyleAny, %sFast)", request_confirmation ? "!" : ""); +	SmcRequestSaveYourself (xsmp->connection, +	                        save_type, +	                        True, /* shutdown */ +	                        SmInteractStyleAny, +	                        !request_confirmation, /* fast */ +	                        True /* global */); +	return TRUE;  }  static gboolean  idle_do_pending_events (gpointer data)  { -  EggSMClientXSMP *xsmp = data; -  EggSMClient *client = data; - -  gdk_threads_enter (); - -  xsmp->idle = 0; - -  if (xsmp->waiting_to_emit_quit) -    { -      xsmp->waiting_to_emit_quit = FALSE; -      egg_sm_client_quit (client); -      goto out; -    } - -  if (xsmp->waiting_to_emit_quit_cancelled) -    { -      xsmp->waiting_to_emit_quit_cancelled = FALSE; -      egg_sm_client_quit_cancelled (client); -      xsmp->state = XSMP_STATE_IDLE; -    } - -  if (xsmp->waiting_to_save_myself) -    { -      xsmp->waiting_to_save_myself = FALSE; -      do_save_yourself (xsmp); -    } - - out: -  gdk_threads_leave (); -  return FALSE; +	EggSMClientXSMP *xsmp = data; +	EggSMClient *client = data; + +	gdk_threads_enter (); + +	xsmp->idle = 0; + +	if (xsmp->waiting_to_emit_quit) +	{ +		xsmp->waiting_to_emit_quit = FALSE; +		egg_sm_client_quit (client); +		goto out; +	} + +	if (xsmp->waiting_to_emit_quit_cancelled) +	{ +		xsmp->waiting_to_emit_quit_cancelled = FALSE; +		egg_sm_client_quit_cancelled (client); +		xsmp->state = XSMP_STATE_IDLE; +	} + +	if (xsmp->waiting_to_save_myself) +	{ +		xsmp->waiting_to_save_myself = FALSE; +		do_save_yourself (xsmp); +	} + +out: +	gdk_threads_leave (); +	return FALSE;  }  static void  update_pending_events (EggSMClientXSMP *xsmp)  { -  gboolean want_idle = -    xsmp->waiting_to_emit_quit || -    xsmp->waiting_to_emit_quit_cancelled || -    xsmp->waiting_to_save_myself; - -  if (want_idle) -    { -      if (xsmp->idle == 0) -	xsmp->idle = g_idle_add (idle_do_pending_events, xsmp); -    } -  else -    { -      if (xsmp->idle != 0) -	g_source_remove (xsmp->idle); -      xsmp->idle = 0; -    } +	gboolean want_idle = +	    xsmp->waiting_to_emit_quit || +	    xsmp->waiting_to_emit_quit_cancelled || +	    xsmp->waiting_to_save_myself; + +	if (want_idle) +	{ +		if (xsmp->idle == 0) +			xsmp->idle = g_idle_add (idle_do_pending_events, xsmp); +	} +	else +	{ +		if (xsmp->idle != 0) +			g_source_remove (xsmp->idle); +		xsmp->idle = 0; +	}  }  static void  fix_broken_state (EggSMClientXSMP *xsmp, const char *message, -		  gboolean send_interact_done, -		  gboolean send_save_yourself_done) +                  gboolean send_interact_done, +                  gboolean send_save_yourself_done)  { -  g_warning ("Received XSMP %s message in state %s: client or server error", -	     message, EGG_SM_CLIENT_XSMP_STATE (xsmp)); +	g_warning ("Received XSMP %s message in state %s: client or server error", +	           message, EGG_SM_CLIENT_XSMP_STATE (xsmp)); -  /* Forget any pending SaveYourself plans we had */ -  xsmp->waiting_to_save_myself = FALSE; -  update_pending_events (xsmp); +	/* Forget any pending SaveYourself plans we had */ +	xsmp->waiting_to_save_myself = FALSE; +	update_pending_events (xsmp); -  if (send_interact_done) -    SmcInteractDone (xsmp->connection, False); -  if (send_save_yourself_done) -    SmcSaveYourselfDone (xsmp->connection, True); +	if (send_interact_done) +		SmcInteractDone (xsmp->connection, False); +	if (send_save_yourself_done) +		SmcSaveYourselfDone (xsmp->connection, True); -  xsmp->state = send_save_yourself_done ? XSMP_STATE_SAVE_YOURSELF_DONE : XSMP_STATE_IDLE; +	xsmp->state = send_save_yourself_done ? XSMP_STATE_SAVE_YOURSELF_DONE : XSMP_STATE_IDLE;  }  /* SM callbacks */  static void  xsmp_save_yourself (SmcConn   smc_conn, -		    SmPointer client_data, -		    int       save_type, -		    Bool      shutdown, -		    int       interact_style, -		    Bool      fast) +                    SmPointer client_data, +                    int       save_type, +                    Bool      shutdown, +                    int       interact_style, +                    Bool      fast)  { -  EggSMClientXSMP *xsmp = client_data; -  gboolean wants_quit_requested; - -  g_debug ("Received SaveYourself(%s, %s, %s, %s) in state %s", -	   save_type == SmSaveLocal ? "SmSaveLocal" : -	   save_type == SmSaveGlobal ? "SmSaveGlobal" : "SmSaveBoth", -	   shutdown ? "Shutdown" : "!Shutdown", -	   interact_style == SmInteractStyleAny ? "SmInteractStyleAny" : -	   interact_style == SmInteractStyleErrors ? "SmInteractStyleErrors" : -	   "SmInteractStyleNone", fast ? "Fast" : "!Fast", -	   EGG_SM_CLIENT_XSMP_STATE (xsmp)); - -  if (xsmp->state != XSMP_STATE_IDLE && -      xsmp->state != XSMP_STATE_SHUTDOWN_CANCELLED) -    { -      fix_broken_state (xsmp, "SaveYourself", FALSE, TRUE); -      return; -    } - -  if (xsmp->waiting_to_set_initial_properties) -    sm_client_xsmp_set_initial_properties (xsmp); - -  /* If this is the initial SaveYourself, ignore it; we've already set -   * properties and there's no reason to actually save state too. -   */ -  if (xsmp->expecting_initial_save_yourself) -    { -      xsmp->expecting_initial_save_yourself = FALSE; - -      if (save_type == SmSaveLocal && -	  interact_style == SmInteractStyleNone && -	  !shutdown && !fast) +	EggSMClientXSMP *xsmp = client_data; +	gboolean wants_quit_requested; + +	g_debug ("Received SaveYourself(%s, %s, %s, %s) in state %s", +	         save_type == SmSaveLocal ? "SmSaveLocal" : +	         save_type == SmSaveGlobal ? "SmSaveGlobal" : "SmSaveBoth", +	         shutdown ? "Shutdown" : "!Shutdown", +	         interact_style == SmInteractStyleAny ? "SmInteractStyleAny" : +	         interact_style == SmInteractStyleErrors ? "SmInteractStyleErrors" : +	         "SmInteractStyleNone", fast ? "Fast" : "!Fast", +	         EGG_SM_CLIENT_XSMP_STATE (xsmp)); + +	if (xsmp->state != XSMP_STATE_IDLE && +	        xsmp->state != XSMP_STATE_SHUTDOWN_CANCELLED) +	{ +		fix_broken_state (xsmp, "SaveYourself", FALSE, TRUE); +		return; +	} + +	if (xsmp->waiting_to_set_initial_properties) +		sm_client_xsmp_set_initial_properties (xsmp); + +	/* If this is the initial SaveYourself, ignore it; we've already set +	 * properties and there's no reason to actually save state too. +	 */ +	if (xsmp->expecting_initial_save_yourself)  	{ -	  g_debug ("Sending SaveYourselfDone(True) for initial SaveYourself"); -	  SmcSaveYourselfDone (xsmp->connection, True); -	  /* As explained in the comment at the end of -	   * do_save_yourself(), SAVE_YOURSELF_DONE is the correct -	   * state here, not IDLE. -	   */ -	  xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE; -	  return; +		xsmp->expecting_initial_save_yourself = FALSE; + +		if (save_type == SmSaveLocal && +		        interact_style == SmInteractStyleNone && +		        !shutdown && !fast) +		{ +			g_debug ("Sending SaveYourselfDone(True) for initial SaveYourself"); +			SmcSaveYourselfDone (xsmp->connection, True); +			/* As explained in the comment at the end of +			 * do_save_yourself(), SAVE_YOURSELF_DONE is the correct +			 * state here, not IDLE. +			 */ +			xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE; +			return; +		} +		else +			g_warning ("First SaveYourself was not the expected one!");  	} -      else -	g_warning ("First SaveYourself was not the expected one!"); -    } - -  /* Even ignoring the "fast" flag completely, there are still 18 -   * different combinations of save_type, shutdown and interact_style. -   * We interpret them as follows: -   * -   *   Type  Shutdown  Interact	 Interpretation -   *     G      F       A/E/N  	 do nothing (1) -   *     G      T         N    	 do nothing (1)* -   *     G      T        A/E   	 quit_requested (2) -   *    L/B     F       A/E/N  	 save_state (3) -   *    L/B     T         N    	 save_state (3)* -   *    L/B     T        A/E   	 quit_requested, then save_state (4) -   * -   *   1. Do nothing, because the SM asked us to do something -   *      uninteresting (save open files, but then don't quit -   *      afterward) or rude (save open files without asking the user -   *      for confirmation). -   * -   *   2. Request interaction and then emit ::quit_requested. This -   *      perhaps isn't quite correct for the SmInteractStyleErrors -   *      case, but we don't care. -   * -   *   3. Emit ::save_state. The SmSaveBoth SaveYourselfs in these -   *      rows essentially get demoted to SmSaveLocal, because their -   *      Global halves correspond to "do nothing". -   * -   *   4. Request interaction, emit ::quit_requested, and then emit -   *      ::save_state after interacting. This is the SmSaveBoth -   *      equivalent of #2, but we also promote SmSaveLocal shutdown -   *      SaveYourselfs to SmSaveBoth here, because we want to give -   *      the user a chance to save open files before quitting. -   * -   * (* It would be nice if we could do something useful when the -   * session manager sends a SaveYourself with shutdown True and -   * SmInteractStyleNone. But we can't, so we just pretend it didn't -   * even tell us it was shutting down. The docs for ::quit mention -   * that it might not always be preceded by ::quit_requested.) -   */ - -  /* As an optimization, we don't actually request interaction and -   * emit ::quit_requested if the application isn't listening to the -   * signal. -   */ -  wants_quit_requested = g_signal_has_handler_pending (xsmp, g_signal_lookup ("quit_requested", EGG_TYPE_SM_CLIENT), 0, FALSE); - -  xsmp->need_save_state     = (save_type != SmSaveGlobal); -  xsmp->need_quit_requested = (shutdown && wants_quit_requested && -			       interact_style != SmInteractStyleNone); -  xsmp->interact_errors     = (interact_style == SmInteractStyleErrors); - -  xsmp->shutting_down       = shutdown; - -  do_save_yourself (xsmp); + +	/* Even ignoring the "fast" flag completely, there are still 18 +	 * different combinations of save_type, shutdown and interact_style. +	 * We interpret them as follows: +	 * +	 *   Type  Shutdown  Interact	 Interpretation +	 *     G      F       A/E/N  	 do nothing (1) +	 *     G      T         N    	 do nothing (1)* +	 *     G      T        A/E   	 quit_requested (2) +	 *    L/B     F       A/E/N  	 save_state (3) +	 *    L/B     T         N    	 save_state (3)* +	 *    L/B     T        A/E   	 quit_requested, then save_state (4) +	 * +	 *   1. Do nothing, because the SM asked us to do something +	 *      uninteresting (save open files, but then don't quit +	 *      afterward) or rude (save open files without asking the user +	 *      for confirmation). +	 * +	 *   2. Request interaction and then emit ::quit_requested. This +	 *      perhaps isn't quite correct for the SmInteractStyleErrors +	 *      case, but we don't care. +	 * +	 *   3. Emit ::save_state. The SmSaveBoth SaveYourselfs in these +	 *      rows essentially get demoted to SmSaveLocal, because their +	 *      Global halves correspond to "do nothing". +	 * +	 *   4. Request interaction, emit ::quit_requested, and then emit +	 *      ::save_state after interacting. This is the SmSaveBoth +	 *      equivalent of #2, but we also promote SmSaveLocal shutdown +	 *      SaveYourselfs to SmSaveBoth here, because we want to give +	 *      the user a chance to save open files before quitting. +	 * +	 * (* It would be nice if we could do something useful when the +	 * session manager sends a SaveYourself with shutdown True and +	 * SmInteractStyleNone. But we can't, so we just pretend it didn't +	 * even tell us it was shutting down. The docs for ::quit mention +	 * that it might not always be preceded by ::quit_requested.) +	 */ + +	/* As an optimization, we don't actually request interaction and +	 * emit ::quit_requested if the application isn't listening to the +	 * signal. +	 */ +	wants_quit_requested = g_signal_has_handler_pending (xsmp, g_signal_lookup ("quit_requested", EGG_TYPE_SM_CLIENT), 0, FALSE); + +	xsmp->need_save_state     = (save_type != SmSaveGlobal); +	xsmp->need_quit_requested = (shutdown && wants_quit_requested && +	                             interact_style != SmInteractStyleNone); +	xsmp->interact_errors     = (interact_style == SmInteractStyleErrors); + +	xsmp->shutting_down       = shutdown; + +	do_save_yourself (xsmp);  }  static void  do_save_yourself (EggSMClientXSMP *xsmp)  { -  if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED) -    { -      /* The SM cancelled a previous SaveYourself, but we haven't yet -       * had a chance to tell the application, so we can't start -       * processing this SaveYourself yet. -       */ -      xsmp->waiting_to_save_myself = TRUE; -      update_pending_events (xsmp); -      return; -    } - -  if (xsmp->need_quit_requested) -    { -      xsmp->state = XSMP_STATE_INTERACT_REQUEST; - -      g_debug ("Sending InteractRequest(%s)", -	       xsmp->interact_errors ? "Error" : "Normal"); -      SmcInteractRequest (xsmp->connection, -			  xsmp->interact_errors ? SmDialogError : SmDialogNormal, -			  xsmp_interact, -			  xsmp); -      return; -    } - -  if (xsmp->need_save_state) -    { -      save_state (xsmp); - -      /* Though unlikely, the client could have been disconnected -       * while the application was saving its state. -       */ -      if (!xsmp->connection) -	 return; -    } - -  g_debug ("Sending SaveYourselfDone(True)"); -  SmcSaveYourselfDone (xsmp->connection, True); - -  /* The client state diagram in the XSMP spec says that after a -   * non-shutdown SaveYourself, we go directly back to "idle". But -   * everything else in both the XSMP spec and the libSM docs -   * disagrees. -   */ -  xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE; +	if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED) +	{ +		/* The SM cancelled a previous SaveYourself, but we haven't yet +		 * had a chance to tell the application, so we can't start +		 * processing this SaveYourself yet. +		 */ +		xsmp->waiting_to_save_myself = TRUE; +		update_pending_events (xsmp); +		return; +	} + +	if (xsmp->need_quit_requested) +	{ +		xsmp->state = XSMP_STATE_INTERACT_REQUEST; + +		g_debug ("Sending InteractRequest(%s)", +		         xsmp->interact_errors ? "Error" : "Normal"); +		SmcInteractRequest (xsmp->connection, +		                    xsmp->interact_errors ? SmDialogError : SmDialogNormal, +		                    xsmp_interact, +		                    xsmp); +		return; +	} + +	if (xsmp->need_save_state) +	{ +		save_state (xsmp); + +		/* Though unlikely, the client could have been disconnected +		 * while the application was saving its state. +		 */ +		if (!xsmp->connection) +			return; +	} + +	g_debug ("Sending SaveYourselfDone(True)"); +	SmcSaveYourselfDone (xsmp->connection, True); + +	/* The client state diagram in the XSMP spec says that after a +	 * non-shutdown SaveYourself, we go directly back to "idle". But +	 * everything else in both the XSMP spec and the libSM docs +	 * disagrees. +	 */ +	xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;  }  static void  save_state (EggSMClientXSMP *xsmp)  { -  GKeyFile *state_file; -  char *state_file_path, *data; -  EggDesktopFile *desktop_file; -  GPtrArray *restart, *discard; -  int offset, fd; - -  /* We set xsmp->state before emitting save_state, but our caller is -   * responsible for setting it back afterward. -   */ -  xsmp->state = XSMP_STATE_SAVE_YOURSELF; - -  state_file = egg_sm_client_save_state ((EggSMClient *)xsmp); -  if (!state_file) -    { -      restart = generate_command (xsmp->restart_command, xsmp->client_id, NULL); -      set_properties (xsmp, -		      ptrarray_prop (SmRestartCommand, restart), -		      NULL); -      g_ptr_array_free (restart, TRUE); - -      if (xsmp->set_discard_command) -        { -          discard = generate_command (xsmp->discard_command, NULL, NULL); -          set_properties (xsmp, -                          ptrarray_prop (SmDiscardCommand, discard), -                          NULL); -          g_ptr_array_free (discard, TRUE); -        } -      else -        delete_properties (xsmp, SmDiscardCommand, NULL); - -      return; -    } - -  desktop_file = egg_get_desktop_file (); -  if (desktop_file) -    { -      GKeyFile *merged_file; -      char *desktop_file_path; - -      merged_file = g_key_file_new (); -      desktop_file_path = -	g_filename_from_uri (egg_desktop_file_get_source (desktop_file), -			     NULL, NULL); -      if (desktop_file_path && -	  g_key_file_load_from_file (merged_file, desktop_file_path, -				     G_KEY_FILE_KEEP_COMMENTS | -				     G_KEY_FILE_KEEP_TRANSLATIONS, NULL)) +	GKeyFile *state_file; +	char *state_file_path, *data; +	EggDesktopFile *desktop_file; +	GPtrArray *restart, *discard; +	int offset, fd; + +	/* We set xsmp->state before emitting save_state, but our caller is +	 * responsible for setting it back afterward. +	 */ +	xsmp->state = XSMP_STATE_SAVE_YOURSELF; + +	state_file = egg_sm_client_save_state ((EggSMClient *)xsmp); +	if (!state_file)  	{ -	  guint g, k, i; -	  char **groups, **keys, *value, *exec; - -	  groups = g_key_file_get_groups (state_file, NULL); -	  for (g = 0; groups[g]; g++) -	    { -	      keys = g_key_file_get_keys (state_file, groups[g], NULL, NULL); -	      for (k = 0; keys[k]; k++) +		restart = generate_command (xsmp->restart_command, xsmp->client_id, NULL); +		set_properties (xsmp, +		                ptrarray_prop (SmRestartCommand, restart), +		                NULL); +		g_ptr_array_free (restart, TRUE); + +		if (xsmp->set_discard_command)  		{ -		  value = g_key_file_get_value (state_file, groups[g], -						keys[k], NULL); -		  if (value) -		    { -		      g_key_file_set_value (merged_file, groups[g], -					    keys[k], value); -		      g_free (value); -		    } +			discard = generate_command (xsmp->discard_command, NULL, NULL); +			set_properties (xsmp, +			                ptrarray_prop (SmDiscardCommand, discard), +			                NULL); +			g_ptr_array_free (discard, TRUE);  		} -	      g_strfreev (keys); -	    } -	  g_strfreev (groups); - -	  g_key_file_free (state_file); -	  state_file = merged_file; - -	  /* Update Exec key using "--sm-client-state-file %k" */ -	  restart = generate_command (xsmp->restart_command, -				      NULL, "%k"); -	  for (i = 0; i < restart->len; i++) -	    restart->pdata[i] = g_shell_quote (restart->pdata[i]); -	  g_ptr_array_add (restart, NULL); -	  exec = g_strjoinv (" ", (char **)restart->pdata); -	  g_strfreev ((char **)restart->pdata); -	  g_ptr_array_free (restart, FALSE); - -	  g_key_file_set_string (state_file, EGG_DESKTOP_FILE_GROUP, -				 EGG_DESKTOP_FILE_KEY_EXEC, -				 exec); -	  g_free (exec); +		else +			delete_properties (xsmp, SmDiscardCommand, NULL); + +		return;  	} -      else -	desktop_file = NULL; - -      g_free (desktop_file_path); -    } - -  /* Now write state_file to disk. (We can't use mktemp(), because -   * that requires the filename to end with "XXXXXX", and we want -   * it to end with ".desktop".) -   */ - -  data = g_key_file_to_data (state_file, NULL, NULL); -  g_key_file_free (state_file); - -  offset = 0; -  while (1) -    { -      state_file_path = g_strdup_printf ("%s%csession-state%c%s-%ld.%s", -					 g_get_user_config_dir (), -					 G_DIR_SEPARATOR, G_DIR_SEPARATOR, -					 g_get_prgname (), -					 (long)time (NULL) + offset, -					 desktop_file ? "desktop" : "state"); - -      fd = open (state_file_path, O_WRONLY | O_CREAT | O_EXCL, 0644); -      if (fd == -1) + +	desktop_file = egg_get_desktop_file (); +	if (desktop_file)  	{ -	  if (errno == EEXIST) -	    { -	      offset++; -	      g_free (state_file_path); -	      continue; -	    } -	  else if (errno == ENOTDIR || errno == ENOENT) -	    { -	      char *sep = strrchr (state_file_path, G_DIR_SEPARATOR); - -	      *sep = '\0'; -	      if (g_mkdir_with_parents (state_file_path, 0755) != 0) +		GKeyFile *merged_file; +		char *desktop_file_path; + +		merged_file = g_key_file_new (); +		desktop_file_path = +		    g_filename_from_uri (egg_desktop_file_get_source (desktop_file), +		                         NULL, NULL); +		if (desktop_file_path && +		        g_key_file_load_from_file (merged_file, desktop_file_path, +		                                   G_KEY_FILE_KEEP_COMMENTS | +		                                   G_KEY_FILE_KEEP_TRANSLATIONS, NULL))  		{ -		  g_warning ("Could not create directory '%s'", -			     state_file_path); -		  g_free (state_file_path); -		  state_file_path = NULL; -		  break; +			guint g, k, i; +			char **groups, **keys, *value, *exec; + +			groups = g_key_file_get_groups (state_file, NULL); +			for (g = 0; groups[g]; g++) +			{ +				keys = g_key_file_get_keys (state_file, groups[g], NULL, NULL); +				for (k = 0; keys[k]; k++) +				{ +					value = g_key_file_get_value (state_file, groups[g], +					                              keys[k], NULL); +					if (value) +					{ +						g_key_file_set_value (merged_file, groups[g], +						                      keys[k], value); +						g_free (value); +					} +				} +				g_strfreev (keys); +			} +			g_strfreev (groups); + +			g_key_file_free (state_file); +			state_file = merged_file; + +			/* Update Exec key using "--sm-client-state-file %k" */ +			restart = generate_command (xsmp->restart_command, +			                            NULL, "%k"); +			for (i = 0; i < restart->len; i++) +				restart->pdata[i] = g_shell_quote (restart->pdata[i]); +			g_ptr_array_add (restart, NULL); +			exec = g_strjoinv (" ", (char **)restart->pdata); +			g_strfreev ((char **)restart->pdata); +			g_ptr_array_free (restart, FALSE); + +			g_key_file_set_string (state_file, EGG_DESKTOP_FILE_GROUP, +			                       EGG_DESKTOP_FILE_KEY_EXEC, +			                       exec); +			g_free (exec);  		} +		else +			desktop_file = NULL; + +		g_free (desktop_file_path); +	} -	      continue; -	    } +	/* Now write state_file to disk. (We can't use mktemp(), because +	 * that requires the filename to end with "XXXXXX", and we want +	 * it to end with ".desktop".) +	 */ -	  g_warning ("Could not create file '%s': %s", -		     state_file_path, g_strerror (errno)); -	  g_free (state_file_path); -	  state_file_path = NULL; -	  break; +	data = g_key_file_to_data (state_file, NULL, NULL); +	g_key_file_free (state_file); + +	offset = 0; +	while (1) +	{ +		state_file_path = g_strdup_printf ("%s%csession-state%c%s-%ld.%s", +		                                   g_get_user_config_dir (), +		                                   G_DIR_SEPARATOR, G_DIR_SEPARATOR, +		                                   g_get_prgname (), +		                                   (long)time (NULL) + offset, +		                                   desktop_file ? "desktop" : "state"); + +		fd = open (state_file_path, O_WRONLY | O_CREAT | O_EXCL, 0644); +		if (fd == -1) +		{ +			if (errno == EEXIST) +			{ +				offset++; +				g_free (state_file_path); +				continue; +			} +			else if (errno == ENOTDIR || errno == ENOENT) +			{ +				char *sep = strrchr (state_file_path, G_DIR_SEPARATOR); + +				*sep = '\0'; +				if (g_mkdir_with_parents (state_file_path, 0755) != 0) +				{ +					g_warning ("Could not create directory '%s'", +					           state_file_path); +					g_free (state_file_path); +					state_file_path = NULL; +					break; +				} + +				continue; +			} + +			g_warning ("Could not create file '%s': %s", +			           state_file_path, g_strerror (errno)); +			g_free (state_file_path); +			state_file_path = NULL; +			break; +		} + +		close (fd); +		g_file_set_contents (state_file_path, data, -1, NULL); +		break;  	} +	g_free (data); + +	restart = generate_command (xsmp->restart_command, xsmp->client_id, +	                            state_file_path); +	set_properties (xsmp, +	                ptrarray_prop (SmRestartCommand, restart), +	                NULL); +	g_ptr_array_free (restart, TRUE); -      close (fd); -      g_file_set_contents (state_file_path, data, -1, NULL); -      break; -    } -  g_free (data); - -  restart = generate_command (xsmp->restart_command, xsmp->client_id, -			      state_file_path); -  set_properties (xsmp, -		  ptrarray_prop (SmRestartCommand, restart), -		  NULL); -  g_ptr_array_free (restart, TRUE); - -  if (state_file_path) -    { -      set_properties (xsmp, -		      array_prop (SmDiscardCommand, -				  "/bin/rm", "-rf", state_file_path, -				  NULL), -		      NULL); -      g_free (state_file_path); -    } +	if (state_file_path) +	{ +		set_properties (xsmp, +		                array_prop (SmDiscardCommand, +		                            "/bin/rm", "-rf", state_file_path, +		                            NULL), +		                NULL); +		g_free (state_file_path); +	}  }  static void  xsmp_interact (SmcConn   smc_conn, -	       SmPointer client_data) +               SmPointer client_data)  { -  EggSMClientXSMP *xsmp = client_data; -  EggSMClient *client = client_data; +	EggSMClientXSMP *xsmp = client_data; +	EggSMClient *client = client_data; -  g_debug ("Received Interact message in state %s", -	   EGG_SM_CLIENT_XSMP_STATE (xsmp)); +	g_debug ("Received Interact message in state %s", +	         EGG_SM_CLIENT_XSMP_STATE (xsmp)); -  if (xsmp->state != XSMP_STATE_INTERACT_REQUEST) -    { -      fix_broken_state (xsmp, "Interact", TRUE, TRUE); -      return; -    } +	if (xsmp->state != XSMP_STATE_INTERACT_REQUEST) +	{ +		fix_broken_state (xsmp, "Interact", TRUE, TRUE); +		return; +	} -  xsmp->state = XSMP_STATE_INTERACT; -  egg_sm_client_quit_requested (client); +	xsmp->state = XSMP_STATE_INTERACT; +	egg_sm_client_quit_requested (client);  }  static void  xsmp_die (SmcConn   smc_conn, -	  SmPointer client_data) +          SmPointer client_data)  { -  EggSMClientXSMP *xsmp = client_data; -  EggSMClient *client = client_data; +	EggSMClientXSMP *xsmp = client_data; +	EggSMClient *client = client_data; -  g_debug ("Received Die message in state %s", -	   EGG_SM_CLIENT_XSMP_STATE (xsmp)); +	g_debug ("Received Die message in state %s", +	         EGG_SM_CLIENT_XSMP_STATE (xsmp)); -  sm_client_xsmp_disconnect (xsmp); -  egg_sm_client_quit (client); +	sm_client_xsmp_disconnect (xsmp); +	egg_sm_client_quit (client);  }  static void  xsmp_save_complete (SmcConn   smc_conn, -		    SmPointer client_data) +                    SmPointer client_data)  { -  EggSMClientXSMP *xsmp = client_data; +	EggSMClientXSMP *xsmp = client_data; -  g_debug ("Received SaveComplete message in state %s", -	   EGG_SM_CLIENT_XSMP_STATE (xsmp)); +	g_debug ("Received SaveComplete message in state %s", +	         EGG_SM_CLIENT_XSMP_STATE (xsmp)); -  if (xsmp->state == XSMP_STATE_SAVE_YOURSELF_DONE) -    xsmp->state = XSMP_STATE_IDLE; -  else -    fix_broken_state (xsmp, "SaveComplete", FALSE, FALSE); +	if (xsmp->state == XSMP_STATE_SAVE_YOURSELF_DONE) +		xsmp->state = XSMP_STATE_IDLE; +	else +		fix_broken_state (xsmp, "SaveComplete", FALSE, FALSE);  }  static void  xsmp_shutdown_cancelled (SmcConn   smc_conn, -			 SmPointer client_data) +                         SmPointer client_data)  { -  EggSMClientXSMP *xsmp = client_data; -  EggSMClient *client = client_data; - -  g_debug ("Received ShutdownCancelled message in state %s", -	   EGG_SM_CLIENT_XSMP_STATE (xsmp)); - -  xsmp->shutting_down = FALSE; - -  if (xsmp->state == XSMP_STATE_SAVE_YOURSELF_DONE) -    { -      /* We've finished interacting and now the SM has agreed to -       * cancel the shutdown. -       */ -      xsmp->state = XSMP_STATE_IDLE; -      egg_sm_client_quit_cancelled (client); -    } -  else if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED) -    { -      /* Hm... ok, so we got a shutdown SaveYourself, which got -       * cancelled, but the application was still interacting, so we -       * didn't tell it yet, and then *another* SaveYourself arrived, -       * which we must still be waiting to tell the app about, except -       * that now that SaveYourself has been cancelled too! Dizzy yet? -       */ -      xsmp->waiting_to_save_myself = FALSE; -      update_pending_events (xsmp); -    } -  else -    { -      g_debug ("Sending SaveYourselfDone(False)"); -      SmcSaveYourselfDone (xsmp->connection, False); - -      if (xsmp->state == XSMP_STATE_INTERACT) +	EggSMClientXSMP *xsmp = client_data; +	EggSMClient *client = client_data; + +	g_debug ("Received ShutdownCancelled message in state %s", +	         EGG_SM_CLIENT_XSMP_STATE (xsmp)); + +	xsmp->shutting_down = FALSE; + +	if (xsmp->state == XSMP_STATE_SAVE_YOURSELF_DONE) +	{ +		/* We've finished interacting and now the SM has agreed to +		 * cancel the shutdown. +		 */ +		xsmp->state = XSMP_STATE_IDLE; +		egg_sm_client_quit_cancelled (client); +	} +	else if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED)  	{ -	  /* The application is currently interacting, so we can't -	   * tell it about the cancellation yet; we will wait until -	   * after it calls egg_sm_client_will_quit(). -	   */ -	  xsmp->state = XSMP_STATE_SHUTDOWN_CANCELLED; +		/* Hm... ok, so we got a shutdown SaveYourself, which got +		 * cancelled, but the application was still interacting, so we +		 * didn't tell it yet, and then *another* SaveYourself arrived, +		 * which we must still be waiting to tell the app about, except +		 * that now that SaveYourself has been cancelled too! Dizzy yet? +		 */ +		xsmp->waiting_to_save_myself = FALSE; +		update_pending_events (xsmp);  	} -      else +	else  	{ -	  /* The shutdown was cancelled before the application got a -	   * chance to interact. -	   */ -	  xsmp->state = XSMP_STATE_IDLE; +		g_debug ("Sending SaveYourselfDone(False)"); +		SmcSaveYourselfDone (xsmp->connection, False); + +		if (xsmp->state == XSMP_STATE_INTERACT) +		{ +			/* The application is currently interacting, so we can't +			 * tell it about the cancellation yet; we will wait until +			 * after it calls egg_sm_client_will_quit(). +			 */ +			xsmp->state = XSMP_STATE_SHUTDOWN_CANCELLED; +		} +		else +		{ +			/* The shutdown was cancelled before the application got a +			 * chance to interact. +			 */ +			xsmp->state = XSMP_STATE_IDLE; +		}  	} -    }  }  /* Utilities */ @@ -1077,30 +1078,30 @@ xsmp_shutdown_cancelled (SmcConn   smc_conn,   */  static GPtrArray *  generate_command (char **argv, const char *client_id, -		  const char *state_file) +                  const char *state_file)  { -  GPtrArray *cmd; -  int i; +	GPtrArray *cmd; +	int i; -  cmd = g_ptr_array_new (); -  g_ptr_array_add (cmd, argv[0]); +	cmd = g_ptr_array_new (); +	g_ptr_array_add (cmd, argv[0]); -  if (client_id) -    { -      g_ptr_array_add (cmd, (char *)"--sm-client-id"); -      g_ptr_array_add (cmd, (char *)client_id); -    } +	if (client_id) +	{ +		g_ptr_array_add (cmd, (char *)"--sm-client-id"); +		g_ptr_array_add (cmd, (char *)client_id); +	} -  if (state_file) -    { -      g_ptr_array_add (cmd, (char *)"--sm-client-state-file"); -      g_ptr_array_add (cmd, (char *)state_file); -    } +	if (state_file) +	{ +		g_ptr_array_add (cmd, (char *)"--sm-client-state-file"); +		g_ptr_array_add (cmd, (char *)state_file); +	} -  for (i = 1; argv[i]; i++) -    g_ptr_array_add (cmd, argv[i]); +	for (i = 1; argv[i]; i++) +		g_ptr_array_add (cmd, argv[i]); -  return cmd; +	return cmd;  }  /* Takes a NULL-terminated list of SmProp * values, created by @@ -1110,55 +1111,55 @@ generate_command (char **argv, const char *client_id,  static void  set_properties (EggSMClientXSMP *xsmp, ...)  { -  GPtrArray *props; -  SmProp *prop; -  va_list ap; -  guint i; - -  props = g_ptr_array_new (); - -  va_start (ap, xsmp); -  while ((prop = va_arg (ap, SmProp *))) -    g_ptr_array_add (props, prop); -  va_end (ap); - -  if (xsmp->connection) -    { -      SmcSetProperties (xsmp->connection, props->len, -			(SmProp **)props->pdata); -    } - -  for (i = 0; i < props->len; i++) -    { -      prop = props->pdata[i]; -      g_free (prop->vals); -      g_free (prop); -    } -  g_ptr_array_free (props, TRUE); +	GPtrArray *props; +	SmProp *prop; +	va_list ap; +	guint i; + +	props = g_ptr_array_new (); + +	va_start (ap, xsmp); +	while ((prop = va_arg (ap, SmProp *))) +		g_ptr_array_add (props, prop); +	va_end (ap); + +	if (xsmp->connection) +	{ +		SmcSetProperties (xsmp->connection, props->len, +		                  (SmProp **)props->pdata); +	} + +	for (i = 0; i < props->len; i++) +	{ +		prop = props->pdata[i]; +		g_free (prop->vals); +		g_free (prop); +	} +	g_ptr_array_free (props, TRUE);  }  /* Takes a NULL-terminated list of property names and deletes them. */  static void  delete_properties (EggSMClientXSMP *xsmp, ...)  { -  GPtrArray *props; -  char *prop; -  va_list ap; +	GPtrArray *props; +	char *prop; +	va_list ap; -  if (!xsmp->connection) -    return; +	if (!xsmp->connection) +		return; -  props = g_ptr_array_new (); +	props = g_ptr_array_new (); -  va_start (ap, xsmp); -  while ((prop = va_arg (ap, char *))) -    g_ptr_array_add (props, prop); -  va_end (ap); +	va_start (ap, xsmp); +	while ((prop = va_arg (ap, char *))) +		g_ptr_array_add (props, prop); +	va_end (ap); -  SmcDeleteProperties (xsmp->connection, props->len, -		       (char **)props->pdata); +	SmcDeleteProperties (xsmp->connection, props->len, +	                     (char **)props->pdata); -  g_ptr_array_free (props, TRUE); +	g_ptr_array_free (props, TRUE);  }  /* Takes an array of strings and creates a LISTofARRAY8 property. The @@ -1166,34 +1167,34 @@ delete_properties (EggSMClientXSMP *xsmp, ...)   * until you're done with the SmProp.   */  static SmProp * -array_prop (const char *name, ...)  +array_prop (const char *name, ...)  { -  SmProp *prop; -  SmPropValue pv; -  GArray *vals; -  char *value; -  va_list ap; +	SmProp *prop; +	SmPropValue pv; +	GArray *vals; +	char *value; +	va_list ap; -  prop = g_new (SmProp, 1); -  prop->name = (char *)name; -  prop->type = (char *)SmLISTofARRAY8; +	prop = g_new (SmProp, 1); +	prop->name = (char *)name; +	prop->type = (char *)SmLISTofARRAY8; -  vals = g_array_new (FALSE, FALSE, sizeof (SmPropValue)); +	vals = g_array_new (FALSE, FALSE, sizeof (SmPropValue)); -  va_start (ap, name); -  while ((value = va_arg (ap, char *))) -    { -      pv.length = strlen (value); -      pv.value = value; -      g_array_append_val (vals, pv); -    } +	va_start (ap, name); +	while ((value = va_arg (ap, char *))) +	{ +		pv.length = strlen (value); +		pv.value = value; +		g_array_append_val (vals, pv); +	} -  prop->num_vals = vals->len; -  prop->vals = (SmPropValue *)vals->data; +	prop->num_vals = vals->len; +	prop->vals = (SmPropValue *)vals->data; -  g_array_free (vals, FALSE); +	g_array_free (vals, FALSE); -  return prop; +	return prop;  }  /* Takes a GPtrArray of strings and creates a LISTofARRAY8 property. @@ -1203,30 +1204,30 @@ array_prop (const char *name, ...)  static SmProp *  ptrarray_prop (const char *name, GPtrArray *values)  { -  SmProp *prop; -  SmPropValue pv; -  GArray *vals; -  guint i; +	SmProp *prop; +	SmPropValue pv; +	GArray *vals; +	guint i; -  prop = g_new (SmProp, 1); -  prop->name = (char *)name; -  prop->type = (char *)SmLISTofARRAY8; +	prop = g_new (SmProp, 1); +	prop->name = (char *)name; +	prop->type = (char *)SmLISTofARRAY8; -  vals = g_array_new (FALSE, FALSE, sizeof (SmPropValue)); +	vals = g_array_new (FALSE, FALSE, sizeof (SmPropValue)); -  for (i = 0; i < values->len; i++) -    { -      pv.length = strlen (values->pdata[i]); -      pv.value = values->pdata[i]; -      g_array_append_val (vals, pv); -    } +	for (i = 0; i < values->len; i++) +	{ +		pv.length = strlen (values->pdata[i]); +		pv.value = values->pdata[i]; +		g_array_append_val (vals, pv); +	} -  prop->num_vals = vals->len; -  prop->vals = (SmPropValue *)vals->data; +	prop->num_vals = vals->len; +	prop->vals = (SmPropValue *)vals->data; -  g_array_free (vals, FALSE); +	g_array_free (vals, FALSE); -  return prop; +	return prop;  }  /* Takes a string and creates an ARRAY8 property. The string is @@ -1236,46 +1237,46 @@ ptrarray_prop (const char *name, GPtrArray *values)  static SmProp *  string_prop (const char *name, const char *value)  { -  SmProp *prop; +	SmProp *prop; -  prop = g_new (SmProp, 1); -  prop->name = (char *)name; -  prop->type = (char *)SmARRAY8; +	prop = g_new (SmProp, 1); +	prop->name = (char *)name; +	prop->type = (char *)SmARRAY8; -  prop->num_vals = 1; -  prop->vals = g_new (SmPropValue, 1); +	prop->num_vals = 1; +	prop->vals = g_new (SmPropValue, 1); -  prop->vals[0].length = strlen (value); -  prop->vals[0].value = (char *)value; +	prop->vals[0].length = strlen (value); +	prop->vals[0].value = (char *)value; -  return prop; +	return prop;  }  /* Takes a char and creates a CARD8 property. */  static SmProp *  card8_prop (const char *name, unsigned char value)  { -  SmProp *prop; -  char *card8val; +	SmProp *prop; +	char *card8val; -  /* To avoid having to allocate and free prop->vals[0], we cheat and -   * make vals a 2-element-long array and then use the second element -   * to store value. -   */ +	/* To avoid having to allocate and free prop->vals[0], we cheat and +	 * make vals a 2-element-long array and then use the second element +	 * to store value. +	 */ -  prop = g_new (SmProp, 1); -  prop->name = (char *)name; -  prop->type = (char *)SmCARD8; +	prop = g_new (SmProp, 1); +	prop->name = (char *)name; +	prop->type = (char *)SmCARD8; -  prop->num_vals = 1; -  prop->vals = g_new (SmPropValue, 2); -  card8val = (char *)(&prop->vals[1]); -  card8val[0] = value; +	prop->num_vals = 1; +	prop->vals = g_new (SmPropValue, 2); +	card8val = (char *)(&prop->vals[1]); +	card8val[0] = value; -  prop->vals[0].length = 1; -  prop->vals[0].value = card8val; +	prop->vals[0].length = 1; +	prop->vals[0].value = card8val; -  return prop; +	return prop;  }  /* ICE code. This makes no effort to play nice with anyone else trying @@ -1292,105 +1293,105 @@ card8_prop (const char *name, unsigned char value)  #include <fcntl.h>  static void        ice_error_handler    (IceConn        ice_conn, -					 Bool           swap, -					 int            offending_minor_opcode, -					 unsigned long  offending_sequence, -					 int            error_class, -					 int            severity, -					 IcePointer     values); +        Bool           swap, +        int            offending_minor_opcode, +        unsigned long  offending_sequence, +        int            error_class, +        int            severity, +        IcePointer     values);  static void        ice_io_error_handler (IceConn        ice_conn);  static void        ice_connection_watch (IceConn        ice_conn, -					 IcePointer     client_data, -					 Bool           opening, -					 IcePointer    *watch_data); +        IcePointer     client_data, +        Bool           opening, +        IcePointer    *watch_data);  static void  ice_init (void)  { -  IceSetIOErrorHandler (ice_io_error_handler); -  IceSetErrorHandler (ice_error_handler); -  IceAddConnectionWatch (ice_connection_watch, NULL); +	IceSetIOErrorHandler (ice_io_error_handler); +	IceSetErrorHandler (ice_error_handler); +	IceAddConnectionWatch (ice_connection_watch, NULL);  }  static gboolean  process_ice_messages (IceConn ice_conn)  { -  IceProcessMessagesStatus status; +	IceProcessMessagesStatus status; -  gdk_threads_enter (); -  status = IceProcessMessages (ice_conn, NULL, NULL); -  gdk_threads_leave (); +	gdk_threads_enter (); +	status = IceProcessMessages (ice_conn, NULL, NULL); +	gdk_threads_leave (); -  switch (status) -    { -    case IceProcessMessagesSuccess: -      return TRUE; +	switch (status) +	{ +	case IceProcessMessagesSuccess: +		return TRUE; -    case IceProcessMessagesIOError: -      sm_client_xsmp_disconnect (IceGetConnectionContext (ice_conn)); -      return FALSE; +	case IceProcessMessagesIOError: +		sm_client_xsmp_disconnect (IceGetConnectionContext (ice_conn)); +		return FALSE; -    case IceProcessMessagesConnectionClosed: -      return FALSE; +	case IceProcessMessagesConnectionClosed: +		return FALSE; -    default: -      g_assert_not_reached (); -    } +	default: +		g_assert_not_reached (); +	}  }  static gboolean  ice_iochannel_watch (GIOChannel   *channel, -		     GIOCondition  condition, -		     gpointer      client_data) +                     GIOCondition  condition, +                     gpointer      client_data)  { -  return process_ice_messages (client_data); +	return process_ice_messages (client_data);  }  static void  ice_connection_watch (IceConn     ice_conn, -		      IcePointer  client_data, -		      Bool        opening, -		      IcePointer *watch_data) +                      IcePointer  client_data, +                      Bool        opening, +                      IcePointer *watch_data)  { -  guint watch_id; - -  if (opening) -    { -      GIOChannel *channel; -      int fd = IceConnectionNumber (ice_conn); - -      fcntl (fd, F_SETFD, fcntl (fd, F_GETFD, 0) | FD_CLOEXEC); -      channel = g_io_channel_unix_new (fd); -      watch_id = g_io_add_watch (channel, G_IO_IN | G_IO_ERR, -				 ice_iochannel_watch, ice_conn); -      g_io_channel_unref (channel); - -      *watch_data = GUINT_TO_POINTER (watch_id); -    } -  else -    { -      watch_id = GPOINTER_TO_UINT (*watch_data); -      g_source_remove (watch_id); -    } +	guint watch_id; + +	if (opening) +	{ +		GIOChannel *channel; +		int fd = IceConnectionNumber (ice_conn); + +		fcntl (fd, F_SETFD, fcntl (fd, F_GETFD, 0) | FD_CLOEXEC); +		channel = g_io_channel_unix_new (fd); +		watch_id = g_io_add_watch (channel, G_IO_IN | G_IO_ERR, +		                           ice_iochannel_watch, ice_conn); +		g_io_channel_unref (channel); + +		*watch_data = GUINT_TO_POINTER (watch_id); +	} +	else +	{ +		watch_id = GPOINTER_TO_UINT (*watch_data); +		g_source_remove (watch_id); +	}  }  static void  ice_error_handler (IceConn       ice_conn, -		   Bool          swap, -		   int           offending_minor_opcode, -		   unsigned long offending_sequence, -		   int           error_class, -		   int           severity, -		   IcePointer    values) +                   Bool          swap, +                   int           offending_minor_opcode, +                   unsigned long offending_sequence, +                   int           error_class, +                   int           severity, +                   IcePointer    values)  { -  /* Do nothing */ -}  +	/* Do nothing */ +}  static void  ice_io_error_handler (IceConn ice_conn)  { -  /* Do nothing */ -}  +	/* Do nothing */ +}  static void  smc_error_handler (SmcConn       smc_conn, @@ -1401,5 +1402,5 @@ smc_error_handler (SmcConn       smc_conn,                     int           severity,                     SmPointer     values)  { -  /* Do nothing */ +	/* Do nothing */  } diff --git a/src/eggsmclient.c b/src/eggsmclient.c index 31906b6..a347eae 100644 --- a/src/eggsmclient.c +++ b/src/eggsmclient.c @@ -26,22 +26,24 @@  #include "eggsmclient-private.h"  static void egg_sm_client_debug_handler (const char *log_domain, -					 GLogLevelFlags log_level, -					 const char *message, -					 gpointer user_data); - -enum { -  SAVE_STATE, -  QUIT_REQUESTED, -  QUIT_CANCELLED, -  QUIT, -  LAST_SIGNAL +        GLogLevelFlags log_level, +        const char *message, +        gpointer user_data); + +enum +{ +    SAVE_STATE, +    QUIT_REQUESTED, +    QUIT_CANCELLED, +    QUIT, +    LAST_SIGNAL  };  static guint signals[LAST_SIGNAL]; -struct _EggSMClientPrivate { -  GKeyFile *state_file; +struct _EggSMClientPrivate +{ +	GKeyFile *state_file;  };  #define EGG_SM_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), EGG_TYPE_SM_CLIENT, EggSMClientPrivate)) @@ -54,125 +56,125 @@ static EggSMClientMode global_client_mode = EGG_SM_CLIENT_MODE_NORMAL;  static void  egg_sm_client_init (EggSMClient *client)  { -  ; +	;  }  static void  egg_sm_client_class_init (EggSMClientClass *klass)  { -  GObjectClass *object_class = G_OBJECT_CLASS (klass); - -  g_type_class_add_private (klass, sizeof (EggSMClientPrivate)); - -  /** -   * EggSMClient::save_state: -   * @client: the client -   * @state_file: a #GKeyFile to save state information into -   * -   * Emitted when the session manager has requested that the -   * application save information about its current state. The -   * application should save its state into @state_file, and then the -   * session manager may then restart the application in a future -   * session and tell it to initialize itself from that state. -   * -   * You should not save any data into @state_file's "start group" -   * (ie, the %NULL group). Instead, applications should save their -   * data into groups with names that start with the application name, -   * and libraries that connect to this signal should save their data -   * into groups with names that start with the library name. -   * -   * Alternatively, rather than (or in addition to) using @state_file, -   * the application can save its state by calling -   * egg_sm_client_set_restart_command() during the processing of this -   * signal (eg, to include a list of files to open). -   **/ -  signals[SAVE_STATE] = -    g_signal_new ("save_state", -                  G_OBJECT_CLASS_TYPE (object_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (EggSMClientClass, save_state), -                  NULL, NULL, -                  g_cclosure_marshal_VOID__POINTER, -                  G_TYPE_NONE, -                  1, G_TYPE_POINTER); - -  /** -   * EggSMClient::quit_requested: -   * @client: the client -   * -   * Emitted when the session manager requests that the application -   * exit (generally because the user is logging out). The application -   * should decide whether or not it is willing to quit (perhaps after -   * asking the user what to do with documents that have unsaved -   * changes) and then call egg_sm_client_will_quit(), passing %TRUE -   * or %FALSE to give its answer to the session manager. (It does not -   * need to give an answer before returning from the signal handler; -   * it can interact with the user asynchronously and then give its -   * answer later on.) If the application does not connect to this -   * signal, then #EggSMClient will automatically return %TRUE on its -   * behalf. -   * -   * The application should not save its session state as part of -   * handling this signal; if the user has requested that the session -   * be saved when logging out, then ::save_state will be emitted -   * separately. -   *  -   * If the application agrees to quit, it should then wait for either -   * the ::quit_cancelled or ::quit signals to be emitted. -   **/ -  signals[QUIT_REQUESTED] = -    g_signal_new ("quit_requested", -                  G_OBJECT_CLASS_TYPE (object_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (EggSMClientClass, quit_requested), -                  NULL, NULL, -                  g_cclosure_marshal_VOID__VOID, -                  G_TYPE_NONE, -                  0); - -  /** -   * EggSMClient::quit_cancelled: -   * @client: the client -   * -   * Emitted when the session manager decides to cancel a logout after -   * the application has already agreed to quit. After receiving this -   * signal, the application can go back to what it was doing before -   * receiving the ::quit_requested signal. -   **/ -  signals[QUIT_CANCELLED] = -    g_signal_new ("quit_cancelled", -                  G_OBJECT_CLASS_TYPE (object_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (EggSMClientClass, quit_cancelled), -                  NULL, NULL, -                  g_cclosure_marshal_VOID__VOID, -                  G_TYPE_NONE, -                  0); - -  /** -   * EggSMClient::quit: -   * @client: the client -   * -   * Emitted when the session manager wants the application to quit -   * (generally because the user is logging out). The application -   * should exit as soon as possible after receiving this signal; if -   * it does not, the session manager may choose to forcibly kill it. -   * -   * Normally a GUI application would only be sent a ::quit if it -   * agreed to quit in response to a ::quit_requested signal. However, -   * this is not guaranteed; in some situations the session manager -   * may decide to end the session without giving applications a -   * chance to object. -   **/ -  signals[QUIT] = -    g_signal_new ("quit", -                  G_OBJECT_CLASS_TYPE (object_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (EggSMClientClass, quit), -                  NULL, NULL, -                  g_cclosure_marshal_VOID__VOID, -                  G_TYPE_NONE, -                  0); +	GObjectClass *object_class = G_OBJECT_CLASS (klass); + +	g_type_class_add_private (klass, sizeof (EggSMClientPrivate)); + +	/** +	 * EggSMClient::save_state: +	 * @client: the client +	 * @state_file: a #GKeyFile to save state information into +	 * +	 * Emitted when the session manager has requested that the +	 * application save information about its current state. The +	 * application should save its state into @state_file, and then the +	 * session manager may then restart the application in a future +	 * session and tell it to initialize itself from that state. +	 * +	 * You should not save any data into @state_file's "start group" +	 * (ie, the %NULL group). Instead, applications should save their +	 * data into groups with names that start with the application name, +	 * and libraries that connect to this signal should save their data +	 * into groups with names that start with the library name. +	 * +	 * Alternatively, rather than (or in addition to) using @state_file, +	 * the application can save its state by calling +	 * egg_sm_client_set_restart_command() during the processing of this +	 * signal (eg, to include a list of files to open). +	 **/ +	signals[SAVE_STATE] = +	    g_signal_new ("save_state", +	                  G_OBJECT_CLASS_TYPE (object_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (EggSMClientClass, save_state), +	                  NULL, NULL, +	                  g_cclosure_marshal_VOID__POINTER, +	                  G_TYPE_NONE, +	                  1, G_TYPE_POINTER); + +	/** +	 * EggSMClient::quit_requested: +	 * @client: the client +	 * +	 * Emitted when the session manager requests that the application +	 * exit (generally because the user is logging out). The application +	 * should decide whether or not it is willing to quit (perhaps after +	 * asking the user what to do with documents that have unsaved +	 * changes) and then call egg_sm_client_will_quit(), passing %TRUE +	 * or %FALSE to give its answer to the session manager. (It does not +	 * need to give an answer before returning from the signal handler; +	 * it can interact with the user asynchronously and then give its +	 * answer later on.) If the application does not connect to this +	 * signal, then #EggSMClient will automatically return %TRUE on its +	 * behalf. +	 * +	 * The application should not save its session state as part of +	 * handling this signal; if the user has requested that the session +	 * be saved when logging out, then ::save_state will be emitted +	 * separately. +	 * +	 * If the application agrees to quit, it should then wait for either +	 * the ::quit_cancelled or ::quit signals to be emitted. +	 **/ +	signals[QUIT_REQUESTED] = +	    g_signal_new ("quit_requested", +	                  G_OBJECT_CLASS_TYPE (object_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (EggSMClientClass, quit_requested), +	                  NULL, NULL, +	                  g_cclosure_marshal_VOID__VOID, +	                  G_TYPE_NONE, +	                  0); + +	/** +	 * EggSMClient::quit_cancelled: +	 * @client: the client +	 * +	 * Emitted when the session manager decides to cancel a logout after +	 * the application has already agreed to quit. After receiving this +	 * signal, the application can go back to what it was doing before +	 * receiving the ::quit_requested signal. +	 **/ +	signals[QUIT_CANCELLED] = +	    g_signal_new ("quit_cancelled", +	                  G_OBJECT_CLASS_TYPE (object_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (EggSMClientClass, quit_cancelled), +	                  NULL, NULL, +	                  g_cclosure_marshal_VOID__VOID, +	                  G_TYPE_NONE, +	                  0); + +	/** +	 * EggSMClient::quit: +	 * @client: the client +	 * +	 * Emitted when the session manager wants the application to quit +	 * (generally because the user is logging out). The application +	 * should exit as soon as possible after receiving this signal; if +	 * it does not, the session manager may choose to forcibly kill it. +	 * +	 * Normally a GUI application would only be sent a ::quit if it +	 * agreed to quit in response to a ::quit_requested signal. However, +	 * this is not guaranteed; in some situations the session manager +	 * may decide to end the session without giving applications a +	 * chance to object. +	 **/ +	signals[QUIT] = +	    g_signal_new ("quit", +	                  G_OBJECT_CLASS_TYPE (object_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (EggSMClientClass, quit), +	                  NULL, NULL, +	                  g_cclosure_marshal_VOID__VOID, +	                  G_TYPE_NONE, +	                  0);  }  static gboolean sm_client_disable = FALSE; @@ -182,29 +184,29 @@ static char *sm_config_prefix = NULL;  static gboolean  sm_client_post_parse_func (GOptionContext  *context, -			   GOptionGroup    *group, -			   gpointer         data, -			   GError         **error) +                           GOptionGroup    *group, +                           gpointer         data, +                           GError         **error)  { -  EggSMClient *client = egg_sm_client_get (); +	EggSMClient *client = egg_sm_client_get (); -  if (sm_client_id == NULL) -    { -      const gchar *desktop_autostart_id; +	if (sm_client_id == NULL) +	{ +		const gchar *desktop_autostart_id; -      desktop_autostart_id = g_getenv ("DESKTOP_AUTOSTART_ID"); +		desktop_autostart_id = g_getenv ("DESKTOP_AUTOSTART_ID"); -      if (desktop_autostart_id != NULL) -        sm_client_id = g_strdup (desktop_autostart_id); -    } +		if (desktop_autostart_id != NULL) +			sm_client_id = g_strdup (desktop_autostart_id); +	} -  /* Unset DESKTOP_AUTOSTART_ID in order to avoid child processes to -   * use the same client id. */ -  g_unsetenv ("DESKTOP_AUTOSTART_ID"); +	/* Unset DESKTOP_AUTOSTART_ID in order to avoid child processes to +	 * use the same client id. */ +	g_unsetenv ("DESKTOP_AUTOSTART_ID"); -  if (EGG_SM_CLIENT_GET_CLASS (client)->startup) -    EGG_SM_CLIENT_GET_CLASS (client)->startup (client, sm_client_id); -  return TRUE; +	if (EGG_SM_CLIENT_GET_CLASS (client)->startup) +		EGG_SM_CLIENT_GET_CLASS (client)->startup (client, sm_client_id); +	return TRUE;  }  /** @@ -219,43 +221,54 @@ sm_client_post_parse_func (GOptionContext  *context,  GOptionGroup *  egg_sm_client_get_option_group (void)  { -  const GOptionEntry entries[] = { -    { "sm-client-disable", 0, 0, -      G_OPTION_ARG_NONE, &sm_client_disable, -      N_("Disable connection to session manager"), NULL }, -    { "sm-client-state-file", 0, 0, -      G_OPTION_ARG_FILENAME, &sm_client_state_file, -      N_("Specify file containing saved configuration"), N_("FILE") }, -    { "sm-client-id", 0, 0, -      G_OPTION_ARG_STRING, &sm_client_id, -      N_("Specify session management ID"), N_("ID") }, -    /* MateClient compatibility option */ -    { "sm-disable", 0, G_OPTION_FLAG_HIDDEN, -      G_OPTION_ARG_NONE, &sm_client_disable, -      NULL, NULL }, -    /* MateClient compatibility option. This is a dummy option that only -     * exists so that sessions saved by apps with MateClient can be restored -     * later when they've switched to EggSMClient. See bug #575308. -     */ -    { "sm-config-prefix", 0, G_OPTION_FLAG_HIDDEN, -      G_OPTION_ARG_STRING, &sm_config_prefix, -      NULL, NULL }, -    { NULL } -  }; -  GOptionGroup *group; - -  /* Use our own debug handler for the "EggSMClient" domain. */ -  g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, -		     egg_sm_client_debug_handler, NULL); - -  group = g_option_group_new ("sm-client", -			      _("Session management options:"), -			      _("Show session management options"), -			      NULL, NULL); -  g_option_group_add_entries (group, entries); -  g_option_group_set_parse_hooks (group, NULL, sm_client_post_parse_func); - -  return group; +	const GOptionEntry entries[] = +	{ +		{ +			"sm-client-disable", 0, 0, +			G_OPTION_ARG_NONE, &sm_client_disable, +			N_("Disable connection to session manager"), NULL +		}, +		{ +			"sm-client-state-file", 0, 0, +			G_OPTION_ARG_FILENAME, &sm_client_state_file, +			N_("Specify file containing saved configuration"), N_("FILE") +		}, +		{ +			"sm-client-id", 0, 0, +			G_OPTION_ARG_STRING, &sm_client_id, +			N_("Specify session management ID"), N_("ID") +		}, +		/* MateClient compatibility option */ +		{ +			"sm-disable", 0, G_OPTION_FLAG_HIDDEN, +			G_OPTION_ARG_NONE, &sm_client_disable, +			NULL, NULL +		}, +		/* MateClient compatibility option. This is a dummy option that only +		 * exists so that sessions saved by apps with MateClient can be restored +		 * later when they've switched to EggSMClient. See bug #575308. +		 */ +		{ +			"sm-config-prefix", 0, G_OPTION_FLAG_HIDDEN, +			G_OPTION_ARG_STRING, &sm_config_prefix, +			NULL, NULL +		}, +		{ NULL } +	}; +	GOptionGroup *group; + +	/* Use our own debug handler for the "EggSMClient" domain. */ +	g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, +	                   egg_sm_client_debug_handler, NULL); + +	group = g_option_group_new ("sm-client", +	                            _("Session management options:"), +	                            _("Show session management options"), +	                            NULL, NULL); +	g_option_group_add_entries (group, entries); +	g_option_group_set_parse_hooks (group, NULL, sm_client_post_parse_func); + +	return group;  }  /** @@ -282,7 +295,7 @@ egg_sm_client_get_option_group (void)  void  egg_sm_client_set_mode (EggSMClientMode mode)  { -  global_client_mode = mode; +	global_client_mode = mode;  }  /** @@ -296,7 +309,7 @@ egg_sm_client_set_mode (EggSMClientMode mode)  EggSMClientMode  egg_sm_client_get_mode (void)  { -  return global_client_mode; +	return global_client_mode;  }  /** @@ -315,38 +328,38 @@ egg_sm_client_get_mode (void)  EggSMClient *  egg_sm_client_get (void)  { -  if (!global_client) -    { -      if (global_client_mode != EGG_SM_CLIENT_MODE_DISABLED && -	  !sm_client_disable) +	if (!global_client)  	{ +		if (global_client_mode != EGG_SM_CLIENT_MODE_DISABLED && +		        !sm_client_disable) +		{  #if defined (GDK_WINDOWING_WIN32) -	  global_client = egg_sm_client_win32_new (); +			global_client = egg_sm_client_win32_new ();  #elif defined (GDK_WINDOWING_QUARTZ) -	  global_client = egg_sm_client_osx_new (); +			global_client = egg_sm_client_osx_new ();  #else -	  /* If both D-Bus and XSMP are compiled in, try XSMP first -	   * (since it supports state saving) and fall back to D-Bus -	   * if XSMP isn't available. -	   */ +			/* If both D-Bus and XSMP are compiled in, try XSMP first +			 * (since it supports state saving) and fall back to D-Bus +			 * if XSMP isn't available. +			 */  # ifdef EGG_SM_CLIENT_BACKEND_XSMP -	  global_client = egg_sm_client_xsmp_new (); +			global_client = egg_sm_client_xsmp_new ();  # endif  # ifdef EGG_SM_CLIENT_BACKEND_DBUS -	  if (!global_client) -	    global_client = egg_sm_client_dbus_new (); +			if (!global_client) +				global_client = egg_sm_client_dbus_new ();  # endif  #endif -	} +		} -      /* Fallback: create a dummy client, so that callers don't have -       * to worry about a %NULL return value. -       */ -      if (!global_client) -	global_client = g_object_new (EGG_TYPE_SM_CLIENT, NULL); -    } +		/* Fallback: create a dummy client, so that callers don't have +		 * to worry about a %NULL return value. +		 */ +		if (!global_client) +			global_client = g_object_new (EGG_TYPE_SM_CLIENT, NULL); +	} -  return global_client; +	return global_client;  }  /** @@ -363,9 +376,9 @@ egg_sm_client_get (void)  gboolean  egg_sm_client_is_resumed (EggSMClient *client)  { -  g_return_val_if_fail (client == global_client, FALSE); +	g_return_val_if_fail (client == global_client, FALSE); -  return sm_client_state_file != NULL; +	return sm_client_state_file != NULL;  }  /** @@ -390,34 +403,34 @@ egg_sm_client_is_resumed (EggSMClient *client)  GKeyFile *  egg_sm_client_get_state_file (EggSMClient *client)  { -  EggSMClientPrivate *priv = EGG_SM_CLIENT_GET_PRIVATE (client); -  char *state_file_path; -  GError *err = NULL; - -  g_return_val_if_fail (client == global_client, NULL); - -  if (!sm_client_state_file) -    return NULL; -  if (priv->state_file) -    return priv->state_file; - -  if (!strncmp (sm_client_state_file, "file://", 7)) -    state_file_path = g_filename_from_uri (sm_client_state_file, NULL, NULL); -  else -    state_file_path = g_strdup (sm_client_state_file); - -  priv->state_file = g_key_file_new (); -  if (!g_key_file_load_from_file (priv->state_file, state_file_path, 0, &err)) -    { -      g_warning ("Could not load SM state file '%s': %s", -		 sm_client_state_file, err->message); -      g_clear_error (&err); -      g_key_file_free (priv->state_file); -      priv->state_file = NULL; -    } - -  g_free (state_file_path); -  return priv->state_file; +	EggSMClientPrivate *priv = EGG_SM_CLIENT_GET_PRIVATE (client); +	char *state_file_path; +	GError *err = NULL; + +	g_return_val_if_fail (client == global_client, NULL); + +	if (!sm_client_state_file) +		return NULL; +	if (priv->state_file) +		return priv->state_file; + +	if (!strncmp (sm_client_state_file, "file://", 7)) +		state_file_path = g_filename_from_uri (sm_client_state_file, NULL, NULL); +	else +		state_file_path = g_strdup (sm_client_state_file); + +	priv->state_file = g_key_file_new (); +	if (!g_key_file_load_from_file (priv->state_file, state_file_path, 0, &err)) +	{ +		g_warning ("Could not load SM state file '%s': %s", +		           sm_client_state_file, err->message); +		g_clear_error (&err); +		g_key_file_free (priv->state_file); +		priv->state_file = NULL; +	} + +	g_free (state_file_path); +	return priv->state_file;  }  /** @@ -435,13 +448,13 @@ egg_sm_client_get_state_file (EggSMClient *client)   **/  void  egg_sm_client_set_restart_command (EggSMClient  *client, -				   int           argc, -				   const char  **argv) +                                   int           argc, +                                   const char  **argv)  { -  g_return_if_fail (EGG_IS_SM_CLIENT (client)); +	g_return_if_fail (EGG_IS_SM_CLIENT (client)); -  if (EGG_SM_CLIENT_GET_CLASS (client)->set_restart_command) -    EGG_SM_CLIENT_GET_CLASS (client)->set_restart_command (client, argc, argv); +	if (EGG_SM_CLIENT_GET_CLASS (client)->set_restart_command) +		EGG_SM_CLIENT_GET_CLASS (client)->set_restart_command (client, argc, argv);  }  /** @@ -451,18 +464,18 @@ egg_sm_client_set_restart_command (EggSMClient  *client,   * @argv: argument vector   *   * Sets the command used to discard a custom state file if using - * egg_sm_client_set_restart_command(), which must be called before  + * egg_sm_client_set_restart_command(), which must be called before   * using this function.   **/  void  egg_sm_client_set_discard_command (EggSMClient  *client, -				   int           argc, -				   const char  **argv) +                                   int           argc, +                                   const char  **argv)  { -  g_return_if_fail (EGG_IS_SM_CLIENT (client)); +	g_return_if_fail (EGG_IS_SM_CLIENT (client)); -  if (EGG_SM_CLIENT_GET_CLASS (client)->set_discard_command) -    EGG_SM_CLIENT_GET_CLASS (client)->set_discard_command (client, argc, argv); +	if (EGG_SM_CLIENT_GET_CLASS (client)->set_discard_command) +		EGG_SM_CLIENT_GET_CLASS (client)->set_discard_command (client, argc, argv);  }  /** @@ -485,12 +498,12 @@ egg_sm_client_set_discard_command (EggSMClient  *client,   **/  void  egg_sm_client_will_quit (EggSMClient *client, -			 gboolean     will_quit) +                         gboolean     will_quit)  { -  g_return_if_fail (EGG_IS_SM_CLIENT (client)); +	g_return_if_fail (EGG_IS_SM_CLIENT (client)); -  if (EGG_SM_CLIENT_GET_CLASS (client)->will_quit) -    EGG_SM_CLIENT_GET_CLASS (client)->will_quit (client, will_quit); +	if (EGG_SM_CLIENT_GET_CLASS (client)->will_quit) +		EGG_SM_CLIENT_GET_CLASS (client)->will_quit (client, will_quit);  }  /** @@ -511,19 +524,19 @@ egg_sm_client_will_quit (EggSMClient *client,   **/  gboolean  egg_sm_client_end_session (EggSMClientEndStyle  style, -			   gboolean             request_confirmation) +                           gboolean             request_confirmation)  { -  EggSMClient *client = egg_sm_client_get (); +	EggSMClient *client = egg_sm_client_get (); -  g_return_val_if_fail (EGG_IS_SM_CLIENT (client), FALSE); +	g_return_val_if_fail (EGG_IS_SM_CLIENT (client), FALSE); -  if (EGG_SM_CLIENT_GET_CLASS (client)->end_session) -    { -      return EGG_SM_CLIENT_GET_CLASS (client)->end_session (client, style, -							    request_confirmation); -    } -  else -    return FALSE; +	if (EGG_SM_CLIENT_GET_CLASS (client)->end_session) +	{ +		return EGG_SM_CLIENT_GET_CLASS (client)->end_session (client, style, +		        request_confirmation); +	} +	else +		return FALSE;  }  /* Signal-emitting callbacks from platform-specific code */ @@ -531,80 +544,80 @@ egg_sm_client_end_session (EggSMClientEndStyle  style,  GKeyFile *  egg_sm_client_save_state (EggSMClient *client)  { -  GKeyFile *state_file; -  char *group; - -  g_return_val_if_fail (client == global_client, NULL); - -  state_file = g_key_file_new (); - -  g_debug ("Emitting save_state"); -  g_signal_emit (client, signals[SAVE_STATE], 0, state_file); -  g_debug ("Done emitting save_state"); - -  group = g_key_file_get_start_group (state_file); -  if (group) -    { -      g_free (group); -      return state_file; -    } -  else -    { -      g_key_file_free (state_file); -      return NULL; -    } +	GKeyFile *state_file; +	char *group; + +	g_return_val_if_fail (client == global_client, NULL); + +	state_file = g_key_file_new (); + +	g_debug ("Emitting save_state"); +	g_signal_emit (client, signals[SAVE_STATE], 0, state_file); +	g_debug ("Done emitting save_state"); + +	group = g_key_file_get_start_group (state_file); +	if (group) +	{ +		g_free (group); +		return state_file; +	} +	else +	{ +		g_key_file_free (state_file); +		return NULL; +	}  }  void  egg_sm_client_quit_requested (EggSMClient *client)  { -  g_return_if_fail (client == global_client); - -  if (!g_signal_has_handler_pending (client, signals[QUIT_REQUESTED], 0, FALSE)) -    { -      g_debug ("Not emitting quit_requested because no one is listening"); -      egg_sm_client_will_quit (client, TRUE); -      return; -    } - -  g_debug ("Emitting quit_requested"); -  g_signal_emit (client, signals[QUIT_REQUESTED], 0); -  g_debug ("Done emitting quit_requested"); +	g_return_if_fail (client == global_client); + +	if (!g_signal_has_handler_pending (client, signals[QUIT_REQUESTED], 0, FALSE)) +	{ +		g_debug ("Not emitting quit_requested because no one is listening"); +		egg_sm_client_will_quit (client, TRUE); +		return; +	} + +	g_debug ("Emitting quit_requested"); +	g_signal_emit (client, signals[QUIT_REQUESTED], 0); +	g_debug ("Done emitting quit_requested");  }  void  egg_sm_client_quit_cancelled (EggSMClient *client)  { -  g_return_if_fail (client == global_client); +	g_return_if_fail (client == global_client); -  g_debug ("Emitting quit_cancelled"); -  g_signal_emit (client, signals[QUIT_CANCELLED], 0); -  g_debug ("Done emitting quit_cancelled"); +	g_debug ("Emitting quit_cancelled"); +	g_signal_emit (client, signals[QUIT_CANCELLED], 0); +	g_debug ("Done emitting quit_cancelled");  }  void  egg_sm_client_quit (EggSMClient *client)  { -  g_return_if_fail (client == global_client); +	g_return_if_fail (client == global_client); -  g_debug ("Emitting quit"); -  g_signal_emit (client, signals[QUIT], 0); -  g_debug ("Done emitting quit"); +	g_debug ("Emitting quit"); +	g_signal_emit (client, signals[QUIT], 0); +	g_debug ("Done emitting quit"); -  /* FIXME: should we just call gtk_main_quit() here? */ +	/* FIXME: should we just call gtk_main_quit() here? */  }  static void  egg_sm_client_debug_handler (const char *log_domain, -			     GLogLevelFlags log_level, -			     const char *message, -			     gpointer user_data) +                             GLogLevelFlags log_level, +                             const char *message, +                             gpointer user_data)  { -  static int debug = -1; +	static int debug = -1; -  if (debug < 0) -    debug = (g_getenv ("EGG_SM_CLIENT_DEBUG") != NULL); +	if (debug < 0) +		debug = (g_getenv ("EGG_SM_CLIENT_DEBUG") != NULL); -  if (debug) -    g_log_default_handler (log_domain, log_level, message, NULL); +	if (debug) +		g_log_default_handler (log_domain, log_level, message, NULL);  } diff --git a/src/eggsmclient.h b/src/eggsmclient.h index 6de47b6..2916036 100644 --- a/src/eggsmclient.h +++ b/src/eggsmclient.h @@ -35,57 +35,59 @@ typedef struct _EggSMClient        EggSMClient;  typedef struct _EggSMClientClass   EggSMClientClass;  typedef struct _EggSMClientPrivate EggSMClientPrivate; -typedef enum { -  EGG_SM_CLIENT_END_SESSION_DEFAULT, -  EGG_SM_CLIENT_LOGOUT, -  EGG_SM_CLIENT_REBOOT, -  EGG_SM_CLIENT_SHUTDOWN +typedef enum +{ +    EGG_SM_CLIENT_END_SESSION_DEFAULT, +    EGG_SM_CLIENT_LOGOUT, +    EGG_SM_CLIENT_REBOOT, +    EGG_SM_CLIENT_SHUTDOWN  } EggSMClientEndStyle; -typedef enum { -  EGG_SM_CLIENT_MODE_DISABLED, -  EGG_SM_CLIENT_MODE_NO_RESTART, -  EGG_SM_CLIENT_MODE_NORMAL +typedef enum +{ +    EGG_SM_CLIENT_MODE_DISABLED, +    EGG_SM_CLIENT_MODE_NO_RESTART, +    EGG_SM_CLIENT_MODE_NORMAL  } EggSMClientMode;  struct _EggSMClient  { -  GObject parent; +	GObject parent;  };  struct _EggSMClientClass  { -  GObjectClass parent_class; - -  /* signals */ -  void (*save_state)       (EggSMClient *client, -			    GKeyFile    *state_file); - -  void (*quit_requested)   (EggSMClient *client); -  void (*quit_cancelled)   (EggSMClient *client); -  void (*quit)             (EggSMClient *client); - -  /* virtual methods */ -  void	   (*startup)             (EggSMClient          *client, -				   const char           *client_id); -  void	   (*set_restart_command) (EggSMClient          *client, -				   int                   argc, -				   const char          **argv); -  void	   (*set_discard_command) (EggSMClient          *client, -				   int                   argc, -				   const char          **argv); -  void	   (*will_quit)           (EggSMClient          *client, -				   gboolean              will_quit); -  gboolean (*end_session)         (EggSMClient          *client, -				   EggSMClientEndStyle   style, -				   gboolean              request_confirmation); - -  /* Padding for future expansion */ -  void (*_egg_reserved1) (void); -  void (*_egg_reserved2) (void); -  void (*_egg_reserved3) (void); -  void (*_egg_reserved4) (void); +	GObjectClass parent_class; + +	/* signals */ +	void (*save_state)       (EggSMClient *client, +	                          GKeyFile    *state_file); + +	void (*quit_requested)   (EggSMClient *client); +	void (*quit_cancelled)   (EggSMClient *client); +	void (*quit)             (EggSMClient *client); + +	/* virtual methods */ +	void	   (*startup)             (EggSMClient          *client, +	                                   const char           *client_id); +	void	   (*set_restart_command) (EggSMClient          *client, +	                                   int                   argc, +	                                   const char          **argv); +	void	   (*set_discard_command) (EggSMClient          *client, +	                                   int                   argc, +	                                   const char          **argv); +	void	   (*will_quit)           (EggSMClient          *client, +	                                   gboolean              will_quit); +	gboolean (*end_session)         (EggSMClient          *client, +	                                 EggSMClientEndStyle   style, +	                                 gboolean              request_confirmation); + +	/* Padding for future expansion */ +	void (*_egg_reserved1) (void); +	void (*_egg_reserved2) (void); +	void (*_egg_reserved3) (void); +	void (*_egg_reserved4) (void);  };  GType            egg_sm_client_get_type            (void) G_GNUC_CONST; @@ -103,19 +105,19 @@ GKeyFile        *egg_sm_client_get_state_file      (EggSMClient *client);  /* Alternate means of saving state */  void             egg_sm_client_set_restart_command (EggSMClient  *client, -						    int           argc, -						    const char  **argv); +        int           argc, +        const char  **argv);  void             egg_sm_client_set_discard_command (EggSMClient  *client, -						    int           argc, -						    const char  **argv); +        int           argc, +        const char  **argv);  /* Handling "quit_requested" signal */  void             egg_sm_client_will_quit           (EggSMClient *client, -						    gboolean     will_quit); +        gboolean     will_quit);  /* Initiate a logout/reboot/shutdown */  gboolean         egg_sm_client_end_session         (EggSMClientEndStyle  style, -						    gboolean             request_confirmation); +        gboolean             request_confirmation);  G_END_DECLS diff --git a/src/profile-editor.c b/src/profile-editor.c index 6ac0b34..4cf2af6 100644 --- a/src/profile-editor.c +++ b/src/profile-editor.c @@ -33,75 +33,86 @@ typedef struct _TerminalColorScheme TerminalColorScheme;  struct _TerminalColorScheme  { -  const char *name; -  const GdkColor foreground; -  const GdkColor background; +	const char *name; +	const GdkColor foreground; +	const GdkColor background;  }; -static const TerminalColorScheme color_schemes[] = { -  { N_("Black on light yellow"), -    { 0, 0x0000, 0x0000, 0x0000 }, { 0, 0xFFFF, 0xFFFF, 0xDDDD } }, -  { N_("Black on white"), -    { 0, 0x0000, 0x0000, 0x0000 }, { 0, 0xFFFF, 0xFFFF, 0xFFFF } }, -  { N_("Gray on black"), -    { 0, 0xAAAA, 0xAAAA, 0xAAAA }, { 0, 0x0000, 0x0000, 0x0000 } }, -  { N_("Green on black"), -    { 0, 0x0000, 0xFFFF, 0x0000 }, { 0, 0x0000, 0x0000, 0x0000 } }, -  { N_("White on black"), -    { 0, 0xFFFF, 0xFFFF, 0xFFFF }, { 0, 0x0000, 0x0000, 0x0000 } } +static const TerminalColorScheme color_schemes[] = +{ +	{ +		N_("Black on light yellow"), +		{ 0, 0x0000, 0x0000, 0x0000 }, { 0, 0xFFFF, 0xFFFF, 0xDDDD } +	}, +	{ +		N_("Black on white"), +		{ 0, 0x0000, 0x0000, 0x0000 }, { 0, 0xFFFF, 0xFFFF, 0xFFFF } +	}, +	{ +		N_("Gray on black"), +		{ 0, 0xAAAA, 0xAAAA, 0xAAAA }, { 0, 0x0000, 0x0000, 0x0000 } +	}, +	{ +		N_("Green on black"), +		{ 0, 0x0000, 0xFFFF, 0x0000 }, { 0, 0x0000, 0x0000, 0x0000 } +	}, +	{ +		N_("White on black"), +		{ 0, 0xFFFF, 0xFFFF, 0xFFFF }, { 0, 0x0000, 0x0000, 0x0000 } +	}  };  static void profile_forgotten_cb (TerminalProfile           *profile,                                    GtkWidget                 *editor);  static void profile_notify_sensitivity_cb (TerminalProfile *profile, -                                           GParamSpec *pspec, -                                           GtkWidget *editor); +        GParamSpec *pspec, +        GtkWidget *editor);  static void profile_colors_notify_scheme_combo_cb (TerminalProfile *profile, -                                                   GParamSpec *pspec, -                                                   GtkComboBox *combo); +        GParamSpec *pspec, +        GtkComboBox *combo);  static void profile_palette_notify_scheme_combo_cb (TerminalProfile *profile, -                                                    GParamSpec *pspec, -                                                    GtkComboBox *combo); +        GParamSpec *pspec, +        GtkComboBox *combo);  static void profile_palette_notify_colorpickers_cb (TerminalProfile *profile, -                                                    GParamSpec *pspec, -                                                    GtkWidget *editor); +        GParamSpec *pspec, +        GtkWidget *editor);  static GtkWidget*  profile_editor_get_widget (GtkWidget  *editor,                             const char *widget_name)  { -  GtkBuilder *builder; +	GtkBuilder *builder; -  builder = g_object_get_data (G_OBJECT (editor), "builder"); -  g_assert (builder != NULL); -   -  return (GtkWidget *) gtk_builder_get_object  (builder, widget_name); +	builder = g_object_get_data (G_OBJECT (editor), "builder"); +	g_assert (builder != NULL); + +	return (GtkWidget *) gtk_builder_get_object  (builder, widget_name);  }  static void  widget_and_labels_set_sensitive (GtkWidget *widget, gboolean sensitive)  { -  GList *labels, *i; +	GList *labels, *i; -  labels = gtk_widget_list_mnemonic_labels (widget); -  for (i = labels; i; i = i->next) -    { -      gtk_widget_set_sensitive (GTK_WIDGET (i->data), sensitive); -    } -  g_list_free (labels); +	labels = gtk_widget_list_mnemonic_labels (widget); +	for (i = labels; i; i = i->next) +	{ +		gtk_widget_set_sensitive (GTK_WIDGET (i->data), sensitive); +	} +	g_list_free (labels); -  gtk_widget_set_sensitive (widget, sensitive); +	gtk_widget_set_sensitive (widget, sensitive);  }  static void  profile_forgotten_cb (TerminalProfile *profile,                        GtkWidget *editor)  { -  gtk_widget_destroy (editor); +	gtk_widget_destroy (editor);  }  static void @@ -109,206 +120,206 @@ profile_notify_sensitivity_cb (TerminalProfile *profile,                                 GParamSpec *pspec,                                 GtkWidget *editor)  { -  TerminalBackgroundType bg_type; -  const char *prop_name; - -  if (pspec) -    prop_name = pspec->name; -  else -    prop_name = NULL; -   +	TerminalBackgroundType bg_type; +	const char *prop_name; + +	if (pspec) +		prop_name = pspec->name; +	else +		prop_name = NULL; +  #define SET_SENSITIVE(name, setting) widget_and_labels_set_sensitive (profile_editor_get_widget (editor, name), setting) -  if (!prop_name || -      prop_name == I_(TERMINAL_PROFILE_USE_CUSTOM_COMMAND) || -      prop_name == I_(TERMINAL_PROFILE_CUSTOM_COMMAND)) -    { -      gboolean use_custom_command_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_USE_CUSTOM_COMMAND); -      SET_SENSITIVE ("use-custom-command-checkbutton", !use_custom_command_locked); -      SET_SENSITIVE ("custom-command-box", -                     terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_CUSTOM_COMMAND) && -                     !terminal_profile_property_locked (profile, TERMINAL_PROFILE_CUSTOM_COMMAND)); -    } - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKGROUND_TYPE)) -    { -      gboolean bg_type_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_TYPE); -      SET_SENSITIVE ("solid-radiobutton", !bg_type_locked); -      SET_SENSITIVE ("image-radiobutton", !bg_type_locked); -      SET_SENSITIVE ("transparent-radiobutton", !bg_type_locked); - -      bg_type = terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_BACKGROUND_TYPE); -      if (bg_type == TERMINAL_BACKGROUND_IMAGE) -        { -          SET_SENSITIVE ("background-image-filechooser", !terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE)); -          SET_SENSITIVE ("scroll-background-checkbutton", !terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLL_BACKGROUND)); -          SET_SENSITIVE ("darken-background-vbox", !terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS)); -        } -      else if (bg_type == TERMINAL_BACKGROUND_TRANSPARENT) -        { -          SET_SENSITIVE ("background-image-filechooser", FALSE); -          SET_SENSITIVE ("scroll-background-checkbutton", FALSE); -          SET_SENSITIVE ("darken-background-vbox", !terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS)); -        } -      else -        { -          SET_SENSITIVE ("background-image-filechooser", FALSE); -          SET_SENSITIVE ("scroll-background-checkbutton", FALSE); -          SET_SENSITIVE ("darken-background-vbox", FALSE); -        } -    } - -  if (!prop_name || -      prop_name == I_(TERMINAL_PROFILE_USE_SYSTEM_FONT) || -      prop_name == I_(TERMINAL_PROFILE_FONT)) -    { -      SET_SENSITIVE ("font-hbox", -                    !terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_SYSTEM_FONT) && -                    !terminal_profile_property_locked (profile, TERMINAL_PROFILE_FONT)); -      SET_SENSITIVE ("system-font-checkbutton", -                     !terminal_profile_property_locked (profile, TERMINAL_PROFILE_USE_SYSTEM_FONT)); -    } - -  if (!prop_name || -      prop_name == I_(TERMINAL_PROFILE_FOREGROUND_COLOR) || -      prop_name == I_(TERMINAL_PROFILE_BACKGROUND_COLOR) || -      prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR) || -      prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG) || -      prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS)) -    { -      gboolean bg_locked, use_theme_colors, fg_locked; - -      use_theme_colors = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_THEME_COLORS); -      fg_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_FOREGROUND_COLOR); -      bg_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_COLOR); - -      SET_SENSITIVE ("foreground-colorpicker", !use_theme_colors && !fg_locked); -      SET_SENSITIVE ("foreground-colorpicker-label", !use_theme_colors && !fg_locked); -      SET_SENSITIVE ("background-colorpicker", !use_theme_colors && !bg_locked); -      SET_SENSITIVE ("background-colorpicker-label", !use_theme_colors && !bg_locked); -      SET_SENSITIVE ("color-scheme-combobox", !use_theme_colors && !fg_locked && !bg_locked); -      SET_SENSITIVE ("color-scheme-combobox-label", !use_theme_colors && !fg_locked && !bg_locked); -    } - -  if (!prop_name || -      prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR) || -      prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG) || -      prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS)) -    { -      gboolean bold_locked, bold_same_as_fg_locked, bold_same_as_fg, use_theme_colors; - -      use_theme_colors = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_THEME_COLORS); -      bold_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BOLD_COLOR); -      bold_same_as_fg_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG); -      bold_same_as_fg = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG); - -      SET_SENSITIVE ("bold-color-same-as-fg-checkbox", !use_theme_colors && !bold_same_as_fg_locked); -      SET_SENSITIVE ("bold-colorpicker", !use_theme_colors && !bold_locked && !bold_same_as_fg); -      SET_SENSITIVE ("bold-colorpicker-label", !use_theme_colors && ((!bold_same_as_fg && !bold_locked) || !bold_same_as_fg_locked)); -    } - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_VISIBLE_NAME)) -    SET_SENSITIVE ("profile-name-entry", -                  !terminal_profile_property_locked (profile, TERMINAL_PROFILE_VISIBLE_NAME)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_DEFAULT_SHOW_MENUBAR)) -    SET_SENSITIVE ("show-menubar-checkbutton", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_DEFAULT_SHOW_MENUBAR)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_TITLE)) -    SET_SENSITIVE ("title-entry", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_TITLE)); -   -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_TITLE_MODE)) -    SET_SENSITIVE ("title-mode-combobox", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_TITLE_MODE)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_ALLOW_BOLD)) -    SET_SENSITIVE ("allow-bold-checkbutton", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_ALLOW_BOLD)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SILENT_BELL)) -    SET_SENSITIVE ("bell-checkbutton", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_SILENT_BELL)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_WORD_CHARS)) -    SET_SENSITIVE ("word-chars-entry", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_WORD_CHARS)); - -  if (!prop_name || -      prop_name == I_(TERMINAL_PROFILE_USE_CUSTOM_DEFAULT_SIZE) || -      prop_name == I_(TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS) || -      prop_name == I_(TERMINAL_PROFILE_DEFAULT_SIZE_ROWS)) -    { -      gboolean use_custom_default_size_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_USE_CUSTOM_DEFAULT_SIZE); -      gboolean use_custom_default_size = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_CUSTOM_DEFAULT_SIZE); -      gboolean columns_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS); -      gboolean rows_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_DEFAULT_SIZE_ROWS); - -      SET_SENSITIVE ("use-custom-default-size-checkbutton", !use_custom_default_size_locked); -      SET_SENSITIVE ("default-size-hbox", use_custom_default_size); -      SET_SENSITIVE ("default-size-label", (!columns_locked || !rows_locked)); -      SET_SENSITIVE ("default-size-columns-label", !columns_locked); -      SET_SENSITIVE ("default-size-columns-spinbutton", !columns_locked); -      SET_SENSITIVE ("default-size-rows-label", !rows_locked); -      SET_SENSITIVE ("default-size-rows-spinbutton", !rows_locked); -    } - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLLBAR_POSITION)) -    SET_SENSITIVE ("scrollbar-position-combobox", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLLBAR_POSITION)); - -  if (!prop_name || -      prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_LINES) || -      prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_UNLIMITED)) -    { -      gboolean scrollback_lines_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLLBACK_LINES); -      gboolean scrollback_unlimited_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLLBACK_UNLIMITED); -      gboolean scrollback_unlimited = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLLBACK_UNLIMITED); - -      SET_SENSITIVE ("scrollback-label", !scrollback_lines_locked); -      SET_SENSITIVE ("scrollback-box", !scrollback_lines_locked && !scrollback_unlimited); -      SET_SENSITIVE ("scrollback-unlimited-checkbutton", !scrollback_lines_locked && !scrollback_unlimited_locked); -    } -   -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE)) -    SET_SENSITIVE ("scroll-on-keystroke-checkbutton", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_OUTPUT)) -    SET_SENSITIVE ("scroll-on-output-checkbutton", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLL_ON_OUTPUT)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_EXIT_ACTION)) -    SET_SENSITIVE ("exit-action-combobox", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_EXIT_ACTION)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_LOGIN_SHELL)) -    SET_SENSITIVE ("login-shell-checkbutton", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_LOGIN_SHELL)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_UPDATE_RECORDS)) -    SET_SENSITIVE ("update-records-checkbutton", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_UPDATE_RECORDS)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_PALETTE)) -    { -      gboolean palette_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_PALETTE); -      SET_SENSITIVE ("palette-combobox", !palette_locked); -      SET_SENSITIVE ("palette-table", !palette_locked); -    } - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKSPACE_BINDING)) -    SET_SENSITIVE ("backspace-binding-combobox", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKSPACE_BINDING)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_DELETE_BINDING)) -    SET_SENSITIVE ("delete-binding-combobox", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_DELETE_BINDING)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS)) -    SET_SENSITIVE ("use-theme-colors-checkbutton", -                   !terminal_profile_property_locked (profile, TERMINAL_PROFILE_USE_THEME_COLORS)); +	if (!prop_name || +	        prop_name == I_(TERMINAL_PROFILE_USE_CUSTOM_COMMAND) || +	        prop_name == I_(TERMINAL_PROFILE_CUSTOM_COMMAND)) +	{ +		gboolean use_custom_command_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_USE_CUSTOM_COMMAND); +		SET_SENSITIVE ("use-custom-command-checkbutton", !use_custom_command_locked); +		SET_SENSITIVE ("custom-command-box", +		               terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_CUSTOM_COMMAND) && +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_CUSTOM_COMMAND)); +	} + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKGROUND_TYPE)) +	{ +		gboolean bg_type_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_TYPE); +		SET_SENSITIVE ("solid-radiobutton", !bg_type_locked); +		SET_SENSITIVE ("image-radiobutton", !bg_type_locked); +		SET_SENSITIVE ("transparent-radiobutton", !bg_type_locked); + +		bg_type = terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_BACKGROUND_TYPE); +		if (bg_type == TERMINAL_BACKGROUND_IMAGE) +		{ +			SET_SENSITIVE ("background-image-filechooser", !terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE)); +			SET_SENSITIVE ("scroll-background-checkbutton", !terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLL_BACKGROUND)); +			SET_SENSITIVE ("darken-background-vbox", !terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS)); +		} +		else if (bg_type == TERMINAL_BACKGROUND_TRANSPARENT) +		{ +			SET_SENSITIVE ("background-image-filechooser", FALSE); +			SET_SENSITIVE ("scroll-background-checkbutton", FALSE); +			SET_SENSITIVE ("darken-background-vbox", !terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS)); +		} +		else +		{ +			SET_SENSITIVE ("background-image-filechooser", FALSE); +			SET_SENSITIVE ("scroll-background-checkbutton", FALSE); +			SET_SENSITIVE ("darken-background-vbox", FALSE); +		} +	} + +	if (!prop_name || +	        prop_name == I_(TERMINAL_PROFILE_USE_SYSTEM_FONT) || +	        prop_name == I_(TERMINAL_PROFILE_FONT)) +	{ +		SET_SENSITIVE ("font-hbox", +		               !terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_SYSTEM_FONT) && +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_FONT)); +		SET_SENSITIVE ("system-font-checkbutton", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_USE_SYSTEM_FONT)); +	} + +	if (!prop_name || +	        prop_name == I_(TERMINAL_PROFILE_FOREGROUND_COLOR) || +	        prop_name == I_(TERMINAL_PROFILE_BACKGROUND_COLOR) || +	        prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR) || +	        prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG) || +	        prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS)) +	{ +		gboolean bg_locked, use_theme_colors, fg_locked; + +		use_theme_colors = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_THEME_COLORS); +		fg_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_FOREGROUND_COLOR); +		bg_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_COLOR); + +		SET_SENSITIVE ("foreground-colorpicker", !use_theme_colors && !fg_locked); +		SET_SENSITIVE ("foreground-colorpicker-label", !use_theme_colors && !fg_locked); +		SET_SENSITIVE ("background-colorpicker", !use_theme_colors && !bg_locked); +		SET_SENSITIVE ("background-colorpicker-label", !use_theme_colors && !bg_locked); +		SET_SENSITIVE ("color-scheme-combobox", !use_theme_colors && !fg_locked && !bg_locked); +		SET_SENSITIVE ("color-scheme-combobox-label", !use_theme_colors && !fg_locked && !bg_locked); +	} + +	if (!prop_name || +	        prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR) || +	        prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG) || +	        prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS)) +	{ +		gboolean bold_locked, bold_same_as_fg_locked, bold_same_as_fg, use_theme_colors; + +		use_theme_colors = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_THEME_COLORS); +		bold_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BOLD_COLOR); +		bold_same_as_fg_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG); +		bold_same_as_fg = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG); + +		SET_SENSITIVE ("bold-color-same-as-fg-checkbox", !use_theme_colors && !bold_same_as_fg_locked); +		SET_SENSITIVE ("bold-colorpicker", !use_theme_colors && !bold_locked && !bold_same_as_fg); +		SET_SENSITIVE ("bold-colorpicker-label", !use_theme_colors && ((!bold_same_as_fg && !bold_locked) || !bold_same_as_fg_locked)); +	} + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_VISIBLE_NAME)) +		SET_SENSITIVE ("profile-name-entry", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_VISIBLE_NAME)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_DEFAULT_SHOW_MENUBAR)) +		SET_SENSITIVE ("show-menubar-checkbutton", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_DEFAULT_SHOW_MENUBAR)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_TITLE)) +		SET_SENSITIVE ("title-entry", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_TITLE)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_TITLE_MODE)) +		SET_SENSITIVE ("title-mode-combobox", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_TITLE_MODE)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_ALLOW_BOLD)) +		SET_SENSITIVE ("allow-bold-checkbutton", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_ALLOW_BOLD)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SILENT_BELL)) +		SET_SENSITIVE ("bell-checkbutton", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_SILENT_BELL)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_WORD_CHARS)) +		SET_SENSITIVE ("word-chars-entry", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_WORD_CHARS)); + +	if (!prop_name || +	        prop_name == I_(TERMINAL_PROFILE_USE_CUSTOM_DEFAULT_SIZE) || +	        prop_name == I_(TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS) || +	        prop_name == I_(TERMINAL_PROFILE_DEFAULT_SIZE_ROWS)) +	{ +		gboolean use_custom_default_size_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_USE_CUSTOM_DEFAULT_SIZE); +		gboolean use_custom_default_size = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_CUSTOM_DEFAULT_SIZE); +		gboolean columns_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS); +		gboolean rows_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_DEFAULT_SIZE_ROWS); + +		SET_SENSITIVE ("use-custom-default-size-checkbutton", !use_custom_default_size_locked); +		SET_SENSITIVE ("default-size-hbox", use_custom_default_size); +		SET_SENSITIVE ("default-size-label", (!columns_locked || !rows_locked)); +		SET_SENSITIVE ("default-size-columns-label", !columns_locked); +		SET_SENSITIVE ("default-size-columns-spinbutton", !columns_locked); +		SET_SENSITIVE ("default-size-rows-label", !rows_locked); +		SET_SENSITIVE ("default-size-rows-spinbutton", !rows_locked); +	} + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLLBAR_POSITION)) +		SET_SENSITIVE ("scrollbar-position-combobox", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLLBAR_POSITION)); + +	if (!prop_name || +	        prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_LINES) || +	        prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_UNLIMITED)) +	{ +		gboolean scrollback_lines_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLLBACK_LINES); +		gboolean scrollback_unlimited_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLLBACK_UNLIMITED); +		gboolean scrollback_unlimited = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLLBACK_UNLIMITED); + +		SET_SENSITIVE ("scrollback-label", !scrollback_lines_locked); +		SET_SENSITIVE ("scrollback-box", !scrollback_lines_locked && !scrollback_unlimited); +		SET_SENSITIVE ("scrollback-unlimited-checkbutton", !scrollback_lines_locked && !scrollback_unlimited_locked); +	} + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE)) +		SET_SENSITIVE ("scroll-on-keystroke-checkbutton", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_OUTPUT)) +		SET_SENSITIVE ("scroll-on-output-checkbutton", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_SCROLL_ON_OUTPUT)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_EXIT_ACTION)) +		SET_SENSITIVE ("exit-action-combobox", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_EXIT_ACTION)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_LOGIN_SHELL)) +		SET_SENSITIVE ("login-shell-checkbutton", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_LOGIN_SHELL)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_UPDATE_RECORDS)) +		SET_SENSITIVE ("update-records-checkbutton", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_UPDATE_RECORDS)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_PALETTE)) +	{ +		gboolean palette_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_PALETTE); +		SET_SENSITIVE ("palette-combobox", !palette_locked); +		SET_SENSITIVE ("palette-table", !palette_locked); +	} + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKSPACE_BINDING)) +		SET_SENSITIVE ("backspace-binding-combobox", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKSPACE_BINDING)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_DELETE_BINDING)) +		SET_SENSITIVE ("delete-binding-combobox", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_DELETE_BINDING)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS)) +		SET_SENSITIVE ("use-theme-colors-checkbutton", +		               !terminal_profile_property_locked (profile, TERMINAL_PROFILE_USE_THEME_COLORS));  #undef SET_INSENSITIVE  } @@ -318,23 +329,23 @@ color_scheme_combo_changed_cb (GtkWidget *combo,                                 GParamSpec *pspec,                                 TerminalProfile *profile)  { -  guint i; - -  i = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); - -  if (i < G_N_ELEMENTS (color_schemes)) -    { -      g_signal_handlers_block_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo); -      g_object_set (profile, -                    TERMINAL_PROFILE_FOREGROUND_COLOR, &color_schemes[i].foreground, -                    TERMINAL_PROFILE_BACKGROUND_COLOR, &color_schemes[i].background, -                    NULL); -      g_signal_handlers_unblock_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo); -    } -  else -    { -      /* "custom" selected, no change */ -    } +	guint i; + +	i = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); + +	if (i < G_N_ELEMENTS (color_schemes)) +	{ +		g_signal_handlers_block_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo); +		g_object_set (profile, +		              TERMINAL_PROFILE_FOREGROUND_COLOR, &color_schemes[i].foreground, +		              TERMINAL_PROFILE_BACKGROUND_COLOR, &color_schemes[i].background, +		              NULL); +		g_signal_handlers_unblock_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo); +	} +	else +	{ +		/* "custom" selected, no change */ +	}  }  static void @@ -342,30 +353,30 @@ profile_colors_notify_scheme_combo_cb (TerminalProfile *profile,                                         GParamSpec *pspec,                                         GtkComboBox *combo)  { -  const GdkColor *fg, *bg; -  guint i; +	const GdkColor *fg, *bg; +	guint i; -  fg = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_FOREGROUND_COLOR); -  bg = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_BACKGROUND_COLOR); +	fg = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_FOREGROUND_COLOR); +	bg = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_BACKGROUND_COLOR); -  if (fg && bg) -    { -      for (i = 0; i < G_N_ELEMENTS (color_schemes); ++i) +	if (fg && bg) +	{ +		for (i = 0; i < G_N_ELEMENTS (color_schemes); ++i) +		{ +			if (gdk_color_equal (fg, &color_schemes[i].foreground) && +			        gdk_color_equal (bg, &color_schemes[i].background)) +				break; +		} +	} +	else  	{ -	  if (gdk_color_equal (fg, &color_schemes[i].foreground) && -	      gdk_color_equal (bg, &color_schemes[i].background)) -	    break; +		i = G_N_ELEMENTS (color_schemes);  	} -    } -  else -    { -      i = G_N_ELEMENTS (color_schemes); -    } -  /* If we didn't find a match, then we get the last combo box item which is "custom" */ - -  g_signal_handlers_block_by_func (combo, G_CALLBACK (color_scheme_combo_changed_cb), profile); -  gtk_combo_box_set_active (GTK_COMBO_BOX (combo), i); -  g_signal_handlers_unblock_by_func (combo, G_CALLBACK (color_scheme_combo_changed_cb), profile); +	/* If we didn't find a match, then we get the last combo box item which is "custom" */ + +	g_signal_handlers_block_by_func (combo, G_CALLBACK (color_scheme_combo_changed_cb), profile); +	gtk_combo_box_set_active (GTK_COMBO_BOX (combo), i); +	g_signal_handlers_unblock_by_func (combo, G_CALLBACK (color_scheme_combo_changed_cb), profile);  }  static void @@ -373,18 +384,18 @@ palette_scheme_combo_changed_cb (GtkComboBox *combo,                                   GParamSpec *pspec,                                   TerminalProfile *profile)  { -  int i; - -  i = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); - -  g_signal_handlers_block_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo); -  if (i < TERMINAL_PALETTE_N_BUILTINS) -    terminal_profile_set_palette_builtin (profile, i); -  else -    { -      /* "custom" selected, no change */ -    } -  g_signal_handlers_unblock_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo); +	int i; + +	i = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); + +	g_signal_handlers_block_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo); +	if (i < TERMINAL_PALETTE_N_BUILTINS) +		terminal_profile_set_palette_builtin (profile, i); +	else +	{ +		/* "custom" selected, no change */ +	} +	g_signal_handlers_unblock_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo);  }  static void @@ -392,17 +403,17 @@ profile_palette_notify_scheme_combo_cb (TerminalProfile *profile,                                          GParamSpec *pspec,                                          GtkComboBox *combo)  { -  guint i; +	guint i; -  if (!terminal_profile_get_palette_is_builtin (profile, &i)) -    /* If we didn't find a match, then we want the last combo -     * box item which is "custom" -     */ -    i = TERMINAL_PALETTE_N_BUILTINS; +	if (!terminal_profile_get_palette_is_builtin (profile, &i)) +		/* If we didn't find a match, then we want the last combo +		 * box item which is "custom" +		 */ +		i = TERMINAL_PALETTE_N_BUILTINS; -  g_signal_handlers_block_by_func (combo, G_CALLBACK (palette_scheme_combo_changed_cb), profile); -  gtk_combo_box_set_active (combo, i); -  g_signal_handlers_unblock_by_func (combo, G_CALLBACK (palette_scheme_combo_changed_cb), profile); +	g_signal_handlers_block_by_func (combo, G_CALLBACK (palette_scheme_combo_changed_cb), profile); +	gtk_combo_box_set_active (combo, i); +	g_signal_handlers_unblock_by_func (combo, G_CALLBACK (palette_scheme_combo_changed_cb), profile);  }  static void @@ -410,17 +421,17 @@ palette_color_notify_cb (GtkColorButton *button,                           GParamSpec *pspec,                           TerminalProfile *profile)  { -  GtkWidget *editor; -  GdkColor color; -  guint i; +	GtkWidget *editor; +	GdkColor color; +	guint i; -  gtk_color_button_get_color (button, &color); -  i = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (button), "palette-entry-index")); +	gtk_color_button_get_color (button, &color); +	i = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (button), "palette-entry-index")); -  editor = gtk_widget_get_toplevel (GTK_WIDGET (button)); -  g_signal_handlers_block_by_func (profile, G_CALLBACK (profile_palette_notify_colorpickers_cb), editor); -  terminal_profile_modify_palette_entry (profile, i, &color); -  g_signal_handlers_unblock_by_func (profile, G_CALLBACK (profile_palette_notify_colorpickers_cb), editor); +	editor = gtk_widget_get_toplevel (GTK_WIDGET (button)); +	g_signal_handlers_block_by_func (profile, G_CALLBACK (profile_palette_notify_colorpickers_cb), editor); +	terminal_profile_modify_palette_entry (profile, i, &color); +	g_signal_handlers_unblock_by_func (profile, G_CALLBACK (profile_palette_notify_colorpickers_cb), editor);  }  static void @@ -428,57 +439,57 @@ profile_palette_notify_colorpickers_cb (TerminalProfile *profile,                                          GParamSpec *pspec,                                          GtkWidget *editor)  { -  GtkWidget *w; -  GdkColor colors[TERMINAL_PALETTE_SIZE]; -  guint n_colors, i; - -  n_colors = G_N_ELEMENTS (colors); -  terminal_profile_get_palette (profile, colors, &n_colors); - -  n_colors = MIN (n_colors, TERMINAL_PALETTE_SIZE); -  for (i = 0; i < n_colors; i++) -    { -      char name[32]; -      GdkColor old_color; - -      g_snprintf (name, sizeof (name), "palette-colorpicker-%d", i + 1); -      w = profile_editor_get_widget (editor, name); - -      gtk_color_button_get_color (GTK_COLOR_BUTTON (w), &old_color); -      if (!gdk_color_equal (&old_color, &colors[i])) -        { -          g_signal_handlers_block_by_func (w, G_CALLBACK (palette_color_notify_cb), profile); -          gtk_color_button_set_color (GTK_COLOR_BUTTON (w), &colors[i]); -          g_signal_handlers_unblock_by_func (w, G_CALLBACK (palette_color_notify_cb), profile); -        } -    } +	GtkWidget *w; +	GdkColor colors[TERMINAL_PALETTE_SIZE]; +	guint n_colors, i; + +	n_colors = G_N_ELEMENTS (colors); +	terminal_profile_get_palette (profile, colors, &n_colors); + +	n_colors = MIN (n_colors, TERMINAL_PALETTE_SIZE); +	for (i = 0; i < n_colors; i++) +	{ +		char name[32]; +		GdkColor old_color; + +		g_snprintf (name, sizeof (name), "palette-colorpicker-%d", i + 1); +		w = profile_editor_get_widget (editor, name); + +		gtk_color_button_get_color (GTK_COLOR_BUTTON (w), &old_color); +		if (!gdk_color_equal (&old_color, &colors[i])) +		{ +			g_signal_handlers_block_by_func (w, G_CALLBACK (palette_color_notify_cb), profile); +			gtk_color_button_set_color (GTK_COLOR_BUTTON (w), &colors[i]); +			g_signal_handlers_unblock_by_func (w, G_CALLBACK (palette_color_notify_cb), profile); +		} +	}  }  static void  custom_command_entry_changed_cb (GtkEntry *entry)  {  #if GTK_CHECK_VERSION (2, 16, 0) -  const char *command; -  GError *error = NULL; +	const char *command; +	GError *error = NULL; -  command = gtk_entry_get_text (entry); +	command = gtk_entry_get_text (entry); -  if (g_shell_parse_argv (command, NULL, NULL, &error)) -    { -      gtk_entry_set_icon_from_stock (entry, GTK_PACK_END, NULL); -    } -  else -    { -      char *tooltip; +	if (g_shell_parse_argv (command, NULL, NULL, &error)) +	{ +		gtk_entry_set_icon_from_stock (entry, GTK_PACK_END, NULL); +	} +	else +	{ +		char *tooltip; -      gtk_entry_set_icon_from_stock (entry, GTK_PACK_END, GTK_STOCK_DIALOG_WARNING); +		gtk_entry_set_icon_from_stock (entry, GTK_PACK_END, GTK_STOCK_DIALOG_WARNING); -      tooltip = g_strdup_printf (_("Error parsing command: %s"), error->message); -      gtk_entry_set_icon_tooltip_text (entry, GTK_PACK_END, tooltip); -      g_free (tooltip); +		tooltip = g_strdup_printf (_("Error parsing command: %s"), error->message); +		gtk_entry_set_icon_tooltip_text (entry, GTK_PACK_END, tooltip); +		g_free (tooltip); -      g_error_free (error); -    } +		g_error_free (error); +	}  #endif /* GTK+ >= 2.16.0 */  } @@ -486,22 +497,22 @@ static void  visible_name_entry_changed_cb (GtkEntry *entry,                                 GtkWindow *window)  { -  const char *visible_name; -  char *text; -   -  visible_name = gtk_entry_get_text (entry); - -  text = g_strdup_printf (_("Editing Profile “%s”"), visible_name); -  gtk_window_set_title (window, text); -  g_free (text); +	const char *visible_name; +	char *text; + +	visible_name = gtk_entry_get_text (entry); + +	text = g_strdup_printf (_("Editing Profile “%s”"), visible_name); +	gtk_window_set_title (window, text); +	g_free (text);  }  static void  reset_compat_defaults_cb (GtkWidget       *button,                            TerminalProfile *profile)  { -  terminal_profile_reset_property (profile, TERMINAL_PROFILE_DELETE_BINDING); -  terminal_profile_reset_property (profile, TERMINAL_PROFILE_BACKSPACE_BINDING); +	terminal_profile_reset_property (profile, TERMINAL_PROFILE_DELETE_BINDING); +	terminal_profile_reset_property (profile, TERMINAL_PROFILE_BACKSPACE_BINDING);  }  /* @@ -511,14 +522,14 @@ reset_compat_defaults_cb (GtkWidget       *button,  static void  init_color_scheme_menu (GtkWidget *combo_box)  { -  int i; - -  i = G_N_ELEMENTS (color_schemes); -  while (i > 0) -    { -      gtk_combo_box_prepend_text (GTK_COMBO_BOX (combo_box), -                                  _(color_schemes[--i].name)); -    } +	int i; + +	i = G_N_ELEMENTS (color_schemes); +	while (i > 0) +	{ +		gtk_combo_box_prepend_text (GTK_COMBO_BOX (combo_box), +		                            _(color_schemes[--i].name)); +	}  }  static char* @@ -526,15 +537,15 @@ format_percent_value (GtkScale *scale,                        double    val,                        void     *data)  { -  return g_strdup_printf ("%d%%", (int) (val * 100.0 + 0.5)); +	return g_strdup_printf ("%d%%", (int) (val * 100.0 + 0.5));  }  static void  init_background_darkness_scale (GtkWidget *scale)  { -  g_signal_connect (scale, "format-value", -                    G_CALLBACK (format_percent_value), -                    NULL); +	g_signal_connect (scale, "format-value", +	                  G_CALLBACK (format_percent_value), +	                  NULL);  } @@ -542,131 +553,134 @@ static void  editor_response_cb (GtkWidget *editor,                      int response,                      gpointer use_data) -{   -  if (response == GTK_RESPONSE_HELP) -    { -      terminal_util_show_help ("mate-terminal-prefs", GTK_WINDOW (editor)); -      return; -    } -     -  gtk_widget_destroy (editor); +{ +	if (response == GTK_RESPONSE_HELP) +	{ +		terminal_util_show_help ("mate-terminal-prefs", GTK_WINDOW (editor)); +		return; +	} + +	gtk_widget_destroy (editor);  }  #if 0  static GdkPixbuf *  create_preview_pixbuf (const gchar *filename)  { -  GdkPixbuf *pixbuf = NULL; -  MateThumbnailFactory *thumbs; -  const char *mime_type = NULL; -  GFile *gfile; -  GFileInfo *file_info; - -  if (filename == NULL) -    return NULL; - -  gfile = g_file_new_for_uri (filename); -  file_info = g_file_query_info (gfile, -                                  G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, -                                  0, NULL, NULL); -  if (file_info != NULL) -    mime_type = g_file_info_get_content_type (file_info); - -  g_object_unref (gfile); - -  if (mime_type != NULL) -    { -      thumbs = mate_thumbnail_factory_new (MATE_THUMBNAIL_SIZE_NORMAL); - -      pixbuf = mate_thumbnail_factory_generate_thumbnail (thumbs, -                                                           filename, -                                                           mime_type); -      g_object_unref (thumbs); -    } - -  if (file_info != NULL) -    g_object_unref (file_info); - -  return pixbuf; +	GdkPixbuf *pixbuf = NULL; +	MateThumbnailFactory *thumbs; +	const char *mime_type = NULL; +	GFile *gfile; +	GFileInfo *file_info; + +	if (filename == NULL) +		return NULL; + +	gfile = g_file_new_for_uri (filename); +	file_info = g_file_query_info (gfile, +	                               G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, +	                               0, NULL, NULL); +	if (file_info != NULL) +		mime_type = g_file_info_get_content_type (file_info); + +	g_object_unref (gfile); + +	if (mime_type != NULL) +	{ +		thumbs = mate_thumbnail_factory_new (MATE_THUMBNAIL_SIZE_NORMAL); + +		pixbuf = mate_thumbnail_factory_generate_thumbnail (thumbs, +		         filename, +		         mime_type); +		g_object_unref (thumbs); +	} + +	if (file_info != NULL) +		g_object_unref (file_info); + +	return pixbuf;  } -static void  -update_image_preview (GtkFileChooser *chooser)  +static void +update_image_preview (GtkFileChooser *chooser)  { -  GtkWidget *image; -  gchar *file; - -  image = gtk_file_chooser_get_preview_widget (GTK_FILE_CHOOSER (chooser)); -  file = gtk_file_chooser_get_preview_uri (chooser); -   -  if (file != NULL) { - -    GdkPixbuf *pixbuf = NULL; -     -    pixbuf = create_preview_pixbuf (file); -    g_free (file); - -    if (pixbuf != NULL) { -      gtk_image_set_from_pixbuf (GTK_IMAGE (image), pixbuf); -      g_object_unref (pixbuf); -    } -    else { -      gtk_image_set_from_stock (GTK_IMAGE (image), -                                "gtk-dialog-question", -      	                        GTK_ICON_SIZE_DIALOG); -    } -  } -  gtk_file_chooser_set_preview_widget_active (chooser, file != NULL); +	GtkWidget *image; +	gchar *file; + +	image = gtk_file_chooser_get_preview_widget (GTK_FILE_CHOOSER (chooser)); +	file = gtk_file_chooser_get_preview_uri (chooser); + +	if (file != NULL) +	{ + +		GdkPixbuf *pixbuf = NULL; + +		pixbuf = create_preview_pixbuf (file); +		g_free (file); + +		if (pixbuf != NULL) +		{ +			gtk_image_set_from_pixbuf (GTK_IMAGE (image), pixbuf); +			g_object_unref (pixbuf); +		} +		else +		{ +			gtk_image_set_from_stock (GTK_IMAGE (image), +			                          "gtk-dialog-question", +			                          GTK_ICON_SIZE_DIALOG); +		} +	} +	gtk_file_chooser_set_preview_widget_active (chooser, file != NULL);  }  #endif  static void -setup_background_filechooser (GtkWidget *filechooser,  +setup_background_filechooser (GtkWidget *filechooser,                                TerminalProfile *profile)  { -  GtkFileFilter *filter; -  const char *home_dir; +	GtkFileFilter *filter; +	const char *home_dir; -  filter = gtk_file_filter_new (); -  gtk_file_filter_add_pixbuf_formats (filter); -  gtk_file_filter_set_name (filter, _("Images")); -  gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (filechooser), filter); +	filter = gtk_file_filter_new (); +	gtk_file_filter_add_pixbuf_formats (filter); +	gtk_file_filter_set_name (filter, _("Images")); +	gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (filechooser), filter); -  gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (filechooser), TRUE); +	gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (filechooser), TRUE); -  /* Start filechooser in $HOME instead of the current dir of the factory which is "/" */ -  home_dir = g_get_home_dir (); -  if (home_dir) -    gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (filechooser), home_dir); +	/* Start filechooser in $HOME instead of the current dir of the factory which is "/" */ +	home_dir = g_get_home_dir (); +	if (home_dir) +		gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (filechooser), home_dir);  #if 0 -  GtkWidget *image_preview; -  GdkPixbuf *pixbuf = NULL; - -  image_preview = gtk_image_new (); -  /* FIXMchpe this is bogus */ -  pixbuf = create_preview_pixbuf (terminal_profile_get_property_string (profile, TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE)); -  if (pixbuf != NULL) -    { -      gtk_image_set_from_pixbuf (GTK_IMAGE (image_preview), pixbuf); -      g_object_unref (pixbuf); -    } -  else -    { -      gtk_image_set_from_stock (GTK_IMAGE (image_preview), -                                "gtk-dialog-question", -                                GTK_ICON_SIZE_DIALOG); -    } - -  gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (filechooser), -                                       image_preview); -  gtk_file_chooser_set_use_preview_label (GTK_FILE_CHOOSER (filechooser), -                                          FALSE); -  gtk_widget_set_size_request (image_preview, 128, -1); -  gtk_widget_show (image_preview);  - -  g_signal_connect (filechooser, "update-preview", -                    G_CALLBACK (update_image_preview), NULL); +	GtkWidget *image_preview; +	GdkPixbuf *pixbuf = NULL; + +	image_preview = gtk_image_new (); +	/* FIXMchpe this is bogus */ +	pixbuf = create_preview_pixbuf (terminal_profile_get_property_string (profile, TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE)); +	if (pixbuf != NULL) +	{ +		gtk_image_set_from_pixbuf (GTK_IMAGE (image_preview), pixbuf); +		g_object_unref (pixbuf); +	} +	else +	{ +		gtk_image_set_from_stock (GTK_IMAGE (image_preview), +		                          "gtk-dialog-question", +		                          GTK_ICON_SIZE_DIALOG); +	} + +	gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (filechooser), +	                                     image_preview); +	gtk_file_chooser_set_use_preview_label (GTK_FILE_CHOOSER (filechooser), +	                                        FALSE); +	gtk_widget_set_size_request (image_preview, 128, -1); +	gtk_widget_show (image_preview); + +	g_signal_connect (filechooser, "update-preview", +	                  G_CALLBACK (update_image_preview), NULL);  #endif  } @@ -674,50 +688,51 @@ static void  profile_editor_destroyed (GtkWidget       *editor,                            TerminalProfile *profile)  { -  g_signal_handlers_disconnect_by_func (profile, G_CALLBACK (profile_forgotten_cb), editor); -  g_signal_handlers_disconnect_by_func (profile, G_CALLBACK (profile_notify_sensitivity_cb), editor); -  g_signal_handlers_disconnect_matched (profile, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, -                                        G_CALLBACK (profile_colors_notify_scheme_combo_cb), NULL); -  g_signal_handlers_disconnect_matched (profile, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, -                                        G_CALLBACK (profile_palette_notify_scheme_combo_cb), NULL); -  g_signal_handlers_disconnect_matched (profile, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, -                                        G_CALLBACK (profile_palette_notify_colorpickers_cb), NULL); -   -  g_object_set_data (G_OBJECT (profile), "editor-window", NULL); -  g_object_set_data (G_OBJECT (editor), "builder", NULL); +	g_signal_handlers_disconnect_by_func (profile, G_CALLBACK (profile_forgotten_cb), editor); +	g_signal_handlers_disconnect_by_func (profile, G_CALLBACK (profile_notify_sensitivity_cb), editor); +	g_signal_handlers_disconnect_matched (profile, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, +	                                      G_CALLBACK (profile_colors_notify_scheme_combo_cb), NULL); +	g_signal_handlers_disconnect_matched (profile, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, +	                                      G_CALLBACK (profile_palette_notify_scheme_combo_cb), NULL); +	g_signal_handlers_disconnect_matched (profile, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, +	                                      G_CALLBACK (profile_palette_notify_colorpickers_cb), NULL); + +	g_object_set_data (G_OBJECT (profile), "editor-window", NULL); +	g_object_set_data (G_OBJECT (editor), "builder", NULL);  }  static void  terminal_profile_editor_focus_widget (GtkWidget *editor,                                        const char *widget_name)  { -  GtkBuilder *builder; -  GtkWidget *widget, *page, *page_parent; +	GtkBuilder *builder; +	GtkWidget *widget, *page, *page_parent; -  if (widget_name == NULL) -    return; +	if (widget_name == NULL) +		return; -  builder = g_object_get_data (G_OBJECT (editor), "builder"); -  widget = GTK_WIDGET (gtk_builder_get_object (builder, widget_name)); -  if (widget == NULL) -    return; +	builder = g_object_get_data (G_OBJECT (editor), "builder"); +	widget = GTK_WIDGET (gtk_builder_get_object (builder, widget_name)); +	if (widget == NULL) +		return; -  page = widget; -  while (page != NULL && -         (page_parent = gtk_widget_get_parent (page)) != NULL && -         !GTK_IS_NOTEBOOK (page_parent)) -    page = page_parent; +	page = widget; +	while (page != NULL && +	        (page_parent = gtk_widget_get_parent (page)) != NULL && +	        !GTK_IS_NOTEBOOK (page_parent)) +		page = page_parent; -  page_parent = gtk_widget_get_parent (page); -  if (page != NULL && GTK_IS_NOTEBOOK (page_parent)) { -    GtkNotebook *notebook; +	page_parent = gtk_widget_get_parent (page); +	if (page != NULL && GTK_IS_NOTEBOOK (page_parent)) +	{ +		GtkNotebook *notebook; -    notebook = GTK_NOTEBOOK (page_parent); -    gtk_notebook_set_current_page (notebook, gtk_notebook_page_num (notebook, page)); -  } +		notebook = GTK_NOTEBOOK (page_parent); +		gtk_notebook_set_current_page (notebook, gtk_notebook_page_num (notebook, page)); +	} -  if (gtk_widget_is_sensitive (widget)) -    gtk_widget_grab_focus (widget); +	if (gtk_widget_is_sensitive (widget)) +		gtk_widget_grab_focus (widget);  }  /** @@ -735,187 +750,188 @@ terminal_profile_edit (TerminalProfile *profile,                         GtkWindow       *transient_parent,                         const char      *widget_name)  { -  char *path; -  GtkBuilder *builder; -  GError *error = NULL; -  GtkWidget *editor, *w; -  guint i; - -  editor = g_object_get_data (G_OBJECT (profile), "editor-window"); -  if (editor) -    { -      terminal_profile_editor_focus_widget (editor, widget_name); - -      gtk_window_set_transient_for (GTK_WINDOW (editor), -                                    GTK_WINDOW (transient_parent)); -      gtk_window_present (GTK_WINDOW (editor)); -      return; -    } - -  path = g_build_filename (TERM_PKGDATADIR, "profile-preferences.ui", NULL); -  builder = gtk_builder_new (); -  if (!gtk_builder_add_from_file (builder, path, &error)) { -    g_warning ("Failed to load %s: %s\n", path, error->message); -    g_error_free (error); -    g_free (path); -    g_object_unref (builder); -    return; -  } -  g_free (path); - -  editor = (GtkWidget *) gtk_builder_get_object  (builder, "profile-editor-dialog"); -  g_object_set_data_full (G_OBJECT (editor), "builder", -                          builder, (GDestroyNotify) g_object_unref); - -  /* Store the dialogue on the profile, so we can acccess it above to check if -   * there's already a profile editor for this profile. -   */ -  g_object_set_data (G_OBJECT (profile), "editor-window", editor); - -  g_signal_connect (editor, "destroy", -                    G_CALLBACK (profile_editor_destroyed), -                    profile); - -  g_signal_connect (editor, "response", -                    G_CALLBACK (editor_response_cb), -                    NULL); - -  w = (GtkWidget *) gtk_builder_get_object  (builder, "color-scheme-combobox"); -  init_color_scheme_menu (w); - -  w = (GtkWidget *) gtk_builder_get_object  (builder, "darken-background-scale"); -  init_background_darkness_scale (w); - -  w = (GtkWidget *) gtk_builder_get_object  (builder, "background-image-filechooser"); -  setup_background_filechooser (w, profile); - -  /* Hook up the palette colorpickers and combo box */ - -  for (i = 0; i < TERMINAL_PALETTE_SIZE; ++i) -    { -      char name[32]; -      char *text; - -      g_snprintf (name, sizeof (name), "palette-colorpicker-%u", i + 1); -      w = (GtkWidget *) gtk_builder_get_object  (builder, name); - -      g_object_set_data (G_OBJECT (w), "palette-entry-index", GUINT_TO_POINTER (i)); - -      text = g_strdup_printf (_("Choose Palette Color %d"), i + 1); -      gtk_color_button_set_title (GTK_COLOR_BUTTON (w), text); -      g_free (text); - -      text = g_strdup_printf (_("Palette entry %d"), i + 1); -      gtk_widget_set_tooltip_text (w, text); -      g_free (text); - -      g_signal_connect (w, "notify::color", -                        G_CALLBACK (palette_color_notify_cb), -                        profile); -    } - -  profile_palette_notify_colorpickers_cb (profile, NULL, editor); -  g_signal_connect (profile, "notify::" TERMINAL_PROFILE_PALETTE, -                    G_CALLBACK (profile_palette_notify_colorpickers_cb), -                    editor); - -  w = (GtkWidget *) gtk_builder_get_object  (builder, "palette-combobox"); -  g_signal_connect (w, "notify::active", -                    G_CALLBACK (palette_scheme_combo_changed_cb), -                    profile); - -  profile_palette_notify_scheme_combo_cb (profile, NULL, GTK_COMBO_BOX (w)); -  g_signal_connect (profile, "notify::" TERMINAL_PROFILE_PALETTE, -                    G_CALLBACK (profile_palette_notify_scheme_combo_cb), -                    w); - -  /* Hook up the color scheme pickers and combo box */ -  w = (GtkWidget *) gtk_builder_get_object  (builder, "color-scheme-combobox"); -  g_signal_connect (w, "notify::active", -                    G_CALLBACK (color_scheme_combo_changed_cb), -                    profile); - -  profile_colors_notify_scheme_combo_cb (profile, NULL, GTK_COMBO_BOX (w)); -  g_signal_connect (profile, "notify::" TERMINAL_PROFILE_FOREGROUND_COLOR, -                    G_CALLBACK (profile_colors_notify_scheme_combo_cb), -                    w); -  g_signal_connect (profile, "notify::" TERMINAL_PROFILE_BACKGROUND_COLOR, -                    G_CALLBACK (profile_colors_notify_scheme_combo_cb), -                    w); +	char *path; +	GtkBuilder *builder; +	GError *error = NULL; +	GtkWidget *editor, *w; +	guint i; + +	editor = g_object_get_data (G_OBJECT (profile), "editor-window"); +	if (editor) +	{ +		terminal_profile_editor_focus_widget (editor, widget_name); + +		gtk_window_set_transient_for (GTK_WINDOW (editor), +		                              GTK_WINDOW (transient_parent)); +		gtk_window_present (GTK_WINDOW (editor)); +		return; +	} + +	path = g_build_filename (TERM_PKGDATADIR, "profile-preferences.ui", NULL); +	builder = gtk_builder_new (); +	if (!gtk_builder_add_from_file (builder, path, &error)) +	{ +		g_warning ("Failed to load %s: %s\n", path, error->message); +		g_error_free (error); +		g_free (path); +		g_object_unref (builder); +		return; +	} +	g_free (path); + +	editor = (GtkWidget *) gtk_builder_get_object  (builder, "profile-editor-dialog"); +	g_object_set_data_full (G_OBJECT (editor), "builder", +	                        builder, (GDestroyNotify) g_object_unref); + +	/* Store the dialogue on the profile, so we can acccess it above to check if +	 * there's already a profile editor for this profile. +	 */ +	g_object_set_data (G_OBJECT (profile), "editor-window", editor); + +	g_signal_connect (editor, "destroy", +	                  G_CALLBACK (profile_editor_destroyed), +	                  profile); + +	g_signal_connect (editor, "response", +	                  G_CALLBACK (editor_response_cb), +	                  NULL); + +	w = (GtkWidget *) gtk_builder_get_object  (builder, "color-scheme-combobox"); +	init_color_scheme_menu (w); + +	w = (GtkWidget *) gtk_builder_get_object  (builder, "darken-background-scale"); +	init_background_darkness_scale (w); + +	w = (GtkWidget *) gtk_builder_get_object  (builder, "background-image-filechooser"); +	setup_background_filechooser (w, profile); + +	/* Hook up the palette colorpickers and combo box */ + +	for (i = 0; i < TERMINAL_PALETTE_SIZE; ++i) +	{ +		char name[32]; +		char *text; + +		g_snprintf (name, sizeof (name), "palette-colorpicker-%u", i + 1); +		w = (GtkWidget *) gtk_builder_get_object  (builder, name); + +		g_object_set_data (G_OBJECT (w), "palette-entry-index", GUINT_TO_POINTER (i)); + +		text = g_strdup_printf (_("Choose Palette Color %d"), i + 1); +		gtk_color_button_set_title (GTK_COLOR_BUTTON (w), text); +		g_free (text); + +		text = g_strdup_printf (_("Palette entry %d"), i + 1); +		gtk_widget_set_tooltip_text (w, text); +		g_free (text); + +		g_signal_connect (w, "notify::color", +		                  G_CALLBACK (palette_color_notify_cb), +		                  profile); +	} + +	profile_palette_notify_colorpickers_cb (profile, NULL, editor); +	g_signal_connect (profile, "notify::" TERMINAL_PROFILE_PALETTE, +	                  G_CALLBACK (profile_palette_notify_colorpickers_cb), +	                  editor); + +	w = (GtkWidget *) gtk_builder_get_object  (builder, "palette-combobox"); +	g_signal_connect (w, "notify::active", +	                  G_CALLBACK (palette_scheme_combo_changed_cb), +	                  profile); + +	profile_palette_notify_scheme_combo_cb (profile, NULL, GTK_COMBO_BOX (w)); +	g_signal_connect (profile, "notify::" TERMINAL_PROFILE_PALETTE, +	                  G_CALLBACK (profile_palette_notify_scheme_combo_cb), +	                  w); + +	/* Hook up the color scheme pickers and combo box */ +	w = (GtkWidget *) gtk_builder_get_object  (builder, "color-scheme-combobox"); +	g_signal_connect (w, "notify::active", +	                  G_CALLBACK (color_scheme_combo_changed_cb), +	                  profile); + +	profile_colors_notify_scheme_combo_cb (profile, NULL, GTK_COMBO_BOX (w)); +	g_signal_connect (profile, "notify::" TERMINAL_PROFILE_FOREGROUND_COLOR, +	                  G_CALLBACK (profile_colors_notify_scheme_combo_cb), +	                  w); +	g_signal_connect (profile, "notify::" TERMINAL_PROFILE_BACKGROUND_COLOR, +	                  G_CALLBACK (profile_colors_notify_scheme_combo_cb), +	                  w);  #define CONNECT_WITH_FLAGS(name, prop, flags) terminal_util_bind_object_property_to_widget (G_OBJECT (profile), prop, (GtkWidget *) gtk_builder_get_object (builder, name), flags)  #define CONNECT(name, prop) CONNECT_WITH_FLAGS (name, prop, 0)  #define SET_ENUM_VALUE(name, value) g_object_set_data (gtk_builder_get_object (builder, name), "enum-value", GINT_TO_POINTER (value)) -  w = GTK_WIDGET (gtk_builder_get_object (builder, "custom-command-entry")); -  custom_command_entry_changed_cb (GTK_ENTRY (w)); -  g_signal_connect (w, "changed", -                    G_CALLBACK (custom_command_entry_changed_cb), NULL); -  w = GTK_WIDGET (gtk_builder_get_object (builder, "profile-name-entry")); -  g_signal_connect (w, "changed", -                    G_CALLBACK (visible_name_entry_changed_cb), editor); - -  g_signal_connect (gtk_builder_get_object  (builder, "reset-compat-defaults-button"), -                    "clicked", -                    G_CALLBACK (reset_compat_defaults_cb), -                    profile); - -  SET_ENUM_VALUE ("image-radiobutton", TERMINAL_BACKGROUND_IMAGE); -  SET_ENUM_VALUE ("solid-radiobutton", TERMINAL_BACKGROUND_SOLID); -  SET_ENUM_VALUE ("transparent-radiobutton", TERMINAL_BACKGROUND_TRANSPARENT); -  CONNECT ("allow-bold-checkbutton", TERMINAL_PROFILE_ALLOW_BOLD); -  CONNECT ("background-colorpicker", TERMINAL_PROFILE_BACKGROUND_COLOR); -  CONNECT ("background-image-filechooser", TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE); -  CONNECT ("backspace-binding-combobox", TERMINAL_PROFILE_BACKSPACE_BINDING); -  CONNECT ("bold-color-same-as-fg-checkbox", TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG); -  CONNECT ("bold-colorpicker", TERMINAL_PROFILE_BOLD_COLOR); -  CONNECT ("cursor-shape-combobox", TERMINAL_PROFILE_CURSOR_SHAPE); -  CONNECT ("custom-command-entry", TERMINAL_PROFILE_CUSTOM_COMMAND); -  CONNECT ("darken-background-scale", TERMINAL_PROFILE_BACKGROUND_DARKNESS); -  CONNECT ("default-size-columns-spinbutton", TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS); -  CONNECT ("default-size-rows-spinbutton", TERMINAL_PROFILE_DEFAULT_SIZE_ROWS); -  CONNECT ("delete-binding-combobox", TERMINAL_PROFILE_DELETE_BINDING); -  CONNECT ("exit-action-combobox", TERMINAL_PROFILE_EXIT_ACTION); -  CONNECT ("font-selector", TERMINAL_PROFILE_FONT); -  CONNECT ("foreground-colorpicker", TERMINAL_PROFILE_FOREGROUND_COLOR); -  CONNECT ("image-radiobutton", TERMINAL_PROFILE_BACKGROUND_TYPE); -  CONNECT ("login-shell-checkbutton", TERMINAL_PROFILE_LOGIN_SHELL); -  CONNECT ("profile-name-entry", TERMINAL_PROFILE_VISIBLE_NAME); -  CONNECT ("scrollback-lines-spinbutton", TERMINAL_PROFILE_SCROLLBACK_LINES); -  CONNECT ("scrollback-unlimited-checkbutton", TERMINAL_PROFILE_SCROLLBACK_UNLIMITED); -  CONNECT ("scroll-background-checkbutton", TERMINAL_PROFILE_SCROLL_BACKGROUND); -  CONNECT ("scrollbar-position-combobox", TERMINAL_PROFILE_SCROLLBAR_POSITION); -  CONNECT ("scroll-on-keystroke-checkbutton", TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE); -  CONNECT ("scroll-on-output-checkbutton", TERMINAL_PROFILE_SCROLL_ON_OUTPUT); -  CONNECT ("show-menubar-checkbutton", TERMINAL_PROFILE_DEFAULT_SHOW_MENUBAR); -  CONNECT ("solid-radiobutton", TERMINAL_PROFILE_BACKGROUND_TYPE); -  CONNECT ("system-font-checkbutton", TERMINAL_PROFILE_USE_SYSTEM_FONT); -  CONNECT ("title-entry", TERMINAL_PROFILE_TITLE); -  CONNECT ("title-mode-combobox", TERMINAL_PROFILE_TITLE_MODE); -  CONNECT ("transparent-radiobutton", TERMINAL_PROFILE_BACKGROUND_TYPE); -  CONNECT ("update-records-checkbutton", TERMINAL_PROFILE_UPDATE_RECORDS); -  CONNECT ("use-custom-command-checkbutton", TERMINAL_PROFILE_USE_CUSTOM_COMMAND); -  CONNECT ("use-custom-default-size-checkbutton", TERMINAL_PROFILE_USE_CUSTOM_DEFAULT_SIZE); -  CONNECT ("use-theme-colors-checkbutton", TERMINAL_PROFILE_USE_THEME_COLORS); -  CONNECT ("word-chars-entry", TERMINAL_PROFILE_WORD_CHARS); -  CONNECT_WITH_FLAGS ("bell-checkbutton", TERMINAL_PROFILE_SILENT_BELL, FLAG_INVERT_BOOL); +	w = GTK_WIDGET (gtk_builder_get_object (builder, "custom-command-entry")); +	custom_command_entry_changed_cb (GTK_ENTRY (w)); +	g_signal_connect (w, "changed", +	                  G_CALLBACK (custom_command_entry_changed_cb), NULL); +	w = GTK_WIDGET (gtk_builder_get_object (builder, "profile-name-entry")); +	g_signal_connect (w, "changed", +	                  G_CALLBACK (visible_name_entry_changed_cb), editor); + +	g_signal_connect (gtk_builder_get_object  (builder, "reset-compat-defaults-button"), +	                  "clicked", +	                  G_CALLBACK (reset_compat_defaults_cb), +	                  profile); + +	SET_ENUM_VALUE ("image-radiobutton", TERMINAL_BACKGROUND_IMAGE); +	SET_ENUM_VALUE ("solid-radiobutton", TERMINAL_BACKGROUND_SOLID); +	SET_ENUM_VALUE ("transparent-radiobutton", TERMINAL_BACKGROUND_TRANSPARENT); +	CONNECT ("allow-bold-checkbutton", TERMINAL_PROFILE_ALLOW_BOLD); +	CONNECT ("background-colorpicker", TERMINAL_PROFILE_BACKGROUND_COLOR); +	CONNECT ("background-image-filechooser", TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE); +	CONNECT ("backspace-binding-combobox", TERMINAL_PROFILE_BACKSPACE_BINDING); +	CONNECT ("bold-color-same-as-fg-checkbox", TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG); +	CONNECT ("bold-colorpicker", TERMINAL_PROFILE_BOLD_COLOR); +	CONNECT ("cursor-shape-combobox", TERMINAL_PROFILE_CURSOR_SHAPE); +	CONNECT ("custom-command-entry", TERMINAL_PROFILE_CUSTOM_COMMAND); +	CONNECT ("darken-background-scale", TERMINAL_PROFILE_BACKGROUND_DARKNESS); +	CONNECT ("default-size-columns-spinbutton", TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS); +	CONNECT ("default-size-rows-spinbutton", TERMINAL_PROFILE_DEFAULT_SIZE_ROWS); +	CONNECT ("delete-binding-combobox", TERMINAL_PROFILE_DELETE_BINDING); +	CONNECT ("exit-action-combobox", TERMINAL_PROFILE_EXIT_ACTION); +	CONNECT ("font-selector", TERMINAL_PROFILE_FONT); +	CONNECT ("foreground-colorpicker", TERMINAL_PROFILE_FOREGROUND_COLOR); +	CONNECT ("image-radiobutton", TERMINAL_PROFILE_BACKGROUND_TYPE); +	CONNECT ("login-shell-checkbutton", TERMINAL_PROFILE_LOGIN_SHELL); +	CONNECT ("profile-name-entry", TERMINAL_PROFILE_VISIBLE_NAME); +	CONNECT ("scrollback-lines-spinbutton", TERMINAL_PROFILE_SCROLLBACK_LINES); +	CONNECT ("scrollback-unlimited-checkbutton", TERMINAL_PROFILE_SCROLLBACK_UNLIMITED); +	CONNECT ("scroll-background-checkbutton", TERMINAL_PROFILE_SCROLL_BACKGROUND); +	CONNECT ("scrollbar-position-combobox", TERMINAL_PROFILE_SCROLLBAR_POSITION); +	CONNECT ("scroll-on-keystroke-checkbutton", TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE); +	CONNECT ("scroll-on-output-checkbutton", TERMINAL_PROFILE_SCROLL_ON_OUTPUT); +	CONNECT ("show-menubar-checkbutton", TERMINAL_PROFILE_DEFAULT_SHOW_MENUBAR); +	CONNECT ("solid-radiobutton", TERMINAL_PROFILE_BACKGROUND_TYPE); +	CONNECT ("system-font-checkbutton", TERMINAL_PROFILE_USE_SYSTEM_FONT); +	CONNECT ("title-entry", TERMINAL_PROFILE_TITLE); +	CONNECT ("title-mode-combobox", TERMINAL_PROFILE_TITLE_MODE); +	CONNECT ("transparent-radiobutton", TERMINAL_PROFILE_BACKGROUND_TYPE); +	CONNECT ("update-records-checkbutton", TERMINAL_PROFILE_UPDATE_RECORDS); +	CONNECT ("use-custom-command-checkbutton", TERMINAL_PROFILE_USE_CUSTOM_COMMAND); +	CONNECT ("use-custom-default-size-checkbutton", TERMINAL_PROFILE_USE_CUSTOM_DEFAULT_SIZE); +	CONNECT ("use-theme-colors-checkbutton", TERMINAL_PROFILE_USE_THEME_COLORS); +	CONNECT ("word-chars-entry", TERMINAL_PROFILE_WORD_CHARS); +	CONNECT_WITH_FLAGS ("bell-checkbutton", TERMINAL_PROFILE_SILENT_BELL, FLAG_INVERT_BOOL);  #undef CONNECT  #undef CONNECT_WITH_FLAGS  #undef SET_ENUM_VALUE -  profile_notify_sensitivity_cb (profile, NULL, editor); -  g_signal_connect (profile, "notify", -                    G_CALLBACK (profile_notify_sensitivity_cb), -                    editor); -  g_signal_connect (profile, -                    "forgotten", -                    G_CALLBACK (profile_forgotten_cb), -                    editor); +	profile_notify_sensitivity_cb (profile, NULL, editor); +	g_signal_connect (profile, "notify", +	                  G_CALLBACK (profile_notify_sensitivity_cb), +	                  editor); +	g_signal_connect (profile, +	                  "forgotten", +	                  G_CALLBACK (profile_forgotten_cb), +	                  editor); -  terminal_profile_editor_focus_widget (editor, widget_name); +	terminal_profile_editor_focus_widget (editor, widget_name); -  gtk_window_set_transient_for (GTK_WINDOW (editor), -                                GTK_WINDOW (transient_parent)); -  gtk_window_present (GTK_WINDOW (editor)); +	gtk_window_set_transient_for (GTK_WINDOW (editor), +	                              GTK_WINDOW (transient_parent)); +	gtk_window_present (GTK_WINDOW (editor));  } diff --git a/src/skey-popup.c b/src/skey-popup.c index 553e035..287c93b 100644 --- a/src/skey-popup.c +++ b/src/skey-popup.c @@ -30,199 +30,200 @@  #define SKEY_PREFIX "s/key "  #define OTP_PREFIX  "otp-" -typedef struct { -  TerminalScreen *screen; -  char *seed; -  int seq; -  int hash; +typedef struct +{ +	TerminalScreen *screen; +	char *seed; +	int seq; +	int hash;  } SkeyData;  static void  skey_data_free (SkeyData *data)  { -  g_free (data->seed); -  g_free (data); +	g_free (data->seed); +	g_free (data);  }  static gboolean  extract_seq_and_seed (const gchar  *skey_match, -		      gint         *seq, -		      gchar       **seed) +                      gint         *seq, +                      gchar       **seed)  { -  gchar *end_ptr = NULL; +	gchar *end_ptr = NULL; -  /* FIXME: use g_ascii_strtoll */ -  *seq = strtol (skey_match + strlen (SKEY_PREFIX), &end_ptr, 0); +	/* FIXME: use g_ascii_strtoll */ +	*seq = strtol (skey_match + strlen (SKEY_PREFIX), &end_ptr, 0); -  if (end_ptr == NULL || *end_ptr == '\000') -    return FALSE; +	if (end_ptr == NULL || *end_ptr == '\000') +		return FALSE; -  *seed = g_strdup (end_ptr + 1); +	*seed = g_strdup (end_ptr + 1); -  return TRUE; +	return TRUE;  }  static gboolean  extract_hash_seq_and_seed (const gchar  *otp_match, -			   gint         *hash, -	  	           gint         *seq, -		           gchar       **seed) +                           gint         *hash, +                           gint         *seq, +                           gchar       **seed)  { -  gchar *end_ptr = NULL; -  const gchar *p = otp_match + strlen (OTP_PREFIX); -  gint len = 3; - -  if (strncmp (p, "md4", 3) == 0) -    *hash = MD4; -  else if (strncmp (p, "md5", 3) == 0) -    *hash = MD5; -  else if (strncmp (p, "sha1", 4) == 0) -    { -      *hash = SHA1; -      len++; -    } -  else -    return FALSE; - -  p += len; - -  /* RFC mandates the following skipping */ -  while (*p == ' ' || *p == '\t') -    { -      if (*p == '\0') -	return FALSE; - -      p++; -    } - -  /* FIXME: use g_ascii_strtoll */ -  *seq = strtol (p, &end_ptr, 0); - -  if (end_ptr == NULL || *end_ptr == '\000') -    return FALSE; - -  p = end_ptr; - -  while (*p == ' ' || *p == '\t') -    { -      if (*p == '\0') -	return FALSE; -      p++; -    } - -  *seed = g_strdup (p); -  return TRUE; +	gchar *end_ptr = NULL; +	const gchar *p = otp_match + strlen (OTP_PREFIX); +	gint len = 3; + +	if (strncmp (p, "md4", 3) == 0) +		*hash = MD4; +	else if (strncmp (p, "md5", 3) == 0) +		*hash = MD5; +	else if (strncmp (p, "sha1", 4) == 0) +	{ +		*hash = SHA1; +		len++; +	} +	else +		return FALSE; + +	p += len; + +	/* RFC mandates the following skipping */ +	while (*p == ' ' || *p == '\t') +	{ +		if (*p == '\0') +			return FALSE; + +		p++; +	} + +	/* FIXME: use g_ascii_strtoll */ +	*seq = strtol (p, &end_ptr, 0); + +	if (end_ptr == NULL || *end_ptr == '\000') +		return FALSE; + +	p = end_ptr; + +	while (*p == ' ' || *p == '\t') +	{ +		if (*p == '\0') +			return FALSE; +		p++; +	} + +	*seed = g_strdup (p); +	return TRUE;  }  static void  skey_challenge_response_cb (GtkWidget *dialog,                              int response_id,                              SkeyData *data) -{   -  if (response_id == GTK_RESPONSE_OK) -    { -      GtkWidget *entry; -      const char *password; -      char *response; - -      entry = g_object_get_data (G_OBJECT (dialog), "skey-entry"); -      password = gtk_entry_get_text (GTK_ENTRY (entry)); - -      /* FIXME: fix skey to use g_malloc */ -      response = skey (data->hash, data->seq, data->seed, password); -      if (response) +{ +	if (response_id == GTK_RESPONSE_OK)  	{ -          VteTerminal *vte_terminal = VTE_TERMINAL (data->screen); -          static const char newline[2] = "\n"; - -	  vte_terminal_feed_child (vte_terminal, response, strlen (response)); -          vte_terminal_feed_child (vte_terminal, newline, strlen (newline)); -	  free (response); +		GtkWidget *entry; +		const char *password; +		char *response; + +		entry = g_object_get_data (G_OBJECT (dialog), "skey-entry"); +		password = gtk_entry_get_text (GTK_ENTRY (entry)); + +		/* FIXME: fix skey to use g_malloc */ +		response = skey (data->hash, data->seq, data->seed, password); +		if (response) +		{ +			VteTerminal *vte_terminal = VTE_TERMINAL (data->screen); +			static const char newline[2] = "\n"; + +			vte_terminal_feed_child (vte_terminal, response, strlen (response)); +			vte_terminal_feed_child (vte_terminal, newline, strlen (newline)); +			free (response); +		}  	} -    } -  gtk_widget_destroy (dialog); +	gtk_widget_destroy (dialog);  }  void  terminal_skey_do_popup (GtkWindow *window,                          TerminalScreen *screen, -			const gchar    *skey_match) +                        const gchar    *skey_match)  { -  GtkWidget *dialog, *label, *entry, *ok_button; -  char *title_text; -  char *seed; -  int seq; -  int hash = MD5; -  SkeyData *data; - -  if (strncmp (SKEY_PREFIX, skey_match, strlen (SKEY_PREFIX)) == 0) -    { -      if (!extract_seq_and_seed (skey_match, &seq, &seed)) +	GtkWidget *dialog, *label, *entry, *ok_button; +	char *title_text; +	char *seed; +	int seq; +	int hash = MD5; +	SkeyData *data; + +	if (strncmp (SKEY_PREFIX, skey_match, strlen (SKEY_PREFIX)) == 0)  	{ -	  terminal_util_show_error_dialog (window, NULL, NULL, -					   _("The text you clicked on doesn't " -					     "seem to be a valid S/Key " -					     "challenge.")); -	  return; +		if (!extract_seq_and_seed (skey_match, &seq, &seed)) +		{ +			terminal_util_show_error_dialog (window, NULL, NULL, +			                                 _("The text you clicked on doesn't " +			                                   "seem to be a valid S/Key " +			                                   "challenge.")); +			return; +		}  	} -    } -  else -    { -      if (!extract_hash_seq_and_seed (skey_match, &hash, &seq, &seed)) +	else  	{ -	  terminal_util_show_error_dialog (window, NULL, NULL, -					   _("The text you clicked on doesn't " -					     "seem to be a valid OTP " -					     "challenge.")); -	  return; +		if (!extract_hash_seq_and_seed (skey_match, &hash, &seq, &seed)) +		{ +			terminal_util_show_error_dialog (window, NULL, NULL, +			                                 _("The text you clicked on doesn't " +			                                   "seem to be a valid OTP " +			                                   "challenge.")); +			return; +		}  	} -    } - -  if (!terminal_util_load_builder_file ("skey-challenge.ui", -                                        "skey-dialog", &dialog, -                                        "skey-entry", &entry, -                                        "text-label", &label, -                                        "skey-ok-button", &ok_button, -                                        NULL)) -    { -      g_free (seed); -      return; -    } - -  title_text = g_strdup_printf ("<big><b>%s</b></big>", -                                gtk_label_get_text (GTK_LABEL (label))); -  gtk_label_set_label (GTK_LABEL (label), title_text); -  g_free (title_text); - -  g_object_set_data (G_OBJECT (dialog), "skey-entry", entry); - -  gtk_widget_grab_focus (entry); -  gtk_widget_grab_default (ok_button); -  gtk_entry_set_text (GTK_ENTRY (entry), ""); - -  gtk_window_set_transient_for (GTK_WINDOW (dialog), window); -  gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); -  gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE); - -  gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), -                                           GTK_RESPONSE_OK, -                                           GTK_RESPONSE_CANCEL, -                                           -1); - -  /* FIXME: make this dialogue close if the screen closes! */ - -  data = g_new (SkeyData, 1); -  data->hash = hash; -  data->seq = seq; -  data->seed = seed; -  data->screen = screen; - -  g_signal_connect_data (dialog, "response", -                         G_CALLBACK (skey_challenge_response_cb), -                         data, (GClosureNotify) skey_data_free, 0); -  g_signal_connect (dialog, "delete-event", -                    G_CALLBACK (terminal_util_dialog_response_on_delete), NULL); - -  gtk_window_present (GTK_WINDOW (dialog)); + +	if (!terminal_util_load_builder_file ("skey-challenge.ui", +	                                      "skey-dialog", &dialog, +	                                      "skey-entry", &entry, +	                                      "text-label", &label, +	                                      "skey-ok-button", &ok_button, +	                                      NULL)) +	{ +		g_free (seed); +		return; +	} + +	title_text = g_strdup_printf ("<big><b>%s</b></big>", +	                              gtk_label_get_text (GTK_LABEL (label))); +	gtk_label_set_label (GTK_LABEL (label), title_text); +	g_free (title_text); + +	g_object_set_data (G_OBJECT (dialog), "skey-entry", entry); + +	gtk_widget_grab_focus (entry); +	gtk_widget_grab_default (ok_button); +	gtk_entry_set_text (GTK_ENTRY (entry), ""); + +	gtk_window_set_transient_for (GTK_WINDOW (dialog), window); +	gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); +	gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE); + +	gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), +	        GTK_RESPONSE_OK, +	        GTK_RESPONSE_CANCEL, +	        -1); + +	/* FIXME: make this dialogue close if the screen closes! */ + +	data = g_new (SkeyData, 1); +	data->hash = hash; +	data->seq = seq; +	data->seed = seed; +	data->screen = screen; + +	g_signal_connect_data (dialog, "response", +	                       G_CALLBACK (skey_challenge_response_cb), +	                       data, (GClosureNotify) skey_data_free, 0); +	g_signal_connect (dialog, "delete-event", +	                  G_CALLBACK (terminal_util_dialog_response_on_delete), NULL); + +	gtk_window_present (GTK_WINDOW (dialog));  } diff --git a/src/skey-popup.h b/src/skey-popup.h index f4847eb..e0ac7cf 100644 --- a/src/skey-popup.h +++ b/src/skey-popup.h @@ -28,7 +28,7 @@ G_BEGIN_DECLS  void terminal_skey_do_popup (GtkWindow *window,                               TerminalScreen *screen, -			     const gchar    *skey_match); +                             const gchar    *skey_match);  G_END_DECLS diff --git a/src/skey/btoe.c b/src/skey/btoe.c index f9bd459..bad4e81 100644 --- a/src/skey/btoe.c +++ b/src/skey/btoe.c @@ -16,228 +16,228 @@ static guint32 extract (char *s, int start, int length);  /* Dictionary for integer-word translations */  static const char Wp[2048][4] = { "A", "ABE", "ACE", "ACT", "AD", "ADA", "ADD", -"AGO", "AID", "AIM", "AIR", "ALL", "ALP", "AM", "AMY", "AN", "ANA", -"AND", "ANN", "ANT", "ANY", "APE", "APS", "APT", "ARC", "ARE", "ARK", -"ARM", "ART", "AS", "ASH", "ASK", "AT", "ATE", "AUG", "AUK", "AVE", -"AWE", "AWK", "AWL", "AWN", "AX", "AYE", "BAD", "BAG", "BAH", "BAM", -"BAN", "BAR", "BAT", "BAY", "BE", "BED", "BEE", "BEG", "BEN", "BET", -"BEY", "BIB", "BID", "BIG", "BIN", "BIT", "BOB", "BOG", "BON", "BOO", -"BOP", "BOW", "BOY", "BUB", "BUD", "BUG", "BUM", "BUN", "BUS", "BUT", -"BUY", "BY", "BYE", "CAB", "CAL", "CAM", "CAN", "CAP", "CAR", "CAT", -"CAW", "COD", "COG", "COL", "CON", "COO", "COP", "COT", "COW", "COY", -"CRY", "CUB", "CUE", "CUP", "CUR", "CUT", "DAB", "DAD", "DAM", "DAN", -"DAR", "DAY", "DEE", "DEL", "DEN", "DES", "DEW", "DID", "DIE", "DIG", -"DIN", "DIP", "DO", "DOE", "DOG", "DON", "DOT", "DOW", "DRY", "DUB", -"DUD", "DUE", "DUG", "DUN", "EAR", "EAT", "ED", "EEL", "EGG", "EGO", -"ELI", "ELK", "ELM", "ELY", "EM", "END", "EST", "ETC", "EVA", "EVE", -"EWE", "EYE", "FAD", "FAN", "FAR", "FAT", "FAY", "FED", "FEE", "FEW", -"FIB", "FIG", "FIN", "FIR", "FIT", "FLO", "FLY", "FOE", "FOG", "FOR", -"FRY", "FUM", "FUN", "FUR", "GAB", "GAD", "GAG", "GAL", "GAM", "GAP", -"GAS", "GAY", "GEE", "GEL", "GEM", "GET", "GIG", "GIL", "GIN", "GO", -"GOT", "GUM", "GUN", "GUS", "GUT", "GUY", "GYM", "GYP", "HA", "HAD", -"HAL", "HAM", "HAN", "HAP", "HAS", "HAT", "HAW", "HAY", "HE", "HEM", -"HEN", "HER", "HEW", "HEY", "HI", "HID", "HIM", "HIP", "HIS", "HIT", -"HO", "HOB", "HOC", "HOE", "HOG", "HOP", "HOT", "HOW", "HUB", "HUE", -"HUG", "HUH", "HUM", "HUT", "I", "ICY", "IDA", "IF", "IKE", "ILL", -"INK", "INN", "IO", "ION", "IQ", "IRA", "IRE", "IRK", "IS", "IT", "ITS", -"IVY", "JAB", "JAG", "JAM", "JAN", "JAR", "JAW", "JAY", "JET", "JIG", -"JIM", "JO", "JOB", "JOE", "JOG", "JOT", "JOY", "JUG", "JUT", "KAY", -"KEG", "KEN", "KEY", "KID", "KIM", "KIN", "KIT", "LA", "LAB", "LAC", -"LAD", "LAG", "LAM", "LAP", "LAW", "LAY", "LEA", "LED", "LEE", "LEG", -"LEN", "LEO", "LET", "LEW", "LID", "LIE", "LIN", "LIP", "LIT", "LO", -"LOB", "LOG", "LOP", "LOS", "LOT", "LOU", "LOW", "LOY", "LUG", "LYE", -"MA", "MAC", "MAD", "MAE", "MAN", "MAO", "MAP", "MAT", "MAW", "MAY", -"ME", "MEG", "MEL", "MEN", "MET", "MEW", "MID", "MIN", "MIT", "MOB", -"MOD", "MOE", "MOO", "MOP", "MOS", "MOT", "MOW", "MUD", "MUG", "MUM", -"MY", "NAB", "NAG", "NAN", "NAP", "NAT", "NAY", "NE", "NED", "NEE", -"NET", "NEW", "NIB", "NIL", "NIP", "NIT", "NO", "NOB", "NOD", "NON", -"NOR", "NOT", "NOV", "NOW", "NU", "NUN", "NUT", "O", "OAF", "OAK", -"OAR", "OAT", "ODD", "ODE", "OF", "OFF", "OFT", "OH", "OIL", "OK", -"OLD", "ON", "ONE", "OR", "ORB", "ORE", "ORR", "OS", "OTT", "OUR", -"OUT", "OVA", "OW", "OWE", "OWL", "OWN", "OX", "PA", "PAD", "PAL", -"PAM", "PAN", "PAP", "PAR", "PAT", "PAW", "PAY", "PEA", "PEG", "PEN", -"PEP", "PER", "PET", "PEW", "PHI", "PI", "PIE", "PIN", "PIT", "PLY", -"PO", "POD", "POE", "POP", "POT", "POW", "PRO", "PRY", "PUB", "PUG", -"PUN", "PUP", "PUT", "QUO", "RAG", "RAM", "RAN", "RAP", "RAT", "RAW", -"RAY", "REB", "RED", "REP", "RET", "RIB", "RID", "RIG", "RIM", "RIO", -"RIP", "ROB", "ROD", "ROE", "RON", "ROT", "ROW", "ROY", "RUB", "RUE", -"RUG", "RUM", "RUN", "RYE", "SAC", "SAD", "SAG", "SAL", "SAM", "SAN", -"SAP", "SAT", "SAW", "SAY", "SEA", "SEC", "SEE", "SEN", "SET", "SEW", -"SHE", "SHY", "SIN", "SIP", "SIR", "SIS", "SIT", "SKI", "SKY", "SLY", -"SO", "SOB", "SOD", "SON", "SOP", "SOW", "SOY", "SPA", "SPY", "SUB", -"SUD", "SUE", "SUM", "SUN", "SUP", "TAB", "TAD", "TAG", "TAN", "TAP", -"TAR", "TEA", "TED", "TEE", "TEN", "THE", "THY", "TIC", "TIE", "TIM", -"TIN", "TIP", "TO", "TOE", "TOG", "TOM", "TON", "TOO", "TOP", "TOW", -"TOY", "TRY", "TUB", "TUG", "TUM", "TUN", "TWO", "UN", "UP", "US", -"USE", "VAN", "VAT", "VET", "VIE", "WAD", "WAG", "WAR", "WAS", "WAY", -"WE", "WEB", "WED", "WEE", "WET", "WHO", "WHY", "WIN", "WIT", "WOK", -"WON", "WOO", "WOW", "WRY", "WU", "YAM", "YAP", "YAW", "YE", "YEA", -"YES", "YET", "YOU", "ABED", "ABEL", "ABET", "ABLE", "ABUT", "ACHE", -"ACID", "ACME", "ACRE", "ACTA", "ACTS", "ADAM", "ADDS", "ADEN", "AFAR", -"AFRO", "AGEE", "AHEM", "AHOY", "AIDA", "AIDE", "AIDS", "AIRY", "AJAR", -"AKIN", "ALAN", "ALEC", "ALGA", "ALIA", "ALLY", "ALMA", "ALOE", "ALSO", -"ALTO", "ALUM", "ALVA", "AMEN", "AMES", "AMID", "AMMO", "AMOK", "AMOS", -"AMRA", "ANDY", "ANEW", "ANNA", "ANNE", "ANTE", "ANTI", "AQUA", "ARAB", -"ARCH", "AREA", "ARGO", "ARID", "ARMY", "ARTS", "ARTY", "ASIA", "ASKS", -"ATOM", "AUNT", "AURA", "AUTO", "AVER", "AVID", "AVIS", "AVON", "AVOW", -"AWAY", "AWRY", "BABE", "BABY", "BACH", "BACK", "BADE", "BAIL", "BAIT", -"BAKE", "BALD", "BALE", "BALI", "BALK", "BALL", "BALM", "BAND", "BANE", -"BANG", "BANK", "BARB", "BARD", "BARE", "BARK", "BARN", "BARR", "BASE", -"BASH", "BASK", "BASS", "BATE", "BATH", "BAWD", "BAWL", "BEAD", "BEAK", -"BEAM", "BEAN", "BEAR", "BEAT", "BEAU", "BECK", "BEEF", "BEEN", "BEER", -"BEET", "BELA", "BELL", "BELT", "BEND", "BENT", "BERG", "BERN", "BERT", -"BESS", "BEST", "BETA", "BETH", "BHOY", "BIAS", "BIDE", "BIEN", "BILE", -"BILK", "BILL", "BIND", "BING", "BIRD", "BITE", "BITS", "BLAB", "BLAT", -"BLED", "BLEW", "BLOB", "BLOC", "BLOT", "BLOW", "BLUE", "BLUM", "BLUR", -"BOAR", "BOAT", "BOCA", "BOCK", "BODE", "BODY", "BOGY", "BOHR", "BOIL", -"BOLD", "BOLO", "BOLT", "BOMB", "BONA", "BOND", "BONE", "BONG", "BONN", -"BONY", "BOOK", "BOOM", "BOON", "BOOT", "BORE", "BORG", "BORN", "BOSE", -"BOSS", "BOTH", "BOUT", "BOWL", "BOYD", "BRAD", "BRAE", "BRAG", "BRAN", -"BRAY", "BRED", "BREW", "BRIG", "BRIM", "BROW", "BUCK", "BUDD", "BUFF", -"BULB", "BULK", "BULL", "BUNK", "BUNT", "BUOY", "BURG", "BURL", "BURN", -"BURR", "BURT", "BURY", "BUSH", "BUSS", "BUST", "BUSY", "BYTE", "CADY", -"CAFE", "CAGE", "CAIN", "CAKE", "CALF", "CALL", "CALM", "CAME", "CANE", -"CANT", "CARD", "CARE", "CARL", "CARR", "CART", "CASE", "CASH", "CASK", -"CAST", "CAVE", "CEIL", "CELL", "CENT", "CERN", "CHAD", "CHAR", "CHAT", -"CHAW", "CHEF", "CHEN", "CHEW", "CHIC", "CHIN", "CHOU", "CHOW", "CHUB", -"CHUG", "CHUM", "CITE", "CITY", "CLAD", "CLAM", "CLAN", "CLAW", "CLAY", -"CLOD", "CLOG", "CLOT", "CLUB", "CLUE", "COAL", "COAT", "COCA", "COCK", -"COCO", "CODA", "CODE", "CODY", "COED", "COIL", "COIN", "COKE", "COLA", -"COLD", "COLT", "COMA", "COMB", "COME", "COOK", "COOL", "COON", "COOT", -"CORD", "CORE", "CORK", "CORN", "COST", "COVE", "COWL", "CRAB", "CRAG", -"CRAM", "CRAY", "CREW", "CRIB", "CROW", "CRUD", "CUBA", "CUBE", "CUFF", -"CULL", "CULT", "CUNY", "CURB", "CURD", "CURE", "CURL", "CURT", "CUTS", -"DADE", "DALE", "DAME", "DANA", "DANE", "DANG", "DANK", "DARE", "DARK", -"DARN", "DART", "DASH", "DATA", "DATE", "DAVE", "DAVY", "DAWN", "DAYS", -"DEAD", "DEAF", "DEAL", "DEAN", "DEAR", "DEBT", "DECK", "DEED", "DEEM", -"DEER", "DEFT", "DEFY", "DELL", "DENT", "DENY", "DESK", "DIAL", "DICE", -"DIED", "DIET", "DIME", "DINE", "DING", "DINT", "DIRE", "DIRT", "DISC", -"DISH", "DISK", "DIVE", "DOCK", "DOES", "DOLE", "DOLL", "DOLT", "DOME", -"DONE", "DOOM", "DOOR", "DORA", "DOSE", "DOTE", "DOUG", "DOUR", "DOVE", -"DOWN", "DRAB", "DRAG", "DRAM", "DRAW", "DREW", "DRUB", "DRUG", "DRUM", -"DUAL", "DUCK", "DUCT", "DUEL", "DUET", "DUKE", "DULL", "DUMB", "DUNE", -"DUNK", "DUSK", "DUST", "DUTY", "EACH", "EARL", "EARN", "EASE", "EAST", -"EASY", "EBEN", "ECHO", "EDDY", "EDEN", "EDGE", "EDGY", "EDIT", "EDNA", -"EGAN", "ELAN", "ELBA", "ELLA", "ELSE", "EMIL", "EMIT", "EMMA", "ENDS", -"ERIC", "EROS", "EVEN", "EVER", "EVIL", "EYED", "FACE", "FACT", "FADE", -"FAIL", "FAIN", "FAIR", "FAKE", "FALL", "FAME", "FANG", "FARM", "FAST", -"FATE", "FAWN", "FEAR", "FEAT", "FEED", "FEEL", "FEET", "FELL", "FELT", -"FEND", "FERN", "FEST", "FEUD", "FIEF", "FIGS", "FILE", "FILL", "FILM", -"FIND", "FINE", "FINK", "FIRE", "FIRM", "FISH", "FISK", "FIST", "FITS", -"FIVE", "FLAG", "FLAK", "FLAM", "FLAT", "FLAW", "FLEA", "FLED", "FLEW", -"FLIT", "FLOC", "FLOG", "FLOW", "FLUB", "FLUE", "FOAL", "FOAM", "FOGY", -"FOIL", "FOLD", "FOLK", "FOND", "FONT", "FOOD", "FOOL", "FOOT", "FORD", -"FORE", "FORK", "FORM", "FORT", "FOSS", "FOUL", "FOUR", "FOWL", "FRAU", -"FRAY", "FRED", "FREE", "FRET", "FREY", "FROG", "FROM", "FUEL", "FULL", -"FUME", "FUND", "FUNK", "FURY", "FUSE", "FUSS", "GAFF", "GAGE", "GAIL", -"GAIN", "GAIT", "GALA", "GALE", "GALL", "GALT", "GAME", "GANG", "GARB", -"GARY", "GASH", "GATE", "GAUL", "GAUR", "GAVE", "GAWK", "GEAR", "GELD", -"GENE", "GENT", "GERM", "GETS", "GIBE", "GIFT", "GILD", "GILL", "GILT", -"GINA", "GIRD", "GIRL", "GIST", "GIVE", "GLAD", "GLEE", "GLEN", "GLIB", -"GLOB", "GLOM", "GLOW", "GLUE", "GLUM", "GLUT", "GOAD", "GOAL", "GOAT", -"GOER", "GOES", "GOLD", "GOLF", "GONE", "GONG", "GOOD", "GOOF", "GORE", -"GORY", "GOSH", "GOUT", "GOWN", "GRAB", "GRAD", "GRAY", "GREG", "GREW", -"GREY", "GRID", "GRIM", "GRIN", "GRIT", "GROW", "GRUB", "GULF", "GULL", -"GUNK", "GURU", "GUSH", "GUST", "GWEN", "GWYN", "HAAG", "HAAS", "HACK", -"HAIL", "HAIR", "HALE", "HALF", "HALL", "HALO", "HALT", "HAND", "HANG", -"HANK", "HANS", "HARD", "HARK", "HARM", "HART", "HASH", "HAST", "HATE", -"HATH", "HAUL", "HAVE", "HAWK", "HAYS", "HEAD", "HEAL", "HEAR", "HEAT", -"HEBE", "HECK", "HEED", "HEEL", "HEFT", "HELD", "HELL", "HELM", "HERB", -"HERD", "HERE", "HERO", "HERS", "HESS", "HEWN", "HICK", "HIDE", "HIGH", -"HIKE", "HILL", "HILT", "HIND", "HINT", "HIRE", "HISS", "HIVE", "HOBO", -"HOCK", "HOFF", "HOLD", "HOLE", "HOLM", "HOLT", "HOME", "HONE", "HONK", -"HOOD", "HOOF", "HOOK", "HOOT", "HORN", "HOSE", "HOST", "HOUR", "HOVE", -"HOWE", "HOWL", "HOYT", "HUCK", "HUED", "HUFF", "HUGE", "HUGH", "HUGO", -"HULK", "HULL", "HUNK", "HUNT", "HURD", "HURL", "HURT", "HUSH", "HYDE", -"HYMN", "IBIS", "ICON", "IDEA", "IDLE", "IFFY", "INCA", "INCH", "INTO", -"IONS", "IOTA", "IOWA", "IRIS", "IRMA", "IRON", "ISLE", "ITCH", "ITEM", -"IVAN", "JACK", "JADE", "JAIL", "JAKE", "JANE", "JAVA", "JEAN", "JEFF", -"JERK", "JESS", "JEST", "JIBE", "JILL", "JILT", "JIVE", "JOAN", "JOBS", -"JOCK", "JOEL", "JOEY", "JOHN", "JOIN", "JOKE", "JOLT", "JOVE", "JUDD", -"JUDE", "JUDO", "JUDY", "JUJU", "JUKE", "JULY", "JUNE", "JUNK", "JUNO", -"JURY", "JUST", "JUTE", "KAHN", "KALE", "KANE", "KANT", "KARL", "KATE", -"KEEL", "KEEN", "KENO", "KENT", "KERN", "KERR", "KEYS", "KICK", "KILL", -"KIND", "KING", "KIRK", "KISS", "KITE", "KLAN", "KNEE", "KNEW", "KNIT", -"KNOB", "KNOT", "KNOW", "KOCH", "KONG", "KUDO", "KURD", "KURT", "KYLE", -"LACE", "LACK", "LACY", "LADY", "LAID", "LAIN", "LAIR", "LAKE", "LAMB", -"LAME", "LAND", "LANE", "LANG", "LARD", "LARK", "LASS", "LAST", "LATE", -"LAUD", "LAVA", "LAWN", "LAWS", "LAYS", "LEAD", "LEAF", "LEAK", "LEAN", -"LEAR", "LEEK", "LEER", "LEFT", "LEND", "LENS", "LENT", "LEON", "LESK", -"LESS", "LEST", "LETS", "LIAR", "LICE", "LICK", "LIED", "LIEN", "LIES", -"LIEU", "LIFE", "LIFT", "LIKE", "LILA", "LILT", "LILY", "LIMA", "LIMB", -"LIME", "LIND", "LINE", "LINK", "LINT", "LION", "LISA", "LIST", "LIVE", -"LOAD", "LOAF", "LOAM", "LOAN", "LOCK", "LOFT", "LOGE", "LOIS", "LOLA", -"LONE", "LONG", "LOOK", "LOON", "LOOT", "LORD", "LORE", "LOSE", "LOSS", -"LOST", "LOUD", "LOVE", "LOWE", "LUCK", "LUCY", "LUGE", "LUKE", "LULU", -"LUND", "LUNG", "LURA", "LURE", "LURK", "LUSH", "LUST", "LYLE", "LYNN", -"LYON", "LYRA", "MACE", "MADE", "MAGI", "MAID", "MAIL", "MAIN", "MAKE", -"MALE", "MALI", "MALL", "MALT", "MANA", "MANN", "MANY", "MARC", "MARE", -"MARK", "MARS", "MART", "MARY", "MASH", "MASK", "MASS", "MAST", "MATE", -"MATH", "MAUL", "MAYO", "MEAD", "MEAL", "MEAN", "MEAT", "MEEK", "MEET", -"MELD", "MELT", "MEMO", "MEND", "MENU", "MERT", "MESH", "MESS", "MICE", -"MIKE", "MILD", "MILE", "MILK", "MILL", "MILT", "MIMI", "MIND", "MINE", -"MINI", "MINK", "MINT", "MIRE", "MISS", "MIST", "MITE", "MITT", "MOAN", -"MOAT", "MOCK", "MODE", "MOLD", "MOLE", "MOLL", "MOLT", "MONA", "MONK", -"MONT", "MOOD", "MOON", "MOOR", "MOOT", "MORE", "MORN", "MORT", "MOSS", -"MOST", "MOTH", "MOVE", "MUCH", "MUCK", "MUDD", "MUFF", "MULE", "MULL", -"MURK", "MUSH", "MUST", "MUTE", "MUTT", "MYRA", "MYTH", "NAGY", "NAIL", -"NAIR", "NAME", "NARY", "NASH", "NAVE", "NAVY", "NEAL", "NEAR", "NEAT", -"NECK", "NEED", "NEIL", "NELL", "NEON", "NERO", "NESS", "NEST", "NEWS", -"NEWT", "NIBS", "NICE", "NICK", "NILE", "NINA", "NINE", "NOAH", "NODE", -"NOEL", "NOLL", "NONE", "NOOK", "NOON", "NORM", "NOSE", "NOTE", "NOUN", -"NOVA", "NUDE", "NULL", "NUMB", "OATH", "OBEY", "OBOE", "ODIN", "OHIO", -"OILY", "OINT", "OKAY", "OLAF", "OLDY", "OLGA", "OLIN", "OMAN", "OMEN", -"OMIT", "ONCE", "ONES", "ONLY", "ONTO", "ONUS", "ORAL", "ORGY", "OSLO", -"OTIS", "OTTO", "OUCH", "OUST", "OUTS", "OVAL", "OVEN", "OVER", "OWLY", -"OWNS", "QUAD", "QUIT", "QUOD", "RACE", "RACK", "RACY", "RAFT", "RAGE", -"RAID", "RAIL", "RAIN", "RAKE", "RANK", "RANT", "RARE", "RASH", "RATE", -"RAVE", "RAYS", "READ", "REAL", "REAM", "REAR", "RECK", "REED", "REEF", -"REEK", "REEL", "REID", "REIN", "RENA", "REND", "RENT", "REST", "RICE", -"RICH", "RICK", "RIDE", "RIFT", "RILL", "RIME", "RING", "RINK", "RISE", -"RISK", "RITE", "ROAD", "ROAM", "ROAR", "ROBE", "ROCK", "RODE", "ROIL", -"ROLL", "ROME", "ROOD", "ROOF", "ROOK", "ROOM", "ROOT", "ROSA", "ROSE", -"ROSS", "ROSY", "ROTH", "ROUT", "ROVE", "ROWE", "ROWS", "RUBE", "RUBY", -"RUDE", "RUDY", "RUIN", "RULE", "RUNG", "RUNS", "RUNT", "RUSE", "RUSH", -"RUSK", "RUSS", "RUST", "RUTH", "SACK", "SAFE", "SAGE", "SAID", "SAIL", -"SALE", "SALK", "SALT", "SAME", "SAND", "SANE", "SANG", "SANK", "SARA", -"SAUL", "SAVE", "SAYS", "SCAN", "SCAR", "SCAT", "SCOT", "SEAL", "SEAM", -"SEAR", "SEAT", "SEED", "SEEK", "SEEM", "SEEN", "SEES", "SELF", "SELL", -"SEND", "SENT", "SETS", "SEWN", "SHAG", "SHAM", "SHAW", "SHAY", "SHED", -"SHIM", "SHIN", "SHOD", "SHOE", "SHOT", "SHOW", "SHUN", "SHUT", "SICK", -"SIDE", "SIFT", "SIGH", "SIGN", "SILK", "SILL", "SILO", "SILT", "SINE", -"SING", "SINK", "SIRE", "SITE", "SITS", "SITU", "SKAT", "SKEW", "SKID", -"SKIM", "SKIN", "SKIT", "SLAB", "SLAM", "SLAT", "SLAY", "SLED", "SLEW", -"SLID", "SLIM", "SLIT", "SLOB", "SLOG", "SLOT", "SLOW", "SLUG", "SLUM", -"SLUR", "SMOG", "SMUG", "SNAG", "SNOB", "SNOW", "SNUB", "SNUG", "SOAK", -"SOAR", "SOCK", "SODA", "SOFA", "SOFT", "SOIL", "SOLD", "SOME", "SONG", -"SOON", "SOOT", "SORE", "SORT", "SOUL", "SOUR", "SOWN", "STAB", "STAG", -"STAN", "STAR", "STAY", "STEM", "STEW", "STIR", "STOW", "STUB", "STUN", -"SUCH", "SUDS", "SUIT", "SULK", "SUMS", "SUNG", "SUNK", "SURE", "SURF", -"SWAB", "SWAG", "SWAM", "SWAN", "SWAT", "SWAY", "SWIM", "SWUM", "TACK", -"TACT", "TAIL", "TAKE", "TALE", "TALK", "TALL", "TANK", "TASK", "TATE", -"TAUT", "TEAL", "TEAM", "TEAR", "TECH", "TEEM", "TEEN", "TEET", "TELL", -"TEND", "TENT", "TERM", "TERN", "TESS", "TEST", "THAN", "THAT", "THEE", -"THEM", "THEN", "THEY", "THIN", "THIS", "THUD", "THUG", "TICK", "TIDE", -"TIDY", "TIED", "TIER", "TILE", "TILL", "TILT", "TIME", "TINA", "TINE", -"TINT", "TINY", "TIRE", "TOAD", "TOGO", "TOIL", "TOLD", "TOLL", "TONE", -"TONG", "TONY", "TOOK", "TOOL", "TOOT", "TORE", "TORN", "TOTE", "TOUR", -"TOUT", "TOWN", "TRAG", "TRAM", "TRAY", "TREE", "TREK", "TRIG", "TRIM", -"TRIO", "TROD", "TROT", "TROY", "TRUE", "TUBA", "TUBE", "TUCK", "TUFT", -"TUNA", "TUNE", "TUNG", "TURF", "TURN", "TUSK", "TWIG", "TWIN", "TWIT", -"ULAN", "UNIT", "URGE", "USED", "USER", "USES", "UTAH", "VAIL", "VAIN", -"VALE", "VARY", "VASE", "VAST", "VEAL", "VEDA", "VEIL", "VEIN", "VEND", -"VENT", "VERB", "VERY", "VETO", "VICE", "VIEW", "VINE", "VISE", "VOID", -"VOLT", "VOTE", "WACK", "WADE", "WAGE", "WAIL", "WAIT", "WAKE", "WALE", -"WALK", "WALL", "WALT", "WAND", "WANE", "WANG", "WANT", "WARD", "WARM", -"WARN", "WART", "WASH", "WAST", "WATS", "WATT", "WAVE", "WAVY", "WAYS", -"WEAK", "WEAL", "WEAN", "WEAR", "WEED", "WEEK", "WEIR", "WELD", "WELL", -"WELT", "WENT", "WERE", "WERT", "WEST", "WHAM", "WHAT", "WHEE", "WHEN", -"WHET", "WHOA", "WHOM", "WICK", "WIFE", "WILD", "WILL", "WIND", "WINE", -"WING", "WINK", "WINO", "WIRE", "WISE", "WISH", "WITH", "WOLF", "WONT", -"WOOD", "WOOL", "WORD", "WORE", "WORK", "WORM", "WORN", "WOVE", "WRIT", -"WYNN", "YALE", "YANG", "YANK", "YARD", "YARN", "YAWL", "YAWN", "YEAH", -"YEAR", "YELL", "YOGA", "YOKE" -}; +                                  "AGO", "AID", "AIM", "AIR", "ALL", "ALP", "AM", "AMY", "AN", "ANA", +                                  "AND", "ANN", "ANT", "ANY", "APE", "APS", "APT", "ARC", "ARE", "ARK", +                                  "ARM", "ART", "AS", "ASH", "ASK", "AT", "ATE", "AUG", "AUK", "AVE", +                                  "AWE", "AWK", "AWL", "AWN", "AX", "AYE", "BAD", "BAG", "BAH", "BAM", +                                  "BAN", "BAR", "BAT", "BAY", "BE", "BED", "BEE", "BEG", "BEN", "BET", +                                  "BEY", "BIB", "BID", "BIG", "BIN", "BIT", "BOB", "BOG", "BON", "BOO", +                                  "BOP", "BOW", "BOY", "BUB", "BUD", "BUG", "BUM", "BUN", "BUS", "BUT", +                                  "BUY", "BY", "BYE", "CAB", "CAL", "CAM", "CAN", "CAP", "CAR", "CAT", +                                  "CAW", "COD", "COG", "COL", "CON", "COO", "COP", "COT", "COW", "COY", +                                  "CRY", "CUB", "CUE", "CUP", "CUR", "CUT", "DAB", "DAD", "DAM", "DAN", +                                  "DAR", "DAY", "DEE", "DEL", "DEN", "DES", "DEW", "DID", "DIE", "DIG", +                                  "DIN", "DIP", "DO", "DOE", "DOG", "DON", "DOT", "DOW", "DRY", "DUB", +                                  "DUD", "DUE", "DUG", "DUN", "EAR", "EAT", "ED", "EEL", "EGG", "EGO", +                                  "ELI", "ELK", "ELM", "ELY", "EM", "END", "EST", "ETC", "EVA", "EVE", +                                  "EWE", "EYE", "FAD", "FAN", "FAR", "FAT", "FAY", "FED", "FEE", "FEW", +                                  "FIB", "FIG", "FIN", "FIR", "FIT", "FLO", "FLY", "FOE", "FOG", "FOR", +                                  "FRY", "FUM", "FUN", "FUR", "GAB", "GAD", "GAG", "GAL", "GAM", "GAP", +                                  "GAS", "GAY", "GEE", "GEL", "GEM", "GET", "GIG", "GIL", "GIN", "GO", +                                  "GOT", "GUM", "GUN", "GUS", "GUT", "GUY", "GYM", "GYP", "HA", "HAD", +                                  "HAL", "HAM", "HAN", "HAP", "HAS", "HAT", "HAW", "HAY", "HE", "HEM", +                                  "HEN", "HER", "HEW", "HEY", "HI", "HID", "HIM", "HIP", "HIS", "HIT", +                                  "HO", "HOB", "HOC", "HOE", "HOG", "HOP", "HOT", "HOW", "HUB", "HUE", +                                  "HUG", "HUH", "HUM", "HUT", "I", "ICY", "IDA", "IF", "IKE", "ILL", +                                  "INK", "INN", "IO", "ION", "IQ", "IRA", "IRE", "IRK", "IS", "IT", "ITS", +                                  "IVY", "JAB", "JAG", "JAM", "JAN", "JAR", "JAW", "JAY", "JET", "JIG", +                                  "JIM", "JO", "JOB", "JOE", "JOG", "JOT", "JOY", "JUG", "JUT", "KAY", +                                  "KEG", "KEN", "KEY", "KID", "KIM", "KIN", "KIT", "LA", "LAB", "LAC", +                                  "LAD", "LAG", "LAM", "LAP", "LAW", "LAY", "LEA", "LED", "LEE", "LEG", +                                  "LEN", "LEO", "LET", "LEW", "LID", "LIE", "LIN", "LIP", "LIT", "LO", +                                  "LOB", "LOG", "LOP", "LOS", "LOT", "LOU", "LOW", "LOY", "LUG", "LYE", +                                  "MA", "MAC", "MAD", "MAE", "MAN", "MAO", "MAP", "MAT", "MAW", "MAY", +                                  "ME", "MEG", "MEL", "MEN", "MET", "MEW", "MID", "MIN", "MIT", "MOB", +                                  "MOD", "MOE", "MOO", "MOP", "MOS", "MOT", "MOW", "MUD", "MUG", "MUM", +                                  "MY", "NAB", "NAG", "NAN", "NAP", "NAT", "NAY", "NE", "NED", "NEE", +                                  "NET", "NEW", "NIB", "NIL", "NIP", "NIT", "NO", "NOB", "NOD", "NON", +                                  "NOR", "NOT", "NOV", "NOW", "NU", "NUN", "NUT", "O", "OAF", "OAK", +                                  "OAR", "OAT", "ODD", "ODE", "OF", "OFF", "OFT", "OH", "OIL", "OK", +                                  "OLD", "ON", "ONE", "OR", "ORB", "ORE", "ORR", "OS", "OTT", "OUR", +                                  "OUT", "OVA", "OW", "OWE", "OWL", "OWN", "OX", "PA", "PAD", "PAL", +                                  "PAM", "PAN", "PAP", "PAR", "PAT", "PAW", "PAY", "PEA", "PEG", "PEN", +                                  "PEP", "PER", "PET", "PEW", "PHI", "PI", "PIE", "PIN", "PIT", "PLY", +                                  "PO", "POD", "POE", "POP", "POT", "POW", "PRO", "PRY", "PUB", "PUG", +                                  "PUN", "PUP", "PUT", "QUO", "RAG", "RAM", "RAN", "RAP", "RAT", "RAW", +                                  "RAY", "REB", "RED", "REP", "RET", "RIB", "RID", "RIG", "RIM", "RIO", +                                  "RIP", "ROB", "ROD", "ROE", "RON", "ROT", "ROW", "ROY", "RUB", "RUE", +                                  "RUG", "RUM", "RUN", "RYE", "SAC", "SAD", "SAG", "SAL", "SAM", "SAN", +                                  "SAP", "SAT", "SAW", "SAY", "SEA", "SEC", "SEE", "SEN", "SET", "SEW", +                                  "SHE", "SHY", "SIN", "SIP", "SIR", "SIS", "SIT", "SKI", "SKY", "SLY", +                                  "SO", "SOB", "SOD", "SON", "SOP", "SOW", "SOY", "SPA", "SPY", "SUB", +                                  "SUD", "SUE", "SUM", "SUN", "SUP", "TAB", "TAD", "TAG", "TAN", "TAP", +                                  "TAR", "TEA", "TED", "TEE", "TEN", "THE", "THY", "TIC", "TIE", "TIM", +                                  "TIN", "TIP", "TO", "TOE", "TOG", "TOM", "TON", "TOO", "TOP", "TOW", +                                  "TOY", "TRY", "TUB", "TUG", "TUM", "TUN", "TWO", "UN", "UP", "US", +                                  "USE", "VAN", "VAT", "VET", "VIE", "WAD", "WAG", "WAR", "WAS", "WAY", +                                  "WE", "WEB", "WED", "WEE", "WET", "WHO", "WHY", "WIN", "WIT", "WOK", +                                  "WON", "WOO", "WOW", "WRY", "WU", "YAM", "YAP", "YAW", "YE", "YEA", +                                  "YES", "YET", "YOU", "ABED", "ABEL", "ABET", "ABLE", "ABUT", "ACHE", +                                  "ACID", "ACME", "ACRE", "ACTA", "ACTS", "ADAM", "ADDS", "ADEN", "AFAR", +                                  "AFRO", "AGEE", "AHEM", "AHOY", "AIDA", "AIDE", "AIDS", "AIRY", "AJAR", +                                  "AKIN", "ALAN", "ALEC", "ALGA", "ALIA", "ALLY", "ALMA", "ALOE", "ALSO", +                                  "ALTO", "ALUM", "ALVA", "AMEN", "AMES", "AMID", "AMMO", "AMOK", "AMOS", +                                  "AMRA", "ANDY", "ANEW", "ANNA", "ANNE", "ANTE", "ANTI", "AQUA", "ARAB", +                                  "ARCH", "AREA", "ARGO", "ARID", "ARMY", "ARTS", "ARTY", "ASIA", "ASKS", +                                  "ATOM", "AUNT", "AURA", "AUTO", "AVER", "AVID", "AVIS", "AVON", "AVOW", +                                  "AWAY", "AWRY", "BABE", "BABY", "BACH", "BACK", "BADE", "BAIL", "BAIT", +                                  "BAKE", "BALD", "BALE", "BALI", "BALK", "BALL", "BALM", "BAND", "BANE", +                                  "BANG", "BANK", "BARB", "BARD", "BARE", "BARK", "BARN", "BARR", "BASE", +                                  "BASH", "BASK", "BASS", "BATE", "BATH", "BAWD", "BAWL", "BEAD", "BEAK", +                                  "BEAM", "BEAN", "BEAR", "BEAT", "BEAU", "BECK", "BEEF", "BEEN", "BEER", +                                  "BEET", "BELA", "BELL", "BELT", "BEND", "BENT", "BERG", "BERN", "BERT", +                                  "BESS", "BEST", "BETA", "BETH", "BHOY", "BIAS", "BIDE", "BIEN", "BILE", +                                  "BILK", "BILL", "BIND", "BING", "BIRD", "BITE", "BITS", "BLAB", "BLAT", +                                  "BLED", "BLEW", "BLOB", "BLOC", "BLOT", "BLOW", "BLUE", "BLUM", "BLUR", +                                  "BOAR", "BOAT", "BOCA", "BOCK", "BODE", "BODY", "BOGY", "BOHR", "BOIL", +                                  "BOLD", "BOLO", "BOLT", "BOMB", "BONA", "BOND", "BONE", "BONG", "BONN", +                                  "BONY", "BOOK", "BOOM", "BOON", "BOOT", "BORE", "BORG", "BORN", "BOSE", +                                  "BOSS", "BOTH", "BOUT", "BOWL", "BOYD", "BRAD", "BRAE", "BRAG", "BRAN", +                                  "BRAY", "BRED", "BREW", "BRIG", "BRIM", "BROW", "BUCK", "BUDD", "BUFF", +                                  "BULB", "BULK", "BULL", "BUNK", "BUNT", "BUOY", "BURG", "BURL", "BURN", +                                  "BURR", "BURT", "BURY", "BUSH", "BUSS", "BUST", "BUSY", "BYTE", "CADY", +                                  "CAFE", "CAGE", "CAIN", "CAKE", "CALF", "CALL", "CALM", "CAME", "CANE", +                                  "CANT", "CARD", "CARE", "CARL", "CARR", "CART", "CASE", "CASH", "CASK", +                                  "CAST", "CAVE", "CEIL", "CELL", "CENT", "CERN", "CHAD", "CHAR", "CHAT", +                                  "CHAW", "CHEF", "CHEN", "CHEW", "CHIC", "CHIN", "CHOU", "CHOW", "CHUB", +                                  "CHUG", "CHUM", "CITE", "CITY", "CLAD", "CLAM", "CLAN", "CLAW", "CLAY", +                                  "CLOD", "CLOG", "CLOT", "CLUB", "CLUE", "COAL", "COAT", "COCA", "COCK", +                                  "COCO", "CODA", "CODE", "CODY", "COED", "COIL", "COIN", "COKE", "COLA", +                                  "COLD", "COLT", "COMA", "COMB", "COME", "COOK", "COOL", "COON", "COOT", +                                  "CORD", "CORE", "CORK", "CORN", "COST", "COVE", "COWL", "CRAB", "CRAG", +                                  "CRAM", "CRAY", "CREW", "CRIB", "CROW", "CRUD", "CUBA", "CUBE", "CUFF", +                                  "CULL", "CULT", "CUNY", "CURB", "CURD", "CURE", "CURL", "CURT", "CUTS", +                                  "DADE", "DALE", "DAME", "DANA", "DANE", "DANG", "DANK", "DARE", "DARK", +                                  "DARN", "DART", "DASH", "DATA", "DATE", "DAVE", "DAVY", "DAWN", "DAYS", +                                  "DEAD", "DEAF", "DEAL", "DEAN", "DEAR", "DEBT", "DECK", "DEED", "DEEM", +                                  "DEER", "DEFT", "DEFY", "DELL", "DENT", "DENY", "DESK", "DIAL", "DICE", +                                  "DIED", "DIET", "DIME", "DINE", "DING", "DINT", "DIRE", "DIRT", "DISC", +                                  "DISH", "DISK", "DIVE", "DOCK", "DOES", "DOLE", "DOLL", "DOLT", "DOME", +                                  "DONE", "DOOM", "DOOR", "DORA", "DOSE", "DOTE", "DOUG", "DOUR", "DOVE", +                                  "DOWN", "DRAB", "DRAG", "DRAM", "DRAW", "DREW", "DRUB", "DRUG", "DRUM", +                                  "DUAL", "DUCK", "DUCT", "DUEL", "DUET", "DUKE", "DULL", "DUMB", "DUNE", +                                  "DUNK", "DUSK", "DUST", "DUTY", "EACH", "EARL", "EARN", "EASE", "EAST", +                                  "EASY", "EBEN", "ECHO", "EDDY", "EDEN", "EDGE", "EDGY", "EDIT", "EDNA", +                                  "EGAN", "ELAN", "ELBA", "ELLA", "ELSE", "EMIL", "EMIT", "EMMA", "ENDS", +                                  "ERIC", "EROS", "EVEN", "EVER", "EVIL", "EYED", "FACE", "FACT", "FADE", +                                  "FAIL", "FAIN", "FAIR", "FAKE", "FALL", "FAME", "FANG", "FARM", "FAST", +                                  "FATE", "FAWN", "FEAR", "FEAT", "FEED", "FEEL", "FEET", "FELL", "FELT", +                                  "FEND", "FERN", "FEST", "FEUD", "FIEF", "FIGS", "FILE", "FILL", "FILM", +                                  "FIND", "FINE", "FINK", "FIRE", "FIRM", "FISH", "FISK", "FIST", "FITS", +                                  "FIVE", "FLAG", "FLAK", "FLAM", "FLAT", "FLAW", "FLEA", "FLED", "FLEW", +                                  "FLIT", "FLOC", "FLOG", "FLOW", "FLUB", "FLUE", "FOAL", "FOAM", "FOGY", +                                  "FOIL", "FOLD", "FOLK", "FOND", "FONT", "FOOD", "FOOL", "FOOT", "FORD", +                                  "FORE", "FORK", "FORM", "FORT", "FOSS", "FOUL", "FOUR", "FOWL", "FRAU", +                                  "FRAY", "FRED", "FREE", "FRET", "FREY", "FROG", "FROM", "FUEL", "FULL", +                                  "FUME", "FUND", "FUNK", "FURY", "FUSE", "FUSS", "GAFF", "GAGE", "GAIL", +                                  "GAIN", "GAIT", "GALA", "GALE", "GALL", "GALT", "GAME", "GANG", "GARB", +                                  "GARY", "GASH", "GATE", "GAUL", "GAUR", "GAVE", "GAWK", "GEAR", "GELD", +                                  "GENE", "GENT", "GERM", "GETS", "GIBE", "GIFT", "GILD", "GILL", "GILT", +                                  "GINA", "GIRD", "GIRL", "GIST", "GIVE", "GLAD", "GLEE", "GLEN", "GLIB", +                                  "GLOB", "GLOM", "GLOW", "GLUE", "GLUM", "GLUT", "GOAD", "GOAL", "GOAT", +                                  "GOER", "GOES", "GOLD", "GOLF", "GONE", "GONG", "GOOD", "GOOF", "GORE", +                                  "GORY", "GOSH", "GOUT", "GOWN", "GRAB", "GRAD", "GRAY", "GREG", "GREW", +                                  "GREY", "GRID", "GRIM", "GRIN", "GRIT", "GROW", "GRUB", "GULF", "GULL", +                                  "GUNK", "GURU", "GUSH", "GUST", "GWEN", "GWYN", "HAAG", "HAAS", "HACK", +                                  "HAIL", "HAIR", "HALE", "HALF", "HALL", "HALO", "HALT", "HAND", "HANG", +                                  "HANK", "HANS", "HARD", "HARK", "HARM", "HART", "HASH", "HAST", "HATE", +                                  "HATH", "HAUL", "HAVE", "HAWK", "HAYS", "HEAD", "HEAL", "HEAR", "HEAT", +                                  "HEBE", "HECK", "HEED", "HEEL", "HEFT", "HELD", "HELL", "HELM", "HERB", +                                  "HERD", "HERE", "HERO", "HERS", "HESS", "HEWN", "HICK", "HIDE", "HIGH", +                                  "HIKE", "HILL", "HILT", "HIND", "HINT", "HIRE", "HISS", "HIVE", "HOBO", +                                  "HOCK", "HOFF", "HOLD", "HOLE", "HOLM", "HOLT", "HOME", "HONE", "HONK", +                                  "HOOD", "HOOF", "HOOK", "HOOT", "HORN", "HOSE", "HOST", "HOUR", "HOVE", +                                  "HOWE", "HOWL", "HOYT", "HUCK", "HUED", "HUFF", "HUGE", "HUGH", "HUGO", +                                  "HULK", "HULL", "HUNK", "HUNT", "HURD", "HURL", "HURT", "HUSH", "HYDE", +                                  "HYMN", "IBIS", "ICON", "IDEA", "IDLE", "IFFY", "INCA", "INCH", "INTO", +                                  "IONS", "IOTA", "IOWA", "IRIS", "IRMA", "IRON", "ISLE", "ITCH", "ITEM", +                                  "IVAN", "JACK", "JADE", "JAIL", "JAKE", "JANE", "JAVA", "JEAN", "JEFF", +                                  "JERK", "JESS", "JEST", "JIBE", "JILL", "JILT", "JIVE", "JOAN", "JOBS", +                                  "JOCK", "JOEL", "JOEY", "JOHN", "JOIN", "JOKE", "JOLT", "JOVE", "JUDD", +                                  "JUDE", "JUDO", "JUDY", "JUJU", "JUKE", "JULY", "JUNE", "JUNK", "JUNO", +                                  "JURY", "JUST", "JUTE", "KAHN", "KALE", "KANE", "KANT", "KARL", "KATE", +                                  "KEEL", "KEEN", "KENO", "KENT", "KERN", "KERR", "KEYS", "KICK", "KILL", +                                  "KIND", "KING", "KIRK", "KISS", "KITE", "KLAN", "KNEE", "KNEW", "KNIT", +                                  "KNOB", "KNOT", "KNOW", "KOCH", "KONG", "KUDO", "KURD", "KURT", "KYLE", +                                  "LACE", "LACK", "LACY", "LADY", "LAID", "LAIN", "LAIR", "LAKE", "LAMB", +                                  "LAME", "LAND", "LANE", "LANG", "LARD", "LARK", "LASS", "LAST", "LATE", +                                  "LAUD", "LAVA", "LAWN", "LAWS", "LAYS", "LEAD", "LEAF", "LEAK", "LEAN", +                                  "LEAR", "LEEK", "LEER", "LEFT", "LEND", "LENS", "LENT", "LEON", "LESK", +                                  "LESS", "LEST", "LETS", "LIAR", "LICE", "LICK", "LIED", "LIEN", "LIES", +                                  "LIEU", "LIFE", "LIFT", "LIKE", "LILA", "LILT", "LILY", "LIMA", "LIMB", +                                  "LIME", "LIND", "LINE", "LINK", "LINT", "LION", "LISA", "LIST", "LIVE", +                                  "LOAD", "LOAF", "LOAM", "LOAN", "LOCK", "LOFT", "LOGE", "LOIS", "LOLA", +                                  "LONE", "LONG", "LOOK", "LOON", "LOOT", "LORD", "LORE", "LOSE", "LOSS", +                                  "LOST", "LOUD", "LOVE", "LOWE", "LUCK", "LUCY", "LUGE", "LUKE", "LULU", +                                  "LUND", "LUNG", "LURA", "LURE", "LURK", "LUSH", "LUST", "LYLE", "LYNN", +                                  "LYON", "LYRA", "MACE", "MADE", "MAGI", "MAID", "MAIL", "MAIN", "MAKE", +                                  "MALE", "MALI", "MALL", "MALT", "MANA", "MANN", "MANY", "MARC", "MARE", +                                  "MARK", "MARS", "MART", "MARY", "MASH", "MASK", "MASS", "MAST", "MATE", +                                  "MATH", "MAUL", "MAYO", "MEAD", "MEAL", "MEAN", "MEAT", "MEEK", "MEET", +                                  "MELD", "MELT", "MEMO", "MEND", "MENU", "MERT", "MESH", "MESS", "MICE", +                                  "MIKE", "MILD", "MILE", "MILK", "MILL", "MILT", "MIMI", "MIND", "MINE", +                                  "MINI", "MINK", "MINT", "MIRE", "MISS", "MIST", "MITE", "MITT", "MOAN", +                                  "MOAT", "MOCK", "MODE", "MOLD", "MOLE", "MOLL", "MOLT", "MONA", "MONK", +                                  "MONT", "MOOD", "MOON", "MOOR", "MOOT", "MORE", "MORN", "MORT", "MOSS", +                                  "MOST", "MOTH", "MOVE", "MUCH", "MUCK", "MUDD", "MUFF", "MULE", "MULL", +                                  "MURK", "MUSH", "MUST", "MUTE", "MUTT", "MYRA", "MYTH", "NAGY", "NAIL", +                                  "NAIR", "NAME", "NARY", "NASH", "NAVE", "NAVY", "NEAL", "NEAR", "NEAT", +                                  "NECK", "NEED", "NEIL", "NELL", "NEON", "NERO", "NESS", "NEST", "NEWS", +                                  "NEWT", "NIBS", "NICE", "NICK", "NILE", "NINA", "NINE", "NOAH", "NODE", +                                  "NOEL", "NOLL", "NONE", "NOOK", "NOON", "NORM", "NOSE", "NOTE", "NOUN", +                                  "NOVA", "NUDE", "NULL", "NUMB", "OATH", "OBEY", "OBOE", "ODIN", "OHIO", +                                  "OILY", "OINT", "OKAY", "OLAF", "OLDY", "OLGA", "OLIN", "OMAN", "OMEN", +                                  "OMIT", "ONCE", "ONES", "ONLY", "ONTO", "ONUS", "ORAL", "ORGY", "OSLO", +                                  "OTIS", "OTTO", "OUCH", "OUST", "OUTS", "OVAL", "OVEN", "OVER", "OWLY", +                                  "OWNS", "QUAD", "QUIT", "QUOD", "RACE", "RACK", "RACY", "RAFT", "RAGE", +                                  "RAID", "RAIL", "RAIN", "RAKE", "RANK", "RANT", "RARE", "RASH", "RATE", +                                  "RAVE", "RAYS", "READ", "REAL", "REAM", "REAR", "RECK", "REED", "REEF", +                                  "REEK", "REEL", "REID", "REIN", "RENA", "REND", "RENT", "REST", "RICE", +                                  "RICH", "RICK", "RIDE", "RIFT", "RILL", "RIME", "RING", "RINK", "RISE", +                                  "RISK", "RITE", "ROAD", "ROAM", "ROAR", "ROBE", "ROCK", "RODE", "ROIL", +                                  "ROLL", "ROME", "ROOD", "ROOF", "ROOK", "ROOM", "ROOT", "ROSA", "ROSE", +                                  "ROSS", "ROSY", "ROTH", "ROUT", "ROVE", "ROWE", "ROWS", "RUBE", "RUBY", +                                  "RUDE", "RUDY", "RUIN", "RULE", "RUNG", "RUNS", "RUNT", "RUSE", "RUSH", +                                  "RUSK", "RUSS", "RUST", "RUTH", "SACK", "SAFE", "SAGE", "SAID", "SAIL", +                                  "SALE", "SALK", "SALT", "SAME", "SAND", "SANE", "SANG", "SANK", "SARA", +                                  "SAUL", "SAVE", "SAYS", "SCAN", "SCAR", "SCAT", "SCOT", "SEAL", "SEAM", +                                  "SEAR", "SEAT", "SEED", "SEEK", "SEEM", "SEEN", "SEES", "SELF", "SELL", +                                  "SEND", "SENT", "SETS", "SEWN", "SHAG", "SHAM", "SHAW", "SHAY", "SHED", +                                  "SHIM", "SHIN", "SHOD", "SHOE", "SHOT", "SHOW", "SHUN", "SHUT", "SICK", +                                  "SIDE", "SIFT", "SIGH", "SIGN", "SILK", "SILL", "SILO", "SILT", "SINE", +                                  "SING", "SINK", "SIRE", "SITE", "SITS", "SITU", "SKAT", "SKEW", "SKID", +                                  "SKIM", "SKIN", "SKIT", "SLAB", "SLAM", "SLAT", "SLAY", "SLED", "SLEW", +                                  "SLID", "SLIM", "SLIT", "SLOB", "SLOG", "SLOT", "SLOW", "SLUG", "SLUM", +                                  "SLUR", "SMOG", "SMUG", "SNAG", "SNOB", "SNOW", "SNUB", "SNUG", "SOAK", +                                  "SOAR", "SOCK", "SODA", "SOFA", "SOFT", "SOIL", "SOLD", "SOME", "SONG", +                                  "SOON", "SOOT", "SORE", "SORT", "SOUL", "SOUR", "SOWN", "STAB", "STAG", +                                  "STAN", "STAR", "STAY", "STEM", "STEW", "STIR", "STOW", "STUB", "STUN", +                                  "SUCH", "SUDS", "SUIT", "SULK", "SUMS", "SUNG", "SUNK", "SURE", "SURF", +                                  "SWAB", "SWAG", "SWAM", "SWAN", "SWAT", "SWAY", "SWIM", "SWUM", "TACK", +                                  "TACT", "TAIL", "TAKE", "TALE", "TALK", "TALL", "TANK", "TASK", "TATE", +                                  "TAUT", "TEAL", "TEAM", "TEAR", "TECH", "TEEM", "TEEN", "TEET", "TELL", +                                  "TEND", "TENT", "TERM", "TERN", "TESS", "TEST", "THAN", "THAT", "THEE", +                                  "THEM", "THEN", "THEY", "THIN", "THIS", "THUD", "THUG", "TICK", "TIDE", +                                  "TIDY", "TIED", "TIER", "TILE", "TILL", "TILT", "TIME", "TINA", "TINE", +                                  "TINT", "TINY", "TIRE", "TOAD", "TOGO", "TOIL", "TOLD", "TOLL", "TONE", +                                  "TONG", "TONY", "TOOK", "TOOL", "TOOT", "TORE", "TORN", "TOTE", "TOUR", +                                  "TOUT", "TOWN", "TRAG", "TRAM", "TRAY", "TREE", "TREK", "TRIG", "TRIM", +                                  "TRIO", "TROD", "TROT", "TROY", "TRUE", "TUBA", "TUBE", "TUCK", "TUFT", +                                  "TUNA", "TUNE", "TUNG", "TURF", "TURN", "TUSK", "TWIG", "TWIN", "TWIT", +                                  "ULAN", "UNIT", "URGE", "USED", "USER", "USES", "UTAH", "VAIL", "VAIN", +                                  "VALE", "VARY", "VASE", "VAST", "VEAL", "VEDA", "VEIL", "VEIN", "VEND", +                                  "VENT", "VERB", "VERY", "VETO", "VICE", "VIEW", "VINE", "VISE", "VOID", +                                  "VOLT", "VOTE", "WACK", "WADE", "WAGE", "WAIL", "WAIT", "WAKE", "WALE", +                                  "WALK", "WALL", "WALT", "WAND", "WANE", "WANG", "WANT", "WARD", "WARM", +                                  "WARN", "WART", "WASH", "WAST", "WATS", "WATT", "WAVE", "WAVY", "WAYS", +                                  "WEAK", "WEAL", "WEAN", "WEAR", "WEED", "WEEK", "WEIR", "WELD", "WELL", +                                  "WELT", "WENT", "WERE", "WERT", "WEST", "WHAM", "WHAT", "WHEE", "WHEN", +                                  "WHET", "WHOA", "WHOM", "WICK", "WIFE", "WILD", "WILL", "WIND", "WINE", +                                  "WING", "WINK", "WINO", "WIRE", "WISE", "WISH", "WITH", "WOLF", "WONT", +                                  "WOOD", "WOOL", "WORD", "WORE", "WORK", "WORM", "WORN", "WOVE", "WRIT", +                                  "WYNN", "YALE", "YANG", "YANK", "YARD", "YARN", "YAWL", "YAWN", "YEAH", +                                  "YEAR", "YELL", "YOGA", "YOKE" +                                };  /*   * Encode 8 bytes in 'c' as a string of English words. @@ -246,31 +246,31 @@ static const char Wp[2048][4] = { "A", "ABE", "ACE", "ACT", "AD", "ADA", "ADD",  char *btoe(unsigned char *md)  { -        char cp[9];	/* 64 + 2 = 66 bits */ -        int p, i; +	char cp[9];	/* 64 + 2 = 66 bits */ +	int p, i;  	static int buf[BUFSIZ];  	char *engout = (char *)buf; -	 -        memcpy(cp, md, SKEY_SIZE); -        /* compute parity */ -        for(p = 0, i = 0; i < 64; i += 2) -                p += extract(cp, i, 2); -        cp[8] = (char)p << 6; + +	memcpy(cp, md, SKEY_SIZE); +	/* compute parity */ +	for(p = 0, i = 0; i < 64; i += 2) +		p += extract(cp, i, 2); +	cp[8] = (char)p << 6;  	/* now 66 bits */  	engout[0] = '\0'; -        strncat(engout, &Wp[extract(cp,  0, 11)][0], 4); -        strcat (engout," "); -        strncat(engout, &Wp[extract(cp, 11, 11)][0], 4); -        strcat (engout," "); -        strncat(engout, &Wp[extract(cp, 22, 11)][0], 4); -        strcat (engout," "); -        strncat(engout, &Wp[extract(cp, 33, 11)][0], 4); -        strcat (engout," "); -        strncat(engout, &Wp[extract(cp, 44, 11)][0], 4); -        strcat (engout," "); -        strncat(engout, &Wp[extract(cp, 55, 11)][0], 4); -        return (engout); +	strncat(engout, &Wp[extract(cp,  0, 11)][0], 4); +	strcat (engout," "); +	strncat(engout, &Wp[extract(cp, 11, 11)][0], 4); +	strcat (engout," "); +	strncat(engout, &Wp[extract(cp, 22, 11)][0], 4); +	strcat (engout," "); +	strncat(engout, &Wp[extract(cp, 33, 11)][0], 4); +	strcat (engout," "); +	strncat(engout, &Wp[extract(cp, 44, 11)][0], 4); +	strcat (engout," "); +	strncat(engout, &Wp[extract(cp, 55, 11)][0], 4); +	return (engout);  } @@ -282,23 +282,23 @@ char *btoe(unsigned char *md)  static guint32 extract(char *s, int start, int length)  { -        guint8 cl; -        guint8 cc; -        guint8 cr; -        guint32 x; +	guint8 cl; +	guint8 cc; +	guint8 cr; +	guint32 x;  	/* 66 = 11 x 6 */ -	 -        g_assert(length >= 0);	 -        g_assert(length <= 11); -        g_assert(start >= 0); -        g_assert(start + length <= 66); -        cl = s[start/8]; -        cc = s[start/8 + 1]; -        cr = s[start/8 + 2]; -        x = (guint32) ((((cl << 8) | cc) << 8) | cr);	/* 24 bits */ -        x = x >> (24 - (length + (start % 8)));	        /* cut tail */ -        x = (x & (0xffff >> (16 - length)));		/* cut head */ -        return(x);					/* length */ +	g_assert(length >= 0); +	g_assert(length <= 11); +	g_assert(start >= 0); +	g_assert(start + length <= 66); + +	cl = s[start/8]; +	cc = s[start/8 + 1]; +	cr = s[start/8 + 2]; +	x = (guint32) ((((cl << 8) | cc) << 8) | cr);	/* 24 bits */ +	x = x >> (24 - (length + (start % 8)));	        /* cut tail */ +	x = (x & (0xffff >> (16 - length)));		/* cut head */ +	return(x);					/* length */  } diff --git a/src/skey/md4.c b/src/skey/md4.c index 914f101..5456340 100644 --- a/src/skey/md4.c +++ b/src/skey/md4.c @@ -1,9 +1,9 @@  /*   *    Copyright (C) 2001 Nikos Mavroyanopoulos   * - *    This library is free software; you can redistribute it and/or modify it  - *    under the terms of the GNU Library General Public License as published  - *    by the Free Software Foundation; either version 3 of the License, or  + *    This library is free software; you can redistribute it and/or modify it + *    under the terms of the GNU Library General Public License as published + *    by the Free Software Foundation; either version 3 of the License, or   *    (at your option) any later version.   *   *    This library is distributed in the hope that it will be useful, @@ -17,7 +17,7 @@   *    Boston, MA 02111-1307, USA.   */ -/*  +/*   * The algorithm is due to Ron Rivest.  This code is based on code   * written by Colin Plumb in 1993.   */ @@ -42,12 +42,14 @@ static void byteReverse(unsigned char *buf, unsigned longs);  static void byteReverse(unsigned char *buf, unsigned longs)  {  	guint32 t; -	do { +	do +	{  		t = (guint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |  		    ((unsigned) buf[1] << 8 | buf[0]);  		*(guint32 *) buf = t;  		buf += 4; -	} while (--longs); +	} +	while (--longs);  }  #endif @@ -73,7 +75,7 @@ void MD4Init(MD4_CTX *ctx)   * of bytes.   */  void MD4Update(MD4_CTX *ctx, unsigned char const *buf, -	       unsigned len) +               unsigned len)  {  	register guint32 t; @@ -88,11 +90,13 @@ void MD4Update(MD4_CTX *ctx, unsigned char const *buf,  	/* Handle any leading odd-sized chunks */ -	if (t) { +	if (t) +	{  		unsigned char *p = (unsigned char *) ctx->in + t;  		t = 64 - t; -		if (len < t) { +		if (len < t) +		{  			memcpy(p, buf, len);  			return;  		} @@ -104,7 +108,8 @@ void MD4Update(MD4_CTX *ctx, unsigned char const *buf,  	}  	/* Process data in 64-byte chunks */ -	while (len >= 64) { +	while (len >= 64) +	{  		memcpy(ctx->in, buf, 64);  		byteReverse(ctx->in, 16);  		MD4Transform(ctx->buf, (guint32 *) ctx->in); @@ -118,7 +123,7 @@ void MD4Update(MD4_CTX *ctx, unsigned char const *buf,  }  /* - * Final wrapup - pad to 64-byte boundary with the bit pattern  + * Final wrapup - pad to 64-byte boundary with the bit pattern   * 1 0* (64-bit count of bits processed, MSB-first)   */  void MD4Final(unsigned char* digest, MD4_CTX *ctx) @@ -138,7 +143,8 @@ void MD4Final(unsigned char* digest, MD4_CTX *ctx)  	count = 64 - 1 - count;  	/* Pad out to 56 mod 64 */ -	if (count < 8) { +	if (count < 8) +	{  		/* Two lots of padding:  Pad the first block to 64 bytes */  		memset(p, 0, count);  		byteReverse(ctx->in, 16); @@ -146,7 +152,9 @@ void MD4Final(unsigned char* digest, MD4_CTX *ctx)  		/* Now fill the next block with 56 bytes */  		memset(ctx->in, 0, 56); -	} else { +	} +	else +	{  		/* Pad block to 56 bytes */  		memset(p, 0, count - 8);  	} @@ -158,7 +166,7 @@ void MD4Final(unsigned char* digest, MD4_CTX *ctx)  	MD4Transform(ctx->buf, (guint32 *) ctx->in);  	byteReverse((unsigned char *) ctx->buf, 4); -	 +  	if (digest!=NULL)  		memcpy(digest, ctx->buf, 16);  	memset(ctx, 0, sizeof(ctx));	/* In case it's sensitive */ @@ -317,10 +325,12 @@ int main(int argc, char *argv[])  	md4 = (MD4_CTX *)malloc(sizeof(MD4_CTX));  	MD4Init(md4); -	do { +	do +	{  		r = read(0, data, sizeof data);  		MD4Update(md4, data, r); -	} while (r); +	} +	while (r);  	MD4Final(digest, md4);  	printf("MD4 Digest is: "); diff --git a/src/skey/md4.h b/src/skey/md4.h index bd43a26..2259dd6 100644 --- a/src/skey/md4.h +++ b/src/skey/md4.h @@ -2,8 +2,9 @@  #define MD4_H  #include <glib.h> -  -typedef struct { + +typedef struct +{  	guint32 buf[4];  	guint32 bits[2];  	unsigned char in[64]; diff --git a/src/skey/md5.c b/src/skey/md5.c index 9447c15..de9d7a7 100644 --- a/src/skey/md5.c +++ b/src/skey/md5.c @@ -12,9 +12,9 @@ int MD5Keycrunch(char *result, const char *seed, const char *passhrase)  {  	char *buf;  	gsize len; -        GChecksum *checksum; -        guint8 digest[16]; -        gsize digest_len = sizeof (digest); +	GChecksum *checksum; +	guint8 digest[16]; +	gsize digest_len = sizeof (digest);  	guint32 *results;  	len = strlen(seed) + strlen(passhrase); @@ -27,41 +27,41 @@ int MD5Keycrunch(char *result, const char *seed, const char *passhrase)  	strcat(buf, passhrase);  	skey_sevenbit(buf); -        checksum = g_checksum_new (G_CHECKSUM_MD5); -        g_checksum_update (checksum, (const guchar *) buf, len); +	checksum = g_checksum_new (G_CHECKSUM_MD5); +	g_checksum_update (checksum, (const guchar *) buf, len);  	g_free(buf); -        g_checksum_get_digest (checksum, digest, &digest_len); -        g_assert (digest_len == 16); +	g_checksum_get_digest (checksum, digest, &digest_len); +	g_assert (digest_len == 16); -        results = (guint32 *) digest; +	results = (guint32 *) digest;  	results[0] ^= results[2];  	results[1] ^= results[3];  	memcpy((void *)result, (void *)results, SKEY_SIZE); -        g_checksum_free (checksum); +	g_checksum_free (checksum);  	return 0;  }  void MD5SKey(char *x)  { -        GChecksum *checksum; -        guint8 digest[16]; -        gsize digest_len = sizeof (digest); +	GChecksum *checksum; +	guint8 digest[16]; +	gsize digest_len = sizeof (digest);  	guint32 *results; -        checksum = g_checksum_new (G_CHECKSUM_MD5); -        g_checksum_update (checksum, (const guchar *) x, SKEY_SIZE); -        g_checksum_get_digest (checksum, digest, &digest_len); -        g_assert (digest_len == 16); +	checksum = g_checksum_new (G_CHECKSUM_MD5); +	g_checksum_update (checksum, (const guchar *) x, SKEY_SIZE); +	g_checksum_get_digest (checksum, digest, &digest_len); +	g_assert (digest_len == 16); -        results = (guint32 *) digest; +	results = (guint32 *) digest;  	results[0] ^= results[2];  	results[1] ^= results[3];  	memcpy((void *)x, (void *)results, SKEY_SIZE); -        g_checksum_free (checksum); +	g_checksum_free (checksum);  } diff --git a/src/skey/sha1.c b/src/skey/sha1.c index ac34ccc..d1c57d1 100644 --- a/src/skey/sha1.c +++ b/src/skey/sha1.c @@ -27,13 +27,15 @@   */  static void byteReverse(unsigned char *buf, unsigned longs)  { -    guint32 t; -    do { -	t = (guint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 | -	    ((unsigned) buf[1] << 8 | buf[0]); -	*(guint32 *) buf = t; -	buf += 4; -    } while (--longs); +	guint32 t; +	do +	{ +		t = (guint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 | +		    ((unsigned) buf[1] << 8 | buf[0]); +		*(guint32 *) buf = t; +		buf += 4; +	} +	while (--longs);  }  #endif @@ -41,10 +43,10 @@ static void byteReverse(unsigned char *buf, unsigned longs)  int SHA1Keycrunch(char *result, const char *seed, const char *passphrase)  {  	char *buf; -        gsize len; -        GChecksum *checksum; -        guint8 digest[20]; -        gsize digest_len = sizeof (digest); +	gsize len; +	GChecksum *checksum; +	guint8 digest[20]; +	gsize digest_len = sizeof (digest);  	guint32 *results;  	len = strlen(seed) + strlen(passphrase); @@ -56,14 +58,14 @@ int SHA1Keycrunch(char *result, const char *seed, const char *passphrase)  	strcat(buf, passphrase);  	skey_sevenbit(buf); -        checksum = g_checksum_new (G_CHECKSUM_SHA1); -        g_checksum_update (checksum, (const guchar *) buf, len); +	checksum = g_checksum_new (G_CHECKSUM_SHA1); +	g_checksum_update (checksum, (const guchar *) buf, len);  	g_free(buf); -        g_checksum_get_digest (checksum, digest, &digest_len); -        g_assert (digest_len == 20); +	g_checksum_get_digest (checksum, digest, &digest_len); +	g_assert (digest_len == 20); -        results = (guint32 *) digest; +	results = (guint32 *) digest;  #ifndef WORDS_BIGENDIAN  	HTONDIGEST(results); @@ -71,31 +73,31 @@ int SHA1Keycrunch(char *result, const char *seed, const char *passphrase)  	byteReverse((unsigned char *)digest, 5);  #endif -        results = (guint32 *) digest; -        results[0] ^= results[2]; +	results = (guint32 *) digest; +	results[0] ^= results[2];  	results[1] ^= results[3];  	results[0] ^= results[4];  	memcpy((void *)result, (void *)results, SKEY_SIZE); -        g_checksum_free (checksum); +	g_checksum_free (checksum);  	return 0;  }  void SHA1SKey(char *x)  { -        GChecksum *checksum; -        guint8 digest[20]; -        gsize digest_len = sizeof (digest); +	GChecksum *checksum; +	guint8 digest[20]; +	gsize digest_len = sizeof (digest);  	guint32 *results; -        checksum = g_checksum_new (G_CHECKSUM_SHA1); -        g_checksum_update (checksum, (const guchar *) x, SKEY_SIZE); -        g_checksum_get_digest (checksum, digest, &digest_len); -        g_assert (digest_len == 20); +	checksum = g_checksum_new (G_CHECKSUM_SHA1); +	g_checksum_update (checksum, (const guchar *) x, SKEY_SIZE); +	g_checksum_get_digest (checksum, digest, &digest_len); +	g_assert (digest_len == 20); -        results = (guint32 *) digest; +	results = (guint32 *) digest;  #ifndef WORDS_BIGENDIAN  	HTONDIGEST(results);  #else @@ -108,5 +110,5 @@ void SHA1SKey(char *x)  	memcpy((void *)x, (void *)results, SKEY_SIZE); -        g_checksum_free (checksum); +	g_checksum_free (checksum);  } diff --git a/src/skey/sha1.h b/src/skey/sha1.h index 7feed07..c7764e8 100644 --- a/src/skey/sha1.h +++ b/src/skey/sha1.h @@ -2,7 +2,7 @@  #define _SHA1_H  #include <glib.h> -   +  int  SHA1Keycrunch(char *result, const char *seed, const char *passphrase);  void SHA1SKey(char *x); diff --git a/src/skey/skey.c b/src/skey/skey.c index 2517842..fde2d15 100644 --- a/src/skey/skey.c +++ b/src/skey/skey.c @@ -11,11 +11,13 @@  #include "skey.h"  #include "btoe.h" -struct skey_hash { +struct skey_hash +{  	int (*Keycrunch) (char *, const char *, const char *);  	void (*Skey) (char *);  }; -static struct skey_hash hash_table[] = { +static struct skey_hash hash_table[] = +{  	{ MD4Keycrunch,  MD4SKey },  	{ MD5Keycrunch,  MD5SKey },  	{ SHA1Keycrunch, SHA1SKey } @@ -26,7 +28,7 @@ char *skey(SKeyAlgorithm algorithm, int seq, const char *seed, const char *passp  {  	char key[SKEY_SIZE];  	int i; -        g_assert (algorithm < G_N_ELEMENTS (hash_table)); +	g_assert (algorithm < G_N_ELEMENTS (hash_table));  	if (hash_table[algorithm].Keycrunch(key, seed, passphrase) == -1)  		return NULL; diff --git a/src/skey/skey.h b/src/skey/skey.h index 0475629..4eb0002 100644 --- a/src/skey/skey.h +++ b/src/skey/skey.h @@ -1,7 +1,8 @@ -typedef enum { -  MD4, -  MD5, -  SHA1 +typedef enum +{ +    MD4, +    MD5, +    SHA1  } SKeyAlgorithm;  #define SKEY_SIZE	8 diff --git a/src/skey/test.c b/src/skey/test.c index 1fc1a09..aeddd3e 100644 --- a/src/skey/test.c +++ b/src/skey/test.c @@ -8,8 +8,9 @@  #include "skey.h" -typedef struct { -        SKeyAlgorithm algorithm; +typedef struct +{ +	SKeyAlgorithm algorithm;  	const char *passphrase;  	const char *seed;  	int  count; @@ -17,7 +18,8 @@ typedef struct {  	const char *btoe;  } TestEntry; -static const TestEntry tests[] = { +static const TestEntry tests[] = +{  	{ MD4, "This is a test.", "TeSt",     0, "D185 4218 EBBB 0B51", "ROME MUG FRED SCAN LIVE LACE"   },  	{ MD4, "This is a test.", "TeSt",     1, "6347 3EF0 1CD0 B444", "CARD SAD MINI RYE COL KIN"      },  	{ MD4, "This is a test.", "TeSt",    99, "C5E6 1277 6E6C 237A", "NOTE OUT IBIS SINK NAVE MODE"   }, @@ -46,54 +48,56 @@ static const TestEntry tests[] = {  	{ SHA1, "OTP's are good",  "correct",  1, "82AE B52D 9437 74E4", "FLIT DOSE ALSO MEW DRUM DEFY"  },  	{ SHA1, "OTP's are good",  "correct", 99, "4F29 6A74 FE15 67EC", "AURA ALOE HURL WING BERG WAIT" }, -        { SHA1, "Passphrase",      "IiIi",   100, "27F4 01CC 0AC8 5112", "MEG JACK DIET GAD FORK GARY"   } +	{ SHA1, "Passphrase",      "IiIi",   100, "27F4 01CC 0AC8 5112", "MEG JACK DIET GAD FORK GARY"   }  }; -static const char *algos[] = { -  "MD4", -  "MD5", -  "SHA1" +static const char *algos[] = +{ +	"MD4", +	"MD5", +	"SHA1"  };  static void  skey_test (gconstpointer data)  { -        const TestEntry *test = (const TestEntry *) data; -        char *key; +	const TestEntry *test = (const TestEntry *) data; +	char *key; -        key = skey (test->algorithm, -                    test->count, -                    test->seed, -                    test->passphrase); -        g_assert (key != NULL); -        g_assert (strcmp (key, test->btoe) == 0); -        free (key); +	key = skey (test->algorithm, +	            test->count, +	            test->seed, +	            test->passphrase); +	g_assert (key != NULL); +	g_assert (strcmp (key, test->btoe) == 0); +	free (key);  }  int main(int argc, char *argv[])  { -        guint i; +	guint i; -        if (!setlocale (LC_ALL, "")) -                 g_error ("Locale not supported by C library!\n"); +	if (!setlocale (LC_ALL, "")) +		g_error ("Locale not supported by C library!\n"); -        g_test_init (&argc, &argv, NULL); -        g_test_bug_base ("http://bugzilla.mate.org/enter_bug.cgi?product=mate-terminal"); +	g_test_init (&argc, &argv, NULL); +	g_test_bug_base ("http://bugzilla.mate.org/enter_bug.cgi?product=mate-terminal"); -        for (i = 0; i < G_N_ELEMENTS (tests); ++i) { -                const TestEntry *test = &tests[i]; -                char *name; +	for (i = 0; i < G_N_ELEMENTS (tests); ++i) +	{ +		const TestEntry *test = &tests[i]; +		char *name; -                name = g_strdup_printf ("/%s/%s/%s/%d/%s/%s", -                                        algos[test->algorithm], -                                        test->passphrase, -                                        test->seed, -                                        test->count, -                                        test->hex, -                                        test->btoe); -                g_test_add_data_func (name, test, skey_test); -                g_free (name); -        } +		name = g_strdup_printf ("/%s/%s/%s/%d/%s/%s", +		                        algos[test->algorithm], +		                        test->passphrase, +		                        test->seed, +		                        test->count, +		                        test->hex, +		                        test->btoe); +		g_test_add_data_func (name, test, skey_test); +		g_free (name); +	} -        return g_test_run (); +	return g_test_run ();  } diff --git a/src/terminal-accels.c b/src/terminal-accels.c index 73ed7ca..7f93ac4 100644 --- a/src/terminal-accels.c +++ b/src/terminal-accels.c @@ -111,144 +111,211 @@  typedef struct  { -  const char *user_visible_name; -  const char *mateconf_key; -  const char *accel_path; -  /* last values received from mateconf */ -  GdkModifierType mateconf_mask; -  guint mateconf_keyval; -  GClosure *closure; -  /* have gotten a notification from gtk */ -  gboolean needs_mateconf_sync; -  gboolean accel_path_unlocked; +	const char *user_visible_name; +	const char *mateconf_key; +	const char *accel_path; +	/* last values received from mateconf */ +	GdkModifierType mateconf_mask; +	guint mateconf_keyval; +	GClosure *closure; +	/* have gotten a notification from gtk */ +	gboolean needs_mateconf_sync; +	gboolean accel_path_unlocked;  } KeyEntry;  typedef struct  { -  KeyEntry *key_entry; -  guint n_elements; -  const char *user_visible_name; +	KeyEntry *key_entry; +	guint n_elements; +	const char *user_visible_name;  } KeyEntryList;  static KeyEntry file_entries[] =  { -  { N_("New Tab"), -    KEY_NEW_TAB, ACCEL_PATH_NEW_TAB, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_t, NULL, FALSE, TRUE }, -  { N_("New Window"), -    KEY_NEW_WINDOW, ACCEL_PATH_NEW_WINDOW, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_n, NULL, FALSE, TRUE }, -  { N_("New Profile"), -    KEY_NEW_PROFILE, ACCEL_PATH_NEW_PROFILE, 0, 0, NULL, FALSE, TRUE }, +	{ +		N_("New Tab"), +		KEY_NEW_TAB, ACCEL_PATH_NEW_TAB, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_t, NULL, FALSE, TRUE +	}, +	{ +		N_("New Window"), +		KEY_NEW_WINDOW, ACCEL_PATH_NEW_WINDOW, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_n, NULL, FALSE, TRUE +	}, +	{ +		N_("New Profile"), +		KEY_NEW_PROFILE, ACCEL_PATH_NEW_PROFILE, 0, 0, NULL, FALSE, TRUE +	},  #ifdef ENABLE_SAVE -  { N_("Save Contents"), -    KEY_SAVE_CONTENTS, ACCEL_PATH_SAVE_CONTENTS, 0, 0, NULL, FALSE, TRUE }, +	{ +		N_("Save Contents"), +		KEY_SAVE_CONTENTS, ACCEL_PATH_SAVE_CONTENTS, 0, 0, NULL, FALSE, TRUE +	},  #endif -  { N_("Close Tab"), -    KEY_CLOSE_TAB, ACCEL_PATH_CLOSE_TAB, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_w, NULL, FALSE, TRUE }, -  { N_("Close Window"), -    KEY_CLOSE_WINDOW, ACCEL_PATH_CLOSE_WINDOW, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_q, NULL, FALSE, TRUE }, +	{ +		N_("Close Tab"), +		KEY_CLOSE_TAB, ACCEL_PATH_CLOSE_TAB, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_w, NULL, FALSE, TRUE +	}, +	{ +		N_("Close Window"), +		KEY_CLOSE_WINDOW, ACCEL_PATH_CLOSE_WINDOW, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_q, NULL, FALSE, TRUE +	},  };  static KeyEntry edit_entries[] =  { -  { N_("Copy"), -    KEY_COPY, ACCEL_PATH_COPY, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_c, NULL, FALSE, TRUE }, -  { N_("Paste"), -    KEY_PASTE, ACCEL_PATH_PASTE, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_v, NULL, FALSE, TRUE }, +	{ +		N_("Copy"), +		KEY_COPY, ACCEL_PATH_COPY, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_c, NULL, FALSE, TRUE +	}, +	{ +		N_("Paste"), +		KEY_PASTE, ACCEL_PATH_PASTE, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_v, NULL, FALSE, TRUE +	},  };  static KeyEntry view_entries[] =  { -  { N_("Hide and Show menubar"), -    KEY_TOGGLE_MENUBAR, ACCEL_PATH_TOGGLE_MENUBAR, 0, 0, NULL, FALSE, TRUE }, -  { N_("Full Screen"), -    KEY_FULL_SCREEN, ACCEL_PATH_FULL_SCREEN, 0, GDK_F11, NULL, FALSE, TRUE }, -  { N_("Zoom In"), -    KEY_ZOOM_IN, ACCEL_PATH_ZOOM_IN, GDK_CONTROL_MASK, GDK_plus, NULL, FALSE, TRUE }, -  { N_("Zoom Out"), -    KEY_ZOOM_OUT, ACCEL_PATH_ZOOM_OUT, GDK_CONTROL_MASK, GDK_minus, NULL, FALSE, TRUE }, -  { N_("Normal Size"), -    KEY_ZOOM_NORMAL, ACCEL_PATH_ZOOM_NORMAL, GDK_CONTROL_MASK, GDK_0, NULL, FALSE, TRUE } +	{ +		N_("Hide and Show menubar"), +		KEY_TOGGLE_MENUBAR, ACCEL_PATH_TOGGLE_MENUBAR, 0, 0, NULL, FALSE, TRUE +	}, +	{ +		N_("Full Screen"), +		KEY_FULL_SCREEN, ACCEL_PATH_FULL_SCREEN, 0, GDK_F11, NULL, FALSE, TRUE +	}, +	{ +		N_("Zoom In"), +		KEY_ZOOM_IN, ACCEL_PATH_ZOOM_IN, GDK_CONTROL_MASK, GDK_plus, NULL, FALSE, TRUE +	}, +	{ +		N_("Zoom Out"), +		KEY_ZOOM_OUT, ACCEL_PATH_ZOOM_OUT, GDK_CONTROL_MASK, GDK_minus, NULL, FALSE, TRUE +	}, +	{ +		N_("Normal Size"), +		KEY_ZOOM_NORMAL, ACCEL_PATH_ZOOM_NORMAL, GDK_CONTROL_MASK, GDK_0, NULL, FALSE, TRUE +	}  };  static KeyEntry terminal_entries[] =  { -  { N_("Set Title"), -    KEY_SET_TERMINAL_TITLE, ACCEL_PATH_SET_TERMINAL_TITLE, 0, 0, NULL, FALSE, TRUE }, -  { N_("Reset"), -    KEY_RESET, ACCEL_PATH_RESET, 0, 0, NULL, FALSE, TRUE }, -  { N_("Reset and Clear"), -    KEY_RESET_AND_CLEAR, ACCEL_PATH_RESET_AND_CLEAR, 0, 0, NULL, FALSE, TRUE }, +	{ +		N_("Set Title"), +		KEY_SET_TERMINAL_TITLE, ACCEL_PATH_SET_TERMINAL_TITLE, 0, 0, NULL, FALSE, TRUE +	}, +	{ +		N_("Reset"), +		KEY_RESET, ACCEL_PATH_RESET, 0, 0, NULL, FALSE, TRUE +	}, +	{ +		N_("Reset and Clear"), +		KEY_RESET_AND_CLEAR, ACCEL_PATH_RESET_AND_CLEAR, 0, 0, NULL, FALSE, TRUE +	},  };  static KeyEntry tabs_entries[] =  { -  { N_("Switch to Previous Tab"), -    KEY_PREV_TAB, ACCEL_PATH_PREV_TAB, GDK_CONTROL_MASK, GDK_Page_Up, NULL, FALSE, TRUE }, -  { N_("Switch to Next Tab"), -    KEY_NEXT_TAB, ACCEL_PATH_NEXT_TAB, GDK_CONTROL_MASK, GDK_Page_Down, NULL, FALSE, TRUE }, -  { N_("Move Tab to the Left"), -    KEY_MOVE_TAB_LEFT, ACCEL_PATH_MOVE_TAB_LEFT, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_Page_Up, NULL, FALSE, TRUE }, -  { N_("Move Tab to the Right"), -    KEY_MOVE_TAB_RIGHT, ACCEL_PATH_MOVE_TAB_RIGHT, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_Page_Down, NULL, FALSE, TRUE }, -  { N_("Detach Tab"), -    KEY_DETACH_TAB, ACCEL_PATH_DETACH_TAB, 0, 0, NULL, FALSE, TRUE }, -  { N_("Switch to Tab 1"), -    KEY_SWITCH_TAB_PREFIX "1", -    ACCEL_PATH_SWITCH_TAB_PREFIX "1", GDK_MOD1_MASK, GDK_1, NULL, FALSE, TRUE }, -  { N_("Switch to Tab 2"), -    KEY_SWITCH_TAB_PREFIX "2", -    ACCEL_PATH_SWITCH_TAB_PREFIX "2", GDK_MOD1_MASK, GDK_2, NULL, FALSE, TRUE }, -  { N_("Switch to Tab 3"), -    KEY_SWITCH_TAB_PREFIX "3", -    ACCEL_PATH_SWITCH_TAB_PREFIX "3", GDK_MOD1_MASK, GDK_3, NULL, FALSE, TRUE }, -  { N_("Switch to Tab 4"), -    KEY_SWITCH_TAB_PREFIX "4", -    ACCEL_PATH_SWITCH_TAB_PREFIX "4", GDK_MOD1_MASK, GDK_4, NULL, FALSE, TRUE }, -  { N_("Switch to Tab 5"), -    KEY_SWITCH_TAB_PREFIX "5", -    ACCEL_PATH_SWITCH_TAB_PREFIX "5", GDK_MOD1_MASK, GDK_5, NULL, FALSE, TRUE }, -  { N_("Switch to Tab 6"), -    KEY_SWITCH_TAB_PREFIX "6", -    ACCEL_PATH_SWITCH_TAB_PREFIX "6", GDK_MOD1_MASK, GDK_6, NULL, FALSE, TRUE }, -  { N_("Switch to Tab 7"), -    KEY_SWITCH_TAB_PREFIX "7", -    ACCEL_PATH_SWITCH_TAB_PREFIX "7", GDK_MOD1_MASK, GDK_7, NULL, FALSE, TRUE }, -  { N_("Switch to Tab 8"), -    KEY_SWITCH_TAB_PREFIX "8", -    ACCEL_PATH_SWITCH_TAB_PREFIX "8", GDK_MOD1_MASK, GDK_8, NULL, FALSE, TRUE }, -  { N_("Switch to Tab 9"), -    KEY_SWITCH_TAB_PREFIX "9", -    ACCEL_PATH_SWITCH_TAB_PREFIX "9", GDK_MOD1_MASK, GDK_9, NULL, FALSE, TRUE }, -  { N_("Switch to Tab 10"), -    KEY_SWITCH_TAB_PREFIX "10", -    ACCEL_PATH_SWITCH_TAB_PREFIX "10", GDK_MOD1_MASK, GDK_0, NULL, FALSE, TRUE }, -  { N_("Switch to Tab 11"), -    KEY_SWITCH_TAB_PREFIX "11", -    ACCEL_PATH_SWITCH_TAB_PREFIX "11", 0, 0, NULL, FALSE, TRUE }, -  { N_("Switch to Tab 12"), -    KEY_SWITCH_TAB_PREFIX "12", -    ACCEL_PATH_SWITCH_TAB_PREFIX "12", 0, 0, NULL, FALSE, TRUE } +	{ +		N_("Switch to Previous Tab"), +		KEY_PREV_TAB, ACCEL_PATH_PREV_TAB, GDK_CONTROL_MASK, GDK_Page_Up, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Next Tab"), +		KEY_NEXT_TAB, ACCEL_PATH_NEXT_TAB, GDK_CONTROL_MASK, GDK_Page_Down, NULL, FALSE, TRUE +	}, +	{ +		N_("Move Tab to the Left"), +		KEY_MOVE_TAB_LEFT, ACCEL_PATH_MOVE_TAB_LEFT, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_Page_Up, NULL, FALSE, TRUE +	}, +	{ +		N_("Move Tab to the Right"), +		KEY_MOVE_TAB_RIGHT, ACCEL_PATH_MOVE_TAB_RIGHT, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_Page_Down, NULL, FALSE, TRUE +	}, +	{ +		N_("Detach Tab"), +		KEY_DETACH_TAB, ACCEL_PATH_DETACH_TAB, 0, 0, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Tab 1"), +		KEY_SWITCH_TAB_PREFIX "1", +		ACCEL_PATH_SWITCH_TAB_PREFIX "1", GDK_MOD1_MASK, GDK_1, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Tab 2"), +		KEY_SWITCH_TAB_PREFIX "2", +		ACCEL_PATH_SWITCH_TAB_PREFIX "2", GDK_MOD1_MASK, GDK_2, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Tab 3"), +		KEY_SWITCH_TAB_PREFIX "3", +		ACCEL_PATH_SWITCH_TAB_PREFIX "3", GDK_MOD1_MASK, GDK_3, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Tab 4"), +		KEY_SWITCH_TAB_PREFIX "4", +		ACCEL_PATH_SWITCH_TAB_PREFIX "4", GDK_MOD1_MASK, GDK_4, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Tab 5"), +		KEY_SWITCH_TAB_PREFIX "5", +		ACCEL_PATH_SWITCH_TAB_PREFIX "5", GDK_MOD1_MASK, GDK_5, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Tab 6"), +		KEY_SWITCH_TAB_PREFIX "6", +		ACCEL_PATH_SWITCH_TAB_PREFIX "6", GDK_MOD1_MASK, GDK_6, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Tab 7"), +		KEY_SWITCH_TAB_PREFIX "7", +		ACCEL_PATH_SWITCH_TAB_PREFIX "7", GDK_MOD1_MASK, GDK_7, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Tab 8"), +		KEY_SWITCH_TAB_PREFIX "8", +		ACCEL_PATH_SWITCH_TAB_PREFIX "8", GDK_MOD1_MASK, GDK_8, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Tab 9"), +		KEY_SWITCH_TAB_PREFIX "9", +		ACCEL_PATH_SWITCH_TAB_PREFIX "9", GDK_MOD1_MASK, GDK_9, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Tab 10"), +		KEY_SWITCH_TAB_PREFIX "10", +		ACCEL_PATH_SWITCH_TAB_PREFIX "10", GDK_MOD1_MASK, GDK_0, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Tab 11"), +		KEY_SWITCH_TAB_PREFIX "11", +		ACCEL_PATH_SWITCH_TAB_PREFIX "11", 0, 0, NULL, FALSE, TRUE +	}, +	{ +		N_("Switch to Tab 12"), +		KEY_SWITCH_TAB_PREFIX "12", +		ACCEL_PATH_SWITCH_TAB_PREFIX "12", 0, 0, NULL, FALSE, TRUE +	}  }; -static KeyEntry help_entries[] = { -  { N_("Contents"), KEY_HELP, ACCEL_PATH_HELP, 0, GDK_F1, NULL, FALSE, TRUE } +static KeyEntry help_entries[] = +{ +	{ N_("Contents"), KEY_HELP, ACCEL_PATH_HELP, 0, GDK_F1, NULL, FALSE, TRUE }  };  static KeyEntryList all_entries[] =  { -  { file_entries, G_N_ELEMENTS (file_entries), N_("File") }, -  { edit_entries, G_N_ELEMENTS (edit_entries), N_("Edit") }, -  { view_entries, G_N_ELEMENTS (view_entries), N_("View") }, -  { terminal_entries, G_N_ELEMENTS (terminal_entries), N_("Terminal") }, -  { tabs_entries, G_N_ELEMENTS (tabs_entries), N_("Tabs") }, -  { help_entries, G_N_ELEMENTS (help_entries), N_("Help") } +	{ file_entries, G_N_ELEMENTS (file_entries), N_("File") }, +	{ edit_entries, G_N_ELEMENTS (edit_entries), N_("Edit") }, +	{ view_entries, G_N_ELEMENTS (view_entries), N_("View") }, +	{ terminal_entries, G_N_ELEMENTS (terminal_entries), N_("Terminal") }, +	{ tabs_entries, G_N_ELEMENTS (tabs_entries), N_("Tabs") }, +	{ help_entries, G_N_ELEMENTS (help_entries), N_("Help") }  };  enum  { -  ACTION_COLUMN, -  KEYVAL_COLUMN, -  N_COLUMNS +    ACTION_COLUMN, +    KEYVAL_COLUMN, +    N_COLUMNS  };  static void keys_change_notify (MateConfClient *client, @@ -285,126 +352,126 @@ static char*  binding_name (guint            keyval,                GdkModifierType  mask)  { -  if (keyval != 0) -    return gtk_accelerator_name (keyval, mask); +	if (keyval != 0) +		return gtk_accelerator_name (keyval, mask); -  return g_strdup ("disabled"); +	return g_strdup ("disabled");  }  static char*  binding_display_name (guint            keyval,                        GdkModifierType  mask)  { -  if (keyval != 0) -    return gtk_accelerator_get_label (keyval, mask); -     -  return g_strdup (_("Disabled")); +	if (keyval != 0) +		return gtk_accelerator_get_label (keyval, mask); + +	return g_strdup (_("Disabled"));  }  static const char *  key_from_mateconf_key (const char *mateconf_key)  { -  const char *last_slash = strrchr (mateconf_key, '/'); -  if (last_slash) -    return ++last_slash; -  return NULL; +	const char *last_slash = strrchr (mateconf_key, '/'); +	if (last_slash) +		return ++last_slash; +	return NULL;  }  void  terminal_accels_init (void)  { -  MateConfClient *conf; -  guint i, j; +	MateConfClient *conf; +	guint i, j; + +	conf = mateconf_client_get_default (); -  conf = mateconf_client_get_default (); -   -  mateconf_client_add_dir (conf, CONF_KEYS_PREFIX, -                        MATECONF_CLIENT_PRELOAD_ONELEVEL, -                        NULL); -  mateconf_notify_id = -  mateconf_client_notify_add (conf, -                           CONF_KEYS_PREFIX, -                           keys_change_notify, -                           NULL, NULL, NULL); +	mateconf_client_add_dir (conf, CONF_KEYS_PREFIX, +	                         MATECONF_CLIENT_PRELOAD_ONELEVEL, +	                         NULL); +	mateconf_notify_id = +	    mateconf_client_notify_add (conf, +	                                CONF_KEYS_PREFIX, +	                                keys_change_notify, +	                                NULL, NULL, NULL); -  mateconf_key_to_entry = g_hash_table_new (g_str_hash, g_str_equal); +	mateconf_key_to_entry = g_hash_table_new (g_str_hash, g_str_equal); -  notification_group = gtk_accel_group_new (); +	notification_group = gtk_accel_group_new (); -  for (i = 0; i < G_N_ELEMENTS (all_entries); ++i) -    { -      for (j = 0; j < all_entries[i].n_elements; ++j) +	for (i = 0; i < G_N_ELEMENTS (all_entries); ++i)  	{ -	  KeyEntry *key_entry; +		for (j = 0; j < all_entries[i].n_elements; ++j) +		{ +			KeyEntry *key_entry; -	  key_entry = &(all_entries[i].key_entry[j]); +			key_entry = &(all_entries[i].key_entry[j]); -          g_hash_table_insert (mateconf_key_to_entry, -                               (gpointer) key_from_mateconf_key (key_entry->mateconf_key), -                               key_entry); +			g_hash_table_insert (mateconf_key_to_entry, +			                     (gpointer) key_from_mateconf_key (key_entry->mateconf_key), +			                     key_entry); -	  key_entry->closure = g_closure_new_simple (sizeof (GClosure), key_entry); +			key_entry->closure = g_closure_new_simple (sizeof (GClosure), key_entry); -	  g_closure_ref (key_entry->closure); -	  g_closure_sink (key_entry->closure); -	   -	  gtk_accel_group_connect_by_path (notification_group, -					   I_(key_entry->accel_path), -					   key_entry->closure); +			g_closure_ref (key_entry->closure); +			g_closure_sink (key_entry->closure); -          mateconf_client_notify (conf, key_entry->mateconf_key); +			gtk_accel_group_connect_by_path (notification_group, +			                                 I_(key_entry->accel_path), +			                                 key_entry->closure); + +			mateconf_client_notify (conf, key_entry->mateconf_key); +		}  	} -    } -  g_object_unref (conf); -   -  g_signal_connect (notification_group, "accel-changed", -                    G_CALLBACK (accel_changed_callback), NULL); +	g_object_unref (conf); + +	g_signal_connect (notification_group, "accel-changed", +	                  G_CALLBACK (accel_changed_callback), NULL);  }  void  terminal_accels_shutdown (void)  { -  MateConfClient *conf; +	MateConfClient *conf; -  conf = mateconf_client_get_default (); -  mateconf_client_notify_remove (conf, mateconf_notify_id); -  mateconf_client_remove_dir (conf, CONF_KEYS_PREFIX, NULL); -  g_object_unref (conf); +	conf = mateconf_client_get_default (); +	mateconf_client_notify_remove (conf, mateconf_notify_id); +	mateconf_client_remove_dir (conf, CONF_KEYS_PREFIX, NULL); +	g_object_unref (conf); -  if (sync_idle_id != 0) -    { -      g_source_remove (sync_idle_id); -      sync_idle_id = 0; +	if (sync_idle_id != 0) +	{ +		g_source_remove (sync_idle_id); +		sync_idle_id = 0; -      sync_idle_cb (NULL); -    } +		sync_idle_cb (NULL); +	} -  g_hash_table_destroy (mateconf_key_to_entry); -  mateconf_key_to_entry = NULL; +	g_hash_table_destroy (mateconf_key_to_entry); +	mateconf_key_to_entry = NULL; -  g_object_unref (notification_group); -  notification_group = NULL; +	g_object_unref (notification_group); +	notification_group = NULL;  }  static gboolean  update_model_foreach (GtkTreeModel *model, -		      GtkTreePath  *path, -		      GtkTreeIter  *iter, -		      gpointer      data) +                      GtkTreePath  *path, +                      GtkTreeIter  *iter, +                      gpointer      data)  { -  KeyEntry *key_entry = NULL; - -  gtk_tree_model_get (model, iter, -		      KEYVAL_COLUMN, &key_entry, -		      -1); - -  if (key_entry == (KeyEntry *) data) -    { -      gtk_tree_model_row_changed (model, path, iter); -      return TRUE; -    } -  return FALSE; +	KeyEntry *key_entry = NULL; + +	gtk_tree_model_get (model, iter, +	                    KEYVAL_COLUMN, &key_entry, +	                    -1); + +	if (key_entry == (KeyEntry *) data) +	{ +		gtk_tree_model_row_changed (model, path, iter); +		return TRUE; +	} +	return FALSE;  }  static void @@ -413,82 +480,82 @@ keys_change_notify (MateConfClient *client,                      MateConfEntry  *entry,                      gpointer     user_data)  { -  MateConfValue *val; -  KeyEntry *key_entry; -  GdkModifierType mask; -  guint keyval; +	MateConfValue *val; +	KeyEntry *key_entry; +	GdkModifierType mask; +	guint keyval; + +	_terminal_debug_print (TERMINAL_DEBUG_ACCELS, +	                       "key %s changed\n", +	                       mateconf_entry_get_key (entry)); -  _terminal_debug_print (TERMINAL_DEBUG_ACCELS, -                         "key %s changed\n", -                         mateconf_entry_get_key (entry)); -   -  val = mateconf_entry_get_value (entry); +	val = mateconf_entry_get_value (entry);  #ifdef MATE_ENABLE_DEBUG -  _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ACCELS) -    { -      if (val == NULL) -        _terminal_debug_print (TERMINAL_DEBUG_ACCELS, " changed to be unset\n"); -      else if (val->type != MATECONF_VALUE_STRING) -        _terminal_debug_print (TERMINAL_DEBUG_ACCELS, " changed to non-string value\n"); -      else -        _terminal_debug_print (TERMINAL_DEBUG_ACCELS, -                               " changed to \"%s\"\n", -                               mateconf_value_get_string (val)); -    } +	_TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ACCELS) +	{ +		if (val == NULL) +			_terminal_debug_print (TERMINAL_DEBUG_ACCELS, " changed to be unset\n"); +		else if (val->type != MATECONF_VALUE_STRING) +			_terminal_debug_print (TERMINAL_DEBUG_ACCELS, " changed to non-string value\n"); +		else +			_terminal_debug_print (TERMINAL_DEBUG_ACCELS, +			                       " changed to \"%s\"\n", +			                       mateconf_value_get_string (val)); +	}  #endif -  key_entry = g_hash_table_lookup (mateconf_key_to_entry, key_from_mateconf_key (mateconf_entry_get_key (entry))); -  if (!key_entry) -    { -      /* shouldn't really happen, but let's be safe */ -      _terminal_debug_print (TERMINAL_DEBUG_ACCELS, -                             "  WARNING: KeyEntry for changed key not found, bailing out\n"); -      return; -    } - -  if (!binding_from_value (val, &keyval, &mask)) -    { -      const char *str = val->type == MATECONF_VALUE_STRING ? mateconf_value_get_string (val) : NULL; -      g_printerr ("The value \"%s\" of configuration key %s is not a valid accelerator\n", -                  str ? str : "(null)", -                  key_entry->mateconf_key); -      return; -    } - -  key_entry->mateconf_keyval = keyval; -  key_entry->mateconf_mask = mask; - -  /* Unlock the path, so we can change its accel */ -  if (!key_entry->accel_path_unlocked) -    gtk_accel_map_unlock_path (key_entry->accel_path); - -  /* sync over to GTK */ -  _terminal_debug_print (TERMINAL_DEBUG_ACCELS, -                         "changing path %s to %s\n", -                         key_entry->accel_path, -                         binding_name (keyval, mask)); /* memleak */ -  inside_mateconf_notify += 1; -  /* Note that this may return FALSE, e.g. when the entry was already set correctly. */ -  gtk_accel_map_change_entry (key_entry->accel_path, -                              keyval, mask, -                              TRUE); -  inside_mateconf_notify -= 1; - -  /* Lock the path if the mateconf key isn't writable */ -  key_entry->accel_path_unlocked = mateconf_entry_get_is_writable (entry); -  if (!key_entry->accel_path_unlocked) -    gtk_accel_map_lock_path (key_entry->accel_path); - -  /* This seems necessary to update the tree model, since sometimes the -   * notification on the notification_group seems not to be emitted correctly. -   * Without this change, when trying to set an accel to e.g. Alt-T (while the main -   * menu in the terminal windows is _Terminal with Alt-T mnemonic) only displays -   * the accel change after a re-expose of the row. -   * FIXME: Find out *why* the accel-changed signal is wrong here! -   */ -  if (edit_keys_store) -    gtk_tree_model_foreach (GTK_TREE_MODEL (edit_keys_store), update_model_foreach, key_entry); +	key_entry = g_hash_table_lookup (mateconf_key_to_entry, key_from_mateconf_key (mateconf_entry_get_key (entry))); +	if (!key_entry) +	{ +		/* shouldn't really happen, but let's be safe */ +		_terminal_debug_print (TERMINAL_DEBUG_ACCELS, +		                       "  WARNING: KeyEntry for changed key not found, bailing out\n"); +		return; +	} + +	if (!binding_from_value (val, &keyval, &mask)) +	{ +		const char *str = val->type == MATECONF_VALUE_STRING ? mateconf_value_get_string (val) : NULL; +		g_printerr ("The value \"%s\" of configuration key %s is not a valid accelerator\n", +		            str ? str : "(null)", +		            key_entry->mateconf_key); +		return; +	} + +	key_entry->mateconf_keyval = keyval; +	key_entry->mateconf_mask = mask; + +	/* Unlock the path, so we can change its accel */ +	if (!key_entry->accel_path_unlocked) +		gtk_accel_map_unlock_path (key_entry->accel_path); + +	/* sync over to GTK */ +	_terminal_debug_print (TERMINAL_DEBUG_ACCELS, +	                       "changing path %s to %s\n", +	                       key_entry->accel_path, +	                       binding_name (keyval, mask)); /* memleak */ +	inside_mateconf_notify += 1; +	/* Note that this may return FALSE, e.g. when the entry was already set correctly. */ +	gtk_accel_map_change_entry (key_entry->accel_path, +	                            keyval, mask, +	                            TRUE); +	inside_mateconf_notify -= 1; + +	/* Lock the path if the mateconf key isn't writable */ +	key_entry->accel_path_unlocked = mateconf_entry_get_is_writable (entry); +	if (!key_entry->accel_path_unlocked) +		gtk_accel_map_lock_path (key_entry->accel_path); + +	/* This seems necessary to update the tree model, since sometimes the +	 * notification on the notification_group seems not to be emitted correctly. +	 * Without this change, when trying to set an accel to e.g. Alt-T (while the main +	 * menu in the terminal windows is _Terminal with Alt-T mnemonic) only displays +	 * the accel change after a re-expose of the row. +	 * FIXME: Find out *why* the accel-changed signal is wrong here! +	 */ +	if (edit_keys_store) +		gtk_tree_model_foreach (GTK_TREE_MODEL (edit_keys_store), update_model_foreach, key_entry);  }  static void @@ -498,35 +565,35 @@ accel_changed_callback (GtkAccelGroup  *accel_group,                          GClosure       *accel_closure,                          gpointer        data)  { -  /* FIXME because GTK accel API is so nonsensical, we get -   * a notify for each closure, on both the added and the removed -   * accelerator. We just use the accel closure to find our -   * accel entry, then update the value of that entry. -   * We use an idle function to avoid setting the entry -   * in mateconf when the accelerator gets removed and then -   * setting it again when it gets added. -   */ -  KeyEntry *key_entry; -   -  _terminal_debug_print (TERMINAL_DEBUG_ACCELS, -                         "Changed accel %s closure %p\n", -                         binding_name (keyval, modifier), /* memleak */ -                         accel_closure); - -  if (inside_mateconf_notify) -    { -      _terminal_debug_print (TERMINAL_DEBUG_ACCELS, -                             "Ignoring change from gtk because we're inside a mateconf notify\n"); -      return; -    } - -  key_entry = accel_closure->data; -  g_assert (key_entry); - -  key_entry->needs_mateconf_sync = TRUE; - -  if (sync_idle_id == 0) -    sync_idle_id = g_idle_add (sync_idle_cb, NULL); +	/* FIXME because GTK accel API is so nonsensical, we get +	 * a notify for each closure, on both the added and the removed +	 * accelerator. We just use the accel closure to find our +	 * accel entry, then update the value of that entry. +	 * We use an idle function to avoid setting the entry +	 * in mateconf when the accelerator gets removed and then +	 * setting it again when it gets added. +	 */ +	KeyEntry *key_entry; + +	_terminal_debug_print (TERMINAL_DEBUG_ACCELS, +	                       "Changed accel %s closure %p\n", +	                       binding_name (keyval, modifier), /* memleak */ +	                       accel_closure); + +	if (inside_mateconf_notify) +	{ +		_terminal_debug_print (TERMINAL_DEBUG_ACCELS, +		                       "Ignoring change from gtk because we're inside a mateconf notify\n"); +		return; +	} + +	key_entry = accel_closure->data; +	g_assert (key_entry); + +	key_entry->needs_mateconf_sync = TRUE; + +	if (sync_idle_id == 0) +		sync_idle_id = g_idle_add (sync_idle_cb, NULL);  }  static gboolean @@ -534,20 +601,20 @@ binding_from_string (const char      *str,                       guint           *accelerator_key,                       GdkModifierType *accelerator_mods)  { -  if (str == NULL || -      strcmp (str, "disabled") == 0) -    { -      *accelerator_key = 0; -      *accelerator_mods = 0; -      return TRUE; -    } - -  gtk_accelerator_parse (str, accelerator_key, accelerator_mods); -  if (*accelerator_key == 0 && -      *accelerator_mods == 0) -    return FALSE; - -  return TRUE; +	if (str == NULL || +	        strcmp (str, "disabled") == 0) +	{ +		*accelerator_key = 0; +		*accelerator_mods = 0; +		return TRUE; +	} + +	gtk_accelerator_parse (str, accelerator_key, accelerator_mods); +	if (*accelerator_key == 0 && +	        *accelerator_mods == 0) +		return FALSE; + +	return TRUE;  }  static gboolean @@ -555,20 +622,20 @@ binding_from_value (MateConfValue       *value,                      guint            *accelerator_key,                      GdkModifierType  *accelerator_mods)  { -  if (value == NULL) -    { -      /* unset */ -      *accelerator_key = 0; -      *accelerator_mods = 0; -      return TRUE; -    } - -  if (value->type != MATECONF_VALUE_STRING) -    return FALSE; - -  return binding_from_string (mateconf_value_get_string (value), -                              accelerator_key, -                              accelerator_mods); +	if (value == NULL) +	{ +		/* unset */ +		*accelerator_key = 0; +		*accelerator_mods = 0; +		return TRUE; +	} + +	if (value->type != MATECONF_VALUE_STRING) +		return FALSE; + +	return binding_from_string (mateconf_value_get_string (value), +	                            accelerator_key, +	                            accelerator_mods);  }  static void @@ -576,51 +643,51 @@ add_key_entry_to_changeset (gpointer key,                              KeyEntry *key_entry,                              MateConfChangeSet *changeset)  { -  GtkAccelKey gtk_key; +	GtkAccelKey gtk_key; -  if (!key_entry->needs_mateconf_sync) -    return; +	if (!key_entry->needs_mateconf_sync) +		return; -  key_entry->needs_mateconf_sync = FALSE; +	key_entry->needs_mateconf_sync = FALSE; -  if (gtk_accel_map_lookup_entry (key_entry->accel_path, >k_key) && -      (gtk_key.accel_key != key_entry->mateconf_keyval || -       gtk_key.accel_mods != key_entry->mateconf_mask)) -    { -      char *accel_name; +	if (gtk_accel_map_lookup_entry (key_entry->accel_path, >k_key) && +	        (gtk_key.accel_key != key_entry->mateconf_keyval || +	         gtk_key.accel_mods != key_entry->mateconf_mask)) +	{ +		char *accel_name; -      accel_name = binding_name (gtk_key.accel_key, gtk_key.accel_mods); -      mateconf_change_set_set_string (changeset,  key_entry->mateconf_key, accel_name); -      g_free (accel_name); -    } +		accel_name = binding_name (gtk_key.accel_key, gtk_key.accel_mods); +		mateconf_change_set_set_string (changeset,  key_entry->mateconf_key, accel_name); +		g_free (accel_name); +	}  } -               +  static gboolean  sync_idle_cb (gpointer data)  { -  MateConfClient *conf; -  MateConfChangeSet *changeset; -  GError *error = NULL; - -  _terminal_debug_print (TERMINAL_DEBUG_ACCELS, -                         "mateconf sync handler\n"); -   -  sync_idle_id = 0; - -  conf = mateconf_client_get_default (); - -  changeset = mateconf_change_set_new (); -  g_hash_table_foreach (mateconf_key_to_entry, (GHFunc) add_key_entry_to_changeset, changeset); -  if (!mateconf_client_commit_change_set (conf, changeset, TRUE, &error)) -    { -      g_printerr ("Error committing the accelerator changeset: %s\n", error->message); -      g_error_free (error); -    } -               -  mateconf_change_set_unref (changeset); -  g_object_unref (conf); - -  return FALSE; +	MateConfClient *conf; +	MateConfChangeSet *changeset; +	GError *error = NULL; + +	_terminal_debug_print (TERMINAL_DEBUG_ACCELS, +	                       "mateconf sync handler\n"); + +	sync_idle_id = 0; + +	conf = mateconf_client_get_default (); + +	changeset = mateconf_change_set_new (); +	g_hash_table_foreach (mateconf_key_to_entry, (GHFunc) add_key_entry_to_changeset, changeset); +	if (!mateconf_client_commit_change_set (conf, changeset, TRUE, &error)) +	{ +		g_printerr ("Error committing the accelerator changeset: %s\n", error->message); +		g_error_free (error); +	} + +	mateconf_change_set_unref (changeset); +	g_object_unref (conf); + +	return FALSE;  }  /* We have the same KeyEntry* in both columns; @@ -635,25 +702,25 @@ accel_set_func (GtkTreeViewColumn *tree_column,                  GtkTreeIter       *iter,                  gpointer           data)  { -  KeyEntry *ke; -   -  gtk_tree_model_get (model, iter, -                      KEYVAL_COLUMN, &ke, -                      -1); - -  if (ke == NULL) -    /* This is a title row */ -    g_object_set (cell, -                  "visible", FALSE, -		  NULL); -  else -    g_object_set (cell, -                  "visible", TRUE, -                  "sensitive", ke->accel_path_unlocked, -                  "editable", ke->accel_path_unlocked, -                  "accel-key", ke->mateconf_keyval, -                  "accel-mods", ke->mateconf_mask, -		  NULL); +	KeyEntry *ke; + +	gtk_tree_model_get (model, iter, +	                    KEYVAL_COLUMN, &ke, +	                    -1); + +	if (ke == NULL) +		/* This is a title row */ +		g_object_set (cell, +		              "visible", FALSE, +		              NULL); +	else +		g_object_set (cell, +		              "visible", TRUE, +		              "sensitive", ke->accel_path_unlocked, +		              "editable", ke->accel_path_unlocked, +		              "accel-key", ke->mateconf_keyval, +		              "accel-mods", ke->mateconf_mask, +		              NULL);  }  static int @@ -662,48 +729,48 @@ accel_compare_func (GtkTreeModel *model,                      GtkTreeIter  *b,                      gpointer      user_data)  { -  KeyEntry *ke_a; -  KeyEntry *ke_b; -  char *name_a; -  char *name_b; -  int result; -   -  gtk_tree_model_get (model, a, -                      KEYVAL_COLUMN, &ke_a, -                      -1); -  if (ke_a == NULL) -    { -      gtk_tree_model_get (model, a, -			  ACTION_COLUMN, &name_a, -			  -1); -    } -  else -    { -      name_a = binding_display_name (ke_a->mateconf_keyval, -                                     ke_a->mateconf_mask); -    } - -  gtk_tree_model_get (model, b, -                      KEYVAL_COLUMN, &ke_b, -                      -1); -  if (ke_b == NULL) -    { -      gtk_tree_model_get (model, b, -                          ACTION_COLUMN, &name_b, -                          -1); -    } -  else -    { -      name_b = binding_display_name (ke_b->mateconf_keyval, -                                     ke_b->mateconf_mask); -    } -   -  result = g_utf8_collate (name_a, name_b); - -  g_free (name_a); -  g_free (name_b); - -  return result; +	KeyEntry *ke_a; +	KeyEntry *ke_b; +	char *name_a; +	char *name_b; +	int result; + +	gtk_tree_model_get (model, a, +	                    KEYVAL_COLUMN, &ke_a, +	                    -1); +	if (ke_a == NULL) +	{ +		gtk_tree_model_get (model, a, +		                    ACTION_COLUMN, &name_a, +		                    -1); +	} +	else +	{ +		name_a = binding_display_name (ke_a->mateconf_keyval, +		                               ke_a->mateconf_mask); +	} + +	gtk_tree_model_get (model, b, +	                    KEYVAL_COLUMN, &ke_b, +	                    -1); +	if (ke_b == NULL) +	{ +		gtk_tree_model_get (model, b, +		                    ACTION_COLUMN, &name_b, +		                    -1); +	} +	else +	{ +		name_b = binding_display_name (ke_b->mateconf_keyval, +		                               ke_b->mateconf_mask); +	} + +	result = g_utf8_collate (name_a, name_b); + +	g_free (name_a); +	g_free (name_b); + +	return result;  }  static void @@ -713,7 +780,7 @@ treeview_accel_changed_cb (GtkAccelGroup  *accel_group,                             GClosure *accel_closure,                             GtkTreeModel *model)  { -  gtk_tree_model_foreach (model, update_model_foreach, accel_closure->data); +	gtk_tree_model_foreach (model, update_model_foreach, accel_closure->data);  }  static void @@ -724,95 +791,99 @@ accel_edited_callback (GtkCellRendererAccel *cell,                         guint                 hardware_keycode,                         GtkTreeView          *view)  { -  GtkTreeModel *model; -  GtkTreePath *path; -  GtkTreeIter iter; -  KeyEntry *ke; -  GtkAccelGroupEntry *entries; -  guint n_entries; -  char *str; -  MateConfClient *conf; - -  model = gtk_tree_view_get_model (view); - -  path = gtk_tree_path_new_from_string (path_string); -  if (!path) -    return; - -  if (!gtk_tree_model_get_iter (model, &iter, path)) { -    gtk_tree_path_free (path); -    return; -  } -  gtk_tree_path_free (path); - -  gtk_tree_model_get (model, &iter, KEYVAL_COLUMN, &ke, -1); - -  /* sanity check */ -  if (ke == NULL) -    return; - -  /* Check if we already have an entry using this accel */ -  entries = gtk_accel_group_query (notification_group, keyval, mask, &n_entries); -  if (n_entries > 0) -    { -      if (entries[0].accel_path_quark != g_quark_from_string (ke->accel_path)) -        { -          GtkWidget *dialog; -          char *name; -          KeyEntry *other_key; - -          name = gtk_accelerator_get_label (keyval, mask); -          other_key = entries[0].closure->data; -          g_assert (other_key); - -          dialog = -            gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))), -                                    GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, -                                    GTK_MESSAGE_WARNING, -                                    GTK_BUTTONS_OK, -                                    _("The shortcut key “%s” is already bound to the “%s” action"), -                                    name, -                                    other_key->user_visible_name ? _(other_key->user_visible_name) : other_key->mateconf_key); -          g_free (name); - -          g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); -          gtk_window_present (GTK_WINDOW (dialog)); -        } - -      return; -    } - -  str = binding_name (keyval, mask); - -  _terminal_debug_print (TERMINAL_DEBUG_ACCELS, -                         "Edited path %s keyval %s, setting mateconf to %s\n", -                         ke->accel_path, -                         gdk_keyval_name (keyval) ? gdk_keyval_name (keyval) : "null", -                         str); +	GtkTreeModel *model; +	GtkTreePath *path; +	GtkTreeIter iter; +	KeyEntry *ke; +	GtkAccelGroupEntry *entries; +	guint n_entries; +	char *str; +	MateConfClient *conf; + +	model = gtk_tree_view_get_model (view); + +	path = gtk_tree_path_new_from_string (path_string); +	if (!path) +		return; + +	if (!gtk_tree_model_get_iter (model, &iter, path)) +	{ +		gtk_tree_path_free (path); +		return; +	} +	gtk_tree_path_free (path); + +	gtk_tree_model_get (model, &iter, KEYVAL_COLUMN, &ke, -1); + +	/* sanity check */ +	if (ke == NULL) +		return; + +	/* Check if we already have an entry using this accel */ +	entries = gtk_accel_group_query (notification_group, keyval, mask, &n_entries); +	if (n_entries > 0) +	{ +		if (entries[0].accel_path_quark != g_quark_from_string (ke->accel_path)) +		{ +			GtkWidget *dialog; +			char *name; +			KeyEntry *other_key; + +			name = gtk_accelerator_get_label (keyval, mask); +			other_key = entries[0].closure->data; +			g_assert (other_key); + +			dialog = +			    gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))), +			                            GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, +			                            GTK_MESSAGE_WARNING, +			                            GTK_BUTTONS_OK, +			                            _("The shortcut key “%s” is already bound to the “%s” action"), +			                            name, +			                            other_key->user_visible_name ? _(other_key->user_visible_name) : other_key->mateconf_key); +			g_free (name); + +			g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); +			gtk_window_present (GTK_WINDOW (dialog)); +		} + +		return; +	} + +	str = binding_name (keyval, mask); + +	_terminal_debug_print (TERMINAL_DEBUG_ACCELS, +	                       "Edited path %s keyval %s, setting mateconf to %s\n", +	                       ke->accel_path, +	                       gdk_keyval_name (keyval) ? gdk_keyval_name (keyval) : "null", +	                       str);  #ifdef MATE_ENABLE_DEBUG -  _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ACCELS) -    { -      GtkAccelKey old_key; - -      if (gtk_accel_map_lookup_entry (ke->accel_path, &old_key)) { -        _terminal_debug_print (TERMINAL_DEBUG_ACCELS, -                               "  Old entry of path %s is keyval %s mask %x\n", -                               ke->accel_path, gdk_keyval_name (old_key.accel_key), old_key.accel_mods); -      } else { -        _terminal_debug_print (TERMINAL_DEBUG_ACCELS, -                               "  Failed to look up the old entry of path %s\n", -                               ke->accel_path); -      } -    } +	_TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ACCELS) +	{ +		GtkAccelKey old_key; + +		if (gtk_accel_map_lookup_entry (ke->accel_path, &old_key)) +		{ +			_terminal_debug_print (TERMINAL_DEBUG_ACCELS, +			                       "  Old entry of path %s is keyval %s mask %x\n", +			                       ke->accel_path, gdk_keyval_name (old_key.accel_key), old_key.accel_mods); +		} +		else +		{ +			_terminal_debug_print (TERMINAL_DEBUG_ACCELS, +			                       "  Failed to look up the old entry of path %s\n", +			                       ke->accel_path); +		} +	}  #endif -  conf = mateconf_client_get_default (); -  mateconf_client_set_string (conf, -                           ke->mateconf_key, -                           str, -                           NULL); -  g_object_unref (conf); -  g_free (str); +	conf = mateconf_client_get_default (); +	mateconf_client_set_string (conf, +	                            ke->mateconf_key, +	                            str, +	                            NULL); +	g_object_unref (conf); +	g_free (str);  }  static void @@ -820,71 +891,72 @@ accel_cleared_callback (GtkCellRendererAccel *cell,                          gchar                *path_string,                          GtkTreeView          *view)  { -  GtkTreeModel *model; -  GtkTreePath *path; -  GtkTreeIter iter; -  KeyEntry *ke; -  char *str; -  MateConfClient *conf; - -  model = gtk_tree_view_get_model (view); - -  path = gtk_tree_path_new_from_string (path_string); -  if (!path) -    return; - -  if (!gtk_tree_model_get_iter (model, &iter, path)) { -    gtk_tree_path_free (path); -    return; -  } -  gtk_tree_path_free (path); - -  gtk_tree_model_get (model, &iter, KEYVAL_COLUMN, &ke, -1); - -  /* sanity check */ -  if (ke == NULL) -    return; - -  ke->mateconf_keyval = 0; -  ke->mateconf_mask = 0; -  ke->needs_mateconf_sync = TRUE; - -  str = binding_name (0, 0); - -  _terminal_debug_print (TERMINAL_DEBUG_ACCELS, -                         "Cleared keybinding for mateconf %s", -                         ke->mateconf_key); - -  conf = mateconf_client_get_default (); -  mateconf_client_set_string (conf, -                           ke->mateconf_key, -                           str, -                           NULL); -  g_object_unref (conf); -  g_free (str); +	GtkTreeModel *model; +	GtkTreePath *path; +	GtkTreeIter iter; +	KeyEntry *ke; +	char *str; +	MateConfClient *conf; + +	model = gtk_tree_view_get_model (view); + +	path = gtk_tree_path_new_from_string (path_string); +	if (!path) +		return; + +	if (!gtk_tree_model_get_iter (model, &iter, path)) +	{ +		gtk_tree_path_free (path); +		return; +	} +	gtk_tree_path_free (path); + +	gtk_tree_model_get (model, &iter, KEYVAL_COLUMN, &ke, -1); + +	/* sanity check */ +	if (ke == NULL) +		return; + +	ke->mateconf_keyval = 0; +	ke->mateconf_mask = 0; +	ke->needs_mateconf_sync = TRUE; + +	str = binding_name (0, 0); + +	_terminal_debug_print (TERMINAL_DEBUG_ACCELS, +	                       "Cleared keybinding for mateconf %s", +	                       ke->mateconf_key); + +	conf = mateconf_client_get_default (); +	mateconf_client_set_string (conf, +	                            ke->mateconf_key, +	                            str, +	                            NULL); +	g_object_unref (conf); +	g_free (str);  }  static void  edit_keys_dialog_destroy_cb (GtkWidget *widget,                               gpointer user_data)  { -  g_signal_handlers_disconnect_by_func (notification_group, G_CALLBACK (treeview_accel_changed_cb), user_data); -  edit_keys_dialog = NULL; -  edit_keys_store = NULL; +	g_signal_handlers_disconnect_by_func (notification_group, G_CALLBACK (treeview_accel_changed_cb), user_data); +	edit_keys_dialog = NULL; +	edit_keys_store = NULL;  }  static void  edit_keys_dialog_response_cb (GtkWidget *editor,                                int response,                                gpointer use_data) -{   -  if (response == GTK_RESPONSE_HELP) -    { -      terminal_util_show_help ("mate-terminal-shortcuts", GTK_WINDOW (editor)); -      return; -    } -     -  gtk_widget_destroy (editor); +{ +	if (response == GTK_RESPONSE_HELP) +	{ +		terminal_util_show_help ("mate-terminal-shortcuts", GTK_WINDOW (editor)); +		return; +	} + +	gtk_widget_destroy (editor);  }  #ifdef MATE_ENABLE_DEBUG @@ -894,119 +966,119 @@ row_changed (GtkTreeModel *tree_model,               GtkTreeIter  *iter,               gpointer      user_data)  { -  _terminal_debug_print (TERMINAL_DEBUG_ACCELS, -                         "ROW-CHANGED [%s]\n", gtk_tree_path_to_string (path) /* leak */); +	_terminal_debug_print (TERMINAL_DEBUG_ACCELS, +	                       "ROW-CHANGED [%s]\n", gtk_tree_path_to_string (path) /* leak */);  }  #endif  void  terminal_edit_keys_dialog_show (GtkWindow *transient_parent)  { -  TerminalApp *app; -  GtkWidget *dialog, *tree_view, *disable_mnemonics_button, *disable_menu_accel_button; -  GtkTreeViewColumn *column; -  GtkCellRenderer *cell_renderer; -  GtkTreeStore *tree; -  guint i; - -  if (edit_keys_dialog != NULL) -    goto done; - -  if (!terminal_util_load_builder_file ("keybinding-editor.ui", -                                        "keybindings-dialog", &dialog, -                                        "disable-mnemonics-checkbutton", &disable_mnemonics_button, -                                        "disable-menu-accel-checkbutton", &disable_menu_accel_button, -                                        "accelerators-treeview", &tree_view, -                                        NULL)) -    return; - -  app = terminal_app_get (); -  terminal_util_bind_object_property_to_widget (G_OBJECT (app), TERMINAL_APP_ENABLE_MNEMONICS, -                                                disable_mnemonics_button, 0); -  terminal_util_bind_object_property_to_widget (G_OBJECT (app), TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, -                                                disable_menu_accel_button, 0); - -  /* Column 1 */ -  cell_renderer = gtk_cell_renderer_text_new (); -  column = gtk_tree_view_column_new_with_attributes (_("_Action"), -						     cell_renderer, -						     "text", ACTION_COLUMN, -						     NULL); -  gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column); -  gtk_tree_view_column_set_sort_column_id (column, ACTION_COLUMN); - -  /* Column 2 */ -  cell_renderer = gtk_cell_renderer_accel_new (); -  g_object_set (cell_renderer, -                "editable", TRUE, -                "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK, -                NULL); -  g_signal_connect (cell_renderer, "accel-edited", -                    G_CALLBACK (accel_edited_callback), tree_view); -  g_signal_connect (cell_renderer, "accel-cleared", -                    G_CALLBACK (accel_cleared_callback), tree_view); -   -  column = gtk_tree_view_column_new (); -  gtk_tree_view_column_set_title (column, _("Shortcut _Key")); -  gtk_tree_view_column_pack_start (column, cell_renderer, TRUE); -  gtk_tree_view_column_set_cell_data_func (column, cell_renderer, accel_set_func, NULL, NULL); -  gtk_tree_view_column_set_sort_column_id (column, KEYVAL_COLUMN);   -  gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column); - -  /* Add the data */ - -  tree = edit_keys_store = gtk_tree_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER); +	TerminalApp *app; +	GtkWidget *dialog, *tree_view, *disable_mnemonics_button, *disable_menu_accel_button; +	GtkTreeViewColumn *column; +	GtkCellRenderer *cell_renderer; +	GtkTreeStore *tree; +	guint i; + +	if (edit_keys_dialog != NULL) +		goto done; + +	if (!terminal_util_load_builder_file ("keybinding-editor.ui", +	                                      "keybindings-dialog", &dialog, +	                                      "disable-mnemonics-checkbutton", &disable_mnemonics_button, +	                                      "disable-menu-accel-checkbutton", &disable_menu_accel_button, +	                                      "accelerators-treeview", &tree_view, +	                                      NULL)) +		return; + +	app = terminal_app_get (); +	terminal_util_bind_object_property_to_widget (G_OBJECT (app), TERMINAL_APP_ENABLE_MNEMONICS, +	        disable_mnemonics_button, 0); +	terminal_util_bind_object_property_to_widget (G_OBJECT (app), TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, +	        disable_menu_accel_button, 0); + +	/* Column 1 */ +	cell_renderer = gtk_cell_renderer_text_new (); +	column = gtk_tree_view_column_new_with_attributes (_("_Action"), +	         cell_renderer, +	         "text", ACTION_COLUMN, +	         NULL); +	gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column); +	gtk_tree_view_column_set_sort_column_id (column, ACTION_COLUMN); + +	/* Column 2 */ +	cell_renderer = gtk_cell_renderer_accel_new (); +	g_object_set (cell_renderer, +	              "editable", TRUE, +	              "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK, +	              NULL); +	g_signal_connect (cell_renderer, "accel-edited", +	                  G_CALLBACK (accel_edited_callback), tree_view); +	g_signal_connect (cell_renderer, "accel-cleared", +	                  G_CALLBACK (accel_cleared_callback), tree_view); + +	column = gtk_tree_view_column_new (); +	gtk_tree_view_column_set_title (column, _("Shortcut _Key")); +	gtk_tree_view_column_pack_start (column, cell_renderer, TRUE); +	gtk_tree_view_column_set_cell_data_func (column, cell_renderer, accel_set_func, NULL, NULL); +	gtk_tree_view_column_set_sort_column_id (column, KEYVAL_COLUMN); +	gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column); + +	/* Add the data */ + +	tree = edit_keys_store = gtk_tree_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER);  #ifdef MATE_ENABLE_DEBUG -  _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ACCELS) -    g_signal_connect (tree, "row-changed", G_CALLBACK (row_changed), NULL); +	_TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ACCELS) +	g_signal_connect (tree, "row-changed", G_CALLBACK (row_changed), NULL);  #endif -  for (i = 0; i < G_N_ELEMENTS (all_entries); ++i) -    { -      GtkTreeIter parent_iter; -      guint j; - -      gtk_tree_store_append (tree, &parent_iter, NULL); -      gtk_tree_store_set (tree, &parent_iter, -			  ACTION_COLUMN, _(all_entries[i].user_visible_name), -			  -1); - -      for (j = 0; j < all_entries[i].n_elements; ++j) +	for (i = 0; i < G_N_ELEMENTS (all_entries); ++i)  	{ -	  KeyEntry *key_entry = &(all_entries[i].key_entry[j]); -	  GtkTreeIter iter; - -          gtk_tree_store_insert_with_values (tree, &iter, &parent_iter, -1, -                                             ACTION_COLUMN, _(key_entry->user_visible_name), -                                             KEYVAL_COLUMN, key_entry, -                                             -1); +		GtkTreeIter parent_iter; +		guint j; + +		gtk_tree_store_append (tree, &parent_iter, NULL); +		gtk_tree_store_set (tree, &parent_iter, +		                    ACTION_COLUMN, _(all_entries[i].user_visible_name), +		                    -1); + +		for (j = 0; j < all_entries[i].n_elements; ++j) +		{ +			KeyEntry *key_entry = &(all_entries[i].key_entry[j]); +			GtkTreeIter iter; + +			gtk_tree_store_insert_with_values (tree, &iter, &parent_iter, -1, +			                                   ACTION_COLUMN, _(key_entry->user_visible_name), +			                                   KEYVAL_COLUMN, key_entry, +			                                   -1); +		}  	} -    } -  gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (tree), -                                   KEYVAL_COLUMN, accel_compare_func, -                                   NULL, NULL); -  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (tree), ACTION_COLUMN, -                                        GTK_SORT_ASCENDING); +	gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (tree), +	                                 KEYVAL_COLUMN, accel_compare_func, +	                                 NULL, NULL); +	gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (tree), ACTION_COLUMN, +	                                      GTK_SORT_ASCENDING); -  gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (tree)); -  g_object_unref (tree); +	gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (tree)); +	g_object_unref (tree); -  gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view)); +	gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view)); -  g_signal_connect (notification_group, "accel-changed", -                    G_CALLBACK (treeview_accel_changed_cb), tree); +	g_signal_connect (notification_group, "accel-changed", +	                  G_CALLBACK (treeview_accel_changed_cb), tree); -  edit_keys_dialog = dialog; -  g_signal_connect (dialog, "destroy", -                    G_CALLBACK (edit_keys_dialog_destroy_cb), tree); -  g_signal_connect (dialog, "response", -                    G_CALLBACK (edit_keys_dialog_response_cb), -                    NULL); -  gtk_window_set_default_size (GTK_WINDOW (dialog), -1, 350); +	edit_keys_dialog = dialog; +	g_signal_connect (dialog, "destroy", +	                  G_CALLBACK (edit_keys_dialog_destroy_cb), tree); +	g_signal_connect (dialog, "response", +	                  G_CALLBACK (edit_keys_dialog_response_cb), +	                  NULL); +	gtk_window_set_default_size (GTK_WINDOW (dialog), -1, 350);  done: -  gtk_window_set_transient_for (GTK_WINDOW (edit_keys_dialog), transient_parent); -  gtk_window_present (GTK_WINDOW (edit_keys_dialog)); +	gtk_window_set_transient_for (GTK_WINDOW (edit_keys_dialog), transient_parent); +	gtk_window_present (GTK_WINDOW (edit_keys_dialog));  } diff --git a/src/terminal-accels.h b/src/terminal-accels.h index ee2cc6a..3707146 100644 --- a/src/terminal-accels.h +++ b/src/terminal-accels.h @@ -25,7 +25,7 @@  G_BEGIN_DECLS  void terminal_accels_init (void); -  +  void terminal_accels_shutdown (void);  void terminal_edit_keys_dialog_show (GtkWindow *transient_parent); diff --git a/src/terminal-app.c b/src/terminal-app.c index aa3ede7..12835f1 100644 --- a/src/terminal-app.c +++ b/src/terminal-app.c @@ -72,77 +72,78 @@   *   */ -struct _TerminalAppClass { -  GObjectClass parent_class; +struct _TerminalAppClass +{ +	GObjectClass parent_class; -  void (* quit) (TerminalApp *app); -  void (* profile_list_changed) (TerminalApp *app); -  void (* encoding_list_changed) (TerminalApp *app); +	void (* quit) (TerminalApp *app); +	void (* profile_list_changed) (TerminalApp *app); +	void (* encoding_list_changed) (TerminalApp *app);  };  struct _TerminalApp  { -  GObject parent_instance; - -  GList *windows; -  GtkWidget *new_profile_dialog; -  GtkWidget *manage_profiles_dialog; -  GtkWidget *manage_profiles_list; -  GtkWidget *manage_profiles_new_button; -  GtkWidget *manage_profiles_edit_button; -  GtkWidget *manage_profiles_delete_button; -  GtkWidget *manage_profiles_default_menu; - -  MateConfClient *conf; -  guint profile_list_notify_id; -  guint default_profile_notify_id; -  guint encoding_list_notify_id; -  guint system_font_notify_id; -  guint enable_mnemonics_notify_id; -  guint enable_menu_accels_notify_id; - -  GHashTable *profiles; -  char* default_profile_id; -  TerminalProfile *default_profile; -  gboolean default_profile_locked; - -  GHashTable *encodings; -  gboolean encodings_locked; - -  PangoFontDescription *system_font_desc; -  gboolean enable_mnemonics; -  gboolean enable_menu_accels; +	GObject parent_instance; + +	GList *windows; +	GtkWidget *new_profile_dialog; +	GtkWidget *manage_profiles_dialog; +	GtkWidget *manage_profiles_list; +	GtkWidget *manage_profiles_new_button; +	GtkWidget *manage_profiles_edit_button; +	GtkWidget *manage_profiles_delete_button; +	GtkWidget *manage_profiles_default_menu; + +	MateConfClient *conf; +	guint profile_list_notify_id; +	guint default_profile_notify_id; +	guint encoding_list_notify_id; +	guint system_font_notify_id; +	guint enable_mnemonics_notify_id; +	guint enable_menu_accels_notify_id; + +	GHashTable *profiles; +	char* default_profile_id; +	TerminalProfile *default_profile; +	gboolean default_profile_locked; + +	GHashTable *encodings; +	gboolean encodings_locked; + +	PangoFontDescription *system_font_desc; +	gboolean enable_mnemonics; +	gboolean enable_menu_accels;  };  enum  { -  PROP_0, -  PROP_DEFAULT_PROFILE, -  PROP_ENABLE_MENU_BAR_ACCEL, -  PROP_ENABLE_MNEMONICS, -  PROP_SYSTEM_FONT, +    PROP_0, +    PROP_DEFAULT_PROFILE, +    PROP_ENABLE_MENU_BAR_ACCEL, +    PROP_ENABLE_MNEMONICS, +    PROP_SYSTEM_FONT,  };  enum  { -  QUIT, -  PROFILE_LIST_CHANGED, -  ENCODING_LIST_CHANGED, -  LAST_SIGNAL +    QUIT, +    PROFILE_LIST_CHANGED, +    ENCODING_LIST_CHANGED, +    LAST_SIGNAL  };  static guint signals[LAST_SIGNAL];  enum  { -  COL_PROFILE, -  NUM_COLUMNS +    COL_PROFILE, +    NUM_COLUMNS  };  enum  { -  SOURCE_DEFAULT = 0, -  SOURCE_SESSION = 1 +    SOURCE_DEFAULT = 0, +    SOURCE_SESSION = 1  };  static TerminalApp *global_app = NULL; @@ -169,60 +170,60 @@ extern gboolean mateconf_spawn_daemon(GError** err);  static GdkScreen*  terminal_app_get_screen_by_display_name (const char *display_name, -                                         int screen_number) -{ -  GdkDisplay *display = NULL; -  GdkScreen *screen = NULL; - -  /* --screen=screen_number overrides --display */ - -  if (display_name == NULL) -    display = gdk_display_get_default (); -  else -    { -      GSList *displays, *l; -      const char *period; - -      period = strrchr (display_name, '.'); -      if (period) -        { -          gulong n; -          char *end; - -          errno = 0; -          end = NULL; -          n = g_ascii_strtoull (period + 1, &end, 0); -          if (errno == 0 && (period + 1) != end) -            screen_number = n; -        } - -      displays = gdk_display_manager_list_displays (gdk_display_manager_get ()); -      for (l = displays; l != NULL; l = l->next) -        { -          GdkDisplay *disp = l->data; - -          /* compare without the screen number part, if present */ -          if ((period && strncmp (gdk_display_get_name (disp), display_name, period - display_name) == 0) || -              (period == NULL && strcmp (gdk_display_get_name (disp), display_name) == 0)) -            { -              display = disp; -              break; -            } -        } -      g_slist_free (displays); - -      if (display == NULL) -        display = gdk_display_open (display_name); /* FIXME we never close displays */ -    } - -  if (display == NULL) -    return NULL; -  if (screen_number >= 0) -    screen = gdk_display_get_screen (display, screen_number); -  if (screen == NULL) -    screen = gdk_display_get_default_screen (display); - -  return screen; +        int screen_number) +{ +	GdkDisplay *display = NULL; +	GdkScreen *screen = NULL; + +	/* --screen=screen_number overrides --display */ + +	if (display_name == NULL) +		display = gdk_display_get_default (); +	else +	{ +		GSList *displays, *l; +		const char *period; + +		period = strrchr (display_name, '.'); +		if (period) +		{ +			gulong n; +			char *end; + +			errno = 0; +			end = NULL; +			n = g_ascii_strtoull (period + 1, &end, 0); +			if (errno == 0 && (period + 1) != end) +				screen_number = n; +		} + +		displays = gdk_display_manager_list_displays (gdk_display_manager_get ()); +		for (l = displays; l != NULL; l = l->next) +		{ +			GdkDisplay *disp = l->data; + +			/* compare without the screen number part, if present */ +			if ((period && strncmp (gdk_display_get_name (disp), display_name, period - display_name) == 0) || +			        (period == NULL && strcmp (gdk_display_get_name (disp), display_name) == 0)) +			{ +				display = disp; +				break; +			} +		} +		g_slist_free (displays); + +		if (display == NULL) +			display = gdk_display_open (display_name); /* FIXME we never close displays */ +	} + +	if (display == NULL) +		return NULL; +	if (screen_number >= 0) +		screen = gdk_display_get_screen (display, screen_number); +	if (screen == NULL) +		screen = gdk_display_get_default_screen (display); + +	return screen;  }  /* Menubar mnemonics settings handling */ @@ -231,116 +232,116 @@ static int  profiles_alphabetic_cmp (gconstpointer pa,                           gconstpointer pb)  { -  TerminalProfile *a = (TerminalProfile *) pa; -  TerminalProfile *b = (TerminalProfile *) pb; -  int result; +	TerminalProfile *a = (TerminalProfile *) pa; +	TerminalProfile *b = (TerminalProfile *) pb; +	int result; -  result =  g_utf8_collate (terminal_profile_get_property_string (a, TERMINAL_PROFILE_VISIBLE_NAME), -			    terminal_profile_get_property_string (b, TERMINAL_PROFILE_VISIBLE_NAME)); -  if (result == 0) -    result = strcmp (terminal_profile_get_property_string (a, TERMINAL_PROFILE_NAME), -		     terminal_profile_get_property_string (b, TERMINAL_PROFILE_NAME)); +	result =  g_utf8_collate (terminal_profile_get_property_string (a, TERMINAL_PROFILE_VISIBLE_NAME), +	                          terminal_profile_get_property_string (b, TERMINAL_PROFILE_VISIBLE_NAME)); +	if (result == 0) +		result = strcmp (terminal_profile_get_property_string (a, TERMINAL_PROFILE_NAME), +		                 terminal_profile_get_property_string (b, TERMINAL_PROFILE_NAME)); -  return result; +	return result;  }  typedef struct  { -  TerminalProfile *result; -  const char *target; +	TerminalProfile *result; +	const char *target;  } LookupInfo;  static void  profiles_lookup_by_visible_name_foreach (gpointer key, -                                         gpointer value, -                                         gpointer data) +        gpointer value, +        gpointer data)  { -  LookupInfo *info = data; -  const char *name; +	LookupInfo *info = data; +	const char *name; -  name = terminal_profile_get_property_string (value, TERMINAL_PROFILE_VISIBLE_NAME); -  if (name && strcmp (info->target, name) == 0) -    info->result = value; +	name = terminal_profile_get_property_string (value, TERMINAL_PROFILE_VISIBLE_NAME); +	if (name && strcmp (info->target, name) == 0) +		info->result = value;  }  static void  terminal_window_destroyed (TerminalWindow *window,                             TerminalApp    *app)  { -  app->windows = g_list_remove (app->windows, window); +	app->windows = g_list_remove (app->windows, window); -  if (app->windows == NULL) -    g_signal_emit (app, signals[QUIT], 0); +	if (app->windows == NULL) +		g_signal_emit (app, signals[QUIT], 0);  }  static TerminalProfile *  terminal_app_create_profile (TerminalApp *app,                               const char *name)  { -  TerminalProfile *profile; +	TerminalProfile *profile; -  g_assert (terminal_app_get_profile_by_name (app, name) == NULL); +	g_assert (terminal_app_get_profile_by_name (app, name) == NULL); -  profile = _terminal_profile_new (name); +	profile = _terminal_profile_new (name); -  g_hash_table_insert (app->profiles, -                       g_strdup (terminal_profile_get_property_string (profile, TERMINAL_PROFILE_NAME)), -                       profile /* adopts the refcount */); +	g_hash_table_insert (app->profiles, +	                     g_strdup (terminal_profile_get_property_string (profile, TERMINAL_PROFILE_NAME)), +	                     profile /* adopts the refcount */); -  if (app->default_profile == NULL && -      app->default_profile_id != NULL && -      strcmp (app->default_profile_id, -              terminal_profile_get_property_string (profile, TERMINAL_PROFILE_NAME)) == 0) -    { -      /* We are the default profile */ -      app->default_profile = profile; -      g_object_notify (G_OBJECT (app), TERMINAL_APP_DEFAULT_PROFILE); -    } +	if (app->default_profile == NULL && +	        app->default_profile_id != NULL && +	        strcmp (app->default_profile_id, +	                terminal_profile_get_property_string (profile, TERMINAL_PROFILE_NAME)) == 0) +	{ +		/* We are the default profile */ +		app->default_profile = profile; +		g_object_notify (G_OBJECT (app), TERMINAL_APP_DEFAULT_PROFILE); +	} -  return profile; +	return profile;  }  static void  terminal_app_delete_profile (TerminalApp *app,                               TerminalProfile *profile)  { -  GHashTableIter iter; -  GSList *name_list; -  const char *name, *profile_name; -  char *mateconf_dir; -  GError *error = NULL; -  const char **nameptr = &name; +	GHashTableIter iter; +	GSList *name_list; +	const char *name, *profile_name; +	char *mateconf_dir; +	GError *error = NULL; +	const char **nameptr = &name; -  profile_name = terminal_profile_get_property_string (profile, TERMINAL_PROFILE_NAME); -  mateconf_dir = mateconf_concat_dir_and_key (CONF_PREFIX "/profiles", profile_name); +	profile_name = terminal_profile_get_property_string (profile, TERMINAL_PROFILE_NAME); +	mateconf_dir = mateconf_concat_dir_and_key (CONF_PREFIX "/profiles", profile_name); -  name_list = NULL; -  g_hash_table_iter_init (&iter, app->profiles); -  while (g_hash_table_iter_next (&iter, (gpointer *) nameptr, NULL)) -    { -      if (strcmp (name, profile_name) == 0) -        continue; +	name_list = NULL; +	g_hash_table_iter_init (&iter, app->profiles); +	while (g_hash_table_iter_next (&iter, (gpointer *) nameptr, NULL)) +	{ +		if (strcmp (name, profile_name) == 0) +			continue; -      name_list = g_slist_prepend (name_list, g_strdup (name)); -    } +		name_list = g_slist_prepend (name_list, g_strdup (name)); +	} -  mateconf_client_set_list (app->conf, -                         CONF_GLOBAL_PREFIX"/profile_list", -                         MATECONF_VALUE_STRING, -                         name_list, -                         NULL); +	mateconf_client_set_list (app->conf, +	                          CONF_GLOBAL_PREFIX"/profile_list", +	                          MATECONF_VALUE_STRING, +	                          name_list, +	                          NULL); -  g_slist_foreach (name_list, (GFunc) g_free, NULL); -  g_slist_free (name_list); +	g_slist_foreach (name_list, (GFunc) g_free, NULL); +	g_slist_free (name_list); -  /* And remove the profile directory */ -  if (!mateconf_client_recursive_unset (app->conf, mateconf_dir, MATECONF_UNSET_INCLUDING_SCHEMA_NAMES, &error)) -    { -      g_warning ("Failed to recursively unset %s: %s\n", mateconf_dir, error->message); -      g_error_free (error); -    } +	/* And remove the profile directory */ +	if (!mateconf_client_recursive_unset (app->conf, mateconf_dir, MATECONF_UNSET_INCLUDING_SCHEMA_NAMES, &error)) +	{ +		g_warning ("Failed to recursively unset %s: %s\n", mateconf_dir, error->message); +		g_error_free (error); +	} -  g_free (mateconf_dir); +	g_free (mateconf_dir);  }  static void @@ -350,15 +351,15 @@ terminal_app_profile_cell_data_func (GtkTreeViewColumn *tree_column,                                       GtkTreeIter *iter,                                       gpointer data)  { -  TerminalProfile *profile; -  GValue value = { 0, }; +	TerminalProfile *profile; +	GValue value = { 0, }; -  gtk_tree_model_get (tree_model, iter, (int) COL_PROFILE, &profile, (int) -1); +	gtk_tree_model_get (tree_model, iter, (int) COL_PROFILE, &profile, (int) -1); -  g_value_init (&value, G_TYPE_STRING); -  g_object_get_property (G_OBJECT (profile), "visible-name", &value); -  g_object_set_property (G_OBJECT (cell), "text", &value); -  g_value_unset (&value); +	g_value_init (&value, G_TYPE_STRING); +	g_object_get_property (G_OBJECT (profile), "visible-name", &value); +	g_object_set_property (G_OBJECT (cell), "text", &value); +	g_value_unset (&value);  }  static int @@ -367,18 +368,18 @@ terminal_app_profile_sort_func (GtkTreeModel *model,                                  GtkTreeIter *b,                                  gpointer user_data)  { -  TerminalProfile *profile_a, *profile_b; -  int retval; +	TerminalProfile *profile_a, *profile_b; +	int retval; -  gtk_tree_model_get (model, a, (int) COL_PROFILE, &profile_a, (int) -1); -  gtk_tree_model_get (model, b, (int) COL_PROFILE, &profile_b, (int) -1); +	gtk_tree_model_get (model, a, (int) COL_PROFILE, &profile_a, (int) -1); +	gtk_tree_model_get (model, b, (int) COL_PROFILE, &profile_b, (int) -1); -  retval = profiles_alphabetic_cmp (profile_a, profile_b); +	retval = profiles_alphabetic_cmp (profile_a, profile_b); -  g_object_unref (profile_a); -  g_object_unref (profile_b); +	g_object_unref (profile_a); +	g_object_unref (profile_b); -  return retval; +	return retval;  }  static /* ref */ GtkTreeModel * @@ -387,312 +388,312 @@ terminal_app_get_profile_liststore (TerminalApp *app,                                      GtkTreeIter *selected_profile_iter,                                      gboolean *selected_profile_iter_set)  { -  GtkListStore *store; -  GtkTreeIter iter; -  GList *profiles, *l; -  TerminalProfile *default_profile; +	GtkListStore *store; +	GtkTreeIter iter; +	GList *profiles, *l; +	TerminalProfile *default_profile; -  store = gtk_list_store_new (NUM_COLUMNS, TERMINAL_TYPE_PROFILE); +	store = gtk_list_store_new (NUM_COLUMNS, TERMINAL_TYPE_PROFILE); -  *selected_profile_iter_set = FALSE; +	*selected_profile_iter_set = FALSE; -  if (selected_profile && -      _terminal_profile_get_forgotten (selected_profile)) -    selected_profile = NULL; +	if (selected_profile && +	        _terminal_profile_get_forgotten (selected_profile)) +		selected_profile = NULL; -  profiles = terminal_app_get_profile_list (app); -  default_profile = terminal_app_get_default_profile (app); +	profiles = terminal_app_get_profile_list (app); +	default_profile = terminal_app_get_default_profile (app); -  for (l = profiles; l != NULL; l = l->next) -    { -      TerminalProfile *profile = TERMINAL_PROFILE (l->data); +	for (l = profiles; l != NULL; l = l->next) +	{ +		TerminalProfile *profile = TERMINAL_PROFILE (l->data); -      gtk_list_store_insert_with_values (store, &iter, 0, -                                         (int) COL_PROFILE, profile, -                                         (int) -1); +		gtk_list_store_insert_with_values (store, &iter, 0, +		                                   (int) COL_PROFILE, profile, +		                                   (int) -1); -      if (selected_profile_iter && profile == selected_profile) -        { -          *selected_profile_iter = iter; -          *selected_profile_iter_set = TRUE; -        } -    } -  g_list_free (profiles); +		if (selected_profile_iter && profile == selected_profile) +		{ +			*selected_profile_iter = iter; +			*selected_profile_iter_set = TRUE; +		} +	} +	g_list_free (profiles); -  /* Now turn on sorting */ -  gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (store), -                                   COL_PROFILE, -                                   terminal_app_profile_sort_func, -                                   NULL, NULL); -  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), -                                        COL_PROFILE, GTK_SORT_ASCENDING); +	/* Now turn on sorting */ +	gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (store), +	                                 COL_PROFILE, +	                                 terminal_app_profile_sort_func, +	                                 NULL, NULL); +	gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), +	                                      COL_PROFILE, GTK_SORT_ASCENDING); -  return GTK_TREE_MODEL (store); +	return GTK_TREE_MODEL (store);  }  static /* ref */ TerminalProfile*  profile_combo_box_get_selected (GtkWidget *widget)  { -  GtkComboBox *combo = GTK_COMBO_BOX (widget); -  TerminalProfile *profile = NULL; -  GtkTreeIter iter; +	GtkComboBox *combo = GTK_COMBO_BOX (widget); +	TerminalProfile *profile = NULL; +	GtkTreeIter iter; -  if (gtk_combo_box_get_active_iter (combo, &iter)) -    gtk_tree_model_get (gtk_combo_box_get_model (combo), &iter, -                        (int) COL_PROFILE, &profile, (int) -1); +	if (gtk_combo_box_get_active_iter (combo, &iter)) +		gtk_tree_model_get (gtk_combo_box_get_model (combo), &iter, +		                    (int) COL_PROFILE, &profile, (int) -1); -  return profile; +	return profile;  }  static void  profile_combo_box_refill (TerminalApp *app,                            GtkWidget *widget)  { -  GtkComboBox *combo = GTK_COMBO_BOX (widget); -  GtkTreeIter iter; -  gboolean iter_set; -  TerminalProfile *selected_profile; -  GtkTreeModel *model; +	GtkComboBox *combo = GTK_COMBO_BOX (widget); +	GtkTreeIter iter; +	gboolean iter_set; +	TerminalProfile *selected_profile; +	GtkTreeModel *model; -  selected_profile = profile_combo_box_get_selected (widget); -  if (!selected_profile) -    { -      selected_profile = terminal_app_get_default_profile (app); -      if (selected_profile) -        g_object_ref (selected_profile); -    } +	selected_profile = profile_combo_box_get_selected (widget); +	if (!selected_profile) +	{ +		selected_profile = terminal_app_get_default_profile (app); +		if (selected_profile) +			g_object_ref (selected_profile); +	} -  model = terminal_app_get_profile_liststore (app, -                                              selected_profile, -                                              &iter, -                                              &iter_set); -  gtk_combo_box_set_model (combo, model); -  g_object_unref (model); +	model = terminal_app_get_profile_liststore (app, +	        selected_profile, +	        &iter, +	        &iter_set); +	gtk_combo_box_set_model (combo, model); +	g_object_unref (model); -  if (iter_set) -    gtk_combo_box_set_active_iter (combo, &iter); +	if (iter_set) +		gtk_combo_box_set_active_iter (combo, &iter); -  if (selected_profile) -    g_object_unref (selected_profile); +	if (selected_profile) +		g_object_unref (selected_profile);  }  static GtkWidget*  profile_combo_box_new (TerminalApp *app)  { -  GtkWidget *combo; -  GtkCellRenderer *renderer; +	GtkWidget *combo; +	GtkCellRenderer *renderer; -  combo = gtk_combo_box_new (); -  terminal_util_set_atk_name_description (combo, NULL, _("Click button to choose profile")); +	combo = gtk_combo_box_new (); +	terminal_util_set_atk_name_description (combo, NULL, _("Click button to choose profile")); -  renderer = gtk_cell_renderer_text_new (); -  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE); -  gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo), renderer, -                                      (GtkCellLayoutDataFunc) terminal_app_profile_cell_data_func, -                                      NULL, NULL); +	renderer = gtk_cell_renderer_text_new (); +	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE); +	gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo), renderer, +	                                    (GtkCellLayoutDataFunc) terminal_app_profile_cell_data_func, +	                                    NULL, NULL); -  profile_combo_box_refill (app, combo); -  g_signal_connect (app, "profile-list-changed", -                    G_CALLBACK (profile_combo_box_refill), combo); +	profile_combo_box_refill (app, combo); +	g_signal_connect (app, "profile-list-changed", +	                  G_CALLBACK (profile_combo_box_refill), combo); -  gtk_widget_show (combo); -  return combo; +	gtk_widget_show (combo); +	return combo;  }  static void  profile_combo_box_changed_cb (GtkWidget *widget,                                TerminalApp *app)  { -  TerminalProfile *profile; +	TerminalProfile *profile; -  profile = profile_combo_box_get_selected (widget); -  if (!profile) -    return; +	profile = profile_combo_box_get_selected (widget); +	if (!profile) +		return; -  mateconf_client_set_string (app->conf, -                           CONF_GLOBAL_PREFIX "/default_profile", -                           terminal_profile_get_property_string (profile, TERMINAL_PROFILE_NAME), -                           NULL); +	mateconf_client_set_string (app->conf, +	                            CONF_GLOBAL_PREFIX "/default_profile", +	                            terminal_profile_get_property_string (profile, TERMINAL_PROFILE_NAME), +	                            NULL); -  /* Even though the mateconf change notification does this, it happens too late. -   * In some cases, the default profile changes twice in quick succession, -   * and update_default_profile must be called in sync with those changes. -   */ -  app->default_profile = profile; +	/* Even though the mateconf change notification does this, it happens too late. +	 * In some cases, the default profile changes twice in quick succession, +	 * and update_default_profile must be called in sync with those changes. +	 */ +	app->default_profile = profile; -  g_object_notify (G_OBJECT (app), TERMINAL_APP_DEFAULT_PROFILE); +	g_object_notify (G_OBJECT (app), TERMINAL_APP_DEFAULT_PROFILE); -  g_object_unref (profile); +	g_object_unref (profile);  }  static void  profile_list_treeview_refill (TerminalApp *app,                                GtkWidget *widget)  { -  GtkTreeView *tree_view = GTK_TREE_VIEW (widget); -  GtkTreeIter iter; -  gboolean iter_set; -  GtkTreeSelection *selection; -  GtkTreeModel *model; -  TerminalProfile *selected_profile = NULL; +	GtkTreeView *tree_view = GTK_TREE_VIEW (widget); +	GtkTreeIter iter; +	gboolean iter_set; +	GtkTreeSelection *selection; +	GtkTreeModel *model; +	TerminalProfile *selected_profile = NULL; -  model = gtk_tree_view_get_model (tree_view); +	model = gtk_tree_view_get_model (tree_view); -  selection = gtk_tree_view_get_selection (tree_view); -  if (gtk_tree_selection_get_selected (selection, NULL, &iter)) -    gtk_tree_model_get (model, &iter, (int) COL_PROFILE, &selected_profile, (int) -1); +	selection = gtk_tree_view_get_selection (tree_view); +	if (gtk_tree_selection_get_selected (selection, NULL, &iter)) +		gtk_tree_model_get (model, &iter, (int) COL_PROFILE, &selected_profile, (int) -1); -  model = terminal_app_get_profile_liststore (terminal_app_get (), -                                              selected_profile, -                                              &iter, -                                              &iter_set); -  gtk_tree_view_set_model (tree_view, model); -  g_object_unref (model); +	model = terminal_app_get_profile_liststore (terminal_app_get (), +	        selected_profile, +	        &iter, +	        &iter_set); +	gtk_tree_view_set_model (tree_view, model); +	g_object_unref (model); -  if (!iter_set) -    iter_set = gtk_tree_model_get_iter_first (model, &iter); +	if (!iter_set) +		iter_set = gtk_tree_model_get_iter_first (model, &iter); -  if (iter_set) -    gtk_tree_selection_select_iter (selection, &iter); +	if (iter_set) +		gtk_tree_selection_select_iter (selection, &iter); -  if (selected_profile) -    g_object_unref (selected_profile); +	if (selected_profile) +		g_object_unref (selected_profile);  }  static GtkWidget*  profile_list_treeview_create (TerminalApp *app)  { -  GtkWidget *tree_view; -  GtkTreeSelection *selection; -  GtkCellRenderer *renderer; -  GtkTreeViewColumn *column; +	GtkWidget *tree_view; +	GtkTreeSelection *selection; +	GtkCellRenderer *renderer; +	GtkTreeViewColumn *column; -  tree_view = gtk_tree_view_new (); -  terminal_util_set_atk_name_description (tree_view, _("Profile list"), NULL); -  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE); +	tree_view = gtk_tree_view_new (); +	terminal_util_set_atk_name_description (tree_view, _("Profile list"), NULL); +	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE); -  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)); -  gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection), -                               GTK_SELECTION_BROWSE); +	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)); +	gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection), +	                             GTK_SELECTION_BROWSE); -  column = gtk_tree_view_column_new (); -  renderer = gtk_cell_renderer_text_new (); -  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (column), renderer, TRUE); -  gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (column), renderer, -                                      (GtkCellLayoutDataFunc) terminal_app_profile_cell_data_func, -                                      NULL, NULL); -  gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), -                               GTK_TREE_VIEW_COLUMN (column)); +	column = gtk_tree_view_column_new (); +	renderer = gtk_cell_renderer_text_new (); +	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (column), renderer, TRUE); +	gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (column), renderer, +	                                    (GtkCellLayoutDataFunc) terminal_app_profile_cell_data_func, +	                                    NULL, NULL); +	gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), +	                             GTK_TREE_VIEW_COLUMN (column)); -  return tree_view; +	return tree_view;  }  static void  profile_list_delete_confirm_response_cb (GtkWidget *dialog, -                                         int response, -                                         TerminalApp *app) +        int response, +        TerminalApp *app)  { -  TerminalProfile *profile; +	TerminalProfile *profile; -  profile = TERMINAL_PROFILE (g_object_get_data (G_OBJECT (dialog), "profile")); -  g_assert (profile != NULL); +	profile = TERMINAL_PROFILE (g_object_get_data (G_OBJECT (dialog), "profile")); +	g_assert (profile != NULL); -  if (response == GTK_RESPONSE_ACCEPT) -    terminal_app_delete_profile (app, profile); +	if (response == GTK_RESPONSE_ACCEPT) +		terminal_app_delete_profile (app, profile); -  gtk_widget_destroy (dialog); +	gtk_widget_destroy (dialog);  }  static void  profile_list_delete_button_clicked_cb (GtkWidget *button,                                         GtkWidget *widget)  { -  GtkTreeView *tree_view = GTK_TREE_VIEW (widget); -  TerminalApp *app = terminal_app_get (); -  GtkTreeSelection *selection; -  GtkWidget *dialog; -  GtkTreeIter iter; -  GtkTreeModel *model; -  TerminalProfile *selected_profile; -  GtkWidget *transient_parent; - -  model = gtk_tree_view_get_model (tree_view); -  selection = gtk_tree_view_get_selection (tree_view); - -  if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) -    return; - -  gtk_tree_model_get (model, &iter, (int) COL_PROFILE, &selected_profile, (int) -1); - -  transient_parent = gtk_widget_get_toplevel (widget); -  dialog = gtk_message_dialog_new (GTK_WINDOW (transient_parent), -                                   GTK_DIALOG_DESTROY_WITH_PARENT, -                                   GTK_MESSAGE_QUESTION, -                                   GTK_BUTTONS_NONE, -                                   _("Delete profile “%s”?"), -                                   terminal_profile_get_property_string (selected_profile, TERMINAL_PROFILE_VISIBLE_NAME)); - -  gtk_dialog_add_buttons (GTK_DIALOG (dialog), -                          GTK_STOCK_CANCEL, -                          GTK_RESPONSE_REJECT, -                          GTK_STOCK_DELETE, -                          GTK_RESPONSE_ACCEPT, -                          NULL); -  gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), -                                           GTK_RESPONSE_ACCEPT, -                                           GTK_RESPONSE_REJECT, -                                           -1); -  gtk_dialog_set_default_response (GTK_DIALOG (dialog), -                                   GTK_RESPONSE_ACCEPT); - -  gtk_window_set_title (GTK_WINDOW (dialog), _("Delete Profile")); -  gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); - -  /* Transfer refcount of |selected_profile|, so no unref below */ -  g_object_set_data_full (G_OBJECT (dialog), "profile", selected_profile, g_object_unref); - -  g_signal_connect (dialog, "response", -                    G_CALLBACK (profile_list_delete_confirm_response_cb), -                    app); - -  gtk_window_present (GTK_WINDOW (dialog)); +	GtkTreeView *tree_view = GTK_TREE_VIEW (widget); +	TerminalApp *app = terminal_app_get (); +	GtkTreeSelection *selection; +	GtkWidget *dialog; +	GtkTreeIter iter; +	GtkTreeModel *model; +	TerminalProfile *selected_profile; +	GtkWidget *transient_parent; + +	model = gtk_tree_view_get_model (tree_view); +	selection = gtk_tree_view_get_selection (tree_view); + +	if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) +		return; + +	gtk_tree_model_get (model, &iter, (int) COL_PROFILE, &selected_profile, (int) -1); + +	transient_parent = gtk_widget_get_toplevel (widget); +	dialog = gtk_message_dialog_new (GTK_WINDOW (transient_parent), +	                                 GTK_DIALOG_DESTROY_WITH_PARENT, +	                                 GTK_MESSAGE_QUESTION, +	                                 GTK_BUTTONS_NONE, +	                                 _("Delete profile “%s”?"), +	                                 terminal_profile_get_property_string (selected_profile, TERMINAL_PROFILE_VISIBLE_NAME)); + +	gtk_dialog_add_buttons (GTK_DIALOG (dialog), +	                        GTK_STOCK_CANCEL, +	                        GTK_RESPONSE_REJECT, +	                        GTK_STOCK_DELETE, +	                        GTK_RESPONSE_ACCEPT, +	                        NULL); +	gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), +	        GTK_RESPONSE_ACCEPT, +	        GTK_RESPONSE_REJECT, +	        -1); +	gtk_dialog_set_default_response (GTK_DIALOG (dialog), +	                                 GTK_RESPONSE_ACCEPT); + +	gtk_window_set_title (GTK_WINDOW (dialog), _("Delete Profile")); +	gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); + +	/* Transfer refcount of |selected_profile|, so no unref below */ +	g_object_set_data_full (G_OBJECT (dialog), "profile", selected_profile, g_object_unref); + +	g_signal_connect (dialog, "response", +	                  G_CALLBACK (profile_list_delete_confirm_response_cb), +	                  app); + +	gtk_window_present (GTK_WINDOW (dialog));  }  static void  profile_list_new_button_clicked_cb (GtkWidget   *button,                                      gpointer data)  { -  TerminalApp *app; +	TerminalApp *app; -  app = terminal_app_get (); -  terminal_app_new_profile (app, NULL, GTK_WINDOW (app->manage_profiles_dialog)); +	app = terminal_app_get (); +	terminal_app_new_profile (app, NULL, GTK_WINDOW (app->manage_profiles_dialog));  }  static void  profile_list_edit_button_clicked_cb (GtkWidget *button,                                       GtkWidget *widget)  { -  GtkTreeView *tree_view = GTK_TREE_VIEW (widget); -  GtkTreeSelection *selection; -  GtkTreeIter iter; -  GtkTreeModel *model; -  TerminalProfile *selected_profile; -  TerminalApp *app; +	GtkTreeView *tree_view = GTK_TREE_VIEW (widget); +	GtkTreeSelection *selection; +	GtkTreeIter iter; +	GtkTreeModel *model; +	TerminalProfile *selected_profile; +	TerminalApp *app; -  app = terminal_app_get (); +	app = terminal_app_get (); -  model = gtk_tree_view_get_model (tree_view); -  selection = gtk_tree_view_get_selection (tree_view); +	model = gtk_tree_view_get_model (tree_view); +	selection = gtk_tree_view_get_selection (tree_view); -  if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) -    return; +	if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) +		return; -  gtk_tree_model_get (model, &iter, (int) COL_PROFILE, &selected_profile, (int) -1); +	gtk_tree_model_get (model, &iter, (int) COL_PROFILE, &selected_profile, (int) -1); -  terminal_app_edit_profile (app, selected_profile, -                             GTK_WINDOW (app->manage_profiles_dialog), -                             NULL); -  g_object_unref (selected_profile); +	terminal_app_edit_profile (app, selected_profile, +	                           GTK_WINDOW (app->manage_profiles_dialog), +	                           NULL); +	g_object_unref (selected_profile);  }  static void @@ -701,42 +702,42 @@ profile_list_row_activated_cb (GtkTreeView       *tree_view,                                 GtkTreeViewColumn *column,                                 gpointer data)  { -  GtkTreeIter iter; -  GtkTreeModel *model; -  TerminalProfile *selected_profile; -  TerminalApp *app; +	GtkTreeIter iter; +	GtkTreeModel *model; +	TerminalProfile *selected_profile; +	TerminalApp *app; -  app = terminal_app_get (); +	app = terminal_app_get (); -  model = gtk_tree_view_get_model (tree_view); +	model = gtk_tree_view_get_model (tree_view); -  if (!gtk_tree_model_get_iter (model, &iter, path)) -    return; +	if (!gtk_tree_model_get_iter (model, &iter, path)) +		return; -  gtk_tree_model_get (model, &iter, (int) COL_PROFILE, &selected_profile, (int) -1); +	gtk_tree_model_get (model, &iter, (int) COL_PROFILE, &selected_profile, (int) -1); -  terminal_app_edit_profile (app, selected_profile, -                             GTK_WINDOW (app->manage_profiles_dialog), -                             NULL); -  g_object_unref (selected_profile); +	terminal_app_edit_profile (app, selected_profile, +	                           GTK_WINDOW (app->manage_profiles_dialog), +	                           NULL); +	g_object_unref (selected_profile);  }  static GList*  find_profile_link (GList      *profiles,                     const char *name)  { -  GList *l; +	GList *l; -  for (l = profiles; l != NULL; l = l->next) -    { -      const char *profile_name; +	for (l = profiles; l != NULL; l = l->next) +	{ +		const char *profile_name; -      profile_name = terminal_profile_get_property_string (TERMINAL_PROFILE (l->data), TERMINAL_PROFILE_NAME); -      if (profile_name && strcmp (profile_name, name) == 0) -        break; -    } +		profile_name = terminal_profile_get_property_string (TERMINAL_PROFILE (l->data), TERMINAL_PROFILE_NAME); +		if (profile_name && strcmp (profile_name, name) == 0) +			break; +	} -  return l; +	return l;  }  static void @@ -745,120 +746,120 @@ terminal_app_profile_list_notify_cb (MateConfClient *conf,                                       MateConfEntry  *entry,                                       gpointer     user_data)  { -  TerminalApp *app = TERMINAL_APP (user_data); -  GObject *object = G_OBJECT (app); -  MateConfValue *val; -  GSList *value_list, *sl; -  GList *profiles_to_delete, *l; -  gboolean need_new_default; -  TerminalProfile *fallback; -  guint count; - -  g_object_freeze_notify (object); - -  profiles_to_delete = terminal_app_get_profile_list (app); - -  val = mateconf_entry_get_value (entry); -  if (val == NULL || -      val->type != MATECONF_VALUE_LIST || -      mateconf_value_get_list_type (val) != MATECONF_VALUE_STRING) -    goto ensure_one_profile; - -  value_list = mateconf_value_get_list (val); - -  /* Add any new ones */ -  for (sl = value_list; sl != NULL; sl = sl->next) -    { -      MateConfValue *listvalue = (MateConfValue *) (sl->data); -      const char *profile_name; -      GList *link; - -      profile_name = mateconf_value_get_string (listvalue); -      if (!profile_name) -        continue; - -      link = find_profile_link (profiles_to_delete, profile_name); -      if (link) -        /* make profiles_to_delete point to profiles we didn't find in the list */ -        profiles_to_delete = g_list_delete_link (profiles_to_delete, link); -      else -        terminal_app_create_profile (app, profile_name); -    } +	TerminalApp *app = TERMINAL_APP (user_data); +	GObject *object = G_OBJECT (app); +	MateConfValue *val; +	GSList *value_list, *sl; +	GList *profiles_to_delete, *l; +	gboolean need_new_default; +	TerminalProfile *fallback; +	guint count; + +	g_object_freeze_notify (object); + +	profiles_to_delete = terminal_app_get_profile_list (app); + +	val = mateconf_entry_get_value (entry); +	if (val == NULL || +	        val->type != MATECONF_VALUE_LIST || +	        mateconf_value_get_list_type (val) != MATECONF_VALUE_STRING) +		goto ensure_one_profile; + +	value_list = mateconf_value_get_list (val); + +	/* Add any new ones */ +	for (sl = value_list; sl != NULL; sl = sl->next) +	{ +		MateConfValue *listvalue = (MateConfValue *) (sl->data); +		const char *profile_name; +		GList *link; + +		profile_name = mateconf_value_get_string (listvalue); +		if (!profile_name) +			continue; + +		link = find_profile_link (profiles_to_delete, profile_name); +		if (link) +			/* make profiles_to_delete point to profiles we didn't find in the list */ +			profiles_to_delete = g_list_delete_link (profiles_to_delete, link); +		else +			terminal_app_create_profile (app, profile_name); +	}  ensure_one_profile: -  fallback = NULL; -  count = g_hash_table_size (app->profiles); -  if (count == 0 || count <= g_list_length (profiles_to_delete)) -    { -      /* We are going to run out, so create the fallback -       * to be sure we always have one. Must be done -       * here before we emit "forgotten" signals so that -       * screens have a profile to fall back to. -       * -       * If the profile with the FALLBACK_ID already exists, -       * we aren't allowed to delete it, unless at least one -       * other profile will still exist. And if you delete -       * all profiles, the FALLBACK_ID profile returns as -       * the living dead. -       */ -      fallback = terminal_app_get_profile_by_name (app, FALLBACK_PROFILE_ID); -      if (fallback == NULL) -        fallback = terminal_app_create_profile (app, FALLBACK_PROFILE_ID); -      g_assert (fallback != NULL); -    } - -  /* Forget no-longer-existing profiles */ -  need_new_default = FALSE; -  for (l = profiles_to_delete; l != NULL; l = l->next) -    { -      TerminalProfile *profile = TERMINAL_PROFILE (l->data); -      const char *name; - -      name = terminal_profile_get_property_string (profile, TERMINAL_PROFILE_NAME); -      if (strcmp (name, FALLBACK_PROFILE_ID) == 0) -        continue; - -      if (profile == app->default_profile) -        { -          app->default_profile = NULL; -          need_new_default = TRUE; -        } - -      _terminal_profile_forget (profile); -      g_hash_table_remove (app->profiles, name); - -      /* |profile| possibly isn't dead yet since the profiles dialogue's tree model holds a ref too... */ -    } -  g_list_free (profiles_to_delete); - -  if (need_new_default) -    { -      TerminalProfile *new_default; -      TerminalProfile **new_default_ptr = &new_default; - -      new_default = terminal_app_get_profile_by_name (app, FALLBACK_PROFILE_ID); -      if (new_default == NULL) -        { -          GHashTableIter iter; - -          g_hash_table_iter_init (&iter, app->profiles); -          if (!g_hash_table_iter_next (&iter, NULL, (gpointer *) new_default_ptr)) -            /* shouldn't really happen ever, but just to be safe */ -            new_default = terminal_app_create_profile (app, FALLBACK_PROFILE_ID);  -        } -      g_assert (new_default != NULL); - -      app->default_profile = new_default; -     -      g_object_notify (object, TERMINAL_APP_DEFAULT_PROFILE); -    } - -  g_assert (g_hash_table_size (app->profiles) > 0); - -  g_signal_emit (app, signals[PROFILE_LIST_CHANGED], 0); - -  g_object_thaw_notify (object); +	fallback = NULL; +	count = g_hash_table_size (app->profiles); +	if (count == 0 || count <= g_list_length (profiles_to_delete)) +	{ +		/* We are going to run out, so create the fallback +		 * to be sure we always have one. Must be done +		 * here before we emit "forgotten" signals so that +		 * screens have a profile to fall back to. +		 * +		 * If the profile with the FALLBACK_ID already exists, +		 * we aren't allowed to delete it, unless at least one +		 * other profile will still exist. And if you delete +		 * all profiles, the FALLBACK_ID profile returns as +		 * the living dead. +		 */ +		fallback = terminal_app_get_profile_by_name (app, FALLBACK_PROFILE_ID); +		if (fallback == NULL) +			fallback = terminal_app_create_profile (app, FALLBACK_PROFILE_ID); +		g_assert (fallback != NULL); +	} + +	/* Forget no-longer-existing profiles */ +	need_new_default = FALSE; +	for (l = profiles_to_delete; l != NULL; l = l->next) +	{ +		TerminalProfile *profile = TERMINAL_PROFILE (l->data); +		const char *name; + +		name = terminal_profile_get_property_string (profile, TERMINAL_PROFILE_NAME); +		if (strcmp (name, FALLBACK_PROFILE_ID) == 0) +			continue; + +		if (profile == app->default_profile) +		{ +			app->default_profile = NULL; +			need_new_default = TRUE; +		} + +		_terminal_profile_forget (profile); +		g_hash_table_remove (app->profiles, name); + +		/* |profile| possibly isn't dead yet since the profiles dialogue's tree model holds a ref too... */ +	} +	g_list_free (profiles_to_delete); + +	if (need_new_default) +	{ +		TerminalProfile *new_default; +		TerminalProfile **new_default_ptr = &new_default; + +		new_default = terminal_app_get_profile_by_name (app, FALLBACK_PROFILE_ID); +		if (new_default == NULL) +		{ +			GHashTableIter iter; + +			g_hash_table_iter_init (&iter, app->profiles); +			if (!g_hash_table_iter_next (&iter, NULL, (gpointer *) new_default_ptr)) +				/* shouldn't really happen ever, but just to be safe */ +				new_default = terminal_app_create_profile (app, FALLBACK_PROFILE_ID); +		} +		g_assert (new_default != NULL); + +		app->default_profile = new_default; + +		g_object_notify (object, TERMINAL_APP_DEFAULT_PROFILE); +	} + +	g_assert (g_hash_table_size (app->profiles) > 0); + +	g_signal_emit (app, signals[PROFILE_LIST_CHANGED], 0); + +	g_object_thaw_notify (object);  }  static void @@ -867,33 +868,33 @@ terminal_app_default_profile_notify_cb (MateConfClient *client,                                          MateConfEntry  *entry,                                          gpointer     user_data)  { -  TerminalApp *app = TERMINAL_APP (user_data); -  MateConfValue *val; -  const char *name = NULL; +	TerminalApp *app = TERMINAL_APP (user_data); +	MateConfValue *val; +	const char *name = NULL; -  app->default_profile_locked = !mateconf_entry_get_is_writable (entry); +	app->default_profile_locked = !mateconf_entry_get_is_writable (entry); -  val = mateconf_entry_get_value (entry); -  if (val != NULL && -      val->type == MATECONF_VALUE_STRING) -    name = mateconf_value_get_string (val); -  if (!name || !name[0]) -    name = FALLBACK_PROFILE_ID; -  g_assert (name != NULL); +	val = mateconf_entry_get_value (entry); +	if (val != NULL && +	        val->type == MATECONF_VALUE_STRING) +		name = mateconf_value_get_string (val); +	if (!name || !name[0]) +		name = FALLBACK_PROFILE_ID; +	g_assert (name != NULL); -  g_free (app->default_profile_id); -  app->default_profile_id = g_strdup (name); +	g_free (app->default_profile_id); +	app->default_profile_id = g_strdup (name); -  app->default_profile = terminal_app_get_profile_by_name (app, name); +	app->default_profile = terminal_app_get_profile_by_name (app, name); -  g_object_notify (G_OBJECT (app), TERMINAL_APP_DEFAULT_PROFILE); +	g_object_notify (G_OBJECT (app), TERMINAL_APP_DEFAULT_PROFILE);  }  static int  compare_encodings (TerminalEncoding *a,                     TerminalEncoding *b)  { -  return g_utf8_collate (a->name, b->name); +	return g_utf8_collate (a->name, b->name);  }  static void @@ -901,10 +902,10 @@ encoding_mark_active (gpointer key,                        gpointer value,                        gpointer data)  { -  TerminalEncoding *encoding = (TerminalEncoding *) value; -  guint active = GPOINTER_TO_UINT (data); +	TerminalEncoding *encoding = (TerminalEncoding *) value; +	guint active = GPOINTER_TO_UINT (data); -  encoding->is_active = active; +	encoding->is_active = active;  }  static void @@ -913,53 +914,53 @@ terminal_app_encoding_list_notify_cb (MateConfClient *client,                                        MateConfEntry  *entry,                                        gpointer     user_data)  { -  TerminalApp *app = TERMINAL_APP (user_data); -  MateConfValue *val; -  GSList *strings, *tmp; -  TerminalEncoding *encoding; -  const char *charset; +	TerminalApp *app = TERMINAL_APP (user_data); +	MateConfValue *val; +	GSList *strings, *tmp; +	TerminalEncoding *encoding; +	const char *charset; + +	app->encodings_locked = !mateconf_entry_get_is_writable (entry); -  app->encodings_locked = !mateconf_entry_get_is_writable (entry); +	/* Mark all as non-active, then re-enable the active ones */ +	g_hash_table_foreach (app->encodings, (GHFunc) encoding_mark_active, GUINT_TO_POINTER (FALSE)); -  /* Mark all as non-active, then re-enable the active ones */ -  g_hash_table_foreach (app->encodings, (GHFunc) encoding_mark_active, GUINT_TO_POINTER (FALSE)); +	/* First add the locale's charset */ +	encoding = g_hash_table_lookup (app->encodings, "current"); +	g_assert (encoding); +	if (terminal_encoding_is_valid (encoding)) +		encoding->is_active = TRUE; -  /* First add the locale's charset */ -  encoding = g_hash_table_lookup (app->encodings, "current"); -  g_assert (encoding); -  if (terminal_encoding_is_valid (encoding)) -    encoding->is_active = TRUE; +	/* Also always make UTF-8 available */ +	encoding = g_hash_table_lookup (app->encodings, "UTF-8"); +	g_assert (encoding); +	if (terminal_encoding_is_valid (encoding)) +		encoding->is_active = TRUE; -  /* Also always make UTF-8 available */ -  encoding = g_hash_table_lookup (app->encodings, "UTF-8"); -  g_assert (encoding); -  if (terminal_encoding_is_valid (encoding)) -    encoding->is_active = TRUE; +	val = mateconf_entry_get_value (entry); +	if (val != NULL && +	        val->type == MATECONF_VALUE_LIST && +	        mateconf_value_get_list_type (val) == MATECONF_VALUE_STRING) +		strings = mateconf_value_get_list (val); +	else +		strings = NULL; -  val = mateconf_entry_get_value (entry); -  if (val != NULL && -      val->type == MATECONF_VALUE_LIST && -      mateconf_value_get_list_type (val) == MATECONF_VALUE_STRING) -    strings = mateconf_value_get_list (val); -  else -    strings = NULL; +	for (tmp = strings; tmp != NULL; tmp = tmp->next) +	{ +		MateConfValue *v = (MateConfValue *) tmp->data; -  for (tmp = strings; tmp != NULL; tmp = tmp->next) -    { -      MateConfValue *v = (MateConfValue *) tmp->data; -       -      charset = mateconf_value_get_string (v); -      if (!charset) -        continue; +		charset = mateconf_value_get_string (v); +		if (!charset) +			continue; -      encoding = terminal_app_ensure_encoding (app, charset); -      if (!terminal_encoding_is_valid (encoding)) -        continue; +		encoding = terminal_app_ensure_encoding (app, charset); +		if (!terminal_encoding_is_valid (encoding)) +			continue; -      encoding->is_active = TRUE; -    } +		encoding->is_active = TRUE; +	} -  g_signal_emit (app, signals[ENCODING_LIST_CHANGED], 0); +	g_signal_emit (app, signals[ENCODING_LIST_CHANGED], 0);  }  static void @@ -968,90 +969,90 @@ terminal_app_system_font_notify_cb (MateConfClient *client,                                      MateConfEntry  *entry,                                      gpointer     user_data)  { -  TerminalApp *app = TERMINAL_APP (user_data); -  MateConfValue *mateconf_value; -  const char *font = NULL; -  PangoFontDescription *font_desc; +	TerminalApp *app = TERMINAL_APP (user_data); +	MateConfValue *mateconf_value; +	const char *font = NULL; +	PangoFontDescription *font_desc; -  if (strcmp (mateconf_entry_get_key (entry), MONOSPACE_FONT_KEY) != 0) -    return; +	if (strcmp (mateconf_entry_get_key (entry), MONOSPACE_FONT_KEY) != 0) +		return; -  mateconf_value = mateconf_entry_get_value (entry); -  if (mateconf_value && -      mateconf_value->type == MATECONF_VALUE_STRING) -    font = mateconf_value_get_string (mateconf_value); -  if (!font) -    font = DEFAULT_MONOSPACE_FONT; -  g_assert (font != NULL); +	mateconf_value = mateconf_entry_get_value (entry); +	if (mateconf_value && +	        mateconf_value->type == MATECONF_VALUE_STRING) +		font = mateconf_value_get_string (mateconf_value); +	if (!font) +		font = DEFAULT_MONOSPACE_FONT; +	g_assert (font != NULL); -  font_desc = pango_font_description_from_string (font); -  if (app->system_font_desc && -      pango_font_description_equal (app->system_font_desc, font_desc)) -    { -      pango_font_description_free (font_desc); -      return; -    } +	font_desc = pango_font_description_from_string (font); +	if (app->system_font_desc && +	        pango_font_description_equal (app->system_font_desc, font_desc)) +	{ +		pango_font_description_free (font_desc); +		return; +	} -  if (app->system_font_desc) -    pango_font_description_free (app->system_font_desc); +	if (app->system_font_desc) +		pango_font_description_free (app->system_font_desc); -  app->system_font_desc = font_desc; +	app->system_font_desc = font_desc; -  g_object_notify (G_OBJECT (app), TERMINAL_APP_SYSTEM_FONT); +	g_object_notify (G_OBJECT (app), TERMINAL_APP_SYSTEM_FONT);  }  static void  terminal_app_enable_mnemonics_notify_cb (MateConfClient *client, -                                         guint        cnxn_id, -                                         MateConfEntry  *entry, -                                         gpointer     user_data) +        guint        cnxn_id, +        MateConfEntry  *entry, +        gpointer     user_data)  { -  TerminalApp *app = TERMINAL_APP (user_data); -  MateConfValue *mateconf_value; -  gboolean enable; +	TerminalApp *app = TERMINAL_APP (user_data); +	MateConfValue *mateconf_value; +	gboolean enable; -  if (strcmp (mateconf_entry_get_key (entry), ENABLE_MNEMONICS_KEY) != 0) -    return; +	if (strcmp (mateconf_entry_get_key (entry), ENABLE_MNEMONICS_KEY) != 0) +		return; -  mateconf_value = mateconf_entry_get_value (entry); -  if (mateconf_value && -      mateconf_value->type == MATECONF_VALUE_BOOL) -    enable = mateconf_value_get_bool (mateconf_value); -  else -    enable = TRUE; +	mateconf_value = mateconf_entry_get_value (entry); +	if (mateconf_value && +	        mateconf_value->type == MATECONF_VALUE_BOOL) +		enable = mateconf_value_get_bool (mateconf_value); +	else +		enable = TRUE; -  if (enable == app->enable_mnemonics) -    return; +	if (enable == app->enable_mnemonics) +		return; -  app->enable_mnemonics = enable; -  g_object_notify (G_OBJECT (app), TERMINAL_APP_ENABLE_MNEMONICS); +	app->enable_mnemonics = enable; +	g_object_notify (G_OBJECT (app), TERMINAL_APP_ENABLE_MNEMONICS);  }  static void  terminal_app_enable_menu_accels_notify_cb (MateConfClient *client, -                                           guint        cnxn_id, -                                           MateConfEntry  *entry, -                                           gpointer     user_data) +        guint        cnxn_id, +        MateConfEntry  *entry, +        gpointer     user_data)  { -  TerminalApp *app = TERMINAL_APP (user_data); -  MateConfValue *mateconf_value; -  gboolean enable; +	TerminalApp *app = TERMINAL_APP (user_data); +	MateConfValue *mateconf_value; +	gboolean enable; -  if (strcmp (mateconf_entry_get_key (entry), ENABLE_MENU_BAR_ACCEL_KEY) != 0) -    return; +	if (strcmp (mateconf_entry_get_key (entry), ENABLE_MENU_BAR_ACCEL_KEY) != 0) +		return; -  mateconf_value = mateconf_entry_get_value (entry); -  if (mateconf_value && -      mateconf_value->type == MATECONF_VALUE_BOOL) -    enable = mateconf_value_get_bool (mateconf_value); -  else -    enable = TRUE; +	mateconf_value = mateconf_entry_get_value (entry); +	if (mateconf_value && +	        mateconf_value->type == MATECONF_VALUE_BOOL) +		enable = mateconf_value_get_bool (mateconf_value); +	else +		enable = TRUE; -  if (enable == app->enable_menu_accels) -    return; +	if (enable == app->enable_menu_accels) +		return; -  app->enable_menu_accels = enable; -  g_object_notify (G_OBJECT (app), TERMINAL_APP_ENABLE_MENU_BAR_ACCEL); +	app->enable_menu_accels = enable; +	g_object_notify (G_OBJECT (app), TERMINAL_APP_ENABLE_MENU_BAR_ACCEL);  }  static void @@ -1059,112 +1060,112 @@ new_profile_response_cb (GtkWidget *new_profile_dialog,                           int        response_id,                           TerminalApp *app)  { -  if (response_id == GTK_RESPONSE_ACCEPT) -    { -      GtkWidget *name_entry; -      char *name; -      const char *new_profile_name; -      GtkWidget *base_option_menu; -      TerminalProfile *base_profile = NULL; -      TerminalProfile *new_profile; -      GList *profiles; -      GList *tmp; -      GtkWindow *transient_parent; -      GtkWidget *confirm_dialog; -      gint retval; -      GSList *list; - -      base_option_menu = g_object_get_data (G_OBJECT (new_profile_dialog), "base_option_menu"); -      base_profile = profile_combo_box_get_selected (base_option_menu); -      if (!base_profile) -        base_profile = terminal_app_get_default_profile (app); -      if (!base_profile) -        return; /* shouldn't happen ever though */ - -      name_entry = g_object_get_data (G_OBJECT (new_profile_dialog), "name_entry"); -      name = gtk_editable_get_chars (GTK_EDITABLE (name_entry), 0, -1); -      g_strstrip (name); /* name will be non empty after stripping */ - -      profiles = terminal_app_get_profile_list (app); -      for (tmp = profiles; tmp != NULL; tmp = tmp->next) -        { -          TerminalProfile *profile = tmp->data; -          const char *visible_name; - -          visible_name = terminal_profile_get_property_string (profile, TERMINAL_PROFILE_VISIBLE_NAME); - -          if (visible_name && strcmp (name, visible_name) == 0) -            break; -        } -      if (tmp) -        { -          confirm_dialog = gtk_message_dialog_new (GTK_WINDOW (new_profile_dialog), -                                                   GTK_DIALOG_DESTROY_WITH_PARENT, -                                                   GTK_MESSAGE_QUESTION, -                                                   GTK_BUTTONS_YES_NO, -                                                   _("You already have a profile called “%s”. Do you want to create another profile with the same name?"), name); -          /* Alternative button order was set automatically by GtkMessageDialog */ -          retval = gtk_dialog_run (GTK_DIALOG (confirm_dialog)); -          gtk_widget_destroy (confirm_dialog); -          if (retval == GTK_RESPONSE_NO) -            goto cleanup; -        } -      g_list_free (profiles); - -      transient_parent = gtk_window_get_transient_for (GTK_WINDOW (new_profile_dialog)); - -      new_profile = _terminal_profile_clone (base_profile, name); -      new_profile_name = terminal_profile_get_property_string (new_profile, TERMINAL_PROFILE_NAME); -      g_hash_table_insert (app->profiles, -                           g_strdup (new_profile_name), -                           new_profile /* adopts the refcount */); - -      /* And now save the list to mateconf */ -      list = mateconf_client_get_list (app->conf, -                                    CONF_GLOBAL_PREFIX"/profile_list", -                                    MATECONF_VALUE_STRING, -                                    NULL); -      list = g_slist_append (list, g_strdup (new_profile_name)); -      mateconf_client_set_list (app->conf, -                             CONF_GLOBAL_PREFIX"/profile_list", -                             MATECONF_VALUE_STRING, -                             list, -                             NULL); - -      terminal_profile_edit (new_profile, transient_parent, NULL); - -    cleanup: -      g_free (name); -    } - -  gtk_widget_destroy (new_profile_dialog); +	if (response_id == GTK_RESPONSE_ACCEPT) +	{ +		GtkWidget *name_entry; +		char *name; +		const char *new_profile_name; +		GtkWidget *base_option_menu; +		TerminalProfile *base_profile = NULL; +		TerminalProfile *new_profile; +		GList *profiles; +		GList *tmp; +		GtkWindow *transient_parent; +		GtkWidget *confirm_dialog; +		gint retval; +		GSList *list; + +		base_option_menu = g_object_get_data (G_OBJECT (new_profile_dialog), "base_option_menu"); +		base_profile = profile_combo_box_get_selected (base_option_menu); +		if (!base_profile) +			base_profile = terminal_app_get_default_profile (app); +		if (!base_profile) +			return; /* shouldn't happen ever though */ + +		name_entry = g_object_get_data (G_OBJECT (new_profile_dialog), "name_entry"); +		name = gtk_editable_get_chars (GTK_EDITABLE (name_entry), 0, -1); +		g_strstrip (name); /* name will be non empty after stripping */ + +		profiles = terminal_app_get_profile_list (app); +		for (tmp = profiles; tmp != NULL; tmp = tmp->next) +		{ +			TerminalProfile *profile = tmp->data; +			const char *visible_name; + +			visible_name = terminal_profile_get_property_string (profile, TERMINAL_PROFILE_VISIBLE_NAME); + +			if (visible_name && strcmp (name, visible_name) == 0) +				break; +		} +		if (tmp) +		{ +			confirm_dialog = gtk_message_dialog_new (GTK_WINDOW (new_profile_dialog), +			                 GTK_DIALOG_DESTROY_WITH_PARENT, +			                 GTK_MESSAGE_QUESTION, +			                 GTK_BUTTONS_YES_NO, +			                 _("You already have a profile called “%s”. Do you want to create another profile with the same name?"), name); +			/* Alternative button order was set automatically by GtkMessageDialog */ +			retval = gtk_dialog_run (GTK_DIALOG (confirm_dialog)); +			gtk_widget_destroy (confirm_dialog); +			if (retval == GTK_RESPONSE_NO) +				goto cleanup; +		} +		g_list_free (profiles); + +		transient_parent = gtk_window_get_transient_for (GTK_WINDOW (new_profile_dialog)); + +		new_profile = _terminal_profile_clone (base_profile, name); +		new_profile_name = terminal_profile_get_property_string (new_profile, TERMINAL_PROFILE_NAME); +		g_hash_table_insert (app->profiles, +		                     g_strdup (new_profile_name), +		                     new_profile /* adopts the refcount */); + +		/* And now save the list to mateconf */ +		list = mateconf_client_get_list (app->conf, +		                                 CONF_GLOBAL_PREFIX"/profile_list", +		                                 MATECONF_VALUE_STRING, +		                                 NULL); +		list = g_slist_append (list, g_strdup (new_profile_name)); +		mateconf_client_set_list (app->conf, +		                          CONF_GLOBAL_PREFIX"/profile_list", +		                          MATECONF_VALUE_STRING, +		                          list, +		                          NULL); + +		terminal_profile_edit (new_profile, transient_parent, NULL); + +cleanup: +		g_free (name); +	} + +	gtk_widget_destroy (new_profile_dialog);  }  static void  new_profile_dialog_destroy_cb (GtkWidget *new_profile_dialog,                                 TerminalApp *app)  { -  GtkWidget *combo; +	GtkWidget *combo; -  combo = g_object_get_data (G_OBJECT (new_profile_dialog), "base_option_menu"); -  g_signal_handlers_disconnect_by_func (app, G_CALLBACK (profile_combo_box_refill), combo); +	combo = g_object_get_data (G_OBJECT (new_profile_dialog), "base_option_menu"); +	g_signal_handlers_disconnect_by_func (app, G_CALLBACK (profile_combo_box_refill), combo); -  app->new_profile_dialog = NULL; +	app->new_profile_dialog = NULL;  }  static void  new_profile_name_entry_changed_cb (GtkEntry *entry,                                     GtkDialog *dialog)  { -  const char *name; +	const char *name; -  name = gtk_entry_get_text (entry); +	name = gtk_entry_get_text (entry); -  /* make the create button sensitive only if something other than space has been set */ -  while (*name != '\0' && g_ascii_isspace (*name)) -    ++name; +	/* make the create button sensitive only if something other than space has been set */ +	while (*name != '\0' && g_ascii_isspace (*name)) +		++name; -  gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_ACCEPT, name[0] != '\0'); +	gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_ACCEPT, name[0] != '\0');  }  void @@ -1172,68 +1173,68 @@ terminal_app_new_profile (TerminalApp     *app,                            TerminalProfile *default_base_profile,                            GtkWindow       *transient_parent)  { -  if (app->new_profile_dialog == NULL) -    { -      GtkWidget *create_button, *table, *name_label, *name_entry, *base_label, *combo; +	if (app->new_profile_dialog == NULL) +	{ +		GtkWidget *create_button, *table, *name_label, *name_entry, *base_label, *combo; -      if (!terminal_util_load_builder_file ("profile-new-dialog.ui", -                                            "new-profile-dialog", &app->new_profile_dialog, -                                            "new-profile-create-button", &create_button, -                                            "new-profile-table", &table, -                                            "new-profile-name-label", &name_label, -                                            "new-profile-name-entry", &name_entry, -                                            "new-profile-base-label", &base_label, -                                            NULL)) -        return; +		if (!terminal_util_load_builder_file ("profile-new-dialog.ui", +		                                      "new-profile-dialog", &app->new_profile_dialog, +		                                      "new-profile-create-button", &create_button, +		                                      "new-profile-table", &table, +		                                      "new-profile-name-label", &name_label, +		                                      "new-profile-name-entry", &name_entry, +		                                      "new-profile-base-label", &base_label, +		                                      NULL)) +			return; -      g_signal_connect (G_OBJECT (app->new_profile_dialog), "response", G_CALLBACK (new_profile_response_cb), app); -      g_signal_connect (app->new_profile_dialog, "destroy", G_CALLBACK (new_profile_dialog_destroy_cb), app); +		g_signal_connect (G_OBJECT (app->new_profile_dialog), "response", G_CALLBACK (new_profile_response_cb), app); +		g_signal_connect (app->new_profile_dialog, "destroy", G_CALLBACK (new_profile_dialog_destroy_cb), app); -      g_object_set_data (G_OBJECT (app->new_profile_dialog), "create_button", create_button); -      gtk_widget_set_sensitive (create_button, FALSE); +		g_object_set_data (G_OBJECT (app->new_profile_dialog), "create_button", create_button); +		gtk_widget_set_sensitive (create_button, FALSE); -      /* the name entry */ -      g_object_set_data (G_OBJECT (app->new_profile_dialog), "name_entry", name_entry); -      g_signal_connect (name_entry, "changed", G_CALLBACK (new_profile_name_entry_changed_cb), app->new_profile_dialog); -      gtk_entry_set_activates_default (GTK_ENTRY (name_entry), TRUE); -      gtk_widget_grab_focus (name_entry); +		/* the name entry */ +		g_object_set_data (G_OBJECT (app->new_profile_dialog), "name_entry", name_entry); +		g_signal_connect (name_entry, "changed", G_CALLBACK (new_profile_name_entry_changed_cb), app->new_profile_dialog); +		gtk_entry_set_activates_default (GTK_ENTRY (name_entry), TRUE); +		gtk_widget_grab_focus (name_entry); -      gtk_label_set_mnemonic_widget (GTK_LABEL (name_label), name_entry); +		gtk_label_set_mnemonic_widget (GTK_LABEL (name_label), name_entry); -      /* the base profile option menu */ -      combo = profile_combo_box_new (app); -      gtk_table_attach_defaults (GTK_TABLE (table), combo, 1, 2, 1, 2); -      g_object_set_data (G_OBJECT (app->new_profile_dialog), "base_option_menu", combo); -      terminal_util_set_atk_name_description (combo, NULL, _("Choose base profile")); +		/* the base profile option menu */ +		combo = profile_combo_box_new (app); +		gtk_table_attach_defaults (GTK_TABLE (table), combo, 1, 2, 1, 2); +		g_object_set_data (G_OBJECT (app->new_profile_dialog), "base_option_menu", combo); +		terminal_util_set_atk_name_description (combo, NULL, _("Choose base profile")); -      gtk_label_set_mnemonic_widget (GTK_LABEL (base_label), combo); +		gtk_label_set_mnemonic_widget (GTK_LABEL (base_label), combo); -      gtk_dialog_set_alternative_button_order (GTK_DIALOG (app->new_profile_dialog), -                                               GTK_RESPONSE_ACCEPT, -                                               GTK_RESPONSE_CANCEL, -                                               -1); -      gtk_dialog_set_default_response (GTK_DIALOG (app->new_profile_dialog), GTK_RESPONSE_ACCEPT); -      gtk_dialog_set_response_sensitive (GTK_DIALOG (app->new_profile_dialog), GTK_RESPONSE_ACCEPT, FALSE); -    } +		gtk_dialog_set_alternative_button_order (GTK_DIALOG (app->new_profile_dialog), +		        GTK_RESPONSE_ACCEPT, +		        GTK_RESPONSE_CANCEL, +		        -1); +		gtk_dialog_set_default_response (GTK_DIALOG (app->new_profile_dialog), GTK_RESPONSE_ACCEPT); +		gtk_dialog_set_response_sensitive (GTK_DIALOG (app->new_profile_dialog), GTK_RESPONSE_ACCEPT, FALSE); +	} -  gtk_window_set_transient_for (GTK_WINDOW (app->new_profile_dialog), -                                transient_parent); +	gtk_window_set_transient_for (GTK_WINDOW (app->new_profile_dialog), +	                              transient_parent); -  gtk_window_present (GTK_WINDOW (app->new_profile_dialog)); +	gtk_window_present (GTK_WINDOW (app->new_profile_dialog));  }  static void  profile_list_selection_changed_cb (GtkTreeSelection *selection,                                     TerminalApp *app)  { -  gboolean selected; +	gboolean selected; -  selected = gtk_tree_selection_get_selected (selection, NULL, NULL); +	selected = gtk_tree_selection_get_selected (selection, NULL, NULL); -  gtk_widget_set_sensitive (app->manage_profiles_edit_button, selected); -  gtk_widget_set_sensitive (app->manage_profiles_delete_button, -                            selected && -                            g_hash_table_size (app->profiles) > 1); +	gtk_widget_set_sensitive (app->manage_profiles_edit_button, selected); +	gtk_widget_set_sensitive (app->manage_profiles_delete_button, +	                          selected && +	                          g_hash_table_size (app->profiles) > 1);  }  static void @@ -1241,107 +1242,107 @@ profile_list_response_cb (GtkWidget *dialog,                            int        id,                            TerminalApp *app)  { -  g_assert (app->manage_profiles_dialog == dialog); +	g_assert (app->manage_profiles_dialog == dialog); -  if (id == GTK_RESPONSE_HELP) -    { -      terminal_util_show_help ("mate-terminal-manage-profiles", GTK_WINDOW (dialog)); -      return; -    } +	if (id == GTK_RESPONSE_HELP) +	{ +		terminal_util_show_help ("mate-terminal-manage-profiles", GTK_WINDOW (dialog)); +		return; +	} -  gtk_widget_destroy (dialog); +	gtk_widget_destroy (dialog);  }  static void  profile_list_destroyed_cb (GtkWidget   *manage_profiles_dialog,                             TerminalApp *app)  { -  g_signal_handlers_disconnect_by_func (app, G_CALLBACK (profile_list_treeview_refill), app->manage_profiles_list); -  g_signal_handlers_disconnect_by_func (app, G_CALLBACK (profile_combo_box_refill), app->manage_profiles_default_menu); +	g_signal_handlers_disconnect_by_func (app, G_CALLBACK (profile_list_treeview_refill), app->manage_profiles_list); +	g_signal_handlers_disconnect_by_func (app, G_CALLBACK (profile_combo_box_refill), app->manage_profiles_default_menu); -  app->manage_profiles_dialog = NULL; -  app->manage_profiles_list = NULL; -  app->manage_profiles_new_button = NULL; -  app->manage_profiles_edit_button = NULL; -  app->manage_profiles_delete_button = NULL; -  app->manage_profiles_default_menu = NULL; +	app->manage_profiles_dialog = NULL; +	app->manage_profiles_list = NULL; +	app->manage_profiles_new_button = NULL; +	app->manage_profiles_edit_button = NULL; +	app->manage_profiles_delete_button = NULL; +	app->manage_profiles_default_menu = NULL;  }  void  terminal_app_manage_profiles (TerminalApp     *app,                                GtkWindow       *transient_parent)  { -  GObject *dialog; -  GObject *tree_view_container, *new_button, *edit_button, *remove_button; -  GObject *default_hbox, *default_label; -  GtkTreeSelection *selection; +	GObject *dialog; +	GObject *tree_view_container, *new_button, *edit_button, *remove_button; +	GObject *default_hbox, *default_label; +	GtkTreeSelection *selection; -  if (app->manage_profiles_dialog) -    { -      gtk_window_set_transient_for (GTK_WINDOW (app->manage_profiles_dialog), transient_parent); -      gtk_window_present (GTK_WINDOW (app->manage_profiles_dialog)); -      return; -    } +	if (app->manage_profiles_dialog) +	{ +		gtk_window_set_transient_for (GTK_WINDOW (app->manage_profiles_dialog), transient_parent); +		gtk_window_present (GTK_WINDOW (app->manage_profiles_dialog)); +		return; +	} -  if (!terminal_util_load_builder_file ("profile-manager.ui", -                                        "profile-manager", &dialog, -                                        "profiles-treeview-container", &tree_view_container, -                                        "new-profile-button", &new_button, -                                        "edit-profile-button", &edit_button, -                                        "delete-profile-button", &remove_button, -                                        "default-profile-hbox", &default_hbox, -                                        "default-profile-label", &default_label, -                                        NULL)) -    return; +	if (!terminal_util_load_builder_file ("profile-manager.ui", +	                                      "profile-manager", &dialog, +	                                      "profiles-treeview-container", &tree_view_container, +	                                      "new-profile-button", &new_button, +	                                      "edit-profile-button", &edit_button, +	                                      "delete-profile-button", &remove_button, +	                                      "default-profile-hbox", &default_hbox, +	                                      "default-profile-label", &default_label, +	                                      NULL)) +		return; -  app->manage_profiles_dialog = GTK_WIDGET (dialog); -  app->manage_profiles_new_button = GTK_WIDGET (new_button); -  app->manage_profiles_edit_button = GTK_WIDGET (edit_button); -  app->manage_profiles_delete_button  = GTK_WIDGET (remove_button); +	app->manage_profiles_dialog = GTK_WIDGET (dialog); +	app->manage_profiles_new_button = GTK_WIDGET (new_button); +	app->manage_profiles_edit_button = GTK_WIDGET (edit_button); +	app->manage_profiles_delete_button  = GTK_WIDGET (remove_button); -  g_signal_connect (dialog, "response", G_CALLBACK (profile_list_response_cb), app); -  g_signal_connect (dialog, "destroy", G_CALLBACK (profile_list_destroyed_cb), app); +	g_signal_connect (dialog, "response", G_CALLBACK (profile_list_response_cb), app); +	g_signal_connect (dialog, "destroy", G_CALLBACK (profile_list_destroyed_cb), app); -  app->manage_profiles_list = profile_list_treeview_create (app); +	app->manage_profiles_list = profile_list_treeview_create (app); -  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (app->manage_profiles_list)); -  g_signal_connect (selection, "changed", G_CALLBACK (profile_list_selection_changed_cb), app); +	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (app->manage_profiles_list)); +	g_signal_connect (selection, "changed", G_CALLBACK (profile_list_selection_changed_cb), app); -  profile_list_treeview_refill (app, app->manage_profiles_list); -  g_signal_connect (app, "profile-list-changed", -                    G_CALLBACK (profile_list_treeview_refill), app->manage_profiles_list); +	profile_list_treeview_refill (app, app->manage_profiles_list); +	g_signal_connect (app, "profile-list-changed", +	                  G_CALLBACK (profile_list_treeview_refill), app->manage_profiles_list); -  g_signal_connect (app->manage_profiles_list, "row-activated", -                    G_CALLBACK (profile_list_row_activated_cb), app); +	g_signal_connect (app->manage_profiles_list, "row-activated", +	                  G_CALLBACK (profile_list_row_activated_cb), app); -  gtk_container_add (GTK_CONTAINER (tree_view_container), app->manage_profiles_list); -  gtk_widget_show (app->manage_profiles_list); +	gtk_container_add (GTK_CONTAINER (tree_view_container), app->manage_profiles_list); +	gtk_widget_show (app->manage_profiles_list); -  g_signal_connect (new_button, "clicked", -                    G_CALLBACK (profile_list_new_button_clicked_cb), -                    app->manage_profiles_list); -  g_signal_connect (edit_button, "clicked", -                    G_CALLBACK (profile_list_edit_button_clicked_cb), -                    app->manage_profiles_list); -  g_signal_connect (remove_button, "clicked", -                    G_CALLBACK (profile_list_delete_button_clicked_cb), -                    app->manage_profiles_list); +	g_signal_connect (new_button, "clicked", +	                  G_CALLBACK (profile_list_new_button_clicked_cb), +	                  app->manage_profiles_list); +	g_signal_connect (edit_button, "clicked", +	                  G_CALLBACK (profile_list_edit_button_clicked_cb), +	                  app->manage_profiles_list); +	g_signal_connect (remove_button, "clicked", +	                  G_CALLBACK (profile_list_delete_button_clicked_cb), +	                  app->manage_profiles_list); -  app->manage_profiles_default_menu = profile_combo_box_new (app); -  g_signal_connect (app->manage_profiles_default_menu, "changed", -                    G_CALLBACK (profile_combo_box_changed_cb), app); +	app->manage_profiles_default_menu = profile_combo_box_new (app); +	g_signal_connect (app->manage_profiles_default_menu, "changed", +	                  G_CALLBACK (profile_combo_box_changed_cb), app); -  gtk_box_pack_start (GTK_BOX (default_hbox), app->manage_profiles_default_menu, FALSE, FALSE, 0); -  gtk_widget_show (app->manage_profiles_default_menu); +	gtk_box_pack_start (GTK_BOX (default_hbox), app->manage_profiles_default_menu, FALSE, FALSE, 0); +	gtk_widget_show (app->manage_profiles_default_menu); -  gtk_label_set_mnemonic_widget (GTK_LABEL (default_label), app->manage_profiles_default_menu); +	gtk_label_set_mnemonic_widget (GTK_LABEL (default_label), app->manage_profiles_default_menu); -  gtk_widget_grab_focus (app->manage_profiles_list); +	gtk_widget_grab_focus (app->manage_profiles_list); -  gtk_window_set_transient_for (GTK_WINDOW (app->manage_profiles_dialog), -                                transient_parent); +	gtk_window_set_transient_for (GTK_WINDOW (app->manage_profiles_dialog), +	                              transient_parent); -  gtk_window_present (GTK_WINDOW (app->manage_profiles_dialog)); +	gtk_window_present (GTK_WINDOW (app->manage_profiles_dialog));  }  #ifdef WITH_SMCLIENT @@ -1351,14 +1352,14 @@ terminal_app_save_state_cb (EggSMClient *client,                              GKeyFile *key_file,                              TerminalApp *app)  { -  terminal_app_save_config (app, key_file); +	terminal_app_save_config (app, key_file);  }  static void  terminal_app_client_quit_cb (EggSMClient *client,                               TerminalApp *app)  { -  g_signal_emit (app, signals[QUIT], 0); +	g_signal_emit (app, signals[QUIT], 0);  }  #endif /* WITH_SMCLIENT */ @@ -1370,165 +1371,165 @@ G_DEFINE_TYPE (TerminalApp, terminal_app, G_TYPE_OBJECT)  static void  terminal_app_init (TerminalApp *app)  { -  GError *error = NULL; - -  global_app = app; - -  /* If the mateconf daemon isn't available (e.g. because there's no dbus -   * session bus running), we'd crash later on. Tell the user about it -   * now, and exit. See bug #561663. -   * Don't use mateconf_ping_daemon() here since the server may just not -   * be running yet, but able to be started. See comments on bug #564649. -   */ -  if (!mateconf_spawn_daemon (&error)) -    { -      g_printerr ("Failed to summon the MateConf demon; exiting.  %s\n", error->message); -      g_error_free (error); - -      exit (EXIT_FAILURE); -    } - -  gtk_window_set_default_icon_name (MATE_TERMINAL_ICON_NAME); - -  /* Initialise defaults */ -  app->enable_mnemonics = DEFAULT_ENABLE_MNEMONICS; -  app->enable_menu_accels = DEFAULT_ENABLE_MENU_BAR_ACCEL; - -  app->profiles = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); - -  app->encodings = terminal_encodings_get_builtins (); - -  app->conf = mateconf_client_get_default (); - -  mateconf_client_add_dir (app->conf, CONF_GLOBAL_PREFIX, -                        MATECONF_CLIENT_PRELOAD_ONELEVEL, -                        NULL); -  mateconf_client_add_dir (app->conf, MONOSPACE_FONT_DIR, -                        MATECONF_CLIENT_PRELOAD_ONELEVEL, -                        NULL); -  mateconf_client_add_dir (app->conf, CONF_PROXY_PREFIX, -                        MATECONF_CLIENT_PRELOAD_ONELEVEL, -                        NULL); -  mateconf_client_add_dir (app->conf, CONF_HTTP_PROXY_PREFIX, -                        MATECONF_CLIENT_PRELOAD_ONELEVEL, -                        NULL); - -  app->profile_list_notify_id = -    mateconf_client_notify_add (app->conf, PROFILE_LIST_KEY, -                             terminal_app_profile_list_notify_cb, -                             app, NULL, NULL); - -  app->default_profile_notify_id = -    mateconf_client_notify_add (app->conf, -                             DEFAULT_PROFILE_KEY, -                             terminal_app_default_profile_notify_cb, -                             app, NULL, NULL); - -  app->encoding_list_notify_id = -    mateconf_client_notify_add (app->conf, -                             ENCODING_LIST_KEY, -                             terminal_app_encoding_list_notify_cb, -                             app, NULL, NULL); - -  app->system_font_notify_id = -    mateconf_client_notify_add (app->conf, -                             MONOSPACE_FONT_KEY, -                             terminal_app_system_font_notify_cb, -                             app, NULL, NULL); - -  app->enable_mnemonics_notify_id = -    mateconf_client_notify_add (app->conf, -                             ENABLE_MNEMONICS_KEY, -                             terminal_app_enable_mnemonics_notify_cb, -                             app, NULL, NULL); - -  app->enable_menu_accels_notify_id = -    mateconf_client_notify_add (app->conf, -                             ENABLE_MENU_BAR_ACCEL_KEY, -                             terminal_app_enable_menu_accels_notify_cb, -                             app, NULL, NULL); - -  /* Load the settings */ -  mateconf_client_notify (app->conf, PROFILE_LIST_KEY); -  mateconf_client_notify (app->conf, DEFAULT_PROFILE_KEY); -  mateconf_client_notify (app->conf, ENCODING_LIST_KEY); -  mateconf_client_notify (app->conf, MONOSPACE_FONT_KEY); -  mateconf_client_notify (app->conf, ENABLE_MENU_BAR_ACCEL_KEY); -  mateconf_client_notify (app->conf, ENABLE_MNEMONICS_KEY); - -  /* Ensure we have valid settings */ -  g_assert (app->default_profile_id != NULL); -  g_assert (app->system_font_desc != NULL); - -  terminal_accels_init (); -   +	GError *error = NULL; + +	global_app = app; + +	/* If the mateconf daemon isn't available (e.g. because there's no dbus +	 * session bus running), we'd crash later on. Tell the user about it +	 * now, and exit. See bug #561663. +	 * Don't use mateconf_ping_daemon() here since the server may just not +	 * be running yet, but able to be started. See comments on bug #564649. +	 */ +	if (!mateconf_spawn_daemon (&error)) +	{ +		g_printerr ("Failed to summon the MateConf demon; exiting.  %s\n", error->message); +		g_error_free (error); + +		exit (EXIT_FAILURE); +	} + +	gtk_window_set_default_icon_name (MATE_TERMINAL_ICON_NAME); + +	/* Initialise defaults */ +	app->enable_mnemonics = DEFAULT_ENABLE_MNEMONICS; +	app->enable_menu_accels = DEFAULT_ENABLE_MENU_BAR_ACCEL; + +	app->profiles = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); + +	app->encodings = terminal_encodings_get_builtins (); + +	app->conf = mateconf_client_get_default (); + +	mateconf_client_add_dir (app->conf, CONF_GLOBAL_PREFIX, +	                         MATECONF_CLIENT_PRELOAD_ONELEVEL, +	                         NULL); +	mateconf_client_add_dir (app->conf, MONOSPACE_FONT_DIR, +	                         MATECONF_CLIENT_PRELOAD_ONELEVEL, +	                         NULL); +	mateconf_client_add_dir (app->conf, CONF_PROXY_PREFIX, +	                         MATECONF_CLIENT_PRELOAD_ONELEVEL, +	                         NULL); +	mateconf_client_add_dir (app->conf, CONF_HTTP_PROXY_PREFIX, +	                         MATECONF_CLIENT_PRELOAD_ONELEVEL, +	                         NULL); + +	app->profile_list_notify_id = +	    mateconf_client_notify_add (app->conf, PROFILE_LIST_KEY, +	                                terminal_app_profile_list_notify_cb, +	                                app, NULL, NULL); + +	app->default_profile_notify_id = +	    mateconf_client_notify_add (app->conf, +	                                DEFAULT_PROFILE_KEY, +	                                terminal_app_default_profile_notify_cb, +	                                app, NULL, NULL); + +	app->encoding_list_notify_id = +	    mateconf_client_notify_add (app->conf, +	                                ENCODING_LIST_KEY, +	                                terminal_app_encoding_list_notify_cb, +	                                app, NULL, NULL); + +	app->system_font_notify_id = +	    mateconf_client_notify_add (app->conf, +	                                MONOSPACE_FONT_KEY, +	                                terminal_app_system_font_notify_cb, +	                                app, NULL, NULL); + +	app->enable_mnemonics_notify_id = +	    mateconf_client_notify_add (app->conf, +	                                ENABLE_MNEMONICS_KEY, +	                                terminal_app_enable_mnemonics_notify_cb, +	                                app, NULL, NULL); + +	app->enable_menu_accels_notify_id = +	    mateconf_client_notify_add (app->conf, +	                                ENABLE_MENU_BAR_ACCEL_KEY, +	                                terminal_app_enable_menu_accels_notify_cb, +	                                app, NULL, NULL); + +	/* Load the settings */ +	mateconf_client_notify (app->conf, PROFILE_LIST_KEY); +	mateconf_client_notify (app->conf, DEFAULT_PROFILE_KEY); +	mateconf_client_notify (app->conf, ENCODING_LIST_KEY); +	mateconf_client_notify (app->conf, MONOSPACE_FONT_KEY); +	mateconf_client_notify (app->conf, ENABLE_MENU_BAR_ACCEL_KEY); +	mateconf_client_notify (app->conf, ENABLE_MNEMONICS_KEY); + +	/* Ensure we have valid settings */ +	g_assert (app->default_profile_id != NULL); +	g_assert (app->system_font_desc != NULL); + +	terminal_accels_init (); +  #ifdef WITH_SMCLIENT -{ -  EggSMClient *sm_client; +	{ +		EggSMClient *sm_client;  #ifdef GDK_WINDOWING_X11 -  char *desktop_file; - -  desktop_file = g_build_filename (TERM_DATADIR, -                                   "applications", -                                   PACKAGE ".desktop", -                                   NULL); -  egg_set_desktop_file_without_defaults (desktop_file); -  g_free (desktop_file); +		char *desktop_file; + +		desktop_file = g_build_filename (TERM_DATADIR, +		                                 "applications", +		                                 PACKAGE ".desktop", +		                                 NULL); +		egg_set_desktop_file_without_defaults (desktop_file); +		g_free (desktop_file);  #endif /* GDK_WINDOWING_X11 */ -  sm_client = egg_sm_client_get (); -  g_signal_connect (sm_client, "save-state", -                    G_CALLBACK (terminal_app_save_state_cb), app); -  g_signal_connect (sm_client, "quit", -                    G_CALLBACK (terminal_app_client_quit_cb), app); -} +		sm_client = egg_sm_client_get (); +		g_signal_connect (sm_client, "save-state", +		                  G_CALLBACK (terminal_app_save_state_cb), app); +		g_signal_connect (sm_client, "quit", +		                  G_CALLBACK (terminal_app_client_quit_cb), app); +	}  #endif  }  static void  terminal_app_finalize (GObject *object)  { -  TerminalApp *app = TERMINAL_APP (object); +	TerminalApp *app = TERMINAL_APP (object);  #ifdef WITH_SMCLIENT -  EggSMClient *sm_client; +	EggSMClient *sm_client; -  sm_client = egg_sm_client_get (); -  g_signal_handlers_disconnect_matched (sm_client, G_SIGNAL_MATCH_DATA, -                                        0, 0, NULL, NULL, app); +	sm_client = egg_sm_client_get (); +	g_signal_handlers_disconnect_matched (sm_client, G_SIGNAL_MATCH_DATA, +	                                      0, 0, NULL, NULL, app);  #endif -  if (app->profile_list_notify_id != 0) -    mateconf_client_notify_remove (app->conf, app->profile_list_notify_id); -  if (app->default_profile_notify_id != 0) -    mateconf_client_notify_remove (app->conf, app->default_profile_notify_id); -  if (app->encoding_list_notify_id != 0) -    mateconf_client_notify_remove (app->conf, app->encoding_list_notify_id); -  if (app->system_font_notify_id != 0) -    mateconf_client_notify_remove (app->conf, app->system_font_notify_id); -  if (app->enable_menu_accels_notify_id != 0) -    mateconf_client_notify_remove (app->conf, app->enable_menu_accels_notify_id); -  if (app->enable_mnemonics_notify_id != 0) -    mateconf_client_notify_remove (app->conf, app->enable_mnemonics_notify_id); +	if (app->profile_list_notify_id != 0) +		mateconf_client_notify_remove (app->conf, app->profile_list_notify_id); +	if (app->default_profile_notify_id != 0) +		mateconf_client_notify_remove (app->conf, app->default_profile_notify_id); +	if (app->encoding_list_notify_id != 0) +		mateconf_client_notify_remove (app->conf, app->encoding_list_notify_id); +	if (app->system_font_notify_id != 0) +		mateconf_client_notify_remove (app->conf, app->system_font_notify_id); +	if (app->enable_menu_accels_notify_id != 0) +		mateconf_client_notify_remove (app->conf, app->enable_menu_accels_notify_id); +	if (app->enable_mnemonics_notify_id != 0) +		mateconf_client_notify_remove (app->conf, app->enable_mnemonics_notify_id); -  mateconf_client_remove_dir (app->conf, CONF_GLOBAL_PREFIX, NULL); -  mateconf_client_remove_dir (app->conf, MONOSPACE_FONT_DIR, NULL); +	mateconf_client_remove_dir (app->conf, CONF_GLOBAL_PREFIX, NULL); +	mateconf_client_remove_dir (app->conf, MONOSPACE_FONT_DIR, NULL); -  g_object_unref (app->conf); +	g_object_unref (app->conf); -  g_free (app->default_profile_id); +	g_free (app->default_profile_id); -  g_hash_table_destroy (app->profiles); +	g_hash_table_destroy (app->profiles); -  g_hash_table_destroy (app->encodings); +	g_hash_table_destroy (app->encodings); -  pango_font_description_free (app->system_font_desc); +	pango_font_description_free (app->system_font_desc); -  terminal_accels_shutdown (); +	terminal_accels_shutdown (); -  G_OBJECT_CLASS (terminal_app_parent_class)->finalize (object); +	G_OBJECT_CLASS (terminal_app_parent_class)->finalize (object); -  global_app = NULL; +	global_app = NULL;  }  static void @@ -1537,129 +1538,129 @@ terminal_app_get_property (GObject *object,                             GValue *value,                             GParamSpec *pspec)  { -  TerminalApp *app = TERMINAL_APP (object); - -  switch (prop_id) -    { -      case PROP_SYSTEM_FONT: -        if (app->system_font_desc) -          g_value_set_boxed (value, app->system_font_desc); -        else -          g_value_take_boxed (value, pango_font_description_from_string (DEFAULT_MONOSPACE_FONT)); -        break; -      case PROP_ENABLE_MENU_BAR_ACCEL: -        g_value_set_boolean (value, app->enable_menu_accels); -        break; -      case PROP_ENABLE_MNEMONICS: -        g_value_set_boolean (value, app->enable_mnemonics); -        break; -      case PROP_DEFAULT_PROFILE: -        g_value_set_object (value, app->default_profile); -        break; -      default: -        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -        break; -    } +	TerminalApp *app = TERMINAL_APP (object); + +	switch (prop_id) +	{ +	case PROP_SYSTEM_FONT: +		if (app->system_font_desc) +			g_value_set_boxed (value, app->system_font_desc); +		else +			g_value_take_boxed (value, pango_font_description_from_string (DEFAULT_MONOSPACE_FONT)); +		break; +	case PROP_ENABLE_MENU_BAR_ACCEL: +		g_value_set_boolean (value, app->enable_menu_accels); +		break; +	case PROP_ENABLE_MNEMONICS: +		g_value_set_boolean (value, app->enable_mnemonics); +		break; +	case PROP_DEFAULT_PROFILE: +		g_value_set_object (value, app->default_profile); +		break; +	default: +		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +		break; +	}  }  static void  terminal_app_set_property (GObject *object, -                            guint prop_id, -                            const GValue *value, -                            GParamSpec *pspec) -{ -  TerminalApp *app = TERMINAL_APP (object); - -  switch (prop_id) -    { -      case PROP_ENABLE_MENU_BAR_ACCEL: -        app->enable_menu_accels = g_value_get_boolean (value); -        mateconf_client_set_bool (app->conf, ENABLE_MENU_BAR_ACCEL_KEY, app->enable_menu_accels, NULL); -        break; -      case PROP_ENABLE_MNEMONICS: -        app->enable_mnemonics = g_value_get_boolean (value); -        mateconf_client_set_bool (app->conf, ENABLE_MNEMONICS_KEY, app->enable_mnemonics, NULL); -        break; -      case PROP_DEFAULT_PROFILE: -      case PROP_SYSTEM_FONT: -        /* not writable */ -      default: -        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -        break; -    } +                           guint prop_id, +                           const GValue *value, +                           GParamSpec *pspec) +{ +	TerminalApp *app = TERMINAL_APP (object); + +	switch (prop_id) +	{ +	case PROP_ENABLE_MENU_BAR_ACCEL: +		app->enable_menu_accels = g_value_get_boolean (value); +		mateconf_client_set_bool (app->conf, ENABLE_MENU_BAR_ACCEL_KEY, app->enable_menu_accels, NULL); +		break; +	case PROP_ENABLE_MNEMONICS: +		app->enable_mnemonics = g_value_get_boolean (value); +		mateconf_client_set_bool (app->conf, ENABLE_MNEMONICS_KEY, app->enable_mnemonics, NULL); +		break; +	case PROP_DEFAULT_PROFILE: +	case PROP_SYSTEM_FONT: +		/* not writable */ +	default: +		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +		break; +	}  }  static void  terminal_app_real_quit (TerminalApp *app)  { -  gtk_main_quit(); +	gtk_main_quit();  }  static void  terminal_app_class_init (TerminalAppClass *klass)  { -  GObjectClass *object_class = G_OBJECT_CLASS (klass); - -  object_class->finalize = terminal_app_finalize; -  object_class->get_property = terminal_app_get_property; -  object_class->set_property = terminal_app_set_property; - -  klass->quit = terminal_app_real_quit; - -  signals[QUIT] = -    g_signal_new (I_("quit"), -                  G_OBJECT_CLASS_TYPE (object_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (TerminalAppClass, quit), -                  NULL, NULL, -                  g_cclosure_marshal_VOID__VOID, -                  G_TYPE_NONE, 0); - -  signals[PROFILE_LIST_CHANGED] = -    g_signal_new (I_("profile-list-changed"), -                  G_OBJECT_CLASS_TYPE (object_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (TerminalAppClass, profile_list_changed), -                  NULL, NULL, -                  g_cclosure_marshal_VOID__VOID, -                  G_TYPE_NONE, 0); - -  signals[ENCODING_LIST_CHANGED] = -    g_signal_new (I_("encoding-list-changed"), -                  G_OBJECT_CLASS_TYPE (object_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (TerminalAppClass, profile_list_changed), -                  NULL, NULL, -                  g_cclosure_marshal_VOID__VOID, -                  G_TYPE_NONE, 0); - -  g_object_class_install_property -    (object_class, -     PROP_ENABLE_MENU_BAR_ACCEL, -     g_param_spec_boolean (TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, NULL, NULL, -                           DEFAULT_ENABLE_MENU_BAR_ACCEL, -                           G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); - -  g_object_class_install_property -    (object_class, -     PROP_ENABLE_MNEMONICS, -     g_param_spec_boolean (TERMINAL_APP_ENABLE_MNEMONICS, NULL, NULL, -                           DEFAULT_ENABLE_MNEMONICS, -                           G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); - -  g_object_class_install_property -    (object_class, -     PROP_SYSTEM_FONT, -     g_param_spec_boxed (TERMINAL_APP_SYSTEM_FONT, NULL, NULL, -                         PANGO_TYPE_FONT_DESCRIPTION, -                         G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); - -  g_object_class_install_property -    (object_class, -     PROP_DEFAULT_PROFILE, -     g_param_spec_object (TERMINAL_APP_DEFAULT_PROFILE, NULL, NULL, -                          TERMINAL_TYPE_PROFILE, -                          G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); +	GObjectClass *object_class = G_OBJECT_CLASS (klass); + +	object_class->finalize = terminal_app_finalize; +	object_class->get_property = terminal_app_get_property; +	object_class->set_property = terminal_app_set_property; + +	klass->quit = terminal_app_real_quit; + +	signals[QUIT] = +	    g_signal_new (I_("quit"), +	                  G_OBJECT_CLASS_TYPE (object_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (TerminalAppClass, quit), +	                  NULL, NULL, +	                  g_cclosure_marshal_VOID__VOID, +	                  G_TYPE_NONE, 0); + +	signals[PROFILE_LIST_CHANGED] = +	    g_signal_new (I_("profile-list-changed"), +	                  G_OBJECT_CLASS_TYPE (object_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (TerminalAppClass, profile_list_changed), +	                  NULL, NULL, +	                  g_cclosure_marshal_VOID__VOID, +	                  G_TYPE_NONE, 0); + +	signals[ENCODING_LIST_CHANGED] = +	    g_signal_new (I_("encoding-list-changed"), +	                  G_OBJECT_CLASS_TYPE (object_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (TerminalAppClass, profile_list_changed), +	                  NULL, NULL, +	                  g_cclosure_marshal_VOID__VOID, +	                  G_TYPE_NONE, 0); + +	g_object_class_install_property +	(object_class, +	 PROP_ENABLE_MENU_BAR_ACCEL, +	 g_param_spec_boolean (TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, NULL, NULL, +	                       DEFAULT_ENABLE_MENU_BAR_ACCEL, +	                       G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + +	g_object_class_install_property +	(object_class, +	 PROP_ENABLE_MNEMONICS, +	 g_param_spec_boolean (TERMINAL_APP_ENABLE_MNEMONICS, NULL, NULL, +	                       DEFAULT_ENABLE_MNEMONICS, +	                       G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + +	g_object_class_install_property +	(object_class, +	 PROP_SYSTEM_FONT, +	 g_param_spec_boxed (TERMINAL_APP_SYSTEM_FONT, NULL, NULL, +	                     PANGO_TYPE_FONT_DESCRIPTION, +	                     G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + +	g_object_class_install_property +	(object_class, +	 PROP_DEFAULT_PROFILE, +	 g_param_spec_object (TERMINAL_APP_DEFAULT_PROFILE, NULL, NULL, +	                      TERMINAL_TYPE_PROFILE, +	                      G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));  }  /* Public API */ @@ -1667,22 +1668,23 @@ terminal_app_class_init (TerminalAppClass *klass)  TerminalApp*  terminal_app_get (void)  { -  if (global_app == NULL) { -    g_object_new (TERMINAL_TYPE_APP, NULL); -    g_assert (global_app != NULL); -  } +	if (global_app == NULL) +	{ +		g_object_new (TERMINAL_TYPE_APP, NULL); +		g_assert (global_app != NULL); +	} -  return global_app; +	return global_app;  }  void  terminal_app_shutdown (void)  { -  if (global_app == NULL) -    return; +	if (global_app == NULL) +		return; -  g_object_unref (global_app); -  g_assert (global_app == NULL); +	g_object_unref (global_app); +	g_assert (global_app == NULL);  }  /** @@ -1705,171 +1707,171 @@ terminal_app_handle_options (TerminalApp *app,                               gboolean allow_resume,                               GError **error)  { -  GList *lw; -  GdkScreen *gdk_screen; +	GList *lw; +	GdkScreen *gdk_screen; + +	gdk_screen = terminal_app_get_screen_by_display_name (options->display_name, +	             options->screen_number); -  gdk_screen = terminal_app_get_screen_by_display_name (options->display_name, -                                                        options->screen_number); +	if (options->save_config) +	{ +		if (options->remote_arguments) +			return terminal_app_save_config_file (app, options->config_file, error); -  if (options->save_config) -    { -      if (options->remote_arguments) -        return terminal_app_save_config_file (app, options->config_file, error); -       -      g_set_error_literal (error, TERMINAL_OPTION_ERROR, TERMINAL_OPTION_ERROR_NOT_IN_FACTORY, -                            "Cannot use \"--save-config\" when starting the factory process"); -      return FALSE; -    } +		g_set_error_literal (error, TERMINAL_OPTION_ERROR, TERMINAL_OPTION_ERROR_NOT_IN_FACTORY, +		                     "Cannot use \"--save-config\" when starting the factory process"); +		return FALSE; +	} -  if (options->load_config) -    { -      GKeyFile *key_file; -      gboolean result; +	if (options->load_config) +	{ +		GKeyFile *key_file; +		gboolean result; -      key_file = g_key_file_new (); -      result = g_key_file_load_from_file (key_file, options->config_file, 0, error) && -               terminal_options_merge_config (options, key_file, SOURCE_DEFAULT, error); -      g_key_file_free (key_file); +		key_file = g_key_file_new (); +		result = g_key_file_load_from_file (key_file, options->config_file, 0, error) && +		         terminal_options_merge_config (options, key_file, SOURCE_DEFAULT, error); +		g_key_file_free (key_file); -      if (!result) -        return FALSE; +		if (!result) +			return FALSE; -      /* fall-through on success */ -    } +		/* fall-through on success */ +	}  #ifdef WITH_SMCLIENT -{ -  EggSMClient *sm_client; +	{ +		EggSMClient *sm_client; -  sm_client = egg_sm_client_get (); +		sm_client = egg_sm_client_get (); -  if (allow_resume && egg_sm_client_is_resumed (sm_client)) -    { -      GKeyFile *key_file; +		if (allow_resume && egg_sm_client_is_resumed (sm_client)) +		{ +			GKeyFile *key_file; -      key_file = egg_sm_client_get_state_file (sm_client); -      if (key_file != NULL && -          !terminal_options_merge_config (options, key_file, SOURCE_SESSION, error)) -        return FALSE; -    } -} +			key_file = egg_sm_client_get_state_file (sm_client); +			if (key_file != NULL && +			        !terminal_options_merge_config (options, key_file, SOURCE_SESSION, error)) +				return FALSE; +		} +	}  #endif -  /* Make sure we open at least one window */ -  terminal_options_ensure_window (options); - -  if (options->startup_id != NULL) -    _terminal_debug_print (TERMINAL_DEBUG_FACTORY, -                           "Startup ID is '%s'\n", -                           options->startup_id); - -  for (lw = options->initial_windows;  lw != NULL; lw = lw->next) -    { -      InitialWindow *iw = lw->data; -      TerminalWindow *window; -      GList *lt; - -      g_assert (iw->tabs); - -      /* Create & setup new window */ -      window = terminal_app_new_window (app, gdk_screen); - -      /* Restored windows shouldn't demand attention; see bug #586308. */ -      if (iw->source_tag == SOURCE_SESSION) -        terminal_window_set_is_restored (window); - -      if (options->startup_id != NULL) -        gtk_window_set_startup_id (GTK_WINDOW (window), options->startup_id); - -      /* Overwrite the default, unique window role set in terminal_window_init */ -      if (iw->role) -        gtk_window_set_role (GTK_WINDOW (window), iw->role); - -      if (iw->force_menubar_state) -        terminal_window_set_menubar_visible (window, iw->menubar_state); - -      if (iw->start_fullscreen) -        gtk_window_fullscreen (GTK_WINDOW (window)); -      if (iw->start_maximized) -        gtk_window_maximize (GTK_WINDOW (window)); - -      /* Now add the tabs */ -      for (lt = iw->tabs; lt != NULL; lt = lt->next) -        { -          InitialTab *it = lt->data; -          TerminalProfile *profile = NULL; -          TerminalScreen *screen; -          const char *profile_name; -          gboolean profile_is_id; - -          if (it->profile) -            { -              profile_name = it->profile; -              profile_is_id = it->profile_is_id; -            } -          else -            { -              profile_name = options->default_profile; -              profile_is_id = options->default_profile_is_id; -            } - -          if (profile_name) -            { -              if (profile_is_id) -                profile = terminal_app_get_profile_by_name (app, profile_name); -              else -                profile = terminal_app_get_profile_by_visible_name (app, profile_name); - -              if (profile == NULL) -                g_printerr (_("No such profile \"%s\", using default profile\n"), it->profile); -            } -          if (profile == NULL) -            profile = terminal_app_get_profile_for_new_term (app); -          g_assert (profile); - -          screen = terminal_app_new_terminal (app, window, profile, -                                              it->exec_argv ? it->exec_argv : options->exec_argv, -                                              it->title ? it->title : options->default_title, -                                              it->working_dir ? it->working_dir : options->default_working_dir, -                                              options->env, -                                              it->zoom_set ? it->zoom : options->zoom); - -          if (it->active) -            terminal_window_switch_screen (window, screen); -        } - -      if (iw->geometry) -        { -          _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                                "[window %p] applying geometry %s\n", -                                window, iw->geometry); - -          if (!gtk_window_parse_geometry (GTK_WINDOW (window), iw->geometry)) -            g_printerr (_("Invalid geometry string \"%s\"\n"), iw->geometry); -        } - -      gtk_window_present (GTK_WINDOW (window)); -    } - -  return TRUE; +	/* Make sure we open at least one window */ +	terminal_options_ensure_window (options); + +	if (options->startup_id != NULL) +		_terminal_debug_print (TERMINAL_DEBUG_FACTORY, +		                       "Startup ID is '%s'\n", +		                       options->startup_id); + +	for (lw = options->initial_windows;  lw != NULL; lw = lw->next) +	{ +		InitialWindow *iw = lw->data; +		TerminalWindow *window; +		GList *lt; + +		g_assert (iw->tabs); + +		/* Create & setup new window */ +		window = terminal_app_new_window (app, gdk_screen); + +		/* Restored windows shouldn't demand attention; see bug #586308. */ +		if (iw->source_tag == SOURCE_SESSION) +			terminal_window_set_is_restored (window); + +		if (options->startup_id != NULL) +			gtk_window_set_startup_id (GTK_WINDOW (window), options->startup_id); + +		/* Overwrite the default, unique window role set in terminal_window_init */ +		if (iw->role) +			gtk_window_set_role (GTK_WINDOW (window), iw->role); + +		if (iw->force_menubar_state) +			terminal_window_set_menubar_visible (window, iw->menubar_state); + +		if (iw->start_fullscreen) +			gtk_window_fullscreen (GTK_WINDOW (window)); +		if (iw->start_maximized) +			gtk_window_maximize (GTK_WINDOW (window)); + +		/* Now add the tabs */ +		for (lt = iw->tabs; lt != NULL; lt = lt->next) +		{ +			InitialTab *it = lt->data; +			TerminalProfile *profile = NULL; +			TerminalScreen *screen; +			const char *profile_name; +			gboolean profile_is_id; + +			if (it->profile) +			{ +				profile_name = it->profile; +				profile_is_id = it->profile_is_id; +			} +			else +			{ +				profile_name = options->default_profile; +				profile_is_id = options->default_profile_is_id; +			} + +			if (profile_name) +			{ +				if (profile_is_id) +					profile = terminal_app_get_profile_by_name (app, profile_name); +				else +					profile = terminal_app_get_profile_by_visible_name (app, profile_name); + +				if (profile == NULL) +					g_printerr (_("No such profile \"%s\", using default profile\n"), it->profile); +			} +			if (profile == NULL) +				profile = terminal_app_get_profile_for_new_term (app); +			g_assert (profile); + +			screen = terminal_app_new_terminal (app, window, profile, +			                                    it->exec_argv ? it->exec_argv : options->exec_argv, +			                                    it->title ? it->title : options->default_title, +			                                    it->working_dir ? it->working_dir : options->default_working_dir, +			                                    options->env, +			                                    it->zoom_set ? it->zoom : options->zoom); + +			if (it->active) +				terminal_window_switch_screen (window, screen); +		} + +		if (iw->geometry) +		{ +			_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +			                       "[window %p] applying geometry %s\n", +			                       window, iw->geometry); + +			if (!gtk_window_parse_geometry (GTK_WINDOW (window), iw->geometry)) +				g_printerr (_("Invalid geometry string \"%s\"\n"), iw->geometry); +		} + +		gtk_window_present (GTK_WINDOW (window)); +	} + +	return TRUE;  }  TerminalWindow *  terminal_app_new_window (TerminalApp *app,                           GdkScreen *screen)  { -  TerminalWindow *window; +	TerminalWindow *window; -  window = terminal_window_new (); +	window = terminal_window_new (); -  app->windows = g_list_append (app->windows, window); -  g_signal_connect (window, "destroy", -                    G_CALLBACK (terminal_window_destroyed), app); +	app->windows = g_list_append (app->windows, window); +	g_signal_connect (window, "destroy", +	                  G_CALLBACK (terminal_window_destroyed), app); -  if (screen) -    gtk_window_set_screen (GTK_WINDOW (window), screen); +	if (screen) +		gtk_window_set_screen (GTK_WINDOW (window), screen); -  return window; +	return window;  }  TerminalScreen * @@ -1882,19 +1884,19 @@ terminal_app_new_terminal (TerminalApp     *app,                             char           **child_env,                             double           zoom)  { -  TerminalScreen *screen; +	TerminalScreen *screen; -  g_return_val_if_fail (TERMINAL_IS_APP (app), NULL); -  g_return_val_if_fail (TERMINAL_IS_WINDOW (window), NULL); +	g_return_val_if_fail (TERMINAL_IS_APP (app), NULL); +	g_return_val_if_fail (TERMINAL_IS_WINDOW (window), NULL); -  screen = terminal_screen_new (profile, override_command, title, -                                working_dir, child_env, zoom); +	screen = terminal_screen_new (profile, override_command, title, +	                              working_dir, child_env, zoom); -  terminal_window_add_screen (window, screen, -1); -  terminal_window_switch_screen (window, screen); -  gtk_widget_grab_focus (GTK_WIDGET (screen)); +	terminal_window_add_screen (window, screen, -1); +	terminal_window_switch_screen (window, screen); +	gtk_widget_grab_focus (GTK_WIDGET (screen)); -  return screen; +	return screen;  }  void @@ -1903,30 +1905,30 @@ terminal_app_edit_profile (TerminalApp     *app,                             GtkWindow       *transient_parent,                             const char      *widget_name)  { -  terminal_profile_edit (profile, transient_parent, widget_name); +	terminal_profile_edit (profile, transient_parent, widget_name);  }  void  terminal_app_edit_keybindings (TerminalApp     *app,                                 GtkWindow       *transient_parent)  { -  terminal_edit_keys_dialog_show (transient_parent); +	terminal_edit_keys_dialog_show (transient_parent);  }  void  terminal_app_edit_encodings (TerminalApp     *app,                               GtkWindow       *transient_parent)  { -  terminal_encoding_dialog_show (transient_parent); +	terminal_encoding_dialog_show (transient_parent);  }  TerminalWindow *  terminal_app_get_current_window (TerminalApp *app)  { -  if (app->windows == NULL) -    return NULL; +	if (app->windows == NULL) +		return NULL; -  return g_list_last (app->windows)->data; +	return g_list_last (app->windows)->data;  }  /** @@ -1940,70 +1942,70 @@ terminal_app_get_current_window (TerminalApp *app)  GList*  terminal_app_get_profile_list (TerminalApp *app)  { -  g_return_val_if_fail (TERMINAL_IS_APP (app), NULL); +	g_return_val_if_fail (TERMINAL_IS_APP (app), NULL); -  return g_list_sort (g_hash_table_get_values (app->profiles), profiles_alphabetic_cmp); +	return g_list_sort (g_hash_table_get_values (app->profiles), profiles_alphabetic_cmp);  }  TerminalProfile*  terminal_app_get_profile_by_name (TerminalApp *app,                                    const char *name)  { -  g_return_val_if_fail (TERMINAL_IS_APP (app), NULL); -  g_return_val_if_fail (name != NULL, NULL); +	g_return_val_if_fail (TERMINAL_IS_APP (app), NULL); +	g_return_val_if_fail (name != NULL, NULL); -  return g_hash_table_lookup (app->profiles, name); +	return g_hash_table_lookup (app->profiles, name);  }  TerminalProfile*  terminal_app_get_profile_by_visible_name (TerminalApp *app, -                                          const char *name) +        const char *name)  { -  LookupInfo info; +	LookupInfo info; -  g_return_val_if_fail (TERMINAL_IS_APP (app), NULL); -  g_return_val_if_fail (name != NULL, NULL); +	g_return_val_if_fail (TERMINAL_IS_APP (app), NULL); +	g_return_val_if_fail (name != NULL, NULL); -  info.result = NULL; -  info.target = name; +	info.result = NULL; +	info.target = name; -  g_hash_table_foreach (app->profiles, -                        profiles_lookup_by_visible_name_foreach, -                        &info); -  return info.result; +	g_hash_table_foreach (app->profiles, +	                      profiles_lookup_by_visible_name_foreach, +	                      &info); +	return info.result;  }  TerminalProfile*  terminal_app_get_default_profile (TerminalApp *app)  { -  g_return_val_if_fail (TERMINAL_IS_APP (app), NULL); +	g_return_val_if_fail (TERMINAL_IS_APP (app), NULL); -  return app->default_profile; +	return app->default_profile;  }  TerminalProfile*  terminal_app_get_profile_for_new_term (TerminalApp *app)  { -  GHashTableIter iter; -  TerminalProfile *profile = NULL; -  TerminalProfile **profileptr = &profile; +	GHashTableIter iter; +	TerminalProfile *profile = NULL; +	TerminalProfile **profileptr = &profile; -  g_return_val_if_fail (TERMINAL_IS_APP (app), NULL); +	g_return_val_if_fail (TERMINAL_IS_APP (app), NULL); -  if (app->default_profile) -    return app->default_profile;	 +	if (app->default_profile) +		return app->default_profile; -  g_hash_table_iter_init (&iter, app->profiles); -  if (g_hash_table_iter_next (&iter, NULL, (gpointer *) profileptr)) -    return profile; +	g_hash_table_iter_init (&iter, app->profiles); +	if (g_hash_table_iter_next (&iter, NULL, (gpointer *) profileptr)) +		return profile; -  return NULL; +	return NULL;  }  GHashTable *  terminal_app_get_encodings (TerminalApp *app)  { -  return app->encodings; +	return app->encodings;  }  /** @@ -2017,21 +2019,21 @@ TerminalEncoding *  terminal_app_ensure_encoding (TerminalApp *app,                                const char *charset)  { -  TerminalEncoding *encoding; +	TerminalEncoding *encoding; -  encoding = g_hash_table_lookup (app->encodings, charset); -  if (encoding == NULL) -    { -      encoding = terminal_encoding_new (charset, -                                        _("User Defined"), -                                        TRUE, -                                        TRUE /* scary! */); -      g_hash_table_insert (app->encodings, -                          (gpointer) terminal_encoding_get_id (encoding), -                          encoding); -    } +	encoding = g_hash_table_lookup (app->encodings, charset); +	if (encoding == NULL) +	{ +		encoding = terminal_encoding_new (charset, +		                                  _("User Defined"), +		                                  TRUE, +		                                  TRUE /* scary! */); +		g_hash_table_insert (app->encodings, +		                     (gpointer) terminal_encoding_get_id (encoding), +		                     encoding); +	} -  return encoding; +	return encoding;  }  /** @@ -2042,57 +2044,57 @@ terminal_app_ensure_encoding (TerminalApp *app,  GSList*  terminal_app_get_active_encodings (TerminalApp *app)  { -  GSList *list = NULL; -  GHashTableIter iter; -  gpointer key, value; +	GSList *list = NULL; +	GHashTableIter iter; +	gpointer key, value; -  g_hash_table_iter_init (&iter, app->encodings); -  while (g_hash_table_iter_next (&iter, &key, &value)) -    { -      TerminalEncoding *encoding = (TerminalEncoding *) value; +	g_hash_table_iter_init (&iter, app->encodings); +	while (g_hash_table_iter_next (&iter, &key, &value)) +	{ +		TerminalEncoding *encoding = (TerminalEncoding *) value; -      if (!encoding->is_active) -        continue; +		if (!encoding->is_active) +			continue; -      list = g_slist_prepend (list, terminal_encoding_ref (encoding)); -    } +		list = g_slist_prepend (list, terminal_encoding_ref (encoding)); +	} -  return g_slist_sort (list, (GCompareFunc) compare_encodings); +	return g_slist_sort (list, (GCompareFunc) compare_encodings);  }  void  terminal_app_save_config (TerminalApp *app,                            GKeyFile *key_file)  { -  GList *lw; -  guint n = 0; -  GPtrArray *window_names_array; -  char **window_names; -  gsize len; +	GList *lw; +	guint n = 0; +	GPtrArray *window_names_array; +	char **window_names; +	gsize len; -  g_key_file_set_comment (key_file, NULL, NULL, "Written by " PACKAGE_STRING, NULL); +	g_key_file_set_comment (key_file, NULL, NULL, "Written by " PACKAGE_STRING, NULL); -  g_key_file_set_integer (key_file, TERMINAL_CONFIG_GROUP, TERMINAL_CONFIG_PROP_VERSION, TERMINAL_CONFIG_VERSION); -  g_key_file_set_integer (key_file, TERMINAL_CONFIG_GROUP, TERMINAL_CONFIG_PROP_COMPAT_VERSION, TERMINAL_CONFIG_COMPAT_VERSION); +	g_key_file_set_integer (key_file, TERMINAL_CONFIG_GROUP, TERMINAL_CONFIG_PROP_VERSION, TERMINAL_CONFIG_VERSION); +	g_key_file_set_integer (key_file, TERMINAL_CONFIG_GROUP, TERMINAL_CONFIG_PROP_COMPAT_VERSION, TERMINAL_CONFIG_COMPAT_VERSION); -  window_names_array = g_ptr_array_sized_new (g_list_length (app->windows) + 1); +	window_names_array = g_ptr_array_sized_new (g_list_length (app->windows) + 1); -  for (lw = app->windows; lw != NULL; lw = lw->next) -    { -      TerminalWindow *window = TERMINAL_WINDOW (lw->data); -      char *group; +	for (lw = app->windows; lw != NULL; lw = lw->next) +	{ +		TerminalWindow *window = TERMINAL_WINDOW (lw->data); +		char *group; -      group = g_strdup_printf ("Window%u", n++); -      g_ptr_array_add (window_names_array, group); +		group = g_strdup_printf ("Window%u", n++); +		g_ptr_array_add (window_names_array, group); -      terminal_window_save_state (window, key_file, group); -    } +		terminal_window_save_state (window, key_file, group); +	} -  len = window_names_array->len; -  g_ptr_array_add (window_names_array, NULL); -  window_names = (char **) g_ptr_array_free (window_names_array, FALSE); -  g_key_file_set_string_list (key_file, TERMINAL_CONFIG_GROUP, TERMINAL_CONFIG_PROP_WINDOWS, (const char * const *) window_names, len); -  g_strfreev (window_names); +	len = window_names_array->len; +	g_ptr_array_add (window_names_array, NULL); +	window_names = (char **) g_ptr_array_free (window_names_array, FALSE); +	g_key_file_set_string_list (key_file, TERMINAL_CONFIG_GROUP, TERMINAL_CONFIG_PROP_WINDOWS, (const char * const *) window_names, len); +	g_strfreev (window_names);  }  gboolean @@ -2100,17 +2102,17 @@ terminal_app_save_config_file (TerminalApp *app,                                 const char *file_name,                                 GError **error)  { -  GKeyFile *key_file; -  char *data; -  gsize len; -  gboolean result; +	GKeyFile *key_file; +	char *data; +	gsize len; +	gboolean result; -  key_file = g_key_file_new (); -  terminal_app_save_config (app, key_file); +	key_file = g_key_file_new (); +	terminal_app_save_config (app, key_file); -  data = g_key_file_to_data (key_file, &len, NULL); -  result = g_file_set_contents (file_name, data, len, error); -  g_free (data); +	data = g_key_file_to_data (key_file, &len, NULL); +	result = g_file_set_contents (file_name, data, len, error); +	g_free (data); -  return result; +	return result;  } diff --git a/src/terminal-app.h b/src/terminal-app.h index 0b90b2f..490121c 100644 --- a/src/terminal-app.h +++ b/src/terminal-app.h @@ -102,16 +102,16 @@ void terminal_app_new_profile (TerminalApp     *app,                                 GtkWindow       *transient_parent);  TerminalWindow * terminal_app_new_window   (TerminalApp *app, -                                            GdkScreen *screen); +        GdkScreen *screen);  TerminalScreen *terminal_app_new_terminal (TerminalApp     *app, -                                           TerminalWindow  *window, -                                           TerminalProfile *profile, -                                           char           **override_command, -                                           const char      *title, -                                           const char      *working_dir, -                                           char           **child_env, -                                           double           zoom); +        TerminalWindow  *window, +        TerminalProfile *profile, +        char           **override_command, +        const char      *title, +        const char      *working_dir, +        char           **child_env, +        double           zoom);  TerminalWindow *terminal_app_get_current_window (TerminalApp *app); @@ -129,10 +129,10 @@ GList* terminal_app_get_profile_list (TerminalApp *app);  TerminalProfile* terminal_app_ensure_profile_fallback (TerminalApp *app);  TerminalProfile* terminal_app_get_profile_by_name         (TerminalApp *app, -                                                           const char      *name); +        const char      *name);  TerminalProfile* terminal_app_get_profile_by_visible_name (TerminalApp *app, -                                                           const char      *name); +        const char      *name);  /* may return NULL */  TerminalProfile* terminal_app_get_default_profile (TerminalApp *app); @@ -141,7 +141,7 @@ TerminalProfile* terminal_app_get_default_profile (TerminalApp *app);  TerminalProfile* terminal_app_get_profile_for_new_term (TerminalApp *app);  TerminalEncoding *terminal_app_ensure_encoding (TerminalApp *app, -                                                const char *charset); +        const char *charset);  GHashTable *terminal_app_get_encodings (TerminalApp *app); diff --git a/src/terminal-debug.c b/src/terminal-debug.c index ec9c3ee..de75e41 100644 --- a/src/terminal-debug.c +++ b/src/terminal-debug.c @@ -28,18 +28,19 @@ void  _terminal_debug_init(void)  {  #ifdef MATE_ENABLE_DEBUG -  const GDebugKey keys[] = { -    { "accels",    TERMINAL_DEBUG_ACCELS    }, -    { "encodings", TERMINAL_DEBUG_ENCODINGS }, -    { "factory",   TERMINAL_DEBUG_FACTORY   }, -    { "geometry",  TERMINAL_DEBUG_GEOMETRY  }, -    { "mdi",       TERMINAL_DEBUG_MDI       }, -    { "processes", TERMINAL_DEBUG_PROCESSES }, -    { "profile",   TERMINAL_DEBUG_PROFILE   } -  }; +	const GDebugKey keys[] = +	{ +		{ "accels",    TERMINAL_DEBUG_ACCELS    }, +		{ "encodings", TERMINAL_DEBUG_ENCODINGS }, +		{ "factory",   TERMINAL_DEBUG_FACTORY   }, +		{ "geometry",  TERMINAL_DEBUG_GEOMETRY  }, +		{ "mdi",       TERMINAL_DEBUG_MDI       }, +		{ "processes", TERMINAL_DEBUG_PROCESSES }, +		{ "profile",   TERMINAL_DEBUG_PROFILE   } +	}; -  _terminal_debug_flags = g_parse_debug_string (g_getenv ("MATE_TERMINAL_DEBUG"), -                                                keys, G_N_ELEMENTS (keys)); +	_terminal_debug_flags = g_parse_debug_string (g_getenv ("MATE_TERMINAL_DEBUG"), +	                        keys, G_N_ELEMENTS (keys));  #endif /* MATE_ENABLE_DEBUG */  } diff --git a/src/terminal-debug.h b/src/terminal-debug.h index 6be1716..1f03ec3 100644 --- a/src/terminal-debug.h +++ b/src/terminal-debug.h @@ -25,14 +25,15 @@  G_BEGIN_DECLS -typedef enum { -  TERMINAL_DEBUG_ACCELS     = 1 << 0, -  TERMINAL_DEBUG_ENCODINGS  = 1 << 1, -  TERMINAL_DEBUG_FACTORY    = 1 << 2, -  TERMINAL_DEBUG_GEOMETRY   = 1 << 3, -  TERMINAL_DEBUG_MDI        = 1 << 4, -  TERMINAL_DEBUG_PROCESSES  = 1 << 5, -  TERMINAL_DEBUG_PROFILE    = 1 << 6 +typedef enum +{ +    TERMINAL_DEBUG_ACCELS     = 1 << 0, +    TERMINAL_DEBUG_ENCODINGS  = 1 << 1, +    TERMINAL_DEBUG_FACTORY    = 1 << 2, +    TERMINAL_DEBUG_GEOMETRY   = 1 << 3, +    TERMINAL_DEBUG_MDI        = 1 << 4, +    TERMINAL_DEBUG_PROCESSES  = 1 << 5, +    TERMINAL_DEBUG_PROFILE    = 1 << 6  } TerminalDebugFlags;  void _terminal_debug_init(void); @@ -43,7 +44,7 @@ static inline gboolean _terminal_debug_on (TerminalDebugFlags flags) G_GNUC_CONS  static inline gboolean  _terminal_debug_on (TerminalDebugFlags flags)  { -  return (_terminal_debug_flags & flags) == flags; +	return (_terminal_debug_flags & flags) == flags;  }  #ifdef MATE_ENABLE_DEBUG @@ -60,12 +61,13 @@ _terminal_debug_on (TerminalDebugFlags flags)  #include <glib/gstdio.h>  static void _terminal_debug_print (guint flags, const char *fmt, ...)  { -  if (_terminal_debug_on (flags)) { -    va_list  ap; -    va_start (ap, fmt); -    g_vfprintf (stderr, fmt, ap); -    va_end (ap); -  } +	if (_terminal_debug_on (flags)) +	{ +		va_list  ap; +		va_start (ap, fmt); +		g_vfprintf (stderr, fmt, ap); +		va_end (ap); +	}  }  #endif diff --git a/src/terminal-encoding.c b/src/terminal-encoding.c index 25d343b..ba689ce 100644 --- a/src/terminal-encoding.c +++ b/src/terminal-encoding.c @@ -33,7 +33,7 @@   *   * There's a list of character sets stored in mateconf, indicating   * which encodings to display in the encoding menu. - *  + *   * We have a pre-canned list of available encodings   * (hardcoded in the table below) that can be added to   * the encoding menu, and to give a human-readable name @@ -44,101 +44,104 @@   * labeled "user defined" but still appears in the menu.   */ -static const struct { -  const char *charset; -  const char *name; -} encodings[] = { -  { "ISO-8859-1",	N_("Western") }, -  { "ISO-8859-2",	N_("Central European") }, -  { "ISO-8859-3",	N_("South European") }, -  { "ISO-8859-4",	N_("Baltic") }, -  { "ISO-8859-5",	N_("Cyrillic") }, -  { "ISO-8859-6",	N_("Arabic") }, -  { "ISO-8859-7",	N_("Greek") }, -  { "ISO-8859-8",	N_("Hebrew Visual") }, -  { "ISO-8859-8-I",	N_("Hebrew") }, -  { "ISO-8859-9",	N_("Turkish") }, -  { "ISO-8859-10",	N_("Nordic") }, -  { "ISO-8859-13",	N_("Baltic") }, -  { "ISO-8859-14",	N_("Celtic") }, -  { "ISO-8859-15",	N_("Western") }, -  { "ISO-8859-16",	N_("Romanian") }, -  { "UTF-8",	N_("Unicode") }, -  { "ARMSCII-8",	N_("Armenian") }, -  { "BIG5",	N_("Chinese Traditional") }, -  { "BIG5-HKSCS",	N_("Chinese Traditional") }, -  { "CP866",	N_("Cyrillic/Russian") }, -  { "EUC-JP",	N_("Japanese") }, -  { "EUC-KR",	N_("Korean") }, -  { "EUC-TW",	N_("Chinese Traditional") }, -  { "GB18030",	N_("Chinese Simplified") }, -  { "GB2312",	N_("Chinese Simplified") }, -  { "GBK",	N_("Chinese Simplified") }, -  { "GEORGIAN-PS",	N_("Georgian") }, -  { "IBM850",	N_("Western") }, -  { "IBM852",	N_("Central European") }, -  { "IBM855",	N_("Cyrillic") }, -  { "IBM857",	N_("Turkish") }, -  { "IBM862",	N_("Hebrew") }, -  { "IBM864",	N_("Arabic") }, -  { "ISO-2022-JP",	N_("Japanese") }, -  { "ISO-2022-KR",	N_("Korean") }, -  { "ISO-IR-111",	N_("Cyrillic") }, -  { "KOI8-R",	N_("Cyrillic") }, -  { "KOI8-U",	N_("Cyrillic/Ukrainian") }, -  { "MAC_ARABIC",	N_("Arabic") }, -  { "MAC_CE",	N_("Central European") }, -  { "MAC_CROATIAN",	N_("Croatian") }, -  { "MAC-CYRILLIC",	N_("Cyrillic") }, -  { "MAC_DEVANAGARI",	N_("Hindi") }, -  { "MAC_FARSI",	N_("Persian") }, -  { "MAC_GREEK",	N_("Greek") }, -  { "MAC_GUJARATI",	N_("Gujarati") }, -  { "MAC_GURMUKHI",	N_("Gurmukhi") }, -  { "MAC_HEBREW",	N_("Hebrew") }, -  { "MAC_ICELANDIC",	N_("Icelandic") }, -  { "MAC_ROMAN",	N_("Western") }, -  { "MAC_ROMANIAN",	N_("Romanian") }, -  { "MAC_TURKISH",	N_("Turkish") }, -  { "MAC_UKRAINIAN",	N_("Cyrillic/Ukrainian") }, -  { "SHIFT_JIS",	N_("Japanese") }, -  { "TCVN",	N_("Vietnamese") }, -  { "TIS-620",	N_("Thai") }, -  { "UHC",	N_("Korean") }, -  { "VISCII",	N_("Vietnamese") }, -  { "WINDOWS-1250",	N_("Central European") }, -  { "WINDOWS-1251",	N_("Cyrillic") }, -  { "WINDOWS-1252",	N_("Western") }, -  { "WINDOWS-1253",	N_("Greek") }, -  { "WINDOWS-1254",	N_("Turkish") }, -  { "WINDOWS-1255",	N_("Hebrew") }, -  { "WINDOWS-1256",	N_("Arabic") }, -  { "WINDOWS-1257",	N_("Baltic") }, -  { "WINDOWS-1258",	N_("Vietnamese") }, +static const struct +{ +	const char *charset; +	const char *name; +} encodings[] = +{ +	{ "ISO-8859-1",	N_("Western") }, +	{ "ISO-8859-2",	N_("Central European") }, +	{ "ISO-8859-3",	N_("South European") }, +	{ "ISO-8859-4",	N_("Baltic") }, +	{ "ISO-8859-5",	N_("Cyrillic") }, +	{ "ISO-8859-6",	N_("Arabic") }, +	{ "ISO-8859-7",	N_("Greek") }, +	{ "ISO-8859-8",	N_("Hebrew Visual") }, +	{ "ISO-8859-8-I",	N_("Hebrew") }, +	{ "ISO-8859-9",	N_("Turkish") }, +	{ "ISO-8859-10",	N_("Nordic") }, +	{ "ISO-8859-13",	N_("Baltic") }, +	{ "ISO-8859-14",	N_("Celtic") }, +	{ "ISO-8859-15",	N_("Western") }, +	{ "ISO-8859-16",	N_("Romanian") }, +	{ "UTF-8",	N_("Unicode") }, +	{ "ARMSCII-8",	N_("Armenian") }, +	{ "BIG5",	N_("Chinese Traditional") }, +	{ "BIG5-HKSCS",	N_("Chinese Traditional") }, +	{ "CP866",	N_("Cyrillic/Russian") }, +	{ "EUC-JP",	N_("Japanese") }, +	{ "EUC-KR",	N_("Korean") }, +	{ "EUC-TW",	N_("Chinese Traditional") }, +	{ "GB18030",	N_("Chinese Simplified") }, +	{ "GB2312",	N_("Chinese Simplified") }, +	{ "GBK",	N_("Chinese Simplified") }, +	{ "GEORGIAN-PS",	N_("Georgian") }, +	{ "IBM850",	N_("Western") }, +	{ "IBM852",	N_("Central European") }, +	{ "IBM855",	N_("Cyrillic") }, +	{ "IBM857",	N_("Turkish") }, +	{ "IBM862",	N_("Hebrew") }, +	{ "IBM864",	N_("Arabic") }, +	{ "ISO-2022-JP",	N_("Japanese") }, +	{ "ISO-2022-KR",	N_("Korean") }, +	{ "ISO-IR-111",	N_("Cyrillic") }, +	{ "KOI8-R",	N_("Cyrillic") }, +	{ "KOI8-U",	N_("Cyrillic/Ukrainian") }, +	{ "MAC_ARABIC",	N_("Arabic") }, +	{ "MAC_CE",	N_("Central European") }, +	{ "MAC_CROATIAN",	N_("Croatian") }, +	{ "MAC-CYRILLIC",	N_("Cyrillic") }, +	{ "MAC_DEVANAGARI",	N_("Hindi") }, +	{ "MAC_FARSI",	N_("Persian") }, +	{ "MAC_GREEK",	N_("Greek") }, +	{ "MAC_GUJARATI",	N_("Gujarati") }, +	{ "MAC_GURMUKHI",	N_("Gurmukhi") }, +	{ "MAC_HEBREW",	N_("Hebrew") }, +	{ "MAC_ICELANDIC",	N_("Icelandic") }, +	{ "MAC_ROMAN",	N_("Western") }, +	{ "MAC_ROMANIAN",	N_("Romanian") }, +	{ "MAC_TURKISH",	N_("Turkish") }, +	{ "MAC_UKRAINIAN",	N_("Cyrillic/Ukrainian") }, +	{ "SHIFT_JIS",	N_("Japanese") }, +	{ "TCVN",	N_("Vietnamese") }, +	{ "TIS-620",	N_("Thai") }, +	{ "UHC",	N_("Korean") }, +	{ "VISCII",	N_("Vietnamese") }, +	{ "WINDOWS-1250",	N_("Central European") }, +	{ "WINDOWS-1251",	N_("Cyrillic") }, +	{ "WINDOWS-1252",	N_("Western") }, +	{ "WINDOWS-1253",	N_("Greek") }, +	{ "WINDOWS-1254",	N_("Turkish") }, +	{ "WINDOWS-1255",	N_("Hebrew") }, +	{ "WINDOWS-1256",	N_("Arabic") }, +	{ "WINDOWS-1257",	N_("Baltic") }, +	{ "WINDOWS-1258",	N_("Vietnamese") },  #if 0 -  /* These encodings do NOT pass-through ASCII, so are always rejected. -   * FIXME: why are they in this table; or rather why do we need -   * the ASCII pass-through requirement? -   */ -  { "UTF-7",  N_("Unicode") }, -  { "UTF-16", N_("Unicode") }, -  { "UCS-2",  N_("Unicode") }, -  { "UCS-4",  N_("Unicode") }, -  { "JOHAB",  N_("Korean") }, +	/* These encodings do NOT pass-through ASCII, so are always rejected. +	 * FIXME: why are they in this table; or rather why do we need +	 * the ASCII pass-through requirement? +	 */ +	{ "UTF-7",  N_("Unicode") }, +	{ "UTF-16", N_("Unicode") }, +	{ "UCS-2",  N_("Unicode") }, +	{ "UCS-4",  N_("Unicode") }, +	{ "JOHAB",  N_("Korean") },  #endif  }; -typedef struct { -  GtkWidget *dialog; -  GtkListStore *base_store; -  GtkTreeView *available_tree_view; -  GtkTreeSelection *available_selection; -  GtkTreeModel *available_model; -  GtkTreeView *active_tree_view; -  GtkTreeSelection *active_selection; -  GtkTreeModel *active_model; -  GtkWidget *add_button; -  GtkWidget *remove_button; +typedef struct +{ +	GtkWidget *dialog; +	GtkListStore *base_store; +	GtkTreeView *available_tree_view; +	GtkTreeSelection *available_selection; +	GtkTreeModel *available_model; +	GtkTreeView *active_tree_view; +	GtkTreeSelection *active_selection; +	GtkTreeModel *active_model; +	GtkWidget *add_button; +	GtkWidget *remove_button;  } EncodingDialogData;  static GtkWidget *encoding_dialog = NULL; @@ -149,163 +152,164 @@ terminal_encoding_new (const char *charset,                         gboolean is_custom,                         gboolean force_valid)  { -  TerminalEncoding *encoding; +	TerminalEncoding *encoding; -  encoding = g_slice_new (TerminalEncoding); -  encoding->refcount = 1; -  encoding->id = g_strdup (charset); -  encoding->name = g_strdup (display_name); -  encoding->valid = encoding->validity_checked = force_valid; -  encoding->is_custom = is_custom; -  encoding->is_active = FALSE; +	encoding = g_slice_new (TerminalEncoding); +	encoding->refcount = 1; +	encoding->id = g_strdup (charset); +	encoding->name = g_strdup (display_name); +	encoding->valid = encoding->validity_checked = force_valid; +	encoding->is_custom = is_custom; +	encoding->is_active = FALSE; -  return encoding; +	return encoding;  }  TerminalEncoding*  terminal_encoding_ref (TerminalEncoding *encoding)  { -  g_return_val_if_fail (encoding != NULL, NULL); +	g_return_val_if_fail (encoding != NULL, NULL); -  encoding->refcount++; -  return encoding; +	encoding->refcount++; +	return encoding;  }  void  terminal_encoding_unref (TerminalEncoding *encoding)  { -  if (--encoding->refcount > 0) -    return; +	if (--encoding->refcount > 0) +		return; -  g_free (encoding->name); -  g_free (encoding->id); -  g_slice_free (TerminalEncoding, encoding); +	g_free (encoding->name); +	g_free (encoding->id); +	g_slice_free (TerminalEncoding, encoding);  }  const char *  terminal_encoding_get_id (TerminalEncoding *encoding)  { -  g_return_val_if_fail (encoding != NULL, NULL); +	g_return_val_if_fail (encoding != NULL, NULL); -  return encoding->id; +	return encoding->id;  }  const char *  terminal_encoding_get_charset (TerminalEncoding *encoding)  { -  g_return_val_if_fail (encoding != NULL, NULL); +	g_return_val_if_fail (encoding != NULL, NULL); -  if (strcmp (encoding->id, "current") == 0) -    { -      const char *charset; +	if (strcmp (encoding->id, "current") == 0) +	{ +		const char *charset; -      g_get_charset (&charset); -      return charset; -    } +		g_get_charset (&charset); +		return charset; +	} -  return encoding->id; +	return encoding->id;  }  gboolean  terminal_encoding_is_valid (TerminalEncoding *encoding)  { -  /* All of the printing ASCII characters from space (32) to the tilde (126) */ -  static const char ascii_sample[] = -      " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; -  char *converted; -  gsize bytes_read = 0, bytes_written = 0; -  GError *error = NULL; - -  if (encoding->validity_checked) -    return encoding->valid; - -  /* Test that the encoding is a proper superset of ASCII (which naive -   * apps are going to use anyway) by attempting to validate the text -   * using the current encoding.  This also flushes out any encodings -   * which the underlying GIConv implementation can't support. -   */ -  converted = g_convert (ascii_sample, sizeof (ascii_sample) - 1, -                         terminal_encoding_get_charset (encoding), "UTF-8", -                         &bytes_read, &bytes_written, &error); - -  /* The encoding is only valid if ASCII passes through cleanly. */ -  encoding->valid = (bytes_read == (sizeof (ascii_sample) - 1)) && -                    (converted != NULL) && -                    (strcmp (converted, ascii_sample) == 0); +	/* All of the printing ASCII characters from space (32) to the tilde (126) */ +	static const char ascii_sample[] = +	    " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; +	char *converted; +	gsize bytes_read = 0, bytes_written = 0; +	GError *error = NULL; + +	if (encoding->validity_checked) +		return encoding->valid; + +	/* Test that the encoding is a proper superset of ASCII (which naive +	 * apps are going to use anyway) by attempting to validate the text +	 * using the current encoding.  This also flushes out any encodings +	 * which the underlying GIConv implementation can't support. +	 */ +	converted = g_convert (ascii_sample, sizeof (ascii_sample) - 1, +	                       terminal_encoding_get_charset (encoding), "UTF-8", +	                       &bytes_read, &bytes_written, &error); + +	/* The encoding is only valid if ASCII passes through cleanly. */ +	encoding->valid = (bytes_read == (sizeof (ascii_sample) - 1)) && +	                  (converted != NULL) && +	                  (strcmp (converted, ascii_sample) == 0);  #ifdef MATE_ENABLE_DEBUG -  _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ENCODINGS) -  { -    if (!encoding->valid) -      { -        _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS, -                               "Rejecting encoding %s as invalid:\n", -                               terminal_encoding_get_charset (encoding)); -        _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS, -                               " input  \"%s\"\n", -                               ascii_sample); -        _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS, -                               " output \"%s\" bytes read %u written %u\n", -                               converted ? converted : "(null)", bytes_read, bytes_written); -        if (error) -          _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS, -                                 " Error: %s\n", -                                 error->message); -      } -    else -        _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS, -                               "Encoding %s is valid\n\n", -                               terminal_encoding_get_charset (encoding)); -  } +	_TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ENCODINGS) +	{ +		if (!encoding->valid) +		{ +			_terminal_debug_print (TERMINAL_DEBUG_ENCODINGS, +			                       "Rejecting encoding %s as invalid:\n", +			                       terminal_encoding_get_charset (encoding)); +			_terminal_debug_print (TERMINAL_DEBUG_ENCODINGS, +			                       " input  \"%s\"\n", +			                       ascii_sample); +			_terminal_debug_print (TERMINAL_DEBUG_ENCODINGS, +			                       " output \"%s\" bytes read %u written %u\n", +			                       converted ? converted : "(null)", bytes_read, bytes_written); +			if (error) +				_terminal_debug_print (TERMINAL_DEBUG_ENCODINGS, +				                       " Error: %s\n", +				                       error->message); +		} +		else +			_terminal_debug_print (TERMINAL_DEBUG_ENCODINGS, +			                       "Encoding %s is valid\n\n", +			                       terminal_encoding_get_charset (encoding)); +	}  #endif -  g_clear_error (&error); -  g_free (converted); +	g_clear_error (&error); +	g_free (converted); -  encoding->validity_checked = TRUE; -  return encoding->valid; +	encoding->validity_checked = TRUE; +	return encoding->valid;  }  GType  terminal_encoding_get_type (void)  { -  static GType type = 0; +	static GType type = 0; -  if (G_UNLIKELY (type == 0)) { -    type = g_boxed_type_register_static (I_("TerminalEncoding"), -                                         (GBoxedCopyFunc) terminal_encoding_ref, -                                         (GBoxedFreeFunc) terminal_encoding_unref); -  } +	if (G_UNLIKELY (type == 0)) +	{ +		type = g_boxed_type_register_static (I_("TerminalEncoding"), +		                                     (GBoxedCopyFunc) terminal_encoding_ref, +		                                     (GBoxedFreeFunc) terminal_encoding_unref); +	} -  return type; +	return type;  }  static void  update_active_encodings_mateconf (void)  { -  GSList *list, *l; -  GSList *strings = NULL; -  MateConfClient *conf; - -  list = terminal_app_get_active_encodings (terminal_app_get ()); -  for (l = list; l != NULL; l = l->next) -    { -      TerminalEncoding *encoding = (TerminalEncoding *) l->data; - -      strings = g_slist_prepend (strings, (gpointer) terminal_encoding_get_id (encoding)); -    } - -  conf = mateconf_client_get_default (); -  mateconf_client_set_list (conf, -                         CONF_GLOBAL_PREFIX"/active_encodings", -                         MATECONF_VALUE_STRING, -                         strings, -                         NULL); -  g_object_unref (conf); - -  g_slist_free (strings); -  g_slist_foreach (list, (GFunc) terminal_encoding_unref, NULL); -  g_slist_free (list); +	GSList *list, *l; +	GSList *strings = NULL; +	MateConfClient *conf; + +	list = terminal_app_get_active_encodings (terminal_app_get ()); +	for (l = list; l != NULL; l = l->next) +	{ +		TerminalEncoding *encoding = (TerminalEncoding *) l->data; + +		strings = g_slist_prepend (strings, (gpointer) terminal_encoding_get_id (encoding)); +	} + +	conf = mateconf_client_get_default (); +	mateconf_client_set_list (conf, +	                          CONF_GLOBAL_PREFIX"/active_encodings", +	                          MATECONF_VALUE_STRING, +	                          strings, +	                          NULL); +	g_object_unref (conf); + +	g_slist_free (strings); +	g_slist_foreach (list, (GFunc) terminal_encoding_unref, NULL); +	g_slist_free (list);  }  static void @@ -313,78 +317,78 @@ response_callback (GtkWidget *window,                     int        id,                     EncodingDialogData *data)  { -  if (id == GTK_RESPONSE_HELP) -    terminal_util_show_help ("mate-terminal-encoding-add", GTK_WINDOW (window)); -  else -    gtk_widget_destroy (GTK_WIDGET (window)); +	if (id == GTK_RESPONSE_HELP) +		terminal_util_show_help ("mate-terminal-encoding-add", GTK_WINDOW (window)); +	else +		gtk_widget_destroy (GTK_WIDGET (window));  }  enum  { -  COLUMN_NAME, -  COLUMN_CHARSET, -  COLUMN_DATA, -  N_COLUMNS +    COLUMN_NAME, +    COLUMN_CHARSET, +    COLUMN_DATA, +    N_COLUMNS  };  static void  selection_changed_cb (GtkTreeSelection *selection,                        EncodingDialogData *data)  { -  GtkWidget *button; -  gboolean have_selection; - -  if (selection == data->available_selection) -    button = data->add_button; -  else if (selection == data->active_selection) -    button = data->remove_button; -  else -    g_assert_not_reached (); - -  have_selection = gtk_tree_selection_get_selected (selection, NULL, NULL); -  gtk_widget_set_sensitive (button, have_selection); +	GtkWidget *button; +	gboolean have_selection; + +	if (selection == data->available_selection) +		button = data->add_button; +	else if (selection == data->active_selection) +		button = data->remove_button; +	else +		g_assert_not_reached (); + +	have_selection = gtk_tree_selection_get_selected (selection, NULL, NULL); +	gtk_widget_set_sensitive (button, have_selection);  }  static void  button_clicked_cb (GtkWidget *button,                     EncodingDialogData *data)  { -  GtkTreeSelection *selection; -  GtkTreeModel *model; -  GtkTreeIter filter_iter, iter; -  TerminalEncoding *encoding; - -  if (button == data->add_button) -    selection = data->available_selection; -  else if (button == data->remove_button) -    selection = data->active_selection; -  else -    g_assert_not_reached (); - -  if (!gtk_tree_selection_get_selected (selection, &model, &filter_iter)) -    return; - -  gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model), -                                                    &iter, -                                                    &filter_iter); - -  model = GTK_TREE_MODEL (data->base_store); -  gtk_tree_model_get (model, &iter, COLUMN_DATA, &encoding, -1); -  g_assert (encoding != NULL); - -  if (button == data->add_button) -    encoding->is_active = TRUE; -  else if (button == data->remove_button) -    encoding->is_active = FALSE; -  else -    g_assert_not_reached (); - -  terminal_encoding_unref (encoding); - -  /* We don't need to emit row-changed here, since updating the mateconf pref -   * will update the models. -   */ -  update_active_encodings_mateconf (); +	GtkTreeSelection *selection; +	GtkTreeModel *model; +	GtkTreeIter filter_iter, iter; +	TerminalEncoding *encoding; + +	if (button == data->add_button) +		selection = data->available_selection; +	else if (button == data->remove_button) +		selection = data->active_selection; +	else +		g_assert_not_reached (); + +	if (!gtk_tree_selection_get_selected (selection, &model, &filter_iter)) +		return; + +	gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model), +	        &iter, +	        &filter_iter); + +	model = GTK_TREE_MODEL (data->base_store); +	gtk_tree_model_get (model, &iter, COLUMN_DATA, &encoding, -1); +	g_assert (encoding != NULL); + +	if (button == data->add_button) +		encoding->is_active = TRUE; +	else if (button == data->remove_button) +		encoding->is_active = FALSE; +	else +		g_assert_not_reached (); + +	terminal_encoding_unref (encoding); + +	/* We don't need to emit row-changed here, since updating the mateconf pref +	 * will update the models. +	 */ +	update_active_encodings_mateconf ();  }  static void @@ -392,16 +396,16 @@ liststore_insert_encoding (gpointer key,                             TerminalEncoding *encoding,                             GtkListStore *store)  { -  GtkTreeIter iter; +	GtkTreeIter iter; -  if (!terminal_encoding_is_valid (encoding)) -    return; +	if (!terminal_encoding_is_valid (encoding)) +		return; -  gtk_list_store_insert_with_values (store, &iter, -1, -                                     COLUMN_CHARSET, terminal_encoding_get_charset (encoding), -                                     COLUMN_NAME, encoding->name, -                                     COLUMN_DATA, encoding, -                                     -1); +	gtk_list_store_insert_with_values (store, &iter, -1, +	                                   COLUMN_CHARSET, terminal_encoding_get_charset (encoding), +	                                   COLUMN_NAME, encoding->name, +	                                   COLUMN_DATA, encoding, +	                                   -1);  }  static gboolean @@ -409,206 +413,206 @@ filter_active_encodings (GtkTreeModel *child_model,                           GtkTreeIter *child_iter,                           gpointer data)  { -  TerminalEncoding *encoding; -  gboolean active = GPOINTER_TO_UINT (data); -  gboolean visible; +	TerminalEncoding *encoding; +	gboolean active = GPOINTER_TO_UINT (data); +	gboolean visible; -  gtk_tree_model_get (child_model, child_iter, COLUMN_DATA, &encoding, -1); -  visible = active ? encoding->is_active : !encoding->is_active; -  terminal_encoding_unref (encoding); +	gtk_tree_model_get (child_model, child_iter, COLUMN_DATA, &encoding, -1); +	visible = active ? encoding->is_active : !encoding->is_active; +	terminal_encoding_unref (encoding); -  return visible; +	return visible;  }  static GtkTreeModel *  encodings_create_treemodel (GtkListStore *base_store,                              gboolean active)  { -  GtkTreeModel *model; +	GtkTreeModel *model; -  model = gtk_tree_model_filter_new (GTK_TREE_MODEL (base_store), NULL); -  gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (model), -                                          filter_active_encodings, -                                          GUINT_TO_POINTER (active), NULL); +	model = gtk_tree_model_filter_new (GTK_TREE_MODEL (base_store), NULL); +	gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (model), +	                                        filter_active_encodings, +	                                        GUINT_TO_POINTER (active), NULL); -  return model; +	return model;  }  static void  encodings_list_changed_cb (TerminalApp *app,                             EncodingDialogData *data)  { -  gtk_list_store_clear (data->base_store); +	gtk_list_store_clear (data->base_store); -  g_hash_table_foreach (terminal_app_get_encodings (app), (GHFunc) liststore_insert_encoding, data->base_store); +	g_hash_table_foreach (terminal_app_get_encodings (app), (GHFunc) liststore_insert_encoding, data->base_store);  }  static void  encoding_dialog_data_free (EncodingDialogData *data)  { -  g_signal_handlers_disconnect_by_func (terminal_app_get (), -                                        G_CALLBACK (encodings_list_changed_cb), -                                        data); +	g_signal_handlers_disconnect_by_func (terminal_app_get (), +	                                      G_CALLBACK (encodings_list_changed_cb), +	                                      data); -  g_free (data); +	g_free (data);  }  void  terminal_encoding_dialog_show (GtkWindow *transient_parent)  { -  TerminalApp *app; -  GtkCellRenderer *cell_renderer; -  GtkTreeViewColumn *column; -  GtkTreeModel *model; -  EncodingDialogData *data; - -  if (encoding_dialog) -    { -      gtk_window_set_transient_for (GTK_WINDOW (encoding_dialog), transient_parent); -      gtk_window_present (GTK_WINDOW (encoding_dialog)); -      return; -    } - -  data = g_new (EncodingDialogData, 1); - -  if (!terminal_util_load_builder_file ("encodings-dialog.ui", -                                        "encodings-dialog", &data->dialog, -                                        "add-button", &data->add_button, -                                        "remove-button", &data->remove_button, -                                        "available-treeview", &data->available_tree_view, -                                        "displayed-treeview", &data->active_tree_view, -                                        NULL)) -    { -      g_free (data); -      return; -    } - -  g_object_set_data_full (G_OBJECT (data->dialog), "GT::Data", data, (GDestroyNotify) encoding_dialog_data_free); - -  gtk_window_set_transient_for (GTK_WINDOW (data->dialog), transient_parent); -  gtk_window_set_role (GTK_WINDOW (data->dialog), "mate-terminal-encodings"); -  g_signal_connect (data->dialog, "response", -                    G_CALLBACK (response_callback), data); - -  /* buttons */ -  g_signal_connect (data->add_button, "clicked", -                    G_CALLBACK (button_clicked_cb), data); - -  g_signal_connect (data->remove_button, "clicked", -                    G_CALLBACK (button_clicked_cb), data); -   -  /* Tree view of available encodings */ -  /* Column 1 */ -  cell_renderer = gtk_cell_renderer_text_new (); -  column = gtk_tree_view_column_new_with_attributes (_("_Description"), -						     cell_renderer, -						     "text", COLUMN_NAME, -						     NULL); -  gtk_tree_view_append_column (data->available_tree_view, column); -  gtk_tree_view_column_set_sort_column_id (column, COLUMN_NAME); -   -  /* Column 2 */ -  cell_renderer = gtk_cell_renderer_text_new (); -  column = gtk_tree_view_column_new_with_attributes (_("_Encoding"), -						     cell_renderer, -						     "text", COLUMN_CHARSET, -						     NULL); -  gtk_tree_view_append_column (data->available_tree_view, column); -  gtk_tree_view_column_set_sort_column_id (column, COLUMN_CHARSET);   - -  data->available_selection = gtk_tree_view_get_selection (data->available_tree_view); -  gtk_tree_selection_set_mode (data->available_selection, GTK_SELECTION_BROWSE); - -  g_signal_connect (data->available_selection, "changed", -                    G_CALLBACK (selection_changed_cb), data); - -  /* Tree view of selected encodings */ -  /* Column 1 */ -  cell_renderer = gtk_cell_renderer_text_new (); -  column = gtk_tree_view_column_new_with_attributes (_("_Description"), -						     cell_renderer, -						     "text", COLUMN_NAME, -						     NULL); -  gtk_tree_view_append_column (data->active_tree_view, column); -  gtk_tree_view_column_set_sort_column_id (column, COLUMN_NAME); -   -  /* Column 2 */ -  cell_renderer = gtk_cell_renderer_text_new (); -  column = gtk_tree_view_column_new_with_attributes (_("_Encoding"), -						     cell_renderer, -						     "text", COLUMN_CHARSET, -						     NULL); -  gtk_tree_view_append_column (data->active_tree_view, column); -  gtk_tree_view_column_set_sort_column_id (column, COLUMN_CHARSET);   - -  /* Add the data */ - -  data->active_selection = gtk_tree_view_get_selection (data->active_tree_view); -  gtk_tree_selection_set_mode (data->active_selection, GTK_SELECTION_BROWSE); - -  g_signal_connect (data->active_selection, "changed", -                    G_CALLBACK (selection_changed_cb), data); - -  data->base_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, TERMINAL_TYPE_ENCODING); - -  app = terminal_app_get (); -  encodings_list_changed_cb (app, data); -  g_signal_connect (app, "encoding-list-changed", -                    G_CALLBACK (encodings_list_changed_cb), data); - -  /* Now turn on sorting */ -  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (data->base_store), -                                        COLUMN_NAME, -                                        GTK_SORT_ASCENDING); -   -  model = encodings_create_treemodel (data->base_store, FALSE); -  gtk_tree_view_set_model (data->available_tree_view, model); -  g_object_unref (model); - -  model = encodings_create_treemodel (data->base_store, TRUE); -  gtk_tree_view_set_model (data->active_tree_view, model); -  g_object_unref (model); - -  g_object_unref (data->base_store); - -  gtk_window_present (GTK_WINDOW (data->dialog)); - -  encoding_dialog = data->dialog; -  g_signal_connect (data->dialog, "destroy", -                    G_CALLBACK (gtk_widget_destroyed), &encoding_dialog); +	TerminalApp *app; +	GtkCellRenderer *cell_renderer; +	GtkTreeViewColumn *column; +	GtkTreeModel *model; +	EncodingDialogData *data; + +	if (encoding_dialog) +	{ +		gtk_window_set_transient_for (GTK_WINDOW (encoding_dialog), transient_parent); +		gtk_window_present (GTK_WINDOW (encoding_dialog)); +		return; +	} + +	data = g_new (EncodingDialogData, 1); + +	if (!terminal_util_load_builder_file ("encodings-dialog.ui", +	                                      "encodings-dialog", &data->dialog, +	                                      "add-button", &data->add_button, +	                                      "remove-button", &data->remove_button, +	                                      "available-treeview", &data->available_tree_view, +	                                      "displayed-treeview", &data->active_tree_view, +	                                      NULL)) +	{ +		g_free (data); +		return; +	} + +	g_object_set_data_full (G_OBJECT (data->dialog), "GT::Data", data, (GDestroyNotify) encoding_dialog_data_free); + +	gtk_window_set_transient_for (GTK_WINDOW (data->dialog), transient_parent); +	gtk_window_set_role (GTK_WINDOW (data->dialog), "mate-terminal-encodings"); +	g_signal_connect (data->dialog, "response", +	                  G_CALLBACK (response_callback), data); + +	/* buttons */ +	g_signal_connect (data->add_button, "clicked", +	                  G_CALLBACK (button_clicked_cb), data); + +	g_signal_connect (data->remove_button, "clicked", +	                  G_CALLBACK (button_clicked_cb), data); + +	/* Tree view of available encodings */ +	/* Column 1 */ +	cell_renderer = gtk_cell_renderer_text_new (); +	column = gtk_tree_view_column_new_with_attributes (_("_Description"), +	         cell_renderer, +	         "text", COLUMN_NAME, +	         NULL); +	gtk_tree_view_append_column (data->available_tree_view, column); +	gtk_tree_view_column_set_sort_column_id (column, COLUMN_NAME); + +	/* Column 2 */ +	cell_renderer = gtk_cell_renderer_text_new (); +	column = gtk_tree_view_column_new_with_attributes (_("_Encoding"), +	         cell_renderer, +	         "text", COLUMN_CHARSET, +	         NULL); +	gtk_tree_view_append_column (data->available_tree_view, column); +	gtk_tree_view_column_set_sort_column_id (column, COLUMN_CHARSET); + +	data->available_selection = gtk_tree_view_get_selection (data->available_tree_view); +	gtk_tree_selection_set_mode (data->available_selection, GTK_SELECTION_BROWSE); + +	g_signal_connect (data->available_selection, "changed", +	                  G_CALLBACK (selection_changed_cb), data); + +	/* Tree view of selected encodings */ +	/* Column 1 */ +	cell_renderer = gtk_cell_renderer_text_new (); +	column = gtk_tree_view_column_new_with_attributes (_("_Description"), +	         cell_renderer, +	         "text", COLUMN_NAME, +	         NULL); +	gtk_tree_view_append_column (data->active_tree_view, column); +	gtk_tree_view_column_set_sort_column_id (column, COLUMN_NAME); + +	/* Column 2 */ +	cell_renderer = gtk_cell_renderer_text_new (); +	column = gtk_tree_view_column_new_with_attributes (_("_Encoding"), +	         cell_renderer, +	         "text", COLUMN_CHARSET, +	         NULL); +	gtk_tree_view_append_column (data->active_tree_view, column); +	gtk_tree_view_column_set_sort_column_id (column, COLUMN_CHARSET); + +	/* Add the data */ + +	data->active_selection = gtk_tree_view_get_selection (data->active_tree_view); +	gtk_tree_selection_set_mode (data->active_selection, GTK_SELECTION_BROWSE); + +	g_signal_connect (data->active_selection, "changed", +	                  G_CALLBACK (selection_changed_cb), data); + +	data->base_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, TERMINAL_TYPE_ENCODING); + +	app = terminal_app_get (); +	encodings_list_changed_cb (app, data); +	g_signal_connect (app, "encoding-list-changed", +	                  G_CALLBACK (encodings_list_changed_cb), data); + +	/* Now turn on sorting */ +	gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (data->base_store), +	                                      COLUMN_NAME, +	                                      GTK_SORT_ASCENDING); + +	model = encodings_create_treemodel (data->base_store, FALSE); +	gtk_tree_view_set_model (data->available_tree_view, model); +	g_object_unref (model); + +	model = encodings_create_treemodel (data->base_store, TRUE); +	gtk_tree_view_set_model (data->active_tree_view, model); +	g_object_unref (model); + +	g_object_unref (data->base_store); + +	gtk_window_present (GTK_WINDOW (data->dialog)); + +	encoding_dialog = data->dialog; +	g_signal_connect (data->dialog, "destroy", +	                  G_CALLBACK (gtk_widget_destroyed), &encoding_dialog);  }  GHashTable *  terminal_encodings_get_builtins (void)  { -  GHashTable *encodings_hashtable; -  guint i; -  TerminalEncoding *encoding; - -  encodings_hashtable = g_hash_table_new_full (g_str_hash, g_str_equal, -                                               NULL, -                                               (GDestroyNotify) terminal_encoding_unref); - - -  /* Placeholder entry for the current locale's charset */ -  encoding = terminal_encoding_new ("current", -                                    _("Current Locale"), -                                    FALSE, -                                    TRUE); -  g_hash_table_insert (encodings_hashtable, -                       (gpointer) terminal_encoding_get_id (encoding), -                       encoding); - -  for (i = 0; i < G_N_ELEMENTS (encodings); ++i) -    { -      encoding = terminal_encoding_new (encodings[i].charset, -                                        _(encodings[i].name), -                                        FALSE, -                                        FALSE); -      g_hash_table_insert (encodings_hashtable, -                           (gpointer) terminal_encoding_get_id (encoding), -                           encoding); -    } - -  return encodings_hashtable; +	GHashTable *encodings_hashtable; +	guint i; +	TerminalEncoding *encoding; + +	encodings_hashtable = g_hash_table_new_full (g_str_hash, g_str_equal, +	                      NULL, +	                      (GDestroyNotify) terminal_encoding_unref); + + +	/* Placeholder entry for the current locale's charset */ +	encoding = terminal_encoding_new ("current", +	                                  _("Current Locale"), +	                                  FALSE, +	                                  TRUE); +	g_hash_table_insert (encodings_hashtable, +	                     (gpointer) terminal_encoding_get_id (encoding), +	                     encoding); + +	for (i = 0; i < G_N_ELEMENTS (encodings); ++i) +	{ +		encoding = terminal_encoding_new (encodings[i].charset, +		                                  _(encodings[i].name), +		                                  FALSE, +		                                  FALSE); +		g_hash_table_insert (encodings_hashtable, +		                     (gpointer) terminal_encoding_get_id (encoding), +		                     encoding); +	} + +	return encodings_hashtable;  } diff --git a/src/terminal-encoding.h b/src/terminal-encoding.h index ddfe9ed..529c1e1 100644 --- a/src/terminal-encoding.h +++ b/src/terminal-encoding.h @@ -28,21 +28,21 @@  typedef struct  { -  int   refcount; -  char *id; -  char *name; -  guint valid            : 1; -  guint validity_checked : 1; -  guint is_custom        : 1; -  guint is_active        : 1; +	int   refcount; +	char *id; +	char *name; +	guint valid            : 1; +	guint validity_checked : 1; +	guint is_custom        : 1; +	guint is_active        : 1;  } TerminalEncoding;  GType terminal_encoding_get_type (void);  TerminalEncoding *terminal_encoding_new (const char *charset, -                                         const char *display_name, -                                         gboolean is_custom, -                                         gboolean force_valid); +        const char *display_name, +        gboolean is_custom, +        gboolean force_valid);  TerminalEncoding *terminal_encoding_ref (TerminalEncoding *encoding); diff --git a/src/terminal-info-bar.c b/src/terminal-info-bar.c index 57c132b..edf77db 100644 --- a/src/terminal-info-bar.c +++ b/src/terminal-info-bar.c @@ -26,7 +26,7 @@  struct _TerminalInfoBarPrivate  { -  GtkWidget *content_box; +	GtkWidget *content_box;  };  G_DEFINE_TYPE (TerminalInfoBar, terminal_info_bar, GTK_TYPE_INFO_BAR) @@ -36,22 +36,22 @@ G_DEFINE_TYPE (TerminalInfoBar, terminal_info_bar, GTK_TYPE_INFO_BAR)  static void  terminal_info_bar_init (TerminalInfoBar *bar)  { -  GtkInfoBar *info_bar = GTK_INFO_BAR (bar); -  TerminalInfoBarPrivate *priv; +	GtkInfoBar *info_bar = GTK_INFO_BAR (bar); +	TerminalInfoBarPrivate *priv; -  priv = bar->priv = TERMINAL_INFO_BAR_GET_PRIVATE (bar); +	priv = bar->priv = TERMINAL_INFO_BAR_GET_PRIVATE (bar); -  priv->content_box = gtk_vbox_new (FALSE, 6); -  gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (info_bar)), -                      priv->content_box, TRUE, TRUE, 0); +	priv->content_box = gtk_vbox_new (FALSE, 6); +	gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (info_bar)), +	                    priv->content_box, TRUE, TRUE, 0);  }  static void  terminal_info_bar_class_init (TerminalInfoBarClass *klass)  { -  GObjectClass *gobject_class = G_OBJECT_CLASS (klass); +	GObjectClass *gobject_class = G_OBJECT_CLASS (klass); -  g_type_class_add_private (gobject_class, sizeof (TerminalInfoBarPrivate)); +	g_type_class_add_private (gobject_class, sizeof (TerminalInfoBarPrivate));  }  /* public API */ @@ -67,26 +67,27 @@ terminal_info_bar_new (GtkMessageType type,                         const char *first_button_text,                         ...)  { -  GtkWidget *info_bar; -  va_list args; +	GtkWidget *info_bar; +	va_list args; -  info_bar = g_object_new (TERMINAL_TYPE_INFO_BAR, -                           "message-type", type, -                           NULL); +	info_bar = g_object_new (TERMINAL_TYPE_INFO_BAR, +	                         "message-type", type, +	                         NULL); -  va_start (args, first_button_text); -  while (first_button_text != NULL) { -    int response_id; +	va_start (args, first_button_text); +	while (first_button_text != NULL) +	{ +		int response_id; -    response_id = va_arg (args, int); -    gtk_info_bar_add_button (GTK_INFO_BAR (info_bar), -                             first_button_text, response_id); +		response_id = va_arg (args, int); +		gtk_info_bar_add_button (GTK_INFO_BAR (info_bar), +		                         first_button_text, response_id); -    first_button_text = va_arg (args, const char *); -  } -  va_end (args); +		first_button_text = va_arg (args, const char *); +	} +	va_end (args); -  return info_bar; +	return info_bar;  }  void @@ -94,26 +95,26 @@ terminal_info_bar_format_text (TerminalInfoBar *bar,                                 const char *format,                                 ...)  { -  TerminalInfoBarPrivate *priv; -  char *text; -  GtkWidget *label; -  va_list args; +	TerminalInfoBarPrivate *priv; +	char *text; +	GtkWidget *label; +	va_list args; -  g_return_if_fail (TERMINAL_IS_INFO_BAR (bar)); +	g_return_if_fail (TERMINAL_IS_INFO_BAR (bar)); -  priv = bar->priv; +	priv = bar->priv; -  va_start (args, format); -  text = g_strdup_vprintf (format, args); -  va_end (args); +	va_start (args, format); +	text = g_strdup_vprintf (format, args); +	va_end (args); -  label = gtk_label_new (text); -  g_free (text); -   -  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); -  gtk_label_set_selectable (GTK_LABEL (label), TRUE); -  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0); +	label = gtk_label_new (text); +	g_free (text); -  gtk_box_pack_start (GTK_BOX (priv->content_box), label, FALSE, FALSE, 0); -  gtk_widget_show_all (priv->content_box); +	gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); +	gtk_label_set_selectable (GTK_LABEL (label), TRUE); +	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0); + +	gtk_box_pack_start (GTK_BOX (priv->content_box), label, FALSE, FALSE, 0); +	gtk_widget_show_all (priv->content_box);  } diff --git a/src/terminal-info-bar.h b/src/terminal-info-bar.h index 09d2794..6a53c8b 100644 --- a/src/terminal-info-bar.h +++ b/src/terminal-info-bar.h @@ -36,15 +36,15 @@ typedef struct _TerminalInfoBarPrivate TerminalInfoBarPrivate;  struct _TerminalInfoBar  { -  GtkInfoBar parent_instance; +	GtkInfoBar parent_instance; -  /*< private >*/ -  TerminalInfoBarPrivate *priv; +	/*< private >*/ +	TerminalInfoBarPrivate *priv;  };  struct _TerminalInfoBarClass  { -  GtkInfoBarClass parent_class; +	GtkInfoBarClass parent_class;  };  GType terminal_info_bar_get_type (void); diff --git a/src/terminal-options.c b/src/terminal-options.c index 82a0d7c..71a4cd8 100644 --- a/src/terminal-options.c +++ b/src/terminal-options.c @@ -39,114 +39,114 @@ static InitialTab*  initial_tab_new (const char *profile,                   gboolean    is_id)  { -  InitialTab *it; +	InitialTab *it; -  it = g_slice_new (InitialTab); +	it = g_slice_new (InitialTab); -  it->profile = g_strdup (profile); -  it->profile_is_id = is_id; -  it->exec_argv = NULL; -  it->title = NULL; -  it->working_dir = NULL; -  it->zoom = 1.0; -  it->zoom_set = FALSE; -  it->active = FALSE; +	it->profile = g_strdup (profile); +	it->profile_is_id = is_id; +	it->exec_argv = NULL; +	it->title = NULL; +	it->working_dir = NULL; +	it->zoom = 1.0; +	it->zoom_set = FALSE; +	it->active = FALSE; -  return it; +	return it;  }  static void  initial_tab_free (InitialTab *it)  { -  g_free (it->profile); -  g_strfreev (it->exec_argv); -  g_free (it->title); -  g_free (it->working_dir); -  g_slice_free (InitialTab, it); +	g_free (it->profile); +	g_strfreev (it->exec_argv); +	g_free (it->title); +	g_free (it->working_dir); +	g_slice_free (InitialTab, it);  }  static InitialWindow*  initial_window_new (guint source_tag)  { -  InitialWindow *iw; +	InitialWindow *iw; -  iw = g_slice_new0 (InitialWindow); -  iw->source_tag = source_tag; +	iw = g_slice_new0 (InitialWindow); +	iw->source_tag = source_tag; -  return iw; +	return iw;  }  static void  initial_window_free (InitialWindow *iw)  { -  g_list_foreach (iw->tabs, (GFunc) initial_tab_free, NULL); -  g_list_free (iw->tabs); -  g_free (iw->geometry); -  g_free (iw->role); -  g_slice_free (InitialWindow, iw); +	g_list_foreach (iw->tabs, (GFunc) initial_tab_free, NULL); +	g_list_free (iw->tabs); +	g_free (iw->geometry); +	g_free (iw->role); +	g_slice_free (InitialWindow, iw);  }  static void  apply_defaults (TerminalOptions *options,                  InitialWindow        *iw)  { -  if (options->default_role) -    { -      iw->role = options->default_role; -      options->default_role = NULL; -    } +	if (options->default_role) +	{ +		iw->role = options->default_role; +		options->default_role = NULL; +	} -  if (iw->geometry == NULL) -    iw->geometry = g_strdup (options->default_geometry); +	if (iw->geometry == NULL) +		iw->geometry = g_strdup (options->default_geometry); -  if (options->default_window_menubar_forced) -    { -      iw->force_menubar_state = TRUE; -      iw->menubar_state = options->default_window_menubar_state; +	if (options->default_window_menubar_forced) +	{ +		iw->force_menubar_state = TRUE; +		iw->menubar_state = options->default_window_menubar_state; -      options->default_window_menubar_forced = FALSE; -    } +		options->default_window_menubar_forced = FALSE; +	} -  iw->start_fullscreen |= options->default_fullscreen; -  iw->start_maximized |= options->default_maximize; +	iw->start_fullscreen |= options->default_fullscreen; +	iw->start_maximized |= options->default_maximize;  }  static InitialWindow*  ensure_top_window (TerminalOptions *options)  { -  InitialWindow *iw; +	InitialWindow *iw; -  if (options->initial_windows == NULL) -    { -      iw = initial_window_new (0); -      iw->tabs = g_list_append (NULL, initial_tab_new (NULL, FALSE)); -      apply_defaults (options, iw); +	if (options->initial_windows == NULL) +	{ +		iw = initial_window_new (0); +		iw->tabs = g_list_append (NULL, initial_tab_new (NULL, FALSE)); +		apply_defaults (options, iw); -      options->initial_windows = g_list_append (options->initial_windows, iw); -    } -  else -    { -      iw = g_list_last (options->initial_windows)->data; -    } +		options->initial_windows = g_list_append (options->initial_windows, iw); +	} +	else +	{ +		iw = g_list_last (options->initial_windows)->data; +	} -  g_assert (iw->tabs); +	g_assert (iw->tabs); -  return iw; +	return iw;  }  static InitialTab*  ensure_top_tab (TerminalOptions *options)  { -  InitialWindow *iw; -  InitialTab *it; +	InitialWindow *iw; +	InitialTab *it; -  iw = ensure_top_window (options); +	iw = ensure_top_window (options); -  g_assert (iw->tabs); +	g_assert (iw->tabs); -  it = g_list_last (iw->tabs)->data; +	it = g_list_last (iw->tabs)->data; -  return it; +	return it;  }  static InitialWindow* @@ -154,15 +154,15 @@ add_new_window (TerminalOptions *options,                  const char           *profile,                  gboolean              is_id)  { -  InitialWindow *iw; +	InitialWindow *iw; -  iw = initial_window_new (0); -  iw->tabs = g_list_prepend (NULL, initial_tab_new (profile, is_id)); -  apply_defaults (options, iw); +	iw = initial_window_new (0); +	iw->tabs = g_list_prepend (NULL, initial_tab_new (profile, is_id)); +	apply_defaults (options, iw); -  options->initial_windows = g_list_append (options->initial_windows, iw); +	options->initial_windows = g_list_append (options->initial_windows, iw); -  return iw; +	return iw;  }  /* handle deprecated command line options */ @@ -172,10 +172,10 @@ unsupported_option_callback (const gchar *option_name,                               gpointer     data,                               GError     **error)  { -  g_printerr (_("Option \"%s\" is no longer supported in this version of mate-terminal;" -               " you might want to create a profile with the desired setting, and use" -               " the new '--profile' option\n"), option_name); -  return TRUE; /* we do not want to bail out here but continue */ +	g_printerr (_("Option \"%s\" is no longer supported in this version of mate-terminal;" +	              " you might want to create a profile with the desired setting, and use" +	              " the new '--profile' option\n"), option_name); +	return TRUE; /* we do not want to bail out here but continue */  } @@ -185,9 +185,9 @@ option_version_cb (const gchar *option_name,                     gpointer     data,                     GError     **error)  { -  g_print ("%s %s\n", _("MATE Terminal"), VERSION); +	g_print ("%s %s\n", _("MATE Terminal"), VERSION); -  exit (EXIT_SUCCESS); +	exit (EXIT_SUCCESS);  }  static gboolean @@ -196,36 +196,36 @@ option_command_callback (const gchar *option_name,                           gpointer     data,                           GError     **error)  { -  TerminalOptions *options = data; -  GError *err = NULL; -  char  **exec_argv; - -  if (!g_shell_parse_argv (value, NULL, &exec_argv, &err)) -    { -      g_set_error(error, -                  G_OPTION_ERROR, -                  G_OPTION_ERROR_BAD_VALUE, -                  _("Argument to \"%s\" is not a valid command: %s"), -                   "--command/-e", -                  err->message); -      g_error_free (err); -      return FALSE; -    } - -  if (options->initial_windows) -    { -      InitialTab *it = ensure_top_tab (options); - -      g_strfreev (it->exec_argv); -      it->exec_argv = exec_argv; -    } -  else -    { -      g_strfreev (options->exec_argv); -      options->exec_argv = exec_argv; -    } - -  return TRUE; +	TerminalOptions *options = data; +	GError *err = NULL; +	char  **exec_argv; + +	if (!g_shell_parse_argv (value, NULL, &exec_argv, &err)) +	{ +		g_set_error(error, +		            G_OPTION_ERROR, +		            G_OPTION_ERROR_BAD_VALUE, +		            _("Argument to \"%s\" is not a valid command: %s"), +		            "--command/-e", +		            err->message); +		g_error_free (err); +		return FALSE; +	} + +	if (options->initial_windows) +	{ +		InitialTab *it = ensure_top_tab (options); + +		g_strfreev (it->exec_argv); +		it->exec_argv = exec_argv; +	} +	else +	{ +		g_strfreev (options->exec_argv); +		options->exec_argv = exec_argv; +	} + +	return TRUE;  }  static gboolean @@ -234,24 +234,24 @@ option_profile_cb (const gchar *option_name,                     gpointer     data,                     GError     **error)  { -  TerminalOptions *options = data; - -  if (options->initial_windows) -    { -      InitialTab *it = ensure_top_tab (options); - -      g_free (it->profile); -      it->profile = g_strdup (value); -      it->profile_is_id = FALSE; -    } -  else -    { -      g_free (options->default_profile); -      options->default_profile = g_strdup (value); -      options->default_profile_is_id = FALSE; -    } - -  return TRUE; +	TerminalOptions *options = data; + +	if (options->initial_windows) +	{ +		InitialTab *it = ensure_top_tab (options); + +		g_free (it->profile); +		it->profile = g_strdup (value); +		it->profile_is_id = FALSE; +	} +	else +	{ +		g_free (options->default_profile); +		options->default_profile = g_strdup (value); +		options->default_profile_is_id = FALSE; +	} + +	return TRUE;  }  static gboolean @@ -260,24 +260,24 @@ option_profile_id_cb (const gchar *option_name,                        gpointer     data,                        GError     **error)  { -  TerminalOptions *options = data; - -  if (options->initial_windows) -    { -      InitialTab *it = ensure_top_tab (options); - -      g_free (it->profile); -      it->profile = g_strdup (value); -      it->profile_is_id = TRUE; -    } -  else -    { -      g_free (options->default_profile); -      options->default_profile = g_strdup (value); -      options->default_profile_is_id = TRUE; -    } - -  return TRUE; +	TerminalOptions *options = data; + +	if (options->initial_windows) +	{ +		InitialTab *it = ensure_top_tab (options); + +		g_free (it->profile); +		it->profile = g_strdup (value); +		it->profile_is_id = TRUE; +	} +	else +	{ +		g_free (options->default_profile); +		options->default_profile = g_strdup (value); +		options->default_profile_is_id = TRUE; +	} + +	return TRUE;  } @@ -287,14 +287,14 @@ option_window_callback (const gchar *option_name,                          gpointer     data,                          GError     **error)  { -  TerminalOptions *options = data; -  gboolean is_profile_id; +	TerminalOptions *options = data; +	gboolean is_profile_id; -  is_profile_id = g_str_has_suffix (option_name, "-with-profile-internal-id"); +	is_profile_id = g_str_has_suffix (option_name, "-with-profile-internal-id"); -  add_new_window (options, value, is_profile_id); +	add_new_window (options, value, is_profile_id); -  return TRUE; +	return TRUE;  }  static gboolean @@ -303,22 +303,22 @@ option_tab_callback (const gchar *option_name,                       gpointer     data,                       GError     **error)  { -  TerminalOptions *options = data; -  gboolean is_profile_id; +	TerminalOptions *options = data; +	gboolean is_profile_id; -  is_profile_id = g_str_has_suffix (option_name, "-with-profile-internal-id"); +	is_profile_id = g_str_has_suffix (option_name, "-with-profile-internal-id"); -  if (options->initial_windows) -    { -      InitialWindow *iw; +	if (options->initial_windows) +	{ +		InitialWindow *iw; -      iw = g_list_last (options->initial_windows)->data; -      iw->tabs = g_list_append (iw->tabs, initial_tab_new (value, is_profile_id)); -    } -  else -    add_new_window (options, value, is_profile_id); +		iw = g_list_last (options->initial_windows)->data; +		iw->tabs = g_list_append (iw->tabs, initial_tab_new (value, is_profile_id)); +	} +	else +		add_new_window (options, value, is_profile_id); -  return TRUE; +	return TRUE;  }  static gboolean @@ -327,24 +327,24 @@ option_role_callback (const gchar *option_name,                        gpointer     data,                        GError     **error)  { -  TerminalOptions *options = data; -  InitialWindow *iw; - -  if (options->initial_windows) -    { -      iw = g_list_last (options->initial_windows)->data; -      iw->role = g_strdup (value); -    } -  else if (!options->default_role) -    options->default_role = g_strdup (value); -  else -    { -      g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, -                   "%s", _("Two roles given for one window")); -      return FALSE; -    } - -  return TRUE; +	TerminalOptions *options = data; +	InitialWindow *iw; + +	if (options->initial_windows) +	{ +		iw = g_list_last (options->initial_windows)->data; +		iw->role = g_strdup (value); +	} +	else if (!options->default_role) +		options->default_role = g_strdup (value); +	else +	{ +		g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, +		             "%s", _("Two roles given for one window")); +		return FALSE; +	} + +	return TRUE;  }  static gboolean @@ -353,30 +353,30 @@ option_show_menubar_callback (const gchar *option_name,                                gpointer     data,                                GError     **error)  { -  TerminalOptions *options = data; -  InitialWindow *iw; - -  if (options->initial_windows) -    { -      iw = g_list_last (options->initial_windows)->data; -      if (iw->force_menubar_state && iw->menubar_state == TRUE) -        { -          g_printerr (_("\"%s\" option given twice for the same window\n"), -                        "--show-menubar"); - -          return TRUE; -        } - -      iw->force_menubar_state = TRUE; -      iw->menubar_state = TRUE; -    } -  else -    { -      options->default_window_menubar_forced = TRUE; -      options->default_window_menubar_state = TRUE; -    } - -  return TRUE; +	TerminalOptions *options = data; +	InitialWindow *iw; + +	if (options->initial_windows) +	{ +		iw = g_list_last (options->initial_windows)->data; +		if (iw->force_menubar_state && iw->menubar_state == TRUE) +		{ +			g_printerr (_("\"%s\" option given twice for the same window\n"), +			            "--show-menubar"); + +			return TRUE; +		} + +		iw->force_menubar_state = TRUE; +		iw->menubar_state = TRUE; +	} +	else +	{ +		options->default_window_menubar_forced = TRUE; +		options->default_window_menubar_state = TRUE; +	} + +	return TRUE;  }  static gboolean @@ -385,30 +385,30 @@ option_hide_menubar_callback (const gchar *option_name,                                gpointer     data,                                GError     **error)  { -  TerminalOptions *options = data; -  InitialWindow *iw; - -  if (options->initial_windows) -    { -      iw = g_list_last (options->initial_windows)->data; - -      if (iw->force_menubar_state && iw->menubar_state == FALSE) -        { -          g_printerr (_("\"%s\" option given twice for the same window\n"), -                        "--hide-menubar"); -          return TRUE; -        } - -      iw->force_menubar_state = TRUE; -      iw->menubar_state = FALSE; -    } -  else -    { -      options->default_window_menubar_forced = TRUE; -      options->default_window_menubar_state = FALSE; -    } - -  return TRUE; +	TerminalOptions *options = data; +	InitialWindow *iw; + +	if (options->initial_windows) +	{ +		iw = g_list_last (options->initial_windows)->data; + +		if (iw->force_menubar_state && iw->menubar_state == FALSE) +		{ +			g_printerr (_("\"%s\" option given twice for the same window\n"), +			            "--hide-menubar"); +			return TRUE; +		} + +		iw->force_menubar_state = TRUE; +		iw->menubar_state = FALSE; +	} +	else +	{ +		options->default_window_menubar_forced = TRUE; +		options->default_window_menubar_state = FALSE; +	} + +	return TRUE;  }  static gboolean @@ -417,18 +417,18 @@ option_maximize_callback (const gchar *option_name,                            gpointer     data,                            GError     **error)  { -  TerminalOptions *options = data; -  InitialWindow *iw; - -  if (options->initial_windows) -    { -      iw = g_list_last (options->initial_windows)->data; -      iw->start_maximized = TRUE; -    } -  else -    options->default_maximize = TRUE; - -  return TRUE; +	TerminalOptions *options = data; +	InitialWindow *iw; + +	if (options->initial_windows) +	{ +		iw = g_list_last (options->initial_windows)->data; +		iw->start_maximized = TRUE; +	} +	else +		options->default_maximize = TRUE; + +	return TRUE;  }  static gboolean @@ -437,19 +437,19 @@ option_fullscreen_callback (const gchar *option_name,                              gpointer     data,                              GError     **error)  { -  TerminalOptions *options = data; +	TerminalOptions *options = data; -  if (options->initial_windows) -    { -      InitialWindow *iw; +	if (options->initial_windows) +	{ +		InitialWindow *iw; -      iw = g_list_last (options->initial_windows)->data; -      iw->start_fullscreen = TRUE; -    } -  else -    options->default_fullscreen = TRUE; +		iw = g_list_last (options->initial_windows)->data; +		iw->start_fullscreen = TRUE; +	} +	else +		options->default_fullscreen = TRUE; -  return TRUE; +	return TRUE;  }  static gboolean @@ -458,19 +458,19 @@ option_geometry_callback (const gchar *option_name,                            gpointer     data,                            GError     **error)  { -  TerminalOptions *options = data; +	TerminalOptions *options = data; -  if (options->initial_windows) -    { -      InitialWindow *iw; +	if (options->initial_windows) +	{ +		InitialWindow *iw; -      iw = g_list_last (options->initial_windows)->data; -      iw->geometry = g_strdup (value); -    } -  else -    options->default_geometry = g_strdup (value); +		iw = g_list_last (options->initial_windows)->data; +		iw->geometry = g_strdup (value); +	} +	else +		options->default_geometry = g_strdup (value); -  return TRUE; +	return TRUE;  }  static gboolean @@ -479,11 +479,11 @@ option_disable_factory_callback (const gchar *option_name,                                   gpointer     data,                                   GError     **error)  { -  TerminalOptions *options = data; +	TerminalOptions *options = data; -  options->use_factory = FALSE; +	options->use_factory = FALSE; -  return TRUE; +	return TRUE;  }  static gboolean @@ -492,20 +492,20 @@ option_load_save_config_cb (const gchar *option_name,                              gpointer     data,                              GError     **error)  { -  TerminalOptions *options = data; +	TerminalOptions *options = data; -  if (options->config_file) -    { -      g_set_error_literal (error, TERMINAL_OPTION_ERROR, TERMINAL_OPTION_ERROR_EXCLUSIVE_OPTIONS, -                           "Options \"--load-config\" and \"--save-config\" are mutually exclusive"); -      return FALSE; -    } +	if (options->config_file) +	{ +		g_set_error_literal (error, TERMINAL_OPTION_ERROR, TERMINAL_OPTION_ERROR_EXCLUSIVE_OPTIONS, +		                     "Options \"--load-config\" and \"--save-config\" are mutually exclusive"); +		return FALSE; +	} -  options->config_file = terminal_util_resolve_relative_path (options->default_working_dir, value); -  options->load_config = strcmp (option_name, "--load-config") == 0; -  options->save_config = strcmp (option_name, "--save-config") == 0; +	options->config_file = terminal_util_resolve_relative_path (options->default_working_dir, value); +	options->load_config = strcmp (option_name, "--load-config") == 0; +	options->save_config = strcmp (option_name, "--save-config") == 0; -  return TRUE; +	return TRUE;  }  static gboolean @@ -514,22 +514,22 @@ option_title_callback (const gchar *option_name,                         gpointer     data,                         GError     **error)  { -  TerminalOptions *options = data; - -  if (options->initial_windows) -    { -      InitialTab *it = ensure_top_tab (options); - -      g_free (it->title); -      it->title = g_strdup (value); -    } -  else -    { -      g_free (options->default_title); -      options->default_title = g_strdup (value); -    } - -  return TRUE; +	TerminalOptions *options = data; + +	if (options->initial_windows) +	{ +		InitialTab *it = ensure_top_tab (options); + +		g_free (it->title); +		it->title = g_strdup (value); +	} +	else +	{ +		g_free (options->default_title); +		options->default_title = g_strdup (value); +	} + +	return TRUE;  }  static gboolean @@ -538,22 +538,22 @@ option_working_directory_callback (const gchar *option_name,                                     gpointer     data,                                     GError     **error)  { -  TerminalOptions *options = data; - -  if (options->initial_windows) -    { -      InitialTab *it = ensure_top_tab (options); - -      g_free (it->working_dir); -      it->working_dir = g_strdup (value); -    } -  else -    { -      g_free (options->default_working_dir); -      options->default_working_dir = g_strdup (value); -    } - -  return TRUE; +	TerminalOptions *options = data; + +	if (options->initial_windows) +	{ +		InitialTab *it = ensure_top_tab (options); + +		g_free (it->working_dir); +		it->working_dir = g_strdup (value); +	} +	else +	{ +		g_free (options->default_working_dir); +		options->default_working_dir = g_strdup (value); +	} + +	return TRUE;  }  static gboolean @@ -562,13 +562,13 @@ option_active_callback (const gchar *option_name,                          gpointer     data,                          GError     **error)  { -  TerminalOptions *options = data; -  InitialTab *it; +	TerminalOptions *options = data; +	InitialTab *it; -  it = ensure_top_tab (options); -  it->active = TRUE; +	it = ensure_top_tab (options); +	it->active = TRUE; -  return TRUE; +	return TRUE;  }  static gboolean @@ -577,53 +577,53 @@ option_zoom_callback (const gchar *option_name,                        gpointer     data,                        GError     **error)  { -  TerminalOptions *options = data; -  double zoom; -  char *end; - -  /* Try reading a locale-style double first, in case it was -    * typed by a person, then fall back to ascii_strtod (we -    * always save session in C locale format) -    */ -  end = NULL; -  errno = 0; -  zoom = g_strtod (value, &end); -  if (end == NULL || *end != '\0') -    { -      g_set_error (error, -                   G_OPTION_ERROR, -                   G_OPTION_ERROR_BAD_VALUE, -                   _("\"%s\" is not a valid zoom factor"), -                   value); -      return FALSE; -    } - -  if (zoom < (TERMINAL_SCALE_MINIMUM + 1e-6)) -    { -      g_printerr (_("Zoom factor \"%g\" is too small, using %g\n"), -                  zoom, -                  TERMINAL_SCALE_MINIMUM); -      zoom = TERMINAL_SCALE_MINIMUM; -    } - -  if (zoom > (TERMINAL_SCALE_MAXIMUM - 1e-6)) -    { -      g_printerr (_("Zoom factor \"%g\" is too large, using %g\n"), -                  zoom, -                  TERMINAL_SCALE_MAXIMUM); -      zoom = TERMINAL_SCALE_MAXIMUM; -    } - -  if (options->initial_windows) -    { -      InitialTab *it = ensure_top_tab (options); -      it->zoom = zoom; -      it->zoom_set = TRUE; -    } -  else -    options->zoom = zoom; - -  return TRUE; +	TerminalOptions *options = data; +	double zoom; +	char *end; + +	/* Try reading a locale-style double first, in case it was +	  * typed by a person, then fall back to ascii_strtod (we +	  * always save session in C locale format) +	  */ +	end = NULL; +	errno = 0; +	zoom = g_strtod (value, &end); +	if (end == NULL || *end != '\0') +	{ +		g_set_error (error, +		             G_OPTION_ERROR, +		             G_OPTION_ERROR_BAD_VALUE, +		             _("\"%s\" is not a valid zoom factor"), +		             value); +		return FALSE; +	} + +	if (zoom < (TERMINAL_SCALE_MINIMUM + 1e-6)) +	{ +		g_printerr (_("Zoom factor \"%g\" is too small, using %g\n"), +		            zoom, +		            TERMINAL_SCALE_MINIMUM); +		zoom = TERMINAL_SCALE_MINIMUM; +	} + +	if (zoom > (TERMINAL_SCALE_MAXIMUM - 1e-6)) +	{ +		g_printerr (_("Zoom factor \"%g\" is too large, using %g\n"), +		            zoom, +		            TERMINAL_SCALE_MAXIMUM); +		zoom = TERMINAL_SCALE_MAXIMUM; +	} + +	if (options->initial_windows) +	{ +		InitialTab *it = ensure_top_tab (options); +		it->zoom = zoom; +		it->zoom_set = TRUE; +	} +	else +		options->zoom = zoom; + +	return TRUE;  }  /* Evaluation of the arguments given to the command line options */ @@ -633,29 +633,29 @@ digest_options_callback (GOptionContext *context,                           gpointer      data,                           GError      **error)  { -  TerminalOptions *options = data; -  InitialTab    *it; - -  if (options->execute) -    { -      if (options->exec_argv == NULL) -        { -          g_set_error (error, -                       G_OPTION_ERROR, -                       G_OPTION_ERROR_BAD_VALUE, -                       _("Option \"%s\" requires specifying the command to run" -                         " on the rest of the command line"), -                       "--execute/-x"); -          return FALSE; -        } - -      /* Apply -x/--execute command only to the first tab */ -      it = ensure_top_tab (options); -      it->exec_argv = options->exec_argv; -      options->exec_argv = NULL; -    } - -  return TRUE; +	TerminalOptions *options = data; +	InitialTab    *it; + +	if (options->execute) +	{ +		if (options->exec_argv == NULL) +		{ +			g_set_error (error, +			             G_OPTION_ERROR, +			             G_OPTION_ERROR_BAD_VALUE, +			             _("Option \"%s\" requires specifying the command to run" +			               " on the rest of the command line"), +			             "--execute/-x"); +			return FALSE; +		} + +		/* Apply -x/--execute command only to the first tab */ +		it = ensure_top_tab (options); +		it->exec_argv = options->exec_argv; +		options->exec_argv = NULL; +	} + +	return TRUE;  }  /** @@ -690,90 +690,90 @@ terminal_options_parse (const char *working_directory,                          GError **error,                          ...)  { -  TerminalOptions *options; -  GOptionContext *context; -  GOptionGroup *extra_group; -  va_list va_args; -  gboolean retval; -  int i; -  char **argv = *argvp; - -  options = g_slice_new0 (TerminalOptions); - -  options->remote_arguments = remote_arguments; -  options->default_window_menubar_forced = FALSE; -  options->default_window_menubar_state = TRUE; -  options->default_fullscreen = FALSE; -  options->default_maximize = FALSE; -  options->execute = FALSE; -  options->use_factory = TRUE; - -  options->env = g_strdupv (env); -  options->startup_id = g_strdup (startup_id && startup_id[0] ? startup_id : NULL); -  options->display_name = g_strdup (display_name); -  options->initial_windows = NULL; -  options->default_role = NULL; -  options->default_geometry = NULL; -  options->default_title = NULL; -  options->zoom = 1.0; - -  options->screen_number = -1; -  options->default_working_dir = g_strdup (working_directory); - -  /* The old -x/--execute option is broken, so we need to pre-scan for it. */ -  /* We now also support passing the command after the -- switch. */ -  options->exec_argv = NULL; -  for (i = 1 ; i < *argcp; ++i) -    { -      gboolean is_execute; -      gboolean is_dashdash; -      int j, last; - -      is_execute = strcmp (argv[i], "-x") == 0 || strcmp (argv[i], "--execute") == 0; -      is_dashdash = strcmp (argv[i], "--") == 0; - -      if (!is_execute && !is_dashdash) -        continue; - -      options->execute = is_execute; - -      /* Skip the switch */ -      last = i; -      ++i; -      if (i == *argcp) -        break; /* we'll complain about this later for -x/--execute; it's fine for -- */ - -      /* Collect the args, and remove them from argv */ -      options->exec_argv = g_new0 (char*, *argcp - i + 1); -      for (j = 0; i < *argcp; ++i, ++j) -        options->exec_argv[j] = g_strdup (argv[i]); -      options->exec_argv[j] = NULL; - -      *argcp = last; -      break; -    } - -  context = get_goption_context (options); - -  g_option_context_set_ignore_unknown_options (context, ignore_unknown_options); - -  va_start (va_args, error); -  extra_group = va_arg (va_args, GOptionGroup*); -  while (extra_group != NULL) -    { -      g_option_context_add_group (context, extra_group); -      extra_group = va_arg (va_args, GOptionGroup*); -    } -  va_end (va_args); - -  retval = g_option_context_parse (context, argcp, argvp, error); -  g_option_context_free (context); - -  if (retval) -    return options; - -  terminal_options_free (options); -  return NULL; +	TerminalOptions *options; +	GOptionContext *context; +	GOptionGroup *extra_group; +	va_list va_args; +	gboolean retval; +	int i; +	char **argv = *argvp; + +	options = g_slice_new0 (TerminalOptions); + +	options->remote_arguments = remote_arguments; +	options->default_window_menubar_forced = FALSE; +	options->default_window_menubar_state = TRUE; +	options->default_fullscreen = FALSE; +	options->default_maximize = FALSE; +	options->execute = FALSE; +	options->use_factory = TRUE; + +	options->env = g_strdupv (env); +	options->startup_id = g_strdup (startup_id && startup_id[0] ? startup_id : NULL); +	options->display_name = g_strdup (display_name); +	options->initial_windows = NULL; +	options->default_role = NULL; +	options->default_geometry = NULL; +	options->default_title = NULL; +	options->zoom = 1.0; + +	options->screen_number = -1; +	options->default_working_dir = g_strdup (working_directory); + +	/* The old -x/--execute option is broken, so we need to pre-scan for it. */ +	/* We now also support passing the command after the -- switch. */ +	options->exec_argv = NULL; +	for (i = 1 ; i < *argcp; ++i) +	{ +		gboolean is_execute; +		gboolean is_dashdash; +		int j, last; + +		is_execute = strcmp (argv[i], "-x") == 0 || strcmp (argv[i], "--execute") == 0; +		is_dashdash = strcmp (argv[i], "--") == 0; + +		if (!is_execute && !is_dashdash) +			continue; + +		options->execute = is_execute; + +		/* Skip the switch */ +		last = i; +		++i; +		if (i == *argcp) +			break; /* we'll complain about this later for -x/--execute; it's fine for -- */ + +		/* Collect the args, and remove them from argv */ +		options->exec_argv = g_new0 (char*, *argcp - i + 1); +		for (j = 0; i < *argcp; ++i, ++j) +			options->exec_argv[j] = g_strdup (argv[i]); +		options->exec_argv[j] = NULL; + +		*argcp = last; +		break; +	} + +	context = get_goption_context (options); + +	g_option_context_set_ignore_unknown_options (context, ignore_unknown_options); + +	va_start (va_args, error); +	extra_group = va_arg (va_args, GOptionGroup*); +	while (extra_group != NULL) +	{ +		g_option_context_add_group (context, extra_group); +		extra_group = va_arg (va_args, GOptionGroup*); +	} +	va_end (va_args); + +	retval = g_option_context_parse (context, argcp, argvp, error); +	g_option_context_free (context); + +	if (retval) +		return options; + +	terminal_options_free (options); +	return NULL;  }  /** @@ -794,105 +794,105 @@ terminal_options_merge_config (TerminalOptions *options,                                 guint source_tag,                                 GError **error)  { -  int version, compat_version; -  char **groups; -  guint i; -  gboolean have_error = FALSE; -  GList *initial_windows = NULL; - -  if (!g_key_file_has_group (key_file, TERMINAL_CONFIG_GROUP)) -    { -      g_set_error_literal (error, TERMINAL_OPTION_ERROR, -                           TERMINAL_OPTION_ERROR_INVALID_CONFIG_FILE, -                           _("Not a valid terminal config file.")); -      return FALSE; -    } -   -  version = g_key_file_get_integer (key_file, TERMINAL_CONFIG_GROUP, TERMINAL_CONFIG_PROP_VERSION, NULL); -  compat_version = g_key_file_get_integer (key_file, TERMINAL_CONFIG_GROUP, TERMINAL_CONFIG_PROP_COMPAT_VERSION, NULL); - -  if (version <= 0 || -      compat_version <= 0 || -      compat_version > TERMINAL_CONFIG_COMPAT_VERSION) -    { -      g_set_error_literal (error, TERMINAL_OPTION_ERROR, -                           TERMINAL_OPTION_ERROR_INCOMPATIBLE_CONFIG_FILE, -                           _("Incompatible terminal config file version.")); -      return FALSE; -    } - -  groups = g_key_file_get_string_list (key_file, TERMINAL_CONFIG_GROUP, TERMINAL_CONFIG_PROP_WINDOWS, NULL, error); -  if (!groups) -    return FALSE; - -  for (i = 0; groups[i]; ++i) -    { -      const char *window_group = groups[i]; -      char **tab_groups; -      InitialWindow *iw; -      guint j; - -      tab_groups = g_key_file_get_string_list (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_TABS, NULL, error); -      if (!tab_groups) -        continue; /* no tabs in this window, skip it */ - -      iw = initial_window_new (source_tag); -      initial_windows = g_list_append (initial_windows, iw); -      apply_defaults (options, iw); - -      iw->role = g_key_file_get_string (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_ROLE, NULL); -      iw->geometry = g_key_file_get_string (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_GEOMETRY, NULL); -      iw->start_fullscreen = g_key_file_get_boolean (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_FULLSCREEN, NULL); -      iw->start_maximized = g_key_file_get_boolean (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_MAXIMIZED, NULL); -      if (g_key_file_has_key (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_MENUBAR_VISIBLE, NULL)) -        { -          iw->force_menubar_state = TRUE; -          iw->menubar_state = g_key_file_get_boolean (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_MENUBAR_VISIBLE, NULL); -        } - -      for (j = 0; tab_groups[j]; ++j) -        { -          const char *tab_group = tab_groups[j]; -          InitialTab *it; -          char *profile; - -          profile = g_key_file_get_string (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_PROFILE_ID, NULL); -          it = initial_tab_new (profile, TRUE); -          g_free (profile); - -          iw->tabs = g_list_append (iw->tabs, it); - -/*          it->width = g_key_file_get_integer (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_WIDTH, NULL); -          it->height = g_key_file_get_integer (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_HEIGHT, NULL);*/ -          it->working_dir = terminal_util_key_file_get_string_unescape (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_WORKING_DIRECTORY, NULL); -          it->title = g_key_file_get_string (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_TITLE, NULL); - -          if (g_key_file_has_key (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_COMMAND, NULL) && -              !(it->exec_argv = terminal_util_key_file_get_argv (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_COMMAND, NULL, error))) -            { -              have_error = TRUE; -              break; -            } -        } - -      g_strfreev (tab_groups); - -      if (have_error) -        break; -    } - -  g_strfreev (groups); - -  if (have_error) -    { -      g_list_foreach (initial_windows, (GFunc) initial_window_free, NULL); -      g_list_free (initial_windows); -      return FALSE; -    } - -  options->initial_windows = g_list_concat (options->initial_windows, initial_windows); - -  return TRUE; +	int version, compat_version; +	char **groups; +	guint i; +	gboolean have_error = FALSE; +	GList *initial_windows = NULL; + +	if (!g_key_file_has_group (key_file, TERMINAL_CONFIG_GROUP)) +	{ +		g_set_error_literal (error, TERMINAL_OPTION_ERROR, +		                     TERMINAL_OPTION_ERROR_INVALID_CONFIG_FILE, +		                     _("Not a valid terminal config file.")); +		return FALSE; +	} + +	version = g_key_file_get_integer (key_file, TERMINAL_CONFIG_GROUP, TERMINAL_CONFIG_PROP_VERSION, NULL); +	compat_version = g_key_file_get_integer (key_file, TERMINAL_CONFIG_GROUP, TERMINAL_CONFIG_PROP_COMPAT_VERSION, NULL); + +	if (version <= 0 || +	        compat_version <= 0 || +	        compat_version > TERMINAL_CONFIG_COMPAT_VERSION) +	{ +		g_set_error_literal (error, TERMINAL_OPTION_ERROR, +		                     TERMINAL_OPTION_ERROR_INCOMPATIBLE_CONFIG_FILE, +		                     _("Incompatible terminal config file version.")); +		return FALSE; +	} + +	groups = g_key_file_get_string_list (key_file, TERMINAL_CONFIG_GROUP, TERMINAL_CONFIG_PROP_WINDOWS, NULL, error); +	if (!groups) +		return FALSE; + +	for (i = 0; groups[i]; ++i) +	{ +		const char *window_group = groups[i]; +		char **tab_groups; +		InitialWindow *iw; +		guint j; + +		tab_groups = g_key_file_get_string_list (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_TABS, NULL, error); +		if (!tab_groups) +			continue; /* no tabs in this window, skip it */ + +		iw = initial_window_new (source_tag); +		initial_windows = g_list_append (initial_windows, iw); +		apply_defaults (options, iw); + +		iw->role = g_key_file_get_string (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_ROLE, NULL); +		iw->geometry = g_key_file_get_string (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_GEOMETRY, NULL); +		iw->start_fullscreen = g_key_file_get_boolean (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_FULLSCREEN, NULL); +		iw->start_maximized = g_key_file_get_boolean (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_MAXIMIZED, NULL); +		if (g_key_file_has_key (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_MENUBAR_VISIBLE, NULL)) +		{ +			iw->force_menubar_state = TRUE; +			iw->menubar_state = g_key_file_get_boolean (key_file, window_group, TERMINAL_CONFIG_WINDOW_PROP_MENUBAR_VISIBLE, NULL); +		} + +		for (j = 0; tab_groups[j]; ++j) +		{ +			const char *tab_group = tab_groups[j]; +			InitialTab *it; +			char *profile; + +			profile = g_key_file_get_string (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_PROFILE_ID, NULL); +			it = initial_tab_new (profile, TRUE); +			g_free (profile); + +			iw->tabs = g_list_append (iw->tabs, it); + +			/*          it->width = g_key_file_get_integer (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_WIDTH, NULL); +			          it->height = g_key_file_get_integer (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_HEIGHT, NULL);*/ +			it->working_dir = terminal_util_key_file_get_string_unescape (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_WORKING_DIRECTORY, NULL); +			it->title = g_key_file_get_string (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_TITLE, NULL); + +			if (g_key_file_has_key (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_COMMAND, NULL) && +			        !(it->exec_argv = terminal_util_key_file_get_argv (key_file, tab_group, TERMINAL_CONFIG_TERMINAL_PROP_COMMAND, NULL, error))) +			{ +				have_error = TRUE; +				break; +			} +		} + +		g_strfreev (tab_groups); + +		if (have_error) +			break; +	} + +	g_strfreev (groups); + +	if (have_error) +	{ +		g_list_foreach (initial_windows, (GFunc) initial_window_free, NULL); +		g_list_free (initial_windows); +		return FALSE; +	} + +	options->initial_windows = g_list_concat (options->initial_windows, initial_windows); + +	return TRUE;  }  /** @@ -904,7 +904,7 @@ terminal_options_merge_config (TerminalOptions *options,  void  terminal_options_ensure_window (TerminalOptions *options)  { -  ensure_top_window (options); +	ensure_top_window (options);  }  /** @@ -916,481 +916,486 @@ terminal_options_ensure_window (TerminalOptions *options)  void  terminal_options_free (TerminalOptions *options)  { -  g_list_foreach (options->initial_windows, (GFunc) initial_window_free, NULL); -  g_list_free (options->initial_windows); +	g_list_foreach (options->initial_windows, (GFunc) initial_window_free, NULL); +	g_list_free (options->initial_windows); -  g_strfreev (options->env); -  g_free (options->default_role); -  g_free (options->default_geometry); -  g_free (options->default_working_dir); -  g_free (options->default_title); -  g_free (options->default_profile); +	g_strfreev (options->env); +	g_free (options->default_role); +	g_free (options->default_geometry); +	g_free (options->default_working_dir); +	g_free (options->default_title); +	g_free (options->default_profile); -  g_strfreev (options->exec_argv); +	g_strfreev (options->exec_argv); -  g_free (options->display_name); -  g_free (options->startup_id); +	g_free (options->display_name); +	g_free (options->startup_id); -  g_slice_free (TerminalOptions, options); +	g_slice_free (TerminalOptions, options);  }  static GOptionContext *  get_goption_context (TerminalOptions *options)  { -  const GOptionEntry global_unique_goptions[] = { -    { -      "disable-factory", -      0, -      G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      option_disable_factory_callback, -      N_("Do not register with the activation nameserver, do not re-use an active terminal"), -      NULL -    }, -    { -      "load-config", -      0, -      G_OPTION_FLAG_FILENAME, -      G_OPTION_ARG_CALLBACK, -      option_load_save_config_cb, -      N_("Load a terminal configuration file"), -      N_("FILE") -    }, -    { -      "save-config", -      0, -      G_OPTION_FLAG_FILENAME, -      G_OPTION_ARG_CALLBACK, -      option_load_save_config_cb, -      N_("Save the terminal configuration to a file"), -      N_("FILE") -    }, -    { "version", 0, G_OPTION_FLAG_NO_ARG | G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_CALLBACK, option_version_cb, NULL, NULL }, -    { NULL, 0, 0, 0, NULL, NULL, NULL } -  }; - -  const GOptionEntry global_multiple_goptions[] = { -    { -      "window", -      0, -      G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      option_window_callback, -      N_("Open a new window containing a tab with the default profile"), -      NULL -    }, -    { -      "tab", -      0, -      G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      option_tab_callback, -      N_("Open a new tab in the last-opened window with the default profile"), -      NULL -    }, -    { NULL, 0, 0, 0, NULL, NULL, NULL } -  }; - -  const GOptionEntry window_goptions[] = { -    { -      "show-menubar", -      0, -      G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      option_show_menubar_callback, -      N_("Turn on the menubar"), -      NULL -    }, -    { -      "hide-menubar", -      0, -      G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      option_hide_menubar_callback, -      N_("Turn off the menubar"), -      NULL -    }, -    { -      "maximize", -      0, -      G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      option_maximize_callback, -      N_("Maximise the window"), -      NULL -    }, -    { -      "full-screen", -      0, -      G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      option_fullscreen_callback, -      N_("Full-screen the window"), -      NULL -    }, -    { -      "geometry", -      0, -      0, -      G_OPTION_ARG_CALLBACK, -      option_geometry_callback, -      N_("Set the window size; for example: 80x24, or 80x24+200+200 (ROWSxCOLS+X+Y)"), -      N_("GEOMETRY") -    }, -    { -      "role", -      0, -      0, -      G_OPTION_ARG_CALLBACK, -      option_role_callback, -      N_("Set the window role"), -      N_("ROLE") -    }, -    { -      "active", -      0, -      G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      option_active_callback, -      N_("Set the last specified tab as the active one in its window"), -      NULL -    }, -    { NULL, 0, 0, 0, NULL, NULL, NULL } -  }; - -  const GOptionEntry terminal_goptions[] = { -    { -      "command", -      'e', -      G_OPTION_FLAG_FILENAME, -      G_OPTION_ARG_CALLBACK, -      option_command_callback, -      N_("Execute the argument to this option inside the terminal"), -      NULL -    }, -    { -      "profile", -      0, -      0, -      G_OPTION_ARG_CALLBACK, -      option_profile_cb, -      N_("Use the given profile instead of the default profile"), -      N_("PROFILE-NAME") -    }, -    { -      "title", -      't', -      0, -      G_OPTION_ARG_CALLBACK, -      option_title_callback, -      N_("Set the terminal title"), -      N_("TITLE") -    }, -    { -      "working-directory", -      0, -      G_OPTION_FLAG_FILENAME, -      G_OPTION_ARG_CALLBACK, -      option_working_directory_callback, -      N_("Set the working directory"), -      N_("DIRNAME") -    }, -    { -      "zoom", -      0, -      0, -      G_OPTION_ARG_CALLBACK, -      option_zoom_callback, -      N_("Set the terminal's zoom factor (1.0 = normal size)"), -      N_("ZOOM") -    }, -    { NULL, 0, 0, 0, NULL, NULL, NULL } -  }; - -  const GOptionEntry internal_goptions[] = {   -    { -      "profile-id", -      0, -      G_OPTION_FLAG_HIDDEN, -      G_OPTION_ARG_CALLBACK, -      option_profile_id_cb, -      NULL, NULL -    }, -    { -      "window-with-profile", -      0, -      G_OPTION_FLAG_HIDDEN, -      G_OPTION_ARG_CALLBACK, -      option_window_callback, -      NULL, NULL -    }, -    { -      "tab-with-profile", -      0, -      G_OPTION_FLAG_HIDDEN, -      G_OPTION_ARG_CALLBACK, -      option_tab_callback, -      NULL, NULL -    }, -    { -      "window-with-profile-internal-id", -      0, -      G_OPTION_FLAG_HIDDEN, -      G_OPTION_ARG_CALLBACK, -      option_window_callback, -      NULL, NULL -    }, -    { -      "tab-with-profile-internal-id", -      0, -      G_OPTION_FLAG_HIDDEN, -      G_OPTION_ARG_CALLBACK, -      option_tab_callback, -      NULL, NULL -    }, -    { -      "default-working-directory", -      0, -      G_OPTION_FLAG_HIDDEN, -      G_OPTION_ARG_FILENAME, -      &options->default_working_dir, -      NULL, NULL, -    }, -    { -      "use-factory", -      0, -      G_OPTION_FLAG_HIDDEN, -      G_OPTION_ARG_NONE, -      &options->use_factory, -      NULL, NULL -    }, -    { -      "startup-id", -      0, -      G_OPTION_FLAG_HIDDEN, -      G_OPTION_ARG_STRING, -      &options->startup_id, -      NULL, -      NULL -    }, -    /* -     * Crappy old compat args -     */ -    { -      "tclass", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    }, -    { -      "font", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    },   -    { -      "nologin", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    }, -    { -      "login", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    }, -    { -      "foreground", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    },   -    { -      "background", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    }, -    { -      "solid", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    }, -    { -      "bgscroll", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    }, -    { -      "bgnoscroll", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    },   -    { -      "shaded", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    },   -    { -      "noshaded", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    },   -    { -      "transparent", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    },   -    { -      "utmp", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    },   -    { -      "noutmp", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    },   -    { -      "wtmp", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    }, -    { -      "nowtmp", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    },   -    { -      "lastlog", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    },   -    { -      "nolastlog", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    }, -    { -      "icon", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    },   -    { -      "termname", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    }, -    { -      "start-factory-server", -      0, -      G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, -      G_OPTION_ARG_CALLBACK, -      unsupported_option_callback, -      NULL, NULL -    }, -    { NULL, 0, 0, 0, NULL, NULL, NULL } -  }; - -  GOptionContext *context; -  GOptionGroup *group; - -  context = g_option_context_new (NULL); -  g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); -  g_option_context_set_description (context, N_("MATE Terminal Emulator")); - -  group = g_option_group_new ("mate-terminal", -                              N_("MATE Terminal Emulator"), -                              N_("Show MATE Terminal options"), -                              options, -                              NULL); -  g_option_group_set_translation_domain (group, GETTEXT_PACKAGE); -  g_option_group_add_entries (group, global_unique_goptions); -  g_option_group_add_entries (group, internal_goptions); -  g_option_group_set_parse_hooks (group, NULL, digest_options_callback); -  g_option_context_set_main_group (context, group); - -  group = g_option_group_new ("terminal", -                              N_("Options to open new windows or terminal tabs; more than one of these may be specified:"), -                              N_("Show terminal options"), -                              options, -                              NULL); -  g_option_group_set_translation_domain (group, GETTEXT_PACKAGE); -  g_option_group_add_entries (group, global_multiple_goptions); -  g_option_context_add_group (context, group); - -  group = g_option_group_new ("window-options", -                              N_("Window options; if used before the first --window or --tab argument, sets the default for all windows:"), -                              N_("Show per-window options"), -                              options, -                              NULL); -  g_option_group_set_translation_domain (group, GETTEXT_PACKAGE); -  g_option_group_add_entries (group, window_goptions); -  g_option_context_add_group (context, group); -   -  group = g_option_group_new ("terminal-options", -                              N_("Terminal options; if used before the first --window or --tab argument, sets the default for all terminals:"), -                              N_("Show per-terminal options"), -                              options, -                              NULL); -  g_option_group_set_translation_domain (group, GETTEXT_PACKAGE); -  g_option_group_add_entries (group, terminal_goptions); -  g_option_context_add_group (context, group); -   -  return context; +	const GOptionEntry global_unique_goptions[] = +	{ +		{ +			"disable-factory", +			0, +			G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			option_disable_factory_callback, +			N_("Do not register with the activation nameserver, do not re-use an active terminal"), +			NULL +		}, +		{ +			"load-config", +			0, +			G_OPTION_FLAG_FILENAME, +			G_OPTION_ARG_CALLBACK, +			option_load_save_config_cb, +			N_("Load a terminal configuration file"), +			N_("FILE") +		}, +		{ +			"save-config", +			0, +			G_OPTION_FLAG_FILENAME, +			G_OPTION_ARG_CALLBACK, +			option_load_save_config_cb, +			N_("Save the terminal configuration to a file"), +			N_("FILE") +		}, +		{ "version", 0, G_OPTION_FLAG_NO_ARG | G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_CALLBACK, option_version_cb, NULL, NULL }, +		{ NULL, 0, 0, 0, NULL, NULL, NULL } +	}; + +	const GOptionEntry global_multiple_goptions[] = +	{ +		{ +			"window", +			0, +			G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			option_window_callback, +			N_("Open a new window containing a tab with the default profile"), +			NULL +		}, +		{ +			"tab", +			0, +			G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			option_tab_callback, +			N_("Open a new tab in the last-opened window with the default profile"), +			NULL +		}, +		{ NULL, 0, 0, 0, NULL, NULL, NULL } +	}; + +	const GOptionEntry window_goptions[] = +	{ +		{ +			"show-menubar", +			0, +			G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			option_show_menubar_callback, +			N_("Turn on the menubar"), +			NULL +		}, +		{ +			"hide-menubar", +			0, +			G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			option_hide_menubar_callback, +			N_("Turn off the menubar"), +			NULL +		}, +		{ +			"maximize", +			0, +			G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			option_maximize_callback, +			N_("Maximise the window"), +			NULL +		}, +		{ +			"full-screen", +			0, +			G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			option_fullscreen_callback, +			N_("Full-screen the window"), +			NULL +		}, +		{ +			"geometry", +			0, +			0, +			G_OPTION_ARG_CALLBACK, +			option_geometry_callback, +			N_("Set the window size; for example: 80x24, or 80x24+200+200 (ROWSxCOLS+X+Y)"), +			N_("GEOMETRY") +		}, +		{ +			"role", +			0, +			0, +			G_OPTION_ARG_CALLBACK, +			option_role_callback, +			N_("Set the window role"), +			N_("ROLE") +		}, +		{ +			"active", +			0, +			G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			option_active_callback, +			N_("Set the last specified tab as the active one in its window"), +			NULL +		}, +		{ NULL, 0, 0, 0, NULL, NULL, NULL } +	}; + +	const GOptionEntry terminal_goptions[] = +	{ +		{ +			"command", +			'e', +			G_OPTION_FLAG_FILENAME, +			G_OPTION_ARG_CALLBACK, +			option_command_callback, +			N_("Execute the argument to this option inside the terminal"), +			NULL +		}, +		{ +			"profile", +			0, +			0, +			G_OPTION_ARG_CALLBACK, +			option_profile_cb, +			N_("Use the given profile instead of the default profile"), +			N_("PROFILE-NAME") +		}, +		{ +			"title", +			't', +			0, +			G_OPTION_ARG_CALLBACK, +			option_title_callback, +			N_("Set the terminal title"), +			N_("TITLE") +		}, +		{ +			"working-directory", +			0, +			G_OPTION_FLAG_FILENAME, +			G_OPTION_ARG_CALLBACK, +			option_working_directory_callback, +			N_("Set the working directory"), +			N_("DIRNAME") +		}, +		{ +			"zoom", +			0, +			0, +			G_OPTION_ARG_CALLBACK, +			option_zoom_callback, +			N_("Set the terminal's zoom factor (1.0 = normal size)"), +			N_("ZOOM") +		}, +		{ NULL, 0, 0, 0, NULL, NULL, NULL } +	}; + +	const GOptionEntry internal_goptions[] = +	{ +		{ +			"profile-id", +			0, +			G_OPTION_FLAG_HIDDEN, +			G_OPTION_ARG_CALLBACK, +			option_profile_id_cb, +			NULL, NULL +		}, +		{ +			"window-with-profile", +			0, +			G_OPTION_FLAG_HIDDEN, +			G_OPTION_ARG_CALLBACK, +			option_window_callback, +			NULL, NULL +		}, +		{ +			"tab-with-profile", +			0, +			G_OPTION_FLAG_HIDDEN, +			G_OPTION_ARG_CALLBACK, +			option_tab_callback, +			NULL, NULL +		}, +		{ +			"window-with-profile-internal-id", +			0, +			G_OPTION_FLAG_HIDDEN, +			G_OPTION_ARG_CALLBACK, +			option_window_callback, +			NULL, NULL +		}, +		{ +			"tab-with-profile-internal-id", +			0, +			G_OPTION_FLAG_HIDDEN, +			G_OPTION_ARG_CALLBACK, +			option_tab_callback, +			NULL, NULL +		}, +		{ +			"default-working-directory", +			0, +			G_OPTION_FLAG_HIDDEN, +			G_OPTION_ARG_FILENAME, +			&options->default_working_dir, +			NULL, NULL, +		}, +		{ +			"use-factory", +			0, +			G_OPTION_FLAG_HIDDEN, +			G_OPTION_ARG_NONE, +			&options->use_factory, +			NULL, NULL +		}, +		{ +			"startup-id", +			0, +			G_OPTION_FLAG_HIDDEN, +			G_OPTION_ARG_STRING, +			&options->startup_id, +			NULL, +			NULL +		}, +		/* +		 * Crappy old compat args +		 */ +		{ +			"tclass", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"font", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"nologin", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"login", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"foreground", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"background", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"solid", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"bgscroll", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"bgnoscroll", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"shaded", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"noshaded", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"transparent", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"utmp", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"noutmp", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"wtmp", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"nowtmp", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"lastlog", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"nolastlog", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"icon", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"termname", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ +			"start-factory-server", +			0, +			G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, +			G_OPTION_ARG_CALLBACK, +			unsupported_option_callback, +			NULL, NULL +		}, +		{ NULL, 0, 0, 0, NULL, NULL, NULL } +	}; + +	GOptionContext *context; +	GOptionGroup *group; + +	context = g_option_context_new (NULL); +	g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); +	g_option_context_set_description (context, N_("MATE Terminal Emulator")); + +	group = g_option_group_new ("mate-terminal", +	                            N_("MATE Terminal Emulator"), +	                            N_("Show MATE Terminal options"), +	                            options, +	                            NULL); +	g_option_group_set_translation_domain (group, GETTEXT_PACKAGE); +	g_option_group_add_entries (group, global_unique_goptions); +	g_option_group_add_entries (group, internal_goptions); +	g_option_group_set_parse_hooks (group, NULL, digest_options_callback); +	g_option_context_set_main_group (context, group); + +	group = g_option_group_new ("terminal", +	                            N_("Options to open new windows or terminal tabs; more than one of these may be specified:"), +	                            N_("Show terminal options"), +	                            options, +	                            NULL); +	g_option_group_set_translation_domain (group, GETTEXT_PACKAGE); +	g_option_group_add_entries (group, global_multiple_goptions); +	g_option_context_add_group (context, group); + +	group = g_option_group_new ("window-options", +	                            N_("Window options; if used before the first --window or --tab argument, sets the default for all windows:"), +	                            N_("Show per-window options"), +	                            options, +	                            NULL); +	g_option_group_set_translation_domain (group, GETTEXT_PACKAGE); +	g_option_group_add_entries (group, window_goptions); +	g_option_context_add_group (context, group); + +	group = g_option_group_new ("terminal-options", +	                            N_("Terminal options; if used before the first --window or --tab argument, sets the default for all terminals:"), +	                            N_("Show per-terminal options"), +	                            options, +	                            NULL); +	g_option_group_set_translation_domain (group, GETTEXT_PACKAGE); +	g_option_group_add_entries (group, terminal_goptions); +	g_option_context_add_group (context, group); + +	return context;  } diff --git a/src/terminal-options.h b/src/terminal-options.h index 2094ddc..cbada18 100644 --- a/src/terminal-options.h +++ b/src/terminal-options.h @@ -28,81 +28,82 @@ G_BEGIN_DECLS  typedef struct  { -  gboolean remote_arguments; -  char   **env; -  char    *startup_id; -  char    *display_name; -  int      screen_number; -  GList   *initial_windows; -  gboolean default_window_menubar_forced; -  gboolean default_window_menubar_state; -  gboolean default_fullscreen; -  gboolean default_maximize; -  char    *default_role; -  char    *default_geometry; -  char    *default_working_dir; -  char    *default_title; -  char   **exec_argv; -  char    *default_profile; -  gboolean default_profile_is_id; - -  gboolean  execute; -  gboolean  use_factory; -  double    zoom; - -  char    *config_file; -  gboolean load_config; -  gboolean save_config; +	gboolean remote_arguments; +	char   **env; +	char    *startup_id; +	char    *display_name; +	int      screen_number; +	GList   *initial_windows; +	gboolean default_window_menubar_forced; +	gboolean default_window_menubar_state; +	gboolean default_fullscreen; +	gboolean default_maximize; +	char    *default_role; +	char    *default_geometry; +	char    *default_working_dir; +	char    *default_title; +	char   **exec_argv; +	char    *default_profile; +	gboolean default_profile_is_id; + +	gboolean  execute; +	gboolean  use_factory; +	double    zoom; + +	char    *config_file; +	gboolean load_config; +	gboolean save_config;  } TerminalOptions;  typedef struct  { -  char *profile; -  gboolean profile_is_id; -  char **exec_argv; -  char *title; -  char *working_dir; -  double zoom; -  guint zoom_set : 1; -  guint active : 1; +	char *profile; +	gboolean profile_is_id; +	char **exec_argv; +	char *title; +	char *working_dir; +	double zoom; +	guint zoom_set : 1; +	guint active : 1;  } InitialTab;  typedef struct  { -  guint source_tag; +	guint source_tag; -  GList *tabs; /* list of InitialTab */ +	GList *tabs; /* list of InitialTab */ -  gboolean force_menubar_state; -  gboolean menubar_state; +	gboolean force_menubar_state; +	gboolean menubar_state; -  gboolean start_fullscreen; -  gboolean start_maximized; +	gboolean start_fullscreen; +	gboolean start_maximized; -  char *geometry; -  char *role; +	char *geometry; +	char *role;  } InitialWindow;  #define TERMINAL_OPTION_ERROR (g_quark_from_static_string ("terminal-option-error")) -typedef enum { -  TERMINAL_OPTION_ERROR_NOT_IN_FACTORY, -  TERMINAL_OPTION_ERROR_EXCLUSIVE_OPTIONS, -  TERMINAL_OPTION_ERROR_INVALID_CONFIG_FILE, -  TERMINAL_OPTION_ERROR_INCOMPATIBLE_CONFIG_FILE +typedef enum +{ +    TERMINAL_OPTION_ERROR_NOT_IN_FACTORY, +    TERMINAL_OPTION_ERROR_EXCLUSIVE_OPTIONS, +    TERMINAL_OPTION_ERROR_INVALID_CONFIG_FILE, +    TERMINAL_OPTION_ERROR_INCOMPATIBLE_CONFIG_FILE  } TerminalOptionError;  TerminalOptions *terminal_options_parse (const char *working_directory, -                                         const char *display_name, -                                         const char *startup_id, -                                         char **env, -                                         gboolean remote_arguments, -                                         gboolean ignore_unknown_options, -                                         int *argcp, -                                         char ***argvp, -                                         GError **error, -                                         ...) G_GNUC_NULL_TERMINATED; +        const char *display_name, +        const char *startup_id, +        char **env, +        gboolean remote_arguments, +        gboolean ignore_unknown_options, +        int *argcp, +        char ***argvp, +        GError **error, +        ...) G_GNUC_NULL_TERMINATED;  gboolean terminal_options_merge_config (TerminalOptions *options,                                          GKeyFile *key_file, diff --git a/src/terminal-profile.c b/src/terminal-profile.c index 61bab09..0021d7a 100644 --- a/src/terminal-profile.c +++ b/src/terminal-profile.c @@ -46,47 +46,47 @@   */  enum  { -  PROP_0, -  PROP_ALLOW_BOLD, -  PROP_BACKGROUND_COLOR, -  PROP_BACKGROUND_DARKNESS, -  PROP_BACKGROUND_IMAGE, -  PROP_BACKGROUND_IMAGE_FILE, -  PROP_BACKGROUND_TYPE, -  PROP_BACKSPACE_BINDING, -  PROP_BOLD_COLOR, -  PROP_BOLD_COLOR_SAME_AS_FG, -  PROP_CURSOR_BLINK_MODE, -  PROP_CURSOR_SHAPE, -  PROP_CUSTOM_COMMAND, -  PROP_DEFAULT_SIZE_COLUMNS, -  PROP_DEFAULT_SIZE_ROWS, -  PROP_DEFAULT_SHOW_MENUBAR, -  PROP_DELETE_BINDING, -  PROP_EXIT_ACTION, -  PROP_FONT, -  PROP_FOREGROUND_COLOR, -  PROP_LOGIN_SHELL, -  PROP_NAME, -  PROP_PALETTE, -  PROP_SCROLL_BACKGROUND, -  PROP_SCROLLBACK_LINES, -  PROP_SCROLLBACK_UNLIMITED, -  PROP_SCROLLBAR_POSITION, -  PROP_SCROLL_ON_KEYSTROKE, -  PROP_SCROLL_ON_OUTPUT, -  PROP_SILENT_BELL, -  PROP_TITLE, -  PROP_TITLE_MODE, -  PROP_UPDATE_RECORDS, -  PROP_USE_CUSTOM_COMMAND, -  PROP_USE_CUSTOM_DEFAULT_SIZE, -  PROP_USE_SKEY, -  PROP_USE_SYSTEM_FONT, -  PROP_USE_THEME_COLORS, -  PROP_VISIBLE_NAME, -  PROP_WORD_CHARS, -  LAST_PROP +    PROP_0, +    PROP_ALLOW_BOLD, +    PROP_BACKGROUND_COLOR, +    PROP_BACKGROUND_DARKNESS, +    PROP_BACKGROUND_IMAGE, +    PROP_BACKGROUND_IMAGE_FILE, +    PROP_BACKGROUND_TYPE, +    PROP_BACKSPACE_BINDING, +    PROP_BOLD_COLOR, +    PROP_BOLD_COLOR_SAME_AS_FG, +    PROP_CURSOR_BLINK_MODE, +    PROP_CURSOR_SHAPE, +    PROP_CUSTOM_COMMAND, +    PROP_DEFAULT_SIZE_COLUMNS, +    PROP_DEFAULT_SIZE_ROWS, +    PROP_DEFAULT_SHOW_MENUBAR, +    PROP_DELETE_BINDING, +    PROP_EXIT_ACTION, +    PROP_FONT, +    PROP_FOREGROUND_COLOR, +    PROP_LOGIN_SHELL, +    PROP_NAME, +    PROP_PALETTE, +    PROP_SCROLL_BACKGROUND, +    PROP_SCROLLBACK_LINES, +    PROP_SCROLLBACK_UNLIMITED, +    PROP_SCROLLBAR_POSITION, +    PROP_SCROLL_ON_KEYSTROKE, +    PROP_SCROLL_ON_OUTPUT, +    PROP_SILENT_BELL, +    PROP_TITLE, +    PROP_TITLE_MODE, +    PROP_UPDATE_RECORDS, +    PROP_USE_CUSTOM_COMMAND, +    PROP_USE_CUSTOM_DEFAULT_SIZE, +    PROP_USE_SKEY, +    PROP_USE_SYSTEM_FONT, +    PROP_USE_THEME_COLORS, +    PROP_VISIBLE_NAME, +    PROP_WORD_CHARS, +    LAST_PROP  };  #define KEY_ALLOW_BOLD "allow_bold" @@ -169,116 +169,117 @@ enum  struct _TerminalProfilePrivate  { -  GValueArray *properties; -  gboolean *locked; +	GValueArray *properties; +	gboolean *locked; -  MateConfClient *conf; -  char *profile_dir; -  guint notify_id; +	MateConfClient *conf; +	char *profile_dir; +	guint notify_id; -  GSList *dirty_pspecs; -  guint save_idle_id; +	GSList *dirty_pspecs; +	guint save_idle_id; -  GParamSpec *mateconf_notification_pspec; +	GParamSpec *mateconf_notification_pspec; -  gboolean background_load_failed; +	gboolean background_load_failed; -  guint forgotten : 1; +	guint forgotten : 1;  };  /* We have to continue to use these since they're unfortunately different   * from the value nicks of the vte_terminal_erase_binding_get_type() enum type.   */ -static const MateConfEnumStringPair erase_bindings[] = { -  { VTE_ERASE_AUTO, "auto" }, -  { VTE_ERASE_ASCII_BACKSPACE, "control-h" }, -  { VTE_ERASE_ASCII_DELETE, "ascii-del" }, -  { VTE_ERASE_DELETE_SEQUENCE, "escape-sequence" }, -  { VTE_ERASE_TTY, "tty" }, -  { -1, NULL } +static const MateConfEnumStringPair erase_bindings[] = +{ +	{ VTE_ERASE_AUTO, "auto" }, +	{ VTE_ERASE_ASCII_BACKSPACE, "control-h" }, +	{ VTE_ERASE_ASCII_DELETE, "ascii-del" }, +	{ VTE_ERASE_DELETE_SEQUENCE, "escape-sequence" }, +	{ VTE_ERASE_TTY, "tty" }, +	{ -1, NULL }  };  static const GdkColor terminal_palettes[TERMINAL_PALETTE_N_BUILTINS][TERMINAL_PALETTE_SIZE] =  { -  /* Tango palette */ -  { -    { 0, 0x0000, 0x0000, 0x0000 }, -    { 0, 0xcccc, 0x0000, 0x0000 }, -    { 0, 0x4e4e, 0x9a9a, 0x0606 }, -    { 0, 0xc4c4, 0xa0a0, 0x0000 }, -    { 0, 0x3434, 0x6565, 0xa4a4 }, -    { 0, 0x7575, 0x5050, 0x7b7b }, -    { 0, 0x0606, 0x9820, 0x9a9a }, -    { 0, 0xd3d3, 0xd7d7, 0xcfcf }, -    { 0, 0x5555, 0x5757, 0x5353 }, -    { 0, 0xefef, 0x2929, 0x2929 }, -    { 0, 0x8a8a, 0xe2e2, 0x3434 }, -    { 0, 0xfcfc, 0xe9e9, 0x4f4f }, -    { 0, 0x7272, 0x9f9f, 0xcfcf }, -    { 0, 0xadad, 0x7f7f, 0xa8a8 }, -    { 0, 0x3434, 0xe2e2, 0xe2e2 }, -    { 0, 0xeeee, 0xeeee, 0xecec } -  }, - -  /* Linux palette */ -  { -    { 0, 0x0000, 0x0000, 0x0000 }, -    { 0, 0xaaaa, 0x0000, 0x0000 }, -    { 0, 0x0000, 0xaaaa, 0x0000 }, -    { 0, 0xaaaa, 0x5555, 0x0000 }, -    { 0, 0x0000, 0x0000, 0xaaaa }, -    { 0, 0xaaaa, 0x0000, 0xaaaa }, -    { 0, 0x0000, 0xaaaa, 0xaaaa }, -    { 0, 0xaaaa, 0xaaaa, 0xaaaa }, -    { 0, 0x5555, 0x5555, 0x5555 }, -    { 0, 0xffff, 0x5555, 0x5555 }, -    { 0, 0x5555, 0xffff, 0x5555 }, -    { 0, 0xffff, 0xffff, 0x5555 }, -    { 0, 0x5555, 0x5555, 0xffff }, -    { 0, 0xffff, 0x5555, 0xffff }, -    { 0, 0x5555, 0xffff, 0xffff }, -    { 0, 0xffff, 0xffff, 0xffff } -  }, - -  /* XTerm palette */ -  { -    { 0, 0x0000, 0x0000, 0x0000 }, -    { 0, 0xcdcb, 0x0000, 0x0000 }, -    { 0, 0x0000, 0xcdcb, 0x0000 }, -    { 0, 0xcdcb, 0xcdcb, 0x0000 }, -    { 0, 0x1e1a, 0x908f, 0xffff }, -    { 0, 0xcdcb, 0x0000, 0xcdcb }, -    { 0, 0x0000, 0xcdcb, 0xcdcb }, -    { 0, 0xe5e2, 0xe5e2, 0xe5e2 }, -    { 0, 0x4ccc, 0x4ccc, 0x4ccc }, -    { 0, 0xffff, 0x0000, 0x0000 }, -    { 0, 0x0000, 0xffff, 0x0000 }, -    { 0, 0xffff, 0xffff, 0x0000 }, -    { 0, 0x4645, 0x8281, 0xb4ae }, -    { 0, 0xffff, 0x0000, 0xffff }, -    { 0, 0x0000, 0xffff, 0xffff }, -    { 0, 0xffff, 0xffff, 0xffff } -  }, - -  /* RXVT palette */ -  { -    { 0, 0x0000, 0x0000, 0x0000 }, -    { 0, 0xcdcd, 0x0000, 0x0000 }, -    { 0, 0x0000, 0xcdcd, 0x0000 }, -    { 0, 0xcdcd, 0xcdcd, 0x0000 }, -    { 0, 0x0000, 0x0000, 0xcdcd }, -    { 0, 0xcdcd, 0x0000, 0xcdcd }, -    { 0, 0x0000, 0xcdcd, 0xcdcd }, -    { 0, 0xfafa, 0xebeb, 0xd7d7 }, -    { 0, 0x4040, 0x4040, 0x4040 }, -    { 0, 0xffff, 0x0000, 0x0000 }, -    { 0, 0x0000, 0xffff, 0x0000 }, -    { 0, 0xffff, 0xffff, 0x0000 }, -    { 0, 0x0000, 0x0000, 0xffff }, -    { 0, 0xffff, 0x0000, 0xffff }, -    { 0, 0x0000, 0xffff, 0xffff }, -    { 0, 0xffff, 0xffff, 0xffff } -  } +	/* Tango palette */ +	{ +		{ 0, 0x0000, 0x0000, 0x0000 }, +		{ 0, 0xcccc, 0x0000, 0x0000 }, +		{ 0, 0x4e4e, 0x9a9a, 0x0606 }, +		{ 0, 0xc4c4, 0xa0a0, 0x0000 }, +		{ 0, 0x3434, 0x6565, 0xa4a4 }, +		{ 0, 0x7575, 0x5050, 0x7b7b }, +		{ 0, 0x0606, 0x9820, 0x9a9a }, +		{ 0, 0xd3d3, 0xd7d7, 0xcfcf }, +		{ 0, 0x5555, 0x5757, 0x5353 }, +		{ 0, 0xefef, 0x2929, 0x2929 }, +		{ 0, 0x8a8a, 0xe2e2, 0x3434 }, +		{ 0, 0xfcfc, 0xe9e9, 0x4f4f }, +		{ 0, 0x7272, 0x9f9f, 0xcfcf }, +		{ 0, 0xadad, 0x7f7f, 0xa8a8 }, +		{ 0, 0x3434, 0xe2e2, 0xe2e2 }, +		{ 0, 0xeeee, 0xeeee, 0xecec } +	}, + +	/* Linux palette */ +	{ +		{ 0, 0x0000, 0x0000, 0x0000 }, +		{ 0, 0xaaaa, 0x0000, 0x0000 }, +		{ 0, 0x0000, 0xaaaa, 0x0000 }, +		{ 0, 0xaaaa, 0x5555, 0x0000 }, +		{ 0, 0x0000, 0x0000, 0xaaaa }, +		{ 0, 0xaaaa, 0x0000, 0xaaaa }, +		{ 0, 0x0000, 0xaaaa, 0xaaaa }, +		{ 0, 0xaaaa, 0xaaaa, 0xaaaa }, +		{ 0, 0x5555, 0x5555, 0x5555 }, +		{ 0, 0xffff, 0x5555, 0x5555 }, +		{ 0, 0x5555, 0xffff, 0x5555 }, +		{ 0, 0xffff, 0xffff, 0x5555 }, +		{ 0, 0x5555, 0x5555, 0xffff }, +		{ 0, 0xffff, 0x5555, 0xffff }, +		{ 0, 0x5555, 0xffff, 0xffff }, +		{ 0, 0xffff, 0xffff, 0xffff } +	}, + +	/* XTerm palette */ +	{ +		{ 0, 0x0000, 0x0000, 0x0000 }, +		{ 0, 0xcdcb, 0x0000, 0x0000 }, +		{ 0, 0x0000, 0xcdcb, 0x0000 }, +		{ 0, 0xcdcb, 0xcdcb, 0x0000 }, +		{ 0, 0x1e1a, 0x908f, 0xffff }, +		{ 0, 0xcdcb, 0x0000, 0xcdcb }, +		{ 0, 0x0000, 0xcdcb, 0xcdcb }, +		{ 0, 0xe5e2, 0xe5e2, 0xe5e2 }, +		{ 0, 0x4ccc, 0x4ccc, 0x4ccc }, +		{ 0, 0xffff, 0x0000, 0x0000 }, +		{ 0, 0x0000, 0xffff, 0x0000 }, +		{ 0, 0xffff, 0xffff, 0x0000 }, +		{ 0, 0x4645, 0x8281, 0xb4ae }, +		{ 0, 0xffff, 0x0000, 0xffff }, +		{ 0, 0x0000, 0xffff, 0xffff }, +		{ 0, 0xffff, 0xffff, 0xffff } +	}, + +	/* RXVT palette */ +	{ +		{ 0, 0x0000, 0x0000, 0x0000 }, +		{ 0, 0xcdcd, 0x0000, 0x0000 }, +		{ 0, 0x0000, 0xcdcd, 0x0000 }, +		{ 0, 0xcdcd, 0xcdcd, 0x0000 }, +		{ 0, 0x0000, 0x0000, 0xcdcd }, +		{ 0, 0xcdcd, 0x0000, 0xcdcd }, +		{ 0, 0x0000, 0xcdcd, 0xcdcd }, +		{ 0, 0xfafa, 0xebeb, 0xd7d7 }, +		{ 0, 0x4040, 0x4040, 0x4040 }, +		{ 0, 0xffff, 0x0000, 0x0000 }, +		{ 0, 0x0000, 0xffff, 0x0000 }, +		{ 0, 0xffff, 0xffff, 0x0000 }, +		{ 0, 0x0000, 0x0000, 0xffff }, +		{ 0, 0xffff, 0x0000, 0xffff }, +		{ 0, 0x0000, 0xffff, 0xffff }, +		{ 0, 0xffff, 0xffff, 0xffff } +	}  };  static const GdkColor default_fg_color = { 0, 0, 0, 0 }; @@ -286,15 +287,15 @@ static const GdkColor default_bg_color = { 0, 0xffff, 0xffff, 0xdddd };  enum  { -  FORGOTTEN, -  LAST_SIGNAL +    FORGOTTEN, +    LAST_SIGNAL  };  static void terminal_profile_finalize    (GObject              *object);  static void terminal_profile_set_property (GObject *object, -                                           guint prop_id, -                                           const GValue *value, -                                           GParamSpec *pspec); +        guint prop_id, +        const GValue *value, +        GParamSpec *pspec);  static void ensure_pixbuf_property (TerminalProfile *profile,                                      guint path_prop_id,                                      guint pixbuf_prop_id, @@ -309,45 +310,45 @@ static gboolean  palette_cmp (const GdkColor *ca,               const GdkColor *cb)  { -  guint i; +	guint i; -  for (i = 0; i < TERMINAL_PALETTE_SIZE; ++i) -    if (!gdk_color_equal (&ca[i], &cb[i])) -      return FALSE; +	for (i = 0; i < TERMINAL_PALETTE_SIZE; ++i) +		if (!gdk_color_equal (&ca[i], &cb[i])) +			return FALSE; -  return TRUE; +	return TRUE;  }  static GParamSpec *  get_pspec_from_name (TerminalProfile *profile,                       const char *prop_name)  { -  TerminalProfileClass *klass = TERMINAL_PROFILE_GET_CLASS (profile); -  GParamSpec *pspec; +	TerminalProfileClass *klass = TERMINAL_PROFILE_GET_CLASS (profile); +	GParamSpec *pspec; -  pspec = g_object_class_find_property (G_OBJECT_CLASS (klass), prop_name); -  if (pspec && -      pspec->owner_type != TERMINAL_TYPE_PROFILE) -    pspec = NULL; +	pspec = g_object_class_find_property (G_OBJECT_CLASS (klass), prop_name); +	if (pspec && +	        pspec->owner_type != TERMINAL_TYPE_PROFILE) +		pspec = NULL; -  return pspec; +	return pspec;  }  static const GValue *  get_prop_value_from_prop_name (TerminalProfile *profile,                                 const char *prop_name)  { -  TerminalProfilePrivate *priv = profile->priv; -  GParamSpec *pspec; +	TerminalProfilePrivate *priv = profile->priv; +	GParamSpec *pspec; -  pspec = get_pspec_from_name (profile, prop_name); -  if (!pspec) -    return NULL; +	pspec = get_pspec_from_name (profile, prop_name); +	if (!pspec) +		return NULL; -  if (G_UNLIKELY (pspec->param_id == PROP_BACKGROUND_IMAGE)) -    ensure_pixbuf_property (profile, PROP_BACKGROUND_IMAGE_FILE, PROP_BACKGROUND_IMAGE, &priv->background_load_failed); +	if (G_UNLIKELY (pspec->param_id == PROP_BACKGROUND_IMAGE)) +		ensure_pixbuf_property (profile, PROP_BACKGROUND_IMAGE_FILE, PROP_BACKGROUND_IMAGE, &priv->background_load_failed); -  return g_value_array_get_nth (priv->properties, pspec->param_id); +	return g_value_array_get_nth (priv->properties, pspec->param_id);  }  static void @@ -355,32 +356,32 @@ set_value_from_palette (GValue *ret_value,                          const GdkColor *colors,                          guint n_colors)  { -  GValueArray *array; -  guint i, max_n_colors; +	GValueArray *array; +	guint i, max_n_colors; -  max_n_colors = MAX (n_colors, TERMINAL_PALETTE_SIZE); -  array = g_value_array_new (max_n_colors); -  for (i = 0; i < max_n_colors; ++i) -    g_value_array_append (array, NULL); +	max_n_colors = MAX (n_colors, TERMINAL_PALETTE_SIZE); +	array = g_value_array_new (max_n_colors); +	for (i = 0; i < max_n_colors; ++i) +		g_value_array_append (array, NULL); -  for (i = 0; i < n_colors; ++i) -    { -      GValue *value = g_value_array_get_nth (array, i); +	for (i = 0; i < n_colors; ++i) +	{ +		GValue *value = g_value_array_get_nth (array, i); -      g_value_init (value, GDK_TYPE_COLOR); -      g_value_set_boxed (value, &colors[i]); -    } +		g_value_init (value, GDK_TYPE_COLOR); +		g_value_set_boxed (value, &colors[i]); +	} -  /* If we haven't enough colours yet, fill up with the default palette */ -  for (i = n_colors; i < TERMINAL_PALETTE_SIZE; ++i) -    { -      GValue *value = g_value_array_get_nth (array, i); +	/* If we haven't enough colours yet, fill up with the default palette */ +	for (i = n_colors; i < TERMINAL_PALETTE_SIZE; ++i) +	{ +		GValue *value = g_value_array_get_nth (array, i); -      g_value_init (value, GDK_TYPE_COLOR); -      g_value_set_boxed (value, &DEFAULT_PALETTE[i]); -    } +		g_value_init (value, GDK_TYPE_COLOR); +		g_value_set_boxed (value, &DEFAULT_PALETTE[i]); +	} -  g_value_take_boxed (ret_value, array); +	g_value_take_boxed (ret_value, array);  }  static int @@ -388,44 +389,44 @@ values_equal (GParamSpec *pspec,                const GValue *va,                const GValue *vb)  { -  /* g_param_values_cmp isn't good enough for some types, since e.g. -   * it compares colours and font descriptions by pointer value, not -   * with the correct compare functions. Providing extra -   * PangoParamSpecFontDescription and GdkParamSpecColor wouldn't -   * have fixed this either, since it's unclear how to _order_ them. -   * Luckily we only need to check them for equality here. -   */ - -  if (g_param_values_cmp (pspec, va, vb) == 0) -    return TRUE; - -  if (G_PARAM_SPEC_VALUE_TYPE (pspec) == GDK_TYPE_COLOR) -    return gdk_color_equal (g_value_get_boxed (va), g_value_get_boxed (vb)); - -  if (G_PARAM_SPEC_VALUE_TYPE (pspec) == PANGO_TYPE_FONT_DESCRIPTION) -    return pango_font_description_equal (g_value_get_boxed (va), g_value_get_boxed (vb)); - -  if (G_IS_PARAM_SPEC_VALUE_ARRAY (pspec) && -      G_PARAM_SPEC_VALUE_TYPE (G_PARAM_SPEC_VALUE_ARRAY (pspec)->element_spec) == GDK_TYPE_COLOR) -    { -      GValueArray *ara, *arb; -      guint i; - -      ara = g_value_get_boxed (va); -      arb = g_value_get_boxed (vb); - -      if (!ara || !arb || ara->n_values != arb->n_values) -        return FALSE; -         -      for (i = 0; i < ara->n_values; ++i) -        if (!gdk_color_equal (g_value_get_boxed (g_value_array_get_nth (ara, i)), -                              g_value_get_boxed (g_value_array_get_nth (arb, i)))) -          return FALSE; - -      return TRUE; -    } - -  return FALSE; +	/* g_param_values_cmp isn't good enough for some types, since e.g. +	 * it compares colours and font descriptions by pointer value, not +	 * with the correct compare functions. Providing extra +	 * PangoParamSpecFontDescription and GdkParamSpecColor wouldn't +	 * have fixed this either, since it's unclear how to _order_ them. +	 * Luckily we only need to check them for equality here. +	 */ + +	if (g_param_values_cmp (pspec, va, vb) == 0) +		return TRUE; + +	if (G_PARAM_SPEC_VALUE_TYPE (pspec) == GDK_TYPE_COLOR) +		return gdk_color_equal (g_value_get_boxed (va), g_value_get_boxed (vb)); + +	if (G_PARAM_SPEC_VALUE_TYPE (pspec) == PANGO_TYPE_FONT_DESCRIPTION) +		return pango_font_description_equal (g_value_get_boxed (va), g_value_get_boxed (vb)); + +	if (G_IS_PARAM_SPEC_VALUE_ARRAY (pspec) && +	        G_PARAM_SPEC_VALUE_TYPE (G_PARAM_SPEC_VALUE_ARRAY (pspec)->element_spec) == GDK_TYPE_COLOR) +	{ +		GValueArray *ara, *arb; +		guint i; + +		ara = g_value_get_boxed (va); +		arb = g_value_get_boxed (vb); + +		if (!ara || !arb || ara->n_values != arb->n_values) +			return FALSE; + +		for (i = 0; i < ara->n_values; ++i) +			if (!gdk_color_equal (g_value_get_boxed (g_value_array_get_nth (ara, i)), +			                      g_value_get_boxed (g_value_array_get_nth (arb, i)))) +				return FALSE; + +		return TRUE; +	} + +	return FALSE;  }  static void @@ -434,540 +435,540 @@ ensure_pixbuf_property (TerminalProfile *profile,                          guint pixbuf_prop_id,                          gboolean *load_failed)  { -  TerminalProfilePrivate *priv = profile->priv; -  GValue *path_value, *pixbuf_value; -  GdkPixbuf *pixbuf; -  const char *path_utf8; -  char *path; -  GError *error = NULL; - -  pixbuf_value = g_value_array_get_nth (priv->properties, pixbuf_prop_id); - -  pixbuf = g_value_get_object (pixbuf_value); -  if (pixbuf) -    return; - -  if (*load_failed) -    return; - -  path_value = g_value_array_get_nth (priv->properties, path_prop_id); -  path_utf8 = g_value_get_string (path_value); -  if (!path_utf8 || !path_utf8[0]) -    goto failed; - -  path = g_filename_from_utf8 (path_utf8, -1, NULL, NULL, NULL); -  if (!path) -    goto failed; - -  pixbuf = gdk_pixbuf_new_from_file (path, &error); -  if (!pixbuf) -    { -      _terminal_debug_print (TERMINAL_DEBUG_PROFILE, -                             "Failed to load image \"%s\": %s\n", -                             path, error->message); - -      g_error_free (error); -      g_free (path); -      goto failed; -    } -           -  g_value_take_object (pixbuf_value, pixbuf); -  g_free (path); -  return; +	TerminalProfilePrivate *priv = profile->priv; +	GValue *path_value, *pixbuf_value; +	GdkPixbuf *pixbuf; +	const char *path_utf8; +	char *path; +	GError *error = NULL; + +	pixbuf_value = g_value_array_get_nth (priv->properties, pixbuf_prop_id); + +	pixbuf = g_value_get_object (pixbuf_value); +	if (pixbuf) +		return; + +	if (*load_failed) +		return; + +	path_value = g_value_array_get_nth (priv->properties, path_prop_id); +	path_utf8 = g_value_get_string (path_value); +	if (!path_utf8 || !path_utf8[0]) +		goto failed; + +	path = g_filename_from_utf8 (path_utf8, -1, NULL, NULL, NULL); +	if (!path) +		goto failed; + +	pixbuf = gdk_pixbuf_new_from_file (path, &error); +	if (!pixbuf) +	{ +		_terminal_debug_print (TERMINAL_DEBUG_PROFILE, +		                       "Failed to load image \"%s\": %s\n", +		                       path, error->message); + +		g_error_free (error); +		g_free (path); +		goto failed; +	} + +	g_value_take_object (pixbuf_value, pixbuf); +	g_free (path); +	return;  failed: -  *load_failed = TRUE; +	*load_failed = TRUE;  }  static void  terminal_profile_reset_property_internal (TerminalProfile *profile, -                                          GParamSpec *pspec, -                                          gboolean notify) +        GParamSpec *pspec, +        gboolean notify)  { -  TerminalProfilePrivate *priv = profile->priv; -  GValue value_ = { 0, }; -  GValue *value; - -  if (notify) -    { -      value = &value_; -      g_value_init (value, G_PARAM_SPEC_VALUE_TYPE (pspec)); -    } -  else -    value = g_value_array_get_nth (priv->properties, pspec->param_id); -  g_assert (value != NULL); - -  /* A few properties don't have defaults via the param spec; set them explicitly */ -  switch (pspec->param_id) -    { -      case PROP_FOREGROUND_COLOR: -      case PROP_BOLD_COLOR: -        g_value_set_boxed (value, &DEFAULT_FOREGROUND_COLOR); -        break; - -      case PROP_BACKGROUND_COLOR: -        g_value_set_boxed (value, &DEFAULT_BACKGROUND_COLOR); -        break; - -      case PROP_FONT: -        g_value_take_boxed (value, pango_font_description_from_string (DEFAULT_FONT)); -        break; - -      case PROP_PALETTE: -        set_value_from_palette (value, DEFAULT_PALETTE, TERMINAL_PALETTE_SIZE); -        break; - -      default: -        g_param_value_set_default (pspec, value); -        break; -    } - -  if (notify) -    { -      g_object_set_property (G_OBJECT (profile), pspec->name, value); -      g_value_unset (value); -    } +	TerminalProfilePrivate *priv = profile->priv; +	GValue value_ = { 0, }; +	GValue *value; + +	if (notify) +	{ +		value = &value_; +		g_value_init (value, G_PARAM_SPEC_VALUE_TYPE (pspec)); +	} +	else +		value = g_value_array_get_nth (priv->properties, pspec->param_id); +	g_assert (value != NULL); + +	/* A few properties don't have defaults via the param spec; set them explicitly */ +	switch (pspec->param_id) +	{ +	case PROP_FOREGROUND_COLOR: +	case PROP_BOLD_COLOR: +		g_value_set_boxed (value, &DEFAULT_FOREGROUND_COLOR); +		break; + +	case PROP_BACKGROUND_COLOR: +		g_value_set_boxed (value, &DEFAULT_BACKGROUND_COLOR); +		break; + +	case PROP_FONT: +		g_value_take_boxed (value, pango_font_description_from_string (DEFAULT_FONT)); +		break; + +	case PROP_PALETTE: +		set_value_from_palette (value, DEFAULT_PALETTE, TERMINAL_PALETTE_SIZE); +		break; + +	default: +		g_param_value_set_default (pspec, value); +		break; +	} + +	if (notify) +	{ +		g_object_set_property (G_OBJECT (profile), pspec->name, value); +		g_value_unset (value); +	}  }  static void  terminal_profile_mateconf_notify_cb (MateConfClient *client, -                                  guint        cnxn_id, -                                  MateConfEntry  *entry, -                                  gpointer     user_data) +                                     guint        cnxn_id, +                                     MateConfEntry  *entry, +                                     gpointer     user_data)  { -  TerminalProfile *profile = TERMINAL_PROFILE (user_data); -  TerminalProfilePrivate *priv = profile->priv; -  TerminalProfileClass *klass; -  const char *key; -  MateConfValue *mateconf_value; -  GParamSpec *pspec; -  GValue value = { 0, }; -  gboolean equal; -  gboolean force_set = FALSE; - -  key = mateconf_entry_get_key (entry); -  if (!key || !g_str_has_prefix (key, priv->profile_dir)) -    return; - -  _terminal_debug_print (TERMINAL_DEBUG_PROFILE, -                         "MateConf notification for key %s [%s]\n", -                         key, -                         mateconf_entry_get_is_writable (entry) ? "writable" : "LOCKED"); - -  key += strlen (priv->profile_dir); -  if (!key[0]) -    return; - -  key++; -  klass = TERMINAL_PROFILE_GET_CLASS (profile); -  pspec = g_hash_table_lookup (klass->mateconf_keys, key); -  if (!pspec) -    return; /* ignore unknown keys, for future extensibility */ - -  priv->locked[pspec->param_id] = !mateconf_entry_get_is_writable (entry); - -  mateconf_value = mateconf_entry_get_value (entry); -  if (!mateconf_value) -    return; - -  g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec)); - -  if (G_IS_PARAM_SPEC_BOOLEAN (pspec)) -    { -      if (mateconf_value->type != MATECONF_VALUE_BOOL) -        goto out; - -      g_value_set_boolean (&value, mateconf_value_get_bool (mateconf_value)); -    } -  else if (G_IS_PARAM_SPEC_STRING (pspec)) -    { -      if (mateconf_value->type != MATECONF_VALUE_STRING) -        goto out; - -      g_value_set_string (&value, mateconf_value_get_string (mateconf_value)); -    } -  else if (G_IS_PARAM_SPEC_ENUM (pspec)) -    { -      const GEnumValue *eval; -      int enum_value; - -      if (mateconf_value->type != MATECONF_VALUE_STRING) -        goto out; - -      eval = g_enum_get_value_by_nick (G_PARAM_SPEC_ENUM (pspec)->enum_class, -                                       mateconf_value_get_string (mateconf_value)); -      if (eval) -        enum_value = eval->value; -      else if (G_PARAM_SPEC_VALUE_TYPE (pspec) == vte_terminal_erase_binding_get_type ()) -        { -          /* Backward compatibility */ -          if (!mateconf_string_to_enum ((MateConfEnumStringPair*) erase_bindings, -                                     mateconf_value_get_string (mateconf_value), -                                     &enum_value)) -            goto out; -        } -      else -        goto out; - -      g_value_set_enum (&value, enum_value); -    } -  else if (G_PARAM_SPEC_VALUE_TYPE (pspec) == GDK_TYPE_COLOR) -    { -      GdkColor color; - -      if (mateconf_value->type != MATECONF_VALUE_STRING) -        goto out; - -      if (!gdk_color_parse (mateconf_value_get_string (mateconf_value), &color)) -        goto out; - -      g_value_set_boxed (&value, &color); -    } -  else if (G_PARAM_SPEC_VALUE_TYPE (pspec) == PANGO_TYPE_FONT_DESCRIPTION) -    { -      if (mateconf_value->type != MATECONF_VALUE_STRING) -        goto out; - -      g_value_take_boxed (&value, pango_font_description_from_string (mateconf_value_get_string (mateconf_value))); -    } -  else if (G_IS_PARAM_SPEC_DOUBLE (pspec)) -    { -      if (mateconf_value->type != MATECONF_VALUE_FLOAT) -        goto out; - -      g_value_set_double (&value, mateconf_value_get_float (mateconf_value)); -    } -  else if (G_IS_PARAM_SPEC_INT (pspec)) -    { -      if (mateconf_value->type != MATECONF_VALUE_INT) -        goto out; - -      g_value_set_int (&value, mateconf_value_get_int (mateconf_value)); -    } -  else if (G_IS_PARAM_SPEC_VALUE_ARRAY (pspec) && -           G_PARAM_SPEC_VALUE_TYPE (G_PARAM_SPEC_VALUE_ARRAY (pspec)->element_spec) == GDK_TYPE_COLOR) -    { -      char **color_strings; -      GdkColor *colors; -      int n_colors, i; - -      if (mateconf_value->type != MATECONF_VALUE_STRING) -        goto out; - -      color_strings = g_strsplit (mateconf_value_get_string (mateconf_value), ":", -1); -      if (!color_strings) -        goto out; - -      n_colors = g_strv_length (color_strings); -      colors = g_new0 (GdkColor, n_colors); -      for (i = 0; i < n_colors; ++i) -        { -          if (!gdk_color_parse (color_strings[i], &colors[i])) -            continue; /* ignore errors */ -        } -      g_strfreev (color_strings); - -      /* We continue even with a palette size != TERMINAL_PALETTE_SIZE, -       * so we can change the palette size in future versions without -       * causing too many issues. -       */ -      set_value_from_palette (&value, colors, n_colors); -      g_free (colors); -    } -  else -    { -      g_printerr ("Unhandled value type %s of pspec %s\n", g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec)), pspec->name); -      goto out; -    } - -  if (g_param_value_validate (pspec, &value)) -    { -      _terminal_debug_print (TERMINAL_DEBUG_PROFILE, -                             "Invalid value in mateconf for key %s was changed to comply with pspec %s\n", -                             mateconf_entry_get_key (entry), pspec->name); - -      force_set = TRUE; -    } - -  /* Only set the property if the value is different than our current value, -   * so we don't go into an infinite loop. -   */ -  equal = values_equal (pspec, &value, g_value_array_get_nth (priv->properties, pspec->param_id)); +	TerminalProfile *profile = TERMINAL_PROFILE (user_data); +	TerminalProfilePrivate *priv = profile->priv; +	TerminalProfileClass *klass; +	const char *key; +	MateConfValue *mateconf_value; +	GParamSpec *pspec; +	GValue value = { 0, }; +	gboolean equal; +	gboolean force_set = FALSE; + +	key = mateconf_entry_get_key (entry); +	if (!key || !g_str_has_prefix (key, priv->profile_dir)) +		return; + +	_terminal_debug_print (TERMINAL_DEBUG_PROFILE, +	                       "MateConf notification for key %s [%s]\n", +	                       key, +	                       mateconf_entry_get_is_writable (entry) ? "writable" : "LOCKED"); + +	key += strlen (priv->profile_dir); +	if (!key[0]) +		return; + +	key++; +	klass = TERMINAL_PROFILE_GET_CLASS (profile); +	pspec = g_hash_table_lookup (klass->mateconf_keys, key); +	if (!pspec) +		return; /* ignore unknown keys, for future extensibility */ + +	priv->locked[pspec->param_id] = !mateconf_entry_get_is_writable (entry); + +	mateconf_value = mateconf_entry_get_value (entry); +	if (!mateconf_value) +		return; + +	g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec)); + +	if (G_IS_PARAM_SPEC_BOOLEAN (pspec)) +	{ +		if (mateconf_value->type != MATECONF_VALUE_BOOL) +			goto out; + +		g_value_set_boolean (&value, mateconf_value_get_bool (mateconf_value)); +	} +	else if (G_IS_PARAM_SPEC_STRING (pspec)) +	{ +		if (mateconf_value->type != MATECONF_VALUE_STRING) +			goto out; + +		g_value_set_string (&value, mateconf_value_get_string (mateconf_value)); +	} +	else if (G_IS_PARAM_SPEC_ENUM (pspec)) +	{ +		const GEnumValue *eval; +		int enum_value; + +		if (mateconf_value->type != MATECONF_VALUE_STRING) +			goto out; + +		eval = g_enum_get_value_by_nick (G_PARAM_SPEC_ENUM (pspec)->enum_class, +		                                 mateconf_value_get_string (mateconf_value)); +		if (eval) +			enum_value = eval->value; +		else if (G_PARAM_SPEC_VALUE_TYPE (pspec) == vte_terminal_erase_binding_get_type ()) +		{ +			/* Backward compatibility */ +			if (!mateconf_string_to_enum ((MateConfEnumStringPair*) erase_bindings, +			                              mateconf_value_get_string (mateconf_value), +			                              &enum_value)) +				goto out; +		} +		else +			goto out; + +		g_value_set_enum (&value, enum_value); +	} +	else if (G_PARAM_SPEC_VALUE_TYPE (pspec) == GDK_TYPE_COLOR) +	{ +		GdkColor color; + +		if (mateconf_value->type != MATECONF_VALUE_STRING) +			goto out; + +		if (!gdk_color_parse (mateconf_value_get_string (mateconf_value), &color)) +			goto out; + +		g_value_set_boxed (&value, &color); +	} +	else if (G_PARAM_SPEC_VALUE_TYPE (pspec) == PANGO_TYPE_FONT_DESCRIPTION) +	{ +		if (mateconf_value->type != MATECONF_VALUE_STRING) +			goto out; + +		g_value_take_boxed (&value, pango_font_description_from_string (mateconf_value_get_string (mateconf_value))); +	} +	else if (G_IS_PARAM_SPEC_DOUBLE (pspec)) +	{ +		if (mateconf_value->type != MATECONF_VALUE_FLOAT) +			goto out; + +		g_value_set_double (&value, mateconf_value_get_float (mateconf_value)); +	} +	else if (G_IS_PARAM_SPEC_INT (pspec)) +	{ +		if (mateconf_value->type != MATECONF_VALUE_INT) +			goto out; + +		g_value_set_int (&value, mateconf_value_get_int (mateconf_value)); +	} +	else if (G_IS_PARAM_SPEC_VALUE_ARRAY (pspec) && +	         G_PARAM_SPEC_VALUE_TYPE (G_PARAM_SPEC_VALUE_ARRAY (pspec)->element_spec) == GDK_TYPE_COLOR) +	{ +		char **color_strings; +		GdkColor *colors; +		int n_colors, i; + +		if (mateconf_value->type != MATECONF_VALUE_STRING) +			goto out; + +		color_strings = g_strsplit (mateconf_value_get_string (mateconf_value), ":", -1); +		if (!color_strings) +			goto out; + +		n_colors = g_strv_length (color_strings); +		colors = g_new0 (GdkColor, n_colors); +		for (i = 0; i < n_colors; ++i) +		{ +			if (!gdk_color_parse (color_strings[i], &colors[i])) +				continue; /* ignore errors */ +		} +		g_strfreev (color_strings); + +		/* We continue even with a palette size != TERMINAL_PALETTE_SIZE, +		 * so we can change the palette size in future versions without +		 * causing too many issues. +		 */ +		set_value_from_palette (&value, colors, n_colors); +		g_free (colors); +	} +	else +	{ +		g_printerr ("Unhandled value type %s of pspec %s\n", g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec)), pspec->name); +		goto out; +	} + +	if (g_param_value_validate (pspec, &value)) +	{ +		_terminal_debug_print (TERMINAL_DEBUG_PROFILE, +		                       "Invalid value in mateconf for key %s was changed to comply with pspec %s\n", +		                       mateconf_entry_get_key (entry), pspec->name); + +		force_set = TRUE; +	} + +	/* Only set the property if the value is different than our current value, +	 * so we don't go into an infinite loop. +	 */ +	equal = values_equal (pspec, &value, g_value_array_get_nth (priv->properties, pspec->param_id));  #ifdef MATE_ENABLE_DEBUG -  _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_PROFILE) -    { -      if (!equal) -        _terminal_debug_print (TERMINAL_DEBUG_PROFILE, -                              "Setting property %s to a different value\n" -                                "  now: %s\n" -                                "  new: %s\n", -                                pspec->name, -                                g_strdup_value_contents (g_value_array_get_nth (priv->properties, pspec->param_id)), -                                g_strdup_value_contents (&value)); -    } +	_TERMINAL_DEBUG_IF (TERMINAL_DEBUG_PROFILE) +	{ +		if (!equal) +			_terminal_debug_print (TERMINAL_DEBUG_PROFILE, +			                       "Setting property %s to a different value\n" +			                       "  now: %s\n" +			                       "  new: %s\n", +			                       pspec->name, +			                       g_strdup_value_contents (g_value_array_get_nth (priv->properties, pspec->param_id)), +			                       g_strdup_value_contents (&value)); +	}  #endif -  if (!equal || force_set) -    { -      priv->mateconf_notification_pspec = pspec; -      g_object_set_property (G_OBJECT (profile), pspec->name, &value); -      priv->mateconf_notification_pspec = NULL; -    } +	if (!equal || force_set) +	{ +		priv->mateconf_notification_pspec = pspec; +		g_object_set_property (G_OBJECT (profile), pspec->name, &value); +		priv->mateconf_notification_pspec = NULL; +	}  out: -  /* FIXME: if we arrive here through goto in the error cases, -   * should we maybe reset the property to its default value? -   */ +	/* FIXME: if we arrive here through goto in the error cases, +	 * should we maybe reset the property to its default value? +	 */ -  g_value_unset (&value); +	g_value_unset (&value);  }  static void  terminal_profile_mateconf_changeset_add (TerminalProfile *profile, -                                      MateConfChangeSet *changeset, -                                      GParamSpec *pspec) +        MateConfChangeSet *changeset, +        GParamSpec *pspec)  { -  TerminalProfilePrivate *priv = profile->priv; -  const char *mateconf_key; -  char *key; -  const GValue *value; +	TerminalProfilePrivate *priv = profile->priv; +	const char *mateconf_key; +	char *key; +	const GValue *value; -  /* FIXME: do this? */ +	/* FIXME: do this? */  #if 0 -  if (priv->locked[pspec->param_id]) -    return; +	if (priv->locked[pspec->param_id]) +		return; -  if (!mateconf_client_key_is_writable (priv->conf, mateconf_key, NULL)) -    return; +	if (!mateconf_client_key_is_writable (priv->conf, mateconf_key, NULL)) +		return;  #endif -   -  mateconf_key = g_param_spec_get_qdata (pspec, mateconf_key_quark); -  if (!mateconf_key) -    return; - -  key = mateconf_concat_dir_and_key (priv->profile_dir, mateconf_key); -  value = g_value_array_get_nth (priv->properties, pspec->param_id); - -  _terminal_debug_print (TERMINAL_DEBUG_PROFILE, -                         "Adding pspec %s with value %s to the mateconf changeset\n", -                         pspec->name, g_strdup_value_contents (value)); - -  if (G_IS_PARAM_SPEC_BOOLEAN (pspec)) -    mateconf_change_set_set_bool (changeset, key, g_value_get_boolean (value)); -  else if (G_IS_PARAM_SPEC_STRING (pspec)) -    { -      const char *str; - -      str = g_value_get_string (value); -      mateconf_change_set_set_string (changeset, key, str ? str : ""); -    } -  else if (G_IS_PARAM_SPEC_ENUM (pspec)) -    { -      const GEnumValue *eval; -      const char *string; - -      eval = g_enum_get_value (G_PARAM_SPEC_ENUM (pspec)->enum_class, g_value_get_enum (value)); - -      if (G_PARAM_SPEC_VALUE_TYPE (pspec) == vte_terminal_erase_binding_get_type ()) -        { -          /* Backward compatibility */ -          string = mateconf_enum_to_string ((MateConfEnumStringPair*) erase_bindings, g_value_get_enum (value)); -          if (!string) -            goto cleanup; -        } -      else if (eval) -        string = eval->value_nick; -      else -        goto cleanup; - -      mateconf_change_set_set_string (changeset, key, string); -    } -  else if (G_PARAM_SPEC_VALUE_TYPE (pspec) == GDK_TYPE_COLOR) -    { -      GdkColor *color; -      char str[16]; - -      color = g_value_get_boxed (value); -      if (!color) -        goto cleanup; - -      g_snprintf (str, sizeof (str), -                  "#%04X%04X%04X", -                  color->red, -                  color->green, -                  color->blue); - -      mateconf_change_set_set_string (changeset, key, str); -    } -  else if (G_PARAM_SPEC_VALUE_TYPE (pspec) == PANGO_TYPE_FONT_DESCRIPTION) -    { -      PangoFontDescription *font_desc; -      char *font; - -      font_desc = g_value_get_boxed (value); -      if (!font_desc) -        goto cleanup; - -      font = pango_font_description_to_string (font_desc); -      mateconf_change_set_set_string (changeset, key, font); -      g_free (font); -    } -  else if (G_IS_PARAM_SPEC_DOUBLE (pspec)) -    mateconf_change_set_set_float (changeset, key, (float) g_value_get_double (value)); -  else if (G_IS_PARAM_SPEC_INT (pspec)) -    mateconf_change_set_set_int (changeset, key, g_value_get_int (value)); -  else if (G_IS_PARAM_SPEC_VALUE_ARRAY (pspec) && -           G_PARAM_SPEC_VALUE_TYPE (G_PARAM_SPEC_VALUE_ARRAY (pspec)->element_spec) == GDK_TYPE_COLOR) -    { -      GValueArray *array; -      GString *string; -      guint n_colors, i; - -      /* We need to do this ourselves, because the gtk_color_selection_palette_to_string -       * does not carry all the bytes, and xterm's palette is messed up... -       */ - -      array = g_value_get_boxed (value); -      if (!array) -        goto cleanup; - -      n_colors = array->n_values; -      string = g_string_sized_new (n_colors * (1 /* # */ + 3 * 4) + n_colors /* : separators and terminating \0 */); -      for (i = 0; i < n_colors; ++i) -        { -          GdkColor *color; - -          if (i > 0) -            g_string_append_c (string, ':'); - -          color = g_value_get_boxed (g_value_array_get_nth (array, i)); -          if (!color) -            continue; - -          g_string_append_printf (string, -                                  "#%04X%04X%04X", -                                  color->red, -                                  color->green, -                                  color->blue); -        } - -      mateconf_change_set_set_string (changeset, key, string->str); -      g_string_free (string, TRUE); -    } -  else -    g_printerr ("Unhandled value type %s of pspec %s\n", g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec)), pspec->name); + +	mateconf_key = g_param_spec_get_qdata (pspec, mateconf_key_quark); +	if (!mateconf_key) +		return; + +	key = mateconf_concat_dir_and_key (priv->profile_dir, mateconf_key); +	value = g_value_array_get_nth (priv->properties, pspec->param_id); + +	_terminal_debug_print (TERMINAL_DEBUG_PROFILE, +	                       "Adding pspec %s with value %s to the mateconf changeset\n", +	                       pspec->name, g_strdup_value_contents (value)); + +	if (G_IS_PARAM_SPEC_BOOLEAN (pspec)) +		mateconf_change_set_set_bool (changeset, key, g_value_get_boolean (value)); +	else if (G_IS_PARAM_SPEC_STRING (pspec)) +	{ +		const char *str; + +		str = g_value_get_string (value); +		mateconf_change_set_set_string (changeset, key, str ? str : ""); +	} +	else if (G_IS_PARAM_SPEC_ENUM (pspec)) +	{ +		const GEnumValue *eval; +		const char *string; + +		eval = g_enum_get_value (G_PARAM_SPEC_ENUM (pspec)->enum_class, g_value_get_enum (value)); + +		if (G_PARAM_SPEC_VALUE_TYPE (pspec) == vte_terminal_erase_binding_get_type ()) +		{ +			/* Backward compatibility */ +			string = mateconf_enum_to_string ((MateConfEnumStringPair*) erase_bindings, g_value_get_enum (value)); +			if (!string) +				goto cleanup; +		} +		else if (eval) +			string = eval->value_nick; +		else +			goto cleanup; + +		mateconf_change_set_set_string (changeset, key, string); +	} +	else if (G_PARAM_SPEC_VALUE_TYPE (pspec) == GDK_TYPE_COLOR) +	{ +		GdkColor *color; +		char str[16]; + +		color = g_value_get_boxed (value); +		if (!color) +			goto cleanup; + +		g_snprintf (str, sizeof (str), +		            "#%04X%04X%04X", +		            color->red, +		            color->green, +		            color->blue); + +		mateconf_change_set_set_string (changeset, key, str); +	} +	else if (G_PARAM_SPEC_VALUE_TYPE (pspec) == PANGO_TYPE_FONT_DESCRIPTION) +	{ +		PangoFontDescription *font_desc; +		char *font; + +		font_desc = g_value_get_boxed (value); +		if (!font_desc) +			goto cleanup; + +		font = pango_font_description_to_string (font_desc); +		mateconf_change_set_set_string (changeset, key, font); +		g_free (font); +	} +	else if (G_IS_PARAM_SPEC_DOUBLE (pspec)) +		mateconf_change_set_set_float (changeset, key, (float) g_value_get_double (value)); +	else if (G_IS_PARAM_SPEC_INT (pspec)) +		mateconf_change_set_set_int (changeset, key, g_value_get_int (value)); +	else if (G_IS_PARAM_SPEC_VALUE_ARRAY (pspec) && +	         G_PARAM_SPEC_VALUE_TYPE (G_PARAM_SPEC_VALUE_ARRAY (pspec)->element_spec) == GDK_TYPE_COLOR) +	{ +		GValueArray *array; +		GString *string; +		guint n_colors, i; + +		/* We need to do this ourselves, because the gtk_color_selection_palette_to_string +		 * does not carry all the bytes, and xterm's palette is messed up... +		 */ + +		array = g_value_get_boxed (value); +		if (!array) +			goto cleanup; + +		n_colors = array->n_values; +		string = g_string_sized_new (n_colors * (1 /* # */ + 3 * 4) + n_colors /* : separators and terminating \0 */); +		for (i = 0; i < n_colors; ++i) +		{ +			GdkColor *color; + +			if (i > 0) +				g_string_append_c (string, ':'); + +			color = g_value_get_boxed (g_value_array_get_nth (array, i)); +			if (!color) +				continue; + +			g_string_append_printf (string, +			                        "#%04X%04X%04X", +			                        color->red, +			                        color->green, +			                        color->blue); +		} + +		mateconf_change_set_set_string (changeset, key, string->str); +		g_string_free (string, TRUE); +	} +	else +		g_printerr ("Unhandled value type %s of pspec %s\n", g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec)), pspec->name);  cleanup: -  g_free (key); +	g_free (key);  }  static void  terminal_profile_save (TerminalProfile *profile)  { -  TerminalProfilePrivate *priv = profile->priv; -  MateConfChangeSet *changeset; -  GSList *l; -  GError *error = NULL; +	TerminalProfilePrivate *priv = profile->priv; +	MateConfChangeSet *changeset; +	GSList *l; +	GError *error = NULL; -  priv->save_idle_id = 0; +	priv->save_idle_id = 0; -  changeset = mateconf_change_set_new (); +	changeset = mateconf_change_set_new (); -  for (l = priv->dirty_pspecs; l != NULL; l = l->next) -    { -      GParamSpec *pspec = (GParamSpec *) l->data; +	for (l = priv->dirty_pspecs; l != NULL; l = l->next) +	{ +		GParamSpec *pspec = (GParamSpec *) l->data; -      if (pspec->owner_type != TERMINAL_TYPE_PROFILE) -        continue; +		if (pspec->owner_type != TERMINAL_TYPE_PROFILE) +			continue; -      if ((pspec->flags & G_PARAM_WRITABLE) == 0) -        continue; +		if ((pspec->flags & G_PARAM_WRITABLE) == 0) +			continue; -      terminal_profile_mateconf_changeset_add (profile, changeset, pspec); -    } +		terminal_profile_mateconf_changeset_add (profile, changeset, pspec); +	} -  g_slist_free (priv->dirty_pspecs); -  priv->dirty_pspecs = NULL; +	g_slist_free (priv->dirty_pspecs); +	priv->dirty_pspecs = NULL; -  if (!mateconf_client_commit_change_set (priv->conf, changeset, TRUE, &error)) -    { -      g_message ("Failed to commit the changeset to mateconf: %s", error->message); -      g_error_free (error); -    } +	if (!mateconf_client_commit_change_set (priv->conf, changeset, TRUE, &error)) +	{ +		g_message ("Failed to commit the changeset to mateconf: %s", error->message); +		g_error_free (error); +	} -  mateconf_change_set_unref (changeset); +	mateconf_change_set_unref (changeset);  }  static gboolean  terminal_profile_save_idle_cb (TerminalProfile *profile)  { -  terminal_profile_save (profile); +	terminal_profile_save (profile); -  /* don't run again */ -  return FALSE;  +	/* don't run again */ +	return FALSE;  }  static void  terminal_profile_schedule_save (TerminalProfile *profile,                                  GParamSpec *pspec)  { -  TerminalProfilePrivate *priv = profile->priv; +	TerminalProfilePrivate *priv = profile->priv; -  g_assert (pspec != NULL); +	g_assert (pspec != NULL); -  if (!g_slist_find (priv->dirty_pspecs, pspec)) -    priv->dirty_pspecs = g_slist_prepend (priv->dirty_pspecs, pspec); +	if (!g_slist_find (priv->dirty_pspecs, pspec)) +		priv->dirty_pspecs = g_slist_prepend (priv->dirty_pspecs, pspec); -  if (priv->save_idle_id != 0) -    return; +	if (priv->save_idle_id != 0) +		return; -  priv->save_idle_id = g_idle_add ((GSourceFunc) terminal_profile_save_idle_cb, profile); +	priv->save_idle_id = g_idle_add ((GSourceFunc) terminal_profile_save_idle_cb, profile);  }  static void  terminal_profile_init (TerminalProfile *profile)  { -  TerminalProfilePrivate *priv; -  GObjectClass *object_class; -  GParamSpec **pspecs; -  guint n_pspecs, i; +	TerminalProfilePrivate *priv; +	GObjectClass *object_class; +	GParamSpec **pspecs; +	guint n_pspecs, i; -  priv = profile->priv = G_TYPE_INSTANCE_GET_PRIVATE (profile, TERMINAL_TYPE_PROFILE, TerminalProfilePrivate); +	priv = profile->priv = G_TYPE_INSTANCE_GET_PRIVATE (profile, TERMINAL_TYPE_PROFILE, TerminalProfilePrivate); -  priv->mateconf_notification_pspec = NULL; +	priv->mateconf_notification_pspec = NULL; -  priv->conf = mateconf_client_get_default (); +	priv->conf = mateconf_client_get_default (); -  priv->locked = g_new0 (gboolean, LAST_PROP); +	priv->locked = g_new0 (gboolean, LAST_PROP); -  priv->properties = g_value_array_new (LAST_PROP); -  for (i = 0; i < LAST_PROP; ++i) -    g_value_array_append (priv->properties, NULL); +	priv->properties = g_value_array_new (LAST_PROP); +	for (i = 0; i < LAST_PROP; ++i) +		g_value_array_append (priv->properties, NULL); -  pspecs = g_object_class_list_properties (G_OBJECT_CLASS (TERMINAL_PROFILE_GET_CLASS (profile)), &n_pspecs); -  for (i = 0; i < n_pspecs; ++i) -    { -      GParamSpec *pspec = pspecs[i]; -      GValue *value; +	pspecs = g_object_class_list_properties (G_OBJECT_CLASS (TERMINAL_PROFILE_GET_CLASS (profile)), &n_pspecs); +	for (i = 0; i < n_pspecs; ++i) +	{ +		GParamSpec *pspec = pspecs[i]; +		GValue *value; -      if (pspec->owner_type != TERMINAL_TYPE_PROFILE) -        continue; +		if (pspec->owner_type != TERMINAL_TYPE_PROFILE) +			continue; -      g_assert (pspec->param_id < LAST_PROP); -      value = g_value_array_get_nth (priv->properties, pspec->param_id); -      g_value_init (value, pspec->value_type); -      g_param_value_set_default (pspec, value); -    } +		g_assert (pspec->param_id < LAST_PROP); +		value = g_value_array_get_nth (priv->properties, pspec->param_id); +		g_value_init (value, pspec->value_type); +		g_param_value_set_default (pspec, value); +	} -  g_free (pspecs); +	g_free (pspecs); -  /* A few properties don't have defaults via the param spec; set them explicitly */ -  object_class = G_OBJECT_CLASS (TERMINAL_PROFILE_GET_CLASS (profile)); -  terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_FOREGROUND_COLOR), FALSE); -  terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_BOLD_COLOR), FALSE); -  terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_BACKGROUND_COLOR), FALSE); -  terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_FONT), FALSE); -  terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_PALETTE), FALSE); +	/* A few properties don't have defaults via the param spec; set them explicitly */ +	object_class = G_OBJECT_CLASS (TERMINAL_PROFILE_GET_CLASS (profile)); +	terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_FOREGROUND_COLOR), FALSE); +	terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_BOLD_COLOR), FALSE); +	terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_BACKGROUND_COLOR), FALSE); +	terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_FONT), FALSE); +	terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_PALETTE), FALSE);  }  static GObject * @@ -975,89 +976,89 @@ terminal_profile_constructor (GType type,                                guint n_construct_properties,                                GObjectConstructParam *construct_params)  { -  GObject *object; -  TerminalProfile *profile; -  TerminalProfilePrivate *priv; -  const char *name; -  GParamSpec **pspecs; -  guint n_pspecs, i; - -  object = G_OBJECT_CLASS (terminal_profile_parent_class)->constructor -            (type, n_construct_properties, construct_params); - -  profile = TERMINAL_PROFILE (object); -  priv = profile->priv; - -  name = g_value_get_string (g_value_array_get_nth (priv->properties, PROP_NAME)); -  g_assert (name != NULL); - -  /* Now load those properties from mateconf that were not set as construction params */ -  pspecs = g_object_class_list_properties (G_OBJECT_CLASS (TERMINAL_PROFILE_GET_CLASS (profile)), &n_pspecs); -  for (i = 0; i < n_pspecs; ++i) -    { -      GParamSpec *pspec = pspecs[i]; -      guint j; -      gboolean is_construct = FALSE; -      const char *mateconf_key; -      char *key; - -      if (pspec->owner_type != TERMINAL_TYPE_PROFILE) -        continue; - -      if ((pspec->flags & G_PARAM_WRITABLE) == 0 || -          (pspec->flags & G_PARAM_CONSTRUCT_ONLY) != 0) -        continue; - -      for (j = 0; j < n_construct_properties; ++j) -        if (pspec == construct_params[j].pspec) -          { -            is_construct = TRUE; -            break; -          } - -      if (is_construct) -        continue; - -      mateconf_key = g_param_spec_get_qdata (pspec, mateconf_key_quark); -      if (!mateconf_key) -        continue; - -      key = mateconf_concat_dir_and_key (priv->profile_dir, mateconf_key); -      mateconf_client_notify (priv->conf, key); -      g_free (key); -    } - -  g_free (pspecs); - -  return object; +	GObject *object; +	TerminalProfile *profile; +	TerminalProfilePrivate *priv; +	const char *name; +	GParamSpec **pspecs; +	guint n_pspecs, i; + +	object = G_OBJECT_CLASS (terminal_profile_parent_class)->constructor +	         (type, n_construct_properties, construct_params); + +	profile = TERMINAL_PROFILE (object); +	priv = profile->priv; + +	name = g_value_get_string (g_value_array_get_nth (priv->properties, PROP_NAME)); +	g_assert (name != NULL); + +	/* Now load those properties from mateconf that were not set as construction params */ +	pspecs = g_object_class_list_properties (G_OBJECT_CLASS (TERMINAL_PROFILE_GET_CLASS (profile)), &n_pspecs); +	for (i = 0; i < n_pspecs; ++i) +	{ +		GParamSpec *pspec = pspecs[i]; +		guint j; +		gboolean is_construct = FALSE; +		const char *mateconf_key; +		char *key; + +		if (pspec->owner_type != TERMINAL_TYPE_PROFILE) +			continue; + +		if ((pspec->flags & G_PARAM_WRITABLE) == 0 || +		        (pspec->flags & G_PARAM_CONSTRUCT_ONLY) != 0) +			continue; + +		for (j = 0; j < n_construct_properties; ++j) +			if (pspec == construct_params[j].pspec) +			{ +				is_construct = TRUE; +				break; +			} + +		if (is_construct) +			continue; + +		mateconf_key = g_param_spec_get_qdata (pspec, mateconf_key_quark); +		if (!mateconf_key) +			continue; + +		key = mateconf_concat_dir_and_key (priv->profile_dir, mateconf_key); +		mateconf_client_notify (priv->conf, key); +		g_free (key); +	} + +	g_free (pspecs); + +	return object;  }  static void  terminal_profile_finalize (GObject *object)  { -  TerminalProfile *profile = TERMINAL_PROFILE (object); -  TerminalProfilePrivate *priv = profile->priv; +	TerminalProfile *profile = TERMINAL_PROFILE (object); +	TerminalProfilePrivate *priv = profile->priv; -  mateconf_client_notify_remove (priv->conf, priv->notify_id); -  priv->notify_id = 0; +	mateconf_client_notify_remove (priv->conf, priv->notify_id); +	priv->notify_id = 0; -  if (priv->save_idle_id) -    { -      g_source_remove (priv->save_idle_id); +	if (priv->save_idle_id) +	{ +		g_source_remove (priv->save_idle_id); -      /* Save now */ -      terminal_profile_save (profile);  -    } +		/* Save now */ +		terminal_profile_save (profile); +	} -  _terminal_profile_forget (profile); +	_terminal_profile_forget (profile); -  g_object_unref (priv->conf); +	g_object_unref (priv->conf); -  g_free (priv->profile_dir); -  g_free (priv->locked); -  g_value_array_free (priv->properties); +	g_free (priv->profile_dir); +	g_free (priv->locked); +	g_value_array_free (priv->properties); -  G_OBJECT_CLASS (terminal_profile_parent_class)->finalize (object); +	G_OBJECT_CLASS (terminal_profile_parent_class)->finalize (object);  }  static void @@ -1066,26 +1067,26 @@ terminal_profile_get_property (GObject *object,                                 GValue *value,                                 GParamSpec *pspec)  { -  TerminalProfile *profile = TERMINAL_PROFILE (object); -  TerminalProfilePrivate *priv = profile->priv; - -  if (prop_id == 0 || prop_id >= LAST_PROP) -    { -      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -      return; -    } -     -  /* Note: When adding things here, do the same in get_prop_value_from_prop_name! */ -  switch (prop_id) -    { -      case PROP_BACKGROUND_IMAGE: -        ensure_pixbuf_property (profile, PROP_BACKGROUND_IMAGE_FILE, PROP_BACKGROUND_IMAGE, &priv->background_load_failed); -        break; -      default: -        break; -    } - -  g_value_copy (g_value_array_get_nth (priv->properties, prop_id), value); +	TerminalProfile *profile = TERMINAL_PROFILE (object); +	TerminalProfilePrivate *priv = profile->priv; + +	if (prop_id == 0 || prop_id >= LAST_PROP) +	{ +		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +		return; +	} + +	/* Note: When adding things here, do the same in get_prop_value_from_prop_name! */ +	switch (prop_id) +	{ +	case PROP_BACKGROUND_IMAGE: +		ensure_pixbuf_property (profile, PROP_BACKGROUND_IMAGE_FILE, PROP_BACKGROUND_IMAGE, &priv->background_load_failed); +		break; +	default: +		break; +	} + +	g_value_copy (g_value_array_get_nth (priv->properties, prop_id), value);  }  static void @@ -1094,125 +1095,127 @@ terminal_profile_set_property (GObject *object,                                 const GValue *value,                                 GParamSpec *pspec)  { -  TerminalProfile *profile = TERMINAL_PROFILE (object); -  TerminalProfilePrivate *priv = profile->priv; -  GValue *prop_value; +	TerminalProfile *profile = TERMINAL_PROFILE (object); +	TerminalProfilePrivate *priv = profile->priv; +	GValue *prop_value; -  if (prop_id == 0 || prop_id >= LAST_PROP) -    { -      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -      return; -    } +	if (prop_id == 0 || prop_id >= LAST_PROP) +	{ +		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +		return; +	} -  prop_value = g_value_array_get_nth (priv->properties, prop_id); +	prop_value = g_value_array_get_nth (priv->properties, prop_id); -  /* Preprocessing */ -  switch (prop_id) -    { +	/* Preprocessing */ +	switch (prop_id) +	{  #if 0 -      case PROP_FONT: { -        PangoFontDescription *font_desc, *new_font_desc; - -        font_desc = g_value_get_boxed (prop_value); -        new_font_desc = g_value_get_boxed (value); - -        if (font_desc && new_font_desc) -          { -            /* Merge in case the new string isn't complete enough to load a font */ -            pango_font_description_merge (font_desc, new_font_desc, TRUE); -            pango_font_description_free (new_font_desc); -            break; -          } - -        /* fall-through */ -      } +	case PROP_FONT: +	{ +		PangoFontDescription *font_desc, *new_font_desc; + +		font_desc = g_value_get_boxed (prop_value); +		new_font_desc = g_value_get_boxed (value); + +		if (font_desc && new_font_desc) +		{ +			/* Merge in case the new string isn't complete enough to load a font */ +			pango_font_description_merge (font_desc, new_font_desc, TRUE); +			pango_font_description_free (new_font_desc); +			break; +		} + +		/* fall-through */ +	}  #endif -      default: -        g_value_copy (value, prop_value); -        break; -    } - -  /* Postprocessing */ -  switch (prop_id) -    { -      case PROP_NAME: { -        const char *name = g_value_get_string (value); - -        g_assert (name != NULL); -        priv->profile_dir = mateconf_concat_dir_and_key (CONF_PROFILES_PREFIX, name); - -        mateconf_client_add_dir (priv->conf, priv->profile_dir, -                              MATECONF_CLIENT_PRELOAD_ONELEVEL, -                              NULL); -        priv->notify_id = -          mateconf_client_notify_add (priv->conf, -                                   priv->profile_dir, -                                   terminal_profile_mateconf_notify_cb, -                                   profile, NULL, -                                   NULL); - -        break; -      } - -      case PROP_BACKGROUND_IMAGE_FILE: -        /* Clear the cached image */ -        g_value_set_object (g_value_array_get_nth (priv->properties, PROP_BACKGROUND_IMAGE), NULL); -        priv->background_load_failed = FALSE; -        g_object_notify (object, TERMINAL_PROFILE_BACKGROUND_IMAGE); -        break; - -      default: -        break; -    } +	default: +		g_value_copy (value, prop_value); +		break; +	} + +	/* Postprocessing */ +	switch (prop_id) +	{ +	case PROP_NAME: +	{ +		const char *name = g_value_get_string (value); + +		g_assert (name != NULL); +		priv->profile_dir = mateconf_concat_dir_and_key (CONF_PROFILES_PREFIX, name); + +		mateconf_client_add_dir (priv->conf, priv->profile_dir, +		                         MATECONF_CLIENT_PRELOAD_ONELEVEL, +		                         NULL); +		priv->notify_id = +		    mateconf_client_notify_add (priv->conf, +		                                priv->profile_dir, +		                                terminal_profile_mateconf_notify_cb, +		                                profile, NULL, +		                                NULL); + +		break; +	} + +	case PROP_BACKGROUND_IMAGE_FILE: +		/* Clear the cached image */ +		g_value_set_object (g_value_array_get_nth (priv->properties, PROP_BACKGROUND_IMAGE), NULL); +		priv->background_load_failed = FALSE; +		g_object_notify (object, TERMINAL_PROFILE_BACKGROUND_IMAGE); +		break; + +	default: +		break; +	}  }  static void  terminal_profile_notify (GObject *object,                           GParamSpec *pspec)  { -  TerminalProfilePrivate *priv = TERMINAL_PROFILE (object)->priv; -  void (* notify) (GObject *, GParamSpec *) = G_OBJECT_CLASS (terminal_profile_parent_class)->notify; +	TerminalProfilePrivate *priv = TERMINAL_PROFILE (object)->priv; +	void (* notify) (GObject *, GParamSpec *) = G_OBJECT_CLASS (terminal_profile_parent_class)->notify; -  _terminal_debug_print (TERMINAL_DEBUG_PROFILE, -                         "Property notification for prop %s\n", -                         pspec->name); +	_terminal_debug_print (TERMINAL_DEBUG_PROFILE, +	                       "Property notification for prop %s\n", +	                       pspec->name); -  if (notify) -    notify (object, pspec); +	if (notify) +		notify (object, pspec); -  if (pspec->owner_type == TERMINAL_TYPE_PROFILE && -      (pspec->flags & G_PARAM_WRITABLE) && -      g_param_spec_get_qdata (pspec, mateconf_key_quark) != NULL && -      pspec != priv->mateconf_notification_pspec) -    terminal_profile_schedule_save (TERMINAL_PROFILE (object), pspec); +	if (pspec->owner_type == TERMINAL_TYPE_PROFILE && +	        (pspec->flags & G_PARAM_WRITABLE) && +	        g_param_spec_get_qdata (pspec, mateconf_key_quark) != NULL && +	        pspec != priv->mateconf_notification_pspec) +		terminal_profile_schedule_save (TERMINAL_PROFILE (object), pspec);  }  static void  terminal_profile_class_init (TerminalProfileClass *klass)  { -  GObjectClass *object_class = G_OBJECT_CLASS (klass); -   -  mateconf_key_quark = g_quark_from_static_string ("GT::MateConfKey"); - -  g_type_class_add_private (object_class, sizeof (TerminalProfilePrivate)); - -  object_class->constructor = terminal_profile_constructor; -  object_class->finalize = terminal_profile_finalize; -  object_class->get_property = terminal_profile_get_property; -  object_class->set_property = terminal_profile_set_property; -  object_class->notify = terminal_profile_notify; - -  signals[FORGOTTEN] = -    g_signal_new ("forgotten", -                  G_OBJECT_CLASS_TYPE (object_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (TerminalProfileClass, forgotten), -                  NULL, NULL, -                  g_cclosure_marshal_VOID__VOID, -                  G_TYPE_NONE, 0); - -  /* mateconf_key -> pspec hash */ -  klass->mateconf_keys = g_hash_table_new (g_str_hash, g_str_equal); +	GObjectClass *object_class = G_OBJECT_CLASS (klass); + +	mateconf_key_quark = g_quark_from_static_string ("GT::MateConfKey"); + +	g_type_class_add_private (object_class, sizeof (TerminalProfilePrivate)); + +	object_class->constructor = terminal_profile_constructor; +	object_class->finalize = terminal_profile_finalize; +	object_class->get_property = terminal_profile_get_property; +	object_class->set_property = terminal_profile_set_property; +	object_class->notify = terminal_profile_notify; + +	signals[FORGOTTEN] = +	    g_signal_new ("forgotten", +	                  G_OBJECT_CLASS_TYPE (object_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (TerminalProfileClass, forgotten), +	                  NULL, NULL, +	                  g_cclosure_marshal_VOID__VOID, +	                  G_TYPE_NONE, 0); + +	/* mateconf_key -> pspec hash */ +	klass->mateconf_keys = g_hash_table_new (g_str_hash, g_str_equal);  #define TERMINAL_PROFILE_PSPEC_STATIC (G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB) @@ -1263,7 +1266,7 @@ terminal_profile_class_init (TerminalProfileClass *klass)                        G_PARAM_READWRITE | TERMINAL_PROFILE_PSPEC_STATIC),\      propMateConf) -/* these are all read-only */ +	/* these are all read-only */  #define TERMINAL_PROFILE_PROPERTY_OBJECT(prop, propType, propMateConf)\    TERMINAL_PROFILE_PROPERTY (PROP_##prop,\      g_param_spec_object (TERMINAL_PROFILE_##prop, NULL, NULL,\ @@ -1294,53 +1297,53 @@ terminal_profile_class_init (TerminalProfileClass *klass)                                G_PARAM_READWRITE | TERMINAL_PROFILE_PSPEC_STATIC),\      propMateConf) -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (ALLOW_BOLD, DEFAULT_ALLOW_BOLD, KEY_ALLOW_BOLD); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (BOLD_COLOR_SAME_AS_FG, DEFAULT_BOLD_COLOR_SAME_AS_FG, KEY_BOLD_COLOR_SAME_AS_FG); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (DEFAULT_SHOW_MENUBAR, DEFAULT_DEFAULT_SHOW_MENUBAR, KEY_DEFAULT_SHOW_MENUBAR); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (LOGIN_SHELL, DEFAULT_LOGIN_SHELL, KEY_LOGIN_SHELL); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (SCROLL_BACKGROUND, DEFAULT_SCROLL_BACKGROUND, KEY_SCROLL_BACKGROUND); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (SCROLLBACK_UNLIMITED, DEFAULT_SCROLLBACK_UNLIMITED, KEY_SCROLLBACK_UNLIMITED); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (SCROLL_ON_KEYSTROKE, DEFAULT_SCROLL_ON_KEYSTROKE, KEY_SCROLL_ON_KEYSTROKE); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (SCROLL_ON_OUTPUT, DEFAULT_SCROLL_ON_OUTPUT, KEY_SCROLL_ON_OUTPUT); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (SILENT_BELL, DEFAULT_SILENT_BELL, KEY_SILENT_BELL); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (UPDATE_RECORDS, DEFAULT_UPDATE_RECORDS, KEY_UPDATE_RECORDS); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_CUSTOM_COMMAND, DEFAULT_USE_CUSTOM_COMMAND, KEY_USE_CUSTOM_COMMAND); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_CUSTOM_DEFAULT_SIZE, DEFAULT_USE_CUSTOM_DEFAULT_SIZE, KEY_USE_CUSTOM_DEFAULT_SIZE); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_SKEY, DEFAULT_USE_SKEY, KEY_USE_SKEY); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_SYSTEM_FONT, DEFAULT_USE_SYSTEM_FONT, KEY_USE_SYSTEM_FONT); -  TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_THEME_COLORS, DEFAULT_USE_THEME_COLORS, KEY_USE_THEME_COLORS); - -  TERMINAL_PROFILE_PROPERTY_BOXED (BACKGROUND_COLOR, GDK_TYPE_COLOR, KEY_BACKGROUND_COLOR); -  TERMINAL_PROFILE_PROPERTY_BOXED (BOLD_COLOR, GDK_TYPE_COLOR, KEY_BOLD_COLOR); -  TERMINAL_PROFILE_PROPERTY_BOXED (FONT, PANGO_TYPE_FONT_DESCRIPTION, KEY_FONT); -  TERMINAL_PROFILE_PROPERTY_BOXED (FOREGROUND_COLOR, GDK_TYPE_COLOR, KEY_FOREGROUND_COLOR); - -  /* 0.0 = normal bg, 1.0 = all black bg, 0.5 = half darkened */ -  TERMINAL_PROFILE_PROPERTY_DOUBLE (BACKGROUND_DARKNESS, 0.0, 1.0, DEFAULT_BACKGROUND_DARKNESS, KEY_BACKGROUND_DARKNESS); - -  TERMINAL_PROFILE_PROPERTY_ENUM (BACKGROUND_TYPE, TERMINAL_TYPE_BACKGROUND_TYPE, DEFAULT_BACKGROUND_TYPE, KEY_BACKGROUND_TYPE); -  TERMINAL_PROFILE_PROPERTY_ENUM (BACKSPACE_BINDING,  VTE_TYPE_TERMINAL_ERASE_BINDING, DEFAULT_BACKSPACE_BINDING, KEY_BACKSPACE_BINDING); -  TERMINAL_PROFILE_PROPERTY_ENUM (CURSOR_BLINK_MODE, VTE_TYPE_TERMINAL_CURSOR_BLINK_MODE, DEFAULT_CURSOR_BLINK_MODE, KEY_CURSOR_BLINK_MODE); -  TERMINAL_PROFILE_PROPERTY_ENUM (CURSOR_SHAPE, VTE_TYPE_TERMINAL_CURSOR_SHAPE, DEFAULT_CURSOR_SHAPE, KEY_CURSOR_SHAPE); -  TERMINAL_PROFILE_PROPERTY_ENUM (DELETE_BINDING, VTE_TYPE_TERMINAL_ERASE_BINDING, DEFAULT_DELETE_BINDING, KEY_DELETE_BINDING); -  TERMINAL_PROFILE_PROPERTY_ENUM (EXIT_ACTION, TERMINAL_TYPE_EXIT_ACTION, DEFAULT_EXIT_ACTION, KEY_EXIT_ACTION); -  TERMINAL_PROFILE_PROPERTY_ENUM (SCROLLBAR_POSITION, TERMINAL_TYPE_SCROLLBAR_POSITION, DEFAULT_SCROLLBAR_POSITION, KEY_SCROLLBAR_POSITION); -  TERMINAL_PROFILE_PROPERTY_ENUM (TITLE_MODE, TERMINAL_TYPE_TITLE_MODE, DEFAULT_TITLE_MODE, KEY_TITLE_MODE); - -  TERMINAL_PROFILE_PROPERTY_INT (DEFAULT_SIZE_COLUMNS, 1, 1024, DEFAULT_DEFAULT_SIZE_COLUMNS, KEY_DEFAULT_SIZE_COLUMNS); -  TERMINAL_PROFILE_PROPERTY_INT (DEFAULT_SIZE_ROWS, 1, 1024, DEFAULT_DEFAULT_SIZE_ROWS, KEY_DEFAULT_SIZE_ROWS); -  TERMINAL_PROFILE_PROPERTY_INT (SCROLLBACK_LINES, 1, G_MAXINT, DEFAULT_SCROLLBACK_LINES, KEY_SCROLLBACK_LINES); - -  TERMINAL_PROFILE_PROPERTY_OBJECT (BACKGROUND_IMAGE, GDK_TYPE_PIXBUF, NULL); - -  TERMINAL_PROFILE_PROPERTY_STRING_CO (NAME, DEFAULT_NAME, NULL); -  TERMINAL_PROFILE_PROPERTY_STRING (BACKGROUND_IMAGE_FILE, DEFAULT_BACKGROUND_IMAGE_FILE, KEY_BACKGROUND_IMAGE_FILE); -  TERMINAL_PROFILE_PROPERTY_STRING (CUSTOM_COMMAND, DEFAULT_CUSTOM_COMMAND, KEY_CUSTOM_COMMAND); -  TERMINAL_PROFILE_PROPERTY_STRING (TITLE, _(DEFAULT_TITLE), KEY_TITLE); -  TERMINAL_PROFILE_PROPERTY_STRING (VISIBLE_NAME, _(DEFAULT_VISIBLE_NAME), KEY_VISIBLE_NAME); -  TERMINAL_PROFILE_PROPERTY_STRING (WORD_CHARS, DEFAULT_WORD_CHARS, KEY_WORD_CHARS); - -  TERMINAL_PROFILE_PROPERTY_VALUE_ARRAY_BOXED (PALETTE, "palette-color", GDK_TYPE_COLOR, KEY_PALETTE); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (ALLOW_BOLD, DEFAULT_ALLOW_BOLD, KEY_ALLOW_BOLD); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (BOLD_COLOR_SAME_AS_FG, DEFAULT_BOLD_COLOR_SAME_AS_FG, KEY_BOLD_COLOR_SAME_AS_FG); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (DEFAULT_SHOW_MENUBAR, DEFAULT_DEFAULT_SHOW_MENUBAR, KEY_DEFAULT_SHOW_MENUBAR); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (LOGIN_SHELL, DEFAULT_LOGIN_SHELL, KEY_LOGIN_SHELL); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (SCROLL_BACKGROUND, DEFAULT_SCROLL_BACKGROUND, KEY_SCROLL_BACKGROUND); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (SCROLLBACK_UNLIMITED, DEFAULT_SCROLLBACK_UNLIMITED, KEY_SCROLLBACK_UNLIMITED); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (SCROLL_ON_KEYSTROKE, DEFAULT_SCROLL_ON_KEYSTROKE, KEY_SCROLL_ON_KEYSTROKE); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (SCROLL_ON_OUTPUT, DEFAULT_SCROLL_ON_OUTPUT, KEY_SCROLL_ON_OUTPUT); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (SILENT_BELL, DEFAULT_SILENT_BELL, KEY_SILENT_BELL); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (UPDATE_RECORDS, DEFAULT_UPDATE_RECORDS, KEY_UPDATE_RECORDS); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_CUSTOM_COMMAND, DEFAULT_USE_CUSTOM_COMMAND, KEY_USE_CUSTOM_COMMAND); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_CUSTOM_DEFAULT_SIZE, DEFAULT_USE_CUSTOM_DEFAULT_SIZE, KEY_USE_CUSTOM_DEFAULT_SIZE); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_SKEY, DEFAULT_USE_SKEY, KEY_USE_SKEY); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_SYSTEM_FONT, DEFAULT_USE_SYSTEM_FONT, KEY_USE_SYSTEM_FONT); +	TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_THEME_COLORS, DEFAULT_USE_THEME_COLORS, KEY_USE_THEME_COLORS); + +	TERMINAL_PROFILE_PROPERTY_BOXED (BACKGROUND_COLOR, GDK_TYPE_COLOR, KEY_BACKGROUND_COLOR); +	TERMINAL_PROFILE_PROPERTY_BOXED (BOLD_COLOR, GDK_TYPE_COLOR, KEY_BOLD_COLOR); +	TERMINAL_PROFILE_PROPERTY_BOXED (FONT, PANGO_TYPE_FONT_DESCRIPTION, KEY_FONT); +	TERMINAL_PROFILE_PROPERTY_BOXED (FOREGROUND_COLOR, GDK_TYPE_COLOR, KEY_FOREGROUND_COLOR); + +	/* 0.0 = normal bg, 1.0 = all black bg, 0.5 = half darkened */ +	TERMINAL_PROFILE_PROPERTY_DOUBLE (BACKGROUND_DARKNESS, 0.0, 1.0, DEFAULT_BACKGROUND_DARKNESS, KEY_BACKGROUND_DARKNESS); + +	TERMINAL_PROFILE_PROPERTY_ENUM (BACKGROUND_TYPE, TERMINAL_TYPE_BACKGROUND_TYPE, DEFAULT_BACKGROUND_TYPE, KEY_BACKGROUND_TYPE); +	TERMINAL_PROFILE_PROPERTY_ENUM (BACKSPACE_BINDING,  VTE_TYPE_TERMINAL_ERASE_BINDING, DEFAULT_BACKSPACE_BINDING, KEY_BACKSPACE_BINDING); +	TERMINAL_PROFILE_PROPERTY_ENUM (CURSOR_BLINK_MODE, VTE_TYPE_TERMINAL_CURSOR_BLINK_MODE, DEFAULT_CURSOR_BLINK_MODE, KEY_CURSOR_BLINK_MODE); +	TERMINAL_PROFILE_PROPERTY_ENUM (CURSOR_SHAPE, VTE_TYPE_TERMINAL_CURSOR_SHAPE, DEFAULT_CURSOR_SHAPE, KEY_CURSOR_SHAPE); +	TERMINAL_PROFILE_PROPERTY_ENUM (DELETE_BINDING, VTE_TYPE_TERMINAL_ERASE_BINDING, DEFAULT_DELETE_BINDING, KEY_DELETE_BINDING); +	TERMINAL_PROFILE_PROPERTY_ENUM (EXIT_ACTION, TERMINAL_TYPE_EXIT_ACTION, DEFAULT_EXIT_ACTION, KEY_EXIT_ACTION); +	TERMINAL_PROFILE_PROPERTY_ENUM (SCROLLBAR_POSITION, TERMINAL_TYPE_SCROLLBAR_POSITION, DEFAULT_SCROLLBAR_POSITION, KEY_SCROLLBAR_POSITION); +	TERMINAL_PROFILE_PROPERTY_ENUM (TITLE_MODE, TERMINAL_TYPE_TITLE_MODE, DEFAULT_TITLE_MODE, KEY_TITLE_MODE); + +	TERMINAL_PROFILE_PROPERTY_INT (DEFAULT_SIZE_COLUMNS, 1, 1024, DEFAULT_DEFAULT_SIZE_COLUMNS, KEY_DEFAULT_SIZE_COLUMNS); +	TERMINAL_PROFILE_PROPERTY_INT (DEFAULT_SIZE_ROWS, 1, 1024, DEFAULT_DEFAULT_SIZE_ROWS, KEY_DEFAULT_SIZE_ROWS); +	TERMINAL_PROFILE_PROPERTY_INT (SCROLLBACK_LINES, 1, G_MAXINT, DEFAULT_SCROLLBACK_LINES, KEY_SCROLLBACK_LINES); + +	TERMINAL_PROFILE_PROPERTY_OBJECT (BACKGROUND_IMAGE, GDK_TYPE_PIXBUF, NULL); + +	TERMINAL_PROFILE_PROPERTY_STRING_CO (NAME, DEFAULT_NAME, NULL); +	TERMINAL_PROFILE_PROPERTY_STRING (BACKGROUND_IMAGE_FILE, DEFAULT_BACKGROUND_IMAGE_FILE, KEY_BACKGROUND_IMAGE_FILE); +	TERMINAL_PROFILE_PROPERTY_STRING (CUSTOM_COMMAND, DEFAULT_CUSTOM_COMMAND, KEY_CUSTOM_COMMAND); +	TERMINAL_PROFILE_PROPERTY_STRING (TITLE, _(DEFAULT_TITLE), KEY_TITLE); +	TERMINAL_PROFILE_PROPERTY_STRING (VISIBLE_NAME, _(DEFAULT_VISIBLE_NAME), KEY_VISIBLE_NAME); +	TERMINAL_PROFILE_PROPERTY_STRING (WORD_CHARS, DEFAULT_WORD_CHARS, KEY_WORD_CHARS); + +	TERMINAL_PROFILE_PROPERTY_VALUE_ARRAY_BOXED (PALETTE, "palette-color", GDK_TYPE_COLOR, KEY_PALETTE);  }  /* Semi-Public API */ @@ -1348,120 +1351,120 @@ terminal_profile_class_init (TerminalProfileClass *klass)  TerminalProfile*  _terminal_profile_new (const char *name)  { -  return g_object_new (TERMINAL_TYPE_PROFILE, -                       "name", name, -                       NULL); +	return g_object_new (TERMINAL_TYPE_PROFILE, +	                     "name", name, +	                     NULL);  }  void  _terminal_profile_forget (TerminalProfile *profile)  { -  TerminalProfilePrivate *priv = profile->priv; -   -  if (!priv->forgotten) -    { -      mateconf_client_remove_dir (priv->conf, -                               priv->profile_dir, -                               NULL); - -      priv->forgotten = TRUE; - -      g_signal_emit (G_OBJECT (profile), signals[FORGOTTEN], 0); -    } +	TerminalProfilePrivate *priv = profile->priv; + +	if (!priv->forgotten) +	{ +		mateconf_client_remove_dir (priv->conf, +		                            priv->profile_dir, +		                            NULL); + +		priv->forgotten = TRUE; + +		g_signal_emit (G_OBJECT (profile), signals[FORGOTTEN], 0); +	}  }  gboolean  _terminal_profile_get_forgotten (TerminalProfile *profile)  { -  return profile->priv->forgotten; +	return profile->priv->forgotten;  }  TerminalProfile *  _terminal_profile_clone (TerminalProfile *base_profile,                           const char      *visible_name)  { -  TerminalApp *app = terminal_app_get (); -  GObject *base_object = G_OBJECT (base_profile); -  TerminalProfilePrivate *new_priv; -  char profile_name[32]; -  GParameter *params; -  GParamSpec **pspecs; -  guint n_pspecs, i, n_params, profile_num; -  TerminalProfile *new_profile; - -  g_object_ref (base_profile); - -  profile_num = 0; -  do -    { -      g_snprintf (profile_name, sizeof (profile_name), "Profile%u", profile_num++); -    } -  while (terminal_app_get_profile_by_name (app, profile_name) != NULL); -  -  /* Now we have an unused profile name */ -  pspecs = g_object_class_list_properties (G_OBJECT_CLASS (TERMINAL_PROFILE_GET_CLASS (base_profile)), &n_pspecs); -   -  params = g_newa (GParameter, n_pspecs); -  n_params = 0; - -  for (i = 0; i < n_pspecs; ++i) -    { -      GParamSpec *pspec = pspecs[i]; -      GValue *value; - -      if (pspec->owner_type != TERMINAL_TYPE_PROFILE || -          (pspec->flags & G_PARAM_WRITABLE) == 0) -        continue; - -      params[n_params].name = pspec->name; - -      value = ¶ms[n_params].value; -      G_VALUE_TYPE (value) = 0; -      g_value_init (value, G_PARAM_SPEC_VALUE_TYPE (pspec)); - -      if (pspec->name == I_(TERMINAL_PROFILE_NAME)) -        g_value_set_static_string (value, profile_name); -      else if (pspec->name == I_(TERMINAL_PROFILE_VISIBLE_NAME)) -        g_value_set_static_string (value, visible_name); -      else -        g_object_get_property (base_object, pspec->name, value); - -      ++n_params; -    } - -  new_profile = g_object_newv (TERMINAL_TYPE_PROFILE, n_params, params); - -  g_object_unref (base_profile); - -  for (i = 0; i < n_params; ++i) -    g_value_unset (¶ms[i].value); - -  /* Flush the new profile to mateconf */ -  new_priv = new_profile->priv; - -  g_slist_free (new_priv->dirty_pspecs); -  new_priv->dirty_pspecs = NULL; -  if (new_priv->save_idle_id != 0) -    { -      g_source_remove (new_priv->save_idle_id); -      new_priv->save_idle_id = 0; -    } - -  for (i = 0; i < n_pspecs; ++i) -    { -      GParamSpec *pspec = pspecs[i]; - -      if (pspec->owner_type != TERMINAL_TYPE_PROFILE || -          (pspec->flags & G_PARAM_WRITABLE) == 0) -        continue; - -      new_priv->dirty_pspecs = g_slist_prepend (new_priv->dirty_pspecs, pspec); -    } -  g_free (pspecs); - -  terminal_profile_save (new_profile); - -  return new_profile; +	TerminalApp *app = terminal_app_get (); +	GObject *base_object = G_OBJECT (base_profile); +	TerminalProfilePrivate *new_priv; +	char profile_name[32]; +	GParameter *params; +	GParamSpec **pspecs; +	guint n_pspecs, i, n_params, profile_num; +	TerminalProfile *new_profile; + +	g_object_ref (base_profile); + +	profile_num = 0; +	do +	{ +		g_snprintf (profile_name, sizeof (profile_name), "Profile%u", profile_num++); +	} +	while (terminal_app_get_profile_by_name (app, profile_name) != NULL); + +	/* Now we have an unused profile name */ +	pspecs = g_object_class_list_properties (G_OBJECT_CLASS (TERMINAL_PROFILE_GET_CLASS (base_profile)), &n_pspecs); + +	params = g_newa (GParameter, n_pspecs); +	n_params = 0; + +	for (i = 0; i < n_pspecs; ++i) +	{ +		GParamSpec *pspec = pspecs[i]; +		GValue *value; + +		if (pspec->owner_type != TERMINAL_TYPE_PROFILE || +		        (pspec->flags & G_PARAM_WRITABLE) == 0) +			continue; + +		params[n_params].name = pspec->name; + +		value = ¶ms[n_params].value; +		G_VALUE_TYPE (value) = 0; +		g_value_init (value, G_PARAM_SPEC_VALUE_TYPE (pspec)); + +		if (pspec->name == I_(TERMINAL_PROFILE_NAME)) +			g_value_set_static_string (value, profile_name); +		else if (pspec->name == I_(TERMINAL_PROFILE_VISIBLE_NAME)) +			g_value_set_static_string (value, visible_name); +		else +			g_object_get_property (base_object, pspec->name, value); + +		++n_params; +	} + +	new_profile = g_object_newv (TERMINAL_TYPE_PROFILE, n_params, params); + +	g_object_unref (base_profile); + +	for (i = 0; i < n_params; ++i) +		g_value_unset (¶ms[i].value); + +	/* Flush the new profile to mateconf */ +	new_priv = new_profile->priv; + +	g_slist_free (new_priv->dirty_pspecs); +	new_priv->dirty_pspecs = NULL; +	if (new_priv->save_idle_id != 0) +	{ +		g_source_remove (new_priv->save_idle_id); +		new_priv->save_idle_id = 0; +	} + +	for (i = 0; i < n_pspecs; ++i) +	{ +		GParamSpec *pspec = pspecs[i]; + +		if (pspec->owner_type != TERMINAL_TYPE_PROFILE || +		        (pspec->flags & G_PARAM_WRITABLE) == 0) +			continue; + +		new_priv->dirty_pspecs = g_slist_prepend (new_priv->dirty_pspecs, pspec); +	} +	g_free (pspecs); + +	terminal_profile_save (new_profile); + +	return new_profile;  }  /* Public API */ @@ -1470,128 +1473,128 @@ gboolean  terminal_profile_get_property_boolean (TerminalProfile *profile,                                         const char *prop_name)  { -  const GValue *value; +	const GValue *value; -  value = get_prop_value_from_prop_name (profile, prop_name); -  g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_BOOLEAN (value), FALSE); -  if (!value || !G_VALUE_HOLDS_BOOLEAN (value)) -    return FALSE; +	value = get_prop_value_from_prop_name (profile, prop_name); +	g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_BOOLEAN (value), FALSE); +	if (!value || !G_VALUE_HOLDS_BOOLEAN (value)) +		return FALSE; -  return g_value_get_boolean (value); +	return g_value_get_boolean (value);  }  gconstpointer  terminal_profile_get_property_boxed (TerminalProfile *profile,                                       const char *prop_name)  { -  const GValue *value; +	const GValue *value; -  value = get_prop_value_from_prop_name (profile, prop_name); -  g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_BOXED (value), NULL); -  if (!value || !G_VALUE_HOLDS_BOXED (value)) -    return NULL; +	value = get_prop_value_from_prop_name (profile, prop_name); +	g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_BOXED (value), NULL); +	if (!value || !G_VALUE_HOLDS_BOXED (value)) +		return NULL; -  return g_value_get_boxed (value); +	return g_value_get_boxed (value);  }  double  terminal_profile_get_property_double (TerminalProfile *profile,                                        const char *prop_name)  { -  const GValue *value; +	const GValue *value; -  value = get_prop_value_from_prop_name (profile, prop_name); -  g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_DOUBLE (value), 0.0); -  if (!value || !G_VALUE_HOLDS_DOUBLE (value)) -    return 0.0; +	value = get_prop_value_from_prop_name (profile, prop_name); +	g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_DOUBLE (value), 0.0); +	if (!value || !G_VALUE_HOLDS_DOUBLE (value)) +		return 0.0; -  return g_value_get_double (value); +	return g_value_get_double (value);  }  int  terminal_profile_get_property_enum (TerminalProfile *profile,                                      const char *prop_name)  { -  const GValue *value; +	const GValue *value; -  value = get_prop_value_from_prop_name (profile, prop_name); -  g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_ENUM (value), 0); -  if (!value || !G_VALUE_HOLDS_ENUM (value)) -    return 0; +	value = get_prop_value_from_prop_name (profile, prop_name); +	g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_ENUM (value), 0); +	if (!value || !G_VALUE_HOLDS_ENUM (value)) +		return 0; -  return g_value_get_enum (value); +	return g_value_get_enum (value);  }  int  terminal_profile_get_property_int (TerminalProfile *profile,                                     const char *prop_name)  { -  const GValue *value; +	const GValue *value; -  value = get_prop_value_from_prop_name (profile, prop_name); -  g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_INT (value), 0); -  if (!value || !G_VALUE_HOLDS_INT (value)) -    return 0; +	value = get_prop_value_from_prop_name (profile, prop_name); +	g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_INT (value), 0); +	if (!value || !G_VALUE_HOLDS_INT (value)) +		return 0; -  return g_value_get_int (value); +	return g_value_get_int (value);  }  gpointer  terminal_profile_get_property_object (TerminalProfile *profile,                                        const char *prop_name)  { -  const GValue *value; +	const GValue *value; -  value = get_prop_value_from_prop_name (profile, prop_name); -  g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_OBJECT (value), NULL); -  if (!value || !G_VALUE_HOLDS_OBJECT (value)) -    return NULL; +	value = get_prop_value_from_prop_name (profile, prop_name); +	g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_OBJECT (value), NULL); +	if (!value || !G_VALUE_HOLDS_OBJECT (value)) +		return NULL; -  return g_value_get_object (value); +	return g_value_get_object (value);  }  const char*  terminal_profile_get_property_string (TerminalProfile *profile,                                        const char *prop_name)  { -  const GValue *value; +	const GValue *value; -  value = get_prop_value_from_prop_name (profile, prop_name); -  g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_STRING (value), NULL); -  if (!value || !G_VALUE_HOLDS_STRING (value)) -    return NULL; +	value = get_prop_value_from_prop_name (profile, prop_name); +	g_return_val_if_fail (value != NULL && G_VALUE_HOLDS_STRING (value), NULL); +	if (!value || !G_VALUE_HOLDS_STRING (value)) +		return NULL; -  return g_value_get_string (value); +	return g_value_get_string (value);  }  gboolean  terminal_profile_property_locked (TerminalProfile *profile,                                    const char *prop_name)  { -  TerminalProfilePrivate *priv = profile->priv; -  GParamSpec *pspec; +	TerminalProfilePrivate *priv = profile->priv; +	GParamSpec *pspec; -  pspec = get_pspec_from_name (profile, prop_name); -  g_return_val_if_fail (pspec != NULL, FALSE); -  if (!pspec) -    return FALSE; +	pspec = get_pspec_from_name (profile, prop_name); +	g_return_val_if_fail (pspec != NULL, FALSE); +	if (!pspec) +		return FALSE; -  return priv->locked[pspec->param_id]; +	return priv->locked[pspec->param_id];  }  void  terminal_profile_reset_property (TerminalProfile *profile,                                   const char *prop_name)  { -  GParamSpec *pspec; +	GParamSpec *pspec; -  pspec = get_pspec_from_name (profile, prop_name); -  g_return_if_fail (pspec != NULL); -  if (!pspec || -      (pspec->flags & G_PARAM_WRITABLE) == 0) -    return; +	pspec = get_pspec_from_name (profile, prop_name); +	g_return_if_fail (pspec != NULL); +	if (!pspec || +	        (pspec->flags & G_PARAM_WRITABLE) == 0) +		return; -  terminal_profile_reset_property_internal (profile, pspec, TRUE); +	terminal_profile_reset_property_internal (profile, pspec, TRUE);  }  gboolean @@ -1599,67 +1602,67 @@ terminal_profile_get_palette (TerminalProfile *profile,                                GdkColor *colors,                                guint *n_colors)  { -  TerminalProfilePrivate *priv; -  GValueArray *array; -  guint i, n; - -  g_return_val_if_fail (TERMINAL_IS_PROFILE (profile), FALSE); -  g_return_val_if_fail (colors != NULL && n_colors != NULL, FALSE); - -  priv = profile->priv; -  array = g_value_get_boxed (g_value_array_get_nth (priv->properties, PROP_PALETTE)); -  if (!array) -    return FALSE; - -  n = MIN (array->n_values, *n_colors); -  for (i = 0; i < n; ++i) -    { -      GdkColor *color = g_value_get_boxed (g_value_array_get_nth (array, i)); -      if (!color) -        continue; /* shouldn't happen!! */ - -      colors[i] = *color; -    } - -  *n_colors = n; -  return TRUE; +	TerminalProfilePrivate *priv; +	GValueArray *array; +	guint i, n; + +	g_return_val_if_fail (TERMINAL_IS_PROFILE (profile), FALSE); +	g_return_val_if_fail (colors != NULL && n_colors != NULL, FALSE); + +	priv = profile->priv; +	array = g_value_get_boxed (g_value_array_get_nth (priv->properties, PROP_PALETTE)); +	if (!array) +		return FALSE; + +	n = MIN (array->n_values, *n_colors); +	for (i = 0; i < n; ++i) +	{ +		GdkColor *color = g_value_get_boxed (g_value_array_get_nth (array, i)); +		if (!color) +			continue; /* shouldn't happen!! */ + +		colors[i] = *color; +	} + +	*n_colors = n; +	return TRUE;  }  gboolean  terminal_profile_get_palette_is_builtin (TerminalProfile *profile, -                                         guint *n) +        guint *n)  { -  GdkColor colors[TERMINAL_PALETTE_SIZE]; -  guint n_colors; -  guint i; - -  n_colors = G_N_ELEMENTS (colors); -  if (!terminal_profile_get_palette (profile, colors, &n_colors) || -      n_colors != TERMINAL_PALETTE_SIZE) -    return FALSE; - -  for (i = 0; i < TERMINAL_PALETTE_N_BUILTINS; ++i) -    if (palette_cmp (colors, terminal_palettes[i])) -      { -        *n = i; -        return TRUE; -      } - -  return FALSE; +	GdkColor colors[TERMINAL_PALETTE_SIZE]; +	guint n_colors; +	guint i; + +	n_colors = G_N_ELEMENTS (colors); +	if (!terminal_profile_get_palette (profile, colors, &n_colors) || +	        n_colors != TERMINAL_PALETTE_SIZE) +		return FALSE; + +	for (i = 0; i < TERMINAL_PALETTE_N_BUILTINS; ++i) +		if (palette_cmp (colors, terminal_palettes[i])) +		{ +			*n = i; +			return TRUE; +		} + +	return FALSE;  }  void  terminal_profile_set_palette_builtin (TerminalProfile *profile,                                        guint n)  { -  GValue value = { 0, }; +	GValue value = { 0, }; -  g_return_if_fail (n < TERMINAL_PALETTE_N_BUILTINS); +	g_return_if_fail (n < TERMINAL_PALETTE_N_BUILTINS); -  g_value_init (&value, G_TYPE_VALUE_ARRAY); -  set_value_from_palette (&value, terminal_palettes[n], TERMINAL_PALETTE_SIZE); -  g_object_set_property (G_OBJECT (profile), TERMINAL_PROFILE_PALETTE, &value); -  g_value_unset (&value); +	g_value_init (&value, G_TYPE_VALUE_ARRAY); +	set_value_from_palette (&value, terminal_palettes[n], TERMINAL_PALETTE_SIZE); +	g_object_set_property (G_OBJECT (profile), TERMINAL_PROFILE_PALETTE, &value); +	g_value_unset (&value);  }  gboolean @@ -1667,24 +1670,24 @@ terminal_profile_modify_palette_entry (TerminalProfile *profile,                                         guint            i,                                         const GdkColor  *color)  { -  TerminalProfilePrivate *priv = profile->priv; -  GValueArray *array; -  GValue *value; -  GdkColor *old_color; - -  array = g_value_get_boxed (g_value_array_get_nth (priv->properties, PROP_PALETTE)); -  if (!array || -      i >= array->n_values) -    return FALSE; - -  value = g_value_array_get_nth (array, i); -  old_color = g_value_get_boxed (value); -  if (!old_color || -      !gdk_color_equal (old_color, color)) -    { -      g_value_set_boxed (value, color); -      g_object_notify (G_OBJECT (profile), TERMINAL_PROFILE_PALETTE); -    } - -  return TRUE; +	TerminalProfilePrivate *priv = profile->priv; +	GValueArray *array; +	GValue *value; +	GdkColor *old_color; + +	array = g_value_get_boxed (g_value_array_get_nth (priv->properties, PROP_PALETTE)); +	if (!array || +	        i >= array->n_values) +		return FALSE; + +	value = g_value_array_get_nth (array, i); +	old_color = g_value_get_boxed (value); +	if (!old_color || +	        !gdk_color_equal (old_color, color)) +	{ +		g_value_set_boxed (value, color); +		g_object_notify (G_OBJECT (profile), TERMINAL_PROFILE_PALETTE); +	} + +	return TRUE;  } diff --git a/src/terminal-profile.h b/src/terminal-profile.h index 4275e53..351f0ec 100644 --- a/src/terminal-profile.h +++ b/src/terminal-profile.h @@ -28,32 +28,32 @@ G_BEGIN_DECLS  typedef enum  { -  /* this has to be kept in sync with the option menu in the profile editor UI file */ -  TERMINAL_TITLE_REPLACE, -  TERMINAL_TITLE_BEFORE, -  TERMINAL_TITLE_AFTER, -  TERMINAL_TITLE_IGNORE +    /* this has to be kept in sync with the option menu in the profile editor UI file */ +    TERMINAL_TITLE_REPLACE, +    TERMINAL_TITLE_BEFORE, +    TERMINAL_TITLE_AFTER, +    TERMINAL_TITLE_IGNORE  } TerminalTitleMode;  typedef enum  { -  TERMINAL_SCROLLBAR_LEFT, -  TERMINAL_SCROLLBAR_RIGHT, -  TERMINAL_SCROLLBAR_HIDDEN +    TERMINAL_SCROLLBAR_LEFT, +    TERMINAL_SCROLLBAR_RIGHT, +    TERMINAL_SCROLLBAR_HIDDEN  } TerminalScrollbarPosition; -typedef enum  +typedef enum  { -  TERMINAL_EXIT_CLOSE, -  TERMINAL_EXIT_RESTART, -  TERMINAL_EXIT_HOLD +    TERMINAL_EXIT_CLOSE, +    TERMINAL_EXIT_RESTART, +    TERMINAL_EXIT_HOLD  } TerminalExitAction;  typedef enum  { -  TERMINAL_BACKGROUND_SOLID, -  TERMINAL_BACKGROUND_IMAGE, -  TERMINAL_BACKGROUND_TRANSPARENT +    TERMINAL_BACKGROUND_SOLID, +    TERMINAL_BACKGROUND_IMAGE, +    TERMINAL_BACKGROUND_TRANSPARENT  } TerminalBackgroundType;  #define TERMINAL_PALETTE_SIZE 16 @@ -120,18 +120,18 @@ typedef struct _TerminalProfilePrivate TerminalProfilePrivate;  struct _TerminalProfile  { -  GObject parent_instance; +	GObject parent_instance; -  TerminalProfilePrivate *priv; +	TerminalProfilePrivate *priv;  };  struct _TerminalProfileClass  { -  GObjectClass parent_class; +	GObjectClass parent_class; -  void (* forgotten) (TerminalProfile           *profile); +	void (* forgotten) (TerminalProfile           *profile); -  GHashTable *mateconf_keys; +	GHashTable *mateconf_keys;  };  GType             terminal_profile_get_type               (void); @@ -143,48 +143,48 @@ void             _terminal_profile_forget                 (TerminalProfile *prof  gboolean         _terminal_profile_get_forgotten          (TerminalProfile *profile);  TerminalProfile* _terminal_profile_clone                  (TerminalProfile *base_profile, -                                                           const char *visible_name); +        const char *visible_name);  gboolean          terminal_profile_property_locked        (TerminalProfile *profile, -                                                           const char *prop_name); +        const char *prop_name);  void              terminal_profile_reset_property         (TerminalProfile *profile, -                                                           const char *prop_name); +        const char *prop_name);  gboolean          terminal_profile_get_property_boolean   (TerminalProfile *profile, -                                                           const char *prop_name); +        const char *prop_name);  gconstpointer     terminal_profile_get_property_boxed     (TerminalProfile *profile, -                                                           const char *prop_name); +        const char *prop_name);  double            terminal_profile_get_property_double    (TerminalProfile *profile, -                                                           const char *prop_name); +        const char *prop_name);  int               terminal_profile_get_property_enum      (TerminalProfile *profile, -                                                           const char *prop_name); +        const char *prop_name);  int               terminal_profile_get_property_int       (TerminalProfile *profile, -                                                           const char *prop_name); +        const char *prop_name);  gpointer          terminal_profile_get_property_object    (TerminalProfile *profile, -                                                           const char *prop_name); +        const char *prop_name);  const char*       terminal_profile_get_property_string    (TerminalProfile *profile, -                                                           const char *prop_name); +        const char *prop_name);  gboolean          terminal_profile_get_palette            (TerminalProfile *profile, -                                                           GdkColor *colors, -                                                           guint *n_colors); +        GdkColor *colors, +        guint *n_colors);  gboolean          terminal_profile_get_palette_is_builtin (TerminalProfile *profile, -                                                           guint *n); +        guint *n);  void              terminal_profile_set_palette_builtin    (TerminalProfile *profile, -                                                           guint n); +        guint n);  gboolean          terminal_profile_modify_palette_entry   (TerminalProfile *profile, -                                                           guint            i, -                                                           const GdkColor  *color); +        guint            i, +        const GdkColor  *color);  G_END_DECLS diff --git a/src/terminal-screen-container.c b/src/terminal-screen-container.c index 7aa6265..53865f6 100644 --- a/src/terminal-screen-container.c +++ b/src/terminal-screen-container.c @@ -29,27 +29,27 @@  struct _TerminalScreenContainerPrivate  { -  TerminalScreen *screen; +	TerminalScreen *screen;  #ifdef USE_SCROLLED_WINDOW -  GtkWidget *scrolled_window; +	GtkWidget *scrolled_window;  #else -  GtkWidget *hbox; -  GtkWidget *vscrollbar; +	GtkWidget *hbox; +	GtkWidget *vscrollbar;  #endif -  GtkPolicyType hscrollbar_policy; -  GtkPolicyType vscrollbar_policy; -  GtkCornerType window_placement; -  guint window_placement_set : 1; +	GtkPolicyType hscrollbar_policy; +	GtkPolicyType vscrollbar_policy; +	GtkCornerType window_placement; +	guint window_placement_set : 1;  };  enum  { -  PROP_0, -  PROP_SCREEN, -  PROP_HSCROLLBAR_POLICY, -  PROP_VSCROLLBAR_POLICY, -  PROP_WINDOW_PLACEMENT, -  PROP_WINDOW_PLACEMENT_SET +    PROP_0, +    PROP_SCREEN, +    PROP_HSCROLLBAR_POLICY, +    PROP_VSCROLLBAR_POLICY, +    PROP_WINDOW_PLACEMENT, +    PROP_WINDOW_PLACEMENT_SET  };  G_DEFINE_TYPE (TerminalScreenContainer, terminal_screen_container, GTK_TYPE_VBOX) @@ -58,43 +58,44 @@ G_DEFINE_TYPE (TerminalScreenContainer, terminal_screen_container, GTK_TYPE_VBOX  static void  terminal_screen_container_set_placement_internal (TerminalScreenContainer *container, -                                                  GtkCornerType corner) +        GtkCornerType corner)  { -  TerminalScreenContainerPrivate *priv = container->priv; +	TerminalScreenContainerPrivate *priv = container->priv;  #ifdef USE_SCROLLED_WINDOW -  gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (priv->scrolled_window), corner); +	gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (priv->scrolled_window), corner);  #else -  switch (corner) { -    case GTK_CORNER_TOP_LEFT: -    case GTK_CORNER_BOTTOM_LEFT: -      gtk_box_reorder_child (GTK_BOX (priv->hbox), priv->vscrollbar, 1); -      break; -    case GTK_CORNER_TOP_RIGHT: -    case GTK_CORNER_BOTTOM_RIGHT: -      gtk_box_reorder_child (GTK_BOX (priv->hbox), priv->vscrollbar, 0); -      break; -    default: -      g_assert_not_reached (); -  } +	switch (corner) +	{ +	case GTK_CORNER_TOP_LEFT: +	case GTK_CORNER_BOTTOM_LEFT: +		gtk_box_reorder_child (GTK_BOX (priv->hbox), priv->vscrollbar, 1); +		break; +	case GTK_CORNER_TOP_RIGHT: +	case GTK_CORNER_BOTTOM_RIGHT: +		gtk_box_reorder_child (GTK_BOX (priv->hbox), priv->vscrollbar, 0); +		break; +	default: +		g_assert_not_reached (); +	}  #endif -  priv->window_placement = corner; -  g_object_notify (G_OBJECT (container), "window-placement"); +	priv->window_placement = corner; +	g_object_notify (G_OBJECT (container), "window-placement");  }  static void  terminal_screen_container_set_placement_set (TerminalScreenContainer *container, -                                             gboolean set) +        gboolean set)  { -  TerminalScreenContainerPrivate *priv = container->priv; +	TerminalScreenContainerPrivate *priv = container->priv;  #ifdef USE_SCROLLED_WINDOW -  g_object_set (priv->scrolled_window, "window-placement-set", set, NULL); +	g_object_set (priv->scrolled_window, "window-placement-set", set, NULL);  #endif -  priv->window_placement_set = set != FALSE; -  g_object_notify (G_OBJECT (container), "window-placement-set"); +	priv->window_placement_set = set != FALSE; +	g_object_notify (G_OBJECT (container), "window-placement-set");  }  #if defined(USE_SCROLLED_WINDOW) && defined(MATE_ENABLE_DEBUG) @@ -103,9 +104,9 @@ size_request_cb (GtkWidget *widget,                   GtkRequisition *req,                   TerminalScreenContainer *container)  { -  _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                         "[screen %p] scrolled-window size req %d : %d\n", -                         container->priv->screen, req->width, req->height); +	_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +	                       "[screen %p] scrolled-window size req %d : %d\n", +	                       container->priv->screen, req->width, req->height);  }  #endif @@ -114,66 +115,66 @@ size_request_cb (GtkWidget *widget,  static void  terminal_screen_container_init (TerminalScreenContainer *container)  { -  TerminalScreenContainerPrivate *priv; +	TerminalScreenContainerPrivate *priv; -  priv = container->priv = TERMINAL_SCREEN_CONTAINER_GET_PRIVATE (container); +	priv = container->priv = TERMINAL_SCREEN_CONTAINER_GET_PRIVATE (container); -  priv->hscrollbar_policy = GTK_POLICY_AUTOMATIC; -  priv->vscrollbar_policy = GTK_POLICY_AUTOMATIC; -  priv->window_placement = GTK_CORNER_BOTTOM_RIGHT; -  priv->window_placement_set = FALSE; +	priv->hscrollbar_policy = GTK_POLICY_AUTOMATIC; +	priv->vscrollbar_policy = GTK_POLICY_AUTOMATIC; +	priv->window_placement = GTK_CORNER_BOTTOM_RIGHT; +	priv->window_placement_set = FALSE;  }  static GObject *  terminal_screen_container_constructor (GType type, -                                guint n_construct_properties, -                                GObjectConstructParam *construct_params) +                                       guint n_construct_properties, +                                       GObjectConstructParam *construct_params)  { -  GObject *object; -  TerminalScreenContainer *container; -  TerminalScreenContainerPrivate *priv; +	GObject *object; +	TerminalScreenContainer *container; +	TerminalScreenContainerPrivate *priv; -  object = G_OBJECT_CLASS (terminal_screen_container_parent_class)->constructor -             (type, n_construct_properties, construct_params); +	object = G_OBJECT_CLASS (terminal_screen_container_parent_class)->constructor +	         (type, n_construct_properties, construct_params); -  container = TERMINAL_SCREEN_CONTAINER (object); -  priv = container->priv; +	container = TERMINAL_SCREEN_CONTAINER (object); +	priv = container->priv; -  g_assert (priv->screen != NULL); +	g_assert (priv->screen != NULL);  #ifdef USE_SCROLLED_WINDOW -  priv->scrolled_window = gtk_scrolled_window_new (NULL, vte_terminal_get_adjustment (VTE_TERMINAL (priv->screen))); - -  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_window), -                                  priv->hscrollbar_policy, -                                  priv->vscrollbar_policy); -  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (priv->scrolled_window), -                                       GTK_SHADOW_NONE); -  gtk_container_add (GTK_CONTAINER (priv->scrolled_window), GTK_WIDGET (priv->screen)); -  gtk_widget_show (GTK_WIDGET (priv->screen)); -  gtk_box_pack_end (GTK_BOX (container), priv->scrolled_window, TRUE, TRUE, 0); -  gtk_widget_show (priv->scrolled_window); +	priv->scrolled_window = gtk_scrolled_window_new (NULL, vte_terminal_get_adjustment (VTE_TERMINAL (priv->screen))); + +	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_window), +	                                priv->hscrollbar_policy, +	                                priv->vscrollbar_policy); +	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (priv->scrolled_window), +	                                     GTK_SHADOW_NONE); +	gtk_container_add (GTK_CONTAINER (priv->scrolled_window), GTK_WIDGET (priv->screen)); +	gtk_widget_show (GTK_WIDGET (priv->screen)); +	gtk_box_pack_end (GTK_BOX (container), priv->scrolled_window, TRUE, TRUE, 0); +	gtk_widget_show (priv->scrolled_window);  #ifdef MATE_ENABLE_DEBUG -  g_signal_connect (priv->scrolled_window, "size-request", G_CALLBACK (size_request_cb), container); +	g_signal_connect (priv->scrolled_window, "size-request", G_CALLBACK (size_request_cb), container);  #endif  #else -  priv->hbox = gtk_hbox_new (FALSE, 0); +	priv->hbox = gtk_hbox_new (FALSE, 0); -  priv->vscrollbar = gtk_vscrollbar_new (vte_terminal_get_adjustment (VTE_TERMINAL (priv->screen))); +	priv->vscrollbar = gtk_vscrollbar_new (vte_terminal_get_adjustment (VTE_TERMINAL (priv->screen))); -  gtk_box_pack_start (GTK_BOX (priv->hbox), GTK_WIDGET (priv->screen), TRUE, TRUE, 0); -  gtk_box_pack_start (GTK_BOX (priv->hbox), priv->vscrollbar, FALSE, FALSE, 0); +	gtk_box_pack_start (GTK_BOX (priv->hbox), GTK_WIDGET (priv->screen), TRUE, TRUE, 0); +	gtk_box_pack_start (GTK_BOX (priv->hbox), priv->vscrollbar, FALSE, FALSE, 0); -  gtk_box_pack_end (GTK_BOX (container), priv->hbox, TRUE, TRUE, 0); -  gtk_widget_show_all (priv->hbox); +	gtk_box_pack_end (GTK_BOX (container), priv->hbox, TRUE, TRUE, 0); +	gtk_widget_show_all (priv->hbox);  #endif /* USE_SCROLLED_WINDOW */ -  _terminal_screen_update_scrollbar (priv->screen); +	_terminal_screen_update_scrollbar (priv->screen); -  return object; +	return object;  }  static void @@ -182,28 +183,29 @@ terminal_screen_container_get_property (GObject *object,                                          GValue *value,                                          GParamSpec *pspec)  { -  TerminalScreenContainer *container = TERMINAL_SCREEN_CONTAINER (object); -  TerminalScreenContainerPrivate *priv = container->priv; - -  switch (prop_id) { -    case PROP_SCREEN: -      break; -    case PROP_HSCROLLBAR_POLICY: -      g_value_set_enum (value, priv->hscrollbar_policy); -      break; -    case PROP_VSCROLLBAR_POLICY: -      g_value_set_enum (value, priv->vscrollbar_policy); -      break; -    case PROP_WINDOW_PLACEMENT: -      g_value_set_enum (value, priv->window_placement); -      break; -    case PROP_WINDOW_PLACEMENT_SET: -      g_value_set_boolean (value, priv->window_placement_set); -      break; -    default: -      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -      break; -  } +	TerminalScreenContainer *container = TERMINAL_SCREEN_CONTAINER (object); +	TerminalScreenContainerPrivate *priv = container->priv; + +	switch (prop_id) +	{ +	case PROP_SCREEN: +		break; +	case PROP_HSCROLLBAR_POLICY: +		g_value_set_enum (value, priv->hscrollbar_policy); +		break; +	case PROP_VSCROLLBAR_POLICY: +		g_value_set_enum (value, priv->vscrollbar_policy); +		break; +	case PROP_WINDOW_PLACEMENT: +		g_value_set_enum (value, priv->window_placement); +		break; +	case PROP_WINDOW_PLACEMENT_SET: +		g_value_set_boolean (value, priv->window_placement_set); +		break; +	default: +		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +		break; +	}  }  static void @@ -212,88 +214,89 @@ terminal_screen_container_set_property (GObject *object,                                          const GValue *value,                                          GParamSpec *pspec)  { -  TerminalScreenContainer *container = TERMINAL_SCREEN_CONTAINER (object); -  TerminalScreenContainerPrivate *priv = container->priv; - -  switch (prop_id) { -    case PROP_SCREEN: -      priv->screen = g_value_get_object (value); -      break; -    case PROP_HSCROLLBAR_POLICY: -      terminal_screen_container_set_policy (container, -                                            g_value_get_enum (value), -                                            priv->vscrollbar_policy); -      break; -    case PROP_VSCROLLBAR_POLICY: -      terminal_screen_container_set_policy (container, -                                            priv->hscrollbar_policy, -                                            g_value_get_enum (value)); -      break; -    case PROP_WINDOW_PLACEMENT: -      terminal_screen_container_set_placement_internal (container, g_value_get_enum (value)); -      break; -    case PROP_WINDOW_PLACEMENT_SET: -      terminal_screen_container_set_placement_set (container, g_value_get_boolean (value)); -      break; -    default: -      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -      break; -  } +	TerminalScreenContainer *container = TERMINAL_SCREEN_CONTAINER (object); +	TerminalScreenContainerPrivate *priv = container->priv; + +	switch (prop_id) +	{ +	case PROP_SCREEN: +		priv->screen = g_value_get_object (value); +		break; +	case PROP_HSCROLLBAR_POLICY: +		terminal_screen_container_set_policy (container, +		                                      g_value_get_enum (value), +		                                      priv->vscrollbar_policy); +		break; +	case PROP_VSCROLLBAR_POLICY: +		terminal_screen_container_set_policy (container, +		                                      priv->hscrollbar_policy, +		                                      g_value_get_enum (value)); +		break; +	case PROP_WINDOW_PLACEMENT: +		terminal_screen_container_set_placement_internal (container, g_value_get_enum (value)); +		break; +	case PROP_WINDOW_PLACEMENT_SET: +		terminal_screen_container_set_placement_set (container, g_value_get_boolean (value)); +		break; +	default: +		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +		break; +	}  }  static void  terminal_screen_container_class_init (TerminalScreenContainerClass *klass)  { -  GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - -  g_type_class_add_private (gobject_class, sizeof (TerminalScreenContainerPrivate)); - -  gobject_class->constructor = terminal_screen_container_constructor; -  gobject_class->get_property = terminal_screen_container_get_property; -  gobject_class->set_property = terminal_screen_container_set_property; - -  g_object_class_install_property -    (gobject_class, -     PROP_SCREEN, -     g_param_spec_object ("screen", NULL, NULL, -                          TERMINAL_TYPE_SCREEN, -                          G_PARAM_READWRITE | -                          G_PARAM_CONSTRUCT_ONLY | -                          G_PARAM_STATIC_STRINGS)); - -   g_object_class_install_property -    (gobject_class, -     PROP_HSCROLLBAR_POLICY, -     g_param_spec_enum ("hscrollbar-policy", NULL, NULL, -                        GTK_TYPE_POLICY_TYPE, -                        GTK_POLICY_AUTOMATIC, -                        G_PARAM_READWRITE | -                        G_PARAM_STATIC_STRINGS)); -   g_object_class_install_property -    (gobject_class, -     PROP_VSCROLLBAR_POLICY, -     g_param_spec_enum ("vscrollbar-policy", NULL, NULL, -                        GTK_TYPE_POLICY_TYPE, -                        GTK_POLICY_AUTOMATIC, -                        G_PARAM_READWRITE | -                        G_PARAM_STATIC_STRINGS)); - -  g_object_class_install_property -    (gobject_class, -     PROP_WINDOW_PLACEMENT, -     g_param_spec_enum ("window-placement", NULL, NULL, -                        GTK_TYPE_CORNER_TYPE, -                        GTK_CORNER_TOP_LEFT, -                        G_PARAM_READWRITE | -                        G_PARAM_STATIC_STRINGS)); -   -  g_object_class_install_property -    (gobject_class, -     PROP_WINDOW_PLACEMENT_SET, -     g_param_spec_boolean ("window-placement-set", NULL, NULL, -                           FALSE, -                           G_PARAM_READWRITE | -                           G_PARAM_STATIC_STRINGS)); +	GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + +	g_type_class_add_private (gobject_class, sizeof (TerminalScreenContainerPrivate)); + +	gobject_class->constructor = terminal_screen_container_constructor; +	gobject_class->get_property = terminal_screen_container_get_property; +	gobject_class->set_property = terminal_screen_container_set_property; + +	g_object_class_install_property +	(gobject_class, +	 PROP_SCREEN, +	 g_param_spec_object ("screen", NULL, NULL, +	                      TERMINAL_TYPE_SCREEN, +	                      G_PARAM_READWRITE | +	                      G_PARAM_CONSTRUCT_ONLY | +	                      G_PARAM_STATIC_STRINGS)); + +	g_object_class_install_property +	(gobject_class, +	 PROP_HSCROLLBAR_POLICY, +	 g_param_spec_enum ("hscrollbar-policy", NULL, NULL, +	                    GTK_TYPE_POLICY_TYPE, +	                    GTK_POLICY_AUTOMATIC, +	                    G_PARAM_READWRITE | +	                    G_PARAM_STATIC_STRINGS)); +	g_object_class_install_property +	(gobject_class, +	 PROP_VSCROLLBAR_POLICY, +	 g_param_spec_enum ("vscrollbar-policy", NULL, NULL, +	                    GTK_TYPE_POLICY_TYPE, +	                    GTK_POLICY_AUTOMATIC, +	                    G_PARAM_READWRITE | +	                    G_PARAM_STATIC_STRINGS)); + +	g_object_class_install_property +	(gobject_class, +	 PROP_WINDOW_PLACEMENT, +	 g_param_spec_enum ("window-placement", NULL, NULL, +	                    GTK_TYPE_CORNER_TYPE, +	                    GTK_CORNER_TOP_LEFT, +	                    G_PARAM_READWRITE | +	                    G_PARAM_STATIC_STRINGS)); + +	g_object_class_install_property +	(gobject_class, +	 PROP_WINDOW_PLACEMENT_SET, +	 g_param_spec_boolean ("window-placement-set", NULL, NULL, +	                       FALSE, +	                       G_PARAM_READWRITE | +	                       G_PARAM_STATIC_STRINGS));  }  /* public API */ @@ -307,9 +310,9 @@ terminal_screen_container_class_init (TerminalScreenContainerClass *klass)  GtkWidget *  terminal_screen_container_new (TerminalScreen *screen)  { -  return g_object_new (TERMINAL_TYPE_SCREEN_CONTAINER, -                       "screen", screen, -                       NULL); +	return g_object_new (TERMINAL_TYPE_SCREEN_CONTAINER, +	                     "screen", screen, +	                     NULL);  }  /** @@ -321,9 +324,9 @@ terminal_screen_container_new (TerminalScreen *screen)  TerminalScreen *  terminal_screen_container_get_screen (TerminalScreenContainer *container)  { -  g_return_val_if_fail (TERMINAL_IS_SCREEN_CONTAINER (container), NULL); +	g_return_val_if_fail (TERMINAL_IS_SCREEN_CONTAINER (container), NULL); -  return container->priv->screen; +	return container->priv->screen;  }  /** @@ -335,9 +338,9 @@ terminal_screen_container_get_screen (TerminalScreenContainer *container)  TerminalScreenContainer *  terminal_screen_container_get_from_screen (TerminalScreen *screen)  { -  g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL); +	g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL); -  return TERMINAL_SCREEN_CONTAINER (gtk_widget_get_ancestor (GTK_WIDGET (screen), TERMINAL_TYPE_SCREEN_CONTAINER)); +	return TERMINAL_SCREEN_CONTAINER (gtk_widget_get_ancestor (GTK_WIDGET (screen), TERMINAL_TYPE_SCREEN_CONTAINER));  }  /** @@ -353,42 +356,45 @@ terminal_screen_container_set_policy (TerminalScreenContainer *container,                                        GtkPolicyType hpolicy G_GNUC_UNUSED,                                        GtkPolicyType vpolicy)  { -  TerminalScreenContainerPrivate *priv; -  GObject *object; +	TerminalScreenContainerPrivate *priv; +	GObject *object; -  g_return_if_fail (TERMINAL_IS_SCREEN_CONTAINER (container)); +	g_return_if_fail (TERMINAL_IS_SCREEN_CONTAINER (container)); -  object = G_OBJECT (container); -  priv = container->priv; +	object = G_OBJECT (container); +	priv = container->priv; -  g_object_freeze_notify (object); +	g_object_freeze_notify (object); -  if (priv->hscrollbar_policy != hpolicy) { -    priv->hscrollbar_policy = hpolicy; -    g_object_notify (object, "hscrollbar-policy"); -  } -  if (priv->vscrollbar_policy != vpolicy) { -    priv->vscrollbar_policy = vpolicy; -    g_object_notify (object, "vscrollbar-policy"); -  } +	if (priv->hscrollbar_policy != hpolicy) +	{ +		priv->hscrollbar_policy = hpolicy; +		g_object_notify (object, "hscrollbar-policy"); +	} +	if (priv->vscrollbar_policy != vpolicy) +	{ +		priv->vscrollbar_policy = vpolicy; +		g_object_notify (object, "vscrollbar-policy"); +	}  #ifdef USE_SCROLLED_WINDOW -  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_window), hpolicy, vpolicy); +	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_window), hpolicy, vpolicy);  #else -  switch (vpolicy) { -    case GTK_POLICY_NEVER: -      gtk_widget_hide (priv->vscrollbar); -      break; -    case GTK_POLICY_AUTOMATIC: -    case GTK_POLICY_ALWAYS: -      gtk_widget_show (priv->vscrollbar); -      break; -    default: -      g_assert_not_reached (); -  } +	switch (vpolicy) +	{ +	case GTK_POLICY_NEVER: +		gtk_widget_hide (priv->vscrollbar); +		break; +	case GTK_POLICY_AUTOMATIC: +	case GTK_POLICY_ALWAYS: +		gtk_widget_show (priv->vscrollbar); +		break; +	default: +		g_assert_not_reached (); +	}  #endif -  g_object_thaw_notify (object); +	g_object_thaw_notify (object);  }  /** @@ -400,10 +406,10 @@ terminal_screen_container_set_policy (TerminalScreenContainer *container,   */  void  terminal_screen_container_set_placement (TerminalScreenContainer *container, -                                         GtkCornerType corner) +        GtkCornerType corner)  { -  g_return_if_fail (TERMINAL_IS_SCREEN_CONTAINER (container)); +	g_return_if_fail (TERMINAL_IS_SCREEN_CONTAINER (container)); -  terminal_screen_container_set_placement_internal (container, corner); -  terminal_screen_container_set_placement_set (container, TRUE); +	terminal_screen_container_set_placement_internal (container, corner); +	terminal_screen_container_set_placement_set (container, TRUE);  } diff --git a/src/terminal-screen-container.h b/src/terminal-screen-container.h index 31e4859..7f96760 100644 --- a/src/terminal-screen-container.h +++ b/src/terminal-screen-container.h @@ -38,15 +38,15 @@ typedef struct _TerminalScreenContainerPrivate TerminalScreenContainerPrivate;  struct _TerminalScreenContainer  { -  GtkVBox parent_instance; +	GtkVBox parent_instance; -  /*< private >*/ -  TerminalScreenContainerPrivate *priv; +	/*< private >*/ +	TerminalScreenContainerPrivate *priv;  };  struct _TerminalScreenContainerClass  { -  GtkVBoxClass parent_class; +	GtkVBoxClass parent_class;  };  GType terminal_screen_container_get_type (void); @@ -58,11 +58,11 @@ TerminalScreen *terminal_screen_container_get_screen (TerminalScreenContainer *c  TerminalScreenContainer *terminal_screen_container_get_from_screen (TerminalScreen *screen);  void terminal_screen_container_set_policy (TerminalScreenContainer *container, -                                           GtkPolicyType hpolicy, -                                           GtkPolicyType vpolicy); +        GtkPolicyType hpolicy, +        GtkPolicyType vpolicy);  void terminal_screen_container_set_placement (TerminalScreenContainer *container, -                                              GtkCornerType corner); +        GtkCornerType corner);  G_END_DECLS diff --git a/src/terminal-screen.c b/src/terminal-screen.c index 3899e30..b71bdb4 100644 --- a/src/terminal-screen.c +++ b/src/terminal-screen.c @@ -48,82 +48,83 @@  typedef struct  { -  int tag; -  TerminalURLFlavour flavor; +	int tag; +	TerminalURLFlavour flavor;  } TagData;  struct _TerminalScreenPrivate  { -  TerminalProfile *profile; /* may be NULL at times */ -  guint profile_changed_id; -  guint profile_forgotten_id; -  char *raw_title, *raw_icon_title; -  char *cooked_title, *cooked_icon_title; -  char *override_title; -  gboolean icon_title_set; -  char *initial_working_directory; -  char **initial_env; -  char **override_command; -  int child_pid; -  int pty_fd; -  double font_scale; -  gboolean user_title; /* title was manually set */ -  GSList *match_tags; -  guint launch_child_source_id; +	TerminalProfile *profile; /* may be NULL at times */ +	guint profile_changed_id; +	guint profile_forgotten_id; +	char *raw_title, *raw_icon_title; +	char *cooked_title, *cooked_icon_title; +	char *override_title; +	gboolean icon_title_set; +	char *initial_working_directory; +	char **initial_env; +	char **override_command; +	int child_pid; +	int pty_fd; +	double font_scale; +	gboolean user_title; /* title was manually set */ +	GSList *match_tags; +	guint launch_child_source_id;  };  enum  { -  PROFILE_SET, -  SHOW_POPUP_MENU, -  MATCH_CLICKED, -  CLOSE_SCREEN, -  LAST_SIGNAL +    PROFILE_SET, +    SHOW_POPUP_MENU, +    MATCH_CLICKED, +    CLOSE_SCREEN, +    LAST_SIGNAL  }; -enum { -  PROP_0, -  PROP_PROFILE, -  PROP_ICON_TITLE, -  PROP_ICON_TITLE_SET, -  PROP_OVERRIDE_COMMAND, -  PROP_TITLE, -  PROP_INITIAL_ENVIRONMENT +enum +{ +    PROP_0, +    PROP_PROFILE, +    PROP_ICON_TITLE, +    PROP_ICON_TITLE_SET, +    PROP_OVERRIDE_COMMAND, +    PROP_TITLE, +    PROP_INITIAL_ENVIRONMENT  };  enum  { -  TARGET_COLOR, -  TARGET_BGIMAGE, -  TARGET_RESET_BG, -  TARGET_MOZ_URL, -  TARGET_NETSCAPE_URL, -  TARGET_TAB +    TARGET_COLOR, +    TARGET_BGIMAGE, +    TARGET_RESET_BG, +    TARGET_MOZ_URL, +    TARGET_NETSCAPE_URL, +    TARGET_TAB  };  static void terminal_screen_dispose     (GObject             *object);  static void terminal_screen_finalize    (GObject             *object);  static void terminal_screen_drag_data_received (GtkWidget        *widget, -                                                GdkDragContext   *context, -                                                gint              x, -                                                gint              y, -                                                GtkSelectionData *selection_data, -                                                guint             info, -                                                guint             time); +        GdkDragContext   *context, +        gint              x, +        gint              y, +        GtkSelectionData *selection_data, +        guint             info, +        guint             time);  static void terminal_screen_system_font_notify_cb (TerminalApp *app, -                                                   GParamSpec *pspec, -                                                   TerminalScreen *screen); +        GParamSpec *pspec, +        TerminalScreen *screen);  static void terminal_screen_change_font (TerminalScreen *screen);  static gboolean terminal_screen_popup_menu (GtkWidget *widget);  static gboolean terminal_screen_button_press (GtkWidget *widget, -                                              GdkEventButton *event); +        GdkEventButton *event);  static void terminal_screen_launch_child_on_idle (TerminalScreen *screen);  static void terminal_screen_child_exited  (VteTerminal *terminal);  static void terminal_screen_window_title_changed      (VteTerminal *vte_terminal, -                                                       TerminalScreen *screen); +        TerminalScreen *screen);  static void terminal_screen_icon_title_changed        (VteTerminal *vte_terminal, -                                                       TerminalScreen *screen); +        TerminalScreen *screen);  static void update_color_scheme                      (TerminalScreen *screen); @@ -133,9 +134,9 @@ static void terminal_screen_cook_title      (TerminalScreen *screen);  static void terminal_screen_cook_icon_title (TerminalScreen *screen);  static char* terminal_screen_check_match       (TerminalScreen            *screen, -                                                int                   column, -                                                int                   row, -                                                int                  *flavor); +        int                   column, +        int                   row, +        int                  *flavor);  static guint signals[LAST_SIGNAL]; @@ -151,18 +152,20 @@ static guint signals[LAST_SIGNAL];  #define USERPASS USERCHARS_CLASS "+(?:" PASSCHARS_CLASS "+)?"  #define URLPATH   "(?:(/"PATHCHARS_CLASS"+(?:[(]"PATHCHARS_CLASS"*[)])*"PATHCHARS_CLASS"*)*"PATHTERM_CLASS")?" -typedef struct { -  const char *pattern; -  TerminalURLFlavour flavor; -  GRegexCompileFlags flags; +typedef struct +{ +	const char *pattern; +	TerminalURLFlavour flavor; +	GRegexCompileFlags flags;  } TerminalRegexPattern; -static const TerminalRegexPattern url_regex_patterns[] = { -  { SCHEME "//(?:" USERPASS "\\@)?" HOST PORT URLPATH, FLAVOR_AS_IS, G_REGEX_CASELESS }, -  { "(?:www|ftp)" HOSTCHARS_CLASS "*\\." HOST PORT URLPATH , FLAVOR_DEFAULT_TO_HTTP, G_REGEX_CASELESS  }, -  { "(?:callto:|h323:|sip:)" USERCHARS_CLASS "[" USERCHARS ".]*(?:" PORT "/[a-z0-9]+)?\\@" HOST, FLAVOR_VOIP_CALL, G_REGEX_CASELESS  }, -  { "(?:mailto:)?" USERCHARS_CLASS "[" USERCHARS ".]*\\@" HOSTCHARS_CLASS "+\\." HOST, FLAVOR_EMAIL, G_REGEX_CASELESS  }, -  { "news:[[:alnum:]\\Q^_{|}~!\"#$%&'()*+,./;:=?`\\E]+", FLAVOR_AS_IS, G_REGEX_CASELESS  }, +static const TerminalRegexPattern url_regex_patterns[] = +{ +	{ SCHEME "//(?:" USERPASS "\\@)?" HOST PORT URLPATH, FLAVOR_AS_IS, G_REGEX_CASELESS }, +	{ "(?:www|ftp)" HOSTCHARS_CLASS "*\\." HOST PORT URLPATH , FLAVOR_DEFAULT_TO_HTTP, G_REGEX_CASELESS  }, +	{ "(?:callto:|h323:|sip:)" USERCHARS_CLASS "[" USERCHARS ".]*(?:" PORT "/[a-z0-9]+)?\\@" HOST, FLAVOR_VOIP_CALL, G_REGEX_CASELESS  }, +	{ "(?:mailto:)?" USERCHARS_CLASS "[" USERCHARS ".]*\\@" HOSTCHARS_CLASS "+\\." HOST, FLAVOR_EMAIL, G_REGEX_CASELESS  }, +	{ "news:[[:alnum:]\\Q^_{|}~!\"#$%&'()*+,./;:=?`\\E]+", FLAVOR_AS_IS, G_REGEX_CASELESS  },  };  static GRegex **url_regexes; @@ -170,9 +173,10 @@ static TerminalURLFlavour *url_regex_flavors;  static guint n_url_regexes;  #ifdef ENABLE_SKEY -static const TerminalRegexPattern skey_regex_patterns[] = { -  { "s/key [[:digit:]]* [-[:alnum:]]*",         FLAVOR_AS_IS }, -  { "otp-[a-z0-9]* [[:digit:]]* [-[:alnum:]]*", FLAVOR_AS_IS }, +static const TerminalRegexPattern skey_regex_patterns[] = +{ +	{ "s/key [[:digit:]]* [-[:alnum:]]*",         FLAVOR_AS_IS }, +	{ "otp-[a-z0-9]* [[:digit:]]* [-[:alnum:]]*", FLAVOR_AS_IS },  };  static GRegex **skey_regexes; @@ -186,141 +190,142 @@ G_DEFINE_TYPE (TerminalScreen, terminal_screen, VTE_TYPE_TERMINAL)  static char *  cwd_of_pid (int pid)  { -  static const char patterns[][18] = { -    "/proc/%d/cwd",         /* Linux */ -    "/proc/%d/path/cwd",    /* Solaris >= 10 */ -  }; -  guint i; -   -  if (pid == -1) -    return NULL; - -  /* Try to get the working directory using various OS-specific mechanisms */ -  for (i = 0; i < G_N_ELEMENTS (patterns); ++i) -    { -      char cwd_file[64]; -      char buf[PATH_MAX + 1]; -      int len; - -      g_snprintf (cwd_file, sizeof (cwd_file), patterns[i], pid); -      len = readlink (cwd_file, buf, sizeof (buf) - 1); - -      if (len > 0 && buf[0] == '/') -        return g_strndup (buf, len); - -      /* If that didn't do it, try this hack */ -      if (len <= 0) -        { -          char *cwd, *working_dir = NULL; - -          cwd = g_get_current_dir (); -          if (cwd != NULL) -            { -              /* On Solaris, readlink returns an empty string, but the -               * link can be used as a directory, including as a target -               * of chdir(). -               */ -              if (chdir (cwd_file) == 0) -                { -                  working_dir = g_get_current_dir (); -                  (void) chdir (cwd); -                } -              g_free (cwd); -            } - -          if (working_dir) -            return working_dir; -        } -    } - -  return NULL; +	static const char patterns[][18] = +	{ +		"/proc/%d/cwd",         /* Linux */ +		"/proc/%d/path/cwd",    /* Solaris >= 10 */ +	}; +	guint i; + +	if (pid == -1) +		return NULL; + +	/* Try to get the working directory using various OS-specific mechanisms */ +	for (i = 0; i < G_N_ELEMENTS (patterns); ++i) +	{ +		char cwd_file[64]; +		char buf[PATH_MAX + 1]; +		int len; + +		g_snprintf (cwd_file, sizeof (cwd_file), patterns[i], pid); +		len = readlink (cwd_file, buf, sizeof (buf) - 1); + +		if (len > 0 && buf[0] == '/') +			return g_strndup (buf, len); + +		/* If that didn't do it, try this hack */ +		if (len <= 0) +		{ +			char *cwd, *working_dir = NULL; + +			cwd = g_get_current_dir (); +			if (cwd != NULL) +			{ +				/* On Solaris, readlink returns an empty string, but the +				 * link can be used as a directory, including as a target +				 * of chdir(). +				 */ +				if (chdir (cwd_file) == 0) +				{ +					working_dir = g_get_current_dir (); +					(void) chdir (cwd); +				} +				g_free (cwd); +			} + +			if (working_dir) +				return working_dir; +		} +	} + +	return NULL;  }  static void  free_tag_data (TagData *tagdata)  { -  g_slice_free (TagData, tagdata); +	g_slice_free (TagData, tagdata);  }  static void  terminal_screen_class_enable_menu_bar_accel_notify_cb (TerminalApp *app, -                                                       GParamSpec *pspec, -                                                       TerminalScreenClass *klass) +        GParamSpec *pspec, +        TerminalScreenClass *klass)  { -  static gboolean is_enabled = TRUE; /* the binding is enabled by default since GtkWidgetClass installs it */ -  gboolean enable; -  GtkBindingSet *binding_set; +	static gboolean is_enabled = TRUE; /* the binding is enabled by default since GtkWidgetClass installs it */ +	gboolean enable; +	GtkBindingSet *binding_set; -  g_object_get (app, TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, &enable, NULL); +	g_object_get (app, TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, &enable, NULL); -  /* Only remove the 'skip' entry when we have added it previously! */ -  if (enable == is_enabled) -    return; +	/* Only remove the 'skip' entry when we have added it previously! */ +	if (enable == is_enabled) +		return; -  is_enabled = enable; +	is_enabled = enable; -  binding_set = gtk_binding_set_by_class (klass); -  if (enable) -    gtk_binding_entry_remove (binding_set, GDK_F10, GDK_SHIFT_MASK); -  else -    gtk_binding_entry_skip (binding_set, GDK_F10, GDK_SHIFT_MASK); +	binding_set = gtk_binding_set_by_class (klass); +	if (enable) +		gtk_binding_entry_remove (binding_set, GDK_F10, GDK_SHIFT_MASK); +	else +		gtk_binding_entry_skip (binding_set, GDK_F10, GDK_SHIFT_MASK);  }  static TerminalWindow *  terminal_screen_get_window (TerminalScreen *screen)  { -  GtkWidget *widget = GTK_WIDGET (screen); -  GtkWidget *toplevel; +	GtkWidget *widget = GTK_WIDGET (screen); +	GtkWidget *toplevel; -  toplevel = gtk_widget_get_toplevel (widget); -  if (!gtk_widget_is_toplevel (toplevel)) -    return NULL; +	toplevel = gtk_widget_get_toplevel (widget); +	if (!gtk_widget_is_toplevel (toplevel)) +		return NULL; -  return TERMINAL_WINDOW (toplevel); +	return TERMINAL_WINDOW (toplevel);  }  static gboolean  window_uses_argb_visual (TerminalScreen *screen)  { -  TerminalWindow *window; +	TerminalWindow *window; -  window = terminal_screen_get_window (screen); -  if (window == NULL || !gtk_widget_get_realized (GTK_WIDGET (window))) -    return FALSE; +	window = terminal_screen_get_window (screen); +	if (window == NULL || !gtk_widget_get_realized (GTK_WIDGET (window))) +		return FALSE; -  return terminal_window_uses_argb_visual (window); +	return terminal_window_uses_argb_visual (window);  }  static void  terminal_screen_realize (GtkWidget *widget)  { -  TerminalScreen *screen = TERMINAL_SCREEN (widget); -  TerminalScreenPrivate *priv = screen->priv; -  TerminalBackgroundType bg_type; +	TerminalScreen *screen = TERMINAL_SCREEN (widget); +	TerminalScreenPrivate *priv = screen->priv; +	TerminalBackgroundType bg_type; -  GTK_WIDGET_CLASS (terminal_screen_parent_class)->realize (widget); +	GTK_WIDGET_CLASS (terminal_screen_parent_class)->realize (widget); -  /* FIXME: Don't enable this if we have a compmgr. */ -  bg_type = terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_BACKGROUND_TYPE); -  vte_terminal_set_background_transparent (VTE_TERMINAL (screen), -                                           bg_type == TERMINAL_BACKGROUND_TRANSPARENT && -                                           !window_uses_argb_visual (screen)); +	/* FIXME: Don't enable this if we have a compmgr. */ +	bg_type = terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_BACKGROUND_TYPE); +	vte_terminal_set_background_transparent (VTE_TERMINAL (screen), +	        bg_type == TERMINAL_BACKGROUND_TRANSPARENT && +	        !window_uses_argb_visual (screen));  }  static void  terminal_screen_style_set (GtkWidget *widget,                             GtkStyle *previous_style)  { -  TerminalScreen *screen = TERMINAL_SCREEN (widget); -  void (* style_set) (GtkWidget*, GtkStyle*) = GTK_WIDGET_CLASS (terminal_screen_parent_class)->style_set; +	TerminalScreen *screen = TERMINAL_SCREEN (widget); +	void (* style_set) (GtkWidget*, GtkStyle*) = GTK_WIDGET_CLASS (terminal_screen_parent_class)->style_set; -  if (style_set) -    style_set (widget, previous_style); +	if (style_set) +		style_set (widget, previous_style); -  update_color_scheme (screen); +	update_color_scheme (screen); -  if (gtk_widget_get_realized (widget)) -    terminal_screen_change_font (screen); +	if (gtk_widget_get_realized (widget)) +		terminal_screen_change_font (screen);  }  #ifdef MATE_ENABLE_DEBUG @@ -328,97 +333,98 @@ static void  size_request (GtkWidget *widget,                GtkRequisition *req)  { -  _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                         "[screen %p] size-request %d : %d\n", -                         widget, req->width, req->height); +	_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +	                       "[screen %p] size-request %d : %d\n", +	                       widget, req->width, req->height);  }  static void  size_allocate (GtkWidget *widget,                 GtkAllocation *allocation)  { -  _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                         "[screen %p] size-alloc   %d : %d at (%d, %d)\n", -                         widget, allocation->width, allocation->height, allocation->x, allocation->y); +	_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +	                       "[screen %p] size-alloc   %d : %d at (%d, %d)\n", +	                       widget, allocation->width, allocation->height, allocation->x, allocation->y);  }  #endif  static void  terminal_screen_init (TerminalScreen *screen)  { -  const GtkTargetEntry target_table[] = { -    { "GTK_NOTEBOOK_TAB", GTK_TARGET_SAME_APP, TARGET_TAB }, -    { "application/x-color", 0, TARGET_COLOR }, -    { "property/bgimage",    0, TARGET_BGIMAGE }, -    { "x-special/mate-reset-background", 0, TARGET_RESET_BG }, -    { "text/x-moz-url",  0, TARGET_MOZ_URL }, -    { "_NETSCAPE_URL", 0, TARGET_NETSCAPE_URL } -  }; -  VteTerminal *terminal = VTE_TERMINAL (screen); -  TerminalScreenPrivate *priv; -  GtkTargetList *target_list; -  GtkTargetEntry *targets; -  int n_targets; -  guint i; - -  priv = screen->priv = G_TYPE_INSTANCE_GET_PRIVATE (screen, TERMINAL_TYPE_SCREEN, TerminalScreenPrivate); - -  vte_terminal_set_mouse_autohide (VTE_TERMINAL (screen), TRUE); - -  priv->child_pid = -1; -  priv->pty_fd = -1; - -  priv->font_scale = PANGO_SCALE_MEDIUM; - -  for (i = 0; i < n_url_regexes; ++i) -    { -      TagData *tag_data; - -      tag_data = g_slice_new (TagData); -      tag_data->flavor = url_regex_flavors[i]; -      tag_data->tag = vte_terminal_match_add_gregex (terminal, url_regexes[i], 0); -      vte_terminal_match_set_cursor_type (terminal, tag_data->tag, URL_MATCH_CURSOR); - -      priv->match_tags = g_slist_prepend (priv->match_tags, tag_data); -    } - -  /* Setup DND */ -  target_list = gtk_target_list_new (NULL, 0); -  gtk_target_list_add_uri_targets (target_list, 0); -  gtk_target_list_add_text_targets (target_list, 0); -  gtk_target_list_add_table (target_list, target_table, G_N_ELEMENTS (target_table)); - -  targets = gtk_target_table_new_from_list (target_list, &n_targets); - -  gtk_drag_dest_set (GTK_WIDGET (screen), -                     GTK_DEST_DEFAULT_MOTION | -                     GTK_DEST_DEFAULT_HIGHLIGHT | -                     GTK_DEST_DEFAULT_DROP, -                     targets, n_targets, -                     GDK_ACTION_COPY | GDK_ACTION_MOVE); - -  gtk_target_table_free (targets, n_targets); -  gtk_target_list_unref (target_list); - -  priv->override_title = NULL; -  priv->user_title = FALSE; -   -  g_signal_connect (screen, "window-title-changed", -                    G_CALLBACK (terminal_screen_window_title_changed), -                    screen); -  g_signal_connect (screen, "icon-title-changed", -                    G_CALLBACK (terminal_screen_icon_title_changed), -                    screen); - -  g_signal_connect (terminal_app_get (), "notify::system-font", -                    G_CALLBACK (terminal_screen_system_font_notify_cb), screen); +	const GtkTargetEntry target_table[] = +	{ +		{ "GTK_NOTEBOOK_TAB", GTK_TARGET_SAME_APP, TARGET_TAB }, +		{ "application/x-color", 0, TARGET_COLOR }, +		{ "property/bgimage",    0, TARGET_BGIMAGE }, +		{ "x-special/mate-reset-background", 0, TARGET_RESET_BG }, +		{ "text/x-moz-url",  0, TARGET_MOZ_URL }, +		{ "_NETSCAPE_URL", 0, TARGET_NETSCAPE_URL } +	}; +	VteTerminal *terminal = VTE_TERMINAL (screen); +	TerminalScreenPrivate *priv; +	GtkTargetList *target_list; +	GtkTargetEntry *targets; +	int n_targets; +	guint i; + +	priv = screen->priv = G_TYPE_INSTANCE_GET_PRIVATE (screen, TERMINAL_TYPE_SCREEN, TerminalScreenPrivate); + +	vte_terminal_set_mouse_autohide (VTE_TERMINAL (screen), TRUE); + +	priv->child_pid = -1; +	priv->pty_fd = -1; + +	priv->font_scale = PANGO_SCALE_MEDIUM; + +	for (i = 0; i < n_url_regexes; ++i) +	{ +		TagData *tag_data; + +		tag_data = g_slice_new (TagData); +		tag_data->flavor = url_regex_flavors[i]; +		tag_data->tag = vte_terminal_match_add_gregex (terminal, url_regexes[i], 0); +		vte_terminal_match_set_cursor_type (terminal, tag_data->tag, URL_MATCH_CURSOR); + +		priv->match_tags = g_slist_prepend (priv->match_tags, tag_data); +	} + +	/* Setup DND */ +	target_list = gtk_target_list_new (NULL, 0); +	gtk_target_list_add_uri_targets (target_list, 0); +	gtk_target_list_add_text_targets (target_list, 0); +	gtk_target_list_add_table (target_list, target_table, G_N_ELEMENTS (target_table)); + +	targets = gtk_target_table_new_from_list (target_list, &n_targets); + +	gtk_drag_dest_set (GTK_WIDGET (screen), +	                   GTK_DEST_DEFAULT_MOTION | +	                   GTK_DEST_DEFAULT_HIGHLIGHT | +	                   GTK_DEST_DEFAULT_DROP, +	                   targets, n_targets, +	                   GDK_ACTION_COPY | GDK_ACTION_MOVE); + +	gtk_target_table_free (targets, n_targets); +	gtk_target_list_unref (target_list); + +	priv->override_title = NULL; +	priv->user_title = FALSE; + +	g_signal_connect (screen, "window-title-changed", +	                  G_CALLBACK (terminal_screen_window_title_changed), +	                  screen); +	g_signal_connect (screen, "icon-title-changed", +	                  G_CALLBACK (terminal_screen_icon_title_changed), +	                  screen); + +	g_signal_connect (terminal_app_get (), "notify::system-font", +	                  G_CALLBACK (terminal_screen_system_font_notify_cb), screen);  #ifdef MATE_ENABLE_DEBUG -  _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_GEOMETRY) -    { -      g_signal_connect_after (screen, "size-request", G_CALLBACK (size_request), NULL); -      g_signal_connect_after (screen, "size-allocate", G_CALLBACK (size_allocate), NULL); -    } +	_TERMINAL_DEBUG_IF (TERMINAL_DEBUG_GEOMETRY) +	{ +		g_signal_connect_after (screen, "size-request", G_CALLBACK (size_request), NULL); +		g_signal_connect_after (screen, "size-allocate", G_CALLBACK (size_allocate), NULL); +	}  #endif  } @@ -428,32 +434,32 @@ terminal_screen_get_property (GObject *object,                                GValue *value,                                GParamSpec *pspec)  { -  TerminalScreen *screen = TERMINAL_SCREEN (object); - -  switch (prop_id) -    { -      case PROP_PROFILE: -        g_value_set_object (value, terminal_screen_get_profile (screen)); -        break; -      case PROP_ICON_TITLE: -        g_value_set_string (value, terminal_screen_get_icon_title (screen)); -        break; -      case PROP_ICON_TITLE_SET: -        g_value_set_boolean (value, terminal_screen_get_icon_title_set (screen)); -        break; -      case PROP_OVERRIDE_COMMAND: -        g_value_set_boxed (value, terminal_screen_get_override_command (screen)); -        break; -      case PROP_INITIAL_ENVIRONMENT: -        g_value_set_boxed (value, terminal_screen_get_initial_environment (screen)); -        break; -      case PROP_TITLE: -        g_value_set_string (value, terminal_screen_get_title (screen)); -        break; -      default: -        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -        break; -    } +	TerminalScreen *screen = TERMINAL_SCREEN (object); + +	switch (prop_id) +	{ +	case PROP_PROFILE: +		g_value_set_object (value, terminal_screen_get_profile (screen)); +		break; +	case PROP_ICON_TITLE: +		g_value_set_string (value, terminal_screen_get_icon_title (screen)); +		break; +	case PROP_ICON_TITLE_SET: +		g_value_set_boolean (value, terminal_screen_get_icon_title_set (screen)); +		break; +	case PROP_OVERRIDE_COMMAND: +		g_value_set_boxed (value, terminal_screen_get_override_command (screen)); +		break; +	case PROP_INITIAL_ENVIRONMENT: +		g_value_set_boxed (value, terminal_screen_get_initial_environment (screen)); +		break; +	case PROP_TITLE: +		g_value_set_string (value, terminal_screen_get_title (screen)); +		break; +	default: +		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +		break; +	}  }  static void @@ -462,232 +468,233 @@ terminal_screen_set_property (GObject *object,                                const GValue *value,                                GParamSpec *pspec)  { -  TerminalScreen *screen = TERMINAL_SCREEN (object); - -  switch (prop_id) -    { -      case PROP_PROFILE: { -        TerminalProfile *profile; - -        profile = g_value_get_object (value); -        g_assert (profile != NULL); -        terminal_screen_set_profile (screen, profile); -        break; -      } -      case PROP_OVERRIDE_COMMAND: -        terminal_screen_set_override_command (screen, g_value_get_boxed (value)); -        break; -      case PROP_INITIAL_ENVIRONMENT: -        terminal_screen_set_initial_environment (screen, g_value_get_boxed (value)); -        break; -      case PROP_ICON_TITLE: -      case PROP_ICON_TITLE_SET: -      case PROP_TITLE: -        /* not writable */ -      default: -        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -        break; -    } +	TerminalScreen *screen = TERMINAL_SCREEN (object); + +	switch (prop_id) +	{ +	case PROP_PROFILE: +	{ +		TerminalProfile *profile; + +		profile = g_value_get_object (value); +		g_assert (profile != NULL); +		terminal_screen_set_profile (screen, profile); +		break; +	} +	case PROP_OVERRIDE_COMMAND: +		terminal_screen_set_override_command (screen, g_value_get_boxed (value)); +		break; +	case PROP_INITIAL_ENVIRONMENT: +		terminal_screen_set_initial_environment (screen, g_value_get_boxed (value)); +		break; +	case PROP_ICON_TITLE: +	case PROP_ICON_TITLE_SET: +	case PROP_TITLE: +		/* not writable */ +	default: +		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +		break; +	}  }  static void  terminal_screen_class_init (TerminalScreenClass *klass)  { -  GObjectClass *object_class = G_OBJECT_CLASS (klass); -  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); -  VteTerminalClass *terminal_class = VTE_TERMINAL_CLASS (klass); -  TerminalApp *app; -  guint i; - -  object_class->dispose = terminal_screen_dispose; -  object_class->finalize = terminal_screen_finalize; -  object_class->get_property = terminal_screen_get_property; -  object_class->set_property = terminal_screen_set_property; - -  widget_class->realize = terminal_screen_realize; -  widget_class->style_set = terminal_screen_style_set; -  widget_class->drag_data_received = terminal_screen_drag_data_received; -  widget_class->button_press_event = terminal_screen_button_press; -  widget_class->popup_menu = terminal_screen_popup_menu; - -  terminal_class->child_exited = terminal_screen_child_exited; - -  signals[PROFILE_SET] = -    g_signal_new (I_("profile-set"), -                  G_OBJECT_CLASS_TYPE (object_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (TerminalScreenClass, profile_set), -                  NULL, NULL, -                  g_cclosure_marshal_VOID__OBJECT, -                  G_TYPE_NONE, -                  1, TERMINAL_TYPE_PROFILE); -   -  signals[SHOW_POPUP_MENU] = -    g_signal_new (I_("show-popup-menu"), -                  G_OBJECT_CLASS_TYPE (object_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (TerminalScreenClass, show_popup_menu), -                  NULL, NULL, -                  g_cclosure_marshal_VOID__POINTER, -                  G_TYPE_NONE, -                  1, -                  G_TYPE_POINTER); - -  signals[MATCH_CLICKED] = -    g_signal_new (I_("match-clicked"), -                  G_OBJECT_CLASS_TYPE (object_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (TerminalScreenClass, match_clicked), -                  g_signal_accumulator_true_handled, NULL, -                  _terminal_marshal_BOOLEAN__STRING_INT_UINT, -                  G_TYPE_BOOLEAN, -                  3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_UINT); -   -  signals[CLOSE_SCREEN] = -    g_signal_new (I_("close-screen"), -                  G_OBJECT_CLASS_TYPE (object_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (TerminalScreenClass, close_screen), -                  NULL, NULL, -                  g_cclosure_marshal_VOID__VOID, -                  G_TYPE_NONE, -                  0); - -  g_object_class_install_property -    (object_class, -     PROP_PROFILE, -     g_param_spec_string ("profile", NULL, NULL, -                          NULL, -                          G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); - -  g_object_class_install_property -    (object_class, -     PROP_ICON_TITLE, -     g_param_spec_string ("icon-title", NULL, NULL, -                          NULL, -                          G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); - -  g_object_class_install_property -    (object_class, -     PROP_ICON_TITLE_SET, -     g_param_spec_boolean ("icon-title-set", NULL, NULL, -                           FALSE, -                           G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); - -  g_object_class_install_property -    (object_class, -     PROP_OVERRIDE_COMMAND, -     g_param_spec_boxed ("override-command", NULL, NULL, -                         G_TYPE_STRV, -                         G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); - -  g_object_class_install_property -    (object_class, -     PROP_TITLE, -     g_param_spec_string ("title", NULL, NULL, -                          NULL, -                          G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); - -  g_object_class_install_property -    (object_class, -     PROP_INITIAL_ENVIRONMENT, -     g_param_spec_boxed ("initial-environment", NULL, NULL, -                         G_TYPE_STRV, -                         G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); - -  g_type_class_add_private (object_class, sizeof (TerminalScreenPrivate)); - -  /* Precompile the regexes */ -  n_url_regexes = G_N_ELEMENTS (url_regex_patterns); -  url_regexes = g_new0 (GRegex*, n_url_regexes); -  url_regex_flavors = g_new0 (TerminalURLFlavour, n_url_regexes); - -  for (i = 0; i < n_url_regexes; ++i) -    { -      GError *error = NULL; - -      url_regexes[i] = g_regex_new (url_regex_patterns[i].pattern, -                                    url_regex_patterns[i].flags | G_REGEX_OPTIMIZE, -                                    0, &error); -      if (error) -        { -          g_message ("%s", error->message); -          g_error_free (error); -        } - -      url_regex_flavors[i] = url_regex_patterns[i].flavor; -    } +	GObjectClass *object_class = G_OBJECT_CLASS (klass); +	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); +	VteTerminalClass *terminal_class = VTE_TERMINAL_CLASS (klass); +	TerminalApp *app; +	guint i; + +	object_class->dispose = terminal_screen_dispose; +	object_class->finalize = terminal_screen_finalize; +	object_class->get_property = terminal_screen_get_property; +	object_class->set_property = terminal_screen_set_property; + +	widget_class->realize = terminal_screen_realize; +	widget_class->style_set = terminal_screen_style_set; +	widget_class->drag_data_received = terminal_screen_drag_data_received; +	widget_class->button_press_event = terminal_screen_button_press; +	widget_class->popup_menu = terminal_screen_popup_menu; + +	terminal_class->child_exited = terminal_screen_child_exited; + +	signals[PROFILE_SET] = +	    g_signal_new (I_("profile-set"), +	                  G_OBJECT_CLASS_TYPE (object_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (TerminalScreenClass, profile_set), +	                  NULL, NULL, +	                  g_cclosure_marshal_VOID__OBJECT, +	                  G_TYPE_NONE, +	                  1, TERMINAL_TYPE_PROFILE); + +	signals[SHOW_POPUP_MENU] = +	    g_signal_new (I_("show-popup-menu"), +	                  G_OBJECT_CLASS_TYPE (object_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (TerminalScreenClass, show_popup_menu), +	                  NULL, NULL, +	                  g_cclosure_marshal_VOID__POINTER, +	                  G_TYPE_NONE, +	                  1, +	                  G_TYPE_POINTER); + +	signals[MATCH_CLICKED] = +	    g_signal_new (I_("match-clicked"), +	                  G_OBJECT_CLASS_TYPE (object_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (TerminalScreenClass, match_clicked), +	                  g_signal_accumulator_true_handled, NULL, +	                  _terminal_marshal_BOOLEAN__STRING_INT_UINT, +	                  G_TYPE_BOOLEAN, +	                  3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_UINT); + +	signals[CLOSE_SCREEN] = +	    g_signal_new (I_("close-screen"), +	                  G_OBJECT_CLASS_TYPE (object_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (TerminalScreenClass, close_screen), +	                  NULL, NULL, +	                  g_cclosure_marshal_VOID__VOID, +	                  G_TYPE_NONE, +	                  0); + +	g_object_class_install_property +	(object_class, +	 PROP_PROFILE, +	 g_param_spec_string ("profile", NULL, NULL, +	                      NULL, +	                      G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + +	g_object_class_install_property +	(object_class, +	 PROP_ICON_TITLE, +	 g_param_spec_string ("icon-title", NULL, NULL, +	                      NULL, +	                      G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + +	g_object_class_install_property +	(object_class, +	 PROP_ICON_TITLE_SET, +	 g_param_spec_boolean ("icon-title-set", NULL, NULL, +	                       FALSE, +	                       G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + +	g_object_class_install_property +	(object_class, +	 PROP_OVERRIDE_COMMAND, +	 g_param_spec_boxed ("override-command", NULL, NULL, +	                     G_TYPE_STRV, +	                     G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + +	g_object_class_install_property +	(object_class, +	 PROP_TITLE, +	 g_param_spec_string ("title", NULL, NULL, +	                      NULL, +	                      G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + +	g_object_class_install_property +	(object_class, +	 PROP_INITIAL_ENVIRONMENT, +	 g_param_spec_boxed ("initial-environment", NULL, NULL, +	                     G_TYPE_STRV, +	                     G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + +	g_type_class_add_private (object_class, sizeof (TerminalScreenPrivate)); + +	/* Precompile the regexes */ +	n_url_regexes = G_N_ELEMENTS (url_regex_patterns); +	url_regexes = g_new0 (GRegex*, n_url_regexes); +	url_regex_flavors = g_new0 (TerminalURLFlavour, n_url_regexes); + +	for (i = 0; i < n_url_regexes; ++i) +	{ +		GError *error = NULL; + +		url_regexes[i] = g_regex_new (url_regex_patterns[i].pattern, +		                              url_regex_patterns[i].flags | G_REGEX_OPTIMIZE, +		                              0, &error); +		if (error) +		{ +			g_message ("%s", error->message); +			g_error_free (error); +		} + +		url_regex_flavors[i] = url_regex_patterns[i].flavor; +	}  #ifdef ENABLE_SKEY -  n_skey_regexes = G_N_ELEMENTS (skey_regex_patterns); -  skey_regexes = g_new0 (GRegex*, n_skey_regexes); - -  for (i = 0; i < n_skey_regexes; ++i) -    { -      GError *error = NULL; - -      skey_regexes[i] = g_regex_new (skey_regex_patterns[i].pattern, G_REGEX_OPTIMIZE, 0, &error); -      if (error) -        { -          g_message ("%s", error->message); -          g_error_free (error); -        } -    } +	n_skey_regexes = G_N_ELEMENTS (skey_regex_patterns); +	skey_regexes = g_new0 (GRegex*, n_skey_regexes); + +	for (i = 0; i < n_skey_regexes; ++i) +	{ +		GError *error = NULL; + +		skey_regexes[i] = g_regex_new (skey_regex_patterns[i].pattern, G_REGEX_OPTIMIZE, 0, &error); +		if (error) +		{ +			g_message ("%s", error->message); +			g_error_free (error); +		} +	}  #endif /* ENABLE_SKEY */ -  /* This fixes bug #329827 */ -  app = terminal_app_get (); -  terminal_screen_class_enable_menu_bar_accel_notify_cb (app, NULL, klass); -  g_signal_connect (app, "notify::" TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, -                    G_CALLBACK (terminal_screen_class_enable_menu_bar_accel_notify_cb), klass); +	/* This fixes bug #329827 */ +	app = terminal_app_get (); +	terminal_screen_class_enable_menu_bar_accel_notify_cb (app, NULL, klass); +	g_signal_connect (app, "notify::" TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, +	                  G_CALLBACK (terminal_screen_class_enable_menu_bar_accel_notify_cb), klass);  }  static void  terminal_screen_dispose (GObject *object)  { -  TerminalScreen *screen = TERMINAL_SCREEN (object); -  TerminalScreenPrivate *priv = screen->priv; -  GtkSettings *settings; +	TerminalScreen *screen = TERMINAL_SCREEN (object); +	TerminalScreenPrivate *priv = screen->priv; +	GtkSettings *settings; -  settings = gtk_widget_get_settings (GTK_WIDGET (screen)); -  g_signal_handlers_disconnect_matched (settings, G_SIGNAL_MATCH_DATA, -                                        0, 0, NULL, NULL, -                                        screen); +	settings = gtk_widget_get_settings (GTK_WIDGET (screen)); +	g_signal_handlers_disconnect_matched (settings, G_SIGNAL_MATCH_DATA, +	                                      0, 0, NULL, NULL, +	                                      screen); -  if (priv->launch_child_source_id != 0) -    { -      g_source_remove (priv->launch_child_source_id); -      priv->launch_child_source_id = 0; -    } +	if (priv->launch_child_source_id != 0) +	{ +		g_source_remove (priv->launch_child_source_id); +		priv->launch_child_source_id = 0; +	} -  G_OBJECT_CLASS (terminal_screen_parent_class)->dispose (object); +	G_OBJECT_CLASS (terminal_screen_parent_class)->dispose (object);  }  static void  terminal_screen_finalize (GObject *object)  { -  TerminalScreen *screen = TERMINAL_SCREEN (object); -  TerminalScreenPrivate *priv = screen->priv; +	TerminalScreen *screen = TERMINAL_SCREEN (object); +	TerminalScreenPrivate *priv = screen->priv; -  g_signal_handlers_disconnect_by_func (terminal_app_get (), -                                        G_CALLBACK (terminal_screen_system_font_notify_cb), -                                        screen); +	g_signal_handlers_disconnect_by_func (terminal_app_get (), +	                                      G_CALLBACK (terminal_screen_system_font_notify_cb), +	                                      screen); -  terminal_screen_set_profile (screen, NULL); +	terminal_screen_set_profile (screen, NULL); -  g_free (priv->raw_title); -  g_free (priv->cooked_title); -  g_free (priv->override_title); -  g_free (priv->raw_icon_title); -  g_free (priv->cooked_icon_title); -  g_free (priv->initial_working_directory); -  g_strfreev (priv->override_command); -  g_strfreev (priv->initial_env); +	g_free (priv->raw_title); +	g_free (priv->cooked_title); +	g_free (priv->override_title); +	g_free (priv->raw_icon_title); +	g_free (priv->cooked_icon_title); +	g_free (priv->initial_working_directory); +	g_strfreev (priv->override_command); +	g_strfreev (priv->initial_env); -  g_slist_foreach (priv->match_tags, (GFunc) free_tag_data, NULL); -  g_slist_free (priv->match_tags); +	g_slist_foreach (priv->match_tags, (GFunc) free_tag_data, NULL); +	g_slist_free (priv->match_tags); -  G_OBJECT_CLASS (terminal_screen_parent_class)->finalize (object); +	G_OBJECT_CLASS (terminal_screen_parent_class)->finalize (object);  }  TerminalScreen * @@ -698,87 +705,88 @@ terminal_screen_new (TerminalProfile *profile,                       char           **child_env,                       double           zoom)  { -  TerminalScreen *screen; -  TerminalScreenPrivate *priv; +	TerminalScreen *screen; +	TerminalScreenPrivate *priv; -  g_return_val_if_fail (TERMINAL_IS_PROFILE (profile), NULL); +	g_return_val_if_fail (TERMINAL_IS_PROFILE (profile), NULL); -  screen = g_object_new (TERMINAL_TYPE_SCREEN, NULL); -  priv = screen->priv; +	screen = g_object_new (TERMINAL_TYPE_SCREEN, NULL); +	priv = screen->priv; -  terminal_screen_set_profile (screen, profile); +	terminal_screen_set_profile (screen, profile); -  if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_CUSTOM_DEFAULT_SIZE)) { -    vte_terminal_set_size (VTE_TERMINAL (screen), -			   terminal_profile_get_property_int (profile, TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS), -			   terminal_profile_get_property_int (profile, TERMINAL_PROFILE_DEFAULT_SIZE_ROWS)); -  } +	if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_CUSTOM_DEFAULT_SIZE)) +	{ +		vte_terminal_set_size (VTE_TERMINAL (screen), +		                       terminal_profile_get_property_int (profile, TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS), +		                       terminal_profile_get_property_int (profile, TERMINAL_PROFILE_DEFAULT_SIZE_ROWS)); +	} -  if (title) -    terminal_screen_set_override_title (screen, title); +	if (title) +		terminal_screen_set_override_title (screen, title); -  priv->initial_working_directory = g_strdup (working_dir); +	priv->initial_working_directory = g_strdup (working_dir); -  if (override_command) -    terminal_screen_set_override_command (screen, override_command); +	if (override_command) +		terminal_screen_set_override_command (screen, override_command); -  if (child_env) -    terminal_screen_set_initial_environment (screen, child_env); +	if (child_env) +		terminal_screen_set_initial_environment (screen, child_env); -  terminal_screen_set_font_scale (screen, zoom); -  terminal_screen_set_font (screen); +	terminal_screen_set_font_scale (screen, zoom); +	terminal_screen_set_font (screen); -  /* Launch the child on idle */ -  terminal_screen_launch_child_on_idle (screen); +	/* Launch the child on idle */ +	terminal_screen_launch_child_on_idle (screen); -  return screen; +	return screen;  }  const char*  terminal_screen_get_raw_title (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -   -  if (priv->raw_title) -    return priv->raw_title; +	TerminalScreenPrivate *priv = screen->priv; + +	if (priv->raw_title) +		return priv->raw_title; -  return ""; +	return "";  }  const char*  terminal_screen_get_title (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -   -  if (priv->cooked_title == NULL) -    terminal_screen_cook_title (screen); +	TerminalScreenPrivate *priv = screen->priv; -  /* cooked_title may still be NULL */ -  if (priv->cooked_title != NULL) -    return priv->cooked_title; -  else -    return ""; +	if (priv->cooked_title == NULL) +		terminal_screen_cook_title (screen); + +	/* cooked_title may still be NULL */ +	if (priv->cooked_title != NULL) +		return priv->cooked_title; +	else +		return "";  }  const char*  terminal_screen_get_icon_title (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -   -  if (priv->cooked_icon_title == NULL) -    terminal_screen_cook_icon_title (screen); +	TerminalScreenPrivate *priv = screen->priv; + +	if (priv->cooked_icon_title == NULL) +		terminal_screen_cook_icon_title (screen); -  /* cooked_icon_title may still be NULL */ -  if (priv->cooked_icon_title != NULL) -    return priv->cooked_icon_title; -  else -    return ""; +	/* cooked_icon_title may still be NULL */ +	if (priv->cooked_icon_title != NULL) +		return priv->cooked_icon_title; +	else +		return "";  }  gboolean  terminal_screen_get_icon_title_set (TerminalScreen *screen)  { -  return screen->priv->icon_title_set; +	return screen->priv->icon_title_set;  }  /* Supported format specifiers: @@ -790,15 +798,16 @@ terminal_screen_get_icon_title_set (TerminalScreen *screen)  static const char *  terminal_screen_get_title_format (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -  static const char *formats[] = { -    "%A"      /* TERMINAL_TITLE_REPLACE */, -    "%D%-%S"  /* TERMINAL_TITLE_BEFORE  */, -    "%S%-%D"  /* TERMINAL_TITLE_AFTER   */, -    "%S"      /* TERMINAL_TITLE_IGNORE  */ -  }; +	TerminalScreenPrivate *priv = screen->priv; +	static const char *formats[] = +	{ +		"%A"      /* TERMINAL_TITLE_REPLACE */, +		"%D%-%S"  /* TERMINAL_TITLE_BEFORE  */, +		"%S%-%D"  /* TERMINAL_TITLE_AFTER   */, +		"%S"      /* TERMINAL_TITLE_IGNORE  */ +	}; -  return formats[terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_TITLE_MODE)]; +	return formats[terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_TITLE_MODE)];  }  /** @@ -806,7 +815,7 @@ terminal_screen_get_title_format (TerminalScreen *screen)   * @screen:   * @raw_title: main ingredient   * @titleptr <inout>: pointer of the current title string - *  + *   * Format title according @format, and stores it in <literal>*titleptr</literal>.   * Always ensures that *titleptr will be non-NULL.   * @@ -817,86 +826,86 @@ terminal_screen_format_title (TerminalScreen *screen,                                const char *raw_title,                                char **titleptr)  { -  TerminalScreenPrivate *priv = screen->priv; -  const char *format, *arg; -  const char *static_title = NULL; -  GString *title; -  gboolean add_sep = FALSE; - -  g_assert (titleptr); - -  /* use --title argument if one was supplied, otherwise ask the profile */ -  if (priv->override_title) -    static_title = priv->override_title; -  else -    static_title = terminal_profile_get_property_string (priv->profile, TERMINAL_PROFILE_TITLE); - -  //title = g_string_sized_new (strlen (static_title) + strlen (raw_title) + 3 + 1); -  title = g_string_sized_new (128); - -  format = terminal_screen_get_title_format (screen); -  for (arg = format; *arg; arg += 2) -    { -      const char *text_to_append = NULL; - -      g_assert (arg[0] == '%'); - -      switch (arg[1]) -        { -          case 'A': -            text_to_append = raw_title ? raw_title : static_title; -            break; -          case 'D': -            text_to_append = raw_title; -            break; -          case 'S': -            text_to_append = static_title; -            break; -          case '-': -            text_to_append = NULL; -            add_sep = TRUE; -            break; -          default: -            g_assert_not_reached (); -        } - -      if (!text_to_append || !text_to_append[0]) -        continue; - -      if (add_sep && title->len > 0) -        g_string_append (title, " - "); - -      g_string_append (title, text_to_append); -      add_sep = FALSE; -    } - -  if (*titleptr == NULL || strcmp (title->str, *titleptr) != 0) -    { -      g_free (*titleptr); -      *titleptr = g_string_free (title, FALSE); -      return TRUE; -    } - -  g_string_free (title, TRUE); -  return FALSE; -} - -static void  +	TerminalScreenPrivate *priv = screen->priv; +	const char *format, *arg; +	const char *static_title = NULL; +	GString *title; +	gboolean add_sep = FALSE; + +	g_assert (titleptr); + +	/* use --title argument if one was supplied, otherwise ask the profile */ +	if (priv->override_title) +		static_title = priv->override_title; +	else +		static_title = terminal_profile_get_property_string (priv->profile, TERMINAL_PROFILE_TITLE); + +	//title = g_string_sized_new (strlen (static_title) + strlen (raw_title) + 3 + 1); +	title = g_string_sized_new (128); + +	format = terminal_screen_get_title_format (screen); +	for (arg = format; *arg; arg += 2) +	{ +		const char *text_to_append = NULL; + +		g_assert (arg[0] == '%'); + +		switch (arg[1]) +		{ +		case 'A': +			text_to_append = raw_title ? raw_title : static_title; +			break; +		case 'D': +			text_to_append = raw_title; +			break; +		case 'S': +			text_to_append = static_title; +			break; +		case '-': +			text_to_append = NULL; +			add_sep = TRUE; +			break; +		default: +			g_assert_not_reached (); +		} + +		if (!text_to_append || !text_to_append[0]) +			continue; + +		if (add_sep && title->len > 0) +			g_string_append (title, " - "); + +		g_string_append (title, text_to_append); +		add_sep = FALSE; +	} + +	if (*titleptr == NULL || strcmp (title->str, *titleptr) != 0) +	{ +		g_free (*titleptr); +		*titleptr = g_string_free (title, FALSE); +		return TRUE; +	} + +	g_string_free (title, TRUE); +	return FALSE; +} + +static void  terminal_screen_cook_title (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -   -  if (terminal_screen_format_title (screen, priv->raw_title, &priv->cooked_title)) -    g_object_notify (G_OBJECT (screen), "title"); +	TerminalScreenPrivate *priv = screen->priv; + +	if (terminal_screen_format_title (screen, priv->raw_title, &priv->cooked_title)) +		g_object_notify (G_OBJECT (screen), "title");  } -static void  +static void  terminal_screen_cook_icon_title (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; +	TerminalScreenPrivate *priv = screen->priv; -  if (terminal_screen_format_title (screen, priv->raw_icon_title, &priv->cooked_icon_title)) -    g_object_notify (G_OBJECT (screen), "icon-title"); +	if (terminal_screen_format_title (screen, priv->raw_icon_title, &priv->cooked_icon_title)) +		g_object_notify (G_OBJECT (screen), "icon-title");  }  static void @@ -904,234 +913,234 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile,                                     GParamSpec *pspec,                                     TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -  GObject *object = G_OBJECT (screen); -  VteTerminal *vte_terminal = VTE_TERMINAL (screen); -  const char *prop_name; -  TerminalBackgroundType bg_type; -  TerminalWindow *window; - -  if (pspec) -    prop_name = pspec->name; -  else -    prop_name = NULL; - -  g_object_freeze_notify (object); - -  if ((window = terminal_screen_get_window (screen))) -    { -      /* We need these in line for the set_size in -       * update_on_realize -       */ -      terminal_window_update_geometry (window); -    } -   -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLLBAR_POSITION)) -    _terminal_screen_update_scrollbar (screen); - -  if (!prop_name || -      prop_name == I_(TERMINAL_PROFILE_TITLE_MODE) || -      prop_name == I_(TERMINAL_PROFILE_TITLE)) -    { -      terminal_screen_cook_title (screen); -      terminal_screen_cook_icon_title (screen); -    } - -  if (gtk_widget_get_realized (GTK_WIDGET (screen)) && -      (!prop_name || -       prop_name == I_(TERMINAL_PROFILE_USE_SYSTEM_FONT) || -       prop_name == I_(TERMINAL_PROFILE_FONT))) -    terminal_screen_change_font (screen); - -  if (!prop_name || -      prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS) || -      prop_name == I_(TERMINAL_PROFILE_FOREGROUND_COLOR) || -      prop_name == I_(TERMINAL_PROFILE_BACKGROUND_COLOR) || -      prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG) || -      prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR) || -      prop_name == I_(TERMINAL_PROFILE_PALETTE)) -    update_color_scheme (screen); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SILENT_BELL)) -      vte_terminal_set_audible_bell (vte_terminal, !terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SILENT_BELL)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_WORD_CHARS)) -    vte_terminal_set_word_chars (vte_terminal, -                                 terminal_profile_get_property_string (profile, TERMINAL_PROFILE_WORD_CHARS)); -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE)) -    vte_terminal_set_scroll_on_keystroke (vte_terminal, -                                          terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE)); -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_OUTPUT)) -    vte_terminal_set_scroll_on_output (vte_terminal, -                                       terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_ON_OUTPUT)); -  if (!prop_name || -      prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_LINES) || -      prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_UNLIMITED)) -    { -      glong lines = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLLBACK_UNLIMITED) ? -		    -1 : terminal_profile_get_property_int (profile, TERMINAL_PROFILE_SCROLLBACK_LINES); -      vte_terminal_set_scrollback_lines (vte_terminal, lines); -    } +	TerminalScreenPrivate *priv = screen->priv; +	GObject *object = G_OBJECT (screen); +	VteTerminal *vte_terminal = VTE_TERMINAL (screen); +	const char *prop_name; +	TerminalBackgroundType bg_type; +	TerminalWindow *window; + +	if (pspec) +		prop_name = pspec->name; +	else +		prop_name = NULL; + +	g_object_freeze_notify (object); + +	if ((window = terminal_screen_get_window (screen))) +	{ +		/* We need these in line for the set_size in +		 * update_on_realize +		 */ +		terminal_window_update_geometry (window); +	} + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLLBAR_POSITION)) +		_terminal_screen_update_scrollbar (screen); + +	if (!prop_name || +	        prop_name == I_(TERMINAL_PROFILE_TITLE_MODE) || +	        prop_name == I_(TERMINAL_PROFILE_TITLE)) +	{ +		terminal_screen_cook_title (screen); +		terminal_screen_cook_icon_title (screen); +	} + +	if (gtk_widget_get_realized (GTK_WIDGET (screen)) && +	        (!prop_name || +	         prop_name == I_(TERMINAL_PROFILE_USE_SYSTEM_FONT) || +	         prop_name == I_(TERMINAL_PROFILE_FONT))) +		terminal_screen_change_font (screen); + +	if (!prop_name || +	        prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS) || +	        prop_name == I_(TERMINAL_PROFILE_FOREGROUND_COLOR) || +	        prop_name == I_(TERMINAL_PROFILE_BACKGROUND_COLOR) || +	        prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG) || +	        prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR) || +	        prop_name == I_(TERMINAL_PROFILE_PALETTE)) +		update_color_scheme (screen); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SILENT_BELL)) +		vte_terminal_set_audible_bell (vte_terminal, !terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SILENT_BELL)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_WORD_CHARS)) +		vte_terminal_set_word_chars (vte_terminal, +		                             terminal_profile_get_property_string (profile, TERMINAL_PROFILE_WORD_CHARS)); +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE)) +		vte_terminal_set_scroll_on_keystroke (vte_terminal, +		                                      terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE)); +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_OUTPUT)) +		vte_terminal_set_scroll_on_output (vte_terminal, +		                                   terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_ON_OUTPUT)); +	if (!prop_name || +	        prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_LINES) || +	        prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_UNLIMITED)) +	{ +		glong lines = terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLLBACK_UNLIMITED) ? +		              -1 : terminal_profile_get_property_int (profile, TERMINAL_PROFILE_SCROLLBACK_LINES); +		vte_terminal_set_scrollback_lines (vte_terminal, lines); +	}  #ifdef ENABLE_SKEY -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_USE_SKEY)) -    { -      if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_SKEY)) -        { -          guint i; - -          for (i = 0; i < n_skey_regexes; ++i) -            { -              TagData *tag_data; - -              tag_data = g_slice_new (TagData); -              tag_data->flavor = FLAVOR_SKEY; -              tag_data->tag = vte_terminal_match_add_gregex (vte_terminal, skey_regexes[i], 0); -              vte_terminal_match_set_cursor_type (vte_terminal, tag_data->tag, SKEY_MATCH_CURSOR); - -              priv->match_tags = g_slist_prepend (priv->match_tags, tag_data); -            } -        } -      else -        { -          terminal_screen_skey_match_remove (screen); -        } -    } +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_USE_SKEY)) +	{ +		if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_SKEY)) +		{ +			guint i; + +			for (i = 0; i < n_skey_regexes; ++i) +			{ +				TagData *tag_data; + +				tag_data = g_slice_new (TagData); +				tag_data->flavor = FLAVOR_SKEY; +				tag_data->tag = vte_terminal_match_add_gregex (vte_terminal, skey_regexes[i], 0); +				vte_terminal_match_set_cursor_type (vte_terminal, tag_data->tag, SKEY_MATCH_CURSOR); + +				priv->match_tags = g_slist_prepend (priv->match_tags, tag_data); +			} +		} +		else +		{ +			terminal_screen_skey_match_remove (screen); +		} +	}  #endif /* ENABLE_SKEY */ -  if (!prop_name || -      prop_name == I_(TERMINAL_PROFILE_BACKGROUND_TYPE) || -      prop_name == I_(TERMINAL_PROFILE_BACKGROUND_IMAGE) || -      prop_name == I_(TERMINAL_PROFILE_BACKGROUND_DARKNESS) || -      prop_name == I_(TERMINAL_PROFILE_SCROLL_BACKGROUND)) -    { -      bg_type = terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_BACKGROUND_TYPE); - -      if (bg_type == TERMINAL_BACKGROUND_IMAGE) -        { -          vte_terminal_set_background_image (vte_terminal, -                                             terminal_profile_get_property_object (profile, TERMINAL_PROFILE_BACKGROUND_IMAGE)); -          vte_terminal_set_scroll_background (vte_terminal, -                                              terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_BACKGROUND)); -        } -      else -        { -          vte_terminal_set_background_image (vte_terminal, NULL); -          vte_terminal_set_scroll_background (vte_terminal, FALSE); -        } - -      if (bg_type == TERMINAL_BACKGROUND_IMAGE || -          bg_type == TERMINAL_BACKGROUND_TRANSPARENT) -        { -          vte_terminal_set_background_saturation (vte_terminal, -                                                  1.0 - terminal_profile_get_property_double (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS)); -          vte_terminal_set_opacity (vte_terminal, -                                    0xffff * terminal_profile_get_property_double (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS)); -        } -      else -        { -          vte_terminal_set_background_saturation (vte_terminal, 1.0); /* normal color */ -          vte_terminal_set_opacity (vte_terminal, 0xffff); -        } -       -      /* FIXME: Don't enable this if we have a compmgr. */ -      vte_terminal_set_background_transparent (vte_terminal, -                                               bg_type == TERMINAL_BACKGROUND_TRANSPARENT && -                                               !window_uses_argb_visual (screen)); -    } - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKSPACE_BINDING)) -  vte_terminal_set_backspace_binding (vte_terminal, -                                      terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_BACKSPACE_BINDING)); -   -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_DELETE_BINDING)) -  vte_terminal_set_delete_binding (vte_terminal, -                                   terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_DELETE_BINDING)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_ALLOW_BOLD)) -    vte_terminal_set_allow_bold (vte_terminal, -                                 terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_ALLOW_BOLD)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_CURSOR_BLINK_MODE)) -    vte_terminal_set_cursor_blink_mode (vte_terminal, -                                        terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_CURSOR_BLINK_MODE)); - -  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_CURSOR_SHAPE)) -    vte_terminal_set_cursor_shape (vte_terminal, -                                   terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_CURSOR_SHAPE)); - -  g_object_thaw_notify (object); +	if (!prop_name || +	        prop_name == I_(TERMINAL_PROFILE_BACKGROUND_TYPE) || +	        prop_name == I_(TERMINAL_PROFILE_BACKGROUND_IMAGE) || +	        prop_name == I_(TERMINAL_PROFILE_BACKGROUND_DARKNESS) || +	        prop_name == I_(TERMINAL_PROFILE_SCROLL_BACKGROUND)) +	{ +		bg_type = terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_BACKGROUND_TYPE); + +		if (bg_type == TERMINAL_BACKGROUND_IMAGE) +		{ +			vte_terminal_set_background_image (vte_terminal, +			                                   terminal_profile_get_property_object (profile, TERMINAL_PROFILE_BACKGROUND_IMAGE)); +			vte_terminal_set_scroll_background (vte_terminal, +			                                    terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_BACKGROUND)); +		} +		else +		{ +			vte_terminal_set_background_image (vte_terminal, NULL); +			vte_terminal_set_scroll_background (vte_terminal, FALSE); +		} + +		if (bg_type == TERMINAL_BACKGROUND_IMAGE || +		        bg_type == TERMINAL_BACKGROUND_TRANSPARENT) +		{ +			vte_terminal_set_background_saturation (vte_terminal, +			                                        1.0 - terminal_profile_get_property_double (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS)); +			vte_terminal_set_opacity (vte_terminal, +			                          0xffff * terminal_profile_get_property_double (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS)); +		} +		else +		{ +			vte_terminal_set_background_saturation (vte_terminal, 1.0); /* normal color */ +			vte_terminal_set_opacity (vte_terminal, 0xffff); +		} + +		/* FIXME: Don't enable this if we have a compmgr. */ +		vte_terminal_set_background_transparent (vte_terminal, +		        bg_type == TERMINAL_BACKGROUND_TRANSPARENT && +		        !window_uses_argb_visual (screen)); +	} + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKSPACE_BINDING)) +		vte_terminal_set_backspace_binding (vte_terminal, +		                                    terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_BACKSPACE_BINDING)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_DELETE_BINDING)) +		vte_terminal_set_delete_binding (vte_terminal, +		                                 terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_DELETE_BINDING)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_ALLOW_BOLD)) +		vte_terminal_set_allow_bold (vte_terminal, +		                             terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_ALLOW_BOLD)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_CURSOR_BLINK_MODE)) +		vte_terminal_set_cursor_blink_mode (vte_terminal, +		                                    terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_CURSOR_BLINK_MODE)); + +	if (!prop_name || prop_name == I_(TERMINAL_PROFILE_CURSOR_SHAPE)) +		vte_terminal_set_cursor_shape (vte_terminal, +		                               terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_CURSOR_SHAPE)); + +	g_object_thaw_notify (object);  }  static void  update_color_scheme (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -  TerminalProfile *profile = priv->profile; -  GtkStyle *style; -  GdkColor colors[TERMINAL_PALETTE_SIZE]; -  const GdkColor *fg_color, *bg_color, *bold_color; -  GdkColor fg, bg; -  guint n_colors; - -  style = gtk_widget_get_style (GTK_WIDGET (screen)); -  if (!style) -    return; - -  fg = style->text[GTK_STATE_NORMAL]; -  bg = style->base[GTK_STATE_NORMAL]; -  bold_color = NULL; - -  if (!terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_THEME_COLORS)) -    { -      fg_color = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_FOREGROUND_COLOR); -      bg_color = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_BACKGROUND_COLOR); - -      if (!terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG)) -	bold_color = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_BOLD_COLOR); - -      if (fg_color) -        fg = *fg_color; -      if (bg_color) -        bg = *bg_color; -    } - -  n_colors = G_N_ELEMENTS (colors); -  terminal_profile_get_palette (priv->profile, colors, &n_colors); -  vte_terminal_set_colors (VTE_TERMINAL (screen), &fg, &bg, -                           colors, n_colors); -  if (bold_color) -    vte_terminal_set_color_bold (VTE_TERMINAL (screen), bold_color); -  vte_terminal_set_background_tint_color (VTE_TERMINAL (screen), &bg); +	TerminalScreenPrivate *priv = screen->priv; +	TerminalProfile *profile = priv->profile; +	GtkStyle *style; +	GdkColor colors[TERMINAL_PALETTE_SIZE]; +	const GdkColor *fg_color, *bg_color, *bold_color; +	GdkColor fg, bg; +	guint n_colors; + +	style = gtk_widget_get_style (GTK_WIDGET (screen)); +	if (!style) +		return; + +	fg = style->text[GTK_STATE_NORMAL]; +	bg = style->base[GTK_STATE_NORMAL]; +	bold_color = NULL; + +	if (!terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_THEME_COLORS)) +	{ +		fg_color = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_FOREGROUND_COLOR); +		bg_color = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_BACKGROUND_COLOR); + +		if (!terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG)) +			bold_color = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_BOLD_COLOR); + +		if (fg_color) +			fg = *fg_color; +		if (bg_color) +			bg = *bg_color; +	} + +	n_colors = G_N_ELEMENTS (colors); +	terminal_profile_get_palette (priv->profile, colors, &n_colors); +	vte_terminal_set_colors (VTE_TERMINAL (screen), &fg, &bg, +	                         colors, n_colors); +	if (bold_color) +		vte_terminal_set_color_bold (VTE_TERMINAL (screen), bold_color); +	vte_terminal_set_background_tint_color (VTE_TERMINAL (screen), &bg);  }  void  terminal_screen_set_font (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -  TerminalProfile *profile; -  PangoFontDescription *desc; +	TerminalScreenPrivate *priv = screen->priv; +	TerminalProfile *profile; +	PangoFontDescription *desc; -  profile = priv->profile; -   -  if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_SYSTEM_FONT)) -    g_object_get (terminal_app_get (), "system-font", &desc, NULL); -  else -    g_object_get (profile, TERMINAL_PROFILE_FONT, &desc, NULL); -  g_assert (desc); +	profile = priv->profile; -  if (pango_font_description_get_size_is_absolute (desc)) -    pango_font_description_set_absolute_size (desc, -                                              priv->font_scale * -                                              pango_font_description_get_size (desc)); -  else -    pango_font_description_set_size (desc, -                                     priv->font_scale * -                                     pango_font_description_get_size (desc)); +	if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_SYSTEM_FONT)) +		g_object_get (terminal_app_get (), "system-font", &desc, NULL); +	else +		g_object_get (profile, TERMINAL_PROFILE_FONT, &desc, NULL); +	g_assert (desc); -  vte_terminal_set_font (VTE_TERMINAL (screen), desc); +	if (pango_font_description_get_size_is_absolute (desc)) +		pango_font_description_set_absolute_size (desc, +		        priv->font_scale * +		        pango_font_description_get_size (desc)); +	else +		pango_font_description_set_size (desc, +		                                 priv->font_scale * +		                                 pango_font_description_get_size (desc)); -  pango_font_description_free (desc); +	vte_terminal_set_font (VTE_TERMINAL (screen), desc); + +	pango_font_description_free (desc);  }  static void @@ -1139,138 +1148,138 @@ terminal_screen_system_font_notify_cb (TerminalApp *app,                                         GParamSpec *pspec,                                         TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; +	TerminalScreenPrivate *priv = screen->priv; -  if (!gtk_widget_get_realized (GTK_WIDGET (screen))) -    return; +	if (!gtk_widget_get_realized (GTK_WIDGET (screen))) +		return; -  if (!terminal_profile_get_property_boolean (priv->profile, TERMINAL_PROFILE_USE_SYSTEM_FONT)) -    return; +	if (!terminal_profile_get_property_boolean (priv->profile, TERMINAL_PROFILE_USE_SYSTEM_FONT)) +		return; -  terminal_screen_change_font (screen); +	terminal_screen_change_font (screen);  }  static void  terminal_screen_change_font (TerminalScreen *screen)  { -  TerminalWindow *window; +	TerminalWindow *window; -  terminal_screen_set_font (screen); +	terminal_screen_set_font (screen); -  window = terminal_screen_get_window (screen); -  terminal_window_set_size (window, screen, TRUE); +	window = terminal_screen_get_window (screen); +	terminal_window_set_size (window, screen, TRUE);  }  static void  profile_forgotten_callback (TerminalProfile *profile,                              TerminalScreen  *screen)  { -  TerminalProfile *new_profile; +	TerminalProfile *new_profile; -  new_profile = terminal_app_get_profile_for_new_term (terminal_app_get ()); -  g_assert (new_profile != NULL); -  terminal_screen_set_profile (screen, new_profile); +	new_profile = terminal_app_get_profile_for_new_term (terminal_app_get ()); +	g_assert (new_profile != NULL); +	terminal_screen_set_profile (screen, new_profile);  }  void  terminal_screen_set_profile (TerminalScreen *screen,                               TerminalProfile *profile)  { -  TerminalScreenPrivate *priv = screen->priv; -  TerminalProfile *old_profile; - -  old_profile = priv->profile; -  if (profile == old_profile) -    return; - -  if (priv->profile_changed_id) -    { -      g_signal_handler_disconnect (G_OBJECT (priv->profile), -                                   priv->profile_changed_id); -      priv->profile_changed_id = 0; -    } - -  if (priv->profile_forgotten_id) -    { -      g_signal_handler_disconnect (G_OBJECT (priv->profile), -                                   priv->profile_forgotten_id); -      priv->profile_forgotten_id = 0; -    } -   -  priv->profile = profile; -  if (profile) -    { -      g_object_ref (profile); -      priv->profile_changed_id = -        g_signal_connect (profile, "notify", -                          G_CALLBACK (terminal_screen_profile_notify_cb), -                          screen); -      priv->profile_forgotten_id = -        g_signal_connect (G_OBJECT (profile), -                          "forgotten", -                          G_CALLBACK (profile_forgotten_callback), -                          screen); - -      terminal_screen_profile_notify_cb (profile, NULL, screen); - -      g_signal_emit (G_OBJECT (screen), signals[PROFILE_SET], 0, old_profile); -    } - -  if (old_profile) -    g_object_unref (old_profile); - -  g_object_notify (G_OBJECT (screen), "profile"); +	TerminalScreenPrivate *priv = screen->priv; +	TerminalProfile *old_profile; + +	old_profile = priv->profile; +	if (profile == old_profile) +		return; + +	if (priv->profile_changed_id) +	{ +		g_signal_handler_disconnect (G_OBJECT (priv->profile), +		                             priv->profile_changed_id); +		priv->profile_changed_id = 0; +	} + +	if (priv->profile_forgotten_id) +	{ +		g_signal_handler_disconnect (G_OBJECT (priv->profile), +		                             priv->profile_forgotten_id); +		priv->profile_forgotten_id = 0; +	} + +	priv->profile = profile; +	if (profile) +	{ +		g_object_ref (profile); +		priv->profile_changed_id = +		    g_signal_connect (profile, "notify", +		                      G_CALLBACK (terminal_screen_profile_notify_cb), +		                      screen); +		priv->profile_forgotten_id = +		    g_signal_connect (G_OBJECT (profile), +		                      "forgotten", +		                      G_CALLBACK (profile_forgotten_callback), +		                      screen); + +		terminal_screen_profile_notify_cb (profile, NULL, screen); + +		g_signal_emit (G_OBJECT (screen), signals[PROFILE_SET], 0, old_profile); +	} + +	if (old_profile) +		g_object_unref (old_profile); + +	g_object_notify (G_OBJECT (screen), "profile");  }  TerminalProfile*  terminal_screen_get_profile (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; +	TerminalScreenPrivate *priv = screen->priv; -  g_assert (priv->profile != NULL); -  return priv->profile; +	g_assert (priv->profile != NULL); +	return priv->profile;  }  void  terminal_screen_set_override_command (TerminalScreen *screen,                                        char          **argv)  { -  TerminalScreenPrivate *priv; +	TerminalScreenPrivate *priv; -  g_return_if_fail (TERMINAL_IS_SCREEN (screen)); +	g_return_if_fail (TERMINAL_IS_SCREEN (screen)); -  priv = screen->priv; -  g_strfreev (priv->override_command); -  priv->override_command = g_strdupv (argv); +	priv = screen->priv; +	g_strfreev (priv->override_command); +	priv->override_command = g_strdupv (argv);  }  const char**  terminal_screen_get_override_command (TerminalScreen *screen)  { -  g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL); +	g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL); -  return (const char**) screen->priv->override_command; +	return (const char**) screen->priv->override_command;  }  void  terminal_screen_set_initial_environment (TerminalScreen *screen, -                                         char          **argv) +        char          **argv)  { -  TerminalScreenPrivate *priv; +	TerminalScreenPrivate *priv; -  g_return_if_fail (TERMINAL_IS_SCREEN (screen)); +	g_return_if_fail (TERMINAL_IS_SCREEN (screen)); -  priv = screen->priv; -  g_assert (priv->initial_env == NULL); -  priv->initial_env = g_strdupv (argv); +	priv = screen->priv; +	g_assert (priv->initial_env == NULL); +	priv->initial_env = g_strdupv (argv);  }  char**  terminal_screen_get_initial_environment (TerminalScreen *screen)  { -  g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL); +	g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL); -  return screen->priv->initial_env; +	return screen->priv->initial_env;  }  static gboolean @@ -1280,134 +1289,135 @@ get_child_command (TerminalScreen *screen,                     char         ***argv_p,                     GError        **err)  { -  TerminalScreenPrivate *priv = screen->priv; -  TerminalProfile *profile; -  char **argv; +	TerminalScreenPrivate *priv = screen->priv; +	TerminalProfile *profile; +	char **argv; -  g_assert (spawn_flags_p != NULL && argv_p != NULL); +	g_assert (spawn_flags_p != NULL && argv_p != NULL); -  profile = priv->profile; +	profile = priv->profile; -  *argv_p = argv = NULL; +	*argv_p = argv = NULL; -  if (priv->override_command) -    { -      argv = g_strdupv (priv->override_command); +	if (priv->override_command) +	{ +		argv = g_strdupv (priv->override_command); -      *spawn_flags_p |= G_SPAWN_SEARCH_PATH; -    } -  else if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_CUSTOM_COMMAND)) -    { -      if (!g_shell_parse_argv (terminal_profile_get_property_string (profile, TERMINAL_PROFILE_CUSTOM_COMMAND), -                               NULL, &argv, -                               err)) -        return FALSE; +		*spawn_flags_p |= G_SPAWN_SEARCH_PATH; +	} +	else if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_CUSTOM_COMMAND)) +	{ +		if (!g_shell_parse_argv (terminal_profile_get_property_string (profile, TERMINAL_PROFILE_CUSTOM_COMMAND), +		                         NULL, &argv, +		                         err)) +			return FALSE; -      *spawn_flags_p |= G_SPAWN_SEARCH_PATH; -    } -  else -    { -      const char *only_name; -      char *shell; -      int argc = 0; +		*spawn_flags_p |= G_SPAWN_SEARCH_PATH; +	} +	else +	{ +		const char *only_name; +		char *shell; +		int argc = 0; -      shell = egg_shell (shell_env); +		shell = egg_shell (shell_env); -      only_name = strrchr (shell, '/'); -      if (only_name != NULL) -        only_name++; -      else -        only_name = shell; +		only_name = strrchr (shell, '/'); +		if (only_name != NULL) +			only_name++; +		else +			only_name = shell; -      argv = g_new (char*, 3); +		argv = g_new (char*, 3); -      argv[argc++] = shell; +		argv[argc++] = shell; -      if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_LOGIN_SHELL)) -        argv[argc++] = g_strconcat ("-", only_name, NULL); -      else -        argv[argc++] = g_strdup (only_name); +		if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_LOGIN_SHELL)) +			argv[argc++] = g_strconcat ("-", only_name, NULL); +		else +			argv[argc++] = g_strdup (only_name); -      argv[argc++] = NULL; +		argv[argc++] = NULL; -      *spawn_flags_p |= G_SPAWN_FILE_AND_ARGV_ZERO; -    } +		*spawn_flags_p |= G_SPAWN_FILE_AND_ARGV_ZERO; +	} -  *argv_p = argv; +	*argv_p = argv; -  return TRUE; +	return TRUE;  }  static char**  get_child_environment (TerminalScreen *screen,                         char **shell)  { -  TerminalScreenPrivate *priv = screen->priv; -  GtkWidget *term = GTK_WIDGET (screen); -  GtkWidget *window; -  char **env; -  char *e, *v; -  GHashTable *env_table; -  GHashTableIter iter; -  GPtrArray *retval; -  guint i; - -  window = gtk_widget_get_toplevel (term); -  g_assert (window != NULL); -  g_assert (gtk_widget_is_toplevel (window)); - -  env_table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); - -  /* First take the factory's environment */ -  env = g_listenv (); -  for (i = 0; env[i]; ++i) -    g_hash_table_insert (env_table, env[i], g_strdup (g_getenv (env[i]))); -  g_free (env); /* the strings themselves are now owned by the hash table */ - -  /* and then merge the child environment, if any */ -  env = priv->initial_env; -  if (env) -    { -      for (i = 0; env[i]; ++i) -        { -          v = strchr (env[i], '='); -          if (v) -             g_hash_table_replace (env_table, g_strndup (env[i], v - env[i]), g_strdup (v + 1)); -           else -             g_hash_table_replace (env_table, g_strdup (env[i]), NULL); -        } -    } - -  g_hash_table_remove (env_table, "COLUMNS"); -  g_hash_table_remove (env_table, "LINES"); -  g_hash_table_remove (env_table, "MATE_DESKTOP_ICON"); -   -  g_hash_table_replace (env_table, g_strdup ("COLORTERM"), g_strdup (EXECUTABLE_NAME)); -  g_hash_table_replace (env_table, g_strdup ("TERM"), g_strdup ("xterm")); /* FIXME configurable later? */ -   +	TerminalScreenPrivate *priv = screen->priv; +	GtkWidget *term = GTK_WIDGET (screen); +	GtkWidget *window; +	char **env; +	char *e, *v; +	GHashTable *env_table; +	GHashTableIter iter; +	GPtrArray *retval; +	guint i; + +	window = gtk_widget_get_toplevel (term); +	g_assert (window != NULL); +	g_assert (gtk_widget_is_toplevel (window)); + +	env_table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + +	/* First take the factory's environment */ +	env = g_listenv (); +	for (i = 0; env[i]; ++i) +		g_hash_table_insert (env_table, env[i], g_strdup (g_getenv (env[i]))); +	g_free (env); /* the strings themselves are now owned by the hash table */ + +	/* and then merge the child environment, if any */ +	env = priv->initial_env; +	if (env) +	{ +		for (i = 0; env[i]; ++i) +		{ +			v = strchr (env[i], '='); +			if (v) +				g_hash_table_replace (env_table, g_strndup (env[i], v - env[i]), g_strdup (v + 1)); +			else +				g_hash_table_replace (env_table, g_strdup (env[i]), NULL); +		} +	} + +	g_hash_table_remove (env_table, "COLUMNS"); +	g_hash_table_remove (env_table, "LINES"); +	g_hash_table_remove (env_table, "MATE_DESKTOP_ICON"); + +	g_hash_table_replace (env_table, g_strdup ("COLORTERM"), g_strdup (EXECUTABLE_NAME)); +	g_hash_table_replace (env_table, g_strdup ("TERM"), g_strdup ("xterm")); /* FIXME configurable later? */ +  #ifdef GDK_WINDOWING_X11 -  /* FIXME: moving the tab between windows, or the window between displays will make the next two invalid... */ -  g_hash_table_replace (env_table, g_strdup ("WINDOWID"), g_strdup_printf ("%ld", GDK_WINDOW_XWINDOW (gtk_widget_get_window (window)))); -  g_hash_table_replace (env_table, g_strdup ("DISPLAY"), g_strdup (gdk_display_get_name (gtk_widget_get_display (window)))); +	/* FIXME: moving the tab between windows, or the window between displays will make the next two invalid... */ +	g_hash_table_replace (env_table, g_strdup ("WINDOWID"), g_strdup_printf ("%ld", GDK_WINDOW_XWINDOW (gtk_widget_get_window (window)))); +	g_hash_table_replace (env_table, g_strdup ("DISPLAY"), g_strdup (gdk_display_get_name (gtk_widget_get_display (window))));  #endif -  terminal_util_add_proxy_env (env_table); +	terminal_util_add_proxy_env (env_table); -  retval = g_ptr_array_sized_new (g_hash_table_size (env_table)); -  g_hash_table_iter_init (&iter, env_table); -  while (g_hash_table_iter_next (&iter, (gpointer *) &e, (gpointer *) &v)) -    g_ptr_array_add (retval, g_strdup_printf ("%s=%s", e, v ? v : "")); -  g_ptr_array_add (retval, NULL); +	retval = g_ptr_array_sized_new (g_hash_table_size (env_table)); +	g_hash_table_iter_init (&iter, env_table); +	while (g_hash_table_iter_next (&iter, (gpointer *) &e, (gpointer *) &v)) +		g_ptr_array_add (retval, g_strdup_printf ("%s=%s", e, v ? v : "")); +	g_ptr_array_add (retval, NULL); -  *shell = g_strdup (g_hash_table_lookup (env_table, "SHELL")); +	*shell = g_strdup (g_hash_table_lookup (env_table, "SHELL")); -  g_hash_table_destroy (env_table); -  return (char **) g_ptr_array_free (retval, FALSE); +	g_hash_table_destroy (env_table); +	return (char **) g_ptr_array_free (retval, FALSE);  } -enum { -  RESPONSE_RELAUNCH, -  RESPONSE_EDIT_PROFILE +enum +{ +    RESPONSE_RELAUNCH, +    RESPONSE_EDIT_PROFILE  };  static void @@ -1415,325 +1425,327 @@ info_bar_response_cb (GtkWidget *info_bar,                        int response,                        TerminalScreen *screen)  { -  gtk_widget_grab_focus (GTK_WIDGET (screen)); - -  switch (response) { -    case GTK_RESPONSE_CANCEL: -      gtk_widget_destroy (info_bar); -      g_signal_emit (screen, signals[CLOSE_SCREEN], 0); -      break; -    case RESPONSE_RELAUNCH: -      gtk_widget_destroy (info_bar); -      terminal_screen_launch_child_on_idle (screen); -      break; -    case RESPONSE_EDIT_PROFILE: -      terminal_app_edit_profile (terminal_app_get (), -                                 terminal_screen_get_profile (screen), -                                 GTK_WINDOW (terminal_screen_get_window (screen)), -                                 "custom-command-entry"); -      break; -    default: -      gtk_widget_destroy (info_bar); -      break; -  } +	gtk_widget_grab_focus (GTK_WIDGET (screen)); + +	switch (response) +	{ +	case GTK_RESPONSE_CANCEL: +		gtk_widget_destroy (info_bar); +		g_signal_emit (screen, signals[CLOSE_SCREEN], 0); +		break; +	case RESPONSE_RELAUNCH: +		gtk_widget_destroy (info_bar); +		terminal_screen_launch_child_on_idle (screen); +		break; +	case RESPONSE_EDIT_PROFILE: +		terminal_app_edit_profile (terminal_app_get (), +		                           terminal_screen_get_profile (screen), +		                           GTK_WINDOW (terminal_screen_get_window (screen)), +		                           "custom-command-entry"); +		break; +	default: +		gtk_widget_destroy (info_bar); +		break; +	}  }  static gboolean  terminal_screen_launch_child_cb (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -  VteTerminal *terminal = VTE_TERMINAL (screen); -  TerminalProfile *profile; -  char **env, **argv; -  char *shell = NULL; -  GError *err = NULL; -  const char *working_dir; -  VtePtyFlags pty_flags = VTE_PTY_DEFAULT; -  GSpawnFlags spawn_flags = 0; -  GPid pid; - -  priv->launch_child_source_id = 0; - -  _terminal_debug_print (TERMINAL_DEBUG_PROCESSES, -                         "[screen %p] now launching the child process\n", -                         screen); - -  profile = priv->profile; - -  env = get_child_environment (screen, &shell); - -  if (priv->initial_working_directory) -    working_dir = priv->initial_working_directory; -  else -    working_dir = g_get_home_dir (); - -  if (!terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_LOGIN_SHELL)) -    pty_flags |= VTE_PTY_NO_LASTLOG; -  if (!terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_UPDATE_RECORDS)) -    pty_flags |= VTE_PTY_NO_UTMP | VTE_PTY_NO_WTMP; - -  if (!get_child_command (screen, shell, &spawn_flags, &argv, &err) || -      !vte_terminal_fork_command_full (terminal, -                                       pty_flags, -                                       working_dir, -                                       argv, -                                       env, -                                       spawn_flags, -                                       NULL, NULL, -                                       &pid, -                                       &err)) { -    GtkWidget *info_bar; - -    info_bar = terminal_info_bar_new (GTK_MESSAGE_ERROR, -                                      _("_Profile Preferences"), RESPONSE_EDIT_PROFILE, -                                      _("_Relaunch"), RESPONSE_RELAUNCH, -                                      NULL); -    terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar), -                                   _("There was an error creating the child process for this terminal")); -    terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar), -                                   "%s", err->message); -    g_signal_connect (info_bar, "response", -                      G_CALLBACK (info_bar_response_cb), screen); - -    gtk_box_pack_start (GTK_BOX (terminal_screen_container_get_from_screen (screen)), -                        info_bar, FALSE, FALSE, 0); -    gtk_info_bar_set_default_response (GTK_INFO_BAR (info_bar), GTK_RESPONSE_CANCEL); -    gtk_widget_show (info_bar); - -    g_error_free (err); -    g_strfreev (env); -    g_free (shell); - -    return FALSE; -  } - -  priv->child_pid = pid; -  priv->pty_fd = vte_terminal_get_pty (terminal); - -  g_free (shell); -  g_strfreev (argv); -  g_strfreev (env); - -  return FALSE; /* don't run again */ +	TerminalScreenPrivate *priv = screen->priv; +	VteTerminal *terminal = VTE_TERMINAL (screen); +	TerminalProfile *profile; +	char **env, **argv; +	char *shell = NULL; +	GError *err = NULL; +	const char *working_dir; +	VtePtyFlags pty_flags = VTE_PTY_DEFAULT; +	GSpawnFlags spawn_flags = 0; +	GPid pid; + +	priv->launch_child_source_id = 0; + +	_terminal_debug_print (TERMINAL_DEBUG_PROCESSES, +	                       "[screen %p] now launching the child process\n", +	                       screen); + +	profile = priv->profile; + +	env = get_child_environment (screen, &shell); + +	if (priv->initial_working_directory) +		working_dir = priv->initial_working_directory; +	else +		working_dir = g_get_home_dir (); + +	if (!terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_LOGIN_SHELL)) +		pty_flags |= VTE_PTY_NO_LASTLOG; +	if (!terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_UPDATE_RECORDS)) +		pty_flags |= VTE_PTY_NO_UTMP | VTE_PTY_NO_WTMP; + +	if (!get_child_command (screen, shell, &spawn_flags, &argv, &err) || +	        !vte_terminal_fork_command_full (terminal, +	                pty_flags, +	                working_dir, +	                argv, +	                env, +	                spawn_flags, +	                NULL, NULL, +	                &pid, +	                &err)) +	{ +		GtkWidget *info_bar; + +		info_bar = terminal_info_bar_new (GTK_MESSAGE_ERROR, +		                                  _("_Profile Preferences"), RESPONSE_EDIT_PROFILE, +		                                  _("_Relaunch"), RESPONSE_RELAUNCH, +		                                  NULL); +		terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar), +		                               _("There was an error creating the child process for this terminal")); +		terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar), +		                               "%s", err->message); +		g_signal_connect (info_bar, "response", +		                  G_CALLBACK (info_bar_response_cb), screen); + +		gtk_box_pack_start (GTK_BOX (terminal_screen_container_get_from_screen (screen)), +		                    info_bar, FALSE, FALSE, 0); +		gtk_info_bar_set_default_response (GTK_INFO_BAR (info_bar), GTK_RESPONSE_CANCEL); +		gtk_widget_show (info_bar); + +		g_error_free (err); +		g_strfreev (env); +		g_free (shell); + +		return FALSE; +	} + +	priv->child_pid = pid; +	priv->pty_fd = vte_terminal_get_pty (terminal); + +	g_free (shell); +	g_strfreev (argv); +	g_strfreev (env); + +	return FALSE; /* don't run again */  }  static void  terminal_screen_launch_child_on_idle (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; +	TerminalScreenPrivate *priv = screen->priv; -  if (priv->launch_child_source_id != 0) -    return; +	if (priv->launch_child_source_id != 0) +		return; -  _terminal_debug_print (TERMINAL_DEBUG_PROCESSES, -                         "[screen %p] scheduling launching the child process on idle\n", -                         screen); +	_terminal_debug_print (TERMINAL_DEBUG_PROCESSES, +	                       "[screen %p] scheduling launching the child process on idle\n", +	                       screen); -  priv->launch_child_source_id = g_idle_add ((GSourceFunc) terminal_screen_launch_child_cb, screen); +	priv->launch_child_source_id = g_idle_add ((GSourceFunc) terminal_screen_launch_child_cb, screen);  }  static TerminalScreenPopupInfo *  terminal_screen_popup_info_new (TerminalScreen *screen)  { -  TerminalScreenPopupInfo *info; +	TerminalScreenPopupInfo *info; -  info = g_slice_new0 (TerminalScreenPopupInfo); -  info->ref_count = 1; -  info->screen = g_object_ref (screen); -  info->window = terminal_screen_get_window (screen); +	info = g_slice_new0 (TerminalScreenPopupInfo); +	info->ref_count = 1; +	info->screen = g_object_ref (screen); +	info->window = terminal_screen_get_window (screen); -  return info; +	return info;  }  TerminalScreenPopupInfo *  terminal_screen_popup_info_ref (TerminalScreenPopupInfo *info)  { -  g_return_val_if_fail (info != NULL, NULL); +	g_return_val_if_fail (info != NULL, NULL); -  info->ref_count++; -  return info; +	info->ref_count++; +	return info;  }  void  terminal_screen_popup_info_unref (TerminalScreenPopupInfo *info)  { -  g_return_if_fail (info != NULL); +	g_return_if_fail (info != NULL); -  if (--info->ref_count > 0) -    return; +	if (--info->ref_count > 0) +		return; -  g_object_unref (info->screen); -  g_free (info->string); -  g_slice_free (TerminalScreenPopupInfo, info); +	g_object_unref (info->screen); +	g_free (info->string); +	g_slice_free (TerminalScreenPopupInfo, info);  }  static gboolean  terminal_screen_popup_menu (GtkWidget *widget)  { -  TerminalScreen *screen = TERMINAL_SCREEN (widget); -  TerminalScreenPopupInfo *info; +	TerminalScreen *screen = TERMINAL_SCREEN (widget); +	TerminalScreenPopupInfo *info; -  info = terminal_screen_popup_info_new (screen); -  info->button = 0; -  info->timestamp = gtk_get_current_event_time (); +	info = terminal_screen_popup_info_new (screen); +	info->button = 0; +	info->timestamp = gtk_get_current_event_time (); -  g_signal_emit (screen, signals[SHOW_POPUP_MENU], 0, info); -  terminal_screen_popup_info_unref (info); +	g_signal_emit (screen, signals[SHOW_POPUP_MENU], 0, info); +	terminal_screen_popup_info_unref (info); -  return TRUE; +	return TRUE;  }  static gboolean  terminal_screen_button_press (GtkWidget      *widget,                                GdkEventButton *event)  { -  TerminalScreen *screen = TERMINAL_SCREEN (widget); -  gboolean (* button_press_event) (GtkWidget*, GdkEventButton*) = -    GTK_WIDGET_CLASS (terminal_screen_parent_class)->button_press_event; -  int char_width, char_height, row, col; -  char *matched_string; -  int matched_flavor = 0; -  guint state; -  GtkBorder *inner_border = NULL; - -  state = event->state & gtk_accelerator_get_default_mod_mask (); - -  terminal_screen_get_cell_size (screen, &char_width, &char_height); - -  gtk_widget_style_get (widget, "inner-border", &inner_border, NULL); -  row = (event->x - (inner_border ? inner_border->left : 0)) / char_width; -  col = (event->y - (inner_border ? inner_border->top : 0)) / char_height; -  gtk_border_free (inner_border); - -  /* FIXMEchpe: add vte API to do this check by widget coords instead of grid coords */ -  matched_string = terminal_screen_check_match (screen, row, col, &matched_flavor); -   -  if (matched_string != NULL && -      (event->button == 1 || event->button == 2) && -      (state & GDK_CONTROL_MASK)) -    { -      gboolean handled = FALSE; +	TerminalScreen *screen = TERMINAL_SCREEN (widget); +	gboolean (* button_press_event) (GtkWidget*, GdkEventButton*) = +	    GTK_WIDGET_CLASS (terminal_screen_parent_class)->button_press_event; +	int char_width, char_height, row, col; +	char *matched_string; +	int matched_flavor = 0; +	guint state; +	GtkBorder *inner_border = NULL; -#ifdef ENABLE_SKEY -      if (matched_flavor != FLAVOR_SKEY || -          terminal_profile_get_property_boolean (screen->priv->profile, TERMINAL_PROFILE_USE_SKEY)) -#endif -        { -          g_signal_emit (screen, signals[MATCH_CLICKED], 0, -                         matched_string, -                         matched_flavor, -                         state, -                         &handled); -        } +	state = event->state & gtk_accelerator_get_default_mod_mask (); -        g_free (matched_string); +	terminal_screen_get_cell_size (screen, &char_width, &char_height); -        if (handled) -          return TRUE; /* don't do anything else such as select with the click */ -    } +	gtk_widget_style_get (widget, "inner-border", &inner_border, NULL); +	row = (event->x - (inner_border ? inner_border->left : 0)) / char_width; +	col = (event->y - (inner_border ? inner_border->top : 0)) / char_height; +	gtk_border_free (inner_border); -  if (event->button == 3 && -      (state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)) == 0) -    { -      TerminalScreenPopupInfo *info; +	/* FIXMEchpe: add vte API to do this check by widget coords instead of grid coords */ +	matched_string = terminal_screen_check_match (screen, row, col, &matched_flavor); -      info = terminal_screen_popup_info_new (screen); -      info->button = event->button; -      info->state = state; -      info->timestamp = event->time; -      info->string = matched_string; /* adopted */ -      info->flavour = matched_flavor; +	if (matched_string != NULL && +	        (event->button == 1 || event->button == 2) && +	        (state & GDK_CONTROL_MASK)) +	{ +		gboolean handled = FALSE; + +#ifdef ENABLE_SKEY +		if (matched_flavor != FLAVOR_SKEY || +		        terminal_profile_get_property_boolean (screen->priv->profile, TERMINAL_PROFILE_USE_SKEY)) +#endif +		{ +			g_signal_emit (screen, signals[MATCH_CLICKED], 0, +			               matched_string, +			               matched_flavor, +			               state, +			               &handled); +		} + +		g_free (matched_string); + +		if (handled) +			return TRUE; /* don't do anything else such as select with the click */ +	} -      g_signal_emit (screen, signals[SHOW_POPUP_MENU], 0, info); -      terminal_screen_popup_info_unref (info); +	if (event->button == 3 && +	        (state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)) == 0) +	{ +		TerminalScreenPopupInfo *info; -      return TRUE; -    } +		info = terminal_screen_popup_info_new (screen); +		info->button = event->button; +		info->state = state; +		info->timestamp = event->time; +		info->string = matched_string; /* adopted */ +		info->flavour = matched_flavor; -  /* default behavior is to let the terminal widget deal with it */ -  if (button_press_event) -    return button_press_event (widget, event); +		g_signal_emit (screen, signals[SHOW_POPUP_MENU], 0, info); +		terminal_screen_popup_info_unref (info); -  return FALSE; +		return TRUE; +	} + +	/* default behavior is to let the terminal widget deal with it */ +	if (button_press_event) +		return button_press_event (widget, event); + +	return FALSE;  }  static void  terminal_screen_set_dynamic_title (TerminalScreen *screen,                                     const char     *title, -				   gboolean	  userset) +                                   gboolean	  userset)  { -  TerminalScreenPrivate *priv = screen->priv; +	TerminalScreenPrivate *priv = screen->priv; -  g_assert (TERMINAL_IS_SCREEN (screen)); -   -  if ((priv->user_title && !userset) || -      (priv->raw_title && title && -       strcmp (priv->raw_title, title) == 0)) -    return; +	g_assert (TERMINAL_IS_SCREEN (screen)); -  g_free (priv->raw_title); -  priv->raw_title = g_strdup (title); -  terminal_screen_cook_title (screen); +	if ((priv->user_title && !userset) || +	        (priv->raw_title && title && +	         strcmp (priv->raw_title, title) == 0)) +		return; + +	g_free (priv->raw_title); +	priv->raw_title = g_strdup (title); +	terminal_screen_cook_title (screen);  }  static void  terminal_screen_set_dynamic_icon_title (TerminalScreen *screen,                                          const char     *icon_title, -					gboolean       userset) +                                        gboolean       userset)  { -  TerminalScreenPrivate *priv = screen->priv; -  GObject *object = G_OBJECT (screen); -   -  g_assert (TERMINAL_IS_SCREEN (screen)); +	TerminalScreenPrivate *priv = screen->priv; +	GObject *object = G_OBJECT (screen); + +	g_assert (TERMINAL_IS_SCREEN (screen)); -  if ((priv->user_title && !userset) ||   -      (priv->icon_title_set && -       priv->raw_icon_title && -       icon_title && -       strcmp (priv->raw_icon_title, icon_title) == 0)) -    return; +	if ((priv->user_title && !userset) || +	        (priv->icon_title_set && +	         priv->raw_icon_title && +	         icon_title && +	         strcmp (priv->raw_icon_title, icon_title) == 0)) +		return; -  g_object_freeze_notify (object); +	g_object_freeze_notify (object); -  g_free (priv->raw_icon_title); -  priv->raw_icon_title = g_strdup (icon_title); -  priv->icon_title_set = TRUE; +	g_free (priv->raw_icon_title); +	priv->raw_icon_title = g_strdup (icon_title); +	priv->icon_title_set = TRUE; -  g_object_notify (object, "icon-title-set"); -  terminal_screen_cook_icon_title (screen); +	g_object_notify (object, "icon-title-set"); +	terminal_screen_cook_icon_title (screen); -  g_object_thaw_notify (object); +	g_object_thaw_notify (object);  }  void  terminal_screen_set_override_title (TerminalScreen *screen,                                      const char     *title)  { -  TerminalScreenPrivate *priv = screen->priv; -  char *old_title; +	TerminalScreenPrivate *priv = screen->priv; +	char *old_title; -  old_title = priv->override_title; -  priv->override_title = g_strdup (title); -  g_free (old_title); +	old_title = priv->override_title; +	priv->override_title = g_strdup (title); +	g_free (old_title); -  terminal_screen_set_dynamic_title (screen, title, FALSE); -  terminal_screen_set_dynamic_icon_title (screen, title, FALSE); +	terminal_screen_set_dynamic_title (screen, title, FALSE); +	terminal_screen_set_dynamic_icon_title (screen, title, FALSE);  }  const char*  terminal_screen_get_dynamic_title (TerminalScreen *screen)  { -  g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL); -   -  return screen->priv->raw_title; +	g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL); + +	return screen->priv->raw_title;  }  const char*  terminal_screen_get_dynamic_icon_title (TerminalScreen *screen)  { -  g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL); -   -  return screen->priv->raw_icon_title; +	g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL); + +	return screen->priv->raw_icon_title;  }  /** @@ -1743,31 +1755,32 @@ terminal_screen_get_dynamic_icon_title (TerminalScreen *screen)   * Tries to determine the current working directory of the foreground process   * in @screen's PTY, falling back to the current working directory of the   * primary child. - *  + *   * Returns: a newly allocated string containing the current working directory,   *   or %NULL on failure   */  char*  terminal_screen_get_current_dir (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -  char *cwd; +	TerminalScreenPrivate *priv = screen->priv; +	char *cwd; -  if (priv->pty_fd != -1) { +	if (priv->pty_fd != -1) +	{  #if 0 -    /* Get the foreground process ID */ -    cwd = cwd_of_pid (tcgetpgrp (priv->pty_fd)); -    if (cwd != NULL) -      return cwd; +		/* Get the foreground process ID */ +		cwd = cwd_of_pid (tcgetpgrp (priv->pty_fd)); +		if (cwd != NULL) +			return cwd;  #endif -    /* If that didn't work, try falling back to the primary child. See bug #575184. */ -    cwd = cwd_of_pid (priv->child_pid); -    if (cwd != NULL) -      return cwd; -  } +		/* If that didn't work, try falling back to the primary child. See bug #575184. */ +		cwd = cwd_of_pid (priv->child_pid); +		if (cwd != NULL) +			return cwd; +	} -  return NULL; +	return NULL;  }  /** @@ -1777,145 +1790,151 @@ terminal_screen_get_current_dir (TerminalScreen *screen)   * Like terminal_screen_get_current_dir(), but falls back to returning   * @screen's initial working directory, with a further fallback to the   * user's home directory. - *  + *   * Returns: a newly allocated string containing the current working directory,   *   or %NULL on failure   */  char*  terminal_screen_get_current_dir_with_fallback (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; +	TerminalScreenPrivate *priv = screen->priv; -  if (priv->pty_fd == -1) -    return g_strdup (priv->initial_working_directory); +	if (priv->pty_fd == -1) +		return g_strdup (priv->initial_working_directory); -  return terminal_screen_get_current_dir (screen); +	return terminal_screen_get_current_dir (screen);  }  void  terminal_screen_set_font_scale (TerminalScreen *screen,                                  double          factor)  { -  TerminalScreenPrivate *priv = screen->priv; -   -  g_return_if_fail (TERMINAL_IS_SCREEN (screen)); +	TerminalScreenPrivate *priv = screen->priv; -  if (factor < TERMINAL_SCALE_MINIMUM) -    factor = TERMINAL_SCALE_MINIMUM; -  if (factor > TERMINAL_SCALE_MAXIMUM) -    factor = TERMINAL_SCALE_MAXIMUM; -   -  priv->font_scale = factor; -   -  if (gtk_widget_get_realized (GTK_WIDGET (screen))) -    { -      /* Update the font */ -      terminal_screen_change_font (screen); -    } +	g_return_if_fail (TERMINAL_IS_SCREEN (screen)); + +	if (factor < TERMINAL_SCALE_MINIMUM) +		factor = TERMINAL_SCALE_MINIMUM; +	if (factor > TERMINAL_SCALE_MAXIMUM) +		factor = TERMINAL_SCALE_MAXIMUM; + +	priv->font_scale = factor; + +	if (gtk_widget_get_realized (GTK_WIDGET (screen))) +	{ +		/* Update the font */ +		terminal_screen_change_font (screen); +	}  }  double  terminal_screen_get_font_scale (TerminalScreen *screen)  { -  g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), 1.0); -   -  return screen->priv->font_scale; +	g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), 1.0); + +	return screen->priv->font_scale;  }  static void  terminal_screen_window_title_changed (VteTerminal *vte_terminal,                                        TerminalScreen *screen)  { -  terminal_screen_set_dynamic_title (screen, -                                     vte_terminal_get_window_title (vte_terminal), -				     FALSE); +	terminal_screen_set_dynamic_title (screen, +	                                   vte_terminal_get_window_title (vte_terminal), +	                                   FALSE);  }  static void  terminal_screen_icon_title_changed (VteTerminal *vte_terminal,                                      TerminalScreen *screen)  { -  terminal_screen_set_dynamic_icon_title (screen, -                                          vte_terminal_get_icon_title (vte_terminal), -					  FALSE); +	terminal_screen_set_dynamic_icon_title (screen, +	                                        vte_terminal_get_icon_title (vte_terminal), +	                                        FALSE);  }  static void  terminal_screen_child_exited (VteTerminal *terminal)  { -  TerminalScreen *screen = TERMINAL_SCREEN (terminal); -  TerminalScreenPrivate *priv = screen->priv; -  TerminalExitAction action; - -  /* No need to chain up to VteTerminalClass::child_exited since it's NULL */ - -  _terminal_debug_print (TERMINAL_DEBUG_PROCESSES, -                         "[screen %p] child process exited\n", -                         screen); - -  priv->child_pid = -1; -  priv->pty_fd = -1; -   -  action = terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_EXIT_ACTION); -   -  switch (action) -    { -    case TERMINAL_EXIT_CLOSE: -      g_signal_emit (screen, signals[CLOSE_SCREEN], 0); -      break; -    case TERMINAL_EXIT_RESTART: -      terminal_screen_launch_child_on_idle (screen); -      break; -    case TERMINAL_EXIT_HOLD: { -      GtkWidget *info_bar; -      int status; - -      status = vte_terminal_get_child_exit_status (terminal); - -      info_bar = terminal_info_bar_new (GTK_MESSAGE_INFO, -                                        _("_Relaunch"), RESPONSE_RELAUNCH, -                                        NULL); -      if (WIFEXITED (status)) { -        terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar), -                                      _("The child process exited normally with status %d."), WEXITSTATUS (status)); -      } else if (WIFSIGNALED (status)) { -        terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar), -                                      _("The child process was terminated by signal %d."), WTERMSIG (status)); -      } else { -        terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar), -                                      _("The child process was terminated.")); -      } -      g_signal_connect (info_bar, "response", -                        G_CALLBACK (info_bar_response_cb), screen); - -      gtk_box_pack_start (GTK_BOX (terminal_screen_container_get_from_screen (screen)), -                          info_bar, FALSE, FALSE, 0); -      gtk_info_bar_set_default_response (GTK_INFO_BAR (info_bar), RESPONSE_RELAUNCH); -      gtk_widget_show (info_bar); -      break; -    } - -    default: -      break; -    } +	TerminalScreen *screen = TERMINAL_SCREEN (terminal); +	TerminalScreenPrivate *priv = screen->priv; +	TerminalExitAction action; + +	/* No need to chain up to VteTerminalClass::child_exited since it's NULL */ + +	_terminal_debug_print (TERMINAL_DEBUG_PROCESSES, +	                       "[screen %p] child process exited\n", +	                       screen); + +	priv->child_pid = -1; +	priv->pty_fd = -1; + +	action = terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_EXIT_ACTION); + +	switch (action) +	{ +	case TERMINAL_EXIT_CLOSE: +		g_signal_emit (screen, signals[CLOSE_SCREEN], 0); +		break; +	case TERMINAL_EXIT_RESTART: +		terminal_screen_launch_child_on_idle (screen); +		break; +	case TERMINAL_EXIT_HOLD: +	{ +		GtkWidget *info_bar; +		int status; + +		status = vte_terminal_get_child_exit_status (terminal); + +		info_bar = terminal_info_bar_new (GTK_MESSAGE_INFO, +		                                  _("_Relaunch"), RESPONSE_RELAUNCH, +		                                  NULL); +		if (WIFEXITED (status)) +		{ +			terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar), +			                               _("The child process exited normally with status %d."), WEXITSTATUS (status)); +		} +		else if (WIFSIGNALED (status)) +		{ +			terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar), +			                               _("The child process was terminated by signal %d."), WTERMSIG (status)); +		} +		else +		{ +			terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar), +			                               _("The child process was terminated.")); +		} +		g_signal_connect (info_bar, "response", +		                  G_CALLBACK (info_bar_response_cb), screen); + +		gtk_box_pack_start (GTK_BOX (terminal_screen_container_get_from_screen (screen)), +		                    info_bar, FALSE, FALSE, 0); +		gtk_info_bar_set_default_response (GTK_INFO_BAR (info_bar), RESPONSE_RELAUNCH); +		gtk_widget_show (info_bar); +		break; +	} + +	default: +		break; +	}  }  void  terminal_screen_set_user_title (TerminalScreen *screen,                                  const char *text)  { -  TerminalScreenPrivate *priv = screen->priv; +	TerminalScreenPrivate *priv = screen->priv; -  /* The user set the title to nothing, let's understand that as a -     request to revert to dynamically setting the title again. */ -  if (!text || !text[0]) -    priv->user_title = FALSE; -  else -    { -      priv->user_title = TRUE; -      terminal_screen_set_dynamic_title (screen, text, TRUE); -      terminal_screen_set_dynamic_icon_title (screen, text, TRUE); -    } +	/* The user set the title to nothing, let's understand that as a +	   request to revert to dynamically setting the title again. */ +	if (!text || !text[0]) +		priv->user_title = FALSE; +	else +	{ +		priv->user_title = TRUE; +		terminal_screen_set_dynamic_title (screen, text, TRUE); +		terminal_screen_set_dynamic_icon_title (screen, text, TRUE); +	}  }  static void @@ -1927,334 +1946,334 @@ terminal_screen_drag_data_received (GtkWidget        *widget,                                      guint             info,                                      guint             timestamp)  { -  TerminalScreen *screen = TERMINAL_SCREEN (widget); -  TerminalScreenPrivate *priv = screen->priv; -  const guchar *selection_data_data; -  GdkAtom selection_data_target; -  gint selection_data_length, selection_data_format; +	TerminalScreen *screen = TERMINAL_SCREEN (widget); +	TerminalScreenPrivate *priv = screen->priv; +	const guchar *selection_data_data; +	GdkAtom selection_data_target; +	gint selection_data_length, selection_data_format; -  selection_data_data = gtk_selection_data_get_data (selection_data); -  selection_data_target = gtk_selection_data_get_target (selection_data); -  selection_data_length = gtk_selection_data_get_length (selection_data); -  selection_data_format = gtk_selection_data_get_format (selection_data); +	selection_data_data = gtk_selection_data_get_data (selection_data); +	selection_data_target = gtk_selection_data_get_target (selection_data); +	selection_data_length = gtk_selection_data_get_length (selection_data); +	selection_data_format = gtk_selection_data_get_format (selection_data);  #if 0 -  { -    GList *tmp; - -    g_print ("info: %d\n", info); -    tmp = context->targets; -    while (tmp != NULL) -      { -        GdkAtom atom = GDK_POINTER_TO_ATOM (tmp->data); - -        g_print ("Target: %s\n", gdk_atom_name (atom));         -         -        tmp = tmp->next; -      } - -    g_print ("Chosen target: %s\n", gdk_atom_name (selection_data->target)); -  } +	{ +		GList *tmp; + +		g_print ("info: %d\n", info); +		tmp = context->targets; +		while (tmp != NULL) +		{ +			GdkAtom atom = GDK_POINTER_TO_ATOM (tmp->data); + +			g_print ("Target: %s\n", gdk_atom_name (atom)); + +			tmp = tmp->next; +		} + +		g_print ("Chosen target: %s\n", gdk_atom_name (selection_data->target)); +	}  #endif -  if (gtk_targets_include_uri (&selection_data_target, 1)) -    { -      char **uris; -      char *text; -      gsize len; - -      uris = gtk_selection_data_get_uris (selection_data); -      if (!uris) -        return; - -      terminal_util_transform_uris_to_quoted_fuse_paths (uris); - -      text = terminal_util_concat_uris (uris, &len); -      vte_terminal_feed_child (VTE_TERMINAL (screen), text, len); -      g_free (text); - -      g_strfreev (uris); -    } -  else if (gtk_targets_include_text (&selection_data_target, 1)) -    { -      char *text; - -      text = (char *) gtk_selection_data_get_text (selection_data); -      if (text && text[0]) -        vte_terminal_feed_child (VTE_TERMINAL (screen), text, strlen (text)); -      g_free (text); -    } -  else switch (info) -    { -    case TARGET_COLOR: -      { -        guint16 *data = (guint16 *)selection_data_data; -        GdkColor color; - -        /* We accept drops with the wrong format, since the KDE color -         * chooser incorrectly drops application/x-color with format 8. -         * So just check for the data length. -         */ -        if (selection_data_length != 8) -          return; - -        color.red = data[0]; -        color.green = data[1]; -        color.blue = data[2]; -        /* FIXME: use opacity from data[3] */ - -        g_object_set (priv->profile, -                      TERMINAL_PROFILE_BACKGROUND_TYPE, TERMINAL_BACKGROUND_SOLID, -                      TERMINAL_PROFILE_USE_THEME_COLORS, FALSE, -                      TERMINAL_PROFILE_BACKGROUND_COLOR, &color, -                      NULL); -      } -      break; - -    case TARGET_MOZ_URL: -      { -        char *utf8_data, *newline, *text; -        char *uris[2]; -        gsize len; -         -        /* MOZ_URL is in UCS-2 but in format 8. BROKEN! -         * -         * The data contains the URL, a \n, then the -         * title of the web page. -         */ -        if (selection_data_format != 8 || -            selection_data_length == 0 || -            (selection_data_length % 2) != 0) -          return; - -        utf8_data = g_utf16_to_utf8 ((const gunichar2*) selection_data_data, -                                     selection_data_length / 2, -                                     NULL, NULL, NULL); -        if (!utf8_data) -          return; - -        newline = strchr (utf8_data, '\n'); -        if (newline) -          *newline = '\0'; - -        uris[0] = utf8_data; -        uris[1] = NULL; -        terminal_util_transform_uris_to_quoted_fuse_paths (uris); /* This may replace uris[0] */ - -        text = terminal_util_concat_uris (uris, &len); -        vte_terminal_feed_child (VTE_TERMINAL (screen), text, len); -        g_free (text); -        g_free (uris[0]); -      } -      break; - -    case TARGET_NETSCAPE_URL: -      { -        char *utf8_data, *newline, *text; -        char *uris[2]; -        gsize len; -         -        /* The data contains the URL, a \n, then the -         * title of the web page. -         */ -        if (selection_data_length < 0 || selection_data_format != 8) -          return; - -        utf8_data = g_strndup ((char *) selection_data_data, selection_data_length); -        newline = strchr (utf8_data, '\n'); -        if (newline) -          *newline = '\0'; - -        uris[0] = utf8_data; -        uris[1] = NULL; -        terminal_util_transform_uris_to_quoted_fuse_paths (uris); /* This may replace uris[0] */ - -        text = terminal_util_concat_uris (uris, &len); -        vte_terminal_feed_child (VTE_TERMINAL (screen), text, len); -        g_free (text); -        g_free (uris[0]); -      } -      break; -        -    case TARGET_BGIMAGE: -      { -        char *utf8_data; -        char **uris; -         -        if (selection_data_length < 0 || selection_data_format != 8) -          return; -         -        utf8_data = g_strndup ((char *) selection_data_data, selection_data_length); -        uris = g_uri_list_extract_uris (utf8_data); -        g_free (utf8_data); - -        /* FIXME: use terminal_util_transform_uris_to_quoted_fuse_paths? */ - -        if (uris && uris[0]) -          { -            char *filename; - -            filename = g_filename_from_uri (uris[0], NULL, NULL); -            if (filename) -              { -                g_object_set (priv->profile, -                              TERMINAL_PROFILE_BACKGROUND_TYPE, TERMINAL_BACKGROUND_IMAGE, -                              TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE, filename, -                              NULL); -              } - -            g_free (filename); -          } - -        g_strfreev (uris); -      } -      break; - -    case TARGET_RESET_BG: -      g_object_set (priv->profile, -                    TERMINAL_PROFILE_BACKGROUND_TYPE, TERMINAL_BACKGROUND_SOLID, -                    NULL); -      break; - -    case TARGET_TAB: -      { -        GtkWidget *container; -        TerminalScreen *moving_screen; -        TerminalWindow *source_window; -        TerminalWindow *dest_window; -        GtkWidget *dest_notebook; -        int page_num; - -        container = *(GtkWidget**) selection_data_data; -        if (!GTK_IS_WIDGET (container)) -          return; - -        moving_screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (container)); -        g_return_if_fail (TERMINAL_IS_SCREEN (moving_screen)); -        if (!TERMINAL_IS_SCREEN (moving_screen)) -          return; - -        source_window = terminal_screen_get_window (moving_screen); -        dest_window = terminal_screen_get_window (screen); -        dest_notebook = terminal_window_get_notebook (dest_window); -        page_num = gtk_notebook_page_num (GTK_NOTEBOOK (dest_notebook),  -                                          GTK_WIDGET (screen)); -        terminal_window_move_screen (source_window, dest_window, moving_screen, page_num + 1); - -        gtk_drag_finish (context, TRUE, TRUE, timestamp); -      } -      break; - -    default: -      g_assert_not_reached (); -    } +	if (gtk_targets_include_uri (&selection_data_target, 1)) +	{ +		char **uris; +		char *text; +		gsize len; + +		uris = gtk_selection_data_get_uris (selection_data); +		if (!uris) +			return; + +		terminal_util_transform_uris_to_quoted_fuse_paths (uris); + +		text = terminal_util_concat_uris (uris, &len); +		vte_terminal_feed_child (VTE_TERMINAL (screen), text, len); +		g_free (text); + +		g_strfreev (uris); +	} +	else if (gtk_targets_include_text (&selection_data_target, 1)) +	{ +		char *text; + +		text = (char *) gtk_selection_data_get_text (selection_data); +		if (text && text[0]) +			vte_terminal_feed_child (VTE_TERMINAL (screen), text, strlen (text)); +		g_free (text); +	} +	else switch (info) +		{ +		case TARGET_COLOR: +		{ +			guint16 *data = (guint16 *)selection_data_data; +			GdkColor color; + +			/* We accept drops with the wrong format, since the KDE color +			 * chooser incorrectly drops application/x-color with format 8. +			 * So just check for the data length. +			 */ +			if (selection_data_length != 8) +				return; + +			color.red = data[0]; +			color.green = data[1]; +			color.blue = data[2]; +			/* FIXME: use opacity from data[3] */ + +			g_object_set (priv->profile, +			              TERMINAL_PROFILE_BACKGROUND_TYPE, TERMINAL_BACKGROUND_SOLID, +			              TERMINAL_PROFILE_USE_THEME_COLORS, FALSE, +			              TERMINAL_PROFILE_BACKGROUND_COLOR, &color, +			              NULL); +		} +		break; + +		case TARGET_MOZ_URL: +		{ +			char *utf8_data, *newline, *text; +			char *uris[2]; +			gsize len; + +			/* MOZ_URL is in UCS-2 but in format 8. BROKEN! +			 * +			 * The data contains the URL, a \n, then the +			 * title of the web page. +			 */ +			if (selection_data_format != 8 || +			        selection_data_length == 0 || +			        (selection_data_length % 2) != 0) +				return; + +			utf8_data = g_utf16_to_utf8 ((const gunichar2*) selection_data_data, +			                             selection_data_length / 2, +			                             NULL, NULL, NULL); +			if (!utf8_data) +				return; + +			newline = strchr (utf8_data, '\n'); +			if (newline) +				*newline = '\0'; + +			uris[0] = utf8_data; +			uris[1] = NULL; +			terminal_util_transform_uris_to_quoted_fuse_paths (uris); /* This may replace uris[0] */ + +			text = terminal_util_concat_uris (uris, &len); +			vte_terminal_feed_child (VTE_TERMINAL (screen), text, len); +			g_free (text); +			g_free (uris[0]); +		} +		break; + +		case TARGET_NETSCAPE_URL: +		{ +			char *utf8_data, *newline, *text; +			char *uris[2]; +			gsize len; + +			/* The data contains the URL, a \n, then the +			 * title of the web page. +			 */ +			if (selection_data_length < 0 || selection_data_format != 8) +				return; + +			utf8_data = g_strndup ((char *) selection_data_data, selection_data_length); +			newline = strchr (utf8_data, '\n'); +			if (newline) +				*newline = '\0'; + +			uris[0] = utf8_data; +			uris[1] = NULL; +			terminal_util_transform_uris_to_quoted_fuse_paths (uris); /* This may replace uris[0] */ + +			text = terminal_util_concat_uris (uris, &len); +			vte_terminal_feed_child (VTE_TERMINAL (screen), text, len); +			g_free (text); +			g_free (uris[0]); +		} +		break; + +		case TARGET_BGIMAGE: +		{ +			char *utf8_data; +			char **uris; + +			if (selection_data_length < 0 || selection_data_format != 8) +				return; + +			utf8_data = g_strndup ((char *) selection_data_data, selection_data_length); +			uris = g_uri_list_extract_uris (utf8_data); +			g_free (utf8_data); + +			/* FIXME: use terminal_util_transform_uris_to_quoted_fuse_paths? */ + +			if (uris && uris[0]) +			{ +				char *filename; + +				filename = g_filename_from_uri (uris[0], NULL, NULL); +				if (filename) +				{ +					g_object_set (priv->profile, +					              TERMINAL_PROFILE_BACKGROUND_TYPE, TERMINAL_BACKGROUND_IMAGE, +					              TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE, filename, +					              NULL); +				} + +				g_free (filename); +			} + +			g_strfreev (uris); +		} +		break; + +		case TARGET_RESET_BG: +			g_object_set (priv->profile, +			              TERMINAL_PROFILE_BACKGROUND_TYPE, TERMINAL_BACKGROUND_SOLID, +			              NULL); +			break; + +		case TARGET_TAB: +		{ +			GtkWidget *container; +			TerminalScreen *moving_screen; +			TerminalWindow *source_window; +			TerminalWindow *dest_window; +			GtkWidget *dest_notebook; +			int page_num; + +			container = *(GtkWidget**) selection_data_data; +			if (!GTK_IS_WIDGET (container)) +				return; + +			moving_screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (container)); +			g_return_if_fail (TERMINAL_IS_SCREEN (moving_screen)); +			if (!TERMINAL_IS_SCREEN (moving_screen)) +				return; + +			source_window = terminal_screen_get_window (moving_screen); +			dest_window = terminal_screen_get_window (screen); +			dest_notebook = terminal_window_get_notebook (dest_window); +			page_num = gtk_notebook_page_num (GTK_NOTEBOOK (dest_notebook), +			                                  GTK_WIDGET (screen)); +			terminal_window_move_screen (source_window, dest_window, moving_screen, page_num + 1); + +			gtk_drag_finish (context, TRUE, TRUE, timestamp); +		} +		break; + +		default: +			g_assert_not_reached (); +		}  }  void  _terminal_screen_update_scrollbar (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -  TerminalScreenContainer *container; -  GtkPolicyType policy = GTK_POLICY_ALWAYS; -  GtkCornerType corner = GTK_CORNER_TOP_LEFT; - -  container = terminal_screen_container_get_from_screen (screen); -  if (container == NULL) -    return; - -  switch (terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_SCROLLBAR_POSITION)) -    { -    case TERMINAL_SCROLLBAR_HIDDEN: -      policy = GTK_POLICY_NEVER; -      break; -    case TERMINAL_SCROLLBAR_RIGHT: -      policy = GTK_POLICY_ALWAYS; -      corner = GTK_CORNER_TOP_LEFT; -      break; -    case TERMINAL_SCROLLBAR_LEFT: -      policy = GTK_POLICY_ALWAYS; -      corner = GTK_CORNER_TOP_RIGHT; -      break; -    default: -      g_assert_not_reached (); -      break; -    } - -  terminal_screen_container_set_placement (container, corner); -  terminal_screen_container_set_policy (container, GTK_POLICY_NEVER, policy); +	TerminalScreenPrivate *priv = screen->priv; +	TerminalScreenContainer *container; +	GtkPolicyType policy = GTK_POLICY_ALWAYS; +	GtkCornerType corner = GTK_CORNER_TOP_LEFT; + +	container = terminal_screen_container_get_from_screen (screen); +	if (container == NULL) +		return; + +	switch (terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_SCROLLBAR_POSITION)) +	{ +	case TERMINAL_SCROLLBAR_HIDDEN: +		policy = GTK_POLICY_NEVER; +		break; +	case TERMINAL_SCROLLBAR_RIGHT: +		policy = GTK_POLICY_ALWAYS; +		corner = GTK_CORNER_TOP_LEFT; +		break; +	case TERMINAL_SCROLLBAR_LEFT: +		policy = GTK_POLICY_ALWAYS; +		corner = GTK_CORNER_TOP_RIGHT; +		break; +	default: +		g_assert_not_reached (); +		break; +	} + +	terminal_screen_container_set_placement (container, corner); +	terminal_screen_container_set_policy (container, GTK_POLICY_NEVER, policy);  }  void  terminal_screen_get_size (TerminalScreen *screen, -			  int       *width_chars, -			  int       *height_chars) +                          int       *width_chars, +                          int       *height_chars)  { -  VteTerminal *terminal = VTE_TERMINAL (screen); +	VteTerminal *terminal = VTE_TERMINAL (screen); -  *width_chars = vte_terminal_get_column_count (terminal); -  *height_chars = vte_terminal_get_row_count (terminal); +	*width_chars = vte_terminal_get_column_count (terminal); +	*height_chars = vte_terminal_get_row_count (terminal);  }  void  terminal_screen_get_cell_size (TerminalScreen *screen, -			       int                  *cell_width_pixels, -			       int                  *cell_height_pixels) +                               int                  *cell_width_pixels, +                               int                  *cell_height_pixels)  { -  VteTerminal *terminal = VTE_TERMINAL (screen); +	VteTerminal *terminal = VTE_TERMINAL (screen); -  *cell_width_pixels = vte_terminal_get_char_width (terminal); -  *cell_height_pixels = vte_terminal_get_char_height (terminal); +	*cell_width_pixels = vte_terminal_get_char_width (terminal); +	*cell_height_pixels = vte_terminal_get_char_height (terminal);  }  #ifdef ENABLE_SKEY  static void  terminal_screen_skey_match_remove (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -  GSList *l, *next; +	TerminalScreenPrivate *priv = screen->priv; +	GSList *l, *next; -  l = priv->match_tags; -  while (l != NULL) -    { -      TagData *tag_data = (TagData *) l->data; +	l = priv->match_tags; +	while (l != NULL) +	{ +		TagData *tag_data = (TagData *) l->data; -      next = l->next; -      if (tag_data->flavor == FLAVOR_SKEY) -        { -          vte_terminal_match_remove (VTE_TERMINAL (screen), tag_data->tag); -          priv->match_tags = g_slist_delete_link (priv->match_tags, l); -        } +		next = l->next; +		if (tag_data->flavor == FLAVOR_SKEY) +		{ +			vte_terminal_match_remove (VTE_TERMINAL (screen), tag_data->tag); +			priv->match_tags = g_slist_delete_link (priv->match_tags, l); +		} -      l = next; -    } +		l = next; +	}  }  #endif /* ENABLE_SKEY */  static char*  terminal_screen_check_match (TerminalScreen *screen, -			     int        column, -			     int        row, +                             int        column, +                             int        row,                               int       *flavor)  { -  TerminalScreenPrivate *priv = screen->priv; -  GSList *tags; -  int tag; -  char *match; +	TerminalScreenPrivate *priv = screen->priv; +	GSList *tags; +	int tag; +	char *match; -  match = vte_terminal_match_check (VTE_TERMINAL (screen), column, row, &tag); -  for (tags = priv->match_tags; tags != NULL; tags = tags->next) -    { -      TagData *tag_data = (TagData*) tags->data; -      if (tag_data->tag == tag) +	match = vte_terminal_match_check (VTE_TERMINAL (screen), column, row, &tag); +	for (tags = priv->match_tags; tags != NULL; tags = tags->next)  	{ -	  if (flavor) -	    *flavor = tag_data->flavor; -	  return match; +		TagData *tag_data = (TagData*) tags->data; +		if (tag_data->tag == tag) +		{ +			if (flavor) +				*flavor = tag_data->flavor; +			return match; +		}  	} -    } -  g_free (match); -  return NULL; +	g_free (match); +	return NULL;  }  void @@ -2262,34 +2281,34 @@ terminal_screen_save_config (TerminalScreen *screen,                               GKeyFile *key_file,                               const char *group)  { -  TerminalScreenPrivate *priv = screen->priv; -  VteTerminal *terminal = VTE_TERMINAL (screen); -  TerminalProfile *profile = priv->profile; -  const char *profile_id; -  char *working_directory; +	TerminalScreenPrivate *priv = screen->priv; +	VteTerminal *terminal = VTE_TERMINAL (screen); +	TerminalProfile *profile = priv->profile; +	const char *profile_id; +	char *working_directory; -  profile_id = terminal_profile_get_property_string (profile, TERMINAL_PROFILE_NAME); -  g_key_file_set_string (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_PROFILE_ID, profile_id); +	profile_id = terminal_profile_get_property_string (profile, TERMINAL_PROFILE_NAME); +	g_key_file_set_string (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_PROFILE_ID, profile_id); -  if (priv->override_command) -    terminal_util_key_file_set_argv (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_COMMAND, -                                     -1, priv->override_command); +	if (priv->override_command) +		terminal_util_key_file_set_argv (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_COMMAND, +		                                 -1, priv->override_command); -  if (priv->override_title) -    g_key_file_set_string (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_TITLE, priv->override_title); +	if (priv->override_title) +		g_key_file_set_string (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_TITLE, priv->override_title); -  /* FIXMEchpe: use the initial_working_directory instead?? */ -  working_directory = terminal_screen_get_current_dir (screen); -  if (working_directory) -    terminal_util_key_file_set_string_escape (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_WORKING_DIRECTORY, working_directory); -  g_free (working_directory); +	/* FIXMEchpe: use the initial_working_directory instead?? */ +	working_directory = terminal_screen_get_current_dir (screen); +	if (working_directory) +		terminal_util_key_file_set_string_escape (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_WORKING_DIRECTORY, working_directory); +	g_free (working_directory); -  g_key_file_set_double (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_ZOOM, priv->font_scale); +	g_key_file_set_double (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_ZOOM, priv->font_scale); -  g_key_file_set_integer (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_WIDTH, -                          vte_terminal_get_column_count (terminal)); -  g_key_file_set_integer (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_HEIGHT, -                          vte_terminal_get_row_count (terminal)); +	g_key_file_set_integer (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_WIDTH, +	                        vte_terminal_get_column_count (terminal)); +	g_key_file_set_integer (key_file, group, TERMINAL_CONFIG_TERMINAL_PROP_HEIGHT, +	                        vte_terminal_get_row_count (terminal));  }  /** @@ -2298,46 +2317,46 @@ terminal_screen_save_config (TerminalScreen *screen,   *   * Checks whether there's a foreground process running in   * this terminal. - *  + *   * Returns: %TRUE iff there's a foreground process running in @screen   */  gboolean  terminal_screen_has_foreground_process (TerminalScreen *screen)  { -  TerminalScreenPrivate *priv = screen->priv; -  int fgpid; +	TerminalScreenPrivate *priv = screen->priv; +	int fgpid; -  if (priv->pty_fd == -1) -    return FALSE; +	if (priv->pty_fd == -1) +		return FALSE; -  fgpid = tcgetpgrp (priv->pty_fd); -  if (fgpid == -1 || fgpid == priv->child_pid) -    return FALSE; +	fgpid = tcgetpgrp (priv->pty_fd); +	if (fgpid == -1 || fgpid == priv->child_pid) +		return FALSE; -  return TRUE; +	return TRUE;  #if 0 -  char *cmdline, *basename, *name; -  gsize len; -  char filename[64]; +	char *cmdline, *basename, *name; +	gsize len; +	char filename[64]; -  g_snprintf (filename, sizeof (filename), "/proc/%d/cmdline", fgpid); -  if (!g_file_get_contents (filename, &cmdline, &len, NULL)) -    return TRUE; +	g_snprintf (filename, sizeof (filename), "/proc/%d/cmdline", fgpid); +	if (!g_file_get_contents (filename, &cmdline, &len, NULL)) +		return TRUE; -  basename = g_path_get_basename (cmdline); -  g_free (cmdline); -  if (!basename) -    return TRUE; +	basename = g_path_get_basename (cmdline); +	g_free (cmdline); +	if (!basename) +		return TRUE; -  name = g_filename_to_utf8 (basename, -1, NULL, NULL, NULL); -  g_free (basename); -  if (!name) -    return TRUE; +	name = g_filename_to_utf8 (basename, -1, NULL, NULL, NULL); +	g_free (basename); +	if (!name) +		return TRUE; -  if (process_name) -    *process_name = name; +	if (process_name) +		*process_name = name; -  return TRUE; +	return TRUE;  #endif  } diff --git a/src/terminal-screen.h b/src/terminal-screen.h index 885e7d2..428b893 100644 --- a/src/terminal-screen.h +++ b/src/terminal-screen.h @@ -27,12 +27,13 @@  G_BEGIN_DECLS -typedef enum { -  FLAVOR_AS_IS, -  FLAVOR_DEFAULT_TO_HTTP, -  FLAVOR_VOIP_CALL, -  FLAVOR_EMAIL, -  FLAVOR_SKEY +typedef enum +{ +    FLAVOR_AS_IS, +    FLAVOR_DEFAULT_TO_HTTP, +    FLAVOR_VOIP_CALL, +    FLAVOR_EMAIL, +    FLAVOR_SKEY  } TerminalURLFlavour;  /* Forward decls */ @@ -52,24 +53,24 @@ typedef struct _TerminalScreenPrivate TerminalScreenPrivate;  struct _TerminalScreen  { -  VteTerminal parent_instance; +	VteTerminal parent_instance; -  TerminalScreenPrivate *priv; +	TerminalScreenPrivate *priv;  };  struct _TerminalScreenClass  { -  VteTerminalClass parent_class; - -  void (* profile_set)        (TerminalScreen *screen, -                               TerminalProfile *old_profile); -  void (* show_popup_menu)    (TerminalScreen *screen, -                               TerminalScreenPopupInfo *info); -  gboolean (* match_clicked)  (TerminalScreen *screen, -                               const char *url, -                               int flavour, -                               guint state); -  void (* close_screen)       (TerminalScreen *screen); +	VteTerminalClass parent_class; + +	void (* profile_set)        (TerminalScreen *screen, +	                             TerminalProfile *old_profile); +	void (* show_popup_menu)    (TerminalScreen *screen, +	                             TerminalScreenPopupInfo *info); +	gboolean (* match_clicked)  (TerminalScreen *screen, +	                             const char *url, +	                             int flavour, +	                             guint state); +	void (* close_screen)       (TerminalScreen *screen);  };  GType terminal_screen_get_type (void) G_GNUC_CONST; @@ -86,11 +87,11 @@ void terminal_screen_set_profile (TerminalScreen *screen,  TerminalProfile* terminal_screen_get_profile (TerminalScreen *screen);  void         terminal_screen_set_override_command (TerminalScreen  *screen, -                                                   char           **argv); +        char           **argv);  const char** terminal_screen_get_override_command (TerminalScreen  *screen);  void         terminal_screen_set_initial_environment (TerminalScreen  *screen, -                                                      char           **argv); +        char           **argv);  char **      terminal_screen_get_initial_environment (TerminalScreen  *screen);  const char* terminal_screen_get_raw_title      (TerminalScreen *screen); @@ -102,7 +103,7 @@ void terminal_screen_set_user_title (TerminalScreen *screen,                                       const char *text);  void        terminal_screen_set_override_title     (TerminalScreen *screen, -                                                    const char     *title); +        const char     *title);  const char *terminal_screen_get_dynamic_title      (TerminalScreen *screen);  const char *terminal_screen_get_dynamic_icon_title (TerminalScreen *screen); @@ -112,15 +113,15 @@ char *terminal_screen_get_current_dir_with_fallback (TerminalScreen *screen);  void        terminal_screen_set_font (TerminalScreen *screen);  void        terminal_screen_set_font_scale    (TerminalScreen *screen, -                                               double          factor); +        double          factor);  double      terminal_screen_get_font_scale    (TerminalScreen *screen);  void       terminal_screen_get_size (TerminalScreen *screen,                                       int *width_chars,                                       int *height_chars);  void       terminal_screen_get_cell_size (TerminalScreen *screen, -                                          int *width_chars, -                                          int *height_chars); +        int *width_chars, +        int *height_chars);  void _terminal_screen_update_scrollbar (TerminalScreen *screen); @@ -140,15 +141,16 @@ gboolean terminal_screen_has_foreground_process (TerminalScreen *screen);  #define TERMINAL_SCALE_MINIMUM     (TERMINAL_SCALE_XXXXX_SMALL/1.2)  #define TERMINAL_SCALE_MAXIMUM     (TERMINAL_SCALE_XXXXX_LARGE*1.2) -struct _TerminalScreenPopupInfo { -  int ref_count; -  TerminalWindow *window; -  TerminalScreen *screen; -  char *string; -  TerminalURLFlavour flavour; -  guint button; -  guint state; -  guint32 timestamp; +struct _TerminalScreenPopupInfo +{ +	int ref_count; +	TerminalWindow *window; +	TerminalScreen *screen; +	char *string; +	TerminalURLFlavour flavour; +	guint button; +	guint state; +	guint32 timestamp;  };  TerminalScreenPopupInfo *terminal_screen_popup_info_ref (TerminalScreenPopupInfo *info); diff --git a/src/terminal-search-dialog.c b/src/terminal-search-dialog.c index 81e3317..05fe398 100644 --- a/src/terminal-search-dialog.c +++ b/src/terminal-search-dialog.c @@ -31,12 +31,12 @@  static GQuark  get_quark (void)  { -  static GQuark quark = 0; +	static GQuark quark = 0; -  if (G_UNLIKELY (!quark)) -    quark = g_quark_from_static_string ("GT:data"); +	if (G_UNLIKELY (!quark)) +		quark = g_quark_from_static_string ("GT:data"); -  return quark; +	return quark;  } @@ -47,332 +47,340 @@ get_quark (void)  typedef struct _TerminalSearchDialogPrivate  { -  GtkWidget *search_label; -  GtkWidget *search_entry; -  GtkWidget *search_text_entry; -  GtkWidget *match_case_checkbutton; -  GtkWidget *entire_word_checkbutton; -  GtkWidget *regex_checkbutton; -  GtkWidget *backwards_checkbutton; -  GtkWidget *wrap_around_checkbutton; - -  GtkListStore *store; -  GtkEntryCompletion *completion; - -  /* Cached regex */ -  GRegex *regex; -  GRegexCompileFlags regex_compile_flags; +	GtkWidget *search_label; +	GtkWidget *search_entry; +	GtkWidget *search_text_entry; +	GtkWidget *match_case_checkbutton; +	GtkWidget *entire_word_checkbutton; +	GtkWidget *regex_checkbutton; +	GtkWidget *backwards_checkbutton; +	GtkWidget *wrap_around_checkbutton; + +	GtkListStore *store; +	GtkEntryCompletion *completion; + +	/* Cached regex */ +	GRegex *regex; +	GRegexCompileFlags regex_compile_flags;  } TerminalSearchDialogPrivate;  static void update_sensitivity (void *unused, -				GtkWidget *dialog); +                                GtkWidget *dialog);  static void response_handler (GtkWidget *dialog, -			      gint       response_id, -			      gpointer   data); +                              gint       response_id, +                              gpointer   data);  static void terminal_search_dialog_private_destroy (TerminalSearchDialogPrivate *priv);  GtkWidget *  terminal_search_dialog_new (GtkWindow   *parent)  { -  GtkWidget *dialog; -  TerminalSearchDialogPrivate *priv; -  GtkListStore *store; -  GtkEntryCompletion *completion; - -  priv = g_new0 (TerminalSearchDialogPrivate, 1); - -  if (!terminal_util_load_builder_file ("find-dialog.ui", -					"find-dialog", &dialog, -					"search-label", &priv->search_label, -					"search-entry", &priv->search_entry, -					"match-case-checkbutton", &priv->match_case_checkbutton, -					"entire-word-checkbutton", &priv->entire_word_checkbutton, -					"regex-checkbutton", &priv->regex_checkbutton, -					"search-backwards-checkbutton", &priv->backwards_checkbutton, -					"wrap-around-checkbutton", &priv->wrap_around_checkbutton, -					NULL)) -  { -    g_free (priv); -    return NULL; -  } - -  g_object_set_qdata_full (G_OBJECT (dialog), get_quark (), priv, -			   (GDestroyNotify) terminal_search_dialog_private_destroy); - - -  priv->search_text_entry = gtk_bin_get_child (GTK_BIN (priv->search_entry)); -  gtk_widget_set_size_request (priv->search_entry, 300, -1); - -  priv->store = store = gtk_list_store_new (1, G_TYPE_STRING); -  g_object_set (G_OBJECT (priv->search_entry), -		"model", store, -		"text-column", 0, -		NULL); - -  priv->completion = completion = gtk_entry_completion_new (); -  gtk_entry_completion_set_model (completion, GTK_TREE_MODEL (store)); -  gtk_entry_completion_set_text_column (completion, 0); -  gtk_entry_completion_set_minimum_key_length (completion, HISTORY_MIN_ITEM_LEN); -  gtk_entry_completion_set_popup_completion (completion, FALSE); -  gtk_entry_completion_set_inline_completion (completion, TRUE); -  gtk_entry_set_completion (GTK_ENTRY (priv->search_text_entry), completion); - -  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); -  gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT, FALSE); - -  gtk_entry_set_activates_default (GTK_ENTRY (priv->search_text_entry), TRUE); -  g_signal_connect (priv->search_text_entry, "changed", G_CALLBACK (update_sensitivity), dialog); -  g_signal_connect (priv->regex_checkbutton, "toggled", G_CALLBACK (update_sensitivity), dialog); - -  g_signal_connect (dialog, "response", G_CALLBACK (response_handler), NULL); - -  if (parent) -    gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); - -  return GTK_WIDGET (dialog); +	GtkWidget *dialog; +	TerminalSearchDialogPrivate *priv; +	GtkListStore *store; +	GtkEntryCompletion *completion; + +	priv = g_new0 (TerminalSearchDialogPrivate, 1); + +	if (!terminal_util_load_builder_file ("find-dialog.ui", +	                                      "find-dialog", &dialog, +	                                      "search-label", &priv->search_label, +	                                      "search-entry", &priv->search_entry, +	                                      "match-case-checkbutton", &priv->match_case_checkbutton, +	                                      "entire-word-checkbutton", &priv->entire_word_checkbutton, +	                                      "regex-checkbutton", &priv->regex_checkbutton, +	                                      "search-backwards-checkbutton", &priv->backwards_checkbutton, +	                                      "wrap-around-checkbutton", &priv->wrap_around_checkbutton, +	                                      NULL)) +	{ +		g_free (priv); +		return NULL; +	} + +	g_object_set_qdata_full (G_OBJECT (dialog), get_quark (), priv, +	                         (GDestroyNotify) terminal_search_dialog_private_destroy); + + +	priv->search_text_entry = gtk_bin_get_child (GTK_BIN (priv->search_entry)); +	gtk_widget_set_size_request (priv->search_entry, 300, -1); + +	priv->store = store = gtk_list_store_new (1, G_TYPE_STRING); +	g_object_set (G_OBJECT (priv->search_entry), +	              "model", store, +	              "text-column", 0, +	              NULL); + +	priv->completion = completion = gtk_entry_completion_new (); +	gtk_entry_completion_set_model (completion, GTK_TREE_MODEL (store)); +	gtk_entry_completion_set_text_column (completion, 0); +	gtk_entry_completion_set_minimum_key_length (completion, HISTORY_MIN_ITEM_LEN); +	gtk_entry_completion_set_popup_completion (completion, FALSE); +	gtk_entry_completion_set_inline_completion (completion, TRUE); +	gtk_entry_set_completion (GTK_ENTRY (priv->search_text_entry), completion); + +	gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); +	gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT, FALSE); + +	gtk_entry_set_activates_default (GTK_ENTRY (priv->search_text_entry), TRUE); +	g_signal_connect (priv->search_text_entry, "changed", G_CALLBACK (update_sensitivity), dialog); +	g_signal_connect (priv->regex_checkbutton, "toggled", G_CALLBACK (update_sensitivity), dialog); + +	g_signal_connect (dialog, "response", G_CALLBACK (response_handler), NULL); + +	if (parent) +		gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); + +	return GTK_WIDGET (dialog);  }  void  terminal_search_dialog_present (GtkWidget *dialog)  { -  TerminalSearchDialogPrivate *priv; +	TerminalSearchDialogPrivate *priv; -  g_return_if_fail (GTK_IS_DIALOG (dialog)); +	g_return_if_fail (GTK_IS_DIALOG (dialog)); -  priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); -  g_return_if_fail (priv); +	priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); +	g_return_if_fail (priv); -  gtk_window_present (GTK_WINDOW (dialog)); -  gtk_widget_grab_focus (priv->search_text_entry); +	gtk_window_present (GTK_WINDOW (dialog)); +	gtk_widget_grab_focus (priv->search_text_entry);  }  static void  terminal_search_dialog_private_destroy (TerminalSearchDialogPrivate *priv)  { -  if (priv->regex) -    g_regex_unref (priv->regex); +	if (priv->regex) +		g_regex_unref (priv->regex); -  g_object_unref (priv->store); -  g_object_unref (priv->completion); +	g_object_unref (priv->store); +	g_object_unref (priv->completion); -  g_free (priv); +	g_free (priv);  }  static void  update_sensitivity (void *unused, GtkWidget *dialog)  { -  TerminalSearchDialogPrivate *priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); -  const gchar *search_string; -  gboolean valid; +	TerminalSearchDialogPrivate *priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); +	const gchar *search_string; +	gboolean valid; -  if (priv->regex) { -    g_regex_unref (priv->regex); -    priv->regex = NULL; -  } +	if (priv->regex) +	{ +		g_regex_unref (priv->regex); +		priv->regex = NULL; +	} -  search_string = gtk_entry_get_text (GTK_ENTRY (priv->search_text_entry)); -  g_return_if_fail (search_string != NULL); +	search_string = gtk_entry_get_text (GTK_ENTRY (priv->search_text_entry)); +	g_return_if_fail (search_string != NULL); -  valid = *search_string != '\0'; +	valid = *search_string != '\0'; -  if (valid && GET_FLAG (regex_checkbutton)) { -    /* Check that the regex is valid */ -    valid = NULL != terminal_search_dialog_get_regex (dialog); -    /* TODO show the error message somewhere */ -  } +	if (valid && GET_FLAG (regex_checkbutton)) +	{ +		/* Check that the regex is valid */ +		valid = NULL != terminal_search_dialog_get_regex (dialog); +		/* TODO show the error message somewhere */ +	} -  gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT, valid); +	gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT, valid);  }  static gboolean  remove_item (GtkListStore *store, -	     const gchar  *text) +             const gchar  *text)  { -  GtkTreeIter iter; +	GtkTreeIter iter; -  g_return_val_if_fail (text != NULL, FALSE); +	g_return_val_if_fail (text != NULL, FALSE); -  if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter)) -    return FALSE; +	if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter)) +		return FALSE; -  do { -    gchar *item_text; +	do +	{ +		gchar *item_text; -    gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 0, &item_text, -1); +		gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 0, &item_text, -1); -    if (item_text != NULL && strcmp (item_text, text) == 0) { -      gtk_list_store_remove (store, &iter); -      g_free (item_text); -      return TRUE; -    } +		if (item_text != NULL && strcmp (item_text, text) == 0) +		{ +			gtk_list_store_remove (store, &iter); +			g_free (item_text); +			return TRUE; +		} -    g_free (item_text); -  } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter)); +		g_free (item_text); +	} +	while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter)); -  return FALSE; +	return FALSE;  }  static void  clamp_list_store (GtkListStore *store, -		  guint         max) +                  guint         max)  { -  GtkTreePath *path; -  GtkTreeIter iter; +	GtkTreePath *path; +	GtkTreeIter iter; -  /* -1 because TreePath counts from 0 */ -  path = gtk_tree_path_new_from_indices (max - 1, -1); +	/* -1 because TreePath counts from 0 */ +	path = gtk_tree_path_new_from_indices (max - 1, -1); -  if (gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path)) -    while (1) -      if (!gtk_list_store_remove (store, &iter)) -	break; +	if (gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path)) +		while (1) +			if (!gtk_list_store_remove (store, &iter)) +				break; -  gtk_tree_path_free (path); +	gtk_tree_path_free (path);  }  static void  history_entry_insert (GtkListStore *store, -		      const gchar  *text) +                      const gchar  *text)  { -  GtkTreeIter iter; +	GtkTreeIter iter; -  g_return_if_fail (text != NULL); +	g_return_if_fail (text != NULL); -  if (g_utf8_strlen (text, -1) <= HISTORY_MIN_ITEM_LEN) -    return; +	if (g_utf8_strlen (text, -1) <= HISTORY_MIN_ITEM_LEN) +		return; -  /* remove the text from the store if it was already -   * present. If it wasn't, clamp to max history - 1 -   * before inserting the new row, otherwise appending -   * would not work */ +	/* remove the text from the store if it was already +	 * present. If it wasn't, clamp to max history - 1 +	 * before inserting the new row, otherwise appending +	 * would not work */ -  if (!remove_item (store, text)) -    clamp_list_store (store, HISTORY_LENGTH - 1); +	if (!remove_item (store, text)) +		clamp_list_store (store, HISTORY_LENGTH - 1); -  gtk_list_store_insert (store, &iter, 0); -  gtk_list_store_set (store, &iter, 0, text, -1); +	gtk_list_store_insert (store, &iter, 0); +	gtk_list_store_set (store, &iter, 0, text, -1);  }  static void  response_handler (GtkWidget *dialog, -		  gint       response_id, -		  gpointer   data) +                  gint       response_id, +                  gpointer   data)  { -  TerminalSearchDialogPrivate *priv; -  const gchar *str; +	TerminalSearchDialogPrivate *priv; +	const gchar *str; -  if (response_id != GTK_RESPONSE_ACCEPT) { -    gtk_widget_hide (dialog); -    return; -  } +	if (response_id != GTK_RESPONSE_ACCEPT) +	{ +		gtk_widget_hide (dialog); +		return; +	} -  priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); +	priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); -  str = gtk_entry_get_text (GTK_ENTRY (priv->search_text_entry)); -  if (*str != '\0') -    history_entry_insert (priv->store, str); +	str = gtk_entry_get_text (GTK_ENTRY (priv->search_text_entry)); +	if (*str != '\0') +		history_entry_insert (priv->store, str);  }  void  terminal_search_dialog_set_search_text (GtkWidget   *dialog, -					const gchar *text) +                                        const gchar *text)  { -  TerminalSearchDialogPrivate *priv; +	TerminalSearchDialogPrivate *priv; -  g_return_if_fail (GTK_IS_DIALOG (dialog)); -  g_return_if_fail (text != NULL); +	g_return_if_fail (GTK_IS_DIALOG (dialog)); +	g_return_if_fail (text != NULL); -  priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); -  g_return_if_fail (priv); +	priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); +	g_return_if_fail (priv); -  gtk_entry_set_text (GTK_ENTRY (priv->search_text_entry), text); +	gtk_entry_set_text (GTK_ENTRY (priv->search_text_entry), text); -  gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), -				     GTK_RESPONSE_ACCEPT, -				     (*text != '\0')); +	gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), +	                                   GTK_RESPONSE_ACCEPT, +	                                   (*text != '\0'));  }  const gchar *  terminal_search_dialog_get_search_text (GtkWidget *dialog)  { -  TerminalSearchDialogPrivate *priv; +	TerminalSearchDialogPrivate *priv; -  g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL); +	g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL); -  priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); -  g_return_val_if_fail (priv, NULL); +	priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); +	g_return_val_if_fail (priv, NULL); -  return gtk_entry_get_text (GTK_ENTRY (priv->search_text_entry)); +	return gtk_entry_get_text (GTK_ENTRY (priv->search_text_entry));  }  TerminalSearchFlags  terminal_search_dialog_get_search_flags (GtkWidget *dialog)  { -  TerminalSearchDialogPrivate *priv; -  TerminalSearchFlags flags = 0; +	TerminalSearchDialogPrivate *priv; +	TerminalSearchFlags flags = 0; -  g_return_val_if_fail (GTK_IS_DIALOG (dialog), flags); +	g_return_val_if_fail (GTK_IS_DIALOG (dialog), flags); -  priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); -  g_return_val_if_fail (priv, flags); +	priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); +	g_return_val_if_fail (priv, flags); -  if (GET_FLAG (backwards_checkbutton)) -    flags |= TERMINAL_SEARCH_FLAG_BACKWARDS; +	if (GET_FLAG (backwards_checkbutton)) +		flags |= TERMINAL_SEARCH_FLAG_BACKWARDS; -  if (GET_FLAG (wrap_around_checkbutton)) -    flags |= TERMINAL_SEARCH_FLAG_WRAP_AROUND; +	if (GET_FLAG (wrap_around_checkbutton)) +		flags |= TERMINAL_SEARCH_FLAG_WRAP_AROUND; -  return flags; +	return flags;  }  GRegex *  terminal_search_dialog_get_regex (GtkWidget *dialog)  { -  TerminalSearchDialogPrivate *priv; -  GRegexCompileFlags compile_flags; -  const char *text, *pattern; +	TerminalSearchDialogPrivate *priv; +	GRegexCompileFlags compile_flags; +	const char *text, *pattern; -  g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL); +	g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL); -  priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); -  g_return_val_if_fail (priv, NULL); +	priv = TERMINAL_SEARCH_DIALOG_GET_PRIVATE (dialog); +	g_return_val_if_fail (priv, NULL); -  pattern = text = terminal_search_dialog_get_search_text (dialog); +	pattern = text = terminal_search_dialog_get_search_text (dialog); -  compile_flags = G_REGEX_OPTIMIZE; +	compile_flags = G_REGEX_OPTIMIZE; -  if (!GET_FLAG (match_case_checkbutton)) -    compile_flags |= G_REGEX_CASELESS; +	if (!GET_FLAG (match_case_checkbutton)) +		compile_flags |= G_REGEX_CASELESS; -  if (GET_FLAG (regex_checkbutton)) -    compile_flags |= G_REGEX_MULTILINE; -  else -    pattern = g_regex_escape_string (text, -1); +	if (GET_FLAG (regex_checkbutton)) +		compile_flags |= G_REGEX_MULTILINE; +	else +		pattern = g_regex_escape_string (text, -1); -  if (GET_FLAG (entire_word_checkbutton)) { -    const char *old_pattern = pattern; -    pattern = g_strdup_printf ("\\b%s\\b", pattern); -    if (old_pattern != text) -      g_free ((char *) old_pattern); -  } +	if (GET_FLAG (entire_word_checkbutton)) +	{ +		const char *old_pattern = pattern; +		pattern = g_strdup_printf ("\\b%s\\b", pattern); +		if (old_pattern != text) +			g_free ((char *) old_pattern); +	} -  if (!priv->regex || priv->regex_compile_flags != compile_flags) { -    priv->regex_compile_flags = compile_flags; -    if (priv->regex) -      g_regex_unref (priv->regex); +	if (!priv->regex || priv->regex_compile_flags != compile_flags) +	{ +		priv->regex_compile_flags = compile_flags; +		if (priv->regex) +			g_regex_unref (priv->regex); -    /* TODO Error handling */ -    priv->regex = g_regex_new (pattern, compile_flags, 0, NULL); -  } +		/* TODO Error handling */ +		priv->regex = g_regex_new (pattern, compile_flags, 0, NULL); +	} -  if (pattern != text) -    g_free ((char *) pattern); +	if (pattern != text) +		g_free ((char *) pattern); -  return priv->regex; +	return priv->regex;  } diff --git a/src/terminal-search-dialog.h b/src/terminal-search-dialog.h index e8911da..c685c44 100644 --- a/src/terminal-search-dialog.h +++ b/src/terminal-search-dialog.h @@ -25,9 +25,10 @@  G_BEGIN_DECLS -typedef enum _TerminalSearchFlags { -  TERMINAL_SEARCH_FLAG_BACKWARDS	= 1 << 0, -  TERMINAL_SEARCH_FLAG_WRAP_AROUND	= 1 << 1 +typedef enum _TerminalSearchFlags +{ +    TERMINAL_SEARCH_FLAG_BACKWARDS	= 1 << 0, +    TERMINAL_SEARCH_FLAG_WRAP_AROUND	= 1 << 1  } TerminalSearchFlags; @@ -36,12 +37,12 @@ GtkWidget	*terminal_search_dialog_new		(GtkWindow   *parent);  void		 terminal_search_dialog_present		(GtkWidget   *dialog);  void		 terminal_search_dialog_set_search_text (GtkWidget   *dialog, -							 const gchar *text); +        const gchar *text);  const gchar 	*terminal_search_dialog_get_search_text	(GtkWidget   *dialog);  TerminalSearchFlags -		 terminal_search_dialog_get_search_flags(GtkWidget   *dialog); +terminal_search_dialog_get_search_flags(GtkWidget   *dialog);  GRegex		*terminal_search_dialog_get_regex	(GtkWidget   *dialog);  G_END_DECLS diff --git a/src/terminal-tab-label.c b/src/terminal-tab-label.c index 3a28504..94c2b80 100644 --- a/src/terminal-tab-label.c +++ b/src/terminal-tab-label.c @@ -30,22 +30,22 @@  struct _TerminalTabLabelPrivate  { -  TerminalScreen *screen; -  GtkWidget *label; -  GtkWidget *close_button; -  gboolean bold; +	TerminalScreen *screen; +	GtkWidget *label; +	GtkWidget *close_button; +	gboolean bold;  };  enum  { -  PROP_0, -  PROP_SCREEN +    PROP_0, +    PROP_SCREEN  };  enum  { -  CLOSE_BUTTON_CLICKED, -  LAST_SIGNAL +    CLOSE_BUTTON_CLICKED, +    LAST_SIGNAL  };  static guint signals[LAST_SIGNAL]; @@ -58,7 +58,7 @@ static void  close_button_clicked_cb (GtkWidget *widget,                           TerminalTabLabel *tab_label)  { -  g_signal_emit (tab_label, signals[CLOSE_BUTTON_CLICKED], 0); +	g_signal_emit (tab_label, signals[CLOSE_BUTTON_CLICKED], 0);  }  static void @@ -66,15 +66,15 @@ sync_tab_label (TerminalScreen *screen,                  GParamSpec *pspec,                  GtkWidget *label)  { -  GtkWidget *hbox; -  const char *title; +	GtkWidget *hbox; +	const char *title; -  title = terminal_screen_get_title (screen); -  hbox = gtk_widget_get_parent (label); +	title = terminal_screen_get_title (screen); +	hbox = gtk_widget_get_parent (label); -  gtk_label_set_text (GTK_LABEL (label), title); -   -  gtk_widget_set_tooltip_text (hbox, title); +	gtk_label_set_text (GTK_LABEL (label), title); + +	gtk_widget_set_tooltip_text (hbox, title);  }  /* public functions */ @@ -85,33 +85,33 @@ static void  terminal_tab_label_parent_set (GtkWidget *widget,                                 GtkWidget *old_parent)  { -  void (* parent_set) (GtkWidget *, GtkWidget *) = GTK_WIDGET_CLASS (terminal_tab_label_parent_class)->parent_set; +	void (* parent_set) (GtkWidget *, GtkWidget *) = GTK_WIDGET_CLASS (terminal_tab_label_parent_class)->parent_set; -  if (parent_set) -    parent_set (widget, old_parent); +	if (parent_set) +		parent_set (widget, old_parent);  }  static void  terminal_tab_label_style_set (GtkWidget *widget,                                GtkStyle *previous_style)  { -  TerminalTabLabel *tab_label = TERMINAL_TAB_LABEL (widget); -  TerminalTabLabelPrivate *priv = tab_label->priv; -  void (* style_set) (GtkWidget *, GtkStyle *) = GTK_WIDGET_CLASS (terminal_tab_label_parent_class)->style_set; -  int h, w; +	TerminalTabLabel *tab_label = TERMINAL_TAB_LABEL (widget); +	TerminalTabLabelPrivate *priv = tab_label->priv; +	void (* style_set) (GtkWidget *, GtkStyle *) = GTK_WIDGET_CLASS (terminal_tab_label_parent_class)->style_set; +	int h, w; -  if (style_set) -    style_set (widget, previous_style); +	if (style_set) +		style_set (widget, previous_style); -  gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (widget), -                                     GTK_ICON_SIZE_MENU, &w, &h); -  gtk_widget_set_size_request (priv->close_button, w + 2, h + 2); +	gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (widget), +	                                   GTK_ICON_SIZE_MENU, &w, &h); +	gtk_widget_set_size_request (priv->close_button, w + 2, h + 2);  }  static void  terminal_tab_label_init (TerminalTabLabel *tab_label)  { -  tab_label->priv = TERMINAL_TAB_LABEL_GET_PRIVATE (tab_label); +	tab_label->priv = TERMINAL_TAB_LABEL_GET_PRIVATE (tab_label);  }  static GObject * @@ -119,51 +119,51 @@ terminal_tab_label_constructor (GType type,                                  guint n_construct_properties,                                  GObjectConstructParam *construct_params)  { -  GObject *object; -  TerminalTabLabel *tab_label; -  TerminalTabLabelPrivate *priv; -  GtkWidget *hbox, *label, *close_button, *image; +	GObject *object; +	TerminalTabLabel *tab_label; +	TerminalTabLabelPrivate *priv; +	GtkWidget *hbox, *label, *close_button, *image; + +	object = G_OBJECT_CLASS (terminal_tab_label_parent_class)->constructor +	         (type, n_construct_properties, construct_params); -  object = G_OBJECT_CLASS (terminal_tab_label_parent_class)->constructor -             (type, n_construct_properties, construct_params); +	tab_label = TERMINAL_TAB_LABEL (object); +	hbox = GTK_WIDGET (tab_label); +	priv = tab_label->priv; -  tab_label = TERMINAL_TAB_LABEL (object); -  hbox = GTK_WIDGET (tab_label); -  priv = tab_label->priv; +	g_assert (priv->screen != NULL); -  g_assert (priv->screen != NULL); -   -  gtk_box_set_spacing (GTK_BOX (hbox), SPACING); +	gtk_box_set_spacing (GTK_BOX (hbox), SPACING); -  priv->label = label = gtk_label_new (NULL); -  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); -  gtk_misc_set_padding (GTK_MISC (label), 0, 0); -  gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); -  gtk_label_set_single_line_mode (GTK_LABEL (label), TRUE); +	priv->label = label = gtk_label_new (NULL); +	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); +	gtk_misc_set_padding (GTK_MISC (label), 0, 0); +	gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); +	gtk_label_set_single_line_mode (GTK_LABEL (label), TRUE); -  gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); +	gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); -  priv->close_button = close_button = gtk_button_new (); -  gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE); -  gtk_button_set_focus_on_click (GTK_BUTTON (close_button), FALSE); -  gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE); -  gtk_widget_set_name (close_button, "mate-terminal-tab-close-button"); -  gtk_widget_set_tooltip_text (close_button, _("Close tab")); +	priv->close_button = close_button = gtk_button_new (); +	gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE); +	gtk_button_set_focus_on_click (GTK_BUTTON (close_button), FALSE); +	gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE); +	gtk_widget_set_name (close_button, "mate-terminal-tab-close-button"); +	gtk_widget_set_tooltip_text (close_button, _("Close tab")); -  image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU); -  gtk_container_add (GTK_CONTAINER (close_button), image); -  gtk_box_pack_end (GTK_BOX (hbox), close_button, FALSE, FALSE, 0); +	image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU); +	gtk_container_add (GTK_CONTAINER (close_button), image); +	gtk_box_pack_end (GTK_BOX (hbox), close_button, FALSE, FALSE, 0); -  sync_tab_label (priv->screen, NULL, label); -  g_signal_connect (priv->screen, "notify::title", -                    G_CALLBACK (sync_tab_label), label); +	sync_tab_label (priv->screen, NULL, label); +	g_signal_connect (priv->screen, "notify::title", +	                  G_CALLBACK (sync_tab_label), label); -  g_signal_connect (close_button, "clicked", -		    G_CALLBACK (close_button_clicked_cb), tab_label); +	g_signal_connect (close_button, "clicked", +	                  G_CALLBACK (close_button_clicked_cb), tab_label); -  gtk_widget_show_all (hbox); +	gtk_widget_show_all (hbox); -  return object; +	return object;  }  static void @@ -171,7 +171,7 @@ terminal_tab_label_finalize (GObject *object)  {  //   TerminalTabLabel *tab_label = TERMINAL_TAB_LABEL (object); -  G_OBJECT_CLASS (terminal_tab_label_parent_class)->finalize (object); +	G_OBJECT_CLASS (terminal_tab_label_parent_class)->finalize (object);  }  static void @@ -180,51 +180,52 @@ terminal_tab_label_set_property (GObject *object,                                   const GValue *value,                                   GParamSpec *pspec)  { -  TerminalTabLabel *tab_label = TERMINAL_TAB_LABEL (object); -  TerminalTabLabelPrivate *priv = tab_label->priv; - -  switch (prop_id) { -    case PROP_SCREEN: -      priv->screen = g_value_get_object (value); -      break; -    default: -      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -      break; -  } +	TerminalTabLabel *tab_label = TERMINAL_TAB_LABEL (object); +	TerminalTabLabelPrivate *priv = tab_label->priv; + +	switch (prop_id) +	{ +	case PROP_SCREEN: +		priv->screen = g_value_get_object (value); +		break; +	default: +		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +		break; +	}  }  static void  terminal_tab_label_class_init (TerminalTabLabelClass *klass)  { -  GObjectClass *gobject_class = G_OBJECT_CLASS (klass); -  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - -  gobject_class->constructor = terminal_tab_label_constructor; -  gobject_class->finalize = terminal_tab_label_finalize; -  gobject_class->set_property = terminal_tab_label_set_property; - -  widget_class->parent_set = terminal_tab_label_parent_set; -  widget_class->style_set = terminal_tab_label_style_set; - -  signals[CLOSE_BUTTON_CLICKED] = -    g_signal_new (I_("close-button-clicked"), -                  G_OBJECT_CLASS_TYPE (gobject_class), -                  G_SIGNAL_RUN_LAST, -                  G_STRUCT_OFFSET (TerminalTabLabelClass, close_button_clicked), -                  NULL, NULL, -                  g_cclosure_marshal_VOID__VOID, -                  G_TYPE_NONE, -                  0); - -  g_object_class_install_property -    (gobject_class, -     PROP_SCREEN, -     g_param_spec_object ("screen", NULL, NULL, -                          TERMINAL_TYPE_SCREEN, -                          G_PARAM_WRITABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | -                          G_PARAM_CONSTRUCT_ONLY)); - -  g_type_class_add_private (gobject_class, sizeof (TerminalTabLabelPrivate)); +	GObjectClass *gobject_class = G_OBJECT_CLASS (klass); +	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + +	gobject_class->constructor = terminal_tab_label_constructor; +	gobject_class->finalize = terminal_tab_label_finalize; +	gobject_class->set_property = terminal_tab_label_set_property; + +	widget_class->parent_set = terminal_tab_label_parent_set; +	widget_class->style_set = terminal_tab_label_style_set; + +	signals[CLOSE_BUTTON_CLICKED] = +	    g_signal_new (I_("close-button-clicked"), +	                  G_OBJECT_CLASS_TYPE (gobject_class), +	                  G_SIGNAL_RUN_LAST, +	                  G_STRUCT_OFFSET (TerminalTabLabelClass, close_button_clicked), +	                  NULL, NULL, +	                  g_cclosure_marshal_VOID__VOID, +	                  G_TYPE_NONE, +	                  0); + +	g_object_class_install_property +	(gobject_class, +	 PROP_SCREEN, +	 g_param_spec_object ("screen", NULL, NULL, +	                      TERMINAL_TYPE_SCREEN, +	                      G_PARAM_WRITABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | +	                      G_PARAM_CONSTRUCT_ONLY)); + +	g_type_class_add_private (gobject_class, sizeof (TerminalTabLabelPrivate));  }  /* public API */ @@ -238,9 +239,9 @@ terminal_tab_label_class_init (TerminalTabLabelClass *klass)  GtkWidget *  terminal_tab_label_new (TerminalScreen *screen)  { -  return g_object_new (TERMINAL_TYPE_TAB_LABEL, -                       "screen", screen, -                       NULL); +	return g_object_new (TERMINAL_TYPE_TAB_LABEL, +	                     "screen", screen, +	                     NULL);  }  /** @@ -254,36 +255,37 @@ void  terminal_tab_label_set_bold (TerminalTabLabel *tab_label,                               gboolean bold)  { -  TerminalTabLabelPrivate *priv = tab_label->priv; -  PangoAttrList *attr_list; -  PangoAttribute *weight_attr; -  gboolean free_list = FALSE; - -  bold = bold != FALSE; -  if (priv->bold == bold) -    return; - -  priv->bold = bold; - -  attr_list = gtk_label_get_attributes (GTK_LABEL (priv->label)); -  if (!attr_list) { -    attr_list = pango_attr_list_new (); -    free_list = TRUE; -  } - -  if (bold) -    weight_attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD); -  else -    weight_attr = pango_attr_weight_new (PANGO_WEIGHT_NORMAL); - -  /* gtk_label_get_attributes() returns the label's internal list, -   * which we're probably not supposed to modify directly.  -   * It seems to work ok however. -   */ -  pango_attr_list_change (attr_list, weight_attr); - -  gtk_label_set_attributes (GTK_LABEL (priv->label), attr_list); - -  if (free_list) -    pango_attr_list_unref (attr_list); +	TerminalTabLabelPrivate *priv = tab_label->priv; +	PangoAttrList *attr_list; +	PangoAttribute *weight_attr; +	gboolean free_list = FALSE; + +	bold = bold != FALSE; +	if (priv->bold == bold) +		return; + +	priv->bold = bold; + +	attr_list = gtk_label_get_attributes (GTK_LABEL (priv->label)); +	if (!attr_list) +	{ +		attr_list = pango_attr_list_new (); +		free_list = TRUE; +	} + +	if (bold) +		weight_attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD); +	else +		weight_attr = pango_attr_weight_new (PANGO_WEIGHT_NORMAL); + +	/* gtk_label_get_attributes() returns the label's internal list, +	 * which we're probably not supposed to modify directly. +	 * It seems to work ok however. +	 */ +	pango_attr_list_change (attr_list, weight_attr); + +	gtk_label_set_attributes (GTK_LABEL (priv->label), attr_list); + +	if (free_list) +		pango_attr_list_unref (attr_list);  } diff --git a/src/terminal-tab-label.h b/src/terminal-tab-label.h index d025e24..89c9fd2 100644 --- a/src/terminal-tab-label.h +++ b/src/terminal-tab-label.h @@ -38,18 +38,18 @@ typedef struct _TerminalTabLabelPrivate TerminalTabLabelPrivate;  struct _TerminalTabLabel  { -  GtkHBox parent_instance; +	GtkHBox parent_instance; -  /*< private >*/ -  TerminalTabLabelPrivate *priv; +	/*< private >*/ +	TerminalTabLabelPrivate *priv;  };  struct _TerminalTabLabelClass  { -  GtkHBoxClass parent_class; +	GtkHBoxClass parent_class; -  /* Signals */ -  void (* close_button_clicked) (TerminalTabLabel *tab_label); +	/* Signals */ +	void (* close_button_clicked) (TerminalTabLabel *tab_label);  };  GType       terminal_tab_label_get_type   (void); @@ -57,7 +57,7 @@ GType       terminal_tab_label_get_type   (void);  GtkWidget  *terminal_tab_label_new        (TerminalScreen *screen);  void        terminal_tab_label_set_bold   (TerminalTabLabel *tab_label, -                                           gboolean bold); +        gboolean bold);  G_END_DECLS diff --git a/src/terminal-tabs-menu.c b/src/terminal-tabs-menu.c index 2638a28..56e427b 100644 --- a/src/terminal-tabs-menu.c +++ b/src/terminal-tabs-menu.c @@ -56,8 +56,8 @@ struct _TerminalTabsMenuPrivate  enum  { -	PROP_0, -	PROP_WINDOW +    PROP_0, +    PROP_WINDOW  };  static void	terminal_tabs_menu_update		(TerminalTabsMenu *menu); @@ -76,77 +76,77 @@ G_DEFINE_TYPE (TerminalTabsMenu, terminal_tabs_menu, G_TYPE_OBJECT)  static guint  allocate_tab_id (void)  { -        int bit; -        guint b, len; -        guint8 *data; -        guint8 byte, mask; - -        if (n_tabs++ == 0) -        { -                g_assert (tabs_id_array == NULL); -                tabs_id_array = g_byte_array_sized_new (16); -        } - -        /* Find a free ID */ -        len = tabs_id_array->len; -        data = tabs_id_array->data; -        for (b = 0; b < len; ++b) -        { -                if (data[b] != 0xff) -                        break; -        } - -        /* Need to append a new byte */ -        if (b == len) -        { -                guint8 bytes[] = { 0 }; -                g_byte_array_append (tabs_id_array, bytes, G_N_ELEMENTS (bytes)); -                g_assert (tabs_id_array->len > b); -        } - -        data = tabs_id_array->data + b; -        byte = 0xff ^ *data; -        /* Now find the first free bit */ -        bit = g_bit_nth_lsf (byte, -1); -        mask = 1 << bit; -        g_assert (bit >= 0 && bit <= 7); -        g_assert ((*data & mask) == 0); -        /* And mark it as allocated */ -        *data |= mask; - -        return b * 8 + bit; +	int bit; +	guint b, len; +	guint8 *data; +	guint8 byte, mask; + +	if (n_tabs++ == 0) +	{ +		g_assert (tabs_id_array == NULL); +		tabs_id_array = g_byte_array_sized_new (16); +	} + +	/* Find a free ID */ +	len = tabs_id_array->len; +	data = tabs_id_array->data; +	for (b = 0; b < len; ++b) +	{ +		if (data[b] != 0xff) +			break; +	} + +	/* Need to append a new byte */ +	if (b == len) +	{ +		guint8 bytes[] = { 0 }; +		g_byte_array_append (tabs_id_array, bytes, G_N_ELEMENTS (bytes)); +		g_assert (tabs_id_array->len > b); +	} + +	data = tabs_id_array->data + b; +	byte = 0xff ^ *data; +	/* Now find the first free bit */ +	bit = g_bit_nth_lsf (byte, -1); +	mask = 1 << bit; +	g_assert (bit >= 0 && bit <= 7); +	g_assert ((*data & mask) == 0); +	/* And mark it as allocated */ +	*data |= mask; + +	return b * 8 + bit;  }  static void  free_tab_id (GtkAction *action)  { -        const char *name; -        guint id; -        guint8 *data; -        guint b, bit; - -        name = gtk_action_get_name (action); -        id = g_ascii_strtoull (name + ACTION_VERB_FORMAT_PREFIX_LEN, NULL, -                               ACTION_VERB_FORMAT_BASE); -        g_assert (id < tabs_id_array->len * 8); - -        b = id >> 3; -        bit = id & 0x7; -        data = tabs_id_array->data + b; -        *data &= ~(1 << bit); - -        g_assert (n_tabs > 0); -        if (--n_tabs == 0) -        { -                g_assert (tabs_id_array != NULL); -                g_byte_array_free (tabs_id_array, TRUE); -                tabs_id_array = NULL; -        } +	const char *name; +	guint id; +	guint8 *data; +	guint b, bit; + +	name = gtk_action_get_name (action); +	id = g_ascii_strtoull (name + ACTION_VERB_FORMAT_PREFIX_LEN, NULL, +	                       ACTION_VERB_FORMAT_BASE); +	g_assert (id < tabs_id_array->len * 8); + +	b = id >> 3; +	bit = id & 0x7; +	data = tabs_id_array->data + b; +	*data &= ~(1 << bit); + +	g_assert (n_tabs > 0); +	if (--n_tabs == 0) +	{ +		g_assert (tabs_id_array != NULL); +		g_byte_array_free (tabs_id_array, TRUE); +		tabs_id_array = NULL; +	}  }  static void  tab_action_activate_cb (GtkToggleAction *action, -			TerminalTabsMenu *menu) +                        TerminalTabsMenu *menu)  {  	TerminalTabsMenuPrivate *priv = menu->priv;  	TerminalScreen *screen; @@ -161,14 +161,14 @@ tab_action_activate_cb (GtkToggleAction *action,  	if (terminal_window_get_active (priv->window) != screen)  	{ -                terminal_window_switch_screen (priv->window, screen); +		terminal_window_switch_screen (priv->window, screen);  	}  }  static void  sync_tab_title (TerminalScreen *screen, -		GParamSpec *pspec, -		GtkAction *action) +                GParamSpec *pspec, +                GtkAction *action)  {  	const char *title; @@ -180,28 +180,28 @@ sync_tab_title (TerminalScreen *screen,  static void  notebook_page_added_cb (GtkNotebook *notebook,                          TerminalScreenContainer *container, -			guint position, -			TerminalTabsMenu *menu) +                        guint position, +                        TerminalTabsMenu *menu)  {  	TerminalTabsMenuPrivate *priv = menu->priv;  	GtkAction *action;  	char verb[ACTION_VERB_FORMAT_LENGTH];  	GSList *group; -        TerminalScreen *screen; +	TerminalScreen *screen; -        screen = terminal_screen_container_get_screen (container); +	screen = terminal_screen_container_get_screen (container);  	g_snprintf (verb, sizeof (verb), ACTION_VERB_FORMAT, allocate_tab_id ()); -   +  	action = g_object_new (GTK_TYPE_RADIO_ACTION, -			       "name", verb, -			       "tooltip", _("Switch to this tab"), -			       NULL); +	                       "name", verb, +	                       "tooltip", _("Switch to this tab"), +	                       NULL);  	sync_tab_title (screen, NULL, action);  	/* make sure the action is alive when handling the signal, see bug #169833 */  	g_signal_connect_object (screen, "notify::title", -				 G_CALLBACK (sync_tab_title), action, 0); +	                         G_CALLBACK (sync_tab_title), action, 0);  	gtk_action_group_add_action_with_accel (priv->action_group, action, NULL); @@ -218,7 +218,7 @@ notebook_page_added_cb (GtkNotebook *notebook,  	g_object_set_data (G_OBJECT (action), DATA_KEY, screen);  	g_signal_connect (action, "activate", -			  G_CALLBACK (tab_action_activate_cb), menu); +	                  G_CALLBACK (tab_action_activate_cb), menu);  	g_object_unref (action); @@ -228,37 +228,37 @@ notebook_page_added_cb (GtkNotebook *notebook,  static void  notebook_page_removed_cb (GtkNotebook *notebook,                            TerminalScreenContainer *container, -			  guint position, -			  TerminalTabsMenu *menu) +                          guint position, +                          TerminalTabsMenu *menu)  {  	TerminalTabsMenuPrivate *priv = menu->priv;  	GtkAction *action; -        TerminalScreen *screen; +	TerminalScreen *screen; -        screen = terminal_screen_container_get_screen (container); +	screen = terminal_screen_container_get_screen (container);  	action = g_object_get_data (G_OBJECT (screen), DATA_KEY);  	g_return_if_fail (action != NULL); -        free_tab_id (action); +	free_tab_id (action);  	g_signal_handlers_disconnect_by_func -		(screen, G_CALLBACK (sync_tab_title), action); +	(screen, G_CALLBACK (sync_tab_title), action);  	g_signal_handlers_disconnect_by_func -		(action, G_CALLBACK (tab_action_activate_cb), menu); +	(action, G_CALLBACK (tab_action_activate_cb), menu);  	g_object_set_data (G_OBJECT (screen), DATA_KEY, NULL); - 	gtk_action_group_remove_action (priv->action_group, action); +	gtk_action_group_remove_action (priv->action_group, action);  	terminal_tabs_menu_update (menu);  }  static void  notebook_page_reordered_cb (GtkNotebook *notebook, -			    GtkBin *bin, -			    guint position, -			    TerminalTabsMenu *menu) +                            GtkBin *bin, +                            guint position, +                            TerminalTabsMenu *menu)  {  	terminal_tabs_menu_update (menu);  } @@ -273,28 +273,28 @@ notebook_page_switch_cb (GtkNotebook *notebook,                           guint position,                           TerminalTabsMenu *menu)  { -        TerminalScreenContainer *container; -        TerminalScreen *screen; -        GtkAction *action; +	TerminalScreenContainer *container; +	TerminalScreen *screen; +	GtkAction *action;  #if GTK_CHECK_VERSION (2, 90, 6) -        container = TERMINAL_SCREEN_CONTAINER (page); +	container = TERMINAL_SCREEN_CONTAINER (page);  #else -        container = TERMINAL_SCREEN_CONTAINER (gtk_notebook_get_nth_page (notebook, position)); +	container = TERMINAL_SCREEN_CONTAINER (gtk_notebook_get_nth_page (notebook, position));  #endif -        screen = terminal_screen_container_get_screen (container); +	screen = terminal_screen_container_get_screen (container);  	action = g_object_get_data (G_OBJECT (screen), DATA_KEY); -        g_signal_handlers_block_by_func (action, G_CALLBACK (tab_action_activate_cb), menu); +	g_signal_handlers_block_by_func (action, G_CALLBACK (tab_action_activate_cb), menu);  	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE); -        g_signal_handlers_unblock_by_func (action, G_CALLBACK (tab_action_activate_cb), menu); +	g_signal_handlers_unblock_by_func (action, G_CALLBACK (tab_action_activate_cb), menu);  }  static void  connect_proxy_cb (GtkActionGroup *action_group, -		  GtkAction *action, -		  GtkWidget *proxy, -		  gpointer dummy) +                  GtkAction *action, +                  GtkWidget *proxy, +                  gpointer dummy)  {  	if (GTK_IS_MENU_ITEM (proxy))  	{ @@ -310,7 +310,7 @@ connect_proxy_cb (GtkActionGroup *action_group,  static void  terminal_tabs_menu_set_window (TerminalTabsMenu *menu, -			   TerminalWindow *window) +                               TerminalWindow *window)  {  	TerminalTabsMenuPrivate *priv = menu->priv;  	GtkWidget *notebook; @@ -324,49 +324,49 @@ terminal_tabs_menu_set_window (TerminalTabsMenu *menu,  	g_object_unref (priv->action_group);  	priv->anchor_action = g_object_new (GTK_TYPE_RADIO_ACTION, -					    "name", "TabsMenuAnchorAction", -					    NULL); +	                                    "name", "TabsMenuAnchorAction", +	                                    NULL);  	gtk_action_group_add_action (priv->action_group, priv->anchor_action); -        g_object_unref (priv->anchor_action); +	g_object_unref (priv->anchor_action);  	g_signal_connect (priv->action_group, "connect-proxy", -			  G_CALLBACK (connect_proxy_cb), NULL); +	                  G_CALLBACK (connect_proxy_cb), NULL);  	notebook = terminal_window_get_notebook (window);  	g_signal_connect_object (notebook, "page-added", -				 G_CALLBACK (notebook_page_added_cb), menu, 0); +	                         G_CALLBACK (notebook_page_added_cb), menu, 0);  	g_signal_connect_object (notebook, "page-removed", -				 G_CALLBACK (notebook_page_removed_cb), menu, 0); +	                         G_CALLBACK (notebook_page_removed_cb), menu, 0);  	g_signal_connect_object (notebook, "page-reordered", -				 G_CALLBACK (notebook_page_reordered_cb), menu, 0); +	                         G_CALLBACK (notebook_page_reordered_cb), menu, 0);  	g_signal_connect_object (notebook, "switch-page", -				 G_CALLBACK (notebook_page_switch_cb), menu, 0); +	                         G_CALLBACK (notebook_page_switch_cb), menu, 0);  }  static void  terminal_tabs_menu_set_property (GObject *object, -			     guint prop_id, -			     const GValue *value, -			     GParamSpec *pspec) +                                 guint prop_id, +                                 const GValue *value, +                                 GParamSpec *pspec)  {  	TerminalTabsMenu *menu = TERMINAL_TABS_MENU (object);  	switch (prop_id)  	{ -		case PROP_WINDOW: -			terminal_tabs_menu_set_window (menu, g_value_get_object (value)); -			break; -                default: -                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -                        break; +	case PROP_WINDOW: +		terminal_tabs_menu_set_window (menu, g_value_get_object (value)); +		break; +	default: +		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +		break;  	}  }  static void  terminal_tabs_menu_get_property (GObject *object, -			     guint prop_id, -			     GValue *value, -			     GParamSpec *pspec) +                                 guint prop_id, +                                 GValue *value, +                                 GParamSpec *pspec)  {  	/* no readable properties */  	g_return_if_reached (); @@ -381,16 +381,16 @@ terminal_tabs_menu_class_init (TerminalTabsMenuClass *klass)  	object_class->get_property = terminal_tabs_menu_get_property;  	g_object_class_install_property (object_class, -					 PROP_WINDOW, -					 g_param_spec_object ("window", NULL, NULL, -							      TERMINAL_TYPE_WINDOW, -							      G_PARAM_WRITABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | -							      G_PARAM_CONSTRUCT_ONLY)); +	                                 PROP_WINDOW, +	                                 g_param_spec_object ("window", NULL, NULL, +	                                         TERMINAL_TYPE_WINDOW, +	                                         G_PARAM_WRITABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | +	                                         G_PARAM_CONSTRUCT_ONLY));  	g_type_class_add_private (object_class, sizeof (TerminalTabsMenuPrivate)); -        /* We don't want to save accels, so skip them */ -        gtk_accel_map_add_filter ("<Actions>/Main/TabsSwitch*"); +	/* We don't want to save accels, so skip them */ +	gtk_accel_map_add_filter ("<Actions>/Main/TabsSwitch*");  }  static void @@ -417,29 +417,29 @@ TerminalTabsMenu *  terminal_tabs_menu_new (TerminalWindow *window)  {  	return TERMINAL_TABS_MENU (g_object_new (TERMINAL_TYPE_TABS_MENU, -					     "window", window, -					     NULL)); +	                           "window", window, +	                           NULL));  }  static void  tab_set_action_accelerator (GtkActionGroup *action_group, -			    GtkAction *action, -			    guint tab_number, -			    gboolean is_single_tab) +                            GtkAction *action, +                            guint tab_number, +                            gboolean is_single_tab)  { -        if (!is_single_tab && -            tab_number < TERMINAL_ACCELS_N_TABS_SWITCH) -        { -                char accel_path[ACCEL_PATH_FORMAT_LENGTH]; - -                g_snprintf (accel_path, sizeof (accel_path), ACCEL_PATH_FORMAT, tab_number + 1); -                gtk_action_set_accel_path (action, accel_path); -        } -        else -        { -                gtk_action_set_accel_path (action, NULL); -                return; -        } +	if (!is_single_tab && +	        tab_number < TERMINAL_ACCELS_N_TABS_SWITCH) +	{ +		char accel_path[ACCEL_PATH_FORMAT_LENGTH]; + +		g_snprintf (accel_path, sizeof (accel_path), ACCEL_PATH_FORMAT, tab_number + 1); +		gtk_action_set_accel_path (action, accel_path); +	} +	else +	{ +		gtk_action_set_accel_path (action, NULL); +		return; +	}  }  static void @@ -467,20 +467,20 @@ terminal_tabs_menu_update (TerminalTabsMenu *menu)  	for (l = tabs; l != NULL; l = l->next)  	{ -                TerminalScreenContainer *container = TERMINAL_SCREEN_CONTAINER (l->data); -                GObject *screen = G_OBJECT (terminal_screen_container_get_screen (container)); +		TerminalScreenContainer *container = TERMINAL_SCREEN_CONTAINER (l->data); +		GObject *screen = G_OBJECT (terminal_screen_container_get_screen (container));  		action = g_object_get_data (screen, DATA_KEY);  		g_return_if_fail (action != NULL); -   +  		verb = gtk_action_get_name (action);  		tab_set_action_accelerator (p->action_group, action, i++, is_single_tab);  		gtk_ui_manager_add_ui (manager, p->ui_id, -				       UI_PATH, -				       verb, verb, -				       GTK_UI_MANAGER_MENUITEM, FALSE); +		                       UI_PATH, +		                       verb, verb, +		                       GTK_UI_MANAGER_MENUITEM, FALSE);  	}  	g_list_free (tabs); diff --git a/src/terminal-util.c b/src/terminal-util.c index 6bf6618..ea93a98 100644 --- a/src/terminal-util.c +++ b/src/terminal-util.c @@ -48,11 +48,11 @@  void  terminal_util_set_unique_role (GtkWindow *window, const char *prefix)  { -  char *role; +	char *role; -  role = g_strdup_printf ("%s-%d-%d-%d", prefix, getpid (), g_random_int (), (int) time (NULL)); -  gtk_window_set_role (window, role); -  g_free (role); +	role = g_strdup_printf ("%s-%d-%d-%d", prefix, getpid (), g_random_int (), (int) time (NULL)); +	gtk_window_set_role (window, role); +	g_free (role);  }  /** @@ -63,66 +63,66 @@ terminal_util_set_unique_role (GtkWindow *window, const char *prefix)   * @message_format: printf() style format string   *   * Create a #GtkMessageDialog window with the message, and present it, handling its buttons. - * If @weap_ptr is not #NULL, only create the dialog if <literal>*weap_ptr</literal> is #NULL  - * (and in that * case, set @weap_ptr to be a weak pointer to the new dialog), otherwise just  + * If @weap_ptr is not #NULL, only create the dialog if <literal>*weap_ptr</literal> is #NULL + * (and in that * case, set @weap_ptr to be a weak pointer to the new dialog), otherwise just   * present <literal>*weak_ptr</literal>. Note that in this last case, the message <emph>will</emph>   * be changed.   */  void -terminal_util_show_error_dialog (GtkWindow *transient_parent,  +terminal_util_show_error_dialog (GtkWindow *transient_parent,                                   GtkWidget **weak_ptr,                                   GError *error, -                                 const char *message_format,  -                                 ...)  +                                 const char *message_format, +                                 ...)  { -  char *message; -  va_list args; - -  if (message_format) -    { -      va_start (args, message_format); -      message = g_strdup_vprintf (message_format, args); -      va_end (args); -    } -  else message = NULL; - -  if (weak_ptr == NULL || *weak_ptr == NULL) -    { -      GtkWidget *dialog; -      dialog = gtk_message_dialog_new (transient_parent, -                                       GTK_DIALOG_DESTROY_WITH_PARENT, -                                       GTK_MESSAGE_ERROR, -                                       GTK_BUTTONS_OK, -                                       message ? "%s" : NULL, -				       message); - -      if (error != NULL) -        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), -                                                  "%s", error->message); - -      g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (gtk_widget_destroy), NULL); - -      if (weak_ptr != NULL) -        { -        *weak_ptr = dialog; -        g_object_add_weak_pointer (G_OBJECT (dialog), (void**)weak_ptr); -        } - -      gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); -       -      gtk_widget_show_all (dialog); -    } -  else  -    { -      g_return_if_fail (GTK_IS_MESSAGE_DIALOG (*weak_ptr)); - -      /* Sucks that there's no direct accessor for "text" property */ -      g_object_set (G_OBJECT (*weak_ptr), "text", message, NULL); - -      gtk_window_present (GTK_WINDOW (*weak_ptr)); -    } - -  g_free (message); +	char *message; +	va_list args; + +	if (message_format) +	{ +		va_start (args, message_format); +		message = g_strdup_vprintf (message_format, args); +		va_end (args); +	} +	else message = NULL; + +	if (weak_ptr == NULL || *weak_ptr == NULL) +	{ +		GtkWidget *dialog; +		dialog = gtk_message_dialog_new (transient_parent, +		                                 GTK_DIALOG_DESTROY_WITH_PARENT, +		                                 GTK_MESSAGE_ERROR, +		                                 GTK_BUTTONS_OK, +		                                 message ? "%s" : NULL, +		                                 message); + +		if (error != NULL) +			gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), +			        "%s", error->message); + +		g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (gtk_widget_destroy), NULL); + +		if (weak_ptr != NULL) +		{ +			*weak_ptr = dialog; +			g_object_add_weak_pointer (G_OBJECT (dialog), (void**)weak_ptr); +		} + +		gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); + +		gtk_widget_show_all (dialog); +	} +	else +	{ +		g_return_if_fail (GTK_IS_MESSAGE_DIALOG (*weak_ptr)); + +		/* Sucks that there's no direct accessor for "text" property */ +		g_object_set (G_OBJECT (*weak_ptr), "text", message, NULL); + +		gtk_window_present (GTK_WINDOW (*weak_ptr)); +	} + +	g_free (message);  }  static gboolean @@ -131,66 +131,72 @@ open_url (GtkWindow *parent,            guint32 user_time,            GError **error)  { -  GdkScreen *screen; +	GdkScreen *screen; -  if (parent) -    screen = gtk_widget_get_screen (GTK_WIDGET (parent)); -  else -    screen = gdk_screen_get_default (); +	if (parent) +		screen = gtk_widget_get_screen (GTK_WIDGET (parent)); +	else +		screen = gdk_screen_get_default (); -  return gtk_show_uri (screen, uri, user_time, error); +	return gtk_show_uri (screen, uri, user_time, error);  }  void -terminal_util_show_help (const char *topic,  +terminal_util_show_help (const char *topic,                           GtkWindow  *parent)  { -  GError *error = NULL; -  const char *lang; -  char *uri = NULL, *url; -  guint i; -  -  const char * const * langs = g_get_language_names (); -  for (i = 0; langs[i]; i++) { -    lang = langs[i]; -    if (strchr (lang, '.')) { -      continue; -    } -  -    uri = g_build_filename (TERM_HELPDIR, -                            "mate-terminal", /* DOC_MODULE */ -                            lang, -                            "mate-terminal.xml", -                            NULL); -					 -    if (g_file_test (uri, G_FILE_TEST_EXISTS)) { -      break; -    } - -    g_free (uri); -    uri = NULL; -  } - -  if (!uri) -    return; - -  if (topic) { -    url = g_strdup_printf ("ghelp://%s?%s", uri, topic); -  } else { -    url = g_strdup_printf ("ghelp://%s", uri); -  } - -  if (!open_url (GTK_WINDOW (parent), url, gtk_get_current_event_time (), &error)) -    { -      terminal_util_show_error_dialog (GTK_WINDOW (parent), NULL, error, -                                       _("There was an error displaying help")); -      g_error_free (error); -    } - -  g_free (uri); -  g_free (url); +	GError *error = NULL; +	const char *lang; +	char *uri = NULL, *url; +	guint i; + +	const char * const * langs = g_get_language_names (); +	for (i = 0; langs[i]; i++) +	{ +		lang = langs[i]; +		if (strchr (lang, '.')) +		{ +			continue; +		} + +		uri = g_build_filename (TERM_HELPDIR, +		                        "mate-terminal", /* DOC_MODULE */ +		                        lang, +		                        "mate-terminal.xml", +		                        NULL); + +		if (g_file_test (uri, G_FILE_TEST_EXISTS)) +		{ +			break; +		} + +		g_free (uri); +		uri = NULL; +	} + +	if (!uri) +		return; + +	if (topic) +	{ +		url = g_strdup_printf ("ghelp://%s?%s", uri, topic); +	} +	else +	{ +		url = g_strdup_printf ("ghelp://%s", uri); +	} + +	if (!open_url (GTK_WINDOW (parent), url, gtk_get_current_event_time (), &error)) +	{ +		terminal_util_show_error_dialog (GTK_WINDOW (parent), NULL, error, +		                                 _("There was an error displaying help")); +		g_error_free (error); +	} + +	g_free (uri); +	g_free (url);  } -  +  /* sets accessible name and description for the widget */  void @@ -198,26 +204,26 @@ terminal_util_set_atk_name_description (GtkWidget  *widget,                                          const char *name,                                          const char *desc)  { -  AtkObject *obj; -   -  obj = gtk_widget_get_accessible (widget); - -  if (obj == NULL) -    { -      g_warning ("%s: for some reason widget has no GtkAccessible", -                 G_STRFUNC); -      return; -    } - -   -  if (!GTK_IS_ACCESSIBLE (obj)) -    return; /* This means GAIL is not loaded so we have the NoOp accessible */ -       -  g_return_if_fail (GTK_IS_ACCESSIBLE (obj));   -  if (desc) -    atk_object_set_description (obj, desc); -  if (name) -    atk_object_set_name (obj, name); +	AtkObject *obj; + +	obj = gtk_widget_get_accessible (widget); + +	if (obj == NULL) +	{ +		g_warning ("%s: for some reason widget has no GtkAccessible", +		           G_STRFUNC); +		return; +	} + + +	if (!GTK_IS_ACCESSIBLE (obj)) +		return; /* This means GAIL is not loaded so we have the NoOp accessible */ + +	g_return_if_fail (GTK_IS_ACCESSIBLE (obj)); +	if (desc) +		atk_object_set_description (obj, desc); +	if (name) +		atk_object_set_name (obj, name);  }  void @@ -226,43 +232,43 @@ terminal_util_open_url (GtkWidget *parent,                          TerminalURLFlavour flavor,                          guint32 user_time)  { -  GError *error = NULL; -  char *uri; - -  g_return_if_fail (orig_url != NULL); - -  switch (flavor) -    { -    case FLAVOR_DEFAULT_TO_HTTP: -      uri = g_strdup_printf ("http:%s", orig_url); -      break; -    case FLAVOR_EMAIL: -      if (g_ascii_strncasecmp ("mailto:", orig_url, 7) != 0) -	uri = g_strdup_printf ("mailto:%s", orig_url); -      else -	uri = g_strdup (orig_url); -      break; -    case FLAVOR_VOIP_CALL: -    case FLAVOR_AS_IS: -      uri = g_strdup (orig_url); -      break; -    case FLAVOR_SKEY: -      /* shouldn't get this */ -    default: -      uri = NULL; -      g_assert_not_reached (); -    } - -  if (!open_url (GTK_WINDOW (parent), uri, user_time, &error)) -    { -      terminal_util_show_error_dialog (GTK_WINDOW (parent), NULL, error, -                                       _("Could not open the address “%s”"), -                                       uri); - -      g_error_free (error); -    } - -  g_free (uri); +	GError *error = NULL; +	char *uri; + +	g_return_if_fail (orig_url != NULL); + +	switch (flavor) +	{ +	case FLAVOR_DEFAULT_TO_HTTP: +		uri = g_strdup_printf ("http:%s", orig_url); +		break; +	case FLAVOR_EMAIL: +		if (g_ascii_strncasecmp ("mailto:", orig_url, 7) != 0) +			uri = g_strdup_printf ("mailto:%s", orig_url); +		else +			uri = g_strdup (orig_url); +		break; +	case FLAVOR_VOIP_CALL: +	case FLAVOR_AS_IS: +		uri = g_strdup (orig_url); +		break; +	case FLAVOR_SKEY: +		/* shouldn't get this */ +	default: +		uri = NULL; +		g_assert_not_reached (); +	} + +	if (!open_url (GTK_WINDOW (parent), uri, user_time, &error)) +	{ +		terminal_util_show_error_dialog (GTK_WINDOW (parent), NULL, error, +		                                 _("Could not open the address “%s”"), +		                                 uri); + +		g_error_free (error); +	} + +	g_free (uri);  }  /** @@ -276,25 +282,25 @@ char *  terminal_util_resolve_relative_path (const char *path,                                       const char *relative_path)  { -  GFile *file, *resolved_file; -  char *resolved_path = NULL; +	GFile *file, *resolved_file; +	char *resolved_path = NULL; -  g_return_val_if_fail (relative_path != NULL, NULL); +	g_return_val_if_fail (relative_path != NULL, NULL); -  if (path == NULL) -    return g_strdup (relative_path); +	if (path == NULL) +		return g_strdup (relative_path); -  file = g_file_new_for_path (path); -  resolved_file = g_file_resolve_relative_path (file, relative_path); -  g_object_unref (file); +	file = g_file_new_for_path (path); +	resolved_file = g_file_resolve_relative_path (file, relative_path); +	g_object_unref (file); -  if (resolved_file == NULL) -    return NULL; +	if (resolved_file == NULL) +		return NULL; -  resolved_path = g_file_get_path (resolved_file); -  g_object_unref (resolved_file); +	resolved_path = g_file_get_path (resolved_file); +	g_object_unref (resolved_file); -  return resolved_path; +	return resolved_path;  }  /** @@ -307,76 +313,77 @@ terminal_util_resolve_relative_path (const char *path,  void  terminal_util_transform_uris_to_quoted_fuse_paths (char **uris)  { -  guint i; +	guint i; -  if (!uris) -    return; +	if (!uris) +		return; -  for (i = 0; uris[i]; ++i) -    { -      GFile *file; -      char *path; +	for (i = 0; uris[i]; ++i) +	{ +		GFile *file; +		char *path; -      file = g_file_new_for_uri (uris[i]); +		file = g_file_new_for_uri (uris[i]); -      if ((path = g_file_get_path (file))) -        { -          char *quoted; +		if ((path = g_file_get_path (file))) +		{ +			char *quoted; -          quoted = g_shell_quote (path); -          g_free (uris[i]); -          g_free (path); +			quoted = g_shell_quote (path); +			g_free (uris[i]); +			g_free (path); -          uris[i] = quoted; -        } +			uris[i] = quoted; +		} -      g_object_unref (file); -    } +		g_object_unref (file); +	}  }  char *  terminal_util_concat_uris (char **uris,                             gsize *length)  { -  GString *string; -  gsize len; -  guint i; +	GString *string; +	gsize len; +	guint i; -  len = 0; -  for (i = 0; uris[i]; ++i) -    len += strlen (uris[i]) + 1; +	len = 0; +	for (i = 0; uris[i]; ++i) +		len += strlen (uris[i]) + 1; -  if (length) -    *length = len; +	if (length) +		*length = len; -  string = g_string_sized_new (len + 1); -  for (i = 0; uris[i]; ++i) -    { -      g_string_append (string, uris[i]); -      g_string_append_c (string, ' '); -    } +	string = g_string_sized_new (len + 1); +	for (i = 0; uris[i]; ++i) +	{ +		g_string_append (string, uris[i]); +		g_string_append_c (string, ' '); +	} -  return g_string_free (string, FALSE); +	return g_string_free (string, FALSE);  }  char *  terminal_util_get_licence_text (void)  { -  const gchar *license[] = { -    N_("MATE Terminal is free software; you can redistribute it and/or modify " -       "it under the terms of the GNU General Public License as published by " -       "the Free Software Foundation; either version 3 of the License, or " -       "(at your option) any later version."), -    N_("MATE Terminal is distributed in the hope that it will be useful, " -       "but WITHOUT ANY WARRANTY; without even the implied warranty of " -       "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the " -       "GNU General Public License for more details."), -    N_("You should have received a copy of the GNU General Public License " -       "along with MATE Terminal; if not, write to the Free Software Foundation, " -       "Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA") -  }; - -  return g_strjoin ("\n\n", _(license[0]), _(license[1]), _(license[2]), NULL); +	const gchar *license[] = +	{ +		N_("MATE Terminal is free software; you can redistribute it and/or modify " +		"it under the terms of the GNU General Public License as published by " +		"the Free Software Foundation; either version 3 of the License, or " +		"(at your option) any later version."), +		N_("MATE Terminal is distributed in the hope that it will be useful, " +		"but WITHOUT ANY WARRANTY; without even the implied warranty of " +		"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the " +		"GNU General Public License for more details."), +		N_("You should have received a copy of the GNU General Public License " +		"along with MATE Terminal; if not, write to the Free Software Foundation, " +		"Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA") +	}; + +	return g_strjoin ("\n\n", _(license[0]), _(license[1]), _(license[2]), NULL);  }  gboolean @@ -384,48 +391,51 @@ terminal_util_load_builder_file (const char *filename,                                   const char *object_name,                                   ...)  { -  char *path; -  GtkBuilder *builder; -  GError *error = NULL; -  va_list args; - -  path = g_build_filename (TERM_PKGDATADIR, filename, NULL); -  builder = gtk_builder_new (); -  if (!gtk_builder_add_from_file (builder, path, &error)) { -    g_warning ("Failed to load %s: %s\n", filename, error->message); -    g_error_free (error); -    g_free (path); -    g_object_unref (builder); -    return FALSE; -  } -  g_free (path); - -  va_start (args, object_name); - -  while (object_name) { -    GObject **objectptr; - -    objectptr = va_arg (args, GObject**); -    *objectptr = gtk_builder_get_object (builder, object_name); -    if (!*objectptr) { -      g_warning ("Failed to fetch object \"%s\"\n", object_name); -      break; -    } - -    object_name = va_arg (args, const char*); -  } - -  va_end (args); - -  g_object_unref (builder); -  return object_name == NULL; +	char *path; +	GtkBuilder *builder; +	GError *error = NULL; +	va_list args; + +	path = g_build_filename (TERM_PKGDATADIR, filename, NULL); +	builder = gtk_builder_new (); +	if (!gtk_builder_add_from_file (builder, path, &error)) +	{ +		g_warning ("Failed to load %s: %s\n", filename, error->message); +		g_error_free (error); +		g_free (path); +		g_object_unref (builder); +		return FALSE; +	} +	g_free (path); + +	va_start (args, object_name); + +	while (object_name) +	{ +		GObject **objectptr; + +		objectptr = va_arg (args, GObject**); +		*objectptr = gtk_builder_get_object (builder, object_name); +		if (!*objectptr) +		{ +			g_warning ("Failed to fetch object \"%s\"\n", object_name); +			break; +		} + +		object_name = va_arg (args, const char*); +	} + +	va_end (args); + +	g_object_unref (builder); +	return object_name == NULL;  }  gboolean  terminal_util_dialog_response_on_delete (GtkWindow *widget)  { -  gtk_dialog_response (GTK_DIALOG (widget), GTK_RESPONSE_DELETE_EVENT); -  return TRUE; +	gtk_dialog_response (GTK_DIALOG (widget), GTK_RESPONSE_DELETE_EVENT); +	return TRUE;  }  /* Like g_key_file_set_string, but escapes characters so that @@ -434,34 +444,34 @@ terminal_util_dialog_response_on_delete (GtkWindow *widget)   */  void  terminal_util_key_file_set_string_escape (GKeyFile *key_file, -                                          const char *group, -                                          const char *key, -                                          const char *string) +        const char *group, +        const char *key, +        const char *string)  { -  char *escaped; +	char *escaped; -  /* FIXMEchpe: be more intelligent and only escape characters that aren't UTF-8 */ -  escaped = g_strescape (string, NULL); -  g_key_file_set_string (key_file, group, key, escaped); -  g_free (escaped); +	/* FIXMEchpe: be more intelligent and only escape characters that aren't UTF-8 */ +	escaped = g_strescape (string, NULL); +	g_key_file_set_string (key_file, group, key, escaped); +	g_free (escaped);  }  char *  terminal_util_key_file_get_string_unescape (GKeyFile *key_file, -                                            const char *group, -                                            const char *key, -                                            GError **error) +        const char *group, +        const char *key, +        GError **error)  { -  char *escaped, *unescaped; +	char *escaped, *unescaped; -  escaped = g_key_file_get_string (key_file, group, key, error); -  if (!escaped) -    return NULL; +	escaped = g_key_file_get_string (key_file, group, key, error); +	if (!escaped) +		return NULL; -  unescaped = g_strcompress (escaped); -  g_free (escaped); +	unescaped = g_strcompress (escaped); +	g_free (escaped); -  return unescaped; +	return unescaped;  }  void @@ -471,23 +481,23 @@ terminal_util_key_file_set_argv (GKeyFile *key_file,                                   int argc,                                   char **argv)  { -  char **quoted_argv; -  char *flat; -  int i; +	char **quoted_argv; +	char *flat; +	int i; -  if (argc < 0) -    argc = g_strv_length (argv); +	if (argc < 0) +		argc = g_strv_length (argv); -  quoted_argv = g_new (char*, argc + 1); -  for (i = 0; i < argc; ++i) -    quoted_argv[i] = g_shell_quote (argv[i]); -  quoted_argv[argc] = NULL; +	quoted_argv = g_new (char*, argc + 1); +	for (i = 0; i < argc; ++i) +		quoted_argv[i] = g_shell_quote (argv[i]); +	quoted_argv[argc] = NULL; -  flat = g_strjoinv (" ", quoted_argv); -  terminal_util_key_file_set_string_escape (key_file, group, key, flat); +	flat = g_strjoinv (" ", quoted_argv); +	terminal_util_key_file_set_string_escape (key_file, group, key, flat); -  g_free (flat); -  g_strfreev (quoted_argv); +	g_free (flat); +	g_strfreev (quoted_argv);  }  char ** @@ -497,21 +507,21 @@ terminal_util_key_file_get_argv (GKeyFile *key_file,                                   int *argc,                                   GError **error)  { -  char **argv; -  char *flat; -  gboolean retval; +	char **argv; +	char *flat; +	gboolean retval; -  flat = terminal_util_key_file_get_string_unescape (key_file, group, key, error); -  if (!flat) -    return NULL; +	flat = terminal_util_key_file_get_string_unescape (key_file, group, key, error); +	if (!flat) +		return NULL; -  retval = g_shell_parse_argv (flat, argc, &argv, error); -  g_free (flat); +	retval = g_shell_parse_argv (flat, argc, &argv, error); +	g_free (flat); -  if (retval) -    return argv; +	if (retval) +		return argv; -  return NULL; +	return NULL;  }  /* Proxy stuff */ @@ -520,14 +530,14 @@ static char *  conf_get_string (MateConfClient *conf,                   const char *key)  { -  char *value; -  value = mateconf_client_get_string (conf, key, NULL); -  if (G_UNLIKELY (value && *value == '\0')) -    { -      g_free (value); -      value = NULL; -    } -  return value; +	char *value; +	value = mateconf_client_get_string (conf, key, NULL); +	if (G_UNLIKELY (value && *value == '\0')) +	{ +		g_free (value); +		value = NULL; +	} +	return value;  }  /* @@ -544,174 +554,174 @@ set_proxy_env (GHashTable *env_table,                 const char *key,                 char *value)  { -  char *key1 = NULL, *key2 = NULL; -  char *value1 = NULL, *value2 = NULL; - -  if (!value) -    return; - -  if (g_hash_table_lookup (env_table, key) == NULL) -    key1 = g_strdup (key); - -  key2 = g_ascii_strup (key, -1); -  if (g_hash_table_lookup (env_table, key) != NULL) -    { -      g_free (key2); -      key2 = NULL; -    } - -  if (key1 && key2) -    { -      value1 = value; -      value2 = g_strdup (value); -    } -  else if (key1) -    value1 = value; -  else if (key2) -    value2 = value; -  else -    g_free (value); - -  if (key1) -    g_hash_table_replace (env_table, key1, value1); -  if (key2) -    g_hash_table_replace (env_table, key2, value2); +	char *key1 = NULL, *key2 = NULL; +	char *value1 = NULL, *value2 = NULL; + +	if (!value) +		return; + +	if (g_hash_table_lookup (env_table, key) == NULL) +		key1 = g_strdup (key); + +	key2 = g_ascii_strup (key, -1); +	if (g_hash_table_lookup (env_table, key) != NULL) +	{ +		g_free (key2); +		key2 = NULL; +	} + +	if (key1 && key2) +	{ +		value1 = value; +		value2 = g_strdup (value); +	} +	else if (key1) +		value1 = value; +	else if (key2) +		value2 = value; +	else +		g_free (value); + +	if (key1) +		g_hash_table_replace (env_table, key1, value1); +	if (key2) +		g_hash_table_replace (env_table, key2, value2);  }  static void  setup_http_proxy_env (GHashTable *env_table,                        MateConfClient *conf)  { -  gchar *host; -  gint port; -  GSList *ignore; +	gchar *host; +	gint port; +	GSList *ignore; -  if (!mateconf_client_get_bool (conf, CONF_HTTP_PROXY_PREFIX "/use_http_proxy", NULL)) -    return; +	if (!mateconf_client_get_bool (conf, CONF_HTTP_PROXY_PREFIX "/use_http_proxy", NULL)) +		return; -  host = conf_get_string (conf, CONF_HTTP_PROXY_PREFIX "/host"); -  port = mateconf_client_get_int (conf, CONF_HTTP_PROXY_PREFIX "/port", NULL); -  if (host && port) -    { -      GString *buf = g_string_sized_new (64); -      g_string_append (buf, "http://"); - -      if (mateconf_client_get_bool (conf, CONF_HTTP_PROXY_PREFIX "/use_authentication", NULL)) +	host = conf_get_string (conf, CONF_HTTP_PROXY_PREFIX "/host"); +	port = mateconf_client_get_int (conf, CONF_HTTP_PROXY_PREFIX "/port", NULL); +	if (host && port)  	{ -	  char *user, *password; -	  user = conf_get_string (conf, CONF_HTTP_PROXY_PREFIX "/authentication_user"); -	  if (user) -	    { -	      g_string_append_uri_escaped (buf, user, NULL, TRUE); -	      password = conf_get_string (conf, CONF_HTTP_PROXY_PREFIX "/authentication_password"); -	      if (password) +		GString *buf = g_string_sized_new (64); +		g_string_append (buf, "http://"); + +		if (mateconf_client_get_bool (conf, CONF_HTTP_PROXY_PREFIX "/use_authentication", NULL))  		{ -		  g_string_append_c (buf, ':'); -		  g_string_append_uri_escaped (buf, password, NULL, TRUE); -		  g_free (password); +			char *user, *password; +			user = conf_get_string (conf, CONF_HTTP_PROXY_PREFIX "/authentication_user"); +			if (user) +			{ +				g_string_append_uri_escaped (buf, user, NULL, TRUE); +				password = conf_get_string (conf, CONF_HTTP_PROXY_PREFIX "/authentication_password"); +				if (password) +				{ +					g_string_append_c (buf, ':'); +					g_string_append_uri_escaped (buf, password, NULL, TRUE); +					g_free (password); +				} +				g_free (user); +				g_string_append_c (buf, '@'); +			}  		} -	      g_free (user); -	      g_string_append_c (buf, '@'); -	    } +		g_string_append_printf (buf, "%s:%d/", host, port); +		set_proxy_env (env_table, "http_proxy", g_string_free (buf, FALSE));  	} -      g_string_append_printf (buf, "%s:%d/", host, port); -      set_proxy_env (env_table, "http_proxy", g_string_free (buf, FALSE)); -    } -  g_free (host); - -  ignore = mateconf_client_get_list (conf, CONF_HTTP_PROXY_PREFIX "/ignore_hosts", MATECONF_VALUE_STRING, NULL); -  if (ignore) -    { -      GString *buf = g_string_sized_new (64); -      while (ignore != NULL) +	g_free (host); + +	ignore = mateconf_client_get_list (conf, CONF_HTTP_PROXY_PREFIX "/ignore_hosts", MATECONF_VALUE_STRING, NULL); +	if (ignore)  	{ -	  GSList *old; +		GString *buf = g_string_sized_new (64); +		while (ignore != NULL) +		{ +			GSList *old; -	  if (buf->len) -	    g_string_append_c (buf, ','); -	  g_string_append (buf, ignore->data); +			if (buf->len) +				g_string_append_c (buf, ','); +			g_string_append (buf, ignore->data); -	  old = ignore; -	  ignore = g_slist_next (ignore); -	  g_free (old->data); -	  g_slist_free_1 (old); +			old = ignore; +			ignore = g_slist_next (ignore); +			g_free (old->data); +			g_slist_free_1 (old); +		} +		set_proxy_env (env_table, "no_proxy", g_string_free (buf, FALSE));  	} -      set_proxy_env (env_table, "no_proxy", g_string_free (buf, FALSE)); -    }  }  static void  setup_https_proxy_env (GHashTable *env_table,                         MateConfClient *conf)  { -  gchar *host; -  gint port; - -  host = conf_get_string (conf, CONF_PROXY_PREFIX "/secure_host"); -  port = mateconf_client_get_int (conf, CONF_PROXY_PREFIX "/secure_port", NULL); -  if (host && port) -    { -      char *proxy; -      /* Even though it's https, the proxy scheme is 'http'. See bug #624440. */ -      proxy = g_strdup_printf ("http://%s:%d/", host, port); -      set_proxy_env (env_table, "https_proxy", proxy); -    } -  g_free (host); +	gchar *host; +	gint port; + +	host = conf_get_string (conf, CONF_PROXY_PREFIX "/secure_host"); +	port = mateconf_client_get_int (conf, CONF_PROXY_PREFIX "/secure_port", NULL); +	if (host && port) +	{ +		char *proxy; +		/* Even though it's https, the proxy scheme is 'http'. See bug #624440. */ +		proxy = g_strdup_printf ("http://%s:%d/", host, port); +		set_proxy_env (env_table, "https_proxy", proxy); +	} +	g_free (host);  }  static void  setup_ftp_proxy_env (GHashTable *env_table,                       MateConfClient *conf)  { -  gchar *host; -  gint port; - -  host = conf_get_string (conf, CONF_PROXY_PREFIX "/ftp_host"); -  port = mateconf_client_get_int (conf, CONF_PROXY_PREFIX "/ftp_port", NULL); -  if (host && port) -    { -      char *proxy; -      /* Even though it's ftp, the proxy scheme is 'http'. See bug #624440. */ -      proxy = g_strdup_printf ("http://%s:%d/", host, port); -      set_proxy_env (env_table, "ftp_proxy", proxy); -    } -  g_free (host); +	gchar *host; +	gint port; + +	host = conf_get_string (conf, CONF_PROXY_PREFIX "/ftp_host"); +	port = mateconf_client_get_int (conf, CONF_PROXY_PREFIX "/ftp_port", NULL); +	if (host && port) +	{ +		char *proxy; +		/* Even though it's ftp, the proxy scheme is 'http'. See bug #624440. */ +		proxy = g_strdup_printf ("http://%s:%d/", host, port); +		set_proxy_env (env_table, "ftp_proxy", proxy); +	} +	g_free (host);  }  static void  setup_socks_proxy_env (GHashTable *env_table,                         MateConfClient *conf)  { -  gchar *host; -  gint port; - -  host = conf_get_string (conf, CONF_PROXY_PREFIX "/socks_host"); -  port = mateconf_client_get_int (conf, CONF_PROXY_PREFIX "/socks_port", NULL); -  if (host && port) -    { -      char *proxy; -      proxy = g_strdup_printf ("socks://%s:%d/", host, port); -      set_proxy_env (env_table, "all_proxy", proxy); -    } -  g_free (host); +	gchar *host; +	gint port; + +	host = conf_get_string (conf, CONF_PROXY_PREFIX "/socks_host"); +	port = mateconf_client_get_int (conf, CONF_PROXY_PREFIX "/socks_port", NULL); +	if (host && port) +	{ +		char *proxy; +		proxy = g_strdup_printf ("socks://%s:%d/", host, port); +		set_proxy_env (env_table, "all_proxy", proxy); +	} +	g_free (host);  }  static void  setup_autoconfig_proxy_env (GHashTable *env_table,                              MateConfClient *conf)  { -  /* XXX  Not sure what to do with this.  See bug #596688. -  gchar *url; - -  url = conf_get_string (conf, CONF_PROXY_PREFIX "/autoconfig_url"); -  if (url) -    { -      char *proxy; -      proxy = g_strdup_printf ("pac+%s", url); -      set_proxy_env (env_table, "http_proxy", proxy); -    } -  g_free (url); -  */ +	/* XXX  Not sure what to do with this.  See bug #596688. +	gchar *url; + +	url = conf_get_string (conf, CONF_PROXY_PREFIX "/autoconfig_url"); +	if (url) +	  { +	    char *proxy; +	    proxy = g_strdup_printf ("pac+%s", url); +	    set_proxy_env (env_table, "http_proxy", proxy); +	  } +	g_free (url); +	*/  }  /** @@ -723,295 +733,296 @@ setup_autoconfig_proxy_env (GHashTable *env_table,  void  terminal_util_add_proxy_env (GHashTable *env_table)  { -  char *proxymode; - -  MateConfClient *conf; -  conf = mateconf_client_get_default (); - -  /* If mode is not manual, nothing to set */ -  proxymode = conf_get_string (conf, CONF_PROXY_PREFIX "/mode"); -  if (proxymode && 0 == strcmp (proxymode, "manual")) -    { -      setup_http_proxy_env (env_table, conf); -      setup_https_proxy_env (env_table, conf); -      setup_ftp_proxy_env (env_table, conf); -      setup_socks_proxy_env (env_table, conf); -    } -  else if (proxymode && 0 == strcmp (proxymode, "auto")) -    { -      setup_autoconfig_proxy_env (env_table, conf); -    } - -  g_free (proxymode); -  g_object_unref (conf); +	char *proxymode; + +	MateConfClient *conf; +	conf = mateconf_client_get_default (); + +	/* If mode is not manual, nothing to set */ +	proxymode = conf_get_string (conf, CONF_PROXY_PREFIX "/mode"); +	if (proxymode && 0 == strcmp (proxymode, "manual")) +	{ +		setup_http_proxy_env (env_table, conf); +		setup_https_proxy_env (env_table, conf); +		setup_ftp_proxy_env (env_table, conf); +		setup_socks_proxy_env (env_table, conf); +	} +	else if (proxymode && 0 == strcmp (proxymode, "auto")) +	{ +		setup_autoconfig_proxy_env (env_table, conf); +	} + +	g_free (proxymode); +	g_object_unref (conf);  }  /* Bidirectional object/widget binding */ -typedef struct { -  GObject *object; -  const char *object_prop; -  GtkWidget *widget; -  gulong object_notify_id; -  gulong widget_notify_id; -  PropertyChangeFlags flags; +typedef struct +{ +	GObject *object; +	const char *object_prop; +	GtkWidget *widget; +	gulong object_notify_id; +	gulong widget_notify_id; +	PropertyChangeFlags flags;  } PropertyChange;  static void  property_change_free (PropertyChange *change)  { -  g_signal_handler_disconnect (change->object, change->object_notify_id); +	g_signal_handler_disconnect (change->object, change->object_notify_id); -  g_slice_free (PropertyChange, change); +	g_slice_free (PropertyChange, change);  }  static gboolean  transform_boolean (gboolean input,                     PropertyChangeFlags flags)  { -  if (flags & FLAG_INVERT_BOOL) -    input = !input; +	if (flags & FLAG_INVERT_BOOL) +		input = !input; -  return input; +	return input;  }  static void  object_change_notify_cb (PropertyChange *change)  { -  GObject *object = change->object; -  const char *object_prop = change->object_prop; -  GtkWidget *widget = change->widget; - -  g_signal_handler_block (widget, change->widget_notify_id); - -  if (GTK_IS_RADIO_BUTTON (widget)) -    { -      int ovalue, rvalue; - -      g_object_get (object, object_prop, &ovalue, NULL); -      rvalue = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "enum-value")); -      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), ovalue == rvalue); -    } -  else if (GTK_IS_TOGGLE_BUTTON (widget)) -    { -      gboolean enabled; - -      g_object_get (object, object_prop, &enabled, NULL); -      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), -                                    transform_boolean (enabled, change->flags)); -    } -  else if (GTK_IS_SPIN_BUTTON (widget)) -    { -      int value; - -      g_object_get (object, object_prop, &value, NULL); -      gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value); -    } -  else if (GTK_IS_ENTRY (widget)) -    { -      char *text; - -      g_object_get (object, object_prop, &text, NULL); -      gtk_entry_set_text (GTK_ENTRY (widget), text ? text : ""); -      g_free (text); -    } -  else if (GTK_IS_COMBO_BOX (widget)) -    { -      int value; - -      g_object_get (object, object_prop, &value, NULL); -      gtk_combo_box_set_active (GTK_COMBO_BOX (widget), value); -    } -  else if (GTK_IS_RANGE (widget)) -    { -      double value; - -      g_object_get (object, object_prop, &value, NULL); -      gtk_range_set_value (GTK_RANGE (widget), value); -    } -  else if (GTK_IS_COLOR_BUTTON (widget)) -    { -      GdkColor *color; -      GdkColor old_color; - -      g_object_get (object, object_prop, &color, NULL); -      gtk_color_button_get_color (GTK_COLOR_BUTTON (widget), &old_color); - -      if (color && !gdk_color_equal (color, &old_color)) -        gtk_color_button_set_color (GTK_COLOR_BUTTON (widget), color); -      if (color) -        gdk_color_free (color); -    } -  else if (GTK_IS_FONT_BUTTON (widget)) -    { -      PangoFontDescription *font_desc; -      char *font; - -      g_object_get (object, object_prop, &font_desc, NULL); -      if (!font_desc) -        goto out; - -      font = pango_font_description_to_string (font_desc); -      gtk_font_button_set_font_name (GTK_FONT_BUTTON (widget), font); -      g_free (font); -      pango_font_description_free (font_desc); -    } -  else if (GTK_IS_FILE_CHOOSER (widget)) -    { -      char *name = NULL, *filename = NULL; - -      g_object_get (object, object_prop, &name, NULL); -      if (name) -        filename = g_filename_from_utf8 (name, -1, NULL, NULL, NULL); - -      if (filename) -        gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (widget), filename); -      else -        gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (widget)); -      g_free (filename); -      g_free (name); -    } +	GObject *object = change->object; +	const char *object_prop = change->object_prop; +	GtkWidget *widget = change->widget; + +	g_signal_handler_block (widget, change->widget_notify_id); + +	if (GTK_IS_RADIO_BUTTON (widget)) +	{ +		int ovalue, rvalue; + +		g_object_get (object, object_prop, &ovalue, NULL); +		rvalue = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "enum-value")); +		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), ovalue == rvalue); +	} +	else if (GTK_IS_TOGGLE_BUTTON (widget)) +	{ +		gboolean enabled; + +		g_object_get (object, object_prop, &enabled, NULL); +		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), +		                              transform_boolean (enabled, change->flags)); +	} +	else if (GTK_IS_SPIN_BUTTON (widget)) +	{ +		int value; + +		g_object_get (object, object_prop, &value, NULL); +		gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value); +	} +	else if (GTK_IS_ENTRY (widget)) +	{ +		char *text; + +		g_object_get (object, object_prop, &text, NULL); +		gtk_entry_set_text (GTK_ENTRY (widget), text ? text : ""); +		g_free (text); +	} +	else if (GTK_IS_COMBO_BOX (widget)) +	{ +		int value; + +		g_object_get (object, object_prop, &value, NULL); +		gtk_combo_box_set_active (GTK_COMBO_BOX (widget), value); +	} +	else if (GTK_IS_RANGE (widget)) +	{ +		double value; + +		g_object_get (object, object_prop, &value, NULL); +		gtk_range_set_value (GTK_RANGE (widget), value); +	} +	else if (GTK_IS_COLOR_BUTTON (widget)) +	{ +		GdkColor *color; +		GdkColor old_color; + +		g_object_get (object, object_prop, &color, NULL); +		gtk_color_button_get_color (GTK_COLOR_BUTTON (widget), &old_color); + +		if (color && !gdk_color_equal (color, &old_color)) +			gtk_color_button_set_color (GTK_COLOR_BUTTON (widget), color); +		if (color) +			gdk_color_free (color); +	} +	else if (GTK_IS_FONT_BUTTON (widget)) +	{ +		PangoFontDescription *font_desc; +		char *font; + +		g_object_get (object, object_prop, &font_desc, NULL); +		if (!font_desc) +			goto out; + +		font = pango_font_description_to_string (font_desc); +		gtk_font_button_set_font_name (GTK_FONT_BUTTON (widget), font); +		g_free (font); +		pango_font_description_free (font_desc); +	} +	else if (GTK_IS_FILE_CHOOSER (widget)) +	{ +		char *name = NULL, *filename = NULL; + +		g_object_get (object, object_prop, &name, NULL); +		if (name) +			filename = g_filename_from_utf8 (name, -1, NULL, NULL, NULL); + +		if (filename) +			gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (widget), filename); +		else +			gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (widget)); +		g_free (filename); +		g_free (name); +	}  out: -  g_signal_handler_unblock (widget, change->widget_notify_id); +	g_signal_handler_unblock (widget, change->widget_notify_id);  }  static void  widget_change_notify_cb (PropertyChange *change)  { -  GObject *object = change->object; -  const char *object_prop = change->object_prop; -  GtkWidget *widget = change->widget; - -  g_signal_handler_block (change->object, change->object_notify_id); - -  if (GTK_IS_RADIO_BUTTON (widget)) -    { -      gboolean active; -      int value; - -      active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); -      if (!active) -        goto out; - -      value = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "enum-value")); -      g_object_set (object, object_prop, value, NULL); -    } -  else if (GTK_IS_TOGGLE_BUTTON (widget)) -    { -      gboolean enabled; - -      enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); -      g_object_set (object, object_prop, transform_boolean (enabled, change->flags), NULL); -    } -  else if (GTK_IS_SPIN_BUTTON (widget)) -    { -      int value; - -      value = (int) gtk_spin_button_get_value (GTK_SPIN_BUTTON (widget)); -      g_object_set (object, object_prop, value, NULL); -    } -  else if (GTK_IS_ENTRY (widget)) -    { -      const char *text; - -      text = gtk_entry_get_text (GTK_ENTRY (widget)); -      g_object_set (object, object_prop, text, NULL); -    } -  else if (GTK_IS_COMBO_BOX (widget)) -    { -      int value; - -      value = gtk_combo_box_get_active (GTK_COMBO_BOX (widget)); -      g_object_set (object, object_prop, value, NULL); -    } -  else if (GTK_IS_COLOR_BUTTON (widget)) -    { -      GdkColor color; - -      gtk_color_button_get_color (GTK_COLOR_BUTTON (widget), &color); -      g_object_set (object, object_prop, &color, NULL); -    } -  else if (GTK_IS_FONT_BUTTON (widget)) -    { -      PangoFontDescription *font_desc; -      const char *font; - -      font = gtk_font_button_get_font_name (GTK_FONT_BUTTON (widget)); -      font_desc = pango_font_description_from_string (font); -      g_object_set (object, object_prop, font_desc, NULL); -      pango_font_description_free (font_desc); -    } -  else if (GTK_IS_RANGE (widget)) -    { -      double value; - -      value = gtk_range_get_value (GTK_RANGE (widget)); -      g_object_set (object, object_prop, value, NULL); -    } -  else if (GTK_IS_FILE_CHOOSER (widget)) -    { -      char *filename, *name = NULL; - -      filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget)); -      if (filename) -        name = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL); - -      g_object_set (object, object_prop, name, NULL); -      g_free (filename); -      g_free (name); -    } +	GObject *object = change->object; +	const char *object_prop = change->object_prop; +	GtkWidget *widget = change->widget; + +	g_signal_handler_block (change->object, change->object_notify_id); + +	if (GTK_IS_RADIO_BUTTON (widget)) +	{ +		gboolean active; +		int value; + +		active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); +		if (!active) +			goto out; + +		value = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "enum-value")); +		g_object_set (object, object_prop, value, NULL); +	} +	else if (GTK_IS_TOGGLE_BUTTON (widget)) +	{ +		gboolean enabled; + +		enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); +		g_object_set (object, object_prop, transform_boolean (enabled, change->flags), NULL); +	} +	else if (GTK_IS_SPIN_BUTTON (widget)) +	{ +		int value; + +		value = (int) gtk_spin_button_get_value (GTK_SPIN_BUTTON (widget)); +		g_object_set (object, object_prop, value, NULL); +	} +	else if (GTK_IS_ENTRY (widget)) +	{ +		const char *text; + +		text = gtk_entry_get_text (GTK_ENTRY (widget)); +		g_object_set (object, object_prop, text, NULL); +	} +	else if (GTK_IS_COMBO_BOX (widget)) +	{ +		int value; + +		value = gtk_combo_box_get_active (GTK_COMBO_BOX (widget)); +		g_object_set (object, object_prop, value, NULL); +	} +	else if (GTK_IS_COLOR_BUTTON (widget)) +	{ +		GdkColor color; + +		gtk_color_button_get_color (GTK_COLOR_BUTTON (widget), &color); +		g_object_set (object, object_prop, &color, NULL); +	} +	else if (GTK_IS_FONT_BUTTON (widget)) +	{ +		PangoFontDescription *font_desc; +		const char *font; + +		font = gtk_font_button_get_font_name (GTK_FONT_BUTTON (widget)); +		font_desc = pango_font_description_from_string (font); +		g_object_set (object, object_prop, font_desc, NULL); +		pango_font_description_free (font_desc); +	} +	else if (GTK_IS_RANGE (widget)) +	{ +		double value; + +		value = gtk_range_get_value (GTK_RANGE (widget)); +		g_object_set (object, object_prop, value, NULL); +	} +	else if (GTK_IS_FILE_CHOOSER (widget)) +	{ +		char *filename, *name = NULL; + +		filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget)); +		if (filename) +			name = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL); + +		g_object_set (object, object_prop, name, NULL); +		g_free (filename); +		g_free (name); +	}  out: -  g_signal_handler_unblock (change->object, change->object_notify_id); +	g_signal_handler_unblock (change->object, change->object_notify_id);  }  void  terminal_util_bind_object_property_to_widget (GObject *object, -                                              const char *object_prop, -                                              GtkWidget *widget, -                                              PropertyChangeFlags flags) +        const char *object_prop, +        GtkWidget *widget, +        PropertyChangeFlags flags)  { -  PropertyChange *change; -  const char *signal_name; -  char notify_signal_name[64]; - -  change = g_slice_new0 (PropertyChange); - -  change->widget = widget; -  g_assert (g_object_get_data (G_OBJECT (widget), "GT:PCD") == NULL); -  g_object_set_data_full (G_OBJECT (widget), "GT:PCD", change, (GDestroyNotify) property_change_free); - -  if (GTK_IS_TOGGLE_BUTTON (widget)) -    signal_name = "notify::active"; -  else if (GTK_IS_SPIN_BUTTON (widget)) -    signal_name = "notify::value"; -  else if (GTK_IS_ENTRY (widget)) -    signal_name = "notify::text"; -  else if (GTK_IS_COMBO_BOX (widget)) -    signal_name = "notify::active"; -  else if (GTK_IS_COLOR_BUTTON (widget)) -    signal_name = "notify::color"; -  else if (GTK_IS_FONT_BUTTON (widget)) -    signal_name = "notify::font-name"; -  else if (GTK_IS_RANGE (widget)) -    signal_name = "value-changed"; -  else if (GTK_IS_FILE_CHOOSER_BUTTON (widget)) -    signal_name = "file-set"; -  else if (GTK_IS_FILE_CHOOSER (widget)) -    signal_name = "selection-changed"; -  else -    g_assert_not_reached (); - -  change->widget_notify_id = g_signal_connect_swapped (widget, signal_name, G_CALLBACK (widget_change_notify_cb), change); - -  change->object = object; -  change->flags = flags; -  change->object_prop = object_prop; - -  g_snprintf (notify_signal_name, sizeof (notify_signal_name), "notify::%s", object_prop); -  object_change_notify_cb (change); -  change->object_notify_id = g_signal_connect_swapped (object, notify_signal_name, G_CALLBACK (object_change_notify_cb), change); +	PropertyChange *change; +	const char *signal_name; +	char notify_signal_name[64]; + +	change = g_slice_new0 (PropertyChange); + +	change->widget = widget; +	g_assert (g_object_get_data (G_OBJECT (widget), "GT:PCD") == NULL); +	g_object_set_data_full (G_OBJECT (widget), "GT:PCD", change, (GDestroyNotify) property_change_free); + +	if (GTK_IS_TOGGLE_BUTTON (widget)) +		signal_name = "notify::active"; +	else if (GTK_IS_SPIN_BUTTON (widget)) +		signal_name = "notify::value"; +	else if (GTK_IS_ENTRY (widget)) +		signal_name = "notify::text"; +	else if (GTK_IS_COMBO_BOX (widget)) +		signal_name = "notify::active"; +	else if (GTK_IS_COLOR_BUTTON (widget)) +		signal_name = "notify::color"; +	else if (GTK_IS_FONT_BUTTON (widget)) +		signal_name = "notify::font-name"; +	else if (GTK_IS_RANGE (widget)) +		signal_name = "value-changed"; +	else if (GTK_IS_FILE_CHOOSER_BUTTON (widget)) +		signal_name = "file-set"; +	else if (GTK_IS_FILE_CHOOSER (widget)) +		signal_name = "selection-changed"; +	else +		g_assert_not_reached (); + +	change->widget_notify_id = g_signal_connect_swapped (widget, signal_name, G_CALLBACK (widget_change_notify_cb), change); + +	change->object = object; +	change->flags = flags; +	change->object_prop = object_prop; + +	g_snprintf (notify_signal_name, sizeof (notify_signal_name), "notify::%s", object_prop); +	object_change_notify_cb (change); +	change->object_notify_id = g_signal_connect_swapped (object, notify_signal_name, G_CALLBACK (object_change_notify_cb), change);  }  #ifdef GDK_WINDOWING_X11 @@ -1022,106 +1033,106 @@ terminal_util_bind_object_property_to_widget (GObject *object,   */  gboolean  terminal_util_x11_get_net_wm_desktop (GdkWindow *window, -				      guint32   *desktop) +                                      guint32   *desktop)  { -  GdkDisplay *display = gdk_drawable_get_display (window); -  Atom type; -  int format; -  guchar *data; -  gulong n_items, bytes_after; -  gboolean result = FALSE; - -  if (XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), -			  GDK_DRAWABLE_XID (window), -			  gdk_x11_get_xatom_by_name_for_display (display, -								 "_NET_WM_DESKTOP"), -			  0, G_MAXLONG, False, AnyPropertyType, -			  &type, &format, &n_items, &bytes_after, &data) == Success && -      type != None) -    { -      if (type == XA_CARDINAL && format == 32 && n_items == 1) +	GdkDisplay *display = gdk_drawable_get_display (window); +	Atom type; +	int format; +	guchar *data; +	gulong n_items, bytes_after; +	gboolean result = FALSE; + +	if (XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), +	                        GDK_DRAWABLE_XID (window), +	                        gdk_x11_get_xatom_by_name_for_display (display, +	                                "_NET_WM_DESKTOP"), +	                        0, G_MAXLONG, False, AnyPropertyType, +	                        &type, &format, &n_items, &bytes_after, &data) == Success && +	        type != None)  	{ -	  *desktop = *(gulong *)data; -	  result = TRUE; -	} +		if (type == XA_CARDINAL && format == 32 && n_items == 1) +		{ +			*desktop = *(gulong *)data; +			result = TRUE; +		} -      XFree (data); -    } +		XFree (data); +	} -  return result; +	return result;  }  void  terminal_util_x11_set_net_wm_desktop (GdkWindow *window, -				      guint32    desktop) +                                      guint32    desktop)  { -  /* We can't change the current desktop before mapping our window, -   * because GDK has the annoying habit of clearing _NET_WM_DESKTOP -   * before mapping a GdkWindow, So we we have to do it after instead. -   * -   * However, doing it after is different whether or not we have a -   * window manager (if we don't have a window manager, we have to -   * set the _NET_WM_DESKTOP property so that it picks it up when -   * it starts) -   * -   * http://bugzilla.mate.org/show_bug.cgi?id=586311 asks for GTK+ -   * to just handle everything behind the scenes including the desktop. -   */ -  GdkScreen *screen = gdk_drawable_get_screen (window); -  GdkDisplay *display = gdk_screen_get_display (screen); -  Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); -  char *wm_selection_name; -  Atom wm_selection; -  gboolean have_wm; - -  wm_selection_name = g_strdup_printf ("WM_S%d", gdk_screen_get_number (screen)); -  wm_selection = gdk_x11_get_xatom_by_name_for_display (display, wm_selection_name); -  g_free(wm_selection_name); - -  XGrabServer (xdisplay); - -  have_wm = XGetSelectionOwner (xdisplay, wm_selection) != None; - -  if (have_wm) -    { -      /* code borrowed from GDK -       */ -      XClientMessageEvent xclient; - -      memset (&xclient, 0, sizeof (xclient)); -      xclient.type = ClientMessage; -      xclient.serial = 0; -      xclient.send_event = True; -      xclient.window = GDK_WINDOW_XWINDOW (window); -      xclient.message_type = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_DESKTOP"); -      xclient.format = 32; - -      xclient.data.l[0] = desktop; -      xclient.data.l[1] = 0; -      xclient.data.l[2] = 0; -      xclient.data.l[3] = 0; -      xclient.data.l[4] = 0; - -      XSendEvent (xdisplay, -		  GDK_WINDOW_XWINDOW (gdk_screen_get_root_window (screen)), -		  False, -		  SubstructureRedirectMask | SubstructureNotifyMask, -		  (XEvent *)&xclient); -    } -  else -    { -      gulong long_desktop = desktop; - -      XChangeProperty (xdisplay, -		       GDK_DRAWABLE_XID (window), -		       gdk_x11_get_xatom_by_name_for_display (display, -							      "_NET_WM_DESKTOP"), -		       XA_CARDINAL, 32, PropModeReplace, -		       (guchar *)&long_desktop, 1); -    } - -  XUngrabServer (xdisplay); -  XFlush (xdisplay); +	/* We can't change the current desktop before mapping our window, +	 * because GDK has the annoying habit of clearing _NET_WM_DESKTOP +	 * before mapping a GdkWindow, So we we have to do it after instead. +	 * +	 * However, doing it after is different whether or not we have a +	 * window manager (if we don't have a window manager, we have to +	 * set the _NET_WM_DESKTOP property so that it picks it up when +	 * it starts) +	 * +	 * http://bugzilla.mate.org/show_bug.cgi?id=586311 asks for GTK+ +	 * to just handle everything behind the scenes including the desktop. +	 */ +	GdkScreen *screen = gdk_drawable_get_screen (window); +	GdkDisplay *display = gdk_screen_get_display (screen); +	Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); +	char *wm_selection_name; +	Atom wm_selection; +	gboolean have_wm; + +	wm_selection_name = g_strdup_printf ("WM_S%d", gdk_screen_get_number (screen)); +	wm_selection = gdk_x11_get_xatom_by_name_for_display (display, wm_selection_name); +	g_free(wm_selection_name); + +	XGrabServer (xdisplay); + +	have_wm = XGetSelectionOwner (xdisplay, wm_selection) != None; + +	if (have_wm) +	{ +		/* code borrowed from GDK +		 */ +		XClientMessageEvent xclient; + +		memset (&xclient, 0, sizeof (xclient)); +		xclient.type = ClientMessage; +		xclient.serial = 0; +		xclient.send_event = True; +		xclient.window = GDK_WINDOW_XWINDOW (window); +		xclient.message_type = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_DESKTOP"); +		xclient.format = 32; + +		xclient.data.l[0] = desktop; +		xclient.data.l[1] = 0; +		xclient.data.l[2] = 0; +		xclient.data.l[3] = 0; +		xclient.data.l[4] = 0; + +		XSendEvent (xdisplay, +		            GDK_WINDOW_XWINDOW (gdk_screen_get_root_window (screen)), +		            False, +		            SubstructureRedirectMask | SubstructureNotifyMask, +		            (XEvent *)&xclient); +	} +	else +	{ +		gulong long_desktop = desktop; + +		XChangeProperty (xdisplay, +		                 GDK_DRAWABLE_XID (window), +		                 gdk_x11_get_xatom_by_name_for_display (display, +		                         "_NET_WM_DESKTOP"), +		                 XA_CARDINAL, 32, PropModeReplace, +		                 (guchar *)&long_desktop, 1); +	} + +	XUngrabServer (xdisplay); +	XFlush (xdisplay);  }  /* Asks the window manager to turn off the "demands attention" state on the window. @@ -1133,29 +1144,29 @@ terminal_util_x11_set_net_wm_desktop (GdkWindow *window,  void  terminal_util_x11_clear_demands_attention (GdkWindow *window)  { -  GdkScreen *screen = gdk_drawable_get_screen (window); -  GdkDisplay *display = gdk_screen_get_display (screen); -  XClientMessageEvent xclient; - -  memset (&xclient, 0, sizeof (xclient)); -  xclient.type = ClientMessage; -  xclient.serial = 0; -  xclient.send_event = True; -  xclient.window = GDK_WINDOW_XWINDOW (window); -  xclient.message_type = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_STATE"); -  xclient.format = 32; - -  xclient.data.l[0] = 0; /* _NET_WM_STATE_REMOVE */ -  xclient.data.l[1] = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_STATE_DEMANDS_ATTENTION"); -  xclient.data.l[2] = 0; -  xclient.data.l[3] = 0; -  xclient.data.l[4] = 0; - -  XSendEvent (GDK_DISPLAY_XDISPLAY (display), -	      GDK_WINDOW_XWINDOW (gdk_screen_get_root_window (screen)), -	      False, -	      SubstructureRedirectMask | SubstructureNotifyMask, -	      (XEvent *)&xclient); +	GdkScreen *screen = gdk_drawable_get_screen (window); +	GdkDisplay *display = gdk_screen_get_display (screen); +	XClientMessageEvent xclient; + +	memset (&xclient, 0, sizeof (xclient)); +	xclient.type = ClientMessage; +	xclient.serial = 0; +	xclient.send_event = True; +	xclient.window = GDK_WINDOW_XWINDOW (window); +	xclient.message_type = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_STATE"); +	xclient.format = 32; + +	xclient.data.l[0] = 0; /* _NET_WM_STATE_REMOVE */ +	xclient.data.l[1] = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_STATE_DEMANDS_ATTENTION"); +	xclient.data.l[2] = 0; +	xclient.data.l[3] = 0; +	xclient.data.l[4] = 0; + +	XSendEvent (GDK_DISPLAY_XDISPLAY (display), +	            GDK_WINDOW_XWINDOW (gdk_screen_get_root_window (screen)), +	            False, +	            SubstructureRedirectMask | SubstructureNotifyMask, +	            (XEvent *)&xclient);  }  /* Check if a GdkWindow is minimized. This is a workaround for a @@ -1170,44 +1181,44 @@ terminal_util_x11_clear_demands_attention (GdkWindow *window)  gboolean  terminal_util_x11_window_is_minimized (GdkWindow *window)  { -  GdkDisplay *display = gdk_drawable_get_display (window); - -  Atom type; -  gint format; -  gulong nitems; -  gulong bytes_after; -  guchar *data; -  Atom *atoms = NULL; -  gulong i; - -  gboolean minimized = FALSE; - -  type = None; -  gdk_error_trap_push (); -  XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window), -                      gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_STATE"), -                      0, G_MAXLONG, False, XA_ATOM, &type, &format, &nitems, -                      &bytes_after, &data); -  gdk_error_trap_pop (); - -  if (type != None) -    { -      Atom hidden_atom = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_STATE_HIDDEN"); +	GdkDisplay *display = gdk_drawable_get_display (window); + +	Atom type; +	gint format; +	gulong nitems; +	gulong bytes_after; +	guchar *data; +	Atom *atoms = NULL; +	gulong i; + +	gboolean minimized = FALSE; + +	type = None; +	gdk_error_trap_push (); +	XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window), +	                    gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_STATE"), +	                    0, G_MAXLONG, False, XA_ATOM, &type, &format, &nitems, +	                    &bytes_after, &data); +	gdk_error_trap_pop (); + +	if (type != None) +	{ +		Atom hidden_atom = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_STATE_HIDDEN"); -      atoms = (Atom *)data; +		atoms = (Atom *)data; -      for (i = 0; i < nitems; i++) -        { -          if (atoms[i] == hidden_atom) -            minimized = TRUE; +		for (i = 0; i < nitems; i++) +		{ +			if (atoms[i] == hidden_atom) +				minimized = TRUE; -          ++i; -        } +			++i; +		} -      XFree (atoms); -    } +		XFree (atoms); +	} -  return minimized; +	return minimized;  }  #endif /* GDK_WINDOWING_X11 */ diff --git a/src/terminal-util.h b/src/terminal-util.h index 524d41c..00ed8a4 100644 --- a/src/terminal-util.h +++ b/src/terminal-util.h @@ -33,18 +33,18 @@ G_BEGIN_DECLS  void terminal_util_set_unique_role (GtkWindow *window, const char *prefix); -void terminal_util_show_error_dialog (GtkWindow *transient_parent,  -                                      GtkWidget **weap_ptr,  +void terminal_util_show_error_dialog (GtkWindow *transient_parent, +                                      GtkWidget **weap_ptr,                                        GError *error,                                        const char *message_format, ...) G_GNUC_PRINTF(4, 5);  void terminal_util_show_help (const char *topic, GtkWindow  *transient_parent);  void terminal_util_set_labelled_by          (GtkWidget  *widget, -                                             GtkLabel   *label); +        GtkLabel   *label);  void terminal_util_set_atk_name_description (GtkWidget  *widget, -                                             const char *name, -                                             const char *desc); +        const char *name, +        const char *desc);  void terminal_util_open_url (GtkWidget *parent,                               const char *orig_url, @@ -52,7 +52,7 @@ void terminal_util_open_url (GtkWidget *parent,                               guint32 user_time);  char *terminal_util_resolve_relative_path (const char *path, -                                           const char *relative_path); +        const char *relative_path);  void terminal_util_transform_uris_to_quoted_fuse_paths (char **uris); @@ -62,46 +62,47 @@ char *terminal_util_concat_uris (char **uris,  char *terminal_util_get_licence_text (void);  gboolean terminal_util_load_builder_file (const char *filename, -                                          const char *object_name, -                                          ...); +        const char *object_name, +        ...);  gboolean terminal_util_dialog_response_on_delete (GtkWindow *widget);  void terminal_util_key_file_set_string_escape    (GKeyFile *key_file, -                                                  const char *group, -                                                  const char *key, -                                                  const char *string); +        const char *group, +        const char *key, +        const char *string);  char *terminal_util_key_file_get_string_unescape (GKeyFile *key_file, -                                                  const char *group, -                                                  const char *key, -                                                  GError **error); +        const char *group, +        const char *key, +        GError **error);  void terminal_util_key_file_set_argv      (GKeyFile *key_file, -                                           const char *group, -                                           const char *key, -                                           int argc, -                                           char **argv); +        const char *group, +        const char *key, +        int argc, +        char **argv);  char **terminal_util_key_file_get_argv    (GKeyFile *key_file, -                                           const char *group, -                                           const char *key, -                                           int *argc, -                                           GError **error); +        const char *group, +        const char *key, +        int *argc, +        GError **error);  void terminal_util_add_proxy_env (GHashTable *env_table); -typedef enum { -  FLAG_INVERT_BOOL  = 1 << 0, +typedef enum +{ +    FLAG_INVERT_BOOL  = 1 << 0,  } PropertyChangeFlags;  void terminal_util_bind_object_property_to_widget (GObject *object, -                                                   const char *object_prop, -                                                   GtkWidget *widget, -                                                   PropertyChangeFlags flags); +        const char *object_prop, +        GtkWidget *widget, +        PropertyChangeFlags flags);  gboolean terminal_util_x11_get_net_wm_desktop (GdkWindow *window, -					       guint32   *desktop); +        guint32   *desktop);  void     terminal_util_x11_set_net_wm_desktop (GdkWindow *window, -					       guint32    desktop); +        guint32    desktop);  void terminal_util_x11_clear_demands_attention (GdkWindow *window); diff --git a/src/terminal-window.c b/src/terminal-window.c index 234d209..460caed 100644 --- a/src/terminal-window.c +++ b/src/terminal-window.c @@ -45,50 +45,50 @@  struct _TerminalWindowPrivate  { -  GtkActionGroup *action_group; -  GtkUIManager *ui_manager; -  guint ui_id; +	GtkActionGroup *action_group; +	GtkUIManager *ui_manager; +	guint ui_id; -  GtkActionGroup *profiles_action_group; -  guint profiles_ui_id; +	GtkActionGroup *profiles_action_group; +	guint profiles_ui_id; -  GtkActionGroup *encodings_action_group; -  guint encodings_ui_id; +	GtkActionGroup *encodings_action_group; +	guint encodings_ui_id; -  TerminalTabsMenu *tabs_menu; +	TerminalTabsMenu *tabs_menu; -  TerminalScreenPopupInfo *popup_info; -  guint remove_popup_info_idle; +	TerminalScreenPopupInfo *popup_info; +	guint remove_popup_info_idle; -  GtkActionGroup *new_terminal_action_group; -  guint new_terminal_ui_id; +	GtkActionGroup *new_terminal_action_group; +	guint new_terminal_ui_id; -  GtkWidget *menubar; -  GtkWidget *notebook; -  TerminalScreen *active_screen; -  int old_char_width; -  int old_char_height; -  void *old_geometry_widget; /* only used for pointer value as it may be freed */ +	GtkWidget *menubar; +	GtkWidget *notebook; +	TerminalScreen *active_screen; +	int old_char_width; +	int old_char_height; +	void *old_geometry_widget; /* only used for pointer value as it may be freed */ -  GtkWidget *confirm_close_dialog; -  GtkWidget *search_find_dialog; +	GtkWidget *confirm_close_dialog; +	GtkWidget *search_find_dialog; -  guint menubar_visible : 1; -  guint use_default_menubar_visibility : 1; +	guint menubar_visible : 1; +	guint use_default_menubar_visibility : 1; -  /* Compositing manager integration */ -  guint have_argb_visual : 1; +	/* Compositing manager integration */ +	guint have_argb_visual : 1; -  /* Used to clear stray "demands attention" flashing on our window when we -   * unmap and map it to switch to an ARGB visual. -   */ -  guint clear_demands_attention : 1; +	/* Used to clear stray "demands attention" flashing on our window when we +	 * unmap and map it to switch to an ARGB visual. +	 */ +	guint clear_demands_attention : 1; -  guint disposed : 1; -  guint present_on_insert : 1; +	guint disposed : 1; +	guint present_on_insert : 1; -  /* Workaround until gtk+ bug #535557 is fixed */ -  guint icon_title_set : 1; +	/* Workaround until gtk+ bug #535557 is fixed */ +	guint icon_title_set : 1;  };  #define PROFILE_DATA_KEY "GT::Profile" @@ -126,107 +126,107 @@ struct _TerminalWindowPrivate  static void terminal_window_dispose     (GObject             *object);  static void terminal_window_finalize    (GObject             *object);  static gboolean terminal_window_state_event (GtkWidget            *widget, -                                             GdkEventWindowState  *event); +        GdkEventWindowState  *event);  static gboolean terminal_window_delete_event (GtkWidget *widget, -                                              GdkEvent *event, -                                              gpointer data); +        GdkEvent *event, +        gpointer data);  static gboolean notebook_button_press_cb     (GtkWidget *notebook, -                                              GdkEventButton *event, -                                              TerminalWindow *window); +        GdkEventButton *event, +        TerminalWindow *window);  static gboolean notebook_popup_menu_cb       (GtkWidget *notebook, -                                              TerminalWindow *window); +        TerminalWindow *window);  static void notebook_page_selected_callback  (GtkWidget       *notebook,  #if GTK_CHECK_VERSION (2, 90, 6) -                                              GtkWidget       *page, +        GtkWidget       *page,  #else -                                              gpointer         page, +        gpointer         page,  #endif -                                              guint            page_num, -                                              TerminalWindow  *window); +        guint            page_num, +        TerminalWindow  *window);  static void notebook_page_added_callback     (GtkWidget       *notebook, -                                              GtkWidget       *container, -                                              guint            page_num, -                                              TerminalWindow  *window); +        GtkWidget       *container, +        guint            page_num, +        TerminalWindow  *window);  static void notebook_page_removed_callback   (GtkWidget       *notebook, -                                              GtkWidget       *container, -                                              guint            page_num, -                                              TerminalWindow  *window); +        GtkWidget       *container, +        guint            page_num, +        TerminalWindow  *window);  /* Menu action callbacks */  static void file_new_window_callback          (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void file_new_tab_callback             (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void file_new_profile_callback         (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void file_close_window_callback        (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void file_save_contents_callback       (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void file_close_tab_callback           (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void edit_copy_callback                (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void edit_paste_callback               (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void edit_select_all_callback          (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void edit_keybindings_callback         (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void edit_profiles_callback            (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void edit_current_profile_callback     (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void view_menubar_toggled_callback     (GtkToggleAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void view_fullscreen_toggled_callback  (GtkToggleAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void view_zoom_in_callback             (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void view_zoom_out_callback            (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void view_zoom_normal_callback         (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void search_find_callback              (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void search_find_next_callback         (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void search_find_prev_callback         (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void search_clear_highlight_callback   (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void terminal_set_title_callback       (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void terminal_add_encoding_callback    (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void terminal_reset_callback           (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void terminal_reset_clear_callback     (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void tabs_next_or_previous_tab_cb      (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void tabs_move_left_callback           (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void tabs_move_right_callback          (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void tabs_detach_tab_callback          (GtkAction *action, -                                               TerminalWindow *window); +        TerminalWindow *window);  static void help_contents_callback        (GtkAction *action, -                                           TerminalWindow *window); +        TerminalWindow *window);  static void help_about_callback           (GtkAction *action, -                                           TerminalWindow *window); +        TerminalWindow *window);  static gboolean find_larger_zoom_factor  (double  current, -                                          double *found); +        double *found);  static gboolean find_smaller_zoom_factor (double  current, -                                          double *found); +        double *found);  static void terminal_window_show (GtkWidget *widget);  static gboolean confirm_close_window_or_tab (TerminalWindow *window, -                                             TerminalScreen *screen); +        TerminalScreen *screen);  static void  profile_set_callback (TerminalScreen *screen, @@ -246,53 +246,53 @@ app_setting_notify_cb (TerminalApp *app,                         GParamSpec *pspec,                         GdkScreen *screen)  { -  GtkSettings *settings; -  const char *prop_name; - -  if (pspec) -    prop_name = pspec->name; -  else -    prop_name = NULL; - -  settings = gtk_settings_get_for_screen (screen); - -  if (!prop_name || prop_name == I_(TERMINAL_APP_ENABLE_MNEMONICS)) -    { -      gboolean enable_mnemonics; - -      g_object_get (app, TERMINAL_APP_ENABLE_MNEMONICS, &enable_mnemonics, NULL); -      g_object_set (settings, "gtk-enable-mnemonics", enable_mnemonics, NULL); -    } - -  if (!prop_name || prop_name == I_(TERMINAL_APP_ENABLE_MENU_BAR_ACCEL)) -    { -      /* const */ char *saved_menubar_accel; -      gboolean enable_menubar_accel; - -      /* FIXME: Once gtk+ bug 507398 is fixed, use that to reset the property instead */ -      /* Now this is a bad hack on so many levels. */ -      saved_menubar_accel = g_object_get_data (G_OBJECT (settings), "GT::gtk-menu-bar-accel"); -      if (!saved_menubar_accel) -        { -          g_object_get (settings, "gtk-menu-bar-accel", &saved_menubar_accel, NULL); -          g_object_set_data_full (G_OBJECT (settings), "GT::gtk-menu-bar-accel", -                                  saved_menubar_accel, (GDestroyNotify) g_free); -        } - -      g_object_get (app, TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, &enable_menubar_accel, NULL); -      if (enable_menubar_accel) -        g_object_set (settings, "gtk-menu-bar-accel", saved_menubar_accel, NULL); -      else -        g_object_set (settings, "gtk-menu-bar-accel", NULL, NULL); -    } +	GtkSettings *settings; +	const char *prop_name; + +	if (pspec) +		prop_name = pspec->name; +	else +		prop_name = NULL; + +	settings = gtk_settings_get_for_screen (screen); + +	if (!prop_name || prop_name == I_(TERMINAL_APP_ENABLE_MNEMONICS)) +	{ +		gboolean enable_mnemonics; + +		g_object_get (app, TERMINAL_APP_ENABLE_MNEMONICS, &enable_mnemonics, NULL); +		g_object_set (settings, "gtk-enable-mnemonics", enable_mnemonics, NULL); +	} + +	if (!prop_name || prop_name == I_(TERMINAL_APP_ENABLE_MENU_BAR_ACCEL)) +	{ +		/* const */ char *saved_menubar_accel; +		gboolean enable_menubar_accel; + +		/* FIXME: Once gtk+ bug 507398 is fixed, use that to reset the property instead */ +		/* Now this is a bad hack on so many levels. */ +		saved_menubar_accel = g_object_get_data (G_OBJECT (settings), "GT::gtk-menu-bar-accel"); +		if (!saved_menubar_accel) +		{ +			g_object_get (settings, "gtk-menu-bar-accel", &saved_menubar_accel, NULL); +			g_object_set_data_full (G_OBJECT (settings), "GT::gtk-menu-bar-accel", +			                        saved_menubar_accel, (GDestroyNotify) g_free); +		} + +		g_object_get (app, TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, &enable_menubar_accel, NULL); +		if (enable_menubar_accel) +			g_object_set (settings, "gtk-menu-bar-accel", saved_menubar_accel, NULL); +		else +			g_object_set (settings, "gtk-menu-bar-accel", NULL, NULL); +	}  }  static void  app_setting_notify_destroy_cb (GdkScreen *screen)  { -  g_signal_handlers_disconnect_by_func (terminal_app_get (), -                                        G_CALLBACK (app_setting_notify_cb), -                                        screen); +	g_signal_handlers_disconnect_by_func (terminal_app_get (), +	                                      G_CALLBACK (app_setting_notify_cb), +	                                      screen);  }  /* utility functions */ @@ -300,68 +300,68 @@ app_setting_notify_destroy_cb (GdkScreen *screen)  static char *  escape_underscores (const char *name)  { -  GString *escaped_name; +	GString *escaped_name; -  g_assert (name != NULL); +	g_assert (name != NULL); -  /* Who'd use more that 4 underscores in a profile name... */ -  escaped_name = g_string_sized_new (strlen (name) + 4 + 1); +	/* Who'd use more that 4 underscores in a profile name... */ +	escaped_name = g_string_sized_new (strlen (name) + 4 + 1); -  while (*name) -    { -      if (*name == '_') -        g_string_append (escaped_name, "__"); -      else -        g_string_append_c (escaped_name, *name); -      name++; -    } +	while (*name) +	{ +		if (*name == '_') +			g_string_append (escaped_name, "__"); +		else +			g_string_append_c (escaped_name, *name); +		name++; +	} -  return g_string_free (escaped_name, FALSE); +	return g_string_free (escaped_name, FALSE);  }  static int  find_tab_num_at_pos (GtkNotebook *notebook, -                     int screen_x,  +                     int screen_x,                       int screen_y)  { -  GtkPositionType tab_pos; -  int page_num = 0; -  GtkNotebook *nb = GTK_NOTEBOOK (notebook); -  GtkWidget *page; -  GtkAllocation tab_allocation; +	GtkPositionType tab_pos; +	int page_num = 0; +	GtkNotebook *nb = GTK_NOTEBOOK (notebook); +	GtkWidget *page; +	GtkAllocation tab_allocation; -  tab_pos = gtk_notebook_get_tab_pos (GTK_NOTEBOOK (notebook)); +	tab_pos = gtk_notebook_get_tab_pos (GTK_NOTEBOOK (notebook)); -  while ((page = gtk_notebook_get_nth_page (nb, page_num))) -    { -      GtkWidget *tab; -      int max_x, max_y, x_root, y_root; +	while ((page = gtk_notebook_get_nth_page (nb, page_num))) +	{ +		GtkWidget *tab; +		int max_x, max_y, x_root, y_root; -      tab = gtk_notebook_get_tab_label (nb, page); -      g_return_val_if_fail (tab != NULL, -1); +		tab = gtk_notebook_get_tab_label (nb, page); +		g_return_val_if_fail (tab != NULL, -1); -      if (!gtk_widget_get_mapped (GTK_WIDGET (tab))) -        { -          page_num++; -          continue; -        } +		if (!gtk_widget_get_mapped (GTK_WIDGET (tab))) +		{ +			page_num++; +			continue; +		} -      gdk_window_get_origin (gtk_widget_get_window (tab), &x_root, &y_root); +		gdk_window_get_origin (gtk_widget_get_window (tab), &x_root, &y_root); -      gtk_widget_get_allocation (tab, &tab_allocation); -      max_x = x_root + tab_allocation.x + tab_allocation.width; -      max_y = y_root + tab_allocation.y + tab_allocation.height; +		gtk_widget_get_allocation (tab, &tab_allocation); +		max_x = x_root + tab_allocation.x + tab_allocation.width; +		max_y = y_root + tab_allocation.y + tab_allocation.height; -      if ((tab_pos == GTK_POS_TOP || tab_pos == GTK_POS_BOTTOM) && screen_x <= max_x) -        return page_num; +		if ((tab_pos == GTK_POS_TOP || tab_pos == GTK_POS_BOTTOM) && screen_x <= max_x) +			return page_num; -      if ((tab_pos == GTK_POS_LEFT || tab_pos == GTK_POS_RIGHT) && screen_y <= max_y) -        return page_num; +		if ((tab_pos == GTK_POS_LEFT || tab_pos == GTK_POS_RIGHT) && screen_y <= max_y) +			return page_num; -      page_num++; -    } +		page_num++; +	} -  return -1; +	return -1;  }  static void @@ -371,75 +371,75 @@ position_menu_under_widget (GtkMenu *menu,                              gboolean *push_in,                              gpointer user_data)  { -  /* Adapted from gtktoolbar.c */ -  GtkWidget *widget = GTK_WIDGET (user_data); -  GdkWindow *widget_window; -  GtkWidget *container; -  GtkRequisition req; -  GtkRequisition menu_req; -  GdkRectangle monitor; -  int monitor_num; -  GdkScreen *screen; -  GtkAllocation widget_allocation; - -  widget_window = gtk_widget_get_window (widget); -  gtk_widget_get_allocation (widget, &widget_allocation); -  container = gtk_widget_get_ancestor (widget, GTK_TYPE_CONTAINER); - -  gtk_widget_size_request (widget, &req); -  gtk_widget_size_request (GTK_WIDGET (menu), &menu_req); - -  screen = gtk_widget_get_screen (GTK_WIDGET (menu)); -  monitor_num = gdk_screen_get_monitor_at_window (screen, widget_window); -  if (monitor_num < 0) -          monitor_num = 0; -  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor); - -  gdk_window_get_origin (widget_window, x, y); -  if (!gtk_widget_get_has_window (widget)) -    { -      *x += widget_allocation.x; -      *y += widget_allocation.y; -    } -  if (gtk_widget_get_direction (container) == GTK_TEXT_DIR_LTR)  -    *x += widget_allocation.width - req.width; -  else  -    *x += req.width - menu_req.width; - -  if ((*y + widget_allocation.height + menu_req.height) <= monitor.y + monitor.height) -    *y += widget_allocation.height; -  else if ((*y - menu_req.height) >= monitor.y) -    *y -= menu_req.height; -  else if (monitor.y + monitor.height - (*y + widget_allocation.height) > *y) -    *y += widget_allocation.height; -  else -    *y -= menu_req.height; - -  *push_in = FALSE; +	/* Adapted from gtktoolbar.c */ +	GtkWidget *widget = GTK_WIDGET (user_data); +	GdkWindow *widget_window; +	GtkWidget *container; +	GtkRequisition req; +	GtkRequisition menu_req; +	GdkRectangle monitor; +	int monitor_num; +	GdkScreen *screen; +	GtkAllocation widget_allocation; + +	widget_window = gtk_widget_get_window (widget); +	gtk_widget_get_allocation (widget, &widget_allocation); +	container = gtk_widget_get_ancestor (widget, GTK_TYPE_CONTAINER); + +	gtk_widget_size_request (widget, &req); +	gtk_widget_size_request (GTK_WIDGET (menu), &menu_req); + +	screen = gtk_widget_get_screen (GTK_WIDGET (menu)); +	monitor_num = gdk_screen_get_monitor_at_window (screen, widget_window); +	if (monitor_num < 0) +		monitor_num = 0; +	gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor); + +	gdk_window_get_origin (widget_window, x, y); +	if (!gtk_widget_get_has_window (widget)) +	{ +		*x += widget_allocation.x; +		*y += widget_allocation.y; +	} +	if (gtk_widget_get_direction (container) == GTK_TEXT_DIR_LTR) +		*x += widget_allocation.width - req.width; +	else +		*x += req.width - menu_req.width; + +	if ((*y + widget_allocation.height + menu_req.height) <= monitor.y + monitor.height) +		*y += widget_allocation.height; +	else if ((*y - menu_req.height) >= monitor.y) +		*y -= menu_req.height; +	else if (monitor.y + monitor.height - (*y + widget_allocation.height) > *y) +		*y += widget_allocation.height; +	else +		*y -= menu_req.height; + +	*push_in = FALSE;  }  static void  terminal_set_profile_toggled_callback (GtkToggleAction *action,                                         TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalProfile *profile; +	TerminalWindowPrivate *priv = window->priv; +	TerminalProfile *profile; + +	if (!gtk_toggle_action_get_active (action)) +		return; -  if (!gtk_toggle_action_get_active (action)) -    return; +	if (priv->active_screen == NULL) +		return; -  if (priv->active_screen == NULL) -    return; -   -  profile = g_object_get_data (G_OBJECT (action), PROFILE_DATA_KEY); -  g_assert (profile); +	profile = g_object_get_data (G_OBJECT (action), PROFILE_DATA_KEY); +	g_assert (profile); -  if (_terminal_profile_get_forgotten (profile)) -    return; +	if (_terminal_profile_get_forgotten (profile)) +		return; -  g_signal_handlers_block_by_func (priv->active_screen, G_CALLBACK (profile_set_callback), window); -  terminal_screen_set_profile (priv->active_screen, profile); -  g_signal_handlers_unblock_by_func (priv->active_screen, G_CALLBACK (profile_set_callback), window); +	g_signal_handlers_block_by_func (priv->active_screen, G_CALLBACK (profile_set_callback), window); +	terminal_screen_set_profile (priv->active_screen, profile); +	g_signal_handlers_unblock_by_func (priv->active_screen, G_CALLBACK (profile_set_callback), window);  }  static void @@ -447,564 +447,566 @@ profile_visible_name_notify_cb (TerminalProfile *profile,                                  GParamSpec *pspec,                                  GtkAction *action)  { -  const char *visible_name; -  char *dot, *display_name; -  guint num; - -  visible_name = terminal_profile_get_property_string (profile, TERMINAL_PROFILE_VISIBLE_NAME); -  display_name = escape_underscores (visible_name); - -  dot = strchr (gtk_action_get_name (action), '.'); -  if (dot != NULL) -    { -      char *free_me; - -      num = g_ascii_strtoll (dot + 1, NULL, 10); - -      free_me = display_name; -      if (num < 10) -        /* Translators: This is the label of a menu item to choose a profile. -         * _%d is used as the accelerator (with d between 1 and 9), and -         * the %s is the name of the terminal profile. -         */ -        display_name = g_strdup_printf (_("_%d. %s"), num, display_name); -      else if (num < 36) -        /* Translators: This is the label of a menu item to choose a profile. -         * _%c is used as the accelerator (it will be a character between A and Z), -         * and the %s is the name of the terminal profile. -         */ -        display_name = g_strdup_printf (_("_%c. %s"), ('A' + num - 10), display_name); -      else -        free_me = NULL; - -      g_free (free_me); -    } - -  g_object_set (action, "label", display_name, NULL); -  g_free (display_name); +	const char *visible_name; +	char *dot, *display_name; +	guint num; + +	visible_name = terminal_profile_get_property_string (profile, TERMINAL_PROFILE_VISIBLE_NAME); +	display_name = escape_underscores (visible_name); + +	dot = strchr (gtk_action_get_name (action), '.'); +	if (dot != NULL) +	{ +		char *free_me; + +		num = g_ascii_strtoll (dot + 1, NULL, 10); + +		free_me = display_name; +		if (num < 10) +			/* Translators: This is the label of a menu item to choose a profile. +			 * _%d is used as the accelerator (with d between 1 and 9), and +			 * the %s is the name of the terminal profile. +			 */ +			display_name = g_strdup_printf (_("_%d. %s"), num, display_name); +		else if (num < 36) +			/* Translators: This is the label of a menu item to choose a profile. +			 * _%c is used as the accelerator (it will be a character between A and Z), +			 * and the %s is the name of the terminal profile. +			 */ +			display_name = g_strdup_printf (_("_%c. %s"), ('A' + num - 10), display_name); +		else +			free_me = NULL; + +		g_free (free_me); +	} + +	g_object_set (action, "label", display_name, NULL); +	g_free (display_name);  }  static void  disconnect_profiles_from_actions_in_group (GtkActionGroup *action_group)  { -  GList *actions, *l; +	GList *actions, *l; -  actions = gtk_action_group_list_actions (action_group); -  for (l = actions; l != NULL; l = l->next) -    { -      GObject *action = G_OBJECT (l->data); -      TerminalProfile *profile; +	actions = gtk_action_group_list_actions (action_group); +	for (l = actions; l != NULL; l = l->next) +	{ +		GObject *action = G_OBJECT (l->data); +		TerminalProfile *profile; -      profile = g_object_get_data (action, PROFILE_DATA_KEY); -      if (!profile) -        continue; +		profile = g_object_get_data (action, PROFILE_DATA_KEY); +		if (!profile) +			continue; -      g_signal_handlers_disconnect_by_func (profile, G_CALLBACK (profile_visible_name_notify_cb), action); -    } -  g_list_free (actions); +		g_signal_handlers_disconnect_by_func (profile, G_CALLBACK (profile_visible_name_notify_cb), action); +	} +	g_list_free (actions);  }  static void  terminal_window_update_set_profile_menu_active_profile (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalProfile *new_active_profile; -  GList *actions, *l; +	TerminalWindowPrivate *priv = window->priv; +	TerminalProfile *new_active_profile; +	GList *actions, *l; -  if (!priv->profiles_action_group) -    return; +	if (!priv->profiles_action_group) +		return; -  if (!priv->active_screen) -    return; +	if (!priv->active_screen) +		return; -  new_active_profile = terminal_screen_get_profile (priv->active_screen); +	new_active_profile = terminal_screen_get_profile (priv->active_screen); -  actions = gtk_action_group_list_actions (priv->profiles_action_group); -  for (l = actions; l != NULL; l = l->next) -    { -      GObject *action = G_OBJECT (l->data); -      TerminalProfile *profile; +	actions = gtk_action_group_list_actions (priv->profiles_action_group); +	for (l = actions; l != NULL; l = l->next) +	{ +		GObject *action = G_OBJECT (l->data); +		TerminalProfile *profile; -      profile = g_object_get_data (action, PROFILE_DATA_KEY); -      if (profile != new_active_profile) -        continue; +		profile = g_object_get_data (action, PROFILE_DATA_KEY); +		if (profile != new_active_profile) +			continue; -      g_signal_handlers_block_by_func (action, G_CALLBACK (terminal_set_profile_toggled_callback), window); -      gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE); -      g_signal_handlers_unblock_by_func (action, G_CALLBACK (terminal_set_profile_toggled_callback), window); +		g_signal_handlers_block_by_func (action, G_CALLBACK (terminal_set_profile_toggled_callback), window); +		gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE); +		g_signal_handlers_unblock_by_func (action, G_CALLBACK (terminal_set_profile_toggled_callback), window); -      break; -    } -  g_list_free (actions); +		break; +	} +	g_list_free (actions);  }  static void  terminal_window_update_set_profile_menu (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalProfile *active_profile; -  GtkActionGroup *action_group; -  GtkAction *action; -  GList *profiles, *p; -  GSList *group; -  guint n; -  gboolean single_profile; - -  /* Remove the old UI */ -  if (priv->profiles_ui_id != 0) -    { -      gtk_ui_manager_remove_ui (priv->ui_manager, priv->profiles_ui_id); -      priv->profiles_ui_id = 0; -    } - -  if (priv->profiles_action_group != NULL) -    { -      disconnect_profiles_from_actions_in_group (priv->profiles_action_group); -      gtk_ui_manager_remove_action_group (priv->ui_manager, -                                          priv->profiles_action_group); -      priv->profiles_action_group = NULL; -    } - -  profiles = terminal_app_get_profile_list (terminal_app_get ()); - -  action = gtk_action_group_get_action (priv->action_group, "TerminalProfiles"); -  single_profile = !profiles || profiles->next == NULL; /* list length <= 1 */ -  gtk_action_set_sensitive (action, !single_profile); -  if (profiles == NULL) -    return; - -  if (priv->active_screen) -    active_profile = terminal_screen_get_profile (priv->active_screen); -  else -    active_profile = NULL; - -  action_group = priv->profiles_action_group = gtk_action_group_new ("Profiles"); -  gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, -1); -  g_object_unref (action_group); - -  priv->profiles_ui_id = gtk_ui_manager_new_merge_id (priv->ui_manager); - -  group = NULL; -  n = 0; -  for (p = profiles; p != NULL; p = p->next) -    { -      TerminalProfile *profile = (TerminalProfile *) p->data; -      GtkRadioAction *profile_action; -      char name[32]; - -      g_snprintf (name, sizeof (name), "TerminalSetProfile%u", n++); - -      profile_action = gtk_radio_action_new (name, -                                             NULL, -                                             NULL, -                                             NULL, -                                             n); - -      gtk_radio_action_set_group (profile_action, group); -      group = gtk_radio_action_get_group (profile_action); - -      if (profile == active_profile) -        gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (profile_action), TRUE); - -      g_object_set_data_full (G_OBJECT (profile_action), -                              PROFILE_DATA_KEY, -                              g_object_ref (profile), -                              (GDestroyNotify) g_object_unref); -      profile_visible_name_notify_cb (profile, NULL, GTK_ACTION (profile_action)); -      g_signal_connect (profile, "notify::" TERMINAL_PROFILE_VISIBLE_NAME, -                        G_CALLBACK (profile_visible_name_notify_cb), profile_action); -      g_signal_connect (profile_action, "toggled", -                        G_CALLBACK (terminal_set_profile_toggled_callback), window); - -      gtk_action_group_add_action (action_group, GTK_ACTION (profile_action)); -      g_object_unref (profile_action); - -      gtk_ui_manager_add_ui (priv->ui_manager, priv->profiles_ui_id, -                             PROFILES_UI_PATH, -                             name, name, -                             GTK_UI_MANAGER_MENUITEM, FALSE); -      gtk_ui_manager_add_ui (priv->ui_manager, priv->profiles_ui_id, -                             PROFILES_POPUP_UI_PATH, -                             name, name, -                             GTK_UI_MANAGER_MENUITEM, FALSE); -    } - -  g_list_free (profiles); +	TerminalWindowPrivate *priv = window->priv; +	TerminalProfile *active_profile; +	GtkActionGroup *action_group; +	GtkAction *action; +	GList *profiles, *p; +	GSList *group; +	guint n; +	gboolean single_profile; + +	/* Remove the old UI */ +	if (priv->profiles_ui_id != 0) +	{ +		gtk_ui_manager_remove_ui (priv->ui_manager, priv->profiles_ui_id); +		priv->profiles_ui_id = 0; +	} + +	if (priv->profiles_action_group != NULL) +	{ +		disconnect_profiles_from_actions_in_group (priv->profiles_action_group); +		gtk_ui_manager_remove_action_group (priv->ui_manager, +		                                    priv->profiles_action_group); +		priv->profiles_action_group = NULL; +	} + +	profiles = terminal_app_get_profile_list (terminal_app_get ()); + +	action = gtk_action_group_get_action (priv->action_group, "TerminalProfiles"); +	single_profile = !profiles || profiles->next == NULL; /* list length <= 1 */ +	gtk_action_set_sensitive (action, !single_profile); +	if (profiles == NULL) +		return; + +	if (priv->active_screen) +		active_profile = terminal_screen_get_profile (priv->active_screen); +	else +		active_profile = NULL; + +	action_group = priv->profiles_action_group = gtk_action_group_new ("Profiles"); +	gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, -1); +	g_object_unref (action_group); + +	priv->profiles_ui_id = gtk_ui_manager_new_merge_id (priv->ui_manager); + +	group = NULL; +	n = 0; +	for (p = profiles; p != NULL; p = p->next) +	{ +		TerminalProfile *profile = (TerminalProfile *) p->data; +		GtkRadioAction *profile_action; +		char name[32]; + +		g_snprintf (name, sizeof (name), "TerminalSetProfile%u", n++); + +		profile_action = gtk_radio_action_new (name, +		                                       NULL, +		                                       NULL, +		                                       NULL, +		                                       n); + +		gtk_radio_action_set_group (profile_action, group); +		group = gtk_radio_action_get_group (profile_action); + +		if (profile == active_profile) +			gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (profile_action), TRUE); + +		g_object_set_data_full (G_OBJECT (profile_action), +		                        PROFILE_DATA_KEY, +		                        g_object_ref (profile), +		                        (GDestroyNotify) g_object_unref); +		profile_visible_name_notify_cb (profile, NULL, GTK_ACTION (profile_action)); +		g_signal_connect (profile, "notify::" TERMINAL_PROFILE_VISIBLE_NAME, +		                  G_CALLBACK (profile_visible_name_notify_cb), profile_action); +		g_signal_connect (profile_action, "toggled", +		                  G_CALLBACK (terminal_set_profile_toggled_callback), window); + +		gtk_action_group_add_action (action_group, GTK_ACTION (profile_action)); +		g_object_unref (profile_action); + +		gtk_ui_manager_add_ui (priv->ui_manager, priv->profiles_ui_id, +		                       PROFILES_UI_PATH, +		                       name, name, +		                       GTK_UI_MANAGER_MENUITEM, FALSE); +		gtk_ui_manager_add_ui (priv->ui_manager, priv->profiles_ui_id, +		                       PROFILES_POPUP_UI_PATH, +		                       name, name, +		                       GTK_UI_MANAGER_MENUITEM, FALSE); +	} + +	g_list_free (profiles);  }  static void  terminal_window_create_new_terminal_action (TerminalWindow *window, -                                            TerminalProfile *profile, -                                            const char *name, -                                            guint num, -                                            GCallback callback) +        TerminalProfile *profile, +        const char *name, +        guint num, +        GCallback callback)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkAction *action; - -  action = gtk_action_new (name, NULL, NULL, NULL); - -  g_object_set_data_full (G_OBJECT (action), -                          PROFILE_DATA_KEY, -                          g_object_ref (profile), -                          (GDestroyNotify) g_object_unref); -  profile_visible_name_notify_cb (profile, NULL, action); -  g_signal_connect (profile, "notify::" TERMINAL_PROFILE_VISIBLE_NAME, -                    G_CALLBACK (profile_visible_name_notify_cb), action); -  g_signal_connect (action, "activate", callback, window); - -  gtk_action_group_add_action (priv->new_terminal_action_group, action); -  g_object_unref (action); +	TerminalWindowPrivate *priv = window->priv; +	GtkAction *action; + +	action = gtk_action_new (name, NULL, NULL, NULL); + +	g_object_set_data_full (G_OBJECT (action), +	                        PROFILE_DATA_KEY, +	                        g_object_ref (profile), +	                        (GDestroyNotify) g_object_unref); +	profile_visible_name_notify_cb (profile, NULL, action); +	g_signal_connect (profile, "notify::" TERMINAL_PROFILE_VISIBLE_NAME, +	                  G_CALLBACK (profile_visible_name_notify_cb), action); +	g_signal_connect (action, "activate", callback, window); + +	gtk_action_group_add_action (priv->new_terminal_action_group, action); +	g_object_unref (action);  }  static void  terminal_window_update_new_terminal_menus (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkActionGroup *action_group; -  GtkAction *action; -  GList *profiles, *p; -  guint n; -  gboolean have_single_profile; - -  /* Remove the old UI */ -  if (priv->new_terminal_ui_id != 0) -    { -      gtk_ui_manager_remove_ui (priv->ui_manager, priv->new_terminal_ui_id); -      priv->new_terminal_ui_id = 0; -    } - -  if (priv->new_terminal_action_group != NULL) -    { -      disconnect_profiles_from_actions_in_group (priv->new_terminal_action_group); -      gtk_ui_manager_remove_action_group (priv->ui_manager, -                                          priv->new_terminal_action_group); -      priv->new_terminal_action_group = NULL; -    } - -  profiles = terminal_app_get_profile_list (terminal_app_get ()); -  have_single_profile = !profiles || !profiles->next; - -  action = gtk_action_group_get_action (priv->action_group, "FileNewTab"); -  gtk_action_set_visible (action, have_single_profile); -  action = gtk_action_group_get_action (priv->action_group, "FileNewWindow"); -  gtk_action_set_visible (action, have_single_profile); - -  if (have_single_profile) -    { -      g_list_free (profiles); -      return; -    } - -  /* Now build the submenus */ - -  action_group = priv->new_terminal_action_group = gtk_action_group_new ("NewTerminal"); -  gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, -1); -  g_object_unref (action_group); - -  priv->new_terminal_ui_id = gtk_ui_manager_new_merge_id (priv->ui_manager); - -  n = 0; -  for (p = profiles; p != NULL; p = p->next) -    { -      TerminalProfile *profile = (TerminalProfile *) p->data; -      char name[32]; - -      g_snprintf (name, sizeof (name), "FileNewTab.%u", n); -      terminal_window_create_new_terminal_action (window, -                                                  profile, -                                                  name, -                                                  n, -                                                  G_CALLBACK (file_new_tab_callback)); - -      gtk_ui_manager_add_ui (priv->ui_manager, priv->new_terminal_ui_id, -                             FILE_NEW_TERMINAL_TAB_UI_PATH, -                             name, name, -                             GTK_UI_MANAGER_MENUITEM, FALSE); - -      g_snprintf (name, sizeof (name), "FileNewWindow.%u", n); -      terminal_window_create_new_terminal_action (window, -                                                  profile, -                                                  name, -                                                  n, -                                                  G_CALLBACK (file_new_window_callback)); - -      gtk_ui_manager_add_ui (priv->ui_manager, priv->new_terminal_ui_id, -                             FILE_NEW_TERMINAL_WINDOW_UI_PATH, -                             name, name, -                             GTK_UI_MANAGER_MENUITEM, FALSE); - -      ++n; -    } - -  g_list_free (profiles); +	TerminalWindowPrivate *priv = window->priv; +	GtkActionGroup *action_group; +	GtkAction *action; +	GList *profiles, *p; +	guint n; +	gboolean have_single_profile; + +	/* Remove the old UI */ +	if (priv->new_terminal_ui_id != 0) +	{ +		gtk_ui_manager_remove_ui (priv->ui_manager, priv->new_terminal_ui_id); +		priv->new_terminal_ui_id = 0; +	} + +	if (priv->new_terminal_action_group != NULL) +	{ +		disconnect_profiles_from_actions_in_group (priv->new_terminal_action_group); +		gtk_ui_manager_remove_action_group (priv->ui_manager, +		                                    priv->new_terminal_action_group); +		priv->new_terminal_action_group = NULL; +	} + +	profiles = terminal_app_get_profile_list (terminal_app_get ()); +	have_single_profile = !profiles || !profiles->next; + +	action = gtk_action_group_get_action (priv->action_group, "FileNewTab"); +	gtk_action_set_visible (action, have_single_profile); +	action = gtk_action_group_get_action (priv->action_group, "FileNewWindow"); +	gtk_action_set_visible (action, have_single_profile); + +	if (have_single_profile) +	{ +		g_list_free (profiles); +		return; +	} + +	/* Now build the submenus */ + +	action_group = priv->new_terminal_action_group = gtk_action_group_new ("NewTerminal"); +	gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, -1); +	g_object_unref (action_group); + +	priv->new_terminal_ui_id = gtk_ui_manager_new_merge_id (priv->ui_manager); + +	n = 0; +	for (p = profiles; p != NULL; p = p->next) +	{ +		TerminalProfile *profile = (TerminalProfile *) p->data; +		char name[32]; + +		g_snprintf (name, sizeof (name), "FileNewTab.%u", n); +		terminal_window_create_new_terminal_action (window, +		        profile, +		        name, +		        n, +		        G_CALLBACK (file_new_tab_callback)); + +		gtk_ui_manager_add_ui (priv->ui_manager, priv->new_terminal_ui_id, +		                       FILE_NEW_TERMINAL_TAB_UI_PATH, +		                       name, name, +		                       GTK_UI_MANAGER_MENUITEM, FALSE); + +		g_snprintf (name, sizeof (name), "FileNewWindow.%u", n); +		terminal_window_create_new_terminal_action (window, +		        profile, +		        name, +		        n, +		        G_CALLBACK (file_new_window_callback)); + +		gtk_ui_manager_add_ui (priv->ui_manager, priv->new_terminal_ui_id, +		                       FILE_NEW_TERMINAL_WINDOW_UI_PATH, +		                       name, name, +		                       GTK_UI_MANAGER_MENUITEM, FALSE); + +		++n; +	} + +	g_list_free (profiles);  }  static void  terminal_set_encoding_callback (GtkToggleAction *action,                                  TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalEncoding *encoding; -   -  if (!gtk_toggle_action_get_active (action)) -    return; +	TerminalWindowPrivate *priv = window->priv; +	TerminalEncoding *encoding; + +	if (!gtk_toggle_action_get_active (action)) +		return; -  if (priv->active_screen == NULL) -    return; +	if (priv->active_screen == NULL) +		return; -  encoding = g_object_get_data (G_OBJECT (action), ENCODING_DATA_KEY); -  g_assert (encoding); +	encoding = g_object_get_data (G_OBJECT (action), ENCODING_DATA_KEY); +	g_assert (encoding); -  vte_terminal_set_encoding (VTE_TERMINAL (priv->active_screen), -                             terminal_encoding_get_charset (encoding)); +	vte_terminal_set_encoding (VTE_TERMINAL (priv->active_screen), +	                           terminal_encoding_get_charset (encoding));  }  static void  terminal_window_update_encoding_menu (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalApp *app; -  GtkActionGroup *action_group; -  GSList *group; -  guint n; -  GSList *encodings, *l; -  const char *charset; -  TerminalEncoding *active_encoding; - -  /* Remove the old UI */ -  if (priv->encodings_ui_id != 0) -    { -      gtk_ui_manager_remove_ui (priv->ui_manager, priv->encodings_ui_id); -      priv->encodings_ui_id = 0; -    } - -  if (priv->encodings_action_group != NULL) -    { -      gtk_ui_manager_remove_action_group (priv->ui_manager, -                                          priv->encodings_action_group); -      priv->encodings_action_group = NULL; -    } - -  action_group = priv->encodings_action_group = gtk_action_group_new ("Encodings"); -  gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, -1); -  g_object_unref (action_group); - -  priv->encodings_ui_id = gtk_ui_manager_new_merge_id (priv->ui_manager); - -  if (priv->active_screen) -    charset = vte_terminal_get_encoding (VTE_TERMINAL (priv->active_screen)); -  else -    charset = "current"; - -  app = terminal_app_get (); -  active_encoding = terminal_app_ensure_encoding (app, charset); - -  encodings = terminal_app_get_active_encodings (app); - -  if (g_slist_find (encodings, active_encoding) == NULL) -    encodings = g_slist_append (encodings, terminal_encoding_ref (active_encoding)); - -  group = NULL; -  n = 0; -  for (l = encodings; l != NULL; l = l->next) -    { -      TerminalEncoding *e = (TerminalEncoding *) l->data; -      GtkRadioAction *encoding_action; -      char name[128]; -      char *display_name; -       -      g_snprintf (name, sizeof (name), SET_ENCODING_ACTION_NAME_PREFIX "%s", terminal_encoding_get_id (e)); -      display_name = g_strdup_printf ("%s (%s)", e->name, terminal_encoding_get_charset (e)); - -      encoding_action = gtk_radio_action_new (name, -                                              display_name, -                                              NULL, -                                              NULL, -                                              n); -      g_free (display_name); - -      gtk_radio_action_set_group (encoding_action, group); -      group = gtk_radio_action_get_group (encoding_action); - -      if (charset && strcmp (terminal_encoding_get_id (e), charset) == 0) -        gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (encoding_action), TRUE); - -      g_signal_connect (encoding_action, "toggled", -                        G_CALLBACK (terminal_set_encoding_callback), window); - -      g_object_set_data_full (G_OBJECT (encoding_action), ENCODING_DATA_KEY, -                              terminal_encoding_ref (e), -                              (GDestroyNotify) terminal_encoding_unref); - -      gtk_action_group_add_action (action_group, GTK_ACTION (encoding_action)); -      g_object_unref (encoding_action); - -      gtk_ui_manager_add_ui (priv->ui_manager, priv->encodings_ui_id, -                             SET_ENCODING_UI_PATH, -                             name, name, -                             GTK_UI_MANAGER_MENUITEM, FALSE); -    } - -  g_slist_foreach (encodings, (GFunc) terminal_encoding_unref, NULL); -  g_slist_free (encodings); +	TerminalWindowPrivate *priv = window->priv; +	TerminalApp *app; +	GtkActionGroup *action_group; +	GSList *group; +	guint n; +	GSList *encodings, *l; +	const char *charset; +	TerminalEncoding *active_encoding; + +	/* Remove the old UI */ +	if (priv->encodings_ui_id != 0) +	{ +		gtk_ui_manager_remove_ui (priv->ui_manager, priv->encodings_ui_id); +		priv->encodings_ui_id = 0; +	} + +	if (priv->encodings_action_group != NULL) +	{ +		gtk_ui_manager_remove_action_group (priv->ui_manager, +		                                    priv->encodings_action_group); +		priv->encodings_action_group = NULL; +	} + +	action_group = priv->encodings_action_group = gtk_action_group_new ("Encodings"); +	gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, -1); +	g_object_unref (action_group); + +	priv->encodings_ui_id = gtk_ui_manager_new_merge_id (priv->ui_manager); + +	if (priv->active_screen) +		charset = vte_terminal_get_encoding (VTE_TERMINAL (priv->active_screen)); +	else +		charset = "current"; + +	app = terminal_app_get (); +	active_encoding = terminal_app_ensure_encoding (app, charset); + +	encodings = terminal_app_get_active_encodings (app); + +	if (g_slist_find (encodings, active_encoding) == NULL) +		encodings = g_slist_append (encodings, terminal_encoding_ref (active_encoding)); + +	group = NULL; +	n = 0; +	for (l = encodings; l != NULL; l = l->next) +	{ +		TerminalEncoding *e = (TerminalEncoding *) l->data; +		GtkRadioAction *encoding_action; +		char name[128]; +		char *display_name; + +		g_snprintf (name, sizeof (name), SET_ENCODING_ACTION_NAME_PREFIX "%s", terminal_encoding_get_id (e)); +		display_name = g_strdup_printf ("%s (%s)", e->name, terminal_encoding_get_charset (e)); + +		encoding_action = gtk_radio_action_new (name, +		                                        display_name, +		                                        NULL, +		                                        NULL, +		                                        n); +		g_free (display_name); + +		gtk_radio_action_set_group (encoding_action, group); +		group = gtk_radio_action_get_group (encoding_action); + +		if (charset && strcmp (terminal_encoding_get_id (e), charset) == 0) +			gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (encoding_action), TRUE); + +		g_signal_connect (encoding_action, "toggled", +		                  G_CALLBACK (terminal_set_encoding_callback), window); + +		g_object_set_data_full (G_OBJECT (encoding_action), ENCODING_DATA_KEY, +		                        terminal_encoding_ref (e), +		                        (GDestroyNotify) terminal_encoding_unref); + +		gtk_action_group_add_action (action_group, GTK_ACTION (encoding_action)); +		g_object_unref (encoding_action); + +		gtk_ui_manager_add_ui (priv->ui_manager, priv->encodings_ui_id, +		                       SET_ENCODING_UI_PATH, +		                       name, name, +		                       GTK_UI_MANAGER_MENUITEM, FALSE); +	} + +	g_slist_foreach (encodings, (GFunc) terminal_encoding_unref, NULL); +	g_slist_free (encodings);  }  static void  terminal_window_update_encoding_menu_active_encoding (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkAction *action; -  char name[128]; - -  if (!priv->active_screen) -    return; -  if (!priv->encodings_action_group) -    return; - -  g_snprintf (name, sizeof (name), SET_ENCODING_ACTION_NAME_PREFIX "%s", -              vte_terminal_get_encoding (VTE_TERMINAL (priv->active_screen))); -  action = gtk_action_group_get_action (priv->encodings_action_group, name); -  if (!action) -    return; - -  g_signal_handlers_block_by_func (action, G_CALLBACK (terminal_set_encoding_callback), window); -  gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE); -  g_signal_handlers_unblock_by_func (action, G_CALLBACK (terminal_set_encoding_callback), window); +	TerminalWindowPrivate *priv = window->priv; +	GtkAction *action; +	char name[128]; + +	if (!priv->active_screen) +		return; +	if (!priv->encodings_action_group) +		return; + +	g_snprintf (name, sizeof (name), SET_ENCODING_ACTION_NAME_PREFIX "%s", +	            vte_terminal_get_encoding (VTE_TERMINAL (priv->active_screen))); +	action = gtk_action_group_get_action (priv->encodings_action_group, name); +	if (!action) +		return; + +	g_signal_handlers_block_by_func (action, G_CALLBACK (terminal_set_encoding_callback), window); +	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE); +	g_signal_handlers_unblock_by_func (action, G_CALLBACK (terminal_set_encoding_callback), window);  }  static void  terminal_size_to_cb (GtkAction *action,                       TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  const char *name; -  char *end = NULL; -  guint width, height; +	TerminalWindowPrivate *priv = window->priv; +	const char *name; +	char *end = NULL; +	guint width, height; -  if (priv->active_screen == NULL) -    return; +	if (priv->active_screen == NULL) +		return; -  name = gtk_action_get_name (action) + strlen (SIZE_TO_ACTION_NAME_PREFIX); -  width = g_ascii_strtoull (name, &end, 10); -  g_assert (end && *end == 'x'); -  height = g_ascii_strtoull (end + 1, &end, 10); -  g_assert (end && *end == '\0'); +	name = gtk_action_get_name (action) + strlen (SIZE_TO_ACTION_NAME_PREFIX); +	width = g_ascii_strtoull (name, &end, 10); +	g_assert (end && *end == 'x'); +	height = g_ascii_strtoull (end + 1, &end, 10); +	g_assert (end && *end == '\0'); -  vte_terminal_set_size (VTE_TERMINAL (priv->active_screen), width, height); +	vte_terminal_set_size (VTE_TERMINAL (priv->active_screen), width, height); -  terminal_window_set_size_force_grid (window, priv->active_screen, TRUE, -1, -1); +	terminal_window_set_size_force_grid (window, priv->active_screen, TRUE, -1, -1);  }  static void  terminal_window_update_size_to_menu (TerminalWindow *window)  { -  static const struct { -    guint grid_width; -    guint grid_height; -  } predefined_sizes[] = { -    { 80, 24 }, -    { 80, 43 }, -    { 132, 24 }, -    { 132, 43 } -  }; -  TerminalWindowPrivate *priv = window->priv; -  guint i; - -  /* We only install this once, so there's no need for a separate action group -   * and any cleanup + build-new-one action here. -   */ - -  for (i = 0; i < G_N_ELEMENTS (predefined_sizes); ++i) -    { -      guint grid_width = predefined_sizes[i].grid_width; -      guint grid_height = predefined_sizes[i].grid_height; -      GtkAction *action; -      char name[40]; -      char *display_name; -       -      g_snprintf (name, sizeof (name), SIZE_TO_ACTION_NAME_PREFIX "%ux%u", -                  grid_width, grid_height); - -      /* If there are ever more than 9 of these, extend this to use A..Z as mnemonics, -       * like we do for the profiles menu. -       */ -      display_name = g_strdup_printf ("_%u. %ux%u", i + 1, grid_width, grid_height); - -      action = gtk_action_new (name, display_name, NULL, NULL); -      g_free (display_name); - -      g_signal_connect (action, "activate", -                        G_CALLBACK (terminal_size_to_cb), window); - -      gtk_action_group_add_action (priv->action_group, action); -      g_object_unref (action); - -      gtk_ui_manager_add_ui (priv->ui_manager, priv->ui_id, -                             SIZE_TO_UI_PATH, -                             name, name, -                             GTK_UI_MANAGER_MENUITEM, FALSE); -    } +	static const struct +	{ +		guint grid_width; +		guint grid_height; +	} predefined_sizes[] = +	{ +		{ 80, 24 }, +		{ 80, 43 }, +		{ 132, 24 }, +		{ 132, 43 } +	}; +	TerminalWindowPrivate *priv = window->priv; +	guint i; + +	/* We only install this once, so there's no need for a separate action group +	 * and any cleanup + build-new-one action here. +	 */ + +	for (i = 0; i < G_N_ELEMENTS (predefined_sizes); ++i) +	{ +		guint grid_width = predefined_sizes[i].grid_width; +		guint grid_height = predefined_sizes[i].grid_height; +		GtkAction *action; +		char name[40]; +		char *display_name; + +		g_snprintf (name, sizeof (name), SIZE_TO_ACTION_NAME_PREFIX "%ux%u", +		            grid_width, grid_height); + +		/* If there are ever more than 9 of these, extend this to use A..Z as mnemonics, +		 * like we do for the profiles menu. +		 */ +		display_name = g_strdup_printf ("_%u. %ux%u", i + 1, grid_width, grid_height); + +		action = gtk_action_new (name, display_name, NULL, NULL); +		g_free (display_name); + +		g_signal_connect (action, "activate", +		                  G_CALLBACK (terminal_size_to_cb), window); + +		gtk_action_group_add_action (priv->action_group, action); +		g_object_unref (action); + +		gtk_ui_manager_add_ui (priv->ui_manager, priv->ui_id, +		                       SIZE_TO_UI_PATH, +		                       name, name, +		                       GTK_UI_MANAGER_MENUITEM, FALSE); +	}  }  /* Actions stuff */  static void  terminal_window_update_copy_sensitivity (TerminalScreen *screen, -                                         TerminalWindow *window) +        TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkAction *action; -  gboolean can_copy; +	TerminalWindowPrivate *priv = window->priv; +	GtkAction *action; +	gboolean can_copy; -  if (screen != priv->active_screen) -    return; +	if (screen != priv->active_screen) +		return; -  can_copy = vte_terminal_get_has_selection (VTE_TERMINAL (screen)); +	can_copy = vte_terminal_get_has_selection (VTE_TERMINAL (screen)); -  action = gtk_action_group_get_action (priv->action_group, "EditCopy"); -  gtk_action_set_sensitive (action, can_copy); +	action = gtk_action_group_get_action (priv->action_group, "EditCopy"); +	gtk_action_set_sensitive (action, can_copy);  }  static void  terminal_window_update_zoom_sensitivity (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalScreen *screen; -  GtkAction *action; -  double current, zoom; -   -  screen = priv->active_screen; -  if (screen == NULL) -    return; +	TerminalWindowPrivate *priv = window->priv; +	TerminalScreen *screen; +	GtkAction *action; +	double current, zoom; -  current = terminal_screen_get_font_scale (screen); +	screen = priv->active_screen; +	if (screen == NULL) +		return; -  action = gtk_action_group_get_action (priv->action_group, "ViewZoomOut"); -  gtk_action_set_sensitive (action, find_smaller_zoom_factor (current, &zoom)); -  action = gtk_action_group_get_action (priv->action_group, "ViewZoomIn"); -  gtk_action_set_sensitive (action, find_larger_zoom_factor (current, &zoom)); +	current = terminal_screen_get_font_scale (screen); + +	action = gtk_action_group_get_action (priv->action_group, "ViewZoomOut"); +	gtk_action_set_sensitive (action, find_smaller_zoom_factor (current, &zoom)); +	action = gtk_action_group_get_action (priv->action_group, "ViewZoomIn"); +	gtk_action_set_sensitive (action, find_larger_zoom_factor (current, &zoom));  }  static void  terminal_window_update_search_sensitivity (TerminalScreen *screen, -                                           TerminalWindow *window) +        TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkAction *action; -  gboolean can_search; +	TerminalWindowPrivate *priv = window->priv; +	GtkAction *action; +	gboolean can_search; -  if (screen != priv->active_screen) -    return; +	if (screen != priv->active_screen) +		return; -  can_search = vte_terminal_search_get_gregex (VTE_TERMINAL (screen)) != NULL; +	can_search = vte_terminal_search_get_gregex (VTE_TERMINAL (screen)) != NULL; -  action = gtk_action_group_get_action (priv->action_group, "SearchFindNext"); -  gtk_action_set_sensitive (action, can_search); -  action = gtk_action_group_get_action (priv->action_group, "SearchFindPrevious"); -  gtk_action_set_sensitive (action, can_search); -  action = gtk_action_group_get_action (priv->action_group, "SearchClearHighlight"); -  gtk_action_set_sensitive (action, can_search); +	action = gtk_action_group_get_action (priv->action_group, "SearchFindNext"); +	gtk_action_set_sensitive (action, can_search); +	action = gtk_action_group_get_action (priv->action_group, "SearchFindPrevious"); +	gtk_action_set_sensitive (action, can_search); +	action = gtk_action_group_get_action (priv->action_group, "SearchClearHighlight"); +	gtk_action_set_sensitive (action, can_search);  }  static void @@ -1013,34 +1015,34 @@ update_edit_menu_cb (GtkClipboard *clipboard,                       int n_targets,                       TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkAction *action; -  gboolean can_paste, can_paste_uris; +	TerminalWindowPrivate *priv = window->priv; +	GtkAction *action; +	gboolean can_paste, can_paste_uris; -  can_paste = targets != NULL && gtk_targets_include_text (targets, n_targets); -  can_paste_uris = targets != NULL && gtk_targets_include_uri (targets, n_targets); +	can_paste = targets != NULL && gtk_targets_include_text (targets, n_targets); +	can_paste_uris = targets != NULL && gtk_targets_include_uri (targets, n_targets); -  action = gtk_action_group_get_action (priv->action_group, "EditPaste"); -  gtk_action_set_sensitive (action, can_paste); -  action = gtk_action_group_get_action (priv->action_group, "EditPasteURIPaths"); -  gtk_action_set_visible (action, can_paste_uris); -  gtk_action_set_sensitive (action, can_paste_uris); +	action = gtk_action_group_get_action (priv->action_group, "EditPaste"); +	gtk_action_set_sensitive (action, can_paste); +	action = gtk_action_group_get_action (priv->action_group, "EditPasteURIPaths"); +	gtk_action_set_visible (action, can_paste_uris); +	gtk_action_set_sensitive (action, can_paste_uris); -  /* Ref was added in gtk_clipboard_request_targets below */ -  g_object_unref (window); +	/* Ref was added in gtk_clipboard_request_targets below */ +	g_object_unref (window);  }  static void  edit_menu_activate_callback (GtkMenuItem *menuitem,                               gpointer     user_data)  { -  TerminalWindow *window = (TerminalWindow *) user_data; -  GtkClipboard *clipboard; +	TerminalWindow *window = (TerminalWindow *) user_data; +	GtkClipboard *clipboard; -  clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_CLIPBOARD); -  gtk_clipboard_request_targets (clipboard, -                                 (GtkClipboardTargetsReceivedFunc) update_edit_menu_cb, -                                 g_object_ref (window)); +	clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_CLIPBOARD); +	gtk_clipboard_request_targets (clipboard, +	                               (GtkClipboardTargetsReceivedFunc) update_edit_menu_cb, +	                               g_object_ref (window));  }  static void @@ -1049,116 +1051,116 @@ screen_resize_window_cb (TerminalScreen *screen,                           guint height,                           TerminalWindow* window)  { -  TerminalWindowPrivate *priv = window->priv; -  VteTerminal *terminal = VTE_TERMINAL (screen); -  GtkWidget *widget = GTK_WIDGET (screen); -  guint grid_width, grid_height; -  int char_width, char_height; -  GtkBorder *inner_border = NULL; -  GtkAllocation widget_allocation; +	TerminalWindowPrivate *priv = window->priv; +	VteTerminal *terminal = VTE_TERMINAL (screen); +	GtkWidget *widget = GTK_WIDGET (screen); +	guint grid_width, grid_height; +	int char_width, char_height; +	GtkBorder *inner_border = NULL; +	GtkAllocation widget_allocation; -  gtk_widget_get_allocation (widget, &widget_allocation); -  /* Don't do anything if we're maximised or fullscreened */ -  // FIXME: realized && ... instead?  -  if (!gtk_widget_get_realized (widget) || -      (gdk_window_get_state (gtk_widget_get_window (widget)) & (GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN)) != 0) -    return; +	gtk_widget_get_allocation (widget, &widget_allocation); +	/* Don't do anything if we're maximised or fullscreened */ +	// FIXME: realized && ... instead? +	if (!gtk_widget_get_realized (widget) || +	        (gdk_window_get_state (gtk_widget_get_window (widget)) & (GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN)) != 0) +		return; -  /* NOTE: width and height already include the VteTerminal's padding! */ +	/* NOTE: width and height already include the VteTerminal's padding! */ -  /* Short-circuit */ -  if (((int) width) == widget_allocation.width && -      ((int) height) == widget_allocation.height) -    return; +	/* Short-circuit */ +	if (((int) width) == widget_allocation.width && +	        ((int) height) == widget_allocation.height) +		return; -  /* The resize-window signal sucks. Re-compute grid widths */ +	/* The resize-window signal sucks. Re-compute grid widths */ -  char_width = vte_terminal_get_char_width (terminal); -  char_height = vte_terminal_get_char_height (terminal); +	char_width = vte_terminal_get_char_width (terminal); +	char_height = vte_terminal_get_char_height (terminal); -  gtk_widget_style_get (GTK_WIDGET (terminal), "inner-border", &inner_border, NULL); -  grid_width = (width - (inner_border ? (inner_border->left + inner_border->right) : 0)) / char_width; -  grid_height = (height - (inner_border ? (inner_border->top + inner_border->bottom) : 0)) / char_height; -  gtk_border_free (inner_border); +	gtk_widget_style_get (GTK_WIDGET (terminal), "inner-border", &inner_border, NULL); +	grid_width = (width - (inner_border ? (inner_border->left + inner_border->right) : 0)) / char_width; +	grid_height = (height - (inner_border ? (inner_border->top + inner_border->bottom) : 0)) / char_height; +	gtk_border_free (inner_border); -  vte_terminal_set_size (terminal, grid_width, grid_height); +	vte_terminal_set_size (terminal, grid_width, grid_height); -  if (screen != priv->active_screen) -    return; +	if (screen != priv->active_screen) +		return; -  terminal_window_set_size_force_grid (window, screen, TRUE, -1, -1); //grid_width, grid_height); +	terminal_window_set_size_force_grid (window, screen, TRUE, -1, -1); //grid_width, grid_height);  }  static void  terminal_window_update_tabs_menu_sensitivity (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkNotebook *notebook = GTK_NOTEBOOK (priv->notebook); -  GtkActionGroup *action_group = priv->action_group; -  GtkAction *action; -  int num_pages, page_num; -  gboolean not_first, not_last; - -  if (priv->disposed) -    return; - -  num_pages = gtk_notebook_get_n_pages (notebook); -  page_num = gtk_notebook_get_current_page (notebook); -  not_first = page_num > 0; -  not_last = page_num + 1 < num_pages; - -  /* Hide the tabs menu in single-tab windows */ -  action = gtk_action_group_get_action (action_group, "Tabs"); -  gtk_action_set_visible (action, num_pages > 1); -   +	TerminalWindowPrivate *priv = window->priv; +	GtkNotebook *notebook = GTK_NOTEBOOK (priv->notebook); +	GtkActionGroup *action_group = priv->action_group; +	GtkAction *action; +	int num_pages, page_num; +	gboolean not_first, not_last; + +	if (priv->disposed) +		return; + +	num_pages = gtk_notebook_get_n_pages (notebook); +	page_num = gtk_notebook_get_current_page (notebook); +	not_first = page_num > 0; +	not_last = page_num + 1 < num_pages; + +	/* Hide the tabs menu in single-tab windows */ +	action = gtk_action_group_get_action (action_group, "Tabs"); +	gtk_action_set_visible (action, num_pages > 1); +  #if 1 -  /* NOTE: We always make next/prev actions sensitive except in -   * single-tab windows, so the corresponding shortcut key escape code -   * isn't sent to the terminal. See bug #453193 and bug #138609. -   * This also makes tab cycling work, bug #92139. -   * FIXME: Find a better way to do this. -   */ -  action = gtk_action_group_get_action (action_group, "TabsPrevious"); -  gtk_action_set_sensitive (action, num_pages > 1); -  action = gtk_action_group_get_action (action_group, "TabsNext"); -  gtk_action_set_sensitive (action, num_pages > 1); +	/* NOTE: We always make next/prev actions sensitive except in +	 * single-tab windows, so the corresponding shortcut key escape code +	 * isn't sent to the terminal. See bug #453193 and bug #138609. +	 * This also makes tab cycling work, bug #92139. +	 * FIXME: Find a better way to do this. +	 */ +	action = gtk_action_group_get_action (action_group, "TabsPrevious"); +	gtk_action_set_sensitive (action, num_pages > 1); +	action = gtk_action_group_get_action (action_group, "TabsNext"); +	gtk_action_set_sensitive (action, num_pages > 1);  #else -  /* This would be correct, but see the comment above. */ -  action = gtk_action_group_get_action (action_group, "TabsPrevious"); -  gtk_action_set_sensitive (action, not_first); -  action = gtk_action_group_get_action (action_group, "TabsNext"); -  gtk_action_set_sensitive (action, not_last); +	/* This would be correct, but see the comment above. */ +	action = gtk_action_group_get_action (action_group, "TabsPrevious"); +	gtk_action_set_sensitive (action, not_first); +	action = gtk_action_group_get_action (action_group, "TabsNext"); +	gtk_action_set_sensitive (action, not_last);  #endif -  action = gtk_action_group_get_action (action_group, "TabsMoveLeft"); -  gtk_action_set_sensitive (action, not_first); -  action = gtk_action_group_get_action (action_group, "TabsMoveRight"); -  gtk_action_set_sensitive (action, not_last); -  action = gtk_action_group_get_action (action_group, "TabsDetach"); -  gtk_action_set_sensitive (action, num_pages > 1); -  action = gtk_action_group_get_action (action_group, "FileCloseTab"); -  gtk_action_set_sensitive (action, num_pages > 1); +	action = gtk_action_group_get_action (action_group, "TabsMoveLeft"); +	gtk_action_set_sensitive (action, not_first); +	action = gtk_action_group_get_action (action_group, "TabsMoveRight"); +	gtk_action_set_sensitive (action, not_last); +	action = gtk_action_group_get_action (action_group, "TabsDetach"); +	gtk_action_set_sensitive (action, num_pages > 1); +	action = gtk_action_group_get_action (action_group, "FileCloseTab"); +	gtk_action_set_sensitive (action, num_pages > 1);  }  gboolean  terminal_window_uses_argb_visual (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  return priv->have_argb_visual; +	TerminalWindowPrivate *priv = window->priv; +	return priv->have_argb_visual;  }  static void  update_tab_visibility (TerminalWindow *window,                         int             change)  { -  TerminalWindowPrivate *priv = window->priv; -  gboolean show_tabs; -  guint num; +	TerminalWindowPrivate *priv = window->priv; +	gboolean show_tabs; +	guint num; -  num = gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook)); +	num = gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook)); -  show_tabs = (num + change) > 1; -  gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), show_tabs); +	show_tabs = (num + change) > 1; +	gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), show_tabs);  }  static GtkNotebook * @@ -1168,24 +1170,24 @@ handle_tab_droped_on_desktop (GtkNotebook *source_notebook,                                gint         y,                                gpointer     data)  { -  TerminalScreen *screen; -  TerminalWindow *source_window; -  TerminalWindow *new_window; -  TerminalWindowPrivate *new_priv; +	TerminalScreen *screen; +	TerminalWindow *source_window; +	TerminalWindow *new_window; +	TerminalWindowPrivate *new_priv; -  screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (container)); -  source_window = TERMINAL_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (source_notebook))); -  g_return_val_if_fail (TERMINAL_IS_WINDOW (source_window), NULL); +	screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (container)); +	source_window = TERMINAL_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (source_notebook))); +	g_return_val_if_fail (TERMINAL_IS_WINDOW (source_window), NULL); -  new_window = terminal_app_new_window (terminal_app_get (), -                                        gtk_widget_get_screen (GTK_WIDGET (source_window))); -  new_priv = new_window->priv; -  new_priv->present_on_insert = TRUE; +	new_window = terminal_app_new_window (terminal_app_get (), +	                                      gtk_widget_get_screen (GTK_WIDGET (source_window))); +	new_priv = new_window->priv; +	new_priv->present_on_insert = TRUE; -  update_tab_visibility (source_window, -1); -  update_tab_visibility (new_window, +1); +	update_tab_visibility (source_window, -1); +	update_tab_visibility (new_window, +1); -  return GTK_NOTEBOOK (new_priv->notebook); +	return GTK_NOTEBOOK (new_priv->notebook);  }  /* Terminal screen popup menu handling */ @@ -1194,100 +1196,100 @@ static void  popup_open_url_callback (GtkAction *action,                           TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalScreenPopupInfo *info = priv->popup_info; +	TerminalWindowPrivate *priv = window->priv; +	TerminalScreenPopupInfo *info = priv->popup_info; -  if (info == NULL) -    return; +	if (info == NULL) +		return; -  terminal_util_open_url (GTK_WIDGET (window), info->string, info->flavour, -                          gtk_get_current_event_time ()); +	terminal_util_open_url (GTK_WIDGET (window), info->string, info->flavour, +	                        gtk_get_current_event_time ());  }  static void  popup_copy_url_callback (GtkAction *action,                           TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalScreenPopupInfo *info = priv->popup_info; -  GtkClipboard *clipboard; +	TerminalWindowPrivate *priv = window->priv; +	TerminalScreenPopupInfo *info = priv->popup_info; +	GtkClipboard *clipboard; -  if (info == NULL) -    return; +	if (info == NULL) +		return; -  if (info->string == NULL) -    return; +	if (info->string == NULL) +		return; -  clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_CLIPBOARD); -  gtk_clipboard_set_text (clipboard, info->string, -1); +	clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_CLIPBOARD); +	gtk_clipboard_set_text (clipboard, info->string, -1);  }  static void  popup_leave_fullscreen_callback (GtkAction *action,                                   TerminalWindow *window)  { -    gtk_window_unfullscreen (GTK_WINDOW (window)); +	gtk_window_unfullscreen (GTK_WINDOW (window));  }  static void  remove_popup_info (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; - -  if (priv->remove_popup_info_idle != 0) -    { -      g_source_remove (priv->remove_popup_info_idle); -      priv->remove_popup_info_idle = 0; -    } - -  if (priv->popup_info != NULL) -    { -      terminal_screen_popup_info_unref (priv->popup_info); -      priv->popup_info = NULL; -    } +	TerminalWindowPrivate *priv = window->priv; + +	if (priv->remove_popup_info_idle != 0) +	{ +		g_source_remove (priv->remove_popup_info_idle); +		priv->remove_popup_info_idle = 0; +	} + +	if (priv->popup_info != NULL) +	{ +		terminal_screen_popup_info_unref (priv->popup_info); +		priv->popup_info = NULL; +	}  }  static gboolean  idle_remove_popup_info (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindowPrivate *priv = window->priv; -  priv->remove_popup_info_idle = 0; -  remove_popup_info (window); -  return FALSE; +	priv->remove_popup_info_idle = 0; +	remove_popup_info (window); +	return FALSE;  }  static void  unset_popup_info (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; - -  /* Unref the event from idle since we still need it -   * from the action callbacks which will run before idle. -   */ -  if (priv->remove_popup_info_idle == 0 && -      priv->popup_info != NULL) -    { -      priv->remove_popup_info_idle = -        g_idle_add ((GSourceFunc) idle_remove_popup_info, window); -    } +	TerminalWindowPrivate *priv = window->priv; + +	/* Unref the event from idle since we still need it +	 * from the action callbacks which will run before idle. +	 */ +	if (priv->remove_popup_info_idle == 0 && +	        priv->popup_info != NULL) +	{ +		priv->remove_popup_info_idle = +		    g_idle_add ((GSourceFunc) idle_remove_popup_info, window); +	}  }  static void  popup_menu_deactivate_callback (GtkWidget *popup,                                  TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkWidget *im_menu_item; +	TerminalWindowPrivate *priv = window->priv; +	GtkWidget *im_menu_item; -  g_signal_handlers_disconnect_by_func -    (popup, G_CALLBACK (popup_menu_deactivate_callback), window); +	g_signal_handlers_disconnect_by_func +	(popup, G_CALLBACK (popup_menu_deactivate_callback), window); -  im_menu_item = gtk_ui_manager_get_widget (priv->ui_manager, -                                            "/Popup/PopupInputMethods"); -  gtk_menu_item_set_submenu (GTK_MENU_ITEM (im_menu_item), NULL); +	im_menu_item = gtk_ui_manager_get_widget (priv->ui_manager, +	               "/Popup/PopupInputMethods"); +	gtk_menu_item_set_submenu (GTK_MENU_ITEM (im_menu_item), NULL); -  unset_popup_info (window); +	unset_popup_info (window);  }  static void @@ -1296,97 +1298,97 @@ popup_clipboard_targets_received_cb (GtkClipboard *clipboard,                                       int n_targets,                                       TerminalScreenPopupInfo *info)  { -  TerminalWindow *window = info->window; -  TerminalWindowPrivate *priv = window->priv; -  TerminalScreen *screen = info->screen; -  GtkWidget *popup_menu, *im_menu, *im_menu_item; -  GtkAction *action; -  gboolean can_paste, can_paste_uris, show_link, show_email_link, show_call_link, show_input_method_menu; -  int n_pages; - -  if (!gtk_widget_get_realized (GTK_WIDGET (screen))) -    { -      terminal_screen_popup_info_unref (info); -      return; -    } - -  /* Now we know that the screen is realized, we know that the window is still alive */ -  remove_popup_info (window); - -  priv->popup_info = info; /* adopt the ref added when requesting the clipboard */ - -  n_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook)); - -  can_paste = targets != NULL && gtk_targets_include_text (targets, n_targets); -  can_paste_uris = targets != NULL && gtk_targets_include_uri (targets, n_targets); -  show_link = info->string != NULL && (info->flavour == FLAVOR_AS_IS || info->flavour == FLAVOR_DEFAULT_TO_HTTP); -  show_email_link = info->string != NULL && info->flavour == FLAVOR_EMAIL; -  show_call_link = info->string != NULL && info->flavour == FLAVOR_VOIP_CALL; - -  action = gtk_action_group_get_action (priv->action_group, "PopupSendEmail"); -  gtk_action_set_visible (action, show_email_link); -  action = gtk_action_group_get_action (priv->action_group, "PopupCopyEmailAddress"); -  gtk_action_set_visible (action, show_email_link); -  action = gtk_action_group_get_action (priv->action_group, "PopupCall"); -  gtk_action_set_visible (action, show_call_link); -  action = gtk_action_group_get_action (priv->action_group, "PopupCopyCallAddress"); -  gtk_action_set_visible (action, show_call_link); -  action = gtk_action_group_get_action (priv->action_group, "PopupOpenLink"); -  gtk_action_set_visible (action, show_link); -  action = gtk_action_group_get_action (priv->action_group, "PopupCopyLinkAddress"); -  gtk_action_set_visible (action, show_link); - -  action = gtk_action_group_get_action (priv->action_group, "PopupCloseWindow"); -  gtk_action_set_visible (action, n_pages <= 1); -  action = gtk_action_group_get_action (priv->action_group, "PopupCloseTab"); -  gtk_action_set_visible (action, n_pages > 1); - -  action = gtk_action_group_get_action (priv->action_group, "PopupCopy"); -  gtk_action_set_sensitive (action, vte_terminal_get_has_selection (VTE_TERMINAL (screen))); -  action = gtk_action_group_get_action (priv->action_group, "PopupPaste"); -  gtk_action_set_sensitive (action, can_paste); -  action = gtk_action_group_get_action (priv->action_group, "PopupPasteURIPaths"); -  gtk_action_set_visible (action, can_paste_uris); -   -  g_object_get (gtk_widget_get_settings (GTK_WIDGET (window)), -                "gtk-show-input-method-menu", &show_input_method_menu, -                NULL); - -  action = gtk_action_group_get_action (priv->action_group, "PopupInputMethods"); -  gtk_action_set_visible (action, show_input_method_menu); - -  im_menu_item = gtk_ui_manager_get_widget (priv->ui_manager, -                                            "/Popup/PopupInputMethods"); -  /* FIXME: fix this when gtk+ bug #500065 is done, use vte_terminal_im_merge_ui */ -  if (show_input_method_menu) -    { -      im_menu = gtk_menu_new (); -      vte_terminal_im_append_menuitems (VTE_TERMINAL (screen), -                                        GTK_MENU_SHELL (im_menu)); -      gtk_widget_show (im_menu); -      gtk_menu_item_set_submenu (GTK_MENU_ITEM (im_menu_item), im_menu); -    } -  else -    { -      gtk_menu_item_set_submenu (GTK_MENU_ITEM (im_menu_item), NULL); -    } - -  popup_menu = gtk_ui_manager_get_widget (priv->ui_manager, "/Popup"); -  g_signal_connect (popup_menu, "deactivate", -                    G_CALLBACK (popup_menu_deactivate_callback), window); - -  /* Pseudo activation of the popup menu's action */ -  action = gtk_action_group_get_action (priv->action_group, "Popup"); -  gtk_action_activate (action); - -  if (info->button == 0) -    gtk_menu_shell_select_first (GTK_MENU_SHELL (popup_menu), FALSE); - -  gtk_menu_popup (GTK_MENU (popup_menu), -                  NULL, NULL, -                  NULL, NULL,  -                  info->button, -                  info->timestamp); +	TerminalWindow *window = info->window; +	TerminalWindowPrivate *priv = window->priv; +	TerminalScreen *screen = info->screen; +	GtkWidget *popup_menu, *im_menu, *im_menu_item; +	GtkAction *action; +	gboolean can_paste, can_paste_uris, show_link, show_email_link, show_call_link, show_input_method_menu; +	int n_pages; + +	if (!gtk_widget_get_realized (GTK_WIDGET (screen))) +	{ +		terminal_screen_popup_info_unref (info); +		return; +	} + +	/* Now we know that the screen is realized, we know that the window is still alive */ +	remove_popup_info (window); + +	priv->popup_info = info; /* adopt the ref added when requesting the clipboard */ + +	n_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook)); + +	can_paste = targets != NULL && gtk_targets_include_text (targets, n_targets); +	can_paste_uris = targets != NULL && gtk_targets_include_uri (targets, n_targets); +	show_link = info->string != NULL && (info->flavour == FLAVOR_AS_IS || info->flavour == FLAVOR_DEFAULT_TO_HTTP); +	show_email_link = info->string != NULL && info->flavour == FLAVOR_EMAIL; +	show_call_link = info->string != NULL && info->flavour == FLAVOR_VOIP_CALL; + +	action = gtk_action_group_get_action (priv->action_group, "PopupSendEmail"); +	gtk_action_set_visible (action, show_email_link); +	action = gtk_action_group_get_action (priv->action_group, "PopupCopyEmailAddress"); +	gtk_action_set_visible (action, show_email_link); +	action = gtk_action_group_get_action (priv->action_group, "PopupCall"); +	gtk_action_set_visible (action, show_call_link); +	action = gtk_action_group_get_action (priv->action_group, "PopupCopyCallAddress"); +	gtk_action_set_visible (action, show_call_link); +	action = gtk_action_group_get_action (priv->action_group, "PopupOpenLink"); +	gtk_action_set_visible (action, show_link); +	action = gtk_action_group_get_action (priv->action_group, "PopupCopyLinkAddress"); +	gtk_action_set_visible (action, show_link); + +	action = gtk_action_group_get_action (priv->action_group, "PopupCloseWindow"); +	gtk_action_set_visible (action, n_pages <= 1); +	action = gtk_action_group_get_action (priv->action_group, "PopupCloseTab"); +	gtk_action_set_visible (action, n_pages > 1); + +	action = gtk_action_group_get_action (priv->action_group, "PopupCopy"); +	gtk_action_set_sensitive (action, vte_terminal_get_has_selection (VTE_TERMINAL (screen))); +	action = gtk_action_group_get_action (priv->action_group, "PopupPaste"); +	gtk_action_set_sensitive (action, can_paste); +	action = gtk_action_group_get_action (priv->action_group, "PopupPasteURIPaths"); +	gtk_action_set_visible (action, can_paste_uris); + +	g_object_get (gtk_widget_get_settings (GTK_WIDGET (window)), +	              "gtk-show-input-method-menu", &show_input_method_menu, +	              NULL); + +	action = gtk_action_group_get_action (priv->action_group, "PopupInputMethods"); +	gtk_action_set_visible (action, show_input_method_menu); + +	im_menu_item = gtk_ui_manager_get_widget (priv->ui_manager, +	               "/Popup/PopupInputMethods"); +	/* FIXME: fix this when gtk+ bug #500065 is done, use vte_terminal_im_merge_ui */ +	if (show_input_method_menu) +	{ +		im_menu = gtk_menu_new (); +		vte_terminal_im_append_menuitems (VTE_TERMINAL (screen), +		                                  GTK_MENU_SHELL (im_menu)); +		gtk_widget_show (im_menu); +		gtk_menu_item_set_submenu (GTK_MENU_ITEM (im_menu_item), im_menu); +	} +	else +	{ +		gtk_menu_item_set_submenu (GTK_MENU_ITEM (im_menu_item), NULL); +	} + +	popup_menu = gtk_ui_manager_get_widget (priv->ui_manager, "/Popup"); +	g_signal_connect (popup_menu, "deactivate", +	                  G_CALLBACK (popup_menu_deactivate_callback), window); + +	/* Pseudo activation of the popup menu's action */ +	action = gtk_action_group_get_action (priv->action_group, "Popup"); +	gtk_action_activate (action); + +	if (info->button == 0) +		gtk_menu_shell_select_first (GTK_MENU_SHELL (popup_menu), FALSE); + +	gtk_menu_popup (GTK_MENU (popup_menu), +	                NULL, NULL, +	                NULL, NULL, +	                info->button, +	                info->timestamp);  }  static void @@ -1394,14 +1396,14 @@ screen_show_popup_menu_callback (TerminalScreen *screen,                                   TerminalScreenPopupInfo *info,                                   TerminalWindow *window)  { -  GtkClipboard *clipboard; +	GtkClipboard *clipboard; -  g_return_if_fail (info->window == window); +	g_return_if_fail (info->window == window); -  clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_CLIPBOARD); -  gtk_clipboard_request_targets (clipboard, -                                  (GtkClipboardTargetsReceivedFunc) popup_clipboard_targets_received_cb, -                                  terminal_screen_popup_info_ref (info)); +	clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_CLIPBOARD); +	gtk_clipboard_request_targets (clipboard, +	                               (GtkClipboardTargetsReceivedFunc) popup_clipboard_targets_received_cb, +	                               terminal_screen_popup_info_ref (info));  }  static gboolean @@ -1411,33 +1413,33 @@ screen_match_clicked_cb (TerminalScreen *screen,                           guint state,                           TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindowPrivate *priv = window->priv; -  if (screen != priv->active_screen) -    return FALSE; +	if (screen != priv->active_screen) +		return FALSE; -  switch (flavour) -    { +	switch (flavour) +	{  #ifdef ENABLE_SKEY -      case FLAVOR_SKEY: -        terminal_skey_do_popup (GTK_WINDOW (window), screen, match); -        break; +	case FLAVOR_SKEY: +		terminal_skey_do_popup (GTK_WINDOW (window), screen, match); +		break;  #endif -      default: -        gtk_widget_grab_focus (GTK_WIDGET (screen)); -        terminal_util_open_url (GTK_WIDGET (window), match, flavour, -                                gtk_get_current_event_time ()); -        break; -    } +	default: +		gtk_widget_grab_focus (GTK_WIDGET (screen)); +		terminal_util_open_url (GTK_WIDGET (window), match, flavour, +		                        gtk_get_current_event_time ()); +		break; +	} -  return TRUE; +	return TRUE;  }  static void  screen_close_cb (TerminalScreen *screen,                   TerminalWindow *window)  { -  terminal_window_remove_screen (window, screen); +	terminal_window_remove_screen (window, screen);  }  static gboolean @@ -1447,44 +1449,44 @@ terminal_window_accel_activate_cb (GtkAccelGroup  *accel_group,                                     GdkModifierType modifier,                                     TerminalWindow *window)  { -  GtkAccelGroupEntry *entries; -  guint n_entries; -  gboolean retval = FALSE; +	GtkAccelGroupEntry *entries; +	guint n_entries; +	gboolean retval = FALSE; -  entries = gtk_accel_group_query (accel_group, keyval, modifier, &n_entries); -  if (n_entries > 0) -    { -      const char *accel_path; +	entries = gtk_accel_group_query (accel_group, keyval, modifier, &n_entries); +	if (n_entries > 0) +	{ +		const char *accel_path; -      accel_path = g_quark_to_string (entries[0].accel_path_quark); +		accel_path = g_quark_to_string (entries[0].accel_path_quark); -      if (g_str_has_prefix (accel_path, "<Actions>/Main/")) -        { -          const char *action_name; +		if (g_str_has_prefix (accel_path, "<Actions>/Main/")) +		{ +			const char *action_name; -          /* We want to always consume these accelerators, even if the corresponding -           * action is insensitive, so the corresponding shortcut key escape code -           * isn't sent to the terminal. See bug #453193, bug #138609 and bug #559728. -           * This also makes tab cycling work, bug #92139. (NOT!) -           */ +			/* We want to always consume these accelerators, even if the corresponding +			 * action is insensitive, so the corresponding shortcut key escape code +			 * isn't sent to the terminal. See bug #453193, bug #138609 and bug #559728. +			 * This also makes tab cycling work, bug #92139. (NOT!) +			 */ -          action_name = I_(accel_path + strlen ("<Actions>/Main/")); +			action_name = I_(accel_path + strlen ("<Actions>/Main/"));  #if 0 -          if (gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook)) > 1 && -              (action_name == I_("TabsPrevious") || action_name == I_("TabsNext"))) -            retval = TRUE; -          else +			if (gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook)) > 1 && +			        (action_name == I_("TabsPrevious") || action_name == I_("TabsNext"))) +				retval = TRUE; +			else  #endif -               if (action_name == I_("EditCopy") || -                   action_name == I_("PopupCopy") || -                   action_name == I_("EditPaste") || -                   action_name == I_("PopupPaste")) -            retval = TRUE; -        } -    } - -  return retval; +				if (action_name == I_("EditCopy") || +				        action_name == I_("PopupCopy") || +				        action_name == I_("EditPaste") || +				        action_name == I_("PopupPaste")) +					retval = TRUE; +		} +	} + +	return retval;  }  /*****************************************/ @@ -1494,136 +1496,136 @@ static void  terminal_window_size_request_cb (GtkWidget *widget,                                   GtkRequisition *req)  { -  _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                         "[window %p] size-request result %d : %d\n", -                         widget, req->width, req->height); +	_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +	                       "[window %p] size-request result %d : %d\n", +	                       widget, req->width, req->height);  }  static void  terminal_window_size_allocate_cb (GtkWidget *widget,                                    GtkAllocation *allocation)  { -  _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                         "[window %p] size-alloc result %d : %d at (%d, %d)\n", -                         widget, -                         allocation->width, allocation->height, -                         allocation->x, allocation->y); +	_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +	                       "[window %p] size-alloc result %d : %d at (%d, %d)\n", +	                       widget, +	                       allocation->width, allocation->height, +	                       allocation->x, allocation->y);  }  #endif /* MATE_ENABLE_DEBUG */  static void  terminal_window_realize (GtkWidget *widget)  { -  TerminalWindow *window = TERMINAL_WINDOW (widget); -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindow *window = TERMINAL_WINDOW (widget); +	TerminalWindowPrivate *priv = window->priv;  #ifdef GDK_WINDOWING_X11 -  GdkScreen *screen; -  GdkColormap *colormap; -  GtkAllocation widget_allocation; - -  gtk_widget_get_allocation (widget, &widget_allocation); -  screen = gtk_widget_get_screen (GTK_WIDGET (window)); -  if (gdk_screen_is_composited (screen) && -      (colormap = gdk_screen_get_rgba_colormap (screen)) != NULL) -    { -      /* Set RGBA colormap if possible so VTE can use real transparency */ -      gtk_widget_set_colormap (widget, colormap); -      priv->have_argb_visual = TRUE; -    } -  else -    { -      gtk_widget_set_colormap (widget, gdk_screen_get_default_colormap (screen)); -      priv->have_argb_visual = FALSE; -    } +	GdkScreen *screen; +	GdkColormap *colormap; +	GtkAllocation widget_allocation; + +	gtk_widget_get_allocation (widget, &widget_allocation); +	screen = gtk_widget_get_screen (GTK_WIDGET (window)); +	if (gdk_screen_is_composited (screen) && +	        (colormap = gdk_screen_get_rgba_colormap (screen)) != NULL) +	{ +		/* Set RGBA colormap if possible so VTE can use real transparency */ +		gtk_widget_set_colormap (widget, colormap); +		priv->have_argb_visual = TRUE; +	} +	else +	{ +		gtk_widget_set_colormap (widget, gdk_screen_get_default_colormap (screen)); +		priv->have_argb_visual = FALSE; +	}  #endif -  _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                         "[window %p] realize, size %d : %d at (%d, %d)\n", -                         widget, -                         widget_allocation.width, widget_allocation.height, -                         widget_allocation.x, widget_allocation.y); +	_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +	                       "[window %p] realize, size %d : %d at (%d, %d)\n", +	                       widget, +	                       widget_allocation.width, widget_allocation.height, +	                       widget_allocation.x, widget_allocation.y); -  GTK_WIDGET_CLASS (terminal_window_parent_class)->realize (widget); +	GTK_WIDGET_CLASS (terminal_window_parent_class)->realize (widget); -  /* Need to do this now since this requires the window to be realized */ -  if (priv->active_screen != NULL) -    sync_screen_icon_title (priv->active_screen, NULL, window); +	/* Need to do this now since this requires the window to be realized */ +	if (priv->active_screen != NULL) +		sync_screen_icon_title (priv->active_screen, NULL, window);  }  static gboolean  terminal_window_map_event (GtkWidget    *widget, -			   GdkEventAny  *event) -{ -  TerminalWindow *window = TERMINAL_WINDOW (widget); -  TerminalWindowPrivate *priv = window->priv; -  gboolean (* map_event) (GtkWidget *, GdkEventAny *) = -      GTK_WIDGET_CLASS (terminal_window_parent_class)->map_event; -  GtkAllocation widget_allocation; - -  gtk_widget_get_allocation (widget, &widget_allocation); -  _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                         "[window %p] map-event, size %d : %d at (%d, %d)\n", -                         widget, -                         widget_allocation.width, widget_allocation.height, -                         widget_allocation.x, widget_allocation.y); - -  if (priv->clear_demands_attention) -    { +                           GdkEventAny  *event) +{ +	TerminalWindow *window = TERMINAL_WINDOW (widget); +	TerminalWindowPrivate *priv = window->priv; +	gboolean (* map_event) (GtkWidget *, GdkEventAny *) = +	    GTK_WIDGET_CLASS (terminal_window_parent_class)->map_event; +	GtkAllocation widget_allocation; + +	gtk_widget_get_allocation (widget, &widget_allocation); +	_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +	                       "[window %p] map-event, size %d : %d at (%d, %d)\n", +	                       widget, +	                       widget_allocation.width, widget_allocation.height, +	                       widget_allocation.x, widget_allocation.y); + +	if (priv->clear_demands_attention) +	{  #ifdef GDK_WINDOWING_X11 -      terminal_util_x11_clear_demands_attention (gtk_widget_get_window (widget)); +		terminal_util_x11_clear_demands_attention (gtk_widget_get_window (widget));  #endif -      priv->clear_demands_attention = FALSE; -    } +		priv->clear_demands_attention = FALSE; +	} -  if (map_event) -    return map_event (widget, event); +	if (map_event) +		return map_event (widget, event); -  return FALSE; +	return FALSE;  } -     +  static gboolean  terminal_window_state_event (GtkWidget            *widget,                               GdkEventWindowState  *event)  { -  gboolean (* window_state_event) (GtkWidget *, GdkEventWindowState *event) = -      GTK_WIDGET_CLASS (terminal_window_parent_class)->window_state_event; +	gboolean (* window_state_event) (GtkWidget *, GdkEventWindowState *event) = +	    GTK_WIDGET_CLASS (terminal_window_parent_class)->window_state_event; + +	if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) +	{ +		TerminalWindow *window = TERMINAL_WINDOW (widget); +		TerminalWindowPrivate *priv = window->priv; +		GtkAction *action; +		gboolean is_fullscreen; -  if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) -    { -      TerminalWindow *window = TERMINAL_WINDOW (widget); -      TerminalWindowPrivate *priv = window->priv; -      GtkAction *action; -      gboolean is_fullscreen; +		is_fullscreen = (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) != 0; -      is_fullscreen = (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) != 0; +		action = gtk_action_group_get_action (priv->action_group, "ViewFullscreen"); +		gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), is_fullscreen); -      action = gtk_action_group_get_action (priv->action_group, "ViewFullscreen"); -      gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), is_fullscreen); -   -      action = gtk_action_group_get_action (priv->action_group, "PopupLeaveFullscreen"); -      gtk_action_set_visible (action, is_fullscreen); -    } -   -  if (window_state_event) -    return window_state_event (widget, event); +		action = gtk_action_group_get_action (priv->action_group, "PopupLeaveFullscreen"); +		gtk_action_set_visible (action, is_fullscreen); +	} -  return FALSE; +	if (window_state_event) +		return window_state_event (widget, event); + +	return FALSE;  }  static void  terminal_window_window_manager_changed_cb (GdkScreen *screen, -                                           TerminalWindow *window) +        TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkAction *action; -  gboolean supports_fs; +	TerminalWindowPrivate *priv = window->priv; +	GtkAction *action; +	gboolean supports_fs; -  supports_fs = gdk_x11_screen_supports_net_wm_hint (screen, gdk_atom_intern ("_NET_WM_STATE_FULLSCREEN", FALSE)); +	supports_fs = gdk_x11_screen_supports_net_wm_hint (screen, gdk_atom_intern ("_NET_WM_STATE_FULLSCREEN", FALSE)); -  action = gtk_action_group_get_action (priv->action_group, "ViewFullscreen"); -  gtk_action_set_sensitive (action, supports_fs); +	action = gtk_action_group_get_action (priv->action_group, "ViewFullscreen"); +	gtk_action_set_sensitive (action, supports_fs);  }  #ifdef GDK_WINDOWING_X11 @@ -1632,74 +1634,74 @@ static void  terminal_window_composited_changed_cb (GdkScreen *screen,                                         TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  gboolean composited; - -  composited = gdk_screen_is_composited (screen); -  if ((composited != priv->have_argb_visual) && -      gtk_widget_get_realized (GTK_WIDGET (window))) -    { -      GtkWidget *widget = GTK_WIDGET (window); -      GdkWindow *widget_window; -      guint32 user_time; -      gboolean have_desktop; -      guint32 desktop = 0; /* Quiet GCC */ -      gboolean was_minimized; -      int x, y; - -      widget_window = gtk_widget_get_window (widget); - -      user_time = gdk_x11_display_get_user_time (gtk_widget_get_display (widget)); - -      /* If compositing changed, re-realize the window. Bug #563561 */ - -      /* Save the position; this isn't perfect, because the position -       * that gtk_window_get_position() returns is the position of the -       * frame window, and we are racing with the new window manager -       * framing our window, so we might see a funky intermediate state. -       * But at worst, we'll be off by a few pixels (the frame size). */ -      gtk_window_get_position (GTK_WINDOW (window), &x, &y); - -      /* GtkWindow tries to save whether the window was iconified -       * and restore it, but that doesn't work because of problems -       * GDK_WINDOW_STATE_ICONIFIED. For details, see comment for -       * terminal_util_x11_window_is_minimized() -       */ -      was_minimized = terminal_util_x11_window_is_minimized (widget_window); - -      /* And the desktop */ -      have_desktop = terminal_util_x11_get_net_wm_desktop (widget_window, &desktop); - -      gtk_widget_hide (widget); -      gtk_widget_unrealize (widget); - -      /* put the window back where it was before */ -      gtk_window_move (GTK_WINDOW (window), x, y); -      gtk_widget_realize (widget); - -      /* Get new GdkWindow */ -      widget_window = gtk_widget_get_window (widget); - -      gdk_x11_window_set_user_time (widget_window, user_time); - -      if (was_minimized) -	gtk_window_iconify (GTK_WINDOW (window)); -      else -	gtk_window_deiconify (GTK_WINDOW (window)); - -      gtk_widget_show (widget); -      if (have_desktop) -        terminal_util_x11_set_net_wm_desktop (widget_window, desktop); - -      /* Mapping the window is likely to have set the "demands-attention" state. -       * In particular, Marco will always set the state if a window is mapped, -       * is not given the focus (because of an old user time), and is covered -       * by some other window. We have no way of preventing this, so we just -       * wait for our window to be mapped, and then tell the window manager -       * to turn off the bit. If it wasn't set, no harm. -       */ -      priv->clear_demands_attention = TRUE; -    } +	TerminalWindowPrivate *priv = window->priv; +	gboolean composited; + +	composited = gdk_screen_is_composited (screen); +	if ((composited != priv->have_argb_visual) && +	        gtk_widget_get_realized (GTK_WIDGET (window))) +	{ +		GtkWidget *widget = GTK_WIDGET (window); +		GdkWindow *widget_window; +		guint32 user_time; +		gboolean have_desktop; +		guint32 desktop = 0; /* Quiet GCC */ +		gboolean was_minimized; +		int x, y; + +		widget_window = gtk_widget_get_window (widget); + +		user_time = gdk_x11_display_get_user_time (gtk_widget_get_display (widget)); + +		/* If compositing changed, re-realize the window. Bug #563561 */ + +		/* Save the position; this isn't perfect, because the position +		 * that gtk_window_get_position() returns is the position of the +		 * frame window, and we are racing with the new window manager +		 * framing our window, so we might see a funky intermediate state. +		 * But at worst, we'll be off by a few pixels (the frame size). */ +		gtk_window_get_position (GTK_WINDOW (window), &x, &y); + +		/* GtkWindow tries to save whether the window was iconified +		 * and restore it, but that doesn't work because of problems +		 * GDK_WINDOW_STATE_ICONIFIED. For details, see comment for +		 * terminal_util_x11_window_is_minimized() +		 */ +		was_minimized = terminal_util_x11_window_is_minimized (widget_window); + +		/* And the desktop */ +		have_desktop = terminal_util_x11_get_net_wm_desktop (widget_window, &desktop); + +		gtk_widget_hide (widget); +		gtk_widget_unrealize (widget); + +		/* put the window back where it was before */ +		gtk_window_move (GTK_WINDOW (window), x, y); +		gtk_widget_realize (widget); + +		/* Get new GdkWindow */ +		widget_window = gtk_widget_get_window (widget); + +		gdk_x11_window_set_user_time (widget_window, user_time); + +		if (was_minimized) +			gtk_window_iconify (GTK_WINDOW (window)); +		else +			gtk_window_deiconify (GTK_WINDOW (window)); + +		gtk_widget_show (widget); +		if (have_desktop) +			terminal_util_x11_set_net_wm_desktop (widget_window, desktop); + +		/* Mapping the window is likely to have set the "demands-attention" state. +		 * In particular, Marco will always set the state if a window is mapped, +		 * is not given the focus (because of an old user time), and is covered +		 * by some other window. We have no way of preventing this, so we just +		 * wait for our window to be mapped, and then tell the window manager +		 * to turn off the bit. If it wasn't set, no harm. +		 */ +		priv->clear_demands_attention = TRUE; +	}  }  #endif /* GDK_WINDOWING_X11 */ @@ -1708,515 +1710,613 @@ static void  terminal_window_screen_update (TerminalWindow *window,                                 GdkScreen *screen)  { -  TerminalApp *app; +	TerminalApp *app; -  terminal_window_window_manager_changed_cb (screen, window); -  g_signal_connect (screen, "window-manager-changed", -                    G_CALLBACK (terminal_window_window_manager_changed_cb), window); +	terminal_window_window_manager_changed_cb (screen, window); +	g_signal_connect (screen, "window-manager-changed", +	                  G_CALLBACK (terminal_window_window_manager_changed_cb), window);  #ifdef GDK_WINDOWING_X11 -  g_signal_connect (screen, "composited-changed", -                    G_CALLBACK (terminal_window_composited_changed_cb), window); +	g_signal_connect (screen, "composited-changed", +	                  G_CALLBACK (terminal_window_composited_changed_cb), window);  #endif -  if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (screen), "GT::HasSettingsConnection"))) -    return; +	if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (screen), "GT::HasSettingsConnection"))) +		return; -  g_object_set_data_full (G_OBJECT (screen), "GT::HasSettingsConnection", -                          GINT_TO_POINTER (TRUE), -                          (GDestroyNotify) app_setting_notify_destroy_cb); +	g_object_set_data_full (G_OBJECT (screen), "GT::HasSettingsConnection", +	                        GINT_TO_POINTER (TRUE), +	                        (GDestroyNotify) app_setting_notify_destroy_cb); -  app = terminal_app_get (); -  app_setting_notify_cb (app, NULL, screen); -  g_signal_connect (app, "notify::" TERMINAL_APP_ENABLE_MNEMONICS, -                    G_CALLBACK (app_setting_notify_cb), screen); -  g_signal_connect (app, "notify::" TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, -                    G_CALLBACK (app_setting_notify_cb), screen); +	app = terminal_app_get (); +	app_setting_notify_cb (app, NULL, screen); +	g_signal_connect (app, "notify::" TERMINAL_APP_ENABLE_MNEMONICS, +	                  G_CALLBACK (app_setting_notify_cb), screen); +	g_signal_connect (app, "notify::" TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, +	                  G_CALLBACK (app_setting_notify_cb), screen);  }  static void  terminal_window_screen_changed (GtkWidget *widget,                                  GdkScreen *previous_screen)  { -  TerminalWindow *window = TERMINAL_WINDOW (widget); -  void (* screen_changed) (GtkWidget *, GdkScreen *) = -    GTK_WIDGET_CLASS (terminal_window_parent_class)->screen_changed; -  GdkScreen *screen; - -  if (screen_changed) -    screen_changed (widget, previous_screen); - -  screen = gtk_widget_get_screen (widget); -  if (previous_screen == screen) -    return; - -  if (previous_screen) -    { -      g_signal_handlers_disconnect_by_func (previous_screen, -                                            G_CALLBACK (terminal_window_window_manager_changed_cb), -                                            window); +	TerminalWindow *window = TERMINAL_WINDOW (widget); +	void (* screen_changed) (GtkWidget *, GdkScreen *) = +	    GTK_WIDGET_CLASS (terminal_window_parent_class)->screen_changed; +	GdkScreen *screen; + +	if (screen_changed) +		screen_changed (widget, previous_screen); + +	screen = gtk_widget_get_screen (widget); +	if (previous_screen == screen) +		return; + +	if (previous_screen) +	{ +		g_signal_handlers_disconnect_by_func (previous_screen, +		                                      G_CALLBACK (terminal_window_window_manager_changed_cb), +		                                      window);  #ifdef GDK_WINDOWING_X11 -      g_signal_handlers_disconnect_by_func (previous_screen, -                                            G_CALLBACK (terminal_window_composited_changed_cb), -                                            window); +		g_signal_handlers_disconnect_by_func (previous_screen, +		                                      G_CALLBACK (terminal_window_composited_changed_cb), +		                                      window);  #endif -    } +	} -  if (!screen) -    return; +	if (!screen) +		return; -  terminal_window_screen_update (window, screen); +	terminal_window_screen_update (window, screen);  }  static void  terminal_window_profile_list_changed_cb (TerminalApp *app, -                                         TerminalWindow *window) +        TerminalWindow *window)  { -  terminal_window_update_set_profile_menu (window); -  terminal_window_update_new_terminal_menus (window); +	terminal_window_update_set_profile_menu (window); +	terminal_window_update_new_terminal_menus (window);  }  static void  terminal_window_encoding_list_changed_cb (TerminalApp *app, -                                          TerminalWindow *window) +        TerminalWindow *window)  { -  terminal_window_update_encoding_menu (window); +	terminal_window_update_encoding_menu (window);  }  static void  terminal_window_init (TerminalWindow *window)  { -  const GtkActionEntry menu_entries[] = -    { -      /* Toplevel */ -      { "File", NULL, N_("_File") }, -      { "FileNewWindowProfiles", STOCK_NEW_WINDOW, N_("Open _Terminal")}, -      { "FileNewTabProfiles", STOCK_NEW_TAB, N_("Open Ta_b") }, -      { "Edit", NULL, N_("_Edit") }, -      { "View", NULL, N_("_View") }, -      { "Search", NULL, N_("_Search") }, -      { "Terminal", NULL, N_("_Terminal") }, -      { "Tabs", NULL, N_("Ta_bs") }, -      { "Help", NULL, N_("_Help") }, -      { "Popup", NULL, NULL }, -      { "NotebookPopup", NULL, "" }, - -      /* File menu */ -      { "FileNewWindow", STOCK_NEW_WINDOW, N_("Open _Terminal"), "<shift><control>N", -        NULL, -        G_CALLBACK (file_new_window_callback) }, -      { "FileNewTab", STOCK_NEW_TAB, N_("Open Ta_b"), "<shift><control>T", -        NULL, -        G_CALLBACK (file_new_tab_callback) }, -      { "FileNewProfile", GTK_STOCK_OPEN, N_("New _Profile…"), "", -        NULL, -        G_CALLBACK (file_new_profile_callback) }, -      { "FileSaveContents", GTK_STOCK_SAVE, N_("_Save Contents"), "", -        NULL, -        G_CALLBACK (file_save_contents_callback) }, -      { "FileCloseTab", GTK_STOCK_CLOSE, N_("C_lose Tab"), "<shift><control>W", -        NULL, -        G_CALLBACK (file_close_tab_callback) }, -      { "FileCloseWindow", GTK_STOCK_CLOSE, N_("_Close Window"), "<shift><control>Q", -        NULL, -        G_CALLBACK (file_close_window_callback) }, - -      /* Edit menu */ -      { "EditCopy", GTK_STOCK_COPY, NULL, "<shift><control>C", -        NULL, -        G_CALLBACK (edit_copy_callback) }, -      { "EditPaste", GTK_STOCK_PASTE, NULL, "<shift><control>V", -        NULL, -        G_CALLBACK (edit_paste_callback) }, -      { "EditPasteURIPaths", GTK_STOCK_PASTE, N_("Paste _Filenames"), "", -        NULL, -        G_CALLBACK (edit_paste_callback) }, -      { "EditSelectAll", GTK_STOCK_SELECT_ALL, NULL, NULL, -        NULL, -        G_CALLBACK (edit_select_all_callback) }, -      { "EditProfiles", NULL, N_("P_rofiles…"), NULL, -        NULL, -        G_CALLBACK (edit_profiles_callback) }, -      { "EditKeybindings", NULL, N_("_Keyboard Shortcuts…"), NULL, -        NULL, -        G_CALLBACK (edit_keybindings_callback) }, -      { "EditCurrentProfile", NULL, N_("Pr_ofile Preferences"), NULL, -        NULL, -        G_CALLBACK (edit_current_profile_callback) }, - -      /* View menu */ -      { "ViewZoomIn", GTK_STOCK_ZOOM_IN, NULL, "<control>plus", -        NULL, -        G_CALLBACK (view_zoom_in_callback) }, -      { "ViewZoomOut", GTK_STOCK_ZOOM_OUT, NULL, "<control>minus", -        NULL, -        G_CALLBACK (view_zoom_out_callback) }, -      { "ViewZoom100", GTK_STOCK_ZOOM_100, NULL, "<control>0", -        NULL, -        G_CALLBACK (view_zoom_normal_callback) }, - -      /* Search menu */ -      { "SearchFind", GTK_STOCK_FIND, N_("_Find..."), "<shift><control>F", -	NULL, -	G_CALLBACK (search_find_callback) }, -      { "SearchFindNext", NULL, N_("Find Ne_xt"), "<shift><control>H", -	NULL, -	G_CALLBACK (search_find_next_callback) }, -      { "SearchFindPrevious", NULL, N_("Find Pre_vious"), "<shift><control>G", -	NULL, -	G_CALLBACK (search_find_prev_callback) }, -      { "SearchClearHighlight", NULL, N_("_Clear Highlight"), "<shift><control>J", -	NULL, -	G_CALLBACK (search_clear_highlight_callback) }, +	const GtkActionEntry menu_entries[] = +	{ +		/* Toplevel */ +		{ "File", NULL, N_("_File") }, +		{ "FileNewWindowProfiles", STOCK_NEW_WINDOW, N_("Open _Terminal")}, +		{ "FileNewTabProfiles", STOCK_NEW_TAB, N_("Open Ta_b") }, +		{ "Edit", NULL, N_("_Edit") }, +		{ "View", NULL, N_("_View") }, +		{ "Search", NULL, N_("_Search") }, +		{ "Terminal", NULL, N_("_Terminal") }, +		{ "Tabs", NULL, N_("Ta_bs") }, +		{ "Help", NULL, N_("_Help") }, +		{ "Popup", NULL, NULL }, +		{ "NotebookPopup", NULL, "" }, + +		/* File menu */ +		{ +			"FileNewWindow", STOCK_NEW_WINDOW, N_("Open _Terminal"), "<shift><control>N", +			NULL, +			G_CALLBACK (file_new_window_callback) +		}, +		{ +			"FileNewTab", STOCK_NEW_TAB, N_("Open Ta_b"), "<shift><control>T", +			NULL, +			G_CALLBACK (file_new_tab_callback) +		}, +		{ +			"FileNewProfile", GTK_STOCK_OPEN, N_("New _Profile…"), "", +			NULL, +			G_CALLBACK (file_new_profile_callback) +		}, +		{ +			"FileSaveContents", GTK_STOCK_SAVE, N_("_Save Contents"), "", +			NULL, +			G_CALLBACK (file_save_contents_callback) +		}, +		{ +			"FileCloseTab", GTK_STOCK_CLOSE, N_("C_lose Tab"), "<shift><control>W", +			NULL, +			G_CALLBACK (file_close_tab_callback) +		}, +		{ +			"FileCloseWindow", GTK_STOCK_CLOSE, N_("_Close Window"), "<shift><control>Q", +			NULL, +			G_CALLBACK (file_close_window_callback) +		}, + +		/* Edit menu */ +		{ +			"EditCopy", GTK_STOCK_COPY, NULL, "<shift><control>C", +			NULL, +			G_CALLBACK (edit_copy_callback) +		}, +		{ +			"EditPaste", GTK_STOCK_PASTE, NULL, "<shift><control>V", +			NULL, +			G_CALLBACK (edit_paste_callback) +		}, +		{ +			"EditPasteURIPaths", GTK_STOCK_PASTE, N_("Paste _Filenames"), "", +			NULL, +			G_CALLBACK (edit_paste_callback) +		}, +		{ +			"EditSelectAll", GTK_STOCK_SELECT_ALL, NULL, NULL, +			NULL, +			G_CALLBACK (edit_select_all_callback) +		}, +		{ +			"EditProfiles", NULL, N_("P_rofiles…"), NULL, +			NULL, +			G_CALLBACK (edit_profiles_callback) +		}, +		{ +			"EditKeybindings", NULL, N_("_Keyboard Shortcuts…"), NULL, +			NULL, +			G_CALLBACK (edit_keybindings_callback) +		}, +		{ +			"EditCurrentProfile", NULL, N_("Pr_ofile Preferences"), NULL, +			NULL, +			G_CALLBACK (edit_current_profile_callback) +		}, + +		/* View menu */ +		{ +			"ViewZoomIn", GTK_STOCK_ZOOM_IN, NULL, "<control>plus", +			NULL, +			G_CALLBACK (view_zoom_in_callback) +		}, +		{ +			"ViewZoomOut", GTK_STOCK_ZOOM_OUT, NULL, "<control>minus", +			NULL, +			G_CALLBACK (view_zoom_out_callback) +		}, +		{ +			"ViewZoom100", GTK_STOCK_ZOOM_100, NULL, "<control>0", +			NULL, +			G_CALLBACK (view_zoom_normal_callback) +		}, + +		/* Search menu */ +		{ +			"SearchFind", GTK_STOCK_FIND, N_("_Find..."), "<shift><control>F", +			NULL, +			G_CALLBACK (search_find_callback) +		}, +		{ +			"SearchFindNext", NULL, N_("Find Ne_xt"), "<shift><control>H", +			NULL, +			G_CALLBACK (search_find_next_callback) +		}, +		{ +			"SearchFindPrevious", NULL, N_("Find Pre_vious"), "<shift><control>G", +			NULL, +			G_CALLBACK (search_find_prev_callback) +		}, +		{ +			"SearchClearHighlight", NULL, N_("_Clear Highlight"), "<shift><control>J", +			NULL, +			G_CALLBACK (search_clear_highlight_callback) +		},  #if 0 -      { "SearchGoToLine", GTK_STOCK_JUMP_TO, N_("Go to _Line..."), "<shift><control>I", -	NULL, -	G_CALLBACK (search_goto_line_callback) }, -      { "SearchIncrementalSearch", GTK_STOCK_FIND, N_("_Incremental Search..."), "<shift><control>K", -	NULL, -	G_CALLBACK (search_incremental_search_callback) }, +		{ +			"SearchGoToLine", GTK_STOCK_JUMP_TO, N_("Go to _Line..."), "<shift><control>I", +			NULL, +			G_CALLBACK (search_goto_line_callback) +		}, +		{ +			"SearchIncrementalSearch", GTK_STOCK_FIND, N_("_Incremental Search..."), "<shift><control>K", +			NULL, +			G_CALLBACK (search_incremental_search_callback) +		},  #endif -      /* Terminal menu */ -      { "TerminalProfiles", NULL, N_("Change _Profile") }, -      { "TerminalSetTitle", NULL, N_("_Set Title…"), NULL, -        NULL, -        G_CALLBACK (terminal_set_title_callback) }, -      { "TerminalSetEncoding", NULL, N_("Set _Character Encoding") }, -      { "TerminalReset", NULL, N_("_Reset"), NULL, -        NULL, -        G_CALLBACK (terminal_reset_callback) }, -      { "TerminalResetClear", NULL, N_("Reset and C_lear"), NULL, -        NULL, -        G_CALLBACK (terminal_reset_clear_callback) }, - -      /* Terminal/Encodings menu */ -      { "TerminalAddEncoding", NULL, N_("_Add or Remove…"), NULL, -        NULL, -        G_CALLBACK (terminal_add_encoding_callback) }, - -      /* Tabs menu */ -      { "TabsPrevious", NULL, N_("_Previous Tab"), "<control>Page_Up", -        NULL, -        G_CALLBACK (tabs_next_or_previous_tab_cb) }, -      { "TabsNext", NULL, N_("_Next Tab"), "<control>Page_Down", -        NULL, -        G_CALLBACK (tabs_next_or_previous_tab_cb) }, -      { "TabsMoveLeft", NULL, N_("Move Tab _Left"), "<shift><control>Page_Up", -        NULL, -        G_CALLBACK (tabs_move_left_callback) }, -      { "TabsMoveRight", NULL, N_("Move Tab _Right"), "<shift><control>Page_Down", -        NULL, -        G_CALLBACK (tabs_move_right_callback) }, -      { "TabsDetach", NULL, N_("_Detach tab"), NULL, -        NULL, -        G_CALLBACK (tabs_detach_tab_callback) }, - -      /* Help menu */ -      { "HelpContents", GTK_STOCK_HELP, N_("_Contents"), "F1", -        NULL, -        G_CALLBACK (help_contents_callback) }, -      { "HelpAbout", GTK_STOCK_ABOUT, N_("_About"), NULL, -        NULL, -        G_CALLBACK (help_about_callback) }, - -      /* Popup menu */ -      { "PopupSendEmail", NULL, N_("_Send Mail To…"), NULL, -        NULL, -        G_CALLBACK (popup_open_url_callback) }, -      { "PopupCopyEmailAddress", NULL, N_("_Copy E-mail Address"), NULL, -        NULL, -        G_CALLBACK (popup_copy_url_callback) }, -      { "PopupCall", NULL, N_("C_all To…"), NULL, -        NULL, -        G_CALLBACK (popup_open_url_callback) }, -      { "PopupCopyCallAddress", NULL, N_("_Copy Call Address"), NULL, -        NULL, -        G_CALLBACK (popup_copy_url_callback) }, -      { "PopupOpenLink", NULL, N_("_Open Link"), NULL, -        NULL, -        G_CALLBACK (popup_open_url_callback) }, -      { "PopupCopyLinkAddress", NULL, N_("_Copy Link Address"), NULL, -        NULL, -        G_CALLBACK (popup_copy_url_callback) }, -      { "PopupTerminalProfiles", NULL, N_("P_rofiles") }, -      { "PopupCopy", GTK_STOCK_COPY, NULL, "", -        NULL, -        G_CALLBACK (edit_copy_callback) }, -      { "PopupPaste", GTK_STOCK_PASTE, NULL, "", -        NULL, -        G_CALLBACK (edit_paste_callback) }, -      { "PopupPasteURIPaths", GTK_STOCK_PASTE, N_("Paste _Filenames"), "", -        NULL, -        G_CALLBACK (edit_paste_callback) }, -      { "PopupNewTerminal", NULL, N_("Open _Terminal"), NULL, -        NULL, -        G_CALLBACK (file_new_window_callback) }, -      { "PopupNewTab", NULL, N_("Open Ta_b"), NULL, -        NULL, -        G_CALLBACK (file_new_tab_callback) }, -      { "PopupCloseWindow", NULL, N_("C_lose Window"), NULL, -        NULL, -        G_CALLBACK (file_close_window_callback) }, -      { "PopupCloseTab", NULL, N_("C_lose Tab"), NULL, -        NULL, -        G_CALLBACK (file_close_tab_callback) }, -      { "PopupLeaveFullscreen", NULL, N_("L_eave Full Screen"), NULL, -        NULL, -        G_CALLBACK (popup_leave_fullscreen_callback) }, -      { "PopupInputMethods", NULL, N_("_Input Methods") } -    }; -   -  const GtkToggleActionEntry toggle_menu_entries[] = -    { -      /* View Menu */ -      { "ViewMenubar", NULL, N_("Show _Menubar"), NULL, -        NULL, -        G_CALLBACK (view_menubar_toggled_callback), -        FALSE }, -      { "ViewFullscreen", NULL, N_("_Full Screen"), NULL, -        NULL, -        G_CALLBACK (view_fullscreen_toggled_callback), -        FALSE } -    }; -  TerminalWindowPrivate *priv; -  TerminalApp *app; -  GtkActionGroup *action_group; -  GtkAction *action; -  GtkUIManager *manager; -  GtkWidget *main_vbox; -  GError *error; -  GtkWindowGroup *window_group; -  GtkAccelGroup *accel_group; - -  priv = window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window, TERMINAL_TYPE_WINDOW, TerminalWindowPrivate); - -  g_signal_connect (G_OBJECT (window), "delete_event", -                    G_CALLBACK(terminal_window_delete_event), -                    NULL); +		/* Terminal menu */ +		{ "TerminalProfiles", NULL, N_("Change _Profile") }, +		{ +			"TerminalSetTitle", NULL, N_("_Set Title…"), NULL, +			NULL, +			G_CALLBACK (terminal_set_title_callback) +		}, +		{ "TerminalSetEncoding", NULL, N_("Set _Character Encoding") }, +		{ +			"TerminalReset", NULL, N_("_Reset"), NULL, +			NULL, +			G_CALLBACK (terminal_reset_callback) +		}, +		{ +			"TerminalResetClear", NULL, N_("Reset and C_lear"), NULL, +			NULL, +			G_CALLBACK (terminal_reset_clear_callback) +		}, + +		/* Terminal/Encodings menu */ +		{ +			"TerminalAddEncoding", NULL, N_("_Add or Remove…"), NULL, +			NULL, +			G_CALLBACK (terminal_add_encoding_callback) +		}, + +		/* Tabs menu */ +		{ +			"TabsPrevious", NULL, N_("_Previous Tab"), "<control>Page_Up", +			NULL, +			G_CALLBACK (tabs_next_or_previous_tab_cb) +		}, +		{ +			"TabsNext", NULL, N_("_Next Tab"), "<control>Page_Down", +			NULL, +			G_CALLBACK (tabs_next_or_previous_tab_cb) +		}, +		{ +			"TabsMoveLeft", NULL, N_("Move Tab _Left"), "<shift><control>Page_Up", +			NULL, +			G_CALLBACK (tabs_move_left_callback) +		}, +		{ +			"TabsMoveRight", NULL, N_("Move Tab _Right"), "<shift><control>Page_Down", +			NULL, +			G_CALLBACK (tabs_move_right_callback) +		}, +		{ +			"TabsDetach", NULL, N_("_Detach tab"), NULL, +			NULL, +			G_CALLBACK (tabs_detach_tab_callback) +		}, + +		/* Help menu */ +		{ +			"HelpContents", GTK_STOCK_HELP, N_("_Contents"), "F1", +			NULL, +			G_CALLBACK (help_contents_callback) +		}, +		{ +			"HelpAbout", GTK_STOCK_ABOUT, N_("_About"), NULL, +			NULL, +			G_CALLBACK (help_about_callback) +		}, + +		/* Popup menu */ +		{ +			"PopupSendEmail", NULL, N_("_Send Mail To…"), NULL, +			NULL, +			G_CALLBACK (popup_open_url_callback) +		}, +		{ +			"PopupCopyEmailAddress", NULL, N_("_Copy E-mail Address"), NULL, +			NULL, +			G_CALLBACK (popup_copy_url_callback) +		}, +		{ +			"PopupCall", NULL, N_("C_all To…"), NULL, +			NULL, +			G_CALLBACK (popup_open_url_callback) +		}, +		{ +			"PopupCopyCallAddress", NULL, N_("_Copy Call Address"), NULL, +			NULL, +			G_CALLBACK (popup_copy_url_callback) +		}, +		{ +			"PopupOpenLink", NULL, N_("_Open Link"), NULL, +			NULL, +			G_CALLBACK (popup_open_url_callback) +		}, +		{ +			"PopupCopyLinkAddress", NULL, N_("_Copy Link Address"), NULL, +			NULL, +			G_CALLBACK (popup_copy_url_callback) +		}, +		{ "PopupTerminalProfiles", NULL, N_("P_rofiles") }, +		{ +			"PopupCopy", GTK_STOCK_COPY, NULL, "", +			NULL, +			G_CALLBACK (edit_copy_callback) +		}, +		{ +			"PopupPaste", GTK_STOCK_PASTE, NULL, "", +			NULL, +			G_CALLBACK (edit_paste_callback) +		}, +		{ +			"PopupPasteURIPaths", GTK_STOCK_PASTE, N_("Paste _Filenames"), "", +			NULL, +			G_CALLBACK (edit_paste_callback) +		}, +		{ +			"PopupNewTerminal", NULL, N_("Open _Terminal"), NULL, +			NULL, +			G_CALLBACK (file_new_window_callback) +		}, +		{ +			"PopupNewTab", NULL, N_("Open Ta_b"), NULL, +			NULL, +			G_CALLBACK (file_new_tab_callback) +		}, +		{ +			"PopupCloseWindow", NULL, N_("C_lose Window"), NULL, +			NULL, +			G_CALLBACK (file_close_window_callback) +		}, +		{ +			"PopupCloseTab", NULL, N_("C_lose Tab"), NULL, +			NULL, +			G_CALLBACK (file_close_tab_callback) +		}, +		{ +			"PopupLeaveFullscreen", NULL, N_("L_eave Full Screen"), NULL, +			NULL, +			G_CALLBACK (popup_leave_fullscreen_callback) +		}, +		{ "PopupInputMethods", NULL, N_("_Input Methods") } +	}; + +	const GtkToggleActionEntry toggle_menu_entries[] = +	{ +		/* View Menu */ +		{ +			"ViewMenubar", NULL, N_("Show _Menubar"), NULL, +			NULL, +			G_CALLBACK (view_menubar_toggled_callback), +			FALSE +		}, +		{ +			"ViewFullscreen", NULL, N_("_Full Screen"), NULL, +			NULL, +			G_CALLBACK (view_fullscreen_toggled_callback), +			FALSE +		} +	}; +	TerminalWindowPrivate *priv; +	TerminalApp *app; +	GtkActionGroup *action_group; +	GtkAction *action; +	GtkUIManager *manager; +	GtkWidget *main_vbox; +	GError *error; +	GtkWindowGroup *window_group; +	GtkAccelGroup *accel_group; + +	priv = window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window, TERMINAL_TYPE_WINDOW, TerminalWindowPrivate); + +	g_signal_connect (G_OBJECT (window), "delete_event", +	                  G_CALLBACK(terminal_window_delete_event), +	                  NULL);  #ifdef MATE_ENABLE_DEBUG -  _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_GEOMETRY) -    { -      g_signal_connect_after (window, "size-request", G_CALLBACK (terminal_window_size_request_cb), NULL); -      g_signal_connect_after (window, "size-allocate", G_CALLBACK (terminal_window_size_allocate_cb), NULL); -    } +	_TERMINAL_DEBUG_IF (TERMINAL_DEBUG_GEOMETRY) +	{ +		g_signal_connect_after (window, "size-request", G_CALLBACK (terminal_window_size_request_cb), NULL); +		g_signal_connect_after (window, "size-allocate", G_CALLBACK (terminal_window_size_allocate_cb), NULL); +	}  #endif -  gtk_window_set_title (GTK_WINDOW (window), _("Terminal")); - -  priv->active_screen = NULL; -  priv->menubar_visible = FALSE; -   -  main_vbox = gtk_vbox_new (FALSE, 0); -  gtk_container_add (GTK_CONTAINER (window), main_vbox); -  gtk_widget_show (main_vbox); - -  priv->notebook = gtk_notebook_new (); -  gtk_notebook_set_scrollable (GTK_NOTEBOOK (priv->notebook), TRUE); -  gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->notebook), FALSE); -  gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE); -  gtk_notebook_set_group (GTK_NOTEBOOK (priv->notebook), GUINT_TO_POINTER (1)); -  gtk_notebook_set_scrollable (GTK_NOTEBOOK (priv->notebook), -                               TRUE); -  g_signal_connect (priv->notebook, "button-press-event", -                    G_CALLBACK (notebook_button_press_cb), window);	 -  g_signal_connect (priv->notebook, "popup-menu", -                    G_CALLBACK (notebook_popup_menu_cb), window);	 -  g_signal_connect_after (priv->notebook, "switch-page", -                          G_CALLBACK (notebook_page_selected_callback), window); -  g_signal_connect_after (priv->notebook, "page-added", -                          G_CALLBACK (notebook_page_added_callback), window); -  g_signal_connect_after (priv->notebook, "page-removed", -                          G_CALLBACK (notebook_page_removed_callback), window); -  g_signal_connect_data (priv->notebook, "page-reordered", -                         G_CALLBACK (terminal_window_update_tabs_menu_sensitivity), -                         window, NULL, G_CONNECT_SWAPPED | G_CONNECT_AFTER); -   -  gtk_box_pack_end (GTK_BOX (main_vbox), priv->notebook, TRUE, TRUE, 0); -  gtk_widget_show (priv->notebook); - -  priv->old_char_width = -1; -  priv->old_char_height = -1; -  priv->old_geometry_widget = NULL; -   -  /* Create the UI manager */ -  manager = priv->ui_manager = gtk_ui_manager_new (); - -  accel_group = gtk_ui_manager_get_accel_group (manager); -  gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); -  /* Workaround for bug #453193, bug #138609 and bug #559728 */ -  g_signal_connect_after (accel_group, "accel-activate", -                          G_CALLBACK (terminal_window_accel_activate_cb), window); - -  /* Create the actions */ -  /* Note that this action group name is used in terminal-accels.c; do not change it */ -  priv->action_group = action_group = gtk_action_group_new ("Main"); -  gtk_action_group_set_translation_domain (action_group, NULL); -  gtk_action_group_add_actions (action_group, menu_entries, -                                G_N_ELEMENTS (menu_entries), window); -  gtk_action_group_add_toggle_actions (action_group, -                                       toggle_menu_entries, -                                       G_N_ELEMENTS (toggle_menu_entries), -                                       window); -  gtk_ui_manager_insert_action_group (manager, action_group, 0); -  g_object_unref (action_group); - -  action = gtk_action_group_get_action (action_group, "Edit"); -  g_signal_connect (action, "activate", -                    G_CALLBACK (edit_menu_activate_callback), window); - -  /* Set this action invisible so the Edit menu doesn't flash the first -   * time it's shown and there's no text/uri-list on the clipboard. -   */ -  action = gtk_action_group_get_action (priv->action_group, "EditPasteURIPaths"); -  gtk_action_set_visible (action, FALSE); - -  /* Idem for this action, since the window is not fullscreen. */ -  action = gtk_action_group_get_action (priv->action_group, "PopupLeaveFullscreen"); -  gtk_action_set_visible (action, FALSE); +	gtk_window_set_title (GTK_WINDOW (window), _("Terminal")); + +	priv->active_screen = NULL; +	priv->menubar_visible = FALSE; + +	main_vbox = gtk_vbox_new (FALSE, 0); +	gtk_container_add (GTK_CONTAINER (window), main_vbox); +	gtk_widget_show (main_vbox); + +	priv->notebook = gtk_notebook_new (); +	gtk_notebook_set_scrollable (GTK_NOTEBOOK (priv->notebook), TRUE); +	gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->notebook), FALSE); +	gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE); +	gtk_notebook_set_group (GTK_NOTEBOOK (priv->notebook), GUINT_TO_POINTER (1)); +	gtk_notebook_set_scrollable (GTK_NOTEBOOK (priv->notebook), +	                             TRUE); +	g_signal_connect (priv->notebook, "button-press-event", +	                  G_CALLBACK (notebook_button_press_cb), window); +	g_signal_connect (priv->notebook, "popup-menu", +	                  G_CALLBACK (notebook_popup_menu_cb), window); +	g_signal_connect_after (priv->notebook, "switch-page", +	                        G_CALLBACK (notebook_page_selected_callback), window); +	g_signal_connect_after (priv->notebook, "page-added", +	                        G_CALLBACK (notebook_page_added_callback), window); +	g_signal_connect_after (priv->notebook, "page-removed", +	                        G_CALLBACK (notebook_page_removed_callback), window); +	g_signal_connect_data (priv->notebook, "page-reordered", +	                       G_CALLBACK (terminal_window_update_tabs_menu_sensitivity), +	                       window, NULL, G_CONNECT_SWAPPED | G_CONNECT_AFTER); + +	gtk_box_pack_end (GTK_BOX (main_vbox), priv->notebook, TRUE, TRUE, 0); +	gtk_widget_show (priv->notebook); + +	priv->old_char_width = -1; +	priv->old_char_height = -1; +	priv->old_geometry_widget = NULL; + +	/* Create the UI manager */ +	manager = priv->ui_manager = gtk_ui_manager_new (); + +	accel_group = gtk_ui_manager_get_accel_group (manager); +	gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); +	/* Workaround for bug #453193, bug #138609 and bug #559728 */ +	g_signal_connect_after (accel_group, "accel-activate", +	                        G_CALLBACK (terminal_window_accel_activate_cb), window); + +	/* Create the actions */ +	/* Note that this action group name is used in terminal-accels.c; do not change it */ +	priv->action_group = action_group = gtk_action_group_new ("Main"); +	gtk_action_group_set_translation_domain (action_group, NULL); +	gtk_action_group_add_actions (action_group, menu_entries, +	                              G_N_ELEMENTS (menu_entries), window); +	gtk_action_group_add_toggle_actions (action_group, +	                                     toggle_menu_entries, +	                                     G_N_ELEMENTS (toggle_menu_entries), +	                                     window); +	gtk_ui_manager_insert_action_group (manager, action_group, 0); +	g_object_unref (action_group); + +	action = gtk_action_group_get_action (action_group, "Edit"); +	g_signal_connect (action, "activate", +	                  G_CALLBACK (edit_menu_activate_callback), window); + +	/* Set this action invisible so the Edit menu doesn't flash the first +	 * time it's shown and there's no text/uri-list on the clipboard. +	 */ +	action = gtk_action_group_get_action (priv->action_group, "EditPasteURIPaths"); +	gtk_action_set_visible (action, FALSE); + +	/* Idem for this action, since the window is not fullscreen. */ +	action = gtk_action_group_get_action (priv->action_group, "PopupLeaveFullscreen"); +	gtk_action_set_visible (action, FALSE);  #ifndef ENABLE_SAVE -  action = gtk_action_group_get_action (priv->action_group, "FileSaveContents"); -  gtk_action_set_visible (action, FALSE); +	action = gtk_action_group_get_action (priv->action_group, "FileSaveContents"); +	gtk_action_set_visible (action, FALSE);  #endif -   -  /* Load the UI */ -  error = NULL; -  priv->ui_id = gtk_ui_manager_add_ui_from_file (manager, -                                                 TERM_PKGDATADIR G_DIR_SEPARATOR_S "terminal.xml", -                                                 &error); -  if (error) -    { -      g_printerr ("Failed to load UI: %s\n", error->message); -      g_error_free (error); -    } -  priv->menubar = gtk_ui_manager_get_widget (manager, "/menubar"); -  gtk_box_pack_start (GTK_BOX (main_vbox), -		      priv->menubar, -		      FALSE, FALSE, 0); - -  /* Add tabs menu */ -  priv->tabs_menu = terminal_tabs_menu_new (window); - -  app = terminal_app_get (); -  terminal_window_profile_list_changed_cb (app, window); -  g_signal_connect (app, "profile-list-changed", -                    G_CALLBACK (terminal_window_profile_list_changed_cb), window); -   -  terminal_window_encoding_list_changed_cb (app, window); -  g_signal_connect (app, "encoding-list-changed", -                    G_CALLBACK (terminal_window_encoding_list_changed_cb), window); - -  terminal_window_set_menubar_visible (window, TRUE); -  priv->use_default_menubar_visibility = TRUE; - -  terminal_window_update_size_to_menu (window); - -  /* We have to explicitly call this, since screen-changed is NOT -   * emitted for the toplevel the first time! -   */ -  terminal_window_screen_update (window, gtk_widget_get_screen (GTK_WIDGET (window))); - -  window_group = gtk_window_group_new (); -  gtk_window_group_add_window (window_group, GTK_WINDOW (window)); -  g_object_unref (window_group); - -  terminal_util_set_unique_role (GTK_WINDOW (window), "mate-terminal-window"); +	/* Load the UI */ +	error = NULL; +	priv->ui_id = gtk_ui_manager_add_ui_from_file (manager, +	              TERM_PKGDATADIR G_DIR_SEPARATOR_S "terminal.xml", +	              &error); +	if (error) +	{ +		g_printerr ("Failed to load UI: %s\n", error->message); +		g_error_free (error); +	} + +	priv->menubar = gtk_ui_manager_get_widget (manager, "/menubar"); +	gtk_box_pack_start (GTK_BOX (main_vbox), +	                    priv->menubar, +	                    FALSE, FALSE, 0); + +	/* Add tabs menu */ +	priv->tabs_menu = terminal_tabs_menu_new (window); + +	app = terminal_app_get (); +	terminal_window_profile_list_changed_cb (app, window); +	g_signal_connect (app, "profile-list-changed", +	                  G_CALLBACK (terminal_window_profile_list_changed_cb), window); + +	terminal_window_encoding_list_changed_cb (app, window); +	g_signal_connect (app, "encoding-list-changed", +	                  G_CALLBACK (terminal_window_encoding_list_changed_cb), window); + +	terminal_window_set_menubar_visible (window, TRUE); +	priv->use_default_menubar_visibility = TRUE; + +	terminal_window_update_size_to_menu (window); + +	/* We have to explicitly call this, since screen-changed is NOT +	 * emitted for the toplevel the first time! +	 */ +	terminal_window_screen_update (window, gtk_widget_get_screen (GTK_WIDGET (window))); + +	window_group = gtk_window_group_new (); +	gtk_window_group_add_window (window_group, GTK_WINDOW (window)); +	g_object_unref (window_group); + +	terminal_util_set_unique_role (GTK_WINDOW (window), "mate-terminal-window");  }  static void  terminal_window_class_init (TerminalWindowClass *klass)  { -  GObjectClass *object_class = G_OBJECT_CLASS (klass); -  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); -   -  object_class->dispose = terminal_window_dispose; -  object_class->finalize = terminal_window_finalize; - -  widget_class->show = terminal_window_show; -  widget_class->realize = terminal_window_realize; -  widget_class->map_event = terminal_window_map_event; -  widget_class->window_state_event = terminal_window_state_event; -  widget_class->screen_changed = terminal_window_screen_changed; - -  g_type_class_add_private (object_class, sizeof (TerminalWindowPrivate)); - -  gtk_rc_parse_string ("style \"mate-terminal-tab-close-button-style\"\n" -                       "{\n" -                          "GtkWidget::focus-padding = 0\n" -                          "GtkWidget::focus-line-width = 0\n" -                          "xthickness = 0\n" -                          "ythickness = 0\n" -                       "}\n" -                       "widget \"*.mate-terminal-tab-close-button\" style \"mate-terminal-tab-close-button-style\""); - -  gtk_notebook_set_window_creation_hook (handle_tab_droped_on_desktop, NULL, NULL); +	GObjectClass *object_class = G_OBJECT_CLASS (klass); +	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + +	object_class->dispose = terminal_window_dispose; +	object_class->finalize = terminal_window_finalize; + +	widget_class->show = terminal_window_show; +	widget_class->realize = terminal_window_realize; +	widget_class->map_event = terminal_window_map_event; +	widget_class->window_state_event = terminal_window_state_event; +	widget_class->screen_changed = terminal_window_screen_changed; + +	g_type_class_add_private (object_class, sizeof (TerminalWindowPrivate)); + +	gtk_rc_parse_string ("style \"mate-terminal-tab-close-button-style\"\n" +	                     "{\n" +	                     "GtkWidget::focus-padding = 0\n" +	                     "GtkWidget::focus-line-width = 0\n" +	                     "xthickness = 0\n" +	                     "ythickness = 0\n" +	                     "}\n" +	                     "widget \"*.mate-terminal-tab-close-button\" style \"mate-terminal-tab-close-button-style\""); + +	gtk_notebook_set_window_creation_hook (handle_tab_droped_on_desktop, NULL, NULL);  }  static void  terminal_window_dispose (GObject *object)  { -  TerminalWindow *window = TERMINAL_WINDOW (object); -  TerminalWindowPrivate *priv = window->priv; -  TerminalApp *app; -  GdkScreen *screen; - -  remove_popup_info (window); - -  priv->disposed = TRUE; - -  if (priv->tabs_menu) -    { -      g_object_unref (priv->tabs_menu); -      priv->tabs_menu = NULL; -    } - -  if (priv->profiles_action_group != NULL) -    disconnect_profiles_from_actions_in_group (priv->profiles_action_group); -  if (priv->new_terminal_action_group != NULL) -    disconnect_profiles_from_actions_in_group (priv->new_terminal_action_group); - -  app = terminal_app_get (); -  g_signal_handlers_disconnect_by_func (app, -                                        G_CALLBACK (terminal_window_profile_list_changed_cb), -                                        window); -  g_signal_handlers_disconnect_by_func (app, -                                        G_CALLBACK (terminal_window_encoding_list_changed_cb), -                                        window); - -  screen = gtk_widget_get_screen (GTK_WIDGET (object)); -  if (screen) -    { -      g_signal_handlers_disconnect_by_func (screen, -                                            G_CALLBACK (terminal_window_window_manager_changed_cb), -                                            window); +	TerminalWindow *window = TERMINAL_WINDOW (object); +	TerminalWindowPrivate *priv = window->priv; +	TerminalApp *app; +	GdkScreen *screen; + +	remove_popup_info (window); + +	priv->disposed = TRUE; + +	if (priv->tabs_menu) +	{ +		g_object_unref (priv->tabs_menu); +		priv->tabs_menu = NULL; +	} + +	if (priv->profiles_action_group != NULL) +		disconnect_profiles_from_actions_in_group (priv->profiles_action_group); +	if (priv->new_terminal_action_group != NULL) +		disconnect_profiles_from_actions_in_group (priv->new_terminal_action_group); + +	app = terminal_app_get (); +	g_signal_handlers_disconnect_by_func (app, +	                                      G_CALLBACK (terminal_window_profile_list_changed_cb), +	                                      window); +	g_signal_handlers_disconnect_by_func (app, +	                                      G_CALLBACK (terminal_window_encoding_list_changed_cb), +	                                      window); + +	screen = gtk_widget_get_screen (GTK_WIDGET (object)); +	if (screen) +	{ +		g_signal_handlers_disconnect_by_func (screen, +		                                      G_CALLBACK (terminal_window_window_manager_changed_cb), +		                                      window);  #ifdef GDK_WINDOWING_X11 -      g_signal_handlers_disconnect_by_func (screen, -                                            G_CALLBACK (terminal_window_composited_changed_cb), -                                            window); +		g_signal_handlers_disconnect_by_func (screen, +		                                      G_CALLBACK (terminal_window_composited_changed_cb), +		                                      window);  #endif -    } +	} -  G_OBJECT_CLASS (terminal_window_parent_class)->dispose (object); +	G_OBJECT_CLASS (terminal_window_parent_class)->dispose (object);  } -    +  static void  terminal_window_finalize (GObject *object)  { -  TerminalWindow *window = TERMINAL_WINDOW (object); -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindow *window = TERMINAL_WINDOW (object); +	TerminalWindowPrivate *priv = window->priv; -  g_object_unref (priv->ui_manager); +	g_object_unref (priv->ui_manager); -  if (priv->confirm_close_dialog) -    gtk_dialog_response (GTK_DIALOG (priv->confirm_close_dialog), -                         GTK_RESPONSE_DELETE_EVENT); +	if (priv->confirm_close_dialog) +		gtk_dialog_response (GTK_DIALOG (priv->confirm_close_dialog), +		                     GTK_RESPONSE_DELETE_EVENT); -  if (priv->search_find_dialog) -    gtk_dialog_response (GTK_DIALOG (priv->search_find_dialog), -                         GTK_RESPONSE_DELETE_EVENT); +	if (priv->search_find_dialog) +		gtk_dialog_response (GTK_DIALOG (priv->search_find_dialog), +		                     GTK_RESPONSE_DELETE_EVENT); -  G_OBJECT_CLASS (terminal_window_parent_class)->finalize (object); +	G_OBJECT_CLASS (terminal_window_parent_class)->finalize (object);  }  static gboolean @@ -2224,43 +2324,43 @@ terminal_window_delete_event (GtkWidget *widget,                                GdkEvent *event,                                gpointer data)  { -   return confirm_close_window_or_tab (TERMINAL_WINDOW (widget), NULL); +	return confirm_close_window_or_tab (TERMINAL_WINDOW (widget), NULL);  }  static void  terminal_window_show (GtkWidget *widget)  { -  TerminalWindow *window = TERMINAL_WINDOW (widget); -  GtkAllocation widget_allocation; +	TerminalWindow *window = TERMINAL_WINDOW (widget); +	GtkAllocation widget_allocation; -  gtk_widget_get_allocation (widget, &widget_allocation); +	gtk_widget_get_allocation (widget, &widget_allocation);  #if 0 -  TerminalWindowPrivate *priv = window->priv; - -  if (priv->active_screen != NULL) -    { -      /* At this point, we have our GdkScreen, and hence the right -       * font size, so we can go ahead and size the window. */ -      terminal_window_set_size (window, priv->active_screen, FALSE); -    } +	TerminalWindowPrivate *priv = window->priv; + +	if (priv->active_screen != NULL) +	{ +		/* At this point, we have our GdkScreen, and hence the right +		 * font size, so we can go ahead and size the window. */ +		terminal_window_set_size (window, priv->active_screen, FALSE); +	}  #endif -  terminal_window_update_geometry (window); +	terminal_window_update_geometry (window); -  _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                         "[window %p] show, size %d : %d at (%d, %d)\n", -                         widget, -                         widget_allocation.width, widget_allocation.height, -                         widget_allocation.x, widget_allocation.y); +	_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +	                       "[window %p] show, size %d : %d at (%d, %d)\n", +	                       widget, +	                       widget_allocation.width, widget_allocation.height, +	                       widget_allocation.x, widget_allocation.y); -  GTK_WIDGET_CLASS (terminal_window_parent_class)->show (widget); +	GTK_WIDGET_CLASS (terminal_window_parent_class)->show (widget);  }  TerminalWindow*  terminal_window_new (void)  { -  return g_object_new (TERMINAL_TYPE_WINDOW, NULL); +	return g_object_new (TERMINAL_TYPE_WINDOW, NULL);  }  /** @@ -2272,10 +2372,10 @@ terminal_window_new (void)  void  terminal_window_set_is_restored (TerminalWindow *window)  { -  g_return_if_fail (TERMINAL_IS_WINDOW (window)); -  g_return_if_fail (!gtk_widget_get_mapped (GTK_WIDGET (window))); +	g_return_if_fail (TERMINAL_IS_WINDOW (window)); +	g_return_if_fail (!gtk_widget_get_mapped (GTK_WIDGET (window))); -  window->priv->clear_demands_attention = TRUE; +	window->priv->clear_demands_attention = TRUE;  }  static void @@ -2283,15 +2383,15 @@ profile_set_callback (TerminalScreen *screen,                        TerminalProfile *old_profile,                        TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindowPrivate *priv = window->priv; -  if (!gtk_widget_get_realized (GTK_WIDGET (window))) -    return; +	if (!gtk_widget_get_realized (GTK_WIDGET (window))) +		return; -  if (screen != priv->active_screen) -    return; +	if (screen != priv->active_screen) +		return; -  terminal_window_update_set_profile_menu_active_profile (window); +	terminal_window_update_set_profile_menu_active_profile (window);  }  static void @@ -2299,12 +2399,12 @@ sync_screen_title (TerminalScreen *screen,                     GParamSpec *psepc,                     TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -   -  if (screen != priv->active_screen) -    return; +	TerminalWindowPrivate *priv = window->priv; + +	if (screen != priv->active_screen) +		return; -  gtk_window_set_title (GTK_WINDOW (window), terminal_screen_get_title (screen)); +	gtk_window_set_title (GTK_WINDOW (window), terminal_screen_get_title (screen));  }  static void @@ -2312,20 +2412,20 @@ sync_screen_icon_title (TerminalScreen *screen,                          GParamSpec *psepc,                          TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindowPrivate *priv = window->priv; -  if (!gtk_widget_get_realized (GTK_WIDGET (window))) -    return; +	if (!gtk_widget_get_realized (GTK_WIDGET (window))) +		return; -  if (screen != priv->active_screen) -    return; +	if (screen != priv->active_screen) +		return; -  if (!terminal_screen_get_icon_title_set (screen)) -    return; +	if (!terminal_screen_get_icon_title_set (screen)) +		return; -  gdk_window_set_icon_name (gtk_widget_get_window (GTK_WIDGET (window)), terminal_screen_get_icon_title (screen)); +	gdk_window_set_icon_name (gtk_widget_get_window (GTK_WIDGET (window)), terminal_screen_get_icon_title (screen)); -  priv->icon_title_set = TRUE; +	priv->icon_title_set = TRUE;  }  static void @@ -2333,30 +2433,30 @@ sync_screen_icon_title_set (TerminalScreen *screen,                              GParamSpec *psepc,                              TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindowPrivate *priv = window->priv; -  if (!gtk_widget_get_realized (GTK_WIDGET (window))) -    return; +	if (!gtk_widget_get_realized (GTK_WIDGET (window))) +		return; -  /* No need to restore the title if we never set an icon title */ -  if (!priv->icon_title_set) -    return; +	/* No need to restore the title if we never set an icon title */ +	if (!priv->icon_title_set) +		return; -  if (screen != priv->active_screen) -    return; +	if (screen != priv->active_screen) +		return; -  if (terminal_screen_get_icon_title_set (screen)) -    return; +	if (terminal_screen_get_icon_title_set (screen)) +		return; -  /* Need to reset the icon name */ -  /* FIXME: Once gtk+ bug 535557 is fixed, use that to unset the icon title. */ +	/* Need to reset the icon name */ +	/* FIXME: Once gtk+ bug 535557 is fixed, use that to unset the icon title. */ -  g_object_set_qdata (G_OBJECT (gtk_widget_get_window (GTK_WIDGET (window))), -                      g_quark_from_static_string ("gdk-icon-name-set"), -                      GUINT_TO_POINTER (FALSE)); -  priv->icon_title_set = FALSE; +	g_object_set_qdata (G_OBJECT (gtk_widget_get_window (GTK_WIDGET (window))), +	                    g_quark_from_static_string ("gdk-icon-name-set"), +	                    GUINT_TO_POINTER (FALSE)); +	priv->icon_title_set = FALSE; -  /* Re-setting the right title will be done by the notify::title handler which comes after this one */ +	/* Re-setting the right title will be done by the notify::title handler which comes after this one */  }  /* Notebook callbacks */ @@ -2365,26 +2465,26 @@ static void  close_button_clicked_cb (GtkWidget *tab_label,                           GtkWidget *screen_container)  { -  GtkWidget *toplevel; -  TerminalWindow *window; -  TerminalWindowPrivate *priv; -  TerminalScreen *screen; +	GtkWidget *toplevel; +	TerminalWindow *window; +	TerminalWindowPrivate *priv; +	TerminalScreen *screen; -  toplevel = gtk_widget_get_toplevel (screen_container); -  if (!gtk_widget_is_toplevel (toplevel)) -    return; +	toplevel = gtk_widget_get_toplevel (screen_container); +	if (!gtk_widget_is_toplevel (toplevel)) +		return; -  if (!TERMINAL_IS_WINDOW (toplevel)) -    return; +	if (!TERMINAL_IS_WINDOW (toplevel)) +		return; -  window = TERMINAL_WINDOW (toplevel); -  priv = window->priv; +	window = TERMINAL_WINDOW (toplevel); +	priv = window->priv; -  screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (screen_container)); -  if (confirm_close_window_or_tab (window, screen)) -    return; +	screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (screen_container)); +	if (confirm_close_window_or_tab (window, screen)) +		return; -  terminal_window_remove_screen (window, screen); +	terminal_window_remove_screen (window, screen);  }  void @@ -2392,59 +2492,59 @@ terminal_window_add_screen (TerminalWindow *window,                              TerminalScreen *screen,                              int            position)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkWidget *old_window; -  GtkWidget *screen_container, *tab_label; - -  old_window = gtk_widget_get_toplevel (GTK_WIDGET (screen)); -  if (gtk_widget_is_toplevel (old_window) && -      TERMINAL_IS_WINDOW (old_window) && -      TERMINAL_WINDOW (old_window)== window) -    return;   - -  if (TERMINAL_IS_WINDOW (old_window)) -    terminal_window_remove_screen (TERMINAL_WINDOW (old_window), screen); - -  screen_container = terminal_screen_container_new (screen); -  gtk_widget_show (screen_container); - -  update_tab_visibility (window, +1); - -  tab_label = terminal_tab_label_new (screen); -  g_signal_connect (tab_label, "close-button-clicked", -                    G_CALLBACK (close_button_clicked_cb), screen_container); - -  gtk_notebook_insert_page (GTK_NOTEBOOK (priv->notebook), -                            screen_container, -                            tab_label, -                            position); -  gtk_container_child_set (GTK_CONTAINER (priv->notebook), -                           screen_container, -                           "tab-expand", TRUE, -                           "tab-fill", TRUE, -                           NULL); -  gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (priv->notebook), -                                    screen_container, -                                    TRUE); -  gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (priv->notebook), -                                   screen_container, -                                   TRUE); +	TerminalWindowPrivate *priv = window->priv; +	GtkWidget *old_window; +	GtkWidget *screen_container, *tab_label; + +	old_window = gtk_widget_get_toplevel (GTK_WIDGET (screen)); +	if (gtk_widget_is_toplevel (old_window) && +	        TERMINAL_IS_WINDOW (old_window) && +	        TERMINAL_WINDOW (old_window)== window) +		return; + +	if (TERMINAL_IS_WINDOW (old_window)) +		terminal_window_remove_screen (TERMINAL_WINDOW (old_window), screen); + +	screen_container = terminal_screen_container_new (screen); +	gtk_widget_show (screen_container); + +	update_tab_visibility (window, +1); + +	tab_label = terminal_tab_label_new (screen); +	g_signal_connect (tab_label, "close-button-clicked", +	                  G_CALLBACK (close_button_clicked_cb), screen_container); + +	gtk_notebook_insert_page (GTK_NOTEBOOK (priv->notebook), +	                          screen_container, +	                          tab_label, +	                          position); +	gtk_container_child_set (GTK_CONTAINER (priv->notebook), +	                         screen_container, +	                         "tab-expand", TRUE, +	                         "tab-fill", TRUE, +	                         NULL); +	gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (priv->notebook), +	                                  screen_container, +	                                  TRUE); +	gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (priv->notebook), +	                                 screen_container, +	                                 TRUE);  }  void  terminal_window_remove_screen (TerminalWindow *window,                                 TerminalScreen *screen)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalScreenContainer *screen_container; +	TerminalWindowPrivate *priv = window->priv; +	TerminalScreenContainer *screen_container; -  g_return_if_fail (gtk_widget_get_toplevel (GTK_WIDGET (screen)) == GTK_WIDGET (window)); +	g_return_if_fail (gtk_widget_get_toplevel (GTK_WIDGET (screen)) == GTK_WIDGET (window)); -  update_tab_visibility (window, -1); +	update_tab_visibility (window, -1); -  screen_container = terminal_screen_container_get_from_screen (screen); -  gtk_container_remove (GTK_CONTAINER (priv->notebook), -                        GTK_WIDGET (screen_container)); +	screen_container = terminal_screen_container_get_from_screen (screen); +	gtk_container_remove (GTK_CONTAINER (priv->notebook), +	                      GTK_WIDGET (screen_container));  }  void @@ -2453,92 +2553,92 @@ terminal_window_move_screen (TerminalWindow *source_window,                               TerminalScreen *screen,                               int dest_position)  { -  TerminalScreenContainer *screen_container; - -  g_return_if_fail (TERMINAL_IS_WINDOW (source_window)); -  g_return_if_fail (TERMINAL_IS_WINDOW (dest_window)); -  g_return_if_fail (TERMINAL_IS_SCREEN (screen)); -  g_return_if_fail (gtk_widget_get_toplevel (GTK_WIDGET (screen)) == GTK_WIDGET (source_window)); -  g_return_if_fail (dest_position >= -1); - -  screen_container = terminal_screen_container_get_from_screen (screen); -  g_assert (TERMINAL_IS_SCREEN_CONTAINER (screen_container)); - -  /* We have to ref the screen container as well as the screen, -   * because otherwise removing the screen container from the source -   * window's notebook will cause the container and its containing -   * screen to be gtk_widget_destroy()ed! -   */ -  g_object_ref_sink (screen_container); -  g_object_ref_sink (screen); -  terminal_window_remove_screen (source_window, screen); -     -  /* Now we can safely remove the screen from the container and let the container die */ -  gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (GTK_WIDGET (screen))), GTK_WIDGET (screen)); -  g_object_unref (screen_container); - -  terminal_window_add_screen (dest_window, screen, dest_position); -  g_object_unref (screen); +	TerminalScreenContainer *screen_container; + +	g_return_if_fail (TERMINAL_IS_WINDOW (source_window)); +	g_return_if_fail (TERMINAL_IS_WINDOW (dest_window)); +	g_return_if_fail (TERMINAL_IS_SCREEN (screen)); +	g_return_if_fail (gtk_widget_get_toplevel (GTK_WIDGET (screen)) == GTK_WIDGET (source_window)); +	g_return_if_fail (dest_position >= -1); + +	screen_container = terminal_screen_container_get_from_screen (screen); +	g_assert (TERMINAL_IS_SCREEN_CONTAINER (screen_container)); + +	/* We have to ref the screen container as well as the screen, +	 * because otherwise removing the screen container from the source +	 * window's notebook will cause the container and its containing +	 * screen to be gtk_widget_destroy()ed! +	 */ +	g_object_ref_sink (screen_container); +	g_object_ref_sink (screen); +	terminal_window_remove_screen (source_window, screen); + +	/* Now we can safely remove the screen from the container and let the container die */ +	gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (GTK_WIDGET (screen))), GTK_WIDGET (screen)); +	g_object_unref (screen_container); + +	terminal_window_add_screen (dest_window, screen, dest_position); +	g_object_unref (screen);  }  GList*  terminal_window_list_screen_containers (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -   -  /* We are trusting that GtkNotebook will return pages in order */ -  return gtk_container_get_children (GTK_CONTAINER (priv->notebook)); +	TerminalWindowPrivate *priv = window->priv; + +	/* We are trusting that GtkNotebook will return pages in order */ +	return gtk_container_get_children (GTK_CONTAINER (priv->notebook));  }  void  terminal_window_set_menubar_visible (TerminalWindow *window,                                       gboolean        setting)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkAction *action; +	TerminalWindowPrivate *priv = window->priv; +	GtkAction *action; + +	/* it's been set now, so don't override when adding a screen. +	 * this side effect must happen before we short-circuit below. +	 */ +	priv->use_default_menubar_visibility = FALSE; + +	if (setting == priv->menubar_visible) +		return; -  /* it's been set now, so don't override when adding a screen. -   * this side effect must happen before we short-circuit below. -   */ -  priv->use_default_menubar_visibility = FALSE; -   -  if (setting == priv->menubar_visible) -    return; +	priv->menubar_visible = setting; -  priv->menubar_visible = setting; +	action = gtk_action_group_get_action (priv->action_group, "ViewMenubar"); +	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), setting); -  action = gtk_action_group_get_action (priv->action_group, "ViewMenubar"); -  gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), setting); -   -  g_object_set (priv->menubar, "visible", setting, NULL); +	g_object_set (priv->menubar, "visible", setting, NULL); -  /* FIXMEchpe: use gtk_widget_get_realized instead? */ -  if (priv->active_screen) -    { -      _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                             "[window %p] setting size after toggling menubar visibility\n", -                             window); +	/* FIXMEchpe: use gtk_widget_get_realized instead? */ +	if (priv->active_screen) +	{ +		_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +		                       "[window %p] setting size after toggling menubar visibility\n", +		                       window); -      terminal_window_set_size (window, priv->active_screen, TRUE); -    } +		terminal_window_set_size (window, priv->active_screen, TRUE); +	}  }  gboolean  terminal_window_get_menubar_visible (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -   -  return priv->menubar_visible; +	TerminalWindowPrivate *priv = window->priv; + +	return priv->menubar_visible;  }  GtkWidget *  terminal_window_get_notebook (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -	 -  g_return_val_if_fail (TERMINAL_IS_WINDOW (window), NULL); +	TerminalWindowPrivate *priv = window->priv; + +	g_return_val_if_fail (TERMINAL_IS_WINDOW (window), NULL); -  return GTK_WIDGET (priv->notebook); +	return GTK_WIDGET (priv->notebook);  }  void @@ -2546,7 +2646,7 @@ terminal_window_set_size (TerminalWindow *window,                            TerminalScreen *screen,                            gboolean        even_if_mapped)  { -  terminal_window_set_size_force_grid (window, screen, even_if_mapped, -1, -1); +	terminal_window_set_size_force_grid (window, screen, even_if_mapped, -1, -1);  }  void @@ -2556,86 +2656,88 @@ terminal_window_set_size_force_grid (TerminalWindow *window,                                       int             force_grid_width,                                       int             force_grid_height)  { -  /* Owen's hack from mate-terminal */ -  GtkWidget *widget; -  GtkWidget *app; -  GtkRequisition toplevel_request; -  GtkRequisition widget_request; -  int w, h; -  int char_width; -  int char_height; -  int grid_width; -  int grid_height; -  GtkBorder *inner_border = NULL; - -  /* be sure our geometry is up-to-date */ -  terminal_window_update_geometry (window); - -  widget = GTK_WIDGET (screen); -   -  app = gtk_widget_get_toplevel (widget); -  g_assert (app != NULL); - -  gtk_widget_size_request (app, &toplevel_request); -  gtk_widget_size_request (widget, &widget_request); - -  terminal_screen_get_cell_size (screen, &char_width, &char_height); -  terminal_screen_get_size (screen, &grid_width, &grid_height); - -  _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                         "[window %p] set size: toplevel %dx%d widget %dx%d grid %dx%d char-cell %dx%d\n", -                         window, -                         toplevel_request.width, toplevel_request.height, -                         widget_request.width, widget_request.height, -                         grid_width, grid_height, char_width, char_height); -   -  w = toplevel_request.width - widget_request.width; -  h = toplevel_request.height - widget_request.height; - -  if (force_grid_width >= 0) -    grid_width = force_grid_width; -  if (force_grid_height >= 0) -    grid_height = force_grid_height; -   -  gtk_widget_style_get (widget, "inner-border", &inner_border, NULL); -  w += (inner_border ? (inner_border->left + inner_border->right) : 0) + char_width * grid_width; -  h += (inner_border ? (inner_border->top + inner_border->bottom) : 0) + char_height * grid_height; -  gtk_border_free (inner_border); - -  _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                         "[window %p] set size: grid %dx%d force %dx%d setting %dx%d pixels\n", -                         window, -                         grid_width, grid_height, force_grid_width, force_grid_height, w, h); - -  if (even_if_mapped && gtk_widget_get_mapped (app)) { -    gtk_window_resize (GTK_WINDOW (app), w, h); -  } -  else { -    gtk_window_set_default_size (GTK_WINDOW (app), w, h); -  } +	/* Owen's hack from mate-terminal */ +	GtkWidget *widget; +	GtkWidget *app; +	GtkRequisition toplevel_request; +	GtkRequisition widget_request; +	int w, h; +	int char_width; +	int char_height; +	int grid_width; +	int grid_height; +	GtkBorder *inner_border = NULL; + +	/* be sure our geometry is up-to-date */ +	terminal_window_update_geometry (window); + +	widget = GTK_WIDGET (screen); + +	app = gtk_widget_get_toplevel (widget); +	g_assert (app != NULL); + +	gtk_widget_size_request (app, &toplevel_request); +	gtk_widget_size_request (widget, &widget_request); + +	terminal_screen_get_cell_size (screen, &char_width, &char_height); +	terminal_screen_get_size (screen, &grid_width, &grid_height); + +	_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +	                       "[window %p] set size: toplevel %dx%d widget %dx%d grid %dx%d char-cell %dx%d\n", +	                       window, +	                       toplevel_request.width, toplevel_request.height, +	                       widget_request.width, widget_request.height, +	                       grid_width, grid_height, char_width, char_height); + +	w = toplevel_request.width - widget_request.width; +	h = toplevel_request.height - widget_request.height; + +	if (force_grid_width >= 0) +		grid_width = force_grid_width; +	if (force_grid_height >= 0) +		grid_height = force_grid_height; + +	gtk_widget_style_get (widget, "inner-border", &inner_border, NULL); +	w += (inner_border ? (inner_border->left + inner_border->right) : 0) + char_width * grid_width; +	h += (inner_border ? (inner_border->top + inner_border->bottom) : 0) + char_height * grid_height; +	gtk_border_free (inner_border); + +	_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +	                       "[window %p] set size: grid %dx%d force %dx%d setting %dx%d pixels\n", +	                       window, +	                       grid_width, grid_height, force_grid_width, force_grid_height, w, h); + +	if (even_if_mapped && gtk_widget_get_mapped (app)) +	{ +		gtk_window_resize (GTK_WINDOW (app), w, h); +	} +	else +	{ +		gtk_window_set_default_size (GTK_WINDOW (app), w, h); +	}  }  void  terminal_window_switch_screen (TerminalWindow *window,                                 TerminalScreen *screen)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalScreenContainer *screen_container; -  int page_num; - -  screen_container = terminal_screen_container_get_from_screen (screen); -  g_assert (TERMINAL_IS_SCREEN_CONTAINER (screen_container)); -  page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), -                                    GTK_WIDGET (screen_container)); -  gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), page_num); +	TerminalWindowPrivate *priv = window->priv; +	TerminalScreenContainer *screen_container; +	int page_num; + +	screen_container = terminal_screen_container_get_from_screen (screen); +	g_assert (TERMINAL_IS_SCREEN_CONTAINER (screen_container)); +	page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), +	                                  GTK_WIDGET (screen_container)); +	gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), page_num);  }  TerminalScreen*  terminal_window_get_active (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindowPrivate *priv = window->priv; -  return priv->active_screen; +	return priv->active_screen;  }  static gboolean @@ -2643,64 +2745,64 @@ notebook_button_press_cb (GtkWidget *widget,                            GdkEventButton *event,                            TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkNotebook *notebook = GTK_NOTEBOOK (widget); -  GtkWidget *menu; -  GtkAction *action; -  int tab_clicked; +	TerminalWindowPrivate *priv = window->priv; +	GtkNotebook *notebook = GTK_NOTEBOOK (widget); +	GtkWidget *menu; +	GtkAction *action; +	int tab_clicked; -  if (event->type != GDK_BUTTON_PRESS || -      event->button != 3 || -      (event->state & gtk_accelerator_get_default_mod_mask ()) != 0) -    return FALSE; +	if (event->type != GDK_BUTTON_PRESS || +	        event->button != 3 || +	        (event->state & gtk_accelerator_get_default_mod_mask ()) != 0) +		return FALSE; -  tab_clicked = find_tab_num_at_pos (notebook, event->x_root, event->y_root); -  if (tab_clicked < 0) -    return FALSE; +	tab_clicked = find_tab_num_at_pos (notebook, event->x_root, event->y_root); +	if (tab_clicked < 0) +		return FALSE; -  /* switch to the page the mouse is over */ -  gtk_notebook_set_current_page (notebook, tab_clicked); +	/* switch to the page the mouse is over */ +	gtk_notebook_set_current_page (notebook, tab_clicked); -  action = gtk_action_group_get_action (priv->action_group, "NotebookPopup"); -  gtk_action_activate (action); +	action = gtk_action_group_get_action (priv->action_group, "NotebookPopup"); +	gtk_action_activate (action); -  menu = gtk_ui_manager_get_widget (priv->ui_manager, "/NotebookPopup"); -  gtk_menu_popup (GTK_MENU (menu), NULL, NULL,  -                  NULL, NULL,  -                  event->button, event->time); +	menu = gtk_ui_manager_get_widget (priv->ui_manager, "/NotebookPopup"); +	gtk_menu_popup (GTK_MENU (menu), NULL, NULL, +	                NULL, NULL, +	                event->button, event->time); -  return TRUE; +	return TRUE;  }  static gboolean  notebook_popup_menu_cb (GtkWidget *widget,                          TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkNotebook *notebook = GTK_NOTEBOOK (priv->notebook); -  GtkWidget *focus_widget, *tab, *tab_label, *menu; -  GtkAction *action; -  int page_num; - -  focus_widget = gtk_window_get_focus (GTK_WINDOW (window)); -  /* Only respond if the notebook is the actual focus */ -  if (focus_widget != priv->notebook) -    return FALSE; +	TerminalWindowPrivate *priv = window->priv; +	GtkNotebook *notebook = GTK_NOTEBOOK (priv->notebook); +	GtkWidget *focus_widget, *tab, *tab_label, *menu; +	GtkAction *action; +	int page_num; + +	focus_widget = gtk_window_get_focus (GTK_WINDOW (window)); +	/* Only respond if the notebook is the actual focus */ +	if (focus_widget != priv->notebook) +		return FALSE; + +	page_num = gtk_notebook_get_current_page (notebook); +	tab = gtk_notebook_get_nth_page (notebook, page_num); +	tab_label = gtk_notebook_get_tab_label (notebook, tab); + +	action = gtk_action_group_get_action (priv->action_group, "NotebookPopup"); +	gtk_action_activate (action); + +	menu = gtk_ui_manager_get_widget (priv->ui_manager, "/NotebookPopup"); +	gtk_menu_popup (GTK_MENU (menu), NULL, NULL, +	                position_menu_under_widget, tab_label, +	                0, gtk_get_current_event_time ()); +	gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE); -  page_num = gtk_notebook_get_current_page (notebook); -  tab = gtk_notebook_get_nth_page (notebook, page_num); -  tab_label = gtk_notebook_get_tab_label (notebook, tab); - -  action = gtk_action_group_get_action (priv->action_group, "NotebookPopup"); -  gtk_action_activate (action); - -  menu = gtk_ui_manager_get_widget (priv->ui_manager, "/NotebookPopup"); -  gtk_menu_popup (GTK_MENU (menu), NULL, NULL,  -                  position_menu_under_widget, tab_label, -                  0, gtk_get_current_event_time ()); -  gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE); - -  return TRUE; +	return TRUE;  }  static void @@ -2713,83 +2815,84 @@ notebook_page_selected_callback (GtkWidget       *notebook,                                   guint            page_num,                                   TerminalWindow  *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkWidget *widget; -  TerminalScreen *screen; -  TerminalProfile *profile; -  int old_grid_width, old_grid_height; +	TerminalWindowPrivate *priv = window->priv; +	GtkWidget *widget; +	TerminalScreen *screen; +	TerminalProfile *profile; +	int old_grid_width, old_grid_height;  #if !GTK_CHECK_VERSION (2, 90, 6) -  GtkWidget *page_widget; +	GtkWidget *page_widget;  #endif -  _terminal_debug_print (TERMINAL_DEBUG_MDI, -                         "[window %p] MDI: page-selected %d\n", -                         window, page_num); +	_terminal_debug_print (TERMINAL_DEBUG_MDI, +	                       "[window %p] MDI: page-selected %d\n", +	                       window, page_num); -  if (priv->disposed) -    return; +	if (priv->disposed) +		return;  #if !GTK_CHECK_VERSION (2, 90, 6) -  page_widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), page_num); +	page_widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), page_num);  #endif -  screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (page_widget)); -  widget = GTK_WIDGET (screen); -  g_assert (screen != NULL); +	screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (page_widget)); +	widget = GTK_WIDGET (screen); +	g_assert (screen != NULL); + +	_terminal_debug_print (TERMINAL_DEBUG_MDI, +	                       "[window %p] MDI: setting active tab to screen %p (old active screen %p)\n", +	                       window, screen, priv->active_screen); -  _terminal_debug_print (TERMINAL_DEBUG_MDI, -                         "[window %p] MDI: setting active tab to screen %p (old active screen %p)\n", -                         window, screen, priv->active_screen); +	if (priv->active_screen == screen) +		return; -  if (priv->active_screen == screen) -    return; -   -  if (priv->active_screen != NULL) { -    terminal_screen_get_size (priv->active_screen, &old_grid_width, &old_grid_height); -   -    /* This is so that we maintain the same grid */ -    vte_terminal_set_size (VTE_TERMINAL (screen), old_grid_width, old_grid_height); -  } +	if (priv->active_screen != NULL) +	{ +		terminal_screen_get_size (priv->active_screen, &old_grid_width, &old_grid_height); -  /* Workaround to remove gtknotebook's feature of computing its size based on -   * all pages. When the widget is hidden, its size will not be taken into -   * account. -   */ -  if (priv->active_screen) -    gtk_widget_hide (GTK_WIDGET (priv->active_screen)); /* FIXME */ +		/* This is so that we maintain the same grid */ +		vte_terminal_set_size (VTE_TERMINAL (screen), old_grid_width, old_grid_height); +	} -  /* Make sure that the widget is no longer hidden due to the workaround */ -  gtk_widget_show (widget); +	/* Workaround to remove gtknotebook's feature of computing its size based on +	 * all pages. When the widget is hidden, its size will not be taken into +	 * account. +	 */ +	if (priv->active_screen) +		gtk_widget_hide (GTK_WIDGET (priv->active_screen)); /* FIXME */ -  profile = terminal_screen_get_profile (screen); +	/* Make sure that the widget is no longer hidden due to the workaround */ +	gtk_widget_show (widget); -  priv->active_screen = screen; +	profile = terminal_screen_get_profile (screen); -  /* Override menubar setting if it wasn't restored from session */ -  if (priv->use_default_menubar_visibility) -    { -      gboolean setting = -        terminal_profile_get_property_boolean (terminal_screen_get_profile (screen), TERMINAL_PROFILE_DEFAULT_SHOW_MENUBAR); +	priv->active_screen = screen; -      terminal_window_set_menubar_visible (window, setting); -    } +	/* Override menubar setting if it wasn't restored from session */ +	if (priv->use_default_menubar_visibility) +	{ +		gboolean setting = +		    terminal_profile_get_property_boolean (terminal_screen_get_profile (screen), TERMINAL_PROFILE_DEFAULT_SHOW_MENUBAR); -  sync_screen_icon_title_set (screen, NULL, window); -  sync_screen_icon_title (screen, NULL, window); -  sync_screen_title (screen, NULL, window); +		terminal_window_set_menubar_visible (window, setting); +	} -  /* set size of window to current grid size */ -  _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                         "[window %p] setting size after flipping notebook pages\n", -                         window); -  terminal_window_set_size (window, screen, TRUE); +	sync_screen_icon_title_set (screen, NULL, window); +	sync_screen_icon_title (screen, NULL, window); +	sync_screen_title (screen, NULL, window); -  terminal_window_update_tabs_menu_sensitivity (window); -  terminal_window_update_encoding_menu_active_encoding (window); -  terminal_window_update_set_profile_menu_active_profile (window); -  terminal_window_update_copy_sensitivity (screen, window); -  terminal_window_update_zoom_sensitivity (window); -  terminal_window_update_search_sensitivity (screen, window); +	/* set size of window to current grid size */ +	_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +	                       "[window %p] setting size after flipping notebook pages\n", +	                       window); +	terminal_window_set_size (window, screen, TRUE); + +	terminal_window_update_tabs_menu_sensitivity (window); +	terminal_window_update_encoding_menu_active_encoding (window); +	terminal_window_update_set_profile_menu_active_profile (window); +	terminal_window_update_copy_sensitivity (screen, window); +	terminal_window_update_zoom_sensitivity (window); +	terminal_window_update_search_sensitivity (screen, window);  }  static void @@ -2798,66 +2901,66 @@ notebook_page_added_callback (GtkWidget       *notebook,                                guint            page_num,                                TerminalWindow  *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalScreen *screen; - -  screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (container)); - -  _terminal_debug_print (TERMINAL_DEBUG_MDI, -                         "[window %p] MDI: screen %p inserted\n", -                         window, screen); - -  g_signal_connect (G_OBJECT (screen), -                    "profile-set", -                    G_CALLBACK (profile_set_callback), -                    window); - -  /* FIXME: only connect on the active screen, not all screens! */ -  g_signal_connect (screen, "notify::title", -                    G_CALLBACK (sync_screen_title), window); -  g_signal_connect (screen, "notify::icon-title", -                    G_CALLBACK (sync_screen_icon_title), window); -  g_signal_connect (screen, "notify::icon-title-set", -                    G_CALLBACK (sync_screen_icon_title_set), window); -  g_signal_connect (screen, "selection-changed", -                    G_CALLBACK (terminal_window_update_copy_sensitivity), window); - -  g_signal_connect (screen, "show-popup-menu", -                    G_CALLBACK (screen_show_popup_menu_callback), window); -  g_signal_connect (screen, "match-clicked", -                    G_CALLBACK (screen_match_clicked_cb), window); -  g_signal_connect (screen, "resize-window", -                    G_CALLBACK (screen_resize_window_cb), window); - -  g_signal_connect (screen, "close-screen", -                    G_CALLBACK (screen_close_cb), window); - -  update_tab_visibility (window, 0); -  terminal_window_update_tabs_menu_sensitivity (window); -  terminal_window_update_search_sensitivity (screen, window); +	TerminalWindowPrivate *priv = window->priv; +	TerminalScreen *screen; + +	screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (container)); + +	_terminal_debug_print (TERMINAL_DEBUG_MDI, +	                       "[window %p] MDI: screen %p inserted\n", +	                       window, screen); + +	g_signal_connect (G_OBJECT (screen), +	                  "profile-set", +	                  G_CALLBACK (profile_set_callback), +	                  window); + +	/* FIXME: only connect on the active screen, not all screens! */ +	g_signal_connect (screen, "notify::title", +	                  G_CALLBACK (sync_screen_title), window); +	g_signal_connect (screen, "notify::icon-title", +	                  G_CALLBACK (sync_screen_icon_title), window); +	g_signal_connect (screen, "notify::icon-title-set", +	                  G_CALLBACK (sync_screen_icon_title_set), window); +	g_signal_connect (screen, "selection-changed", +	                  G_CALLBACK (terminal_window_update_copy_sensitivity), window); + +	g_signal_connect (screen, "show-popup-menu", +	                  G_CALLBACK (screen_show_popup_menu_callback), window); +	g_signal_connect (screen, "match-clicked", +	                  G_CALLBACK (screen_match_clicked_cb), window); +	g_signal_connect (screen, "resize-window", +	                  G_CALLBACK (screen_resize_window_cb), window); + +	g_signal_connect (screen, "close-screen", +	                  G_CALLBACK (screen_close_cb), window); + +	update_tab_visibility (window, 0); +	terminal_window_update_tabs_menu_sensitivity (window); +	terminal_window_update_search_sensitivity (screen, window);  #if 0 -  /* FIXMEchpe: wtf is this doing? */ +	/* FIXMEchpe: wtf is this doing? */ -  /* If we have an active screen, match its size and zoom */ -  if (priv->active_screen) -    { -      int current_width, current_height; -      double scale; +	/* If we have an active screen, match its size and zoom */ +	if (priv->active_screen) +	{ +		int current_width, current_height; +		double scale; -      terminal_screen_get_size (priv->active_screen, ¤t_width, ¤t_height); -      vte_terminal_set_size (VTE_TERMINAL (screen), current_width, current_height); +		terminal_screen_get_size (priv->active_screen, ¤t_width, ¤t_height); +		vte_terminal_set_size (VTE_TERMINAL (screen), current_width, current_height); -      scale = terminal_screen_get_font_scale (priv->active_screen); -      terminal_screen_set_font_scale (screen, scale); -    } +		scale = terminal_screen_get_font_scale (priv->active_screen); +		terminal_screen_set_font_scale (screen, scale); +	}  #endif -  if (priv->present_on_insert) -    { -      gtk_window_present_with_time (GTK_WINDOW (window), gtk_get_current_event_time ()); -      priv->present_on_insert = FALSE; -    } +	if (priv->present_on_insert) +	{ +		gtk_window_present_with_time (GTK_WINDOW (window), gtk_get_current_event_time ()); +		priv->present_on_insert = FALSE; +	}  }  static void @@ -2866,210 +2969,210 @@ notebook_page_removed_callback (GtkWidget       *notebook,                                  guint            page_num,                                  TerminalWindow  *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalScreen *screen; -  int pages; - -  if (priv->disposed) -    return; - -  screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (container)); - -  _terminal_debug_print (TERMINAL_DEBUG_MDI, -                         "[window %p] MDI: screen %p removed\n", -                         window, screen); - -  g_signal_handlers_disconnect_by_func (G_OBJECT (screen), -                                        G_CALLBACK (profile_set_callback), -                                        window); - -  g_signal_handlers_disconnect_by_func (G_OBJECT (screen), -                                        G_CALLBACK (sync_screen_title), -                                        window); +	TerminalWindowPrivate *priv = window->priv; +	TerminalScreen *screen; +	int pages; + +	if (priv->disposed) +		return; + +	screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (container)); + +	_terminal_debug_print (TERMINAL_DEBUG_MDI, +	                       "[window %p] MDI: screen %p removed\n", +	                       window, screen); + +	g_signal_handlers_disconnect_by_func (G_OBJECT (screen), +	                                      G_CALLBACK (profile_set_callback), +	                                      window); + +	g_signal_handlers_disconnect_by_func (G_OBJECT (screen), +	                                      G_CALLBACK (sync_screen_title), +	                                      window); + +	g_signal_handlers_disconnect_by_func (G_OBJECT (screen), +	                                      G_CALLBACK (sync_screen_icon_title), +	                                      window); + +	g_signal_handlers_disconnect_by_func (G_OBJECT (screen), +	                                      G_CALLBACK (sync_screen_icon_title_set), +	                                      window); + +	g_signal_handlers_disconnect_by_func (G_OBJECT (screen), +	                                      G_CALLBACK (terminal_window_update_copy_sensitivity), +	                                      window); + +	g_signal_handlers_disconnect_by_func (screen, +	                                      G_CALLBACK (screen_show_popup_menu_callback), +	                                      window); + +	g_signal_handlers_disconnect_by_func (screen, +	                                      G_CALLBACK (screen_match_clicked_cb), +	                                      window); +	g_signal_handlers_disconnect_by_func (screen, +	                                      G_CALLBACK (screen_resize_window_cb), +	                                      window); + +	g_signal_handlers_disconnect_by_func (screen, +	                                      G_CALLBACK (screen_close_cb), +	                                      window); + +	terminal_window_update_tabs_menu_sensitivity (window); +	update_tab_visibility (window, 0); +	terminal_window_update_search_sensitivity (screen, window); + +	pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook)); +	if (pages == 1) +	{ +		terminal_window_set_size (window, priv->active_screen, TRUE); +	} +	else if (pages == 0) +	{ +		gtk_widget_destroy (GTK_WIDGET (window)); +	} +} -  g_signal_handlers_disconnect_by_func (G_OBJECT (screen), -                                        G_CALLBACK (sync_screen_icon_title), -                                        window); +void +terminal_window_update_geometry (TerminalWindow *window) +{ +	TerminalWindowPrivate *priv = window->priv; +	GtkWidget *widget; +	GdkGeometry hints; +	int char_width; +	int char_height; -  g_signal_handlers_disconnect_by_func (G_OBJECT (screen), -                                        G_CALLBACK (sync_screen_icon_title_set), -                                        window); +	if (priv->active_screen == NULL) +		return; -  g_signal_handlers_disconnect_by_func (G_OBJECT (screen), -                                        G_CALLBACK (terminal_window_update_copy_sensitivity), -                                        window); +	widget = GTK_WIDGET (priv->active_screen); -  g_signal_handlers_disconnect_by_func (screen, -                                        G_CALLBACK (screen_show_popup_menu_callback), -                                        window); +	/* We set geometry hints from the active term; best thing +	 * I can think of to do. Other option would be to try to +	 * get some kind of union of all hints from all terms in the +	 * window, but that doesn't make too much sense. +	 */ +	terminal_screen_get_cell_size (priv->active_screen, &char_width, &char_height); -  g_signal_handlers_disconnect_by_func (screen, -                                        G_CALLBACK (screen_match_clicked_cb), -                                        window); -  g_signal_handlers_disconnect_by_func (screen, -                                        G_CALLBACK (screen_resize_window_cb), -                                        window); +	if (char_width != priv->old_char_width || +	        char_height != priv->old_char_height || +	        widget != (GtkWidget*) priv->old_geometry_widget) +	{ +		GtkBorder *inner_border = NULL; -  g_signal_handlers_disconnect_by_func (screen, -                                        G_CALLBACK (screen_close_cb), -                                        window); +		/* FIXME Since we're using xthickness/ythickness to compute +		 * padding we need to change the hints when the theme changes. +		 */ -  terminal_window_update_tabs_menu_sensitivity (window); -  update_tab_visibility (window, 0); -  terminal_window_update_search_sensitivity (screen, window); +		gtk_widget_style_get (widget, "inner-border", &inner_border, NULL); -  pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook)); -  if (pages == 1) -    { -      terminal_window_set_size (window, priv->active_screen, TRUE); -    } -  else if (pages == 0) -    { -      gtk_widget_destroy (GTK_WIDGET (window)); -    } -} +		hints.base_width = (inner_border ? (inner_border->left + inner_border->right) : 0); +		hints.base_height = (inner_border ? (inner_border->top + inner_border->bottom) : 0); -void -terminal_window_update_geometry (TerminalWindow *window) -{ -  TerminalWindowPrivate *priv = window->priv; -  GtkWidget *widget; -  GdkGeometry hints; -  int char_width; -  int char_height; -   -  if (priv->active_screen == NULL) -    return; - -  widget = GTK_WIDGET (priv->active_screen); - -  /* We set geometry hints from the active term; best thing -   * I can think of to do. Other option would be to try to -   * get some kind of union of all hints from all terms in the -   * window, but that doesn't make too much sense. -   */ -  terminal_screen_get_cell_size (priv->active_screen, &char_width, &char_height); -   -  if (char_width != priv->old_char_width || -      char_height != priv->old_char_height || -      widget != (GtkWidget*) priv->old_geometry_widget) -    { -      GtkBorder *inner_border = NULL; -       -      /* FIXME Since we're using xthickness/ythickness to compute -       * padding we need to change the hints when the theme changes. -       */ - -      gtk_widget_style_get (widget, "inner-border", &inner_border, NULL); - -      hints.base_width = (inner_border ? (inner_border->left + inner_border->right) : 0); -      hints.base_height = (inner_border ? (inner_border->top + inner_border->bottom) : 0); - -      gtk_border_free (inner_border); +		gtk_border_free (inner_border);  #define MIN_WIDTH_CHARS 4  #define MIN_HEIGHT_CHARS 1 -       -      hints.width_inc = char_width; -      hints.height_inc = char_height; - -      /* min size is min size of just the geometry widget, remember. */ -      hints.min_width = hints.base_width + hints.width_inc * MIN_WIDTH_CHARS; -      hints.min_height = hints.base_height + hints.height_inc * MIN_HEIGHT_CHARS; -       -      gtk_window_set_geometry_hints (GTK_WINDOW (window), -                                     widget, -                                     &hints, -                                     GDK_HINT_RESIZE_INC | -                                     GDK_HINT_MIN_SIZE | -                                     GDK_HINT_BASE_SIZE); - -      _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                             "[window %p] hints: base %dx%d min %dx%d inc %d %d\n", -                             window, -                             hints.base_width, -                             hints.base_height, -                             hints.min_width, -                             hints.min_height, -                             hints.width_inc, -                             hints.height_inc); -       -      priv->old_char_width = hints.width_inc; -      priv->old_char_height = hints.height_inc; -      priv->old_geometry_widget = widget; -    } -  else -    { -      _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, -                             "[window %p] hints: increment unchanged, not setting\n", -                             window); -    } + +		hints.width_inc = char_width; +		hints.height_inc = char_height; + +		/* min size is min size of just the geometry widget, remember. */ +		hints.min_width = hints.base_width + hints.width_inc * MIN_WIDTH_CHARS; +		hints.min_height = hints.base_height + hints.height_inc * MIN_HEIGHT_CHARS; + +		gtk_window_set_geometry_hints (GTK_WINDOW (window), +		                               widget, +		                               &hints, +		                               GDK_HINT_RESIZE_INC | +		                               GDK_HINT_MIN_SIZE | +		                               GDK_HINT_BASE_SIZE); + +		_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +		                       "[window %p] hints: base %dx%d min %dx%d inc %d %d\n", +		                       window, +		                       hints.base_width, +		                       hints.base_height, +		                       hints.min_width, +		                       hints.min_height, +		                       hints.width_inc, +		                       hints.height_inc); + +		priv->old_char_width = hints.width_inc; +		priv->old_char_height = hints.height_inc; +		priv->old_geometry_widget = widget; +	} +	else +	{ +		_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, +		                       "[window %p] hints: increment unchanged, not setting\n", +		                       window); +	}  }  static void  file_new_window_callback (GtkAction *action,                            TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalApp *app; -  TerminalWindow *new_window; -  TerminalProfile *profile; -  char *new_working_directory; - -  app = terminal_app_get (); - -  profile = g_object_get_data (G_OBJECT (action), PROFILE_DATA_KEY); -  if (!profile) -    profile = terminal_screen_get_profile (priv->active_screen); -  if (!profile) -    profile = terminal_app_get_profile_for_new_term (app); -  if (!profile) -    return; - -  if (_terminal_profile_get_forgotten (profile)) -    return; - -  new_window = terminal_app_new_window (app, gtk_widget_get_screen (GTK_WIDGET (window))); - -  new_working_directory = terminal_screen_get_current_dir_with_fallback (priv->active_screen); -  terminal_app_new_terminal (app, new_window, profile, -                             NULL, NULL, -                             new_working_directory, -                             terminal_screen_get_initial_environment (priv->active_screen), -                             1.0); -  g_free (new_working_directory); - -  gtk_window_present (GTK_WINDOW (new_window)); +	TerminalWindowPrivate *priv = window->priv; +	TerminalApp *app; +	TerminalWindow *new_window; +	TerminalProfile *profile; +	char *new_working_directory; + +	app = terminal_app_get (); + +	profile = g_object_get_data (G_OBJECT (action), PROFILE_DATA_KEY); +	if (!profile) +		profile = terminal_screen_get_profile (priv->active_screen); +	if (!profile) +		profile = terminal_app_get_profile_for_new_term (app); +	if (!profile) +		return; + +	if (_terminal_profile_get_forgotten (profile)) +		return; + +	new_window = terminal_app_new_window (app, gtk_widget_get_screen (GTK_WIDGET (window))); + +	new_working_directory = terminal_screen_get_current_dir_with_fallback (priv->active_screen); +	terminal_app_new_terminal (app, new_window, profile, +	                           NULL, NULL, +	                           new_working_directory, +	                           terminal_screen_get_initial_environment (priv->active_screen), +	                           1.0); +	g_free (new_working_directory); + +	gtk_window_present (GTK_WINDOW (new_window));  }  static void  file_new_tab_callback (GtkAction *action,                         TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalApp *app; -  TerminalProfile *profile; -  char *new_working_directory; - -  app = terminal_app_get (); -  profile = g_object_get_data (G_OBJECT (action), PROFILE_DATA_KEY); -  if (!profile) -    profile = terminal_screen_get_profile (priv->active_screen); -  if (!profile) -    profile = terminal_app_get_profile_for_new_term (app); -  if (!profile) -    return; - -  if (_terminal_profile_get_forgotten (profile)) -    return; - -  new_working_directory = terminal_screen_get_current_dir_with_fallback (priv->active_screen); -  terminal_app_new_terminal (app, window, profile, -                             NULL, NULL, -                             new_working_directory, -                             terminal_screen_get_initial_environment (priv->active_screen), -                             1.0); -  g_free (new_working_directory); +	TerminalWindowPrivate *priv = window->priv; +	TerminalApp *app; +	TerminalProfile *profile; +	char *new_working_directory; + +	app = terminal_app_get (); +	profile = g_object_get_data (G_OBJECT (action), PROFILE_DATA_KEY); +	if (!profile) +		profile = terminal_screen_get_profile (priv->active_screen); +	if (!profile) +		profile = terminal_app_get_profile_for_new_term (app); +	if (!profile) +		return; + +	if (_terminal_profile_get_forgotten (profile)) +		return; + +	new_working_directory = terminal_screen_get_current_dir_with_fallback (priv->active_screen); +	terminal_app_new_terminal (app, window, profile, +	                           NULL, NULL, +	                           new_working_directory, +	                           terminal_screen_get_initial_environment (priv->active_screen), +	                           1.0); +	g_free (new_working_directory);  }  static void @@ -3077,19 +3180,19 @@ confirm_close_response_cb (GtkWidget *dialog,                             int response,                             TerminalWindow *window)  { -  TerminalScreen *screen; +	TerminalScreen *screen; -  screen = g_object_get_data (G_OBJECT (dialog), "close-screen"); +	screen = g_object_get_data (G_OBJECT (dialog), "close-screen"); -  gtk_widget_destroy (dialog); +	gtk_widget_destroy (dialog); -  if (response != GTK_RESPONSE_ACCEPT) -    return; -     -  if (screen) -    terminal_window_remove_screen (window, screen); -  else -    gtk_widget_destroy (GTK_WIDGET (window)); +	if (response != GTK_RESPONSE_ACCEPT) +		return; + +	if (screen) +		terminal_window_remove_screen (window, screen); +	else +		gtk_widget_destroy (GTK_WIDGET (window));  }  /* Returns: TRUE if closing needs to wait until user confirmation; @@ -3099,153 +3202,153 @@ static gboolean  confirm_close_window_or_tab (TerminalWindow *window,                               TerminalScreen *screen)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkWidget *dialog; -  MateConfClient *client; -  gboolean do_confirm; -  int n_tabs; - -  if (priv->confirm_close_dialog) -    { -      /* WTF, already have one? It's modal, so how did that happen? */ -      gtk_dialog_response (GTK_DIALOG (priv->confirm_close_dialog), -                           GTK_RESPONSE_DELETE_EVENT); -    } - -  client = mateconf_client_get_default (); -  do_confirm = mateconf_client_get_bool (client, CONF_GLOBAL_PREFIX "/confirm_window_close", NULL); -  g_object_unref (client); -  if (!do_confirm) -    return FALSE; - -  if (screen) -    { -      do_confirm = terminal_screen_has_foreground_process (screen); -      n_tabs = 1; -    } -  else -    { -      GList *tabs, *t; - -      do_confirm = FALSE; - -      tabs = terminal_window_list_screen_containers (window); -      n_tabs = g_list_length (tabs); - -      for (t = tabs; t != NULL; t = t->next) -        { -          TerminalScreen *terminal_screen; - -          terminal_screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (t->data)); -          if (terminal_screen_has_foreground_process (terminal_screen)) -            { -              do_confirm = TRUE; -              break; -            } -        } -      g_list_free (tabs); -    } - -  if (!do_confirm) -    return FALSE; - -  dialog = priv->confirm_close_dialog = -    gtk_message_dialog_new (GTK_WINDOW (window), -                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, -                            GTK_MESSAGE_WARNING, -                            GTK_BUTTONS_CANCEL, -                            "%s", n_tabs > 1 ? _("Close this window?") : _("Close this terminal?")); - -  if (n_tabs > 1) -    gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), -                                              "%s", _("There are still processes running in some terminals in this window. " -                                                      "Closing the window will kill all of them.")); -  else -    gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), -                                              "%s", _("There is still a process running in this terminal. " -                                                      "Closing the terminal will kill it.")); - -  gtk_window_set_title (GTK_WINDOW (dialog), "");  - -  gtk_dialog_add_button (GTK_DIALOG (dialog), n_tabs > 1 ? _("C_lose Window") : _("C_lose Terminal"), GTK_RESPONSE_ACCEPT); -  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); - -  gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), -                                           GTK_RESPONSE_ACCEPT, -                                           GTK_RESPONSE_CANCEL, -                                           -1); - -  g_object_set_data (G_OBJECT (dialog), "close-screen", screen); - -  g_signal_connect (dialog, "destroy", -                    G_CALLBACK (gtk_widget_destroyed), &priv->confirm_close_dialog); -  g_signal_connect (dialog, "response", -                    G_CALLBACK (confirm_close_response_cb), window); - -  gtk_window_present (GTK_WINDOW (dialog)); - -  return TRUE; +	TerminalWindowPrivate *priv = window->priv; +	GtkWidget *dialog; +	MateConfClient *client; +	gboolean do_confirm; +	int n_tabs; + +	if (priv->confirm_close_dialog) +	{ +		/* WTF, already have one? It's modal, so how did that happen? */ +		gtk_dialog_response (GTK_DIALOG (priv->confirm_close_dialog), +		                     GTK_RESPONSE_DELETE_EVENT); +	} + +	client = mateconf_client_get_default (); +	do_confirm = mateconf_client_get_bool (client, CONF_GLOBAL_PREFIX "/confirm_window_close", NULL); +	g_object_unref (client); +	if (!do_confirm) +		return FALSE; + +	if (screen) +	{ +		do_confirm = terminal_screen_has_foreground_process (screen); +		n_tabs = 1; +	} +	else +	{ +		GList *tabs, *t; + +		do_confirm = FALSE; + +		tabs = terminal_window_list_screen_containers (window); +		n_tabs = g_list_length (tabs); + +		for (t = tabs; t != NULL; t = t->next) +		{ +			TerminalScreen *terminal_screen; + +			terminal_screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (t->data)); +			if (terminal_screen_has_foreground_process (terminal_screen)) +			{ +				do_confirm = TRUE; +				break; +			} +		} +		g_list_free (tabs); +	} + +	if (!do_confirm) +		return FALSE; + +	dialog = priv->confirm_close_dialog = +	             gtk_message_dialog_new (GTK_WINDOW (window), +	                                     GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, +	                                     GTK_MESSAGE_WARNING, +	                                     GTK_BUTTONS_CANCEL, +	                                     "%s", n_tabs > 1 ? _("Close this window?") : _("Close this terminal?")); + +	if (n_tabs > 1) +		gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), +		        "%s", _("There are still processes running in some terminals in this window. " +		                "Closing the window will kill all of them.")); +	else +		gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), +		        "%s", _("There is still a process running in this terminal. " +		                "Closing the terminal will kill it.")); + +	gtk_window_set_title (GTK_WINDOW (dialog), ""); + +	gtk_dialog_add_button (GTK_DIALOG (dialog), n_tabs > 1 ? _("C_lose Window") : _("C_lose Terminal"), GTK_RESPONSE_ACCEPT); +	gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); + +	gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), +	        GTK_RESPONSE_ACCEPT, +	        GTK_RESPONSE_CANCEL, +	        -1); + +	g_object_set_data (G_OBJECT (dialog), "close-screen", screen); + +	g_signal_connect (dialog, "destroy", +	                  G_CALLBACK (gtk_widget_destroyed), &priv->confirm_close_dialog); +	g_signal_connect (dialog, "response", +	                  G_CALLBACK (confirm_close_response_cb), window); + +	gtk_window_present (GTK_WINDOW (dialog)); + +	return TRUE;  }  static void  file_close_window_callback (GtkAction *action,                              TerminalWindow *window)  { -  if (confirm_close_window_or_tab (window, NULL)) -    return; +	if (confirm_close_window_or_tab (window, NULL)) +		return; -  gtk_widget_destroy (GTK_WIDGET (window)); +	gtk_widget_destroy (GTK_WIDGET (window));  }  #ifdef ENABLE_SAVE  static void  save_contents_dialog_on_response (GtkDialog *dialog, gint response_id, gpointer terminal)  { -  GtkWindow *parent; -  gchar *filename_uri = NULL; -  GFile *file; -  GOutputStream *stream; -  GError *error = NULL; - -  if (response_id != GTK_RESPONSE_ACCEPT) -    { -      gtk_widget_destroy (GTK_WIDGET (dialog)); -      return; -    } - -  parent = (GtkWindow*) gtk_widget_get_ancestor (GTK_WIDGET (terminal), GTK_TYPE_WINDOW); -  filename_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog)); - -  gtk_widget_destroy (GTK_WIDGET (dialog)); - -  if (filename_uri == NULL) -    return; - -  file = g_file_new_for_uri (filename_uri); -  stream = G_OUTPUT_STREAM (g_file_replace (file, NULL, FALSE, G_FILE_CREATE_NONE, NULL, &error)); - -  if (stream) -    { -      /* XXX -       * FIXME -       * This is a sync operation. -       * Should be replaced with the async version when vte implements that. -       */ -      vte_terminal_write_contents (terminal, stream, -				   VTE_TERMINAL_WRITE_DEFAULT, -				   NULL, &error); -      g_object_unref (stream); -    } - -  if (error) -    { -      terminal_util_show_error_dialog (parent, NULL, error, -				       "%s", _("Could not save contents")); -      g_error_free (error); -    } - -  g_object_unref(file); -  g_free(filename_uri); +	GtkWindow *parent; +	gchar *filename_uri = NULL; +	GFile *file; +	GOutputStream *stream; +	GError *error = NULL; + +	if (response_id != GTK_RESPONSE_ACCEPT) +	{ +		gtk_widget_destroy (GTK_WIDGET (dialog)); +		return; +	} + +	parent = (GtkWindow*) gtk_widget_get_ancestor (GTK_WIDGET (terminal), GTK_TYPE_WINDOW); +	filename_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog)); + +	gtk_widget_destroy (GTK_WIDGET (dialog)); + +	if (filename_uri == NULL) +		return; + +	file = g_file_new_for_uri (filename_uri); +	stream = G_OUTPUT_STREAM (g_file_replace (file, NULL, FALSE, G_FILE_CREATE_NONE, NULL, &error)); + +	if (stream) +	{ +		/* XXX +		 * FIXME +		 * This is a sync operation. +		 * Should be replaced with the async version when vte implements that. +		 */ +		vte_terminal_write_contents (terminal, stream, +		                             VTE_TERMINAL_WRITE_DEFAULT, +		                             NULL, &error); +		g_object_unref (stream); +	} + +	if (error) +	{ +		terminal_util_show_error_dialog (parent, NULL, error, +		                                 "%s", _("Could not save contents")); +		g_error_free (error); +	} + +	g_object_unref(file); +	g_free(filename_uri);  }  #endif /* ENABLE_SAVE */ @@ -3254,35 +3357,35 @@ file_save_contents_callback (GtkAction *action,                               TerminalWindow *window)  {  #ifdef ENABLE_SAVE -  GtkWidget *dialog = NULL; -  TerminalWindowPrivate *priv = window->priv; -  VteTerminal *terminal; +	GtkWidget *dialog = NULL; +	TerminalWindowPrivate *priv = window->priv; +	VteTerminal *terminal; -  if (!priv->active_screen) -    return; +	if (!priv->active_screen) +		return; -  terminal = VTE_TERMINAL (priv->active_screen); -  g_return_if_fail (VTE_IS_TERMINAL (terminal)); +	terminal = VTE_TERMINAL (priv->active_screen); +	g_return_if_fail (VTE_IS_TERMINAL (terminal)); -  dialog = gtk_file_chooser_dialog_new (_("Save as..."), -                                        GTK_WINDOW(window), -                                        GTK_FILE_CHOOSER_ACTION_SAVE, -                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, -                                        GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, -                                        NULL); +	dialog = gtk_file_chooser_dialog_new (_("Save as..."), +	                                      GTK_WINDOW(window), +	                                      GTK_FILE_CHOOSER_ACTION_SAVE, +	                                      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, +	                                      GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, +	                                      NULL); -  gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); -  /* XXX where should we save to? */ -  gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP)); +	gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); +	/* XXX where should we save to? */ +	gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP)); -  gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW(window)); -  gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); -  gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE); +	gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW(window)); +	gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); +	gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE); -  g_signal_connect (dialog, "response", G_CALLBACK (save_contents_dialog_on_response), terminal); -  g_signal_connect (dialog, "delete_event", G_CALLBACK (terminal_util_dialog_response_on_delete), NULL); +	g_signal_connect (dialog, "response", G_CALLBACK (save_contents_dialog_on_response), terminal); +	g_signal_connect (dialog, "delete_event", G_CALLBACK (terminal_util_dialog_response_on_delete), NULL); -  gtk_window_present (GTK_WINDOW (dialog)); +	gtk_window_present (GTK_WINDOW (dialog));  #endif /* ENABLE_SAVE */  } @@ -3290,33 +3393,34 @@ static void  file_close_tab_callback (GtkAction *action,                           TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalScreen *active_screen = priv->active_screen; -   -  if (!active_screen) -    return; +	TerminalWindowPrivate *priv = window->priv; +	TerminalScreen *active_screen = priv->active_screen; -  if (confirm_close_window_or_tab (window, active_screen)) -    return; +	if (!active_screen) +		return; -  terminal_window_remove_screen (window, active_screen); +	if (confirm_close_window_or_tab (window, active_screen)) +		return; + +	terminal_window_remove_screen (window, active_screen);  }  static void  edit_copy_callback (GtkAction *action,                      TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindowPrivate *priv = window->priv; + +	if (!priv->active_screen) +		return; -  if (!priv->active_screen) -    return; -       -  vte_terminal_copy_clipboard (VTE_TERMINAL (priv->active_screen)); +	vte_terminal_copy_clipboard (VTE_TERMINAL (priv->active_screen));  } -typedef struct { -  TerminalScreen *screen; -  gboolean uris_as_paths; +typedef struct +{ +	TerminalScreen *screen; +	gboolean uris_as_paths;  } PasteData;  static void @@ -3324,25 +3428,26 @@ clipboard_uris_received_cb (GtkClipboard *clipboard,                              /* const */ char **uris,                              PasteData *data)  { -  char *text; -  gsize len; - -  if (!uris) { -    g_object_unref (data->screen); -    g_slice_free (PasteData, data); -    return; -  } - -  /* This potentially modifies the strings in |uris| but that's ok */ -  if (data->uris_as_paths) -    terminal_util_transform_uris_to_quoted_fuse_paths (uris); - -  text = terminal_util_concat_uris (uris, &len); -  vte_terminal_feed_child (VTE_TERMINAL (data->screen), text, len); -  g_free (text); - -  g_object_unref (data->screen); -  g_slice_free (PasteData, data); +	char *text; +	gsize len; + +	if (!uris) +	{ +		g_object_unref (data->screen); +		g_slice_free (PasteData, data); +		return; +	} + +	/* This potentially modifies the strings in |uris| but that's ok */ +	if (data->uris_as_paths) +		terminal_util_transform_uris_to_quoted_fuse_paths (uris); + +	text = terminal_util_concat_uris (uris, &len); +	vte_terminal_feed_child (VTE_TERMINAL (data->screen), text, len); +	g_free (text); + +	g_object_unref (data->screen); +	g_slice_free (PasteData, data);  }  static void @@ -3351,265 +3456,270 @@ clipboard_targets_received_cb (GtkClipboard *clipboard,                                 int n_targets,                                 PasteData *data)  { -  if (!targets) { -    g_object_unref (data->screen); -    g_slice_free (PasteData, data); -    return; -  } - -  if (gtk_targets_include_uri (targets, n_targets)) { -    gtk_clipboard_request_uris (clipboard, -                                (GtkClipboardURIReceivedFunc) clipboard_uris_received_cb, -                                data); -    return; -  } else /* if (gtk_targets_include_text (targets, n_targets)) */ { -    vte_terminal_paste_clipboard (VTE_TERMINAL (data->screen)); -  } - -  g_object_unref (data->screen); -  g_slice_free (PasteData, data); +	if (!targets) +	{ +		g_object_unref (data->screen); +		g_slice_free (PasteData, data); +		return; +	} + +	if (gtk_targets_include_uri (targets, n_targets)) +	{ +		gtk_clipboard_request_uris (clipboard, +		                            (GtkClipboardURIReceivedFunc) clipboard_uris_received_cb, +		                            data); +		return; +	} +	else /* if (gtk_targets_include_text (targets, n_targets)) */ +	{ +		vte_terminal_paste_clipboard (VTE_TERMINAL (data->screen)); +	} + +	g_object_unref (data->screen); +	g_slice_free (PasteData, data);  }  static void  edit_paste_callback (GtkAction *action,                       TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkClipboard *clipboard; -  PasteData *data; -  const char *name; +	TerminalWindowPrivate *priv = window->priv; +	GtkClipboard *clipboard; +	PasteData *data; +	const char *name; + +	if (!priv->active_screen) +		return; -  if (!priv->active_screen) -    return; -       -  clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_CLIPBOARD); -  name = gtk_action_get_name (action); +	clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_CLIPBOARD); +	name = gtk_action_get_name (action); -  data = g_slice_new (PasteData); -  data->screen = g_object_ref (priv->active_screen); -  data->uris_as_paths = (name == I_("EditPasteURIPaths") || name == I_("PopupPasteURIPaths")); +	data = g_slice_new (PasteData); +	data->screen = g_object_ref (priv->active_screen); +	data->uris_as_paths = (name == I_("EditPasteURIPaths") || name == I_("PopupPasteURIPaths")); -  gtk_clipboard_request_targets (clipboard, -                                 (GtkClipboardTargetsReceivedFunc) clipboard_targets_received_cb, -                                 data); +	gtk_clipboard_request_targets (clipboard, +	                               (GtkClipboardTargetsReceivedFunc) clipboard_targets_received_cb, +	                               data);  }  static void  edit_select_all_callback (GtkAction *action,                            TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindowPrivate *priv = window->priv; -  if (!priv->active_screen) -    return; +	if (!priv->active_screen) +		return; -  vte_terminal_select_all (VTE_TERMINAL (priv->active_screen)); +	vte_terminal_select_all (VTE_TERMINAL (priv->active_screen));  } -       +  static void  edit_keybindings_callback (GtkAction *action,                             TerminalWindow *window)  { -  terminal_app_edit_keybindings (terminal_app_get (), -                                 GTK_WINDOW (window)); +	terminal_app_edit_keybindings (terminal_app_get (), +	                               GTK_WINDOW (window));  }  static void  edit_current_profile_callback (GtkAction *action,                                 TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -   -  terminal_app_edit_profile (terminal_app_get (), -                             terminal_screen_get_profile (priv->active_screen), -                             GTK_WINDOW (window), -                             NULL); +	TerminalWindowPrivate *priv = window->priv; + +	terminal_app_edit_profile (terminal_app_get (), +	                           terminal_screen_get_profile (priv->active_screen), +	                           GTK_WINDOW (window), +	                           NULL);  }  static void  file_new_profile_callback (GtkAction *action,                             TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -   -  terminal_app_new_profile (terminal_app_get (), -                            terminal_screen_get_profile (priv->active_screen), -                            GTK_WINDOW (window)); +	TerminalWindowPrivate *priv = window->priv; + +	terminal_app_new_profile (terminal_app_get (), +	                          terminal_screen_get_profile (priv->active_screen), +	                          GTK_WINDOW (window));  }  static void  edit_profiles_callback (GtkAction *action,                          TerminalWindow *window)  { -  terminal_app_manage_profiles (terminal_app_get (), -                                GTK_WINDOW (window)); +	terminal_app_manage_profiles (terminal_app_get (), +	                              GTK_WINDOW (window));  }  static void  view_menubar_toggled_callback (GtkToggleAction *action,                                 TerminalWindow *window)  { -  terminal_window_set_menubar_visible (window, gtk_toggle_action_get_active (action)); +	terminal_window_set_menubar_visible (window, gtk_toggle_action_get_active (action));  }  static void  view_fullscreen_toggled_callback (GtkToggleAction *action,                                    TerminalWindow *window)  { -  g_return_if_fail (gtk_widget_get_realized (GTK_WIDGET (window))); - -  if (gtk_toggle_action_get_active (action)) -    gtk_window_fullscreen (GTK_WINDOW (window)); -  else -    gtk_window_unfullscreen (GTK_WINDOW (window)); -} - -static const double zoom_factors[] = { -  TERMINAL_SCALE_MINIMUM, -  TERMINAL_SCALE_XXXXX_SMALL, -  TERMINAL_SCALE_XXXX_SMALL, -  TERMINAL_SCALE_XXX_SMALL, -  PANGO_SCALE_XX_SMALL, -  PANGO_SCALE_X_SMALL, -  PANGO_SCALE_SMALL, -  PANGO_SCALE_MEDIUM, -  PANGO_SCALE_LARGE, -  PANGO_SCALE_X_LARGE, -  PANGO_SCALE_XX_LARGE, -  TERMINAL_SCALE_XXX_LARGE, -  TERMINAL_SCALE_XXXX_LARGE, -  TERMINAL_SCALE_XXXXX_LARGE, -  TERMINAL_SCALE_MAXIMUM +	g_return_if_fail (gtk_widget_get_realized (GTK_WIDGET (window))); + +	if (gtk_toggle_action_get_active (action)) +		gtk_window_fullscreen (GTK_WINDOW (window)); +	else +		gtk_window_unfullscreen (GTK_WINDOW (window)); +} + +static const double zoom_factors[] = +{ +	TERMINAL_SCALE_MINIMUM, +	TERMINAL_SCALE_XXXXX_SMALL, +	TERMINAL_SCALE_XXXX_SMALL, +	TERMINAL_SCALE_XXX_SMALL, +	PANGO_SCALE_XX_SMALL, +	PANGO_SCALE_X_SMALL, +	PANGO_SCALE_SMALL, +	PANGO_SCALE_MEDIUM, +	PANGO_SCALE_LARGE, +	PANGO_SCALE_X_LARGE, +	PANGO_SCALE_XX_LARGE, +	TERMINAL_SCALE_XXX_LARGE, +	TERMINAL_SCALE_XXXX_LARGE, +	TERMINAL_SCALE_XXXXX_LARGE, +	TERMINAL_SCALE_MAXIMUM  };  static gboolean  find_larger_zoom_factor (double  current,                           double *found)  { -  guint i; - -  for (i = 0; i < G_N_ELEMENTS (zoom_factors); ++i) -    { -      /* Find a font that's larger than this one */ -      if ((zoom_factors[i] - current) > 1e-6) -        { -          *found = zoom_factors[i]; -          return TRUE; -        } -    } -   -  return FALSE; +	guint i; + +	for (i = 0; i < G_N_ELEMENTS (zoom_factors); ++i) +	{ +		/* Find a font that's larger than this one */ +		if ((zoom_factors[i] - current) > 1e-6) +		{ +			*found = zoom_factors[i]; +			return TRUE; +		} +	} + +	return FALSE;  }  static gboolean  find_smaller_zoom_factor (double  current,                            double *found)  { -  int i; -   -  i = (int) G_N_ELEMENTS (zoom_factors) - 1; -  while (i >= 0) -    { -      /* Find a font that's smaller than this one */ -      if ((current - zoom_factors[i]) > 1e-6) -        { -          *found = zoom_factors[i]; -          return TRUE; -        } -       -      --i; -    } - -  return FALSE; +	int i; + +	i = (int) G_N_ELEMENTS (zoom_factors) - 1; +	while (i >= 0) +	{ +		/* Find a font that's smaller than this one */ +		if ((current - zoom_factors[i]) > 1e-6) +		{ +			*found = zoom_factors[i]; +			return TRUE; +		} + +		--i; +	} + +	return FALSE;  }  static void  view_zoom_in_callback (GtkAction *action,                         TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  double current; -   -  if (priv->active_screen == NULL) -    return; -   -  current = terminal_screen_get_font_scale (priv->active_screen); -  if (!find_larger_zoom_factor (current, ¤t)) -    return; -       -  terminal_screen_set_font_scale (priv->active_screen, current); -  terminal_window_update_zoom_sensitivity (window); +	TerminalWindowPrivate *priv = window->priv; +	double current; + +	if (priv->active_screen == NULL) +		return; + +	current = terminal_screen_get_font_scale (priv->active_screen); +	if (!find_larger_zoom_factor (current, ¤t)) +		return; + +	terminal_screen_set_font_scale (priv->active_screen, current); +	terminal_window_update_zoom_sensitivity (window);  }  static void  view_zoom_out_callback (GtkAction *action,                          TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  double current; +	TerminalWindowPrivate *priv = window->priv; +	double current; + +	if (priv->active_screen == NULL) +		return; -  if (priv->active_screen == NULL) -    return; -   -  current = terminal_screen_get_font_scale (priv->active_screen); -  if (!find_smaller_zoom_factor (current, ¤t)) -    return; -       -  terminal_screen_set_font_scale (priv->active_screen, current); -  terminal_window_update_zoom_sensitivity (window); +	current = terminal_screen_get_font_scale (priv->active_screen); +	if (!find_smaller_zoom_factor (current, ¤t)) +		return; + +	terminal_screen_set_font_scale (priv->active_screen, current); +	terminal_window_update_zoom_sensitivity (window);  }  static void  view_zoom_normal_callback (GtkAction *action,                             TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -   -  if (priv->active_screen == NULL) -    return; +	TerminalWindowPrivate *priv = window->priv; + +	if (priv->active_screen == NULL) +		return; -  terminal_screen_set_font_scale (priv->active_screen, PANGO_SCALE_MEDIUM); -  terminal_window_update_zoom_sensitivity (window); +	terminal_screen_set_font_scale (priv->active_screen, PANGO_SCALE_MEDIUM); +	terminal_window_update_zoom_sensitivity (window);  }  static void  search_find_response_callback (GtkWidget *dialog, -			       int        response, -			       gpointer   user_data) +                               int        response, +                               gpointer   user_data)  { -  TerminalWindow *window = TERMINAL_WINDOW (user_data); -  TerminalWindowPrivate *priv = window->priv; -  TerminalSearchFlags flags; -  GRegex *regex; +	TerminalWindow *window = TERMINAL_WINDOW (user_data); +	TerminalWindowPrivate *priv = window->priv; +	TerminalSearchFlags flags; +	GRegex *regex; -  if (response != GTK_RESPONSE_ACCEPT) -    return; +	if (response != GTK_RESPONSE_ACCEPT) +		return; -  if (G_UNLIKELY (!priv->active_screen)) -    return; +	if (G_UNLIKELY (!priv->active_screen)) +		return; -  regex = terminal_search_dialog_get_regex (dialog); -  g_return_if_fail (regex != NULL); +	regex = terminal_search_dialog_get_regex (dialog); +	g_return_if_fail (regex != NULL); -  flags = terminal_search_dialog_get_search_flags (dialog); +	flags = terminal_search_dialog_get_search_flags (dialog); -  vte_terminal_search_set_gregex (VTE_TERMINAL (priv->active_screen), regex); -  vte_terminal_search_set_wrap_around (VTE_TERMINAL (priv->active_screen), -				       (flags & TERMINAL_SEARCH_FLAG_WRAP_AROUND)); +	vte_terminal_search_set_gregex (VTE_TERMINAL (priv->active_screen), regex); +	vte_terminal_search_set_wrap_around (VTE_TERMINAL (priv->active_screen), +	                                     (flags & TERMINAL_SEARCH_FLAG_WRAP_AROUND)); -  if (flags & TERMINAL_SEARCH_FLAG_BACKWARDS) -    vte_terminal_search_find_previous (VTE_TERMINAL (priv->active_screen)); -  else -    vte_terminal_search_find_next (VTE_TERMINAL (priv->active_screen)); +	if (flags & TERMINAL_SEARCH_FLAG_BACKWARDS) +		vte_terminal_search_find_previous (VTE_TERMINAL (priv->active_screen)); +	else +		vte_terminal_search_find_next (VTE_TERMINAL (priv->active_screen)); -  terminal_window_update_search_sensitivity (priv->active_screen, window); +	terminal_window_update_search_sensitivity (priv->active_screen, window);  }  static gboolean  search_dialog_delete_event_cb (GtkWidget   *widget, -			       GdkEventAny *event, -			       gpointer     user_data) +                               GdkEventAny *event, +                               gpointer     user_data)  {  	/* prevent destruction */  	return TRUE; @@ -3617,54 +3727,55 @@ search_dialog_delete_event_cb (GtkWidget   *widget,  static void  search_find_callback (GtkAction *action, -		      TerminalWindow *window) +                      TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindowPrivate *priv = window->priv; -  if (!priv->search_find_dialog) { -    GtkWidget *dialog; +	if (!priv->search_find_dialog) +	{ +		GtkWidget *dialog; -    dialog = priv->search_find_dialog = terminal_search_dialog_new (GTK_WINDOW (window)); +		dialog = priv->search_find_dialog = terminal_search_dialog_new (GTK_WINDOW (window)); -    g_signal_connect (dialog, "destroy", -		      G_CALLBACK (gtk_widget_destroyed), &priv->search_find_dialog); -    g_signal_connect (dialog, "response", -		      G_CALLBACK (search_find_response_callback), window); -    g_signal_connect (dialog, "delete-event", -		     G_CALLBACK (search_dialog_delete_event_cb), NULL); -  } +		g_signal_connect (dialog, "destroy", +		                  G_CALLBACK (gtk_widget_destroyed), &priv->search_find_dialog); +		g_signal_connect (dialog, "response", +		                  G_CALLBACK (search_find_response_callback), window); +		g_signal_connect (dialog, "delete-event", +		                  G_CALLBACK (search_dialog_delete_event_cb), NULL); +	} -  terminal_search_dialog_present (priv->search_find_dialog); +	terminal_search_dialog_present (priv->search_find_dialog);  }  static void  search_find_next_callback (GtkAction *action, -			   TerminalWindow *window) +                           TerminalWindow *window)  { -  if (G_UNLIKELY (!window->priv->active_screen)) -    return; +	if (G_UNLIKELY (!window->priv->active_screen)) +		return; -  vte_terminal_search_find_next (VTE_TERMINAL (window->priv->active_screen)); +	vte_terminal_search_find_next (VTE_TERMINAL (window->priv->active_screen));  }  static void  search_find_prev_callback (GtkAction *action, -			   TerminalWindow *window) +                           TerminalWindow *window)  { -  if (G_UNLIKELY (!window->priv->active_screen)) -    return; +	if (G_UNLIKELY (!window->priv->active_screen)) +		return; -  vte_terminal_search_find_previous (VTE_TERMINAL (window->priv->active_screen)); +	vte_terminal_search_find_previous (VTE_TERMINAL (window->priv->active_screen));  }  static void  search_clear_highlight_callback (GtkAction *action, -				 TerminalWindow *window) +                                 TerminalWindow *window)  { -  if (G_UNLIKELY (!window->priv->active_screen)) -    return; +	if (G_UNLIKELY (!window->priv->active_screen)) +		return; -  vte_terminal_search_set_gregex (VTE_TERMINAL (window->priv->active_screen), NULL); +	vte_terminal_search_set_gregex (VTE_TERMINAL (window->priv->active_screen), NULL);  }  static void @@ -3672,202 +3783,205 @@ terminal_set_title_dialog_response_cb (GtkWidget *dialog,                                         int response,                                         TerminalScreen *screen)  { -  if (response == GTK_RESPONSE_OK) -    { -      GtkEntry *entry; -      const char *text; +	if (response == GTK_RESPONSE_OK) +	{ +		GtkEntry *entry; +		const char *text; -      entry = GTK_ENTRY (g_object_get_data (G_OBJECT (dialog), "title-entry")); -      text = gtk_entry_get_text (entry); -      terminal_screen_set_user_title (screen, text); -    } +		entry = GTK_ENTRY (g_object_get_data (G_OBJECT (dialog), "title-entry")); +		text = gtk_entry_get_text (entry); +		terminal_screen_set_user_title (screen, text); +	} -  gtk_widget_destroy (dialog); +	gtk_widget_destroy (dialog);  }  static void  terminal_set_title_callback (GtkAction *action,                               TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkWidget *dialog, *message_area, *hbox, *label, *entry; +	TerminalWindowPrivate *priv = window->priv; +	GtkWidget *dialog, *message_area, *hbox, *label, *entry; -  if (priv->active_screen == NULL) -    return; +	if (priv->active_screen == NULL) +		return; -  /* FIXME: hook the screen up so this dialogue closes if the terminal screen closes */ +	/* FIXME: hook the screen up so this dialogue closes if the terminal screen closes */ -  dialog = gtk_message_dialog_new (GTK_WINDOW (window), -                                   GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, -                                   GTK_MESSAGE_OTHER, -                                   GTK_BUTTONS_OK_CANCEL, -                                   "%s", ""); +	dialog = gtk_message_dialog_new (GTK_WINDOW (window), +	                                 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, +	                                 GTK_MESSAGE_OTHER, +	                                 GTK_BUTTONS_OK_CANCEL, +	                                 "%s", ""); -  gtk_window_set_title (GTK_WINDOW (dialog), _("Set Title")); -  gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); -  gtk_window_set_role (GTK_WINDOW (dialog), "mate-terminal-change-title"); -  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); -  /* Alternative button order was set automatically by GtkMessageDialog */ +	gtk_window_set_title (GTK_WINDOW (dialog), _("Set Title")); +	gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); +	gtk_window_set_role (GTK_WINDOW (dialog), "mate-terminal-change-title"); +	gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); +	/* Alternative button order was set automatically by GtkMessageDialog */ -  g_signal_connect (dialog, "response", -                    G_CALLBACK (terminal_set_title_dialog_response_cb), priv->active_screen); -  g_signal_connect (dialog, "delete-event", -                    G_CALLBACK (terminal_util_dialog_response_on_delete), NULL); +	g_signal_connect (dialog, "response", +	                  G_CALLBACK (terminal_set_title_dialog_response_cb), priv->active_screen); +	g_signal_connect (dialog, "delete-event", +	                  G_CALLBACK (terminal_util_dialog_response_on_delete), NULL);  #if GTK_CHECK_VERSION (2, 90, 6) -  message_area = gtk_message_dialog_get_message_area (GTK_MESSAGE_DIALOG (dialog)); -  gtk_container_foreach (GTK_CONTAINER (message_area), (GtkCallback) gtk_widget_hide, NULL); +	message_area = gtk_message_dialog_get_message_area (GTK_MESSAGE_DIALOG (dialog)); +	gtk_container_foreach (GTK_CONTAINER (message_area), (GtkCallback) gtk_widget_hide, NULL);  #else -  label = GTK_MESSAGE_DIALOG (dialog)->label; -  gtk_widget_hide (label); -  message_area = gtk_widget_get_parent (label); +	label = GTK_MESSAGE_DIALOG (dialog)->label; +	gtk_widget_hide (label); +	message_area = gtk_widget_get_parent (label);  #endif -  hbox = gtk_hbox_new (FALSE, 12); -  gtk_box_pack_start (GTK_BOX (message_area), hbox, FALSE, FALSE, 0); +	hbox = gtk_hbox_new (FALSE, 12); +	gtk_box_pack_start (GTK_BOX (message_area), hbox, FALSE, FALSE, 0); -  label = gtk_label_new_with_mnemonic (_("_Title:")); -  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); -  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); +	label = gtk_label_new_with_mnemonic (_("_Title:")); +	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); +	gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); -  entry = gtk_entry_new (); -  gtk_entry_set_width_chars (GTK_ENTRY (entry), 32); -  gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); -  gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); -  gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0); -  gtk_widget_show_all (hbox); +	entry = gtk_entry_new (); +	gtk_entry_set_width_chars (GTK_ENTRY (entry), 32); +	gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); +	gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); +	gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0); +	gtk_widget_show_all (hbox); -  gtk_widget_grab_focus (entry); -  gtk_entry_set_text (GTK_ENTRY (entry), terminal_screen_get_raw_title (priv->active_screen)); -  gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1); -  g_object_set_data (G_OBJECT (dialog), "title-entry", entry); +	gtk_widget_grab_focus (entry); +	gtk_entry_set_text (GTK_ENTRY (entry), terminal_screen_get_raw_title (priv->active_screen)); +	gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1); +	g_object_set_data (G_OBJECT (dialog), "title-entry", entry); -  gtk_window_present (GTK_WINDOW (dialog)); +	gtk_window_present (GTK_WINDOW (dialog));  }  static void  terminal_add_encoding_callback (GtkAction *action,                                  TerminalWindow *window)  { -  terminal_app_edit_encodings (terminal_app_get (), -                               GTK_WINDOW (window)); +	terminal_app_edit_encodings (terminal_app_get (), +	                             GTK_WINDOW (window));  }  static void  terminal_reset_callback (GtkAction *action,                           TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindowPrivate *priv = window->priv; + +	if (priv->active_screen == NULL) +		return; -  if (priv->active_screen == NULL) -    return; -       -  vte_terminal_reset (VTE_TERMINAL (priv->active_screen), TRUE, FALSE); +	vte_terminal_reset (VTE_TERMINAL (priv->active_screen), TRUE, FALSE);  }  static void  terminal_reset_clear_callback (GtkAction *action,                                 TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindowPrivate *priv = window->priv; + +	if (priv->active_screen == NULL) +		return; -  if (priv->active_screen == NULL) -    return; -       -  vte_terminal_reset (VTE_TERMINAL (priv->active_screen), TRUE, TRUE); +	vte_terminal_reset (VTE_TERMINAL (priv->active_screen), TRUE, TRUE);  }  static void  tabs_next_or_previous_tab_cb (GtkAction *action,                                TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkNotebookClass *klass; -  GtkBindingSet *binding_set; -  const char *name; -  guint keyval = 0; - -  name = gtk_action_get_name (action); -  if (strcmp (name, "TabsNext") == 0) { -    keyval = GDK_Page_Down; -  } else if (strcmp (name, "TabsPrevious") == 0) { -    keyval = GDK_Page_Up; -  } - -  klass = GTK_NOTEBOOK_GET_CLASS (GTK_NOTEBOOK (priv->notebook)); -  binding_set = gtk_binding_set_by_class (klass); -  gtk_binding_set_activate (gtk_binding_set_by_class (klass), -                            keyval, -                            GDK_CONTROL_MASK, -                            GTK_OBJECT (priv->notebook)); +	TerminalWindowPrivate *priv = window->priv; +	GtkNotebookClass *klass; +	GtkBindingSet *binding_set; +	const char *name; +	guint keyval = 0; + +	name = gtk_action_get_name (action); +	if (strcmp (name, "TabsNext") == 0) +	{ +		keyval = GDK_Page_Down; +	} +	else if (strcmp (name, "TabsPrevious") == 0) +	{ +		keyval = GDK_Page_Up; +	} + +	klass = GTK_NOTEBOOK_GET_CLASS (GTK_NOTEBOOK (priv->notebook)); +	binding_set = gtk_binding_set_by_class (klass); +	gtk_binding_set_activate (gtk_binding_set_by_class (klass), +	                          keyval, +	                          GDK_CONTROL_MASK, +	                          GTK_OBJECT (priv->notebook));  }  static void  tabs_move_left_callback (GtkAction *action,                           TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkNotebook *notebook = GTK_NOTEBOOK (priv->notebook); -  gint page_num,last_page; -  GtkWidget *page;  +	TerminalWindowPrivate *priv = window->priv; +	GtkNotebook *notebook = GTK_NOTEBOOK (priv->notebook); +	gint page_num,last_page; +	GtkWidget *page; -  page_num = gtk_notebook_get_current_page (notebook); -  last_page = gtk_notebook_get_n_pages (notebook) - 1; -  page = gtk_notebook_get_nth_page (notebook, page_num); +	page_num = gtk_notebook_get_current_page (notebook); +	last_page = gtk_notebook_get_n_pages (notebook) - 1; +	page = gtk_notebook_get_nth_page (notebook, page_num); -  gtk_notebook_reorder_child (notebook, page, page_num == 0 ? last_page : page_num - 1); +	gtk_notebook_reorder_child (notebook, page, page_num == 0 ? last_page : page_num - 1);  }  static void  tabs_move_right_callback (GtkAction *action,                            TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  GtkNotebook *notebook = GTK_NOTEBOOK (priv->notebook); -  gint page_num,last_page; -  GtkWidget *page;  +	TerminalWindowPrivate *priv = window->priv; +	GtkNotebook *notebook = GTK_NOTEBOOK (priv->notebook); +	gint page_num,last_page; +	GtkWidget *page; -  page_num = gtk_notebook_get_current_page (notebook); -  last_page = gtk_notebook_get_n_pages (notebook) - 1; -  page = gtk_notebook_get_nth_page (notebook, page_num); -   -  gtk_notebook_reorder_child (notebook, page, page_num == last_page ? 0 : page_num + 1); +	page_num = gtk_notebook_get_current_page (notebook); +	last_page = gtk_notebook_get_n_pages (notebook) - 1; +	page = gtk_notebook_get_nth_page (notebook, page_num); + +	gtk_notebook_reorder_child (notebook, page, page_num == last_page ? 0 : page_num + 1);  }  static void  tabs_detach_tab_callback (GtkAction *action,                            TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; -  TerminalApp *app; -  TerminalWindow *new_window; -  TerminalScreen *screen; -  char *geometry; -  int width, height; +	TerminalWindowPrivate *priv = window->priv; +	TerminalApp *app; +	TerminalWindow *new_window; +	TerminalScreen *screen; +	char *geometry; +	int width, height; -  app = terminal_app_get (); +	app = terminal_app_get (); -  screen = priv->active_screen; +	screen = priv->active_screen; -  /* FIXME: this seems wrong if tabs are shown in the window */ -  terminal_screen_get_size (screen, &width, &height); -  geometry = g_strdup_printf ("%dx%d", width, height); +	/* FIXME: this seems wrong if tabs are shown in the window */ +	terminal_screen_get_size (screen, &width, &height); +	geometry = g_strdup_printf ("%dx%d", width, height); -  new_window = terminal_app_new_window (app, gtk_widget_get_screen (GTK_WIDGET (window))); +	new_window = terminal_app_new_window (app, gtk_widget_get_screen (GTK_WIDGET (window))); -  terminal_window_move_screen (window, new_window, screen, -1); +	terminal_window_move_screen (window, new_window, screen, -1); -  gtk_window_parse_geometry (GTK_WINDOW (new_window), geometry); -  g_free (geometry); +	gtk_window_parse_geometry (GTK_WINDOW (new_window), geometry); +	g_free (geometry); -  gtk_window_present_with_time (GTK_WINDOW (new_window), gtk_get_current_event_time ()); +	gtk_window_present_with_time (GTK_WINDOW (new_window), gtk_get_current_event_time ());  }  static void  help_contents_callback (GtkAction *action,                          TerminalWindow *window)  { -  terminal_util_show_help (NULL, GTK_WINDOW (window)); +	terminal_util_show_help (NULL, GTK_WINDOW (window));  }  #define ABOUT_GROUP "About" @@ -3877,84 +3991,84 @@ static void  help_about_callback (GtkAction *action,                       TerminalWindow *window)  { -  static const char copyright[] = -    "Copyright © 2002–2004 Havoc Pennington\n" -    "Copyright © 2003–2004, 2007 Mariano Suárez-Alvarez\n" -    "Copyright © 2006 Guilherme de S. Pastore\n" -    "Copyright © 2007–2010 Christian Persch"; -  char *licence_text; -  GKeyFile *key_file; -  GError *error = NULL; -  char **authors, **contributors, **artists, **documenters, **array_strv; -  gsize n_authors = 0, n_contributors = 0, n_artists = 0, n_documenters = 0 , i; -  GPtrArray *array; - -  key_file = g_key_file_new (); -  if (!g_key_file_load_from_file (key_file, TERM_PKGDATADIR G_DIR_SEPARATOR_S "terminal.about", 0, &error)) -    { -      g_warning ("Couldn't load about data: %s\n", error->message); -      g_error_free (error); -      g_key_file_free (key_file); -      return; -    } - -  authors = g_key_file_get_string_list (key_file, ABOUT_GROUP, "Authors", &n_authors, NULL); -  contributors = g_key_file_get_string_list (key_file, ABOUT_GROUP, "Contributors", &n_contributors, NULL); -  artists = g_key_file_get_string_list (key_file, ABOUT_GROUP, "Artists", &n_artists, NULL); -  documenters = g_key_file_get_string_list (key_file, ABOUT_GROUP, "Documenters", &n_documenters, NULL); -  g_key_file_free (key_file); - -  array = g_ptr_array_new (); - -  for (i = 0; i < n_authors; ++i) -    g_ptr_array_add (array, EMAILIFY (authors[i])); -  g_free (authors); /* strings are now owned by the array */ - -  if (n_contributors > 0) -  { -    g_ptr_array_add (array, g_strdup ("")); -    g_ptr_array_add (array, g_strdup (_("Contributors:"))); -    for (i = 0; i < n_contributors; ++i) -      g_ptr_array_add (array, EMAILIFY (contributors[i])); -  } -  g_free (contributors); /* strings are now owned by the array */ -   -  g_ptr_array_add (array, NULL); -  array_strv = (char **) g_ptr_array_free (array, FALSE); - -  for (i = 0; i < n_artists; ++i) -    artists[i] = EMAILIFY (artists[i]); -  for (i = 0; i < n_documenters; ++i) -    documenters[i] = EMAILIFY (documenters[i]); - -  licence_text = terminal_util_get_licence_text (); - -  gtk_show_about_dialog (GTK_WINDOW (window), -			 "program-name", _("MATE Terminal"), -			 "copyright", copyright, -			 "comments", _("A terminal emulator for the MATE desktop"), -			 "version", VERSION, -			 "authors", array_strv, -                         "artists", artists, -                         "documenters", documenters, -			 "license", licence_text, -			 "wrap-license", TRUE, -			 "translator-credits", _("translator-credits"), -			 "logo-icon-name", MATE_TERMINAL_ICON_NAME, -			 NULL); - -  g_strfreev (array_strv); -  g_strfreev (artists); -  g_strfreev (documenters); -  g_free (licence_text); +	static const char copyright[] = +	    "Copyright © 2002–2004 Havoc Pennington\n" +	    "Copyright © 2003–2004, 2007 Mariano Suárez-Alvarez\n" +	    "Copyright © 2006 Guilherme de S. Pastore\n" +	    "Copyright © 2007–2010 Christian Persch"; +	char *licence_text; +	GKeyFile *key_file; +	GError *error = NULL; +	char **authors, **contributors, **artists, **documenters, **array_strv; +	gsize n_authors = 0, n_contributors = 0, n_artists = 0, n_documenters = 0 , i; +	GPtrArray *array; + +	key_file = g_key_file_new (); +	if (!g_key_file_load_from_file (key_file, TERM_PKGDATADIR G_DIR_SEPARATOR_S "terminal.about", 0, &error)) +	{ +		g_warning ("Couldn't load about data: %s\n", error->message); +		g_error_free (error); +		g_key_file_free (key_file); +		return; +	} + +	authors = g_key_file_get_string_list (key_file, ABOUT_GROUP, "Authors", &n_authors, NULL); +	contributors = g_key_file_get_string_list (key_file, ABOUT_GROUP, "Contributors", &n_contributors, NULL); +	artists = g_key_file_get_string_list (key_file, ABOUT_GROUP, "Artists", &n_artists, NULL); +	documenters = g_key_file_get_string_list (key_file, ABOUT_GROUP, "Documenters", &n_documenters, NULL); +	g_key_file_free (key_file); + +	array = g_ptr_array_new (); + +	for (i = 0; i < n_authors; ++i) +		g_ptr_array_add (array, EMAILIFY (authors[i])); +	g_free (authors); /* strings are now owned by the array */ + +	if (n_contributors > 0) +	{ +		g_ptr_array_add (array, g_strdup ("")); +		g_ptr_array_add (array, g_strdup (_("Contributors:"))); +		for (i = 0; i < n_contributors; ++i) +			g_ptr_array_add (array, EMAILIFY (contributors[i])); +	} +	g_free (contributors); /* strings are now owned by the array */ + +	g_ptr_array_add (array, NULL); +	array_strv = (char **) g_ptr_array_free (array, FALSE); + +	for (i = 0; i < n_artists; ++i) +		artists[i] = EMAILIFY (artists[i]); +	for (i = 0; i < n_documenters; ++i) +		documenters[i] = EMAILIFY (documenters[i]); + +	licence_text = terminal_util_get_licence_text (); + +	gtk_show_about_dialog (GTK_WINDOW (window), +	                       "program-name", _("MATE Terminal"), +	                       "copyright", copyright, +	                       "comments", _("A terminal emulator for the MATE desktop"), +	                       "version", VERSION, +	                       "authors", array_strv, +	                       "artists", artists, +	                       "documenters", documenters, +	                       "license", licence_text, +	                       "wrap-license", TRUE, +	                       "translator-credits", _("translator-credits"), +	                       "logo-icon-name", MATE_TERMINAL_ICON_NAME, +	                       NULL); + +	g_strfreev (array_strv); +	g_strfreev (artists); +	g_strfreev (documenters); +	g_free (licence_text);  }  GtkUIManager *  terminal_window_get_ui_manager (TerminalWindow *window)  { -  TerminalWindowPrivate *priv = window->priv; +	TerminalWindowPrivate *priv = window->priv; -  return priv->ui_manager; +	return priv->ui_manager;  }  void @@ -3962,65 +4076,65 @@ terminal_window_save_state (TerminalWindow *window,                              GKeyFile *key_file,                              const char *group)  { -  TerminalWindowPrivate *priv = window->priv; -  GList *tabs, *lt; -  TerminalScreen *active_screen; -  GdkWindowState state; -  GPtrArray *tab_names_array; -  char **tab_names; -  gsize len; - -  //XXXif (priv->menub)//XXX -  g_key_file_set_boolean (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_MENUBAR_VISIBLE, -                          priv->menubar_visible); - -  g_key_file_set_string (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_ROLE, -                         gtk_window_get_role (GTK_WINDOW (window))); - -  state = gdk_window_get_state (gtk_widget_get_window (GTK_WIDGET (window))); -  if (state & GDK_WINDOW_STATE_MAXIMIZED) -    g_key_file_set_boolean (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_MAXIMIZED, TRUE); -  if (state & GDK_WINDOW_STATE_FULLSCREEN) -    g_key_file_set_boolean (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_FULLSCREEN, TRUE); - -  active_screen = terminal_window_get_active (window); -  tabs = terminal_window_list_screen_containers (window); - -  tab_names_array = g_ptr_array_sized_new (g_list_length (tabs) + 1); - -  for (lt = tabs; lt != NULL; lt = lt->next) -    { -      TerminalScreen *screen; -      char *tab_group; - -      screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (lt->data)); - -      tab_group = g_strdup_printf ("Terminal%p", screen); -      g_ptr_array_add (tab_names_array, tab_group); - -      terminal_screen_save_config (screen, key_file, tab_group); - -      if (screen == active_screen) -        { -          int w, h, x, y; -          char *geometry; - -          g_key_file_set_string (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_ACTIVE_TAB, tab_group); - -          /* FIXME saving the geometry is not great :-/ */ -          terminal_screen_get_size (screen, &w, &h); -          gtk_window_get_position (GTK_WINDOW (window), &x, &y); -          geometry = g_strdup_printf ("%dx%d+%d+%d", w, h, x, y); -          g_key_file_set_string (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_GEOMETRY, geometry); -          g_free (geometry); -        } -    } - -  g_list_free (tabs); - -  len = tab_names_array->len; -  g_ptr_array_add (tab_names_array, NULL); -  tab_names = (char **) g_ptr_array_free (tab_names_array, FALSE); -  g_key_file_set_string_list (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_TABS, (const char * const *) tab_names, len); -  g_strfreev (tab_names); +	TerminalWindowPrivate *priv = window->priv; +	GList *tabs, *lt; +	TerminalScreen *active_screen; +	GdkWindowState state; +	GPtrArray *tab_names_array; +	char **tab_names; +	gsize len; + +	//XXXif (priv->menub)//XXX +	g_key_file_set_boolean (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_MENUBAR_VISIBLE, +	                        priv->menubar_visible); + +	g_key_file_set_string (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_ROLE, +	                       gtk_window_get_role (GTK_WINDOW (window))); + +	state = gdk_window_get_state (gtk_widget_get_window (GTK_WIDGET (window))); +	if (state & GDK_WINDOW_STATE_MAXIMIZED) +		g_key_file_set_boolean (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_MAXIMIZED, TRUE); +	if (state & GDK_WINDOW_STATE_FULLSCREEN) +		g_key_file_set_boolean (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_FULLSCREEN, TRUE); + +	active_screen = terminal_window_get_active (window); +	tabs = terminal_window_list_screen_containers (window); + +	tab_names_array = g_ptr_array_sized_new (g_list_length (tabs) + 1); + +	for (lt = tabs; lt != NULL; lt = lt->next) +	{ +		TerminalScreen *screen; +		char *tab_group; + +		screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (lt->data)); + +		tab_group = g_strdup_printf ("Terminal%p", screen); +		g_ptr_array_add (tab_names_array, tab_group); + +		terminal_screen_save_config (screen, key_file, tab_group); + +		if (screen == active_screen) +		{ +			int w, h, x, y; +			char *geometry; + +			g_key_file_set_string (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_ACTIVE_TAB, tab_group); + +			/* FIXME saving the geometry is not great :-/ */ +			terminal_screen_get_size (screen, &w, &h); +			gtk_window_get_position (GTK_WINDOW (window), &x, &y); +			geometry = g_strdup_printf ("%dx%d+%d+%d", w, h, x, y); +			g_key_file_set_string (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_GEOMETRY, geometry); +			g_free (geometry); +		} +	} + +	g_list_free (tabs); + +	len = tab_names_array->len; +	g_ptr_array_add (tab_names_array, NULL); +	tab_names = (char **) g_ptr_array_free (tab_names_array, FALSE); +	g_key_file_set_string_list (key_file, group, TERMINAL_CONFIG_WINDOW_PROP_TABS, (const char * const *) tab_names, len); +	g_strfreev (tab_names);  } diff --git a/src/terminal-window.h b/src/terminal-window.h index b1a84b0..a2403d9 100644 --- a/src/terminal-window.h +++ b/src/terminal-window.h @@ -38,14 +38,14 @@ typedef struct _TerminalWindowPrivate TerminalWindowPrivate;  struct _TerminalWindow  { -  GtkWindow parent_instance; +	GtkWindow parent_instance; -  TerminalWindowPrivate *priv; +	TerminalWindowPrivate *priv;  };  struct _TerminalWindowClass  { -  GtkWindowClass parent_class; +	GtkWindowClass parent_class;  }; @@ -74,11 +74,11 @@ void terminal_window_move_screen (TerminalWindow *source_window,   * from the profile of the first screen added to the window   */  void terminal_window_set_menubar_visible     (TerminalWindow *window, -                                              gboolean        setting); +        gboolean        setting);  gboolean terminal_window_get_menubar_visible (TerminalWindow *window);  void            terminal_window_switch_screen (TerminalWindow *window, -                                               TerminalScreen *screen); +        TerminalScreen *screen);  TerminalScreen* terminal_window_get_active (TerminalWindow *window);  GList* terminal_window_list_screen_containers (TerminalWindow *window); @@ -88,10 +88,10 @@ void terminal_window_set_size         (TerminalWindow *window,                                         TerminalScreen *screen,                                         gboolean        even_if_mapped);  void terminal_window_set_size_force_grid (TerminalWindow *window, -                                          TerminalScreen *screen, -                                          gboolean        even_if_mapped, -                                          int             force_grid_width, -                                          int             force_grid_height); +        TerminalScreen *screen, +        gboolean        even_if_mapped, +        int             force_grid_width, +        int             force_grid_height);  GtkWidget* terminal_window_get_notebook (TerminalWindow *window); diff --git a/src/terminal.c b/src/terminal.c index 03a619e..8504422 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -52,79 +52,84 @@ static char *  ay_to_string (GVariant *variant,                GError **error)  { -  gsize len; -  const char *data; - -  data = g_variant_get_fixed_array (variant, &len, sizeof (char)); -  if (len == 0) -    return NULL; - -  /* Make sure there are no embedded NULs */ -  if (memchr (data, '\0', len) != NULL) { -    g_set_error_literal (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, -                         "String is shorter than claimed"); -    return NULL; -  } - -  return g_strndup (data, len); +	gsize len; +	const char *data; + +	data = g_variant_get_fixed_array (variant, &len, sizeof (char)); +	if (len == 0) +		return NULL; + +	/* Make sure there are no embedded NULs */ +	if (memchr (data, '\0', len) != NULL) +	{ +		g_set_error_literal (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, +		                     "String is shorter than claimed"); +		return NULL; +	} + +	return g_strndup (data, len);  }  static char **  ay_to_strv (GVariant *variant,              int *argc)  { -  GPtrArray *argv; -  const char *data, *nullbyte; -  gsize data_len; -  gssize len; +	GPtrArray *argv; +	const char *data, *nullbyte; +	gsize data_len; +	gssize len; -  data = g_variant_get_fixed_array (variant, &data_len, sizeof (char)); -  if (data_len == 0 || data_len > G_MAXSSIZE) { -    *argc = 0; -    return NULL; -  } +	data = g_variant_get_fixed_array (variant, &data_len, sizeof (char)); +	if (data_len == 0 || data_len > G_MAXSSIZE) +	{ +		*argc = 0; +		return NULL; +	} -  argv = g_ptr_array_new (); +	argv = g_ptr_array_new (); -  len = data_len; -  do { -    gssize string_len; +	len = data_len; +	do +	{ +		gssize string_len; -    nullbyte = memchr (data, '\0', len); +		nullbyte = memchr (data, '\0', len); -    string_len = nullbyte ? (gssize) (nullbyte - data) : len; -    g_ptr_array_add (argv, g_strndup (data, string_len)); +		string_len = nullbyte ? (gssize) (nullbyte - data) : len; +		g_ptr_array_add (argv, g_strndup (data, string_len)); -    len -= string_len + 1; -    data += string_len + 1; -  } while (len > 0); +		len -= string_len + 1; +		data += string_len + 1; +	} +	while (len > 0); -  if (argc) -    *argc = argv->len; +	if (argc) +		*argc = argv->len; -  /* NULL terminate */ -  g_ptr_array_add (argv, NULL); -  return (char **) g_ptr_array_free (argv, FALSE); +	/* NULL terminate */ +	g_ptr_array_add (argv, NULL); +	return (char **) g_ptr_array_free (argv, FALSE);  }  static GVariant *  string_to_ay (const char *string)  { -  gsize len; -  char *data; +	gsize len; +	char *data; -  len = strlen (string); -  data = g_strndup (string, len); +	len = strlen (string); +	data = g_strndup (string, len); -  return g_variant_new_from_data (G_VARIANT_TYPE ("ay"), data, len, TRUE, g_free, data); +	return g_variant_new_from_data (G_VARIANT_TYPE ("ay"), data, len, TRUE, g_free, data);  } -typedef struct { -  char *factory_name; -  TerminalOptions *options; -  int exit_code; -  char **argv; -  int argc; +typedef struct +{ +	char *factory_name; +	TerminalOptions *options; +	int exit_code; +	char **argv; +	int argc;  } OwnData;  static void @@ -137,69 +142,74 @@ method_call_cb (GDBusConnection *connection,                  GDBusMethodInvocation *invocation,                  gpointer user_data)  { -  if (g_strcmp0 (method_name, "HandleArguments") == 0) { -    TerminalOptions *options = NULL; -    GVariant *v_wd, *v_display, *v_sid, *v_envv, *v_argv; -    char *working_directory = NULL, *display_name = NULL, *startup_id = NULL; -    char **envv = NULL, **argv = NULL; -    int argc; -    GError *error = NULL; - -    g_variant_get (parameters, "(@ay@ay@ay@ay@ay)", -                   &v_wd, &v_display, &v_sid, &v_envv, &v_argv); - -    working_directory = ay_to_string (v_wd, &error); -    if (error) -      goto out; -    display_name = ay_to_string (v_display, &error); -    if (error) -      goto out; -    startup_id = ay_to_string (v_sid, &error); -    if (error) -      goto out; -    envv = ay_to_strv (v_envv, NULL); -    argv = ay_to_strv (v_argv, &argc); - -    _terminal_debug_print (TERMINAL_DEBUG_FACTORY, -                          "Factory invoked with working-dir='%s' display='%s' startup-id='%s'\n", -                          working_directory ? working_directory : "(null)", -                          display_name ? display_name : "(null)", -                          startup_id ? startup_id : "(null)"); - -    options = terminal_options_parse (working_directory, -                                      display_name, -                                      startup_id, -                                      envv, -                                      TRUE, -                                      TRUE, -                                      &argc, &argv, -                                      &error, -                                      NULL); - -    if (options != NULL) { -      terminal_app_handle_options (terminal_app_get (), options, FALSE /* no resume */, &error); -      terminal_options_free (options); -    } -  -  out: -    g_variant_unref (v_wd); -    g_free (working_directory); -    g_variant_unref (v_display); -    g_free (display_name); -    g_variant_unref (v_sid); -    g_free (startup_id); -    g_variant_unref (v_envv); -    g_strfreev (envv); -    g_variant_unref (v_argv); -    g_strfreev (argv); - -    if (error == NULL) { -      g_dbus_method_invocation_return_value (invocation, g_variant_new ("()")); -    } else { -      g_dbus_method_invocation_return_gerror (invocation, error); -      g_error_free (error); -    } -  } +	if (g_strcmp0 (method_name, "HandleArguments") == 0) +	{ +		TerminalOptions *options = NULL; +		GVariant *v_wd, *v_display, *v_sid, *v_envv, *v_argv; +		char *working_directory = NULL, *display_name = NULL, *startup_id = NULL; +		char **envv = NULL, **argv = NULL; +		int argc; +		GError *error = NULL; + +		g_variant_get (parameters, "(@ay@ay@ay@ay@ay)", +		               &v_wd, &v_display, &v_sid, &v_envv, &v_argv); + +		working_directory = ay_to_string (v_wd, &error); +		if (error) +			goto out; +		display_name = ay_to_string (v_display, &error); +		if (error) +			goto out; +		startup_id = ay_to_string (v_sid, &error); +		if (error) +			goto out; +		envv = ay_to_strv (v_envv, NULL); +		argv = ay_to_strv (v_argv, &argc); + +		_terminal_debug_print (TERMINAL_DEBUG_FACTORY, +		                       "Factory invoked with working-dir='%s' display='%s' startup-id='%s'\n", +		                       working_directory ? working_directory : "(null)", +		                       display_name ? display_name : "(null)", +		                       startup_id ? startup_id : "(null)"); + +		options = terminal_options_parse (working_directory, +		                                  display_name, +		                                  startup_id, +		                                  envv, +		                                  TRUE, +		                                  TRUE, +		                                  &argc, &argv, +		                                  &error, +		                                  NULL); + +		if (options != NULL) +		{ +			terminal_app_handle_options (terminal_app_get (), options, FALSE /* no resume */, &error); +			terminal_options_free (options); +		} + +out: +		g_variant_unref (v_wd); +		g_free (working_directory); +		g_variant_unref (v_display); +		g_free (display_name); +		g_variant_unref (v_sid); +		g_free (startup_id); +		g_variant_unref (v_envv); +		g_strfreev (envv); +		g_variant_unref (v_argv); +		g_strfreev (argv); + +		if (error == NULL) +		{ +			g_dbus_method_invocation_return_value (invocation, g_variant_new ("()")); +		} +		else +		{ +			g_dbus_method_invocation_return_gerror (invocation, error); +			g_error_free (error); +		} +	}  }  static void @@ -207,50 +217,52 @@ bus_acquired_cb (GDBusConnection *connection,                   const char *name,                   gpointer user_data)  { -  static const char dbus_introspection_xml[] = -    "<node name='/org/mate/Terminal'>" -      "<interface name='org.mate.Terminal.Factory'>" -        "<method name='HandleArguments'>" -          "<arg type='ay' name='working_directory' direction='in' />" -          "<arg type='ay' name='display_name' direction='in' />" -          "<arg type='ay' name='startup_id' direction='in' />" -          "<arg type='ay' name='environment' direction='in' />" -          "<arg type='ay' name='arguments' direction='in' />" -        "</method>" -      "</interface>" -    "</node>"; - -  static const GDBusInterfaceVTable interface_vtable = { -    method_call_cb, -    NULL, -    NULL, -  }; - -  OwnData *data = (OwnData *) user_data; -  GDBusNodeInfo *introspection_data; -  guint registration_id; -  GError *error = NULL; - -  _terminal_debug_print (TERMINAL_DEBUG_FACTORY, -                         "Bus %s acquired\n", name); - -  introspection_data = g_dbus_node_info_new_for_xml (dbus_introspection_xml, NULL); -  g_assert (introspection_data != NULL); - -  registration_id = g_dbus_connection_register_object (connection, -                                                       TERMINAL_FACTORY_SERVICE_PATH, -                                                       introspection_data->interfaces[0], -                                                       &interface_vtable, -                                                       NULL, NULL, -                                                       &error); -  g_dbus_node_info_unref (introspection_data); - -  if (registration_id == 0) { -    g_printerr ("Failed to register object: %s\n", error->message); -    g_error_free (error); -    data->exit_code = EXIT_FAILURE; -    gtk_main_quit (); -  } +	static const char dbus_introspection_xml[] = +	    "<node name='/org/mate/Terminal'>" +	    "<interface name='org.mate.Terminal.Factory'>" +	    "<method name='HandleArguments'>" +	    "<arg type='ay' name='working_directory' direction='in' />" +	    "<arg type='ay' name='display_name' direction='in' />" +	    "<arg type='ay' name='startup_id' direction='in' />" +	    "<arg type='ay' name='environment' direction='in' />" +	    "<arg type='ay' name='arguments' direction='in' />" +	    "</method>" +	    "</interface>" +	    "</node>"; + +	static const GDBusInterfaceVTable interface_vtable = +	{ +		method_call_cb, +		NULL, +		NULL, +	}; + +	OwnData *data = (OwnData *) user_data; +	GDBusNodeInfo *introspection_data; +	guint registration_id; +	GError *error = NULL; + +	_terminal_debug_print (TERMINAL_DEBUG_FACTORY, +	                       "Bus %s acquired\n", name); + +	introspection_data = g_dbus_node_info_new_for_xml (dbus_introspection_xml, NULL); +	g_assert (introspection_data != NULL); + +	registration_id = g_dbus_connection_register_object (connection, +	                  TERMINAL_FACTORY_SERVICE_PATH, +	                  introspection_data->interfaces[0], +	                  &interface_vtable, +	                  NULL, NULL, +	                  &error); +	g_dbus_node_info_unref (introspection_data); + +	if (registration_id == 0) +	{ +		g_printerr ("Failed to register object: %s\n", error->message); +		g_error_free (error); +		data->exit_code = EXIT_FAILURE; +		gtk_main_quit (); +	}  }  static void @@ -258,27 +270,29 @@ name_acquired_cb (GDBusConnection *connection,                    const char *name,                    gpointer user_data)  { -  OwnData *data = (OwnData *) user_data; -  GError *error = NULL; +	OwnData *data = (OwnData *) user_data; +	GError *error = NULL; -  _terminal_debug_print (TERMINAL_DEBUG_FACTORY, -                         "Acquired the name %s on the session bus\n", name); +	_terminal_debug_print (TERMINAL_DEBUG_FACTORY, +	                       "Acquired the name %s on the session bus\n", name); -  if (data->options == NULL) { -    /* Name re-acquired!? */ -    g_assert_not_reached (); -  } +	if (data->options == NULL) +	{ +		/* Name re-acquired!? */ +		g_assert_not_reached (); +	} -  if (!terminal_app_handle_options (terminal_app_get (), data->options, TRUE /* do resume */, &error)) { -    g_printerr ("Failed to handle options: %s\n", error->message); -    g_error_free (error); -    data->exit_code = EXIT_FAILURE; -    gtk_main_quit (); -  } +	if (!terminal_app_handle_options (terminal_app_get (), data->options, TRUE /* do resume */, &error)) +	{ +		g_printerr ("Failed to handle options: %s\n", error->message); +		g_error_free (error); +		data->exit_code = EXIT_FAILURE; +		gtk_main_quit (); +	} -  terminal_options_free (data->options); -  data->options = NULL; +	terminal_options_free (data->options); +	data->options = NULL;  }  static void @@ -286,103 +300,108 @@ name_lost_cb (GDBusConnection *connection,                const char *name,                gpointer user_data)  { -  OwnData *data = (OwnData *) user_data; -  GError *error = NULL; -  char **envv; -  int envc, i; -  GVariantBuilder builder; -  GVariant *value; -  GString *string; -  char *s; -  gsize len; - -  _terminal_debug_print (TERMINAL_DEBUG_FACTORY, -                         "Lost the name %s on the session bus\n", name); - -  /* Couldn't get the connection? No way to continue! */ -  if (connection == NULL) { -    data->exit_code = EXIT_FAILURE; -    gtk_main_quit (); -    return; -  } - -  if (data->options == NULL) { -    /* Already handled */ -    data->exit_code = EXIT_SUCCESS; -    gtk_main_quit (); -    return; -  } - -  _terminal_debug_print (TERMINAL_DEBUG_FACTORY, -                          "Forwarding arguments to existing instance\n"); - -  g_variant_builder_init (&builder, G_VARIANT_TYPE ("(ayayayayay)")); - -  g_variant_builder_add (&builder, "@ay", string_to_ay (data->options->default_working_dir)); -  g_variant_builder_add (&builder, "@ay", string_to_ay (data->options->display_name)); -  g_variant_builder_add (&builder, "@ay", string_to_ay (data->options->startup_id)); - -  string = g_string_new (NULL); -  envv = g_listenv (); -  envc = g_strv_length (envv); -  for (i = 0; i < envc; ++i) -    { -      const char *value; - -      value = g_getenv (envv[i]); -      if (value == NULL) -        continue; - -      if (i > 0) -        g_string_append_c (string, '\0'); - -      g_string_append_printf (string, "%s=%s", envv[i], value); -    } - -  len = string->len; -  s = g_string_free (string, FALSE); -  g_variant_builder_add (&builder, "@ay", -                         g_variant_new_from_data (G_VARIANT_TYPE ("ay"), s, len, TRUE, g_free, s)); - -  string = g_string_new (NULL); - -  for (i = 0; i < data->argc; ++i) -    { -      if (i > 0) -        g_string_append_c (string, '\0'); -      g_string_append (string, data->argv[i]); -    } - -  len = string->len; -  s = g_string_free (string, FALSE); -  g_variant_builder_add (&builder, "@ay", -                         g_variant_new_from_data (G_VARIANT_TYPE ("ay"), s, len, TRUE, g_free, s)); - -  value = g_dbus_connection_call_sync (connection, -                                       data->factory_name, -                                       TERMINAL_FACTORY_SERVICE_PATH, -                                       TERMINAL_FACTORY_INTERFACE_NAME, -                                       "HandleArguments", -                                       g_variant_builder_end (&builder), -                                       G_VARIANT_TYPE ("()"), -                                       G_DBUS_CALL_FLAGS_NONE, -                                       -1, -                                       NULL, -                                       &error); -  if (value == NULL) { -    g_printerr ("Failed to forward arguments: %s\n", error->message); -    g_error_free (error); -    data->exit_code = EXIT_FAILURE; -    gtk_main_quit (); -  } else { -    g_variant_unref (value); -    data->exit_code = EXIT_SUCCESS; -  } - -  terminal_options_free (data->options); -  data->options = NULL; - -  gtk_main_quit (); +	OwnData *data = (OwnData *) user_data; +	GError *error = NULL; +	char **envv; +	int envc, i; +	GVariantBuilder builder; +	GVariant *value; +	GString *string; +	char *s; +	gsize len; + +	_terminal_debug_print (TERMINAL_DEBUG_FACTORY, +	                       "Lost the name %s on the session bus\n", name); + +	/* Couldn't get the connection? No way to continue! */ +	if (connection == NULL) +	{ +		data->exit_code = EXIT_FAILURE; +		gtk_main_quit (); +		return; +	} + +	if (data->options == NULL) +	{ +		/* Already handled */ +		data->exit_code = EXIT_SUCCESS; +		gtk_main_quit (); +		return; +	} + +	_terminal_debug_print (TERMINAL_DEBUG_FACTORY, +	                       "Forwarding arguments to existing instance\n"); + +	g_variant_builder_init (&builder, G_VARIANT_TYPE ("(ayayayayay)")); + +	g_variant_builder_add (&builder, "@ay", string_to_ay (data->options->default_working_dir)); +	g_variant_builder_add (&builder, "@ay", string_to_ay (data->options->display_name)); +	g_variant_builder_add (&builder, "@ay", string_to_ay (data->options->startup_id)); + +	string = g_string_new (NULL); +	envv = g_listenv (); +	envc = g_strv_length (envv); +	for (i = 0; i < envc; ++i) +	{ +		const char *value; + +		value = g_getenv (envv[i]); +		if (value == NULL) +			continue; + +		if (i > 0) +			g_string_append_c (string, '\0'); + +		g_string_append_printf (string, "%s=%s", envv[i], value); +	} + +	len = string->len; +	s = g_string_free (string, FALSE); +	g_variant_builder_add (&builder, "@ay", +	                       g_variant_new_from_data (G_VARIANT_TYPE ("ay"), s, len, TRUE, g_free, s)); + +	string = g_string_new (NULL); + +	for (i = 0; i < data->argc; ++i) +	{ +		if (i > 0) +			g_string_append_c (string, '\0'); +		g_string_append (string, data->argv[i]); +	} + +	len = string->len; +	s = g_string_free (string, FALSE); +	g_variant_builder_add (&builder, "@ay", +	                       g_variant_new_from_data (G_VARIANT_TYPE ("ay"), s, len, TRUE, g_free, s)); + +	value = g_dbus_connection_call_sync (connection, +	                                     data->factory_name, +	                                     TERMINAL_FACTORY_SERVICE_PATH, +	                                     TERMINAL_FACTORY_INTERFACE_NAME, +	                                     "HandleArguments", +	                                     g_variant_builder_end (&builder), +	                                     G_VARIANT_TYPE ("()"), +	                                     G_DBUS_CALL_FLAGS_NONE, +	                                     -1, +	                                     NULL, +	                                     &error); +	if (value == NULL) +	{ +		g_printerr ("Failed to forward arguments: %s\n", error->message); +		g_error_free (error); +		data->exit_code = EXIT_FAILURE; +		gtk_main_quit (); +	} +	else +	{ +		g_variant_unref (value); +		data->exit_code = EXIT_SUCCESS; +	} + +	terminal_options_free (data->options); +	data->options = NULL; + +	gtk_main_quit ();  }  /* Settings storage works as follows: @@ -413,207 +432,214 @@ name_lost_cb (GDBusConnection *connection,  static Time  slowly_and_stupidly_obtain_timestamp (Display *xdisplay)  { -  Window xwindow; -  XEvent event; - -  { -    XSetWindowAttributes attrs; -    Atom atom_name; -    Atom atom_type; -    const char *name; - -    attrs.override_redirect = True; -    attrs.event_mask = PropertyChangeMask | StructureNotifyMask; - -    xwindow = -      XCreateWindow (xdisplay, -                     RootWindow (xdisplay, 0), -                     -100, -100, 1, 1, -                     0, -                     CopyFromParent, -                     CopyFromParent, -                     (Visual *)CopyFromParent, -                     CWOverrideRedirect | CWEventMask, -                     &attrs); - -    atom_name = XInternAtom (xdisplay, "WM_NAME", TRUE); -    g_assert (atom_name != None); -    atom_type = XInternAtom (xdisplay, "STRING", TRUE); -    g_assert (atom_type != None); - -    name = "Fake Window"; -    XChangeProperty (xdisplay, -                     xwindow, atom_name, -                     atom_type, -                     8, PropModeReplace, (unsigned char *)name, strlen (name)); -  } - -  XWindowEvent (xdisplay, -                xwindow, -                PropertyChangeMask, -                &event); - -  XDestroyWindow(xdisplay, xwindow); - -  return event.xproperty.time; +	Window xwindow; +	XEvent event; + +	{ +		XSetWindowAttributes attrs; +		Atom atom_name; +		Atom atom_type; +		const char *name; + +		attrs.override_redirect = True; +		attrs.event_mask = PropertyChangeMask | StructureNotifyMask; + +		xwindow = +		    XCreateWindow (xdisplay, +		                   RootWindow (xdisplay, 0), +		                   -100, -100, 1, 1, +		                   0, +		                   CopyFromParent, +		                   CopyFromParent, +		                   (Visual *)CopyFromParent, +		                   CWOverrideRedirect | CWEventMask, +		                   &attrs); + +		atom_name = XInternAtom (xdisplay, "WM_NAME", TRUE); +		g_assert (atom_name != None); +		atom_type = XInternAtom (xdisplay, "STRING", TRUE); +		g_assert (atom_type != None); + +		name = "Fake Window"; +		XChangeProperty (xdisplay, +		                 xwindow, atom_name, +		                 atom_type, +		                 8, PropModeReplace, (unsigned char *)name, strlen (name)); +	} + +	XWindowEvent (xdisplay, +	              xwindow, +	              PropertyChangeMask, +	              &event); + +	XDestroyWindow(xdisplay, xwindow); + +	return event.xproperty.time;  }  static char *  get_factory_name_for_display (const char *display_name)  { -  GString *name; -  const char *p; +	GString *name; +	const char *p; -  name = g_string_sized_new (strlen (TERMINAL_FACTORY_SERVICE_NAME_PREFIX) + strlen (display_name) + 1 /* NUL */); -  g_string_append (name, TERMINAL_FACTORY_SERVICE_NAME_PREFIX); +	name = g_string_sized_new (strlen (TERMINAL_FACTORY_SERVICE_NAME_PREFIX) + strlen (display_name) + 1 /* NUL */); +	g_string_append (name, TERMINAL_FACTORY_SERVICE_NAME_PREFIX); -  for (p = display_name; *p; ++p) -    { -      if (g_ascii_isalnum (*p)) -        g_string_append_c (name, *p); -      else -        g_string_append_c (name, '_'); -    } +	for (p = display_name; *p; ++p) +	{ +		if (g_ascii_isalnum (*p)) +			g_string_append_c (name, *p); +		else +			g_string_append_c (name, '_'); +	} -  _terminal_debug_print (TERMINAL_DEBUG_FACTORY, -                         "Factory name is \"%s\"\n", name->str); +	_terminal_debug_print (TERMINAL_DEBUG_FACTORY, +	                       "Factory name is \"%s\"\n", name->str); -  return g_string_free (name, FALSE); +	return g_string_free (name, FALSE);  }  int  main (int argc, char **argv)  { -  int i; -  char **argv_copy; -  int argc_copy; -  const char *startup_id, *display_name, *home_dir; -  GdkDisplay *display; -  TerminalOptions *options; -  GError *error = NULL; -  char *working_directory; -  int ret = EXIT_SUCCESS; - -  setlocale (LC_ALL, ""); - -  bindtextdomain (GETTEXT_PACKAGE, TERM_LOCALEDIR); -  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); -  textdomain (GETTEXT_PACKAGE); - -  /* MateConf uses MateCORBA2 which need GThread. See bug #565516 */ -  g_thread_init (NULL); - -  _terminal_debug_init (); - -  /* Make a NULL-terminated copy since we may need it later */ -  argv_copy = g_new (char *, argc + 1); -  for (i = 0; i < argc; ++i) -    argv_copy [i] = argv [i]; -  argv_copy [i] = NULL; -  argc_copy = argc; - -  startup_id = g_getenv ("DESKTOP_STARTUP_ID"); - -  working_directory = g_get_current_dir (); - -  /* Now change directory to $HOME so we don't prevent unmounting, e.g. if the -   * factory is started by caja-open-terminal. See bug #565328. -   * On failure back to /. -   */ -  home_dir = g_get_home_dir (); -  if (home_dir == NULL || chdir (home_dir) < 0) -    (void) chdir ("/"); - -  options = terminal_options_parse (working_directory, -                                    NULL, -                                    startup_id, -                                    NULL, -                                    FALSE, -                                    FALSE, -                                    &argc, &argv, -                                    &error, -                                    gtk_get_option_group (TRUE), +	int i; +	char **argv_copy; +	int argc_copy; +	const char *startup_id, *display_name, *home_dir; +	GdkDisplay *display; +	TerminalOptions *options; +	GError *error = NULL; +	char *working_directory; +	int ret = EXIT_SUCCESS; + +	setlocale (LC_ALL, ""); + +	bindtextdomain (GETTEXT_PACKAGE, TERM_LOCALEDIR); +	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); +	textdomain (GETTEXT_PACKAGE); + +	/* MateConf uses MateCORBA2 which need GThread. See bug #565516 */ +	g_thread_init (NULL); + +	_terminal_debug_init (); + +	/* Make a NULL-terminated copy since we may need it later */ +	argv_copy = g_new (char *, argc + 1); +	for (i = 0; i < argc; ++i) +		argv_copy [i] = argv [i]; +	argv_copy [i] = NULL; +	argc_copy = argc; + +	startup_id = g_getenv ("DESKTOP_STARTUP_ID"); + +	working_directory = g_get_current_dir (); + +	/* Now change directory to $HOME so we don't prevent unmounting, e.g. if the +	 * factory is started by caja-open-terminal. See bug #565328. +	 * On failure back to /. +	 */ +	home_dir = g_get_home_dir (); +	if (home_dir == NULL || chdir (home_dir) < 0) +		(void) chdir ("/"); + +	options = terminal_options_parse (working_directory, +	                                  NULL, +	                                  startup_id, +	                                  NULL, +	                                  FALSE, +	                                  FALSE, +	                                  &argc, &argv, +	                                  &error, +	                                  gtk_get_option_group (TRUE),  #ifdef WITH_SMCLIENT -                                    egg_sm_client_get_option_group (), +	                                  egg_sm_client_get_option_group (),  #endif -                                    NULL); - -  g_free (working_directory); - -  if (options == NULL) { -    g_printerr (_("Failed to parse arguments: %s\n"), error->message); -    g_error_free (error); -    exit (EXIT_FAILURE); -  } - -  g_set_application_name (_("Terminal")); -   -  /* Unset the these env variables, so they doesn't end up -   * in the factory's env and thus in the terminals' envs. -   */ -  g_unsetenv ("DESKTOP_STARTUP_ID"); -  g_unsetenv ("GIO_LAUNCHED_DESKTOP_FILE_PID"); -  g_unsetenv ("GIO_LAUNCHED_DESKTOP_FILE"); - - /* Do this here so that gdk_display is initialized */ -  if (options->startup_id == NULL) -    { -      /* Create a fake one containing a timestamp that we can use */ -      Time timestamp; - -      timestamp = slowly_and_stupidly_obtain_timestamp (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())); - -      options->startup_id = g_strdup_printf ("_TIME%lu", timestamp); -    } - -  display = gdk_display_get_default (); -  display_name = gdk_display_get_name (display); -  options->display_name = g_strdup (display_name); -   -  if (options->use_factory) { -    OwnData *data; -    guint owner_id; - -    data = g_new (OwnData, 1); -    data->factory_name = get_factory_name_for_display (display_name); -    data->options = options; -    data->exit_code = -1; -    data->argv = argv_copy; -    data->argc = argc_copy; - -    owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, -                               data->factory_name, -                               G_BUS_NAME_OWNER_FLAGS_NONE, -                               bus_acquired_cb, -                               name_acquired_cb, -                               name_lost_cb, -                               data, NULL); - -    gtk_main (); - -    ret = data->exit_code; -    g_bus_unown_name (owner_id); - -    g_free (data->factory_name); -    g_free (data); - -  } else { - -    terminal_app_handle_options (terminal_app_get (), options, TRUE /* allow resume */, &error); -    terminal_options_free (options); - -    if (error == NULL) { -      gtk_main (); -    } else { -      g_printerr ("Error handling options: %s\n", error->message); -      g_error_free (error); -      ret = EXIT_FAILURE; -    } -  } - -  terminal_app_shutdown (); - -  g_free (argv_copy); - -  return ret; +	                                  NULL); + +	g_free (working_directory); + +	if (options == NULL) +	{ +		g_printerr (_("Failed to parse arguments: %s\n"), error->message); +		g_error_free (error); +		exit (EXIT_FAILURE); +	} + +	g_set_application_name (_("Terminal")); + +	/* Unset the these env variables, so they doesn't end up +	 * in the factory's env and thus in the terminals' envs. +	 */ +	g_unsetenv ("DESKTOP_STARTUP_ID"); +	g_unsetenv ("GIO_LAUNCHED_DESKTOP_FILE_PID"); +	g_unsetenv ("GIO_LAUNCHED_DESKTOP_FILE"); + +	/* Do this here so that gdk_display is initialized */ +	if (options->startup_id == NULL) +	{ +		/* Create a fake one containing a timestamp that we can use */ +		Time timestamp; + +		timestamp = slowly_and_stupidly_obtain_timestamp (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())); + +		options->startup_id = g_strdup_printf ("_TIME%lu", timestamp); +	} + +	display = gdk_display_get_default (); +	display_name = gdk_display_get_name (display); +	options->display_name = g_strdup (display_name); + +	if (options->use_factory) +	{ +		OwnData *data; +		guint owner_id; + +		data = g_new (OwnData, 1); +		data->factory_name = get_factory_name_for_display (display_name); +		data->options = options; +		data->exit_code = -1; +		data->argv = argv_copy; +		data->argc = argc_copy; + +		owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, +		                           data->factory_name, +		                           G_BUS_NAME_OWNER_FLAGS_NONE, +		                           bus_acquired_cb, +		                           name_acquired_cb, +		                           name_lost_cb, +		                           data, NULL); + +		gtk_main (); + +		ret = data->exit_code; +		g_bus_unown_name (owner_id); + +		g_free (data->factory_name); +		g_free (data); + +	} +	else +	{ + +		terminal_app_handle_options (terminal_app_get (), options, TRUE /* allow resume */, &error); +		terminal_options_free (options); + +		if (error == NULL) +		{ +			gtk_main (); +		} +		else +		{ +			g_printerr ("Error handling options: %s\n", error->message); +			g_error_free (error); +			ret = EXIT_FAILURE; +		} +	} + +	terminal_app_shutdown (); + +	g_free (argv_copy); + +	return ret;  }  | 
