[maemo-commits] [maemo-commits] r11945 - in projects/haf/trunk/hildon-desktop: . libhildondesktop src

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue May 29 13:58:15 EEST 2007
Author: lucasr
Date: 2007-05-29 13:58:13 +0300 (Tue, 29 May 2007)
New Revision: 11945

Modified:
   projects/haf/trunk/hildon-desktop/ChangeLog
   projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c
   projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.h
   projects/haf/trunk/hildon-desktop/src/hd-applications-menu.c
Log:
2007-05-29  Lucas Rocha  <lucas.rocha at nokia.com>

	* src/hd-applications-menu.c: change the keyboard navigation behavior
	so that categories are activated when using up and down arrows. Focus
	is only grabed by applications pane on menu is popup.
	* libhildondesktop/hildon-desktop-popup-menu.[ch]: added method for
	deselecting menu items. 


Modified: projects/haf/trunk/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-desktop/ChangeLog	2007-05-29 10:13:17 UTC (rev 11944)
+++ projects/haf/trunk/hildon-desktop/ChangeLog	2007-05-29 10:58:13 UTC (rev 11945)
@@ -1,5 +1,13 @@
 2007-05-29  Lucas Rocha  <lucas.rocha at nokia.com>
 
+	* src/hd-applications-menu.c: change the keyboard navigation behavior
+	so that categories are activated when using up and down arrows. Focus
+	is only grabed by applications pane on menu is popup.
+	* libhildondesktop/hildon-desktop-popup-menu.[ch]: added method for
+	deselecting menu items. 
+
+2007-05-29  Lucas Rocha  <lucas.rocha at nokia.com>
+
 	* src/hd-select-plugins-dialog.c: show vertical scrollbar when the
 	list of plugins is longer than the space available. Fixes: NB#53976
 

Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c	2007-05-29 10:13:17 UTC (rev 11944)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c	2007-05-29 10:58:13 UTC (rev 11945)
@@ -831,6 +831,18 @@
   g_list_free (children);
 } 
 
+void 
+hildon_desktop_popup_menu_deselect_item (HildonDesktopPopupMenu *menu, GtkMenuItem *item)
+{
+  g_return_if_fail (HILDON_DESKTOP_IS_POPUP_MENU (menu));
+
+  if (menu->priv->selected_item == item)
+  {
+    gtk_item_deselect (GTK_ITEM (item));
+    menu->priv->selected_item = NULL;
+  }
+} 
+
 void
 hildon_desktop_popup_menu_select_first_item (HildonDesktopPopupMenu *menu)
 {

Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.h
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.h	2007-05-29 10:13:17 UTC (rev 11944)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.h	2007-05-29 10:58:13 UTC (rev 11945)
@@ -72,6 +72,9 @@
 void
 hildon_desktop_popup_menu_select_item (HildonDesktopPopupMenu *menu, GtkMenuItem *item);
 
+void
+hildon_desktop_popup_menu_deselect_item (HildonDesktopPopupMenu *menu, GtkMenuItem *item);
+
 void 
 hildon_desktop_popup_menu_select_first_item (HildonDesktopPopupMenu *menu);
 

Modified: projects/haf/trunk/hildon-desktop/src/hd-applications-menu.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-applications-menu.c	2007-05-29 10:13:17 UTC (rev 11944)
+++ projects/haf/trunk/hildon-desktop/src/hd-applications-menu.c	2007-05-29 10:58:13 UTC (rev 11945)
@@ -102,6 +102,7 @@
   GnomeVFSMonitorHandle    *home_dir_monitor;
   GnomeVFSMonitorHandle    *desktop_dir_monitor;
   guint                     monitor_update_timeout;
+  gboolean                  focus_applications;
 };
 
 static void hd_applications_menu_register_monitors (HDApplicationsMenu *button);
@@ -186,6 +187,8 @@
   
   priv->monitor_update_timeout = 0;
 
+  priv->focus_applications = TRUE;
+  
   priv->popup_window = NULL;
   
   gtk_container_add (GTK_CONTAINER (button), priv->button);
@@ -228,6 +231,8 @@
 
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button->priv->button),
 			        FALSE);
+
+  button->priv->focus_applications = TRUE;
 }
 
 static gboolean
@@ -243,11 +248,17 @@
   {
     if (hd_applications_menu_has_focus (button->priv->menu_applications))
     {
-      GtkWidget *selected_item = 
-        (GtkWidget *) hildon_desktop_popup_menu_get_selected_item (button->priv->menu_categories);
+      GtkMenuItem *selected_item = 
+        hildon_desktop_popup_menu_get_selected_item (button->priv->menu_applications);
 
-      gtk_widget_grab_focus (selected_item);
+      hildon_desktop_popup_menu_deselect_item (button->priv->menu_applications,
+		      			       selected_item);
+      
+      selected_item = 
+        hildon_desktop_popup_menu_get_selected_item (button->priv->menu_categories);
 
+      gtk_widget_grab_focus (GTK_WIDGET (selected_item));
+      
       return TRUE;
     }
   
@@ -268,26 +279,50 @@
     
     return TRUE;
   }
-  else
-  if (event->keyval == GDK_Right ||
-      event->keyval == GDK_KP_Right)
+  else if (event->keyval == GDK_Right ||
+           event->keyval == GDK_KP_Right)
   {
     if (hd_applications_menu_has_focus (button->priv->menu_categories))
     {
-      GtkWidget *selected_item = 
-        (GtkWidget *) hildon_desktop_popup_menu_get_selected_item (button->priv->menu_applications);
+      GtkMenuItem *selected_item;
 
-      gtk_widget_grab_focus (selected_item);
+      hildon_desktop_popup_menu_select_first_item (button->priv->menu_applications);
 
+      selected_item = 
+        hildon_desktop_popup_menu_get_selected_item (button->priv->menu_applications);
+
+      if (GTK_WIDGET_IS_SENSITIVE (selected_item))
+        gtk_widget_grab_focus (GTK_WIDGET (selected_item));
+      else
+	hildon_desktop_popup_menu_deselect_item (button->priv->menu_applications,
+			                         selected_item);
+      
       return TRUE;
     }
   }
   else
   {
     if (hd_applications_menu_has_focus (button->priv->menu_categories))
-      return gtk_widget_event (GTK_WIDGET (button->priv->menu_categories), (GdkEvent *) event);
+    {
+      gtk_widget_event (GTK_WIDGET (button->priv->menu_categories), (GdkEvent *) event);
+
+      if (event->keyval == GDK_Up     ||
+          event->keyval == GDK_KP_Up  ||
+          event->keyval == GDK_Down   ||
+          event->keyval == GDK_KP_Down)
+      {
+        GtkMenuItem *selected_item;
+
+	selected_item = 
+          hildon_desktop_popup_menu_get_selected_item (button->priv->menu_categories);
+
+	gtk_menu_item_activate (selected_item);
+      }
+    }
     else if (hd_applications_menu_has_focus (button->priv->menu_applications))
+    {
       return gtk_widget_event (GTK_WIDGET (button->priv->menu_applications), (GdkEvent *) event);
+    }
   }
   
   return FALSE;
@@ -324,16 +359,18 @@
       (button->priv->menu_applications, child);
   }
 
-  hildon_desktop_popup_menu_select_first_item (button->priv->menu_applications);
-
-  if (GTK_WIDGET_IS_SENSITIVE (sub_items->data))
+  if (button->priv->focus_applications &&
+      GTK_WIDGET_IS_SENSITIVE (sub_items->data))
   {
+    hildon_desktop_popup_menu_select_first_item (button->priv->menu_applications);
     gtk_widget_grab_focus (GTK_WIDGET (sub_items->data));
   }
   else
   {
     gtk_widget_grab_focus (GTK_WIDGET (item));
   }
+
+  button->priv->focus_applications = FALSE;
 }
 
 static void
@@ -929,7 +966,7 @@
 	  
     GdkWindow *w = 
       gtk_widget_get_parent_window (GTK_WIDGET (button));
-	  
+
     hd_wm_activate_window (HD_TN_ACTIVATE_KEY_FOCUS, w);
 
     return TRUE;


More information about the maemo-commits mailing list