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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Fri Dec 15 19:09:53 EET 2006
Author: moimart
Date: 2006-12-15 19:09:52 +0200 (Fri, 15 Dec 2006)
New Revision: 8793

Modified:
   projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hn-app-button.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hn-app-switcher.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hn-app-switcher.h
   projects/haf/branches/maemo-af-desktop/hildon-desktop/test/test4.c
Log:

	* test/test4.c: test updated with refactored appswitcher.
        * libhildondesktop/hn-app-switcher.[ch]:
        - Refactored appswitcher to allow different sizes.
        * libhildondesktop/hn-app-button.c: Commented out code not implemented
        yet.
	* ChangeLog updated.



Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog	2006-12-15 16:27:48 UTC (rev 8792)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog	2006-12-15 17:09:52 UTC (rev 8793)
@@ -1,3 +1,11 @@
+2006-12-15  Moises Martinez <moises.martinzes at nokia.com>
+
+	* test/test4.c: test updated with refactored appswitcher.
+	* libhildondesktop/hn-app-switcher.[ch]:
+	- Refactored appswitcher to allow different sizes.
+	* libhildondesktop/hn-app-button.c: Commented out code not implemented
+	yet.
+
 2006-12-15  Lucas Rocha  <lucas.rocha at nokia.com>
 
 	* libhildondesktop/hildon-desktop-plugin.[ch]: new macro which correctly

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hn-app-button.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hn-app-button.c	2006-12-15 16:27:48 UTC (rev 8792)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hn-app-button.c	2006-12-15 17:09:52 UTC (rev 8793)
@@ -1177,12 +1177,14 @@
       else
 	HN_DBG ("Unable to find the icon (even the default one)");
 
+/*FIXME: FIXME: FIXME: This is broken because app switcher is not singleton anymore */
+#if 0  
       /* the newly composed image is static */
       if(button->priv->is_blinking &&
          !hn_app_switcher_get_system_inactivity(HN_APP_SWITCHER (hn_app_switcher_new ())))
         hn_app_button_icon_animation (button->priv->icon,
                                       button->priv->is_blinking);
-      
+#endif      
       gtk_widget_show (button->priv->icon);
       gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE);
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
@@ -1243,12 +1245,14 @@
       else
 	HN_DBG ("Unable to find the icon (even the default one)");
 
+/*FIXME: FIXME: FIXME: This is broken because app switcher is not singleton anymore */
+#if 0
       /* the newly composed image is static */
       if(button->priv->is_blinking &&
          !hn_app_switcher_get_system_inactivity(HN_APP_SWITCHER (hn_app_switcher_new())))
         hn_app_button_icon_animation (button->priv->icon,
                                       button->priv->is_blinking);
-      
+#endif      
       gtk_widget_show (button->priv->icon);
       gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE);
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hn-app-switcher.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hn-app-switcher.c	2006-12-15 16:27:48 UTC (rev 8792)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hn-app-switcher.c	2006-12-15 17:09:52 UTC (rev 8793)
@@ -92,24 +92,9 @@
 #define ANIM_DURATION 5000 	/* 5 Secs for blinking icons */
 #define ANIM_FPS      2
 
-/* Themed widget names */
-static const gchar *as_button_names[] = {
-  "hildon-navigator-small-button1",
-  "hildon-navigator-small-button2",
-  "hildon-navigator-small-button3",
-  "hildon-navigator-small-button4",
-  
-  NULL,
-};
+#define AS_BUTTON_NAME "hildon-navigator-small-button%d"
+#define AS_BUTTON_NAME_PRESSED "hildon-navigator-small-button%d-pressed"
 
-static const gchar *as_button_pressed_names[] = {
-  "hildon-navigator-small-button1-pressed",
-  "hildon-navigator-small-button2-pressed",
-  "hildon-navigator-small-button3-pressed",
-  "hildon-navigator-small-button4-pressed",
-  NULL,
-};
-
 #define AS_MENU_BUTTON_NAME "hildon-navigator-small-button5"
 
 #define AS_UPPER_SEPARATOR "hildon-navigator-upper-separator"
@@ -137,6 +122,11 @@
 #define TOOLTIP_SHOW_TIMEOUT 500
 #define TOOLTIP_HIDE_TIMEOUT 1500
 
+enum 
+{
+  AS_PROP_NITEMS=1
+};
+
 static void 
 hn_app_switcher_add_info_cb (HDWM *hdwm, HDEntryInfo *entry_info, gpointer data);
 
@@ -152,6 +142,12 @@
 static void
 hn_app_switcher_show_menu_cb (HDWM *hdwm, gpointer data);
 
+static void 
+hn_app_switcher_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+
+static void 
+hn_app_switcher_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
+
 static void
 hn_app_image_animation (GtkWidget *icon,
 		       gboolean   is_on)
@@ -197,16 +193,7 @@
  * HNAppSwitcher
  */
 
-enum
-{
-  AS_APP1_BUTTON,
-  AS_APP2_BUTTON,
-  AS_APP3_BUTTON,
-  AS_APP4_BUTTON,
 
-  N_BUTTONS
-};
-
 enum
 {
   ADD_INFO,
@@ -224,7 +211,9 @@
 
 struct _HNAppSwitcherPrivate
 {
-  GtkWidget *buttons[N_BUTTONS];
+  gint nitems;
+	
+  GtkWidget **buttons;
   GSList *buttons_group;
 
   GtkWidget *main_button;
@@ -272,7 +261,7 @@
 {
   gint pos;
   
-  g_return_val_if_fail (GTK_IS_TOGGLE_BUTTON (button), AS_APP1_BUTTON);
+  g_return_val_if_fail (GTK_IS_TOGGLE_BUTTON (button), 0);
 
   pos = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
 					    "app-button-pos"));
@@ -281,10 +270,11 @@
 
 static void
 set_app_button_pos (GtkWidget *button,
-		    gint       pos)
+		    gint       pos,
+		    gint       maxpos)
 {
   g_return_if_fail (GTK_IS_TOGGLE_BUTTON (button));
-  g_return_if_fail (pos >= AS_APP1_BUTTON && pos < N_BUTTONS);
+  g_return_if_fail (pos >= 0 && pos < maxpos);
 
   g_object_set_data (G_OBJECT (button),
 		     "app-button-pos",
@@ -653,7 +643,7 @@
      */
     for (k = priv->applications, i = 0; k != NULL; k = k->next, ++i)
     {
-      if (i < N_BUTTONS)
+      if (i < priv->nitems)
         continue;
           
       for (l = hd_entry_info_get_children (k->data); l != NULL; l = l->next)
@@ -884,17 +874,27 @@
   gint pos = get_app_button_pos (widget);
   gboolean is_active = gtk_toggle_button_get_active (toggle);
   gboolean is_inconsistent = gtk_toggle_button_get_inconsistent (toggle);
+  gchar *name,*name_pressed;
 
+  name =
+   g_strdup_printf (AS_BUTTON_NAME,pos+1);
+
+  name_pressed =
+   g_strdup_printf (AS_BUTTON_NAME_PRESSED,pos+1);
+
   if (is_inconsistent)
-    gtk_widget_set_name (widget, as_button_names[pos]);
+    gtk_widget_set_name (widget, name);
   else
   {
     if (is_active)
-      gtk_widget_set_name (widget, as_button_pressed_names[pos]);
+      gtk_widget_set_name (widget, name_pressed);
     else
-      gtk_widget_set_name (widget, as_button_names[pos]);
+      gtk_widget_set_name (widget, name);
   }
 
+  g_free (name);
+  g_free (name_pressed);
+
   g_debug ("setting button (pos=%d) (inconsistent='<%s>', active='<%s>') name: %s",
 	   pos,
 	   is_inconsistent ? "true" : "false",
@@ -916,24 +916,29 @@
 {
   HNAppSwitcherPrivate *priv = app_switcher->priv;
   GtkWidget *retval;
+  gchar *name;
 
   g_assert (priv->buttons[pos] == NULL);
 
-  g_debug ("Creating app button at pos %d (name %s)",
-	  pos, as_button_names[pos]);
+  name = 
+    g_strdup_printf (AS_BUTTON_NAME,pos+1);
+  
+  g_debug ("Creating app button at pos %d (name %s)", pos, name);
  
   retval = hn_app_button_new (NULL);
 
-  set_app_button_pos (retval, pos);
+  set_app_button_pos (retval, pos, priv->nitems);
   hn_app_button_set_is_blinking (HN_APP_BUTTON (retval), FALSE);
 
-  gtk_widget_set_name (retval, as_button_names[pos]);
+  gtk_widget_set_name (retval, name);
 
   g_signal_connect (retval, "toggled",
 		    G_CALLBACK (app_button_toggled_cb),
 		    NULL);
 
   priv->buttons[pos] = retval;
+
+  g_free (name);
   
   return priv->buttons[pos];
 }
@@ -942,9 +947,12 @@
 hn_app_switcher_build (HNAppSwitcher *app_switcher)
 {
   GtkWidget *button;
+  gint i;
 
   g_assert (app_switcher);
 
+  app_switcher->priv->buttons = g_new0 (GtkWidget*,app_switcher->priv->nitems);
+
   app_switcher->hdwm = hd_wm_get_singleton ();
 
   g_debug ("singleton wm: %p",app_switcher->hdwm);
@@ -967,22 +975,14 @@
 
   /* most recent applications buttons */
   g_debug ("Adding buttons");
-  button = create_app_button (app_switcher, AS_APP1_BUTTON);
-  gtk_box_pack_start (GTK_BOX (app_switcher->vbox), button, TRUE, TRUE, 0);
-  gtk_widget_show (button);
-  
-  button = create_app_button (app_switcher, AS_APP2_BUTTON);
-  gtk_box_pack_start (GTK_BOX (app_switcher->vbox), button, TRUE, TRUE, 0);
-  gtk_widget_show (button);
-  
-  button = create_app_button (app_switcher, AS_APP3_BUTTON);
-  gtk_box_pack_start (GTK_BOX (app_switcher->vbox), button, TRUE, TRUE, 0);
-  gtk_widget_show (button);
-  
-  button = create_app_button (app_switcher, AS_APP4_BUTTON);
-  gtk_box_pack_start (GTK_BOX (app_switcher->vbox), button, TRUE, TRUE, 0);  
-  gtk_widget_show (button);
-  
+
+  for (i=0;i < app_switcher->priv->nitems;i++)
+  {
+    button = create_app_button (app_switcher, i);
+    gtk_box_pack_start (GTK_BOX (app_switcher->vbox), button, TRUE, TRUE, 0);
+    gtk_widget_show (button);
+  }
+   
   /* menu button */
   g_debug ("Adding menu button");
   button = create_menu_button (app_switcher);
@@ -1091,7 +1091,7 @@
     gtk_widget_show (priv->main_button);
 
   /* show only the buttons linked to an application */
-  for (i = AS_APP1_BUTTON; i < N_BUTTONS; i++)
+  for (i = 0; i < priv->nitems; i++)
   {
     GtkWidget *button = priv->buttons[i];
     HDEntryInfo *info;
@@ -1129,7 +1129,7 @@
   HNAppSwitcherPrivate *priv = app_switcher->priv;
   gint pos;
 
-  for (pos = AS_APP1_BUTTON; pos < N_BUTTONS; pos++)
+  for (pos = 0; pos < priv->nitems; pos++)
   {
     GtkWidget *button = priv->buttons[pos];
     HDEntryInfo *e;
@@ -1223,7 +1223,7 @@
   GtkWidget            *app_image;
 
   /* first we reset all the buttons icons */
-  for (pos = AS_APP1_BUTTON; pos < N_BUTTONS; pos++)
+  for (pos = 0; pos < priv->nitems; pos++)
   {
     HNAppButton *button = HN_APP_BUTTON (priv->buttons[pos]);
 
@@ -1234,8 +1234,8 @@
   priv->buttons_group = NULL;
 
   /* then refresh the icons of the application buttons */
-  for (l = priv->applications, pos = AS_APP1_BUTTON;
-       l != NULL && pos < N_BUTTONS;
+  for (l = priv->applications, pos = 0;
+       l != NULL && pos < priv->nitems;
        l = l->next, pos++)
   {
     HDEntryInfo *entry = l->data;
@@ -1286,7 +1286,7 @@
     const GList       *k;
     HDEntryInfo       *child;
 
-    if (pos < N_BUTTONS)
+    if (pos < priv->nitems)
       continue;
 
     /* set the ignore flag on any children that were causing the blinking
@@ -1582,8 +1582,8 @@
 
     g_debug ("HDEntryInfo present and of type WATCHED_APP");
       
-    for (l = priv->applications, pos = AS_APP1_BUTTON;
-         l != NULL && pos < N_BUTTONS;
+    for (l = priv->applications, pos = 0;
+         l != NULL && pos < priv->nitems;
          l = l->next, pos++)
     {
       HDEntryInfo *entry = l->data;
@@ -1651,8 +1651,8 @@
     /* the remaining cases are more complicated and require that we know
      * the state of the associated button
      */
-    for (l = priv->applications, pos = AS_APP1_BUTTON;
-         l != NULL && pos < N_BUTTONS;
+    for (l = priv->applications, pos = 0;
+         l != NULL && pos < priv->nitems;
          l = l->next, pos++)
     {
       HDEntryInfo *entry = l->data;
@@ -1795,8 +1795,8 @@
 
      /* locate the associated button, and toggle it */
      active_pos = 0;
-     for (l = priv->applications, pos = AS_APP1_BUTTON;
-          l != NULL && pos < N_BUTTONS;
+     for (l = priv->applications, pos = 0;
+          l != NULL && pos < priv->nitems;
           l = l->next, pos++)
      {
        HDEntryInfo *entry = l->data;
@@ -1816,7 +1816,7 @@
    */  
   if (!active_found)
   {
-    for (pos = AS_APP1_BUTTON; pos < N_BUTTONS; pos++)
+    for (pos = 0; pos < priv->nitems; pos++)
     {
       GtkToggleButton *app_button;
 
@@ -1835,28 +1835,6 @@
 }
 
 static void
-hn_app_switcher_real_bgkill (HNAppSwitcher *app_switcher,
-			     gboolean       is_on)
-{
-  hn_app_switcher_changed_info_cb (app_switcher->hdwm, NULL, (gpointer)app_switcher);  
-}
-
-static void
-hn_app_switcher_real_lowmem (HNAppSwitcher *app_switcher,
-                             gboolean       is_on)
-{
-  HNAppSwitcherPrivate *priv = app_switcher->priv;
-  priv->is_dimming_on = is_on;
-
-  g_debug ("Received lowmem signal");
-
-  /* TODO - update the sensitivity of the items depending on the
-   * lowmem state
-   */
-  hn_app_switcher_changed_info_cb (app_switcher->hdwm, NULL, (gpointer)app_switcher);  
-}
-
-static void
 hn_app_switcher_finalize (GObject *gobject)
 {
   HNAppSwitcher *app_switch = HN_APP_SWITCHER (gobject);
@@ -1896,6 +1874,48 @@
   return object;
 }
 
+static void 
+hn_app_switcher_set_property (GObject *object,
+                              guint prop_id,
+                              const GValue *value,
+                              GParamSpec *pspec)
+{
+  HNAppSwitcher *app_switcher;
+
+  app_switcher = HN_APP_SWITCHER (object);
+
+  switch (prop_id)
+  {
+    case AS_PROP_NITEMS:	   
+      app_switcher->priv->nitems = g_value_get_int (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  } 
+}
+
+static void 
+hn_app_switcher_get_property (GObject *object,
+                              guint prop_id,
+                              GValue *value,
+                              GParamSpec *pspec)
+{
+  HNAppSwitcher *app_switcher;
+
+  app_switcher = HN_APP_SWITCHER (object);
+
+  switch (prop_id)
+  {
+    case AS_PROP_NITEMS:
+      g_value_set_int (value,app_switcher->priv->nitems);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;						
+  }
+}
+
 static void
 hn_app_switcher_class_init (HNAppSwitcherClass *klass)
 {
@@ -1905,12 +1925,22 @@
   gobject_class->finalize = hn_app_switcher_finalize;
   gobject_class->constructor = hn_app_switcher_constructor;
 
+  gobject_class->set_property = hn_app_switcher_set_property;
+  gobject_class->get_property = hn_app_switcher_get_property;
+
   widget_class->show_all = hn_app_switcher_show_all;
  
-  klass->bgkill = hn_app_switcher_real_bgkill; 
-  klass->lowmem = hn_app_switcher_real_lowmem;
-  
   g_type_class_add_private (klass, sizeof (HNAppSwitcherPrivate));
+
+  g_object_class_install_property (gobject_class,
+                                   AS_PROP_NITEMS,
+                                   g_param_spec_int("n_items",
+                                                    "number_of_items",
+                                                    "Number of items",
+                                                    1,
+						    20,
+						    4,
+                                                    G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
 }
 
 static void
@@ -1933,9 +1963,9 @@
 /* Public API */
 
 GtkWidget *
-hn_app_switcher_new (void)
+hn_app_switcher_new (gint nitems)
 {
-  return g_object_new (HN_TYPE_APP_SWITCHER, NULL);
+  return g_object_new (HN_TYPE_APP_SWITCHER, "n_items",nitems,NULL);
 }
 
 GList *

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hn-app-switcher.h
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hn-app-switcher.h	2006-12-15 16:27:48 UTC (rev 8792)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hn-app-switcher.h	2006-12-15 17:09:52 UTC (rev 8793)
@@ -77,7 +77,7 @@
 
 GType      hn_app_switcher_get_type      (void) G_GNUC_CONST;
 
-GtkWidget *hn_app_switcher_new           (void);
+GtkWidget *hn_app_switcher_new           (gint nitems);
 
 GList *    hn_app_switcher_get_entries   (HNAppSwitcher            *app_switcher);
 void       hn_app_switcher_foreach_entry (HNAppSwitcher            *app_switcher,

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/test/test4.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/test/test4.c	2006-12-15 16:27:48 UTC (rev 8792)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/test/test4.c	2006-12-15 17:09:52 UTC (rev 8793)
@@ -24,10 +24,10 @@
   
   gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (hbox));
   
-  gtk_box_pack_start (GTK_BOX (hbox), hn_app_switcher_new (),TRUE,TRUE,0);
-  gtk_box_pack_start (GTK_BOX (hbox), hn_app_switcher_new (),TRUE,TRUE,0);
-  gtk_box_pack_start (GTK_BOX (hbox), hn_app_switcher_new (),TRUE,TRUE,0);
-  gtk_box_pack_start (GTK_BOX (hbox), hn_app_switcher_new (),TRUE,TRUE,0);
+  gtk_box_pack_start (GTK_BOX (hbox), hn_app_switcher_new (3),TRUE,TRUE,0);
+  gtk_box_pack_start (GTK_BOX (hbox), hn_app_switcher_new (4),TRUE,TRUE,0);
+  gtk_box_pack_start (GTK_BOX (hbox), hn_app_switcher_new (5),TRUE,TRUE,0);
+  gtk_box_pack_start (GTK_BOX (hbox), hn_app_switcher_new (6),TRUE,TRUE,0);
   gtk_box_pack_start (GTK_BOX (hbox), button, TRUE,TRUE,0);
 
   g_signal_connect (button,"clicked",G_CALLBACK(show_a_menu),NULL);


More information about the maemo-commits mailing list