[maemo-commits] [maemo-commits] r9143 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . data libhildondesktop src test

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue Jan 16 20:22:18 EET 2007
Author: jobi
Date: 2007-01-16 20:22:15 +0200 (Tue, 16 Jan 2007)
New Revision: 9143

Modified:
   projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog
   projects/haf/branches/maemo-af-desktop/hildon-desktop/data/home-background.conf
   projects/haf/branches/maemo-af-desktop/hildon-desktop/data/tasknavigator.conf
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-area.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-window.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/test/test6.c
Log:

2007-01-16  Johan Bilien  <johan.bilien at nokia.com>

	* data/home-background.conf: Removed side and top bar, retrieve
	them from the theme always
	* libhildondesktop/hildon-home-window.c:
	- Removed old references to style and background-manager
	- various cleanups
	* src/hd-home-window.c:
	- implemented style_set
	- set the background if the titlebar or leftbar have changed
	* src/hd-home-background.c:
	- fixed order of the arguments in the DBus call
	* test/test6.c: 
	- allow to set the background to other windows
	- allow to switch between 2 backgrounds



Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog	2007-01-16 16:07:44 UTC (rev 9142)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog	2007-01-16 18:22:15 UTC (rev 9143)
@@ -1,3 +1,19 @@
+2007-01-16  Johan Bilien  <johan.bilien at nokia.com>
+
+	* data/home-background.conf: Removed side and top bar, retrieve
+	them from the theme always
+	* libhildondesktop/hildon-home-window.c:
+	- Removed old references to style and background-manager
+	- various cleanups
+	* src/hd-home-window.c:
+	- implemented style_set
+	- set the background if the titlebar or leftbar have changed
+	* src/hd-home-background.c:
+	- fixed order of the arguments in the DBus call
+	* test/test6.c: 
+	- allow to set the background to other windows
+	- allow to switch between 2 backgrounds
+
 2007-01-16  Lucas Rocha  <lucas.rocha at nokia.com>
 
 	* configure.ac, src/Makefile.am, src/hn-others-button.[ch]: others menu 

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/data/home-background.conf
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/data/home-background.conf	2007-01-16 16:07:44 UTC (rev 9142)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/data/home-background.conf	2007-01-16 18:22:15 UTC (rev 9143)
@@ -1,7 +1,5 @@
 [Hildon Home]
 BackgroundImage=/usr/share/themes/default/images//qgn_plat_home_background.jpg
-SidebarImage=/usr/share/themes/default/images/qgn_plat_home_border_left.png
-TitlebarImage=/usr/share/themes/default/images/qgn_plat_home_status_bar_background.png
 Red=0
 Green=0
 Blue=0

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/data/tasknavigator.conf
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/data/tasknavigator.conf	2007-01-16 16:07:44 UTC (rev 9142)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/data/tasknavigator.conf	2007-01-16 18:22:15 UTC (rev 9143)
@@ -1,2 +1,3 @@
 [/usr/share/applications/hildon-navigator/hildon-task-navigator-bookmarks.desktop]
 [/usr/share/applications/hildon-navigator/osso-contact-plugin.desktop]
+[/usr/share/applications/hildon-navigator/app-switcher.desktop]

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-area.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-area.c	2007-01-16 16:07:44 UTC (rev 9142)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-area.c	2007-01-16 18:22:15 UTC (rev 9143)
@@ -256,6 +256,7 @@
 static void
 hildon_home_area_init (HildonHomeArea *area)
 {
+  gtk_fixed_set_has_window (GTK_FIXED (area), FALSE);
 }
 
 static void

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.c	2007-01-16 16:07:44 UTC (rev 9142)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.c	2007-01-16 18:22:15 UTC (rev 9143)
@@ -64,17 +64,11 @@
 #define TASKNAV_INSENSITIVE_METHOD      "tasknav_insensitive"
 #define TASKNAV_SENSITIVE_METHOD        "tasknav_sensitive"
 
-/* Style properties */
-#define HH_BLEND_IMAGE_SIDEBAR_NAME     "HildonHomeLeftEdge"
-#define HH_BLEND_IMAGE_TITLEBAR_NAME    "HildonHomeTitleBar"
-
 #define HILDON_HOME_WINDOW_GET_PRIVATE(obj) \
 (G_TYPE_INSTANCE_GET_PRIVATE ((obj), HILDON_TYPE_HOME_WINDOW, HildonHomeWindowPrivate))
 
 struct _HildonHomeWindowPrivate
 {
-/*  BackgroundManager *bg_manager;*/
-
   GtkWidget    *titlebar;
   GtkWidget    *applet_area;
 
@@ -183,81 +177,7 @@
     }
 }
 
-#if 0
 static void
-background_manager_load_complete_cb (BackgroundManager *manager,
-                                     HildonHomeWindow  *window)
-{
-  g_debug (G_STRLOC ": load complete");
-}
-
-static void
-background_manager_load_cancel_cb (BackgroundManager *manager,
-                                   HildonHomeWindow  *window)
-{
-  g_debug (G_STRLOC ": load cancelled");
-}
-
-static void
-background_manager_load_error_cb (BackgroundManager *manager,
-                                  const GError      *error,
-                                  HildonHomeWindow  *window)
-{
-  const gchar *text;
-  
-  g_return_if_fail (error);
-  
-  if (error->domain == background_manager_error_quark ())
-    {
-      switch (error->code)
-        {
-          case BACKGROUND_MANAGER_ERROR_IO:
-              text = HH_NO_CONNECTION_TEXT;
-              break;
-          case BACKGROUND_MANAGER_ERROR_CORRUPT:
-              text = HH_FILE_CORRUPTED_TEXT;
-              break;
-          case BACKGROUND_MANAGER_ERROR_MMC_OPEN:
-              text = HH_MMC_OPEN_TEXT;
-              break;
-          case BACKGROUND_MANAGER_ERROR_MEMORY:
-          default:
-              text = NULL;
-              break;
-        }
-    }
-  else
-    text = NULL;
-
-  if (text)
-    hildon_home_window_show_information_note (window, text);
-}
-
-static void
-background_manager_changed_cb (BackgroundManager *manager,
-			       GdkPixbuf         *pixbuf,
-			       HildonHomeWindow  *window)
-{
-  HildonHomeWindowPrivate *priv = window->priv;
-
-  if (!pixbuf)
-    return;
-  else
-    {
-      priv = window->priv;
-      
-      /* force the event boxes to be window-less and avoid covering
-       * the area we paint directly onto
-       */
-      gtk_event_box_set_visible_window (GTK_EVENT_BOX (priv->titlebar), FALSE);
-      gtk_event_box_set_visible_window (GTK_EVENT_BOX (priv->main_area), FALSE);
-      
-      gtk_widget_queue_draw (GTK_WIDGET (window));
-    }
-}
-#endif
-
-static void
 hildon_home_window_lowmem (HildonHomeWindow   *window,
                            gboolean            is_lowmem)
 {
@@ -402,102 +322,18 @@
                                     FALSE);
 }
 
-static const gchar *
-get_sidebar_image_from_theme (GtkWidget *widget)
-{
-  GtkStyle *style;
-  
-  style = gtk_rc_get_style_by_paths (gtk_widget_get_settings (widget),
-                                     HH_BLEND_IMAGE_SIDEBAR_NAME,
-                                     NULL,
-                                     G_TYPE_NONE);
-  
-  if (style && style->rc_style->bg_pixmap_name[0])
-    return style->rc_style->bg_pixmap_name[0];
-
-  return NULL;
-}
-
-
-static const gchar *
-get_titlebar_image_from_theme (GtkWidget *widget)
-{
-  GtkStyle *style;
-
-  style = gtk_rc_get_style_by_paths (gtk_widget_get_settings (widget),
-                                     HH_BLEND_IMAGE_TITLEBAR_NAME,
-                                     NULL,
-                                     G_TYPE_NONE);
-
-  if (style && style->rc_style->bg_pixmap_name[0])
-    return style->rc_style->bg_pixmap_name[0];
-
-  return NULL;
-}
-
-#if 0
 static void
 hildon_home_window_show (GtkWidget *widget)
 {
   gtk_widget_realize (widget);
-  gdk_window_set_type_hint (widget->window,
-		            GDK_WINDOW_TYPE_HINT_DESKTOP);
 
-  background_manager_set_desktop (background_manager_get_default (),
-                                  widget->window);
+  gdk_window_set_back_pixmap (widget->window, NULL, FALSE);
+  gdk_window_set_type_hint (widget->window,
+                            GDK_WINDOW_TYPE_HINT_DESKTOP);
   
   GTK_WIDGET_CLASS (hildon_home_window_parent_class)->show (widget);
 }
-#endif
 
-static void
-hildon_home_window_style_set (GtkWidget *widget,
-			      GtkStyle  *old_style)
-{
-/*  HildonHomeWindowPrivate *priv = HILDON_HOME_WINDOW (widget)->priv;*/
-  static gchar *current_titlebar_image;
-  static gchar *current_sidebar_image;
-  const gchar *new_titlebar_image, *new_sidebar_image;
-
-  if (GTK_WIDGET_CLASS (hildon_home_window_parent_class)->style_set)
-    GTK_WIDGET_CLASS (hildon_home_window_parent_class)->style_set (widget,
-		    						   old_style);
-  
-  new_titlebar_image = get_titlebar_image_from_theme (widget);
-  new_sidebar_image = get_sidebar_image_from_theme (widget);
-
-  /* avoid resetting the background when the window is exposed for the
-   * first time
-   */
-  if (!old_style)
-    {
-      current_titlebar_image = g_strdup (new_titlebar_image);
-      current_sidebar_image = g_strdup (new_sidebar_image);
-      return;
-    }
-
-  /* avoid resetting the background if the theme hasn't changed */
-  if (g_str_equal (current_titlebar_image, new_titlebar_image) &&
-      g_str_equal (current_sidebar_image, new_sidebar_image)/* &&
-      background_manager_refresh_from_cache (priv->bg_manager)*/)
-    {
-      return;
-    }
-
-  g_free(current_titlebar_image);
-  current_titlebar_image = g_strdup (new_titlebar_image);
-  
-  g_free(current_sidebar_image);
-  current_sidebar_image = g_strdup (new_sidebar_image);
-
-#if 0
-  background_manager_set_components (priv->bg_manager,
-                                     new_titlebar_image,
-                                     new_sidebar_image,
-                                     TRUE);
-#endif
-}
-
 static gboolean
 hildon_home_window_key_press_event (GtkWidget *widget,
                                     GdkEventKey *event)
@@ -532,14 +368,6 @@
 static void
 hildon_home_window_finalize (GObject *gobject)
 {
-#if 0
-  HildonHomeWindowPrivate *priv = HILDON_HOME_WINDOW (gobject)->priv;
-
-  g_signal_handlers_disconnect_by_func (priv->bg_manager,
-		                        background_manager_changed_cb,
-					HILDON_HOME_WINDOW (gobject));
-#endif
-  
   G_OBJECT_CLASS (hildon_home_window_parent_class)->finalize (gobject);
 }
 
@@ -675,8 +503,12 @@
                                     priv->titlebar,
                                     event);
 
+  if (GTK_WIDGET_CLASS (hildon_home_window_parent_class)->expose_event)
+    return GTK_WIDGET_CLASS (hildon_home_window_parent_class)->expose_event (widget,
+                                                                      event);
+  else
+    return TRUE;
   
-  return TRUE;
 }
 
 static void
@@ -737,8 +569,6 @@
   window = HILDON_HOME_WINDOW (retval);
   priv = window->priv;
 
-  gtk_widget_set_app_paintable (widget, TRUE);
-
   gtk_widget_push_composite_child ();
 
   priv->titlebar = hildon_home_titlebar_new ();
@@ -762,6 +592,7 @@
   gtk_widget_show (priv->applet_area);
 
   GTK_BIN (widget)->child = priv->applet_area;
+
   HILDON_DESKTOP_WINDOW (window)->container = GTK_CONTAINER (priv->applet_area);
   
   g_signal_connect (priv->applet_area, "layout-mode-started",
@@ -782,39 +613,6 @@
                     window);
 
   gtk_widget_show_all (priv->applet_area);
-
-  /* realize and set the window type hint; then bind the desktop
-   * GdkWindow to the background manager
-   */
-  gtk_widget_realize (widget);
-  gdk_window_set_type_hint (widget->window, GDK_WINDOW_TYPE_HINT_DESKTOP);
-  
-#if 0
-  priv->bg_manager = background_manager_get_default ();
-  
-  g_signal_connect (priv->bg_manager, "changed",
-		    G_CALLBACK (background_manager_changed_cb),
-		    window);
-  g_signal_connect (priv->bg_manager, "preview",
-                    G_CALLBACK (background_manager_changed_cb),
-                    window);
-  g_signal_connect (priv->bg_manager, "load-complete",
-                    G_CALLBACK (background_manager_load_complete_cb),
-                    window);
-  g_signal_connect (priv->bg_manager, "load-cancel",
-                    G_CALLBACK (background_manager_load_cancel_cb),
-                    window);
-  g_signal_connect (priv->bg_manager, "load-error",
-                    G_CALLBACK (background_manager_load_error_cb),
-                    window);
-
-  background_manager_set_components (priv->bg_manager,
-		  		     get_titlebar_image_from_theme (widget),
-				     get_sidebar_image_from_theme (widget),
-                                     FALSE);
-  background_manager_set_desktop (priv->bg_manager, widget->window);
-#endif
-  
   gtk_widget_pop_composite_child ();
   
   return retval;
@@ -833,11 +631,11 @@
   gobject_class->get_property = hildon_home_window_get_property;
   gobject_class->finalize = hildon_home_window_finalize;
   
-  widget_class->style_set = hildon_home_window_style_set;
   widget_class->key_press_event = hildon_home_window_key_press_event;
   widget_class->size_allocate = hildon_home_window_size_allocate;
   widget_class->expose_event = hildon_home_window_expose;
   widget_class->map = hildon_home_window_map;
+  widget_class->show = hildon_home_window_show;
 
   container_class->forall = hildon_home_window_forall;
 
@@ -931,12 +729,9 @@
   GdkRectangle work_area;
   HDWM *wm;
 
-  gtk_window_set_has_frame (GTK_WINDOW (window), FALSE);
 
   widget = GTK_WIDGET (window);
 
-  gtk_window_fullscreen (GTK_WINDOW (window));
-
   window->priv = priv = HILDON_HOME_WINDOW_GET_PRIVATE (window);
   priv->is_dimmed = FALSE;
 

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-16 16:07:44 UTC (rev 9142)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-background.c	2007-01-16 18:22:15 UTC (rev 9143)
@@ -564,8 +564,8 @@
   org_maemo_hildon_background_manager_set_background (background_manager_proxy,
                                                       GDK_WINDOW_XID (window),
                                                       priv->filename,
+                                                      priv->west_border,
                                                       priv->north_border,
-                                                      priv->west_border,
                                                       priv->color->red,
                                                       priv->color->green,
                                                       priv->color->blue,
@@ -585,6 +585,8 @@
                                               GError           *error,
                                               struct cb_data   *data)
 {
+
+  g_debug ("DBUS Callback");
   if (data->callback)
     data->callback (data->background, error, data->user_data);
 
@@ -632,8 +634,8 @@
                                                 (background_manager_proxy,
                                                  GDK_WINDOW_XID (window),
                                                  priv->filename,
+                                                 priv->west_border,
                                                  priv->north_border,
-                                                 priv->west_border,
                                                  priv->color->red,
                                                  priv->color->green,
                                                  priv->color->blue,

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-16 16:07:44 UTC (rev 9142)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-home-window.c	2007-01-16 18:22:15 UTC (rev 9143)
@@ -48,6 +48,9 @@
 
 #define LAYOUT_OPENING_BANNER_TIMEOUT   2500
 
+#define HD_HOME_WINDOW_STYLE_NORTH_BORDER   "HildonHomeTitleBar"
+#define HD_HOME_WINDOW_STYLE_WEST_BORDER    "HildonHomeLeftEdge"
+
 #include "hd-home-window.h"
 
 #define HD_HOME_WINDOW_GET_PRIVATE(obj) \
@@ -66,6 +69,9 @@
   GtkWidget        *layout_mode_banner;
   gint              layout_mode_banner_to;
 
+  gchar            *north_border;
+  gchar            *west_border;
+
   HDHomeBackground *background;
 };
 
@@ -147,8 +153,10 @@
 hd_home_window_map_event (GtkWidget    *widget,
                           GdkEventAny  *event);
 
+static void
+hd_home_window_style_set (GtkWidget    *widget,
+                          GtkStyle     *style);
 
-
 static void
 hd_home_window_class_init (HDHomeWindowClass *window_class)
 {
@@ -166,6 +174,7 @@
   object_class->get_property = hd_home_window_get_property;
 
   widget_class->map_event = hd_home_window_map_event;
+  widget_class->style_set = hd_home_window_style_set;
 
   hhwindow_class->layout_mode_accept = hd_home_window_layout_mode_accept;
   hhwindow_class->layout_mode_cancel = hd_home_window_layout_mode_cancel;
@@ -222,8 +231,6 @@
 
   titlebar = hildon_home_window_get_titlebar (hhwindow);
 
-  g_debug ("Got titlebar: %p", titlebar);
-
   menu = hd_home_window_build_main_menu (window);
   hildon_home_titlebar_set_menu (HILDON_HOME_TITLEBAR (titlebar), menu);
   
@@ -289,6 +296,10 @@
   if (background)
     hd_home_window_set_background (window, background);
 
+  /* Necessary to avoid the default background to be reset */
+  gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE);
+  gtk_widget_set_double_buffered (GTK_WIDGET (window), FALSE);
+
   return retval;
 }
 
@@ -345,31 +356,128 @@
   }
 }
 
+static void
+background_apply_callback (HDHomeBackground *background,
+                           GError           *error,
+                           HDHomeWindow     *window)
+{
+  g_debug ("Background applied!");
+
+  if (error)
+    {
+      g_warning ("Got error when apply background: %s",
+                 error->message);
+      return;
+    }
+
+  gdk_window_clear (GTK_WIDGET (window)->window);
+  gtk_widget_queue_draw (GTK_WIDGET (window));
+}
+
 static gboolean
 hd_home_window_map_event (GtkWidget    *widget,
                           GdkEventAny  *event)
 {
   HDHomeWindowPrivate  *priv = HD_HOME_WINDOW_GET_PRIVATE (widget);
-  GError               *error = NULL;
 
-  g_debug ("hd_home_window_map_event");
-
   if (priv->background)
-    hd_home_background_apply (priv->background,
-                              widget->window,
-                              &error);
+    hd_home_background_apply_async (priv->background,
+                                    widget->window,
+                                    (HDHomeBackgroundApplyCallback)
+                                    background_apply_callback,
+                                    widget);
 
-  if (error)
-    {
-      g_warning ("Error when applying background: %s",
-                 error->message);
-      g_error_free (error);
-    }
-  
   return GTK_WIDGET_CLASS (hd_home_window_parent_class)->map_event (widget,
                                                                     event);
 }
 
+static const gchar *
+hd_home_window_get_pixmap_name (HDHomeWindow *window,
+                                const gchar *key)
+{
+  GtkStyle *style;
+  GtkSettings *settings;
+
+  settings = gtk_widget_get_settings (GTK_WIDGET (window));
+
+  style = gtk_rc_get_style_by_paths (settings,
+                                     key,
+                                     NULL,
+                                     G_TYPE_NONE);
+  
+  if (style && style->rc_style->bg_pixmap_name[0])
+    return style->rc_style->bg_pixmap_name[0];
+
+  return NULL;
+
+}
+
+static void
+hd_home_window_style_set (GtkWidget *widget, GtkStyle *old_style)
+{
+  HDHomeWindow         *window;
+  HDHomeWindowPrivate  *priv;
+  const gchar          *north_border;
+  const gchar          *west_border;
+
+  window = HD_HOME_WINDOW (widget);
+  priv = HD_HOME_WINDOW_GET_PRIVATE (window);
+
+  if (GTK_WIDGET_CLASS (hd_home_window_parent_class)->style_set)
+    GTK_WIDGET_CLASS (hd_home_window_parent_class)->style_set (widget,
+                                                               old_style);
+  north_border = hd_home_window_get_pixmap_name (window,
+                                                 HD_HOME_WINDOW_STYLE_NORTH_BORDER);
+  
+  west_border  = hd_home_window_get_pixmap_name (window,
+                                                 HD_HOME_WINDOW_STYLE_WEST_BORDER);
+  
+
+  /* avoid resetting the background when the window is exposed for the
+   * first time
+   */
+  if (!old_style || 
+      !(north_border && g_str_equal (priv->north_border, north_border)) ||
+      !(west_border && g_str_equal (priv->west_border, west_border)))
+    {
+      if (north_border)
+        priv->north_border = g_strdup (north_border);
+      if (west_border)
+        priv->west_border  = g_strdup (west_border);
+
+      if (priv->background)
+        {
+          GValue value = {0};
+          g_value_init (&value, G_TYPE_STRING);
+
+          if (priv->north_border)
+            {
+              g_value_set_string (&value, priv->north_border);
+              g_object_set_property (G_OBJECT (priv->background),
+                                     "north-border",
+                                     &value);
+            }
+
+          if (priv->west_border)
+            {
+              g_value_set_string (&value, priv->west_border);
+              g_object_set_property (G_OBJECT (priv->background),
+                                     "west-border",
+                                     &value);
+            }
+
+          if (GTK_WIDGET_MAPPED (widget))
+            {
+              hd_home_background_apply_async (priv->background,
+                                              widget->window,
+                                              (HDHomeBackgroundApplyCallback)
+                                              background_apply_callback,
+                                              widget);
+            }
+        }
+    }
+}
+
 static GtkWidget *
 hd_home_window_build_main_menu (HDHomeWindow *window)
 {
@@ -590,8 +698,16 @@
 static void
 hd_home_window_calibration_activate (HDHomeWindow *window)
 {
+  HDHomeWindowPrivate  *priv;
   hd_home_window_applet_activate (window,
                                   HCP_PLUGIN_PATH_CALIBRATION);
+      
+  priv = HD_HOME_WINDOW_GET_PRIVATE (window);
+  hd_home_background_apply_async (priv->background,
+                                  GTK_WIDGET (window)->window,
+                                  (HDHomeBackgroundApplyCallback)
+                                  background_apply_callback,
+                                  window);
 }
 
 static void
@@ -628,8 +744,6 @@
   priv = HD_HOME_WINDOW_GET_PRIVATE (window);
   area = hildon_home_window_get_area (HILDON_HOME_WINDOW (window));
 
-  g_debug ("Called ensure_menu_status");
-
   /* remove old children from the settings menu */
   items = gtk_container_get_children (GTK_CONTAINER (priv->settings_menu));
 
@@ -821,10 +935,7 @@
                                HDHomeBackground *background)
 {
   HDHomeWindowPrivate  *priv = HD_HOME_WINDOW_GET_PRIVATE (window);
-  GError               *error = NULL;
 
-  g_debug ("Set background: %p", background);
-
   if (priv->background)
     g_object_unref (priv->background);
 
@@ -834,15 +945,12 @@
   g_object_notify (G_OBJECT (window), "background");
 
   if (background && GTK_WIDGET_MAPPED (window))
-    hd_home_background_apply (background,
-                              GTK_WIDGET (window)->window,
-                              &error);
-
-  if (error)
     {
-      g_warning ("Error when applying background: %s",
-               error->message);
-      g_error_free (error);
+      hd_home_background_apply_async (background,
+                                      GTK_WIDGET (window)->window,
+                                      (HDHomeBackgroundApplyCallback)
+                                      background_apply_callback,
+                                      window);
     }
 
 }

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/test/test6.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/test/test6.c	2007-01-16 16:07:44 UTC (rev 9142)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/test/test6.c	2007-01-16 18:22:15 UTC (rev 9143)
@@ -25,12 +25,16 @@
 #include <gtk/gtkmain.h>
 #include <gdk/gdkwindow.h>
 #include <gdk/gdkx.h>
+#include <gdk/gdkkeysyms.h>
 
 #include <libhildondesktop/hildon-background-manager.h>
 
-#define FILENAME "file:///usr/share/themes/default/images/qgn_plat_home_background.jpg"
+#define FILENAME1 "file:///usr/share/themes/default/images/qgn_plat_home_background.jpg"
+#define FILENAME2 "file:///usr/share/themes/theme1/images/qgn_plat_home_background.jpg"
 
+gint window_id;
 
+
 static void
 set_background_callback (DBusGProxy *proxy,
                          GError *error,
@@ -44,17 +48,30 @@
 }
 
 static gboolean
-button_release (GtkWidget      *widget,
-                GdkEventButton *event,
-                DBusGProxy     *proxy)
+key_release (GtkWidget      *widget,
+             GdkEventKey    *event,
+             DBusGProxy     *proxy)
 {
   GError *error = NULL;
+  const gchar *filename;
 
   g_debug ("button_release");
 
+  switch (event->keyval)
+    {
+      case GDK_a:
+          filename = FILENAME1;
+          break;
+      case GDK_b:
+          filename = FILENAME2;
+          break;
+      default:
+          return FALSE;
+    }
+
   org_maemo_hildon_background_manager_set_background_async (proxy,
-                                                            GDK_WINDOW_XID (widget->window),
-                                                            FILENAME,
+                                                            window_id?window_id:GDK_WINDOW_XID (widget->window),
+                                                            filename,
                                                             "/usr/share/themes/plankton/gtk-2.0/../images/qgn_plat_home_status_bar_background.png",
                                                             "/usr/share/themes/plankton/gtk-2.0/../images/qgn_plat_home_border_left.png",
                                                             0,
@@ -81,6 +98,11 @@
   DBusGConnection  *connection;
   GError           *error = NULL;
 
+  if (argc > 1)
+    window_id = atoi (argv[1]);
+  else
+    window_id = 0;
+
   gtk_init (&argc, &argv);
 
   connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
@@ -95,10 +117,21 @@
                                      HILDON_BACKGROUND_MANAGER_INTERFACE);
   
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  
+  if (argc > 1)
+    {
+      gchar *title;
+      window_id = atoi (argv[1]);
+      title = g_strdup_printf ("Background setter for %i", window_id);
+      gtk_window_set_title (GTK_WINDOW (window), title);
+      g_free (title);
+    }
+  else
+    window_id = 0;
 
   gtk_widget_set_app_paintable (window, TRUE);
   g_signal_connect (window, "key-release-event",
-                    G_CALLBACK (button_release),
+                    G_CALLBACK (key_release),
                     proxy);
 
   gtk_widget_show_all (window);


More information about the maemo-commits mailing list