[maemo-commits] [maemo-commits] r9233 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . src
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Mon Jan 22 18:43:24 EET 2007
- Previous message: [maemo-commits] r9232 - projects/haf/hafbuildbot
- Next message: [maemo-commits] r9234 - in projects/haf/trunk/hildon-fm: . hildon-fm
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: jobi Date: 2007-01-22 18:43:23 +0200 (Mon, 22 Jan 2007) New Revision: 9233 Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background-dialog.c projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background-dialog.h projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background.c projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background.h projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-window.c Log: 2007-01-22 Johan Bilien <johan.bilien at nokia.com> * src/hd-home-background.c: - copy the color when setting the property. - be sure not to send NULL strings to DBus. * src/hd-home-window.c: - added background_apply_and_save_callback callback for background setting, which saves the background after it's set. - added response to the background dialog. Ok and Preview implemented. * src/hd-home-background-dialog.c: - set the combobox to the correct item when applying existing background settings. - connect file-chooser dialog. - reflect changes to the combobox to the current background. - added _get_background method Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog 2007-01-22 16:14:28 UTC (rev 9232) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog 2007-01-22 16:43:23 UTC (rev 9233) @@ -1,3 +1,19 @@ +2007-01-22 Johan Bilien <johan.bilien at nokia.com> + + * src/hd-home-background.c: + - copy the color when setting the property. + - be sure not to send NULL strings to DBus. + * src/hd-home-window.c: + - added background_apply_and_save_callback callback for background + setting, which saves the background after it's set. + - added response to the background dialog. Ok and Preview implemented. + * src/hd-home-background-dialog.c: + - set the combobox to the correct item when applying existing + background settings. + - connect file-chooser dialog. + - reflect changes to the combobox to the current background. + - added _get_background method + 2007-01-22 Lucas Rocha <lucas.rocha at nokia.com> * src/hd-home-background-dialog.c: make osso-help related code chunks Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background-dialog.c =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background-dialog.c 2007-01-22 16:14:28 UTC (rev 9232) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background-dialog.c 2007-01-22 16:43:23 UTC (rev 9233) @@ -1,4 +1,3 @@ -/* -*- mode:C; c-file-style:"gnu"; -*- */ /* * This file is part of hildon-desktop * @@ -78,9 +77,6 @@ #define HILDON_HOME_FILE_CHOOSER_EMPTY_PROP "empty-text" #define HILDON_HOME_FILE_CHOOSER_EMPTY _("home_li_no_images") -#define HILDON_HOME_SET_BG_RESPONSE_IMAGE GTK_RESPONSE_YES -#define HILDON_HOME_SET_BG_RESPONSE_PREVIEW GTK_RESPONSE_APPLY - #define HILDON_HOME_BACKGROUND_NO_IMAGE "no_image" @@ -108,7 +104,7 @@ { gchar *background_dir; GtkListStore *combobox_contents; - GtkTreeIter active_iter; + GtkTreePath *custom_image; GtkWidget *color_button; GtkWidget *img_combo; GtkWidget *mode_combo; @@ -117,7 +113,6 @@ #endif HDHomeBackground *background; - HDHomeBackground *original_background; }; static void @@ -160,6 +155,24 @@ hd_home_background_dialog_mode_changed (HDHomeBackgroundDialog *dialog); static void +hd_home_background_dialog_finalize (GObject *object); + +static gchar * +imagename_from_filename (const gchar *filename) +{ + gchar *tmp; + gchar *imagename; + + tmp = g_filename_from_uri (filename, NULL, NULL); + if (!tmp) + tmp = g_strdup (filename); + + imagename = g_filename_display_basename (tmp); + + return imagename; +} + +static void hd_home_background_dialog_class_init (HDHomeBackgroundDialogClass *klass) { GParamSpec *pspec; @@ -171,6 +184,7 @@ object_class->set_property = hd_home_background_dialog_set_property; object_class->get_property = hd_home_background_dialog_get_property; + object_class->finalize = hd_home_background_dialog_finalize; dialog_class->response = hd_home_background_dialog_response; @@ -357,16 +371,16 @@ g_value_get_string (value)); break; -#ifdef HAVE_LIBOSSOHELP case PROP_OSSO_CONTEXT: priv->osso_context = g_value_get_pointer (value); - +#ifdef HAVE_LIBOSSOHELP + /* Add help button */ if (priv->osso_context) ossohelp_dialog_help_enable (GTK_DIALOG (gobject), HH_HELP_SET_BACKGROUND, priv->osso_context); +#endif break; -#endif case PROP_BACKGROUND: hd_home_background_dialog_set_background ( @@ -410,23 +424,43 @@ } } -#if 0 -static gboolean -home_bgd_select_file_dialog (GtkWidget * parent, - GtkComboBox * box, - gboolean built_in) +static void +hd_home_background_dialog_finalize (GObject *object) { - GtkTreeModel *tree = gtk_combo_box_get_model (box); - GtkWidget *dialog; - GtkFileFilter *mime_type_filter; - gint response; - gchar *name_str, *dot; - gchar *chooser_name; - gchar *image_dir; + HDHomeBackgroundDialogPrivate *priv; + + priv = HD_HOME_BACKGROUND_DIALOG_GET_PRIVATE (object); + + if (priv->background) + { + g_object_unref (priv->background); + priv->background = NULL; + } + + if (priv->custom_image) + { + gtk_tree_path_free (priv->custom_image); + priv->custom_image = NULL; + } + + g_free (priv->background_dir); + priv->background_dir = NULL; + +} + +static void +hd_home_background_dialog_file_select (HDHomeBackgroundDialog *dialog) +{ + HDHomeBackgroundDialogPrivate *priv; + GtkWidget *fdialog; + GtkFileFilter *mime_type_filter; + gint response; + gchar *image_dir; + + priv = HD_HOME_BACKGROUND_DIALOG_GET_PRIVATE (dialog); - dialog = - hildon_file_chooser_dialog_new_with_properties( - GTK_WINDOW(parent), + fdialog = hildon_file_chooser_dialog_new_with_properties( + GTK_WINDOW (dialog), HILDON_HOME_FILE_CHOOSER_ACTION_PROP, GTK_FILE_CHOOSER_ACTION_OPEN, HILDON_HOME_FILE_CHOOSER_TITLE_PROP, @@ -438,9 +472,16 @@ NULL); #ifdef HAVE_LIBOSSOHELP +<<<<<<< .mine + if (priv->osso_context) + ossohelp_dialog_help_enable (GTK_DIALOG(fdialog), + HH_HELP_SELECT_IMAGE, + priv->osso_context); +======= ossohelp_dialog_help_enable(GTK_DIALOG(dialog), HILDON_HOME_SELECT_IMAGE_HELP_TOPIC, home_get_osso_context ()); +>>>>>>> .r9232 #endif mime_type_filter = gtk_file_filter_new(); @@ -450,129 +491,112 @@ gtk_file_filter_add_mime_type (mime_type_filter, "image/bmp"); gtk_file_filter_add_mime_type (mime_type_filter, "image/tiff"); gtk_file_filter_add_mime_type (mime_type_filter, "sketch/png"); + gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (fdialog), + mime_type_filter); - gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), - mime_type_filter); - - image_dir = g_build_path("/", - g_getenv ("HOME"), + image_dir = g_build_path(G_DIR_SEPARATOR_S, + g_get_home_dir (), HILDON_HOME_HC_USER_IMAGE_DIR, NULL); - if(!gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), - image_dir)) + if (!gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fdialog), + image_dir)) g_warning ("Couldn't set default image dir for dialog %s", image_dir); g_free (image_dir); - response = gtk_dialog_run (GTK_DIALOG (dialog)); + response = gtk_dialog_run (GTK_DIALOG (fdialog)); if (response == GTK_RESPONSE_OK) { + const gchar *filename; - chooser_name = - gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog)); + filename = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (fdialog)); - name_str = g_filename_from_uri (chooser_name, NULL, NULL); - if (!name_str) - name_str = g_strdup (chooser_name); + if (filename) + { + GtkTreeModel *model; + GtkTreeIter iter; + gchar *name; - /* remove extension */ - if ((dot = g_strrstr (name_str, ".")) && dot != name_str) - *dot = '\0'; + name = imagename_from_filename (filename); - if (name_str && *name_str) - { - GtkTreeIter iter; - GtkTreePath *path; - gint priority = 0; - gtk_list_store_append (GTK_LIST_STORE (tree), &iter); + model = GTK_TREE_MODEL (priv->combobox_contents); - gtk_list_store_set (GTK_LIST_STORE (tree), - &iter, - BG_IMAGE_NAME, name_str, - BG_IMAGE_FILENAME, chooser_name, - BG_IMAGE_PRIORITY, G_MAXINT, -1); + if (priv->custom_image) + { + gtk_tree_model_get_iter (model, + &iter, + priv->custom_image); + gtk_list_store_remove (priv->combobox_contents, + &iter); + gtk_tree_path_free (priv->custom_image); + } - gtk_combo_box_set_active_iter (box, &iter); + gtk_list_store_append (priv->combobox_contents, + &iter); + + priv->custom_image = gtk_tree_model_get_path (model, + &iter); - path = gtk_tree_model_get_path (tree, &iter); - gtk_tree_path_next (path); + gtk_list_store_set (priv->combobox_contents, + &iter, + BG_IMAGE_NAME, name?name:filename, + BG_IMAGE_FILENAME, filename, + BG_IMAGE_PRIORITY, G_MAXINT, + -1); - if (gtk_tree_model_get_iter (tree, &iter, path)) - { - priority = home_bgd_get_priority (tree, &iter); - if (priority == G_MAXINT) - { - gtk_list_store_remove(GTK_LIST_STORE(tree), &iter); - - } - } - gtk_tree_path_free(path); + gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->img_combo), + &iter); + g_free (name); } - /* Clean up */ - g_free(name_str); - gtk_widget_destroy(dialog); - - return TRUE; } - gtk_widget_destroy(dialog); + gtk_widget_destroy (fdialog); - return FALSE; } -#endif static void hd_home_background_dialog_response (GtkDialog *dialog, gint arg) { - HDHomeBackgroundDialogPrivate *priv; + HDHomeBackgroundDialog *background_dialog; - priv = HD_HOME_BACKGROUND_DIALOG_GET_PRIVATE (dialog); + background_dialog = HD_HOME_BACKGROUND_DIALOG (dialog); -#if 0 - g_debug ("response_data = {\n" - " img_combo .= %s\n" - " mode_combo .= %s\n" - " color_button .= %s\n" - " applied .= %s\n" - " built_in .= %s\n" - " has_preview .= %s\n" - "}", - g_type_name (G_OBJECT_TYPE (d->img_combo)), - g_type_name (G_OBJECT_TYPE (d->mode_combo)), - g_type_name (G_OBJECT_TYPE (d->color_button)), - d->applied ? "<true>" : "<false>", - d->built_in ? "<true>" : "<false>", - d->has_preview ? "<true>" : "<false>"); -#endif - - switch (arg) - { - case HILDON_HOME_SET_BG_RESPONSE_IMAGE: - /* home_bgd_select_file_dialog (dialog, img_combo, d->built_in);*/ - break; - case HILDON_HOME_SET_BG_RESPONSE_PREVIEW: - break; - case GTK_RESPONSE_OK: - gtk_widget_hide (GTK_WIDGET(dialog)); - break; - case GTK_RESPONSE_CANCEL: - case GTK_RESPONSE_DELETE_EVENT: - gtk_widget_hide (GTK_WIDGET (dialog)); - break; - default: - break; - } - + if (arg == HILDON_HOME_SET_BG_RESPONSE_IMAGE) + hd_home_background_dialog_file_select (background_dialog); } static void hd_home_background_dialog_filename_changed (HDHomeBackgroundDialog *dialog) { + HDHomeBackgroundDialogPrivate *priv; + GtkTreeIter iter; + gchar *filename; + + priv = HD_HOME_BACKGROUND_DIALOG_GET_PRIVATE (dialog); + + gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->img_combo), + &iter); + + gtk_tree_model_get (GTK_TREE_MODEL (priv->combobox_contents), + &iter, + BG_IMAGE_FILENAME, &filename, + -1); + + if (filename) + g_object_set (G_OBJECT (priv->background), + "filename", filename, + NULL); + else + g_object_set (G_OBJECT (priv->background), + "filename", HD_HOME_BACKGROUND_NO_IMAGE, + NULL); + + g_free (filename); } static void @@ -664,6 +688,10 @@ BG_IMAGE_FILENAME, NULL, BG_IMAGE_PRIORITY, 0, -1); + /* It's the default */ + gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->img_combo), + &iterator); + kfile = g_key_file_new (); while ((image_desc_file = g_dir_read_name (dir))) @@ -710,41 +738,6 @@ if (error) goto end_of_loop; -#if 0 - current_uri = background_manager_get_image_uri (bm); - - if (current_uri) - { - gchar *current_path; - GError *error = NULL; - - current_path = g_filename_from_uri (current_uri, NULL, &error); - if (error) - { - g_warning ("Unable to get the filename from uri `%s': %s", - current_uri, - error->message); - - g_error_free (error); - - /* we let the background manager deal with it */ - current_path = g_strdup (current_uri); - } - - g_debug ("current filename [%s], processing [%s]", - current_path, image_path); - - if (image_path && - g_str_equal(image_path, current_path)) - { - g_debug ("current BG uses built in image"); - resp_data->built_in = TRUE; - } - - g_free (current_path); - } -#endif - gtk_list_store_append (priv->combobox_contents, &iterator); gtk_list_store_set (priv->combobox_contents, @@ -785,7 +778,6 @@ gchar *filename; GdkColor *color; BackgroundMode mode; - GtkTreeIter iter; g_return_if_fail (HD_IS_HOME_BACKGROUND_DIALOG (dialog)); priv = HD_HOME_BACKGROUND_DIALOG_GET_PRIVATE (dialog); @@ -799,29 +791,56 @@ "mode", &mode, NULL); - if (filename) + if (filename && *filename && + !g_str_equal (filename, HD_HOME_BACKGROUND_NO_IMAGE)) { - gchar *image_name; - GError *error = NULL; + gboolean valid; + GtkTreeIter iter; + GtkTreeModel *model; - image_name = g_filename_from_uri (filename, NULL, &error); - if (error) + model = GTK_TREE_MODEL (priv->combobox_contents); + + valid = gtk_tree_model_get_iter_first (model, &iter); + + while (valid) { - g_warning ("Could not get image name: %s", error->message); - g_error_free (error); - image_name = g_filename_display_basename (filename); + gchar *existing_filename = NULL; + + gtk_tree_model_get (model, + &iter, + BG_IMAGE_FILENAME, &existing_filename, + -1); + + if (existing_filename && g_str_equal (existing_filename, filename)) + break; + + valid = gtk_tree_model_iter_next (model, &iter); } - gtk_list_store_append (priv->combobox_contents, &iter); + if (!valid) + { + gchar *image_name = imagename_from_filename (filename); - gtk_list_store_set (priv->combobox_contents, - &iter, - BG_IMAGE_FILENAME, filename, - BG_IMAGE_NAME, image_name, - BG_IMAGE_PRIORITY, G_MAXINT, - -1); + gtk_list_store_append (priv->combobox_contents, &iter); - g_free (image_name); + gtk_list_store_set (priv->combobox_contents, + &iter, + BG_IMAGE_FILENAME, filename, + BG_IMAGE_NAME, image_name, + BG_IMAGE_PRIORITY, G_MAXINT, + -1); + + if (priv->custom_image) + gtk_tree_path_free (priv->custom_image); + + priv->custom_image = gtk_tree_model_get_path (model, &iter); + + g_free (image_name); + } + + gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->img_combo), + &iter); + g_free (filename); } @@ -868,10 +887,18 @@ priv->background = g_object_ref (background); - if (!priv->original_background) - priv->original_background = hd_home_background_copy (background); - g_object_notify (G_OBJECT (dialog), "background"); hd_home_background_dialog_sync_from_background (dialog); } + +HDHomeBackground * +hd_home_background_dialog_get_background (HDHomeBackgroundDialog *dialog) +{ + HDHomeBackgroundDialogPrivate *priv; + + g_return_val_if_fail (HD_IS_HOME_BACKGROUND_DIALOG (dialog), NULL); + priv = HD_HOME_BACKGROUND_DIALOG_GET_PRIVATE (dialog); + + return priv->background; +} Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background-dialog.h =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background-dialog.h 2007-01-22 16:14:28 UTC (rev 9232) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background-dialog.h 2007-01-22 16:43:23 UTC (rev 9233) @@ -27,6 +27,7 @@ #define __HD_HOME_BACKGROUND_DIALOG_H__ #include <gtk/gtkdialog.h> +#include "hd-home-background.h" G_BEGIN_DECLS @@ -41,6 +42,10 @@ #define HD_IS_HOME_BACKGROUND_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HD_TYPE_HOME_BACKGROUND_DIALOG)) #define HD_HOME_BACKGROUND_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), HD_TYPE_HOME_BACKGROUND_DIALOG, HDHomeBackgroundDialogClass)) +#define HILDON_HOME_SET_BG_RESPONSE_IMAGE GTK_RESPONSE_YES +#define HILDON_HOME_SET_BG_RESPONSE_PREVIEW GTK_RESPONSE_APPLY + + struct _HDHomeBackgroundDialog { GtkDialog parent; @@ -57,6 +62,9 @@ GType hd_home_background_dialog_get_type (void); +HDHomeBackground * hd_home_background_dialog_get_background + (HDHomeBackgroundDialog *dialog); + G_END_DECLS #endif /* __HD_HOME_BACKGROUND_DIALOG_H__ */ Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background.c =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background.c 2007-01-22 16:14:28 UTC (rev 9232) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background.c 2007-01-22 16:43:23 UTC (rev 9233) @@ -40,6 +40,7 @@ #include <glib/gkeyfile.h> +/* Key used in the home-background.conf */ #define HD_HOME_BACKGROUND_KEY_GROUP "Hildon Home" #define HD_HOME_BACKGROUND_KEY_URI "BackgroundImage" #define HD_HOME_BACKGROUND_KEY_SIDEBAR "SidebarImage" @@ -51,7 +52,8 @@ #define HD_HOME_BACKGROUND_KEY_BLUE "Blue" #define HD_HOME_BACKGROUND_KEY_MODE "Mode" -#define HD_HOME_BACKGROUND_VALUE_NO_IMAGE "no-image" +/* Some pre-defined values */ +#define HD_HOME_BACKGROUND_VALUE_NO_IMAGE HD_HOME_BACKGROUND_NO_IMAGE #define HD_HOME_BACKGROUND_VALUE_CENTERED "Centered" #define HD_HOME_BACKGROUND_VALUE_STRETCHED "Stretched" #define HD_HOME_BACKGROUND_VALUE_SCALED "Scaled" @@ -103,8 +105,6 @@ G_TYPE_INSTANCE_GET_PRIVATE ((background), HD_TYPE_HOME_BACKGROUND, HDHomeBackgroundPrivate); - - background->priv->color = g_new0 (GdkColor, 1); } static void @@ -208,7 +208,8 @@ g_free (priv->south_border); priv->south_border = NULL; - g_free (priv->color); + if (priv->color) + gdk_color_free (priv->color); priv->color = NULL; } @@ -225,7 +226,11 @@ { case PROP_FILENAME: g_free (priv->filename); - priv->filename = g_strdup (g_value_get_string (value)); + if (g_str_equal (g_value_get_string (value), + HD_HOME_BACKGROUND_NO_IMAGE)) + priv->filename = g_strdup (""); + else + priv->filename = g_strdup (g_value_get_string (value)); break; case PROP_NORTH_BORDER: g_free (priv->north_border); @@ -247,8 +252,9 @@ priv->mode = g_value_get_int (value); break; case PROP_COLOR: - g_free (priv->color); - priv->color = g_value_get_pointer (value); + if (priv->color) + gdk_color_free (priv->color); + priv->color = gdk_color_copy (g_value_get_pointer (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -473,6 +479,10 @@ HD_HOME_BACKGROUND_KEY_GROUP, HD_HOME_BACKGROUND_KEY_RED, &local_error); + + if (!priv->color) + priv->color = g_new0 (GdkColor, 1); + if (local_error) { priv->color->red = 0; @@ -551,7 +561,7 @@ DBusGConnection *connection; GError *local_error = NULL; gint pixmap_xid; - GdkPixmap *pixmap; + GdkPixmap *pixmap = NULL; g_return_if_fail (HD_IS_HOME_BACKGROUND (background) && window); priv = background->priv; @@ -571,19 +581,22 @@ g_debug ("Trying to apply background to window: %x", (int)GDK_WINDOW_XID(window)); +#define S(string) (string?string:"") org_maemo_hildon_background_manager_set_background (background_manager_proxy, GDK_WINDOW_XID (window), - priv->filename, - priv->west_border, - priv->north_border, + S(priv->filename), + S(priv->west_border), + S(priv->north_border), priv->color->red, priv->color->green, priv->color->blue, priv->mode, &pixmap_xid, error); +#undef S - pixmap = gdk_pixmap_foreign_new (pixmap_xid); + if (pixmap_xid) + pixmap = gdk_pixmap_foreign_new (pixmap_xid); if (pixmap) { @@ -683,19 +696,24 @@ data->user_data = user_data; data->window = window; + g_debug ("Applying background %s aynchronously", + priv->filename); + /* Here goes */ +#define S(string) (string?string:"") org_maemo_hildon_background_manager_set_background_async (background_manager_proxy, GDK_WINDOW_XID (window), - priv->filename, - priv->west_border, - priv->north_border, + S(priv->filename), + S(priv->west_border), + S(priv->north_border), priv->color->red, priv->color->green, priv->color->blue, priv->mode, (org_maemo_hildon_background_manager_set_background_reply) hd_home_background_apply_async_dbus_callback, data); +#undef S } HDHomeBackground * Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background.h =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background.h 2007-01-22 16:14:28 UTC (rev 9232) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background.h 2007-01-22 16:43:23 UTC (rev 9233) @@ -41,6 +41,8 @@ #define HD_IS_HOME_BACKGROUND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HD_TYPE_HOME_BACKGROUND)) #define HD_HOME_BACKGROUND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), HD_TYPE_HOME_BACKGROUND, HDHomeBackgroundClass)) +#define HD_HOME_BACKGROUND_NO_IMAGE "no-image" + struct _HDHomeBackground { GObject parent; Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-window.c =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-window.c 2007-01-22 16:14:28 UTC (rev 9232) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-window.c 2007-01-22 16:43:23 UTC (rev 9233) @@ -271,7 +271,7 @@ background = g_object_new (HD_TYPE_HOME_BACKGROUND, NULL); conffile = g_build_path (G_DIR_SEPARATOR_S, - g_getenv ("HOME"), + g_get_home_dir (), HD_DESKTOP_USER_PATH, HD_HOME_BACKGROUND_CONF_FILE, NULL); @@ -374,6 +374,7 @@ GError *error, HDHomeWindow *window) { + HDHomeWindowPrivate *priv; g_debug ("Background applied!"); if (error) @@ -385,8 +386,58 @@ gdk_window_clear (GTK_WIDGET (window)->window); gtk_widget_queue_draw (GTK_WIDGET (window)); + + priv = HD_HOME_WINDOW_GET_PRIVATE (window); + + if (background != priv->background) + { + if (priv->background) + g_object_unref (priv->background); + priv->background = g_object_ref (background); + } + } +static void +background_apply_and_save_callback (HDHomeBackground *background, + gint pixmap_xid, + GError *error, + HDHomeWindow *window) +{ + HDHomeWindowPrivate *priv; + gchar *conffile; + GError *save_error = NULL; + + background_apply_callback (background, pixmap_xid, error, window); + + /* Do not save if an error occurred */ + if (error) + return; + + conffile = g_build_path (G_DIR_SEPARATOR_S, + g_get_home_dir (), + HD_DESKTOP_USER_PATH, + HD_HOME_BACKGROUND_CONF_FILE, + NULL); + + priv = HD_HOME_WINDOW_GET_PRIVATE (window); + + hd_home_background_save (priv->background, + conffile, + &save_error); + + if (save_error) + { + g_warning ("Error when saving background settings to %s: %s", + conffile, + error->message); + g_error_free (save_error); + } + + g_free (conffile); + +} + static gboolean hd_home_window_map_event (GtkWidget *widget, GdkEventAny *event) @@ -980,6 +1031,43 @@ } static void +hd_home_window_set_background_reponse (HDHomeWindow *window, + gint response, + GtkDialog *dialog) +{ + HDHomeBackground *background; + + background = + hd_home_background_dialog_get_background (HD_HOME_BACKGROUND_DIALOG (dialog)); + + switch (response) + { + case GTK_RESPONSE_OK: + gtk_widget_hide (GTK_WIDGET(dialog)); + hd_home_background_apply_async + (background, + GTK_WIDGET (window)->window, + (HDHomeBackgroundApplyCallback)background_apply_and_save_callback, + window); + break; + case HILDON_HOME_SET_BG_RESPONSE_PREVIEW: + hd_home_background_apply_async + (background, + GTK_WIDGET (window)->window, + (HDHomeBackgroundApplyCallback)background_apply_callback, + window); + + break; + case GTK_RESPONSE_CANCEL: + case GTK_RESPONSE_DELETE_EVENT: + gtk_widget_hide (GTK_WIDGET (dialog)); + break; + default: + break; + } +} + +static void hd_home_window_set_background_activate (HDHomeWindow *window) { HDHomeWindowPrivate *priv = HD_HOME_WINDOW_GET_PRIVATE (window); @@ -991,7 +1079,10 @@ "background", priv->background, NULL); - gtk_dialog_run (GTK_DIALOG (dialog)); + g_signal_connect_swapped (dialog, "response", + G_CALLBACK (hd_home_window_set_background_reponse), + window); - gtk_widget_destroy (dialog); + gtk_widget_show (dialog); + }
- Previous message: [maemo-commits] r9232 - projects/haf/hafbuildbot
- Next message: [maemo-commits] r9234 - in projects/haf/trunk/hildon-fm: . hildon-fm
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]