add a description entry. Still needs escaping.

Tue Jan  7 03:10:36 2003  Jonathan Blandford  <jrb@gnome.org>

	* gnome-theme-save.c (save_dialog_response): add a description
	entry.  Still needs escaping.

	* theme-thumbnail.c (generate_theme_thumbnail): read the thumbnail
	back from the child correctly.  I think thumbnailing fully works.

	* TODO: Update
This commit is contained in:
Jonathan Blandford 2003-01-07 08:15:07 +00:00 committed by Jonathan Blandford
parent ff2eb3c60c
commit 003a40868f
6 changed files with 62 additions and 20 deletions

View file

@ -1,3 +1,13 @@
Tue Jan 7 03:10:36 2003 Jonathan Blandford <jrb@gnome.org>
* gnome-theme-save.c (save_dialog_response): add a description
entry. Still needs escaping.
* theme-thumbnail.c (generate_theme_thumbnail): read the thumbnail
back from the child correctly. I think thumbnailing fully works.
* TODO: Update
2003-01-06 Seth Nickell <snickell@stanford.edu> 2003-01-06 Seth Nickell <snickell@stanford.edu>
* gnome-theme-manager.c: (load_meta_themes): * gnome-theme-manager.c: (load_meta_themes):

View file

@ -1,19 +1,16 @@
Left TODO: Left TODO:
* Find initial theme, and if it's not a metatheme keep it around to put * Find initial theme, and if it's a custom metatheme keep it around to put
in the list when selecting a different theme. in the list when selecting a different theme.
* Change custom theme removal addition to handle above * Change custom theme removal addition to handle above.
* Change custom theme text to indicate what themes are being used. * Change custom theme text to indicate what themes are being used.
* Create an icon for custom themes
* Create a default icon.
* Notice when a directory is removed. * Notice when a directory is removed.
* Sanity check saving. * Sanity check saving. In particular, \n needs escaping.
* Fix when saving a theme. Seems to be a small race condition there
that screws a lot up. Should be trackable, though I fear it's going
to test my fam-fu

View file

@ -417,7 +417,7 @@ load_meta_themes (GtkTreeView *tree_view,
blurb = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>\n%s", blurb = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>\n%s",
list_meta_theme_info->readable_name, list_meta_theme_info->comment); list_meta_theme_info->readable_name, list_meta_theme_info->comment);
if (i <= MAX_ELEMENTS_BEFORE_SCROLLING) if (i <= MAX_ELEMENTS_BEFORE_SCROLLING)
pixbuf = generate_theme_thumbnail (list_meta_theme_info); pixbuf = generate_theme_thumbnail (list_meta_theme_info, FALSE);
else else
pixbuf = default_image; pixbuf = default_image;
@ -622,9 +622,13 @@ add_custom_row_to_meta_theme (const gchar *current_gtk_theme,
tree_view = WID ("meta_theme_treeview"); tree_view = WID ("meta_theme_treeview");
model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view)); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
g_free (custom_meta_theme_info.gtk_theme_name);
custom_meta_theme_info.gtk_theme_name = g_strdup (current_gtk_theme); custom_meta_theme_info.gtk_theme_name = g_strdup (current_gtk_theme);
g_free (custom_meta_theme_info.metacity_theme_name);
custom_meta_theme_info.metacity_theme_name = g_strdup (current_window_theme); custom_meta_theme_info.metacity_theme_name = g_strdup (current_window_theme);
g_free (custom_meta_theme_info.icon_theme_name);
custom_meta_theme_info.icon_theme_name = g_strdup (current_icon_theme); custom_meta_theme_info.icon_theme_name = g_strdup (current_icon_theme);
g_free (custom_meta_theme_info.name);
custom_meta_theme_info.name = g_strdup ("Custom Theme"); custom_meta_theme_info.name = g_strdup ("Custom Theme");
for (valid = gtk_tree_model_get_iter_first (model, &iter); for (valid = gtk_tree_model_get_iter_first (model, &iter);
@ -655,7 +659,9 @@ add_custom_row_to_meta_theme (const gchar *current_gtk_theme,
/* Commented out because it does odd things */ /* Commented out because it does odd things */
/*theme_thumbnail_invalidate_cache (&custom_meta_theme_info);*/ /*theme_thumbnail_invalidate_cache (&custom_meta_theme_info);*/
pixbuf = generate_theme_thumbnail (&custom_meta_theme_info); pixbuf = generate_theme_thumbnail (&custom_meta_theme_info, TRUE);
g_print ("%d %d\n" ,gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf));
gdk_pixbuf_save (pixbuf, "/tmp/out.png", "png", NULL, NULL);
gtk_list_store_set (GTK_LIST_STORE (model), &iter, gtk_list_store_set (GTK_LIST_STORE (model), &iter,
META_THEME_PIXBUF_COLUMN, pixbuf, META_THEME_PIXBUF_COLUMN, pixbuf,

View file

@ -55,6 +55,7 @@ setup_directory_structure (const gchar *theme_name,
static gboolean static gboolean
write_theme_to_disk (GnomeThemeMetaInfo *meta_theme_info, write_theme_to_disk (GnomeThemeMetaInfo *meta_theme_info,
const gchar *theme_name, const gchar *theme_name,
const gchar *theme_description,
GError **error) GError **error)
{ {
gchar *dir; gchar *dir;
@ -74,7 +75,7 @@ write_theme_to_disk (GnomeThemeMetaInfo *meta_theme_info,
gnome_vfs_truncate_handle (handle, 0); gnome_vfs_truncate_handle (handle, 0);
/* start making the theme file */ /* start making the theme file */
str = g_strdup_printf (theme_header, theme_name, theme_name); str = g_strdup_printf (theme_header, theme_name, theme_description);
gnome_vfs_write (handle, str, strlen (str), &bytes_written); gnome_vfs_write (handle, str, strlen (str), &bytes_written);
g_free (str); g_free (str);
@ -103,6 +104,7 @@ write_theme_to_disk (GnomeThemeMetaInfo *meta_theme_info,
static gboolean static gboolean
save_theme_to_disk (GnomeThemeMetaInfo *meta_theme_info, save_theme_to_disk (GnomeThemeMetaInfo *meta_theme_info,
const gchar *theme_name, const gchar *theme_name,
const gchar *theme_description,
GError **error) GError **error)
{ {
if (! check_theme_name (theme_name, error)) if (! check_theme_name (theme_name, error))
@ -111,7 +113,7 @@ save_theme_to_disk (GnomeThemeMetaInfo *meta_theme_info,
if (! setup_directory_structure (theme_name, error)) if (! setup_directory_structure (theme_name, error))
return FALSE; return FALSE;
if (! write_theme_to_disk (meta_theme_info, theme_name, error)) if (! write_theme_to_disk (meta_theme_info, theme_name, theme_description, error))
return FALSE; return FALSE;
return TRUE; return TRUE;
@ -123,20 +125,32 @@ save_dialog_response (GtkWidget *save_dialog,
gpointer data) gpointer data)
{ {
GnomeThemeMetaInfo *meta_theme_info; GnomeThemeMetaInfo *meta_theme_info;
char *theme_description = NULL;
GError *error = NULL; GError *error = NULL;
if (response_id == GTK_RESPONSE_OK) if (response_id == GTK_RESPONSE_OK)
{ {
GladeXML *dialog; GladeXML *dialog;
GtkWidget *entry; GtkWidget *entry;
GtkWidget *text_view;
GtkTextBuffer *buffer;
const char *theme_name; const char *theme_name;
GtkTextIter start_iter;
GtkTextIter end_iter;
dialog = gnome_theme_manager_get_theme_dialog (); dialog = gnome_theme_manager_get_theme_dialog ();
entry = WID ("save_dialog_entry"); entry = WID ("save_dialog_entry");
theme_name = gtk_entry_get_text (GTK_ENTRY (entry)); theme_name = gtk_entry_get_text (GTK_ENTRY (entry));
text_view = WID ("save_dialog_textview");
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
gtk_text_buffer_get_start_iter (buffer, &start_iter);
gtk_text_buffer_get_end_iter (buffer, &end_iter);
theme_description = gtk_text_buffer_get_text (buffer, &start_iter, &end_iter, FALSE);
meta_theme_info = (GnomeThemeMetaInfo *) g_object_get_data (G_OBJECT (save_dialog), "meta-theme-info"); meta_theme_info = (GnomeThemeMetaInfo *) g_object_get_data (G_OBJECT (save_dialog), "meta-theme-info");
if (! save_theme_to_disk (meta_theme_info, theme_name, &error)) if (! save_theme_to_disk (meta_theme_info, theme_name, theme_description, &error))
{ {
goto out; goto out;
} }
@ -145,6 +159,7 @@ save_dialog_response (GtkWidget *save_dialog,
out: out:
g_clear_error (&error); g_clear_error (&error);
gtk_widget_hide (save_dialog); gtk_widget_hide (save_dialog);
g_free (theme_description);
} }
static inline gboolean static inline gboolean

View file

@ -121,6 +121,7 @@ create_image (ThemeThumbnailData *theme_thumbnail_data,
GdkPixbuf *folder_icon; GdkPixbuf *folder_icon;
char *folder_icon_name; char *folder_icon_name;
char *foo; char *foo;
settings = gtk_settings_get_default (); settings = gtk_settings_get_default ();
g_object_set (G_OBJECT (settings), g_object_set (G_OBJECT (settings),
"gtk-theme-name", (char *) theme_thumbnail_data->control_theme_name->data, "gtk-theme-name", (char *) theme_thumbnail_data->control_theme_name->data,
@ -384,7 +385,6 @@ message_from_child (GIOChannel *source,
1024, 1024,
&bytes_read, &bytes_read,
NULL); NULL);
switch (status) switch (status)
{ {
case G_IO_STATUS_NORMAL: case G_IO_STATUS_NORMAL:
@ -448,7 +448,8 @@ theme_thumbnail_invalidate_cache (GnomeThemeMetaInfo *meta_theme_info)
} }
GdkPixbuf * GdkPixbuf *
generate_theme_thumbnail (GnomeThemeMetaInfo *meta_theme_info) generate_theme_thumbnail (GnomeThemeMetaInfo *meta_theme_info,
gboolean clear_cache)
{ {
GdkPixbuf *retval = NULL; GdkPixbuf *retval = NULL;
GdkPixbuf *pixbuf = NULL; GdkPixbuf *pixbuf = NULL;
@ -461,7 +462,10 @@ generate_theme_thumbnail (GnomeThemeMetaInfo *meta_theme_info)
pixbuf = g_hash_table_lookup (theme_hash, meta_theme_info->name); pixbuf = g_hash_table_lookup (theme_hash, meta_theme_info->name);
if (pixbuf != NULL) if (pixbuf != NULL)
{ {
return pixbuf; if (clear_cache)
;//g_hash_table_remove (theme_hash, meta_theme_info->name);
else
return pixbuf;
} }
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, ICON_SIZE_WIDTH, ICON_SIZE_HEIGHT); pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, ICON_SIZE_WIDTH, ICON_SIZE_HEIGHT);
@ -478,7 +482,16 @@ generate_theme_thumbnail (GnomeThemeMetaInfo *meta_theme_info)
for (i = 0; i < ICON_SIZE_HEIGHT; i++) for (i = 0; i < ICON_SIZE_HEIGHT; i++)
{ {
read (pipe_from_factory_fd[0], pixels + (rowstride)*i, ICON_SIZE_WIDTH * gdk_pixbuf_get_n_channels (pixbuf)); gint j = 0;
gint bytes_read;
do
{
bytes_read = read (pipe_from_factory_fd[0], pixels + (rowstride)*i + j, ICON_SIZE_WIDTH * gdk_pixbuf_get_n_channels (pixbuf) - j);
if (bytes_read > 0)
j += bytes_read;
}
while (j < ICON_SIZE_WIDTH * gdk_pixbuf_get_n_channels (pixbuf));
} }
retval = gdk_pixbuf_scale_simple (pixbuf, ICON_SIZE_WIDTH/2, ICON_SIZE_HEIGHT/2, GDK_INTERP_BILINEAR); retval = gdk_pixbuf_scale_simple (pixbuf, ICON_SIZE_WIDTH/2, ICON_SIZE_HEIGHT/2, GDK_INTERP_BILINEAR);

View file

@ -9,7 +9,8 @@ typedef void (* ThemeThumbnailFunc) (GdkPixbuf *pixbuf,
gpointer data); gpointer data);
GdkPixbuf *generate_theme_thumbnail (GnomeThemeMetaInfo *meta_theme_info); GdkPixbuf *generate_theme_thumbnail (GnomeThemeMetaInfo *meta_theme_info,
gboolean clear_cache);
void generate_theme_thumbnail_async (GnomeThemeMetaInfo *meta_theme_info, void generate_theme_thumbnail_async (GnomeThemeMetaInfo *meta_theme_info,
ThemeThumbnailFunc func, ThemeThumbnailFunc func,
gpointer data, gpointer data,