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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Wed Aug 1 18:02:29 EEST 2007
Author: jobi
Date: 2007-08-01 18:02:24 +0300 (Wed, 01 Aug 2007)
New Revision: 12987

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-home-titlebar.c
   projects/haf/trunk/hildon-desktop/src/hd-applications-menu.c
   projects/haf/trunk/hildon-desktop/src/hd-desktop.c
   projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c
   projects/haf/trunk/hildon-desktop/src/hn-app-button.c
   projects/haf/trunk/hildon-desktop/src/hn-others-button.c
Log:

2007-08-01  Mohammad Anwari  <mdamt at maemo.org>

	Right-to-left dance:
	* src/hd-desktop.c:
	- Mirror the x value and the orientation.
	* src/hd-applications-menu.c, src/hn-app-button.c,
	  src/hn-others-button.c, src/hd-switcher-menu.c:
	- Mirror the keypress (e.g. you press right button in LTR but
	it should be left button in RTL).
	* libhildondesktop/hildon-desktop-popup-menu.c:
	- Adjust the x position of the child widget in RTL.
	* libhildondesktop/hildon-home-titlebar.c:
	- Mirror the x position of the menu in RTL.



Modified: projects/haf/trunk/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-desktop/ChangeLog	2007-08-01 14:58:27 UTC (rev 12986)
+++ projects/haf/trunk/hildon-desktop/ChangeLog	2007-08-01 15:02:24 UTC (rev 12987)
@@ -1,3 +1,17 @@
+2007-08-01  Mohammad Anwari  <mdamt at maemo.org>
+
+	Right-to-left dance:
+	* src/hd-desktop.c:
+	- Mirror the x value and the orientation.
+	* src/hd-applications-menu.c, src/hn-app-button.c,
+	  src/hn-others-button.c, src/hd-switcher-menu.c:
+	- Mirror the keypress (e.g. you press right button in LTR but
+	it should be left button in RTL).
+	* libhildondesktop/hildon-desktop-popup-menu.c:
+	- Adjust the x position of the child widget in RTL.
+	* libhildondesktop/hildon-home-titlebar.c:
+	- Mirror the x position of the menu in RTL.
+
 2007-08-01  Johan Bilien  <johan.bilien at nokia.com>
 
 	* configure.ac: 0.0.28

Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c	2007-08-01 14:58:27 UTC (rev 12986)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c	2007-08-01 15:02:24 UTC (rev 12987)
@@ -76,6 +76,8 @@
   gboolean      resize_parent;
 
   guint         toggle_size;
+
+  gboolean      rtl;
 };
 
 static GObject *hildon_desktop_popup_menu_constructor (GType gtype,
@@ -223,6 +225,7 @@
      										 params);
   menu = HILDON_DESKTOP_POPUP_MENU (object);
 
+  menu->priv->rtl = (gtk_widget_get_direction (GTK_WIDGET (menu)) == GTK_TEXT_DIR_RTL);
   menu->priv->viewport = gtk_viewport_new (NULL, NULL);
 
   gtk_box_pack_start (GTK_BOX (menu),
@@ -319,9 +322,14 @@
 
       child_allocation.width = allocation->width;
       child_allocation.height = child_requisition.height;
-      child_allocation.x = 0;
+
+      if (priv->rtl)
+        child_allocation.x = child_allocation.width;
+      else
+        child_allocation.x = 0;
+
       child_allocation.y = height;
-	    
+
       gtk_menu_item_toggle_size_allocate (GTK_MENU_ITEM (child),
                                           priv->toggle_size);
 
@@ -772,7 +780,7 @@
   previous_selected_item = menu->priv->selected_item;
 
   children = gtk_container_get_children (GTK_CONTAINER (menu->priv->box_items));
-
+  
   if (children)
   {
     l = item = g_list_find (children, menu->priv->selected_item);
@@ -937,7 +945,7 @@
   {
     if (l->data == item)
     {
-      gtk_menu_item_activate (GTK_MENU_ITEM (item));
+      gtk_menu_item_activate (GTK_MENU_ITEM (item));      
       break;
     }
   }

Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-titlebar.c
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-titlebar.c	2007-08-01 14:58:27 UTC (rev 12986)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-titlebar.c	2007-08-01 15:02:24 UTC (rev 12987)
@@ -174,7 +174,14 @@
 			"vertical-offset", &v_offset,
 			NULL);
 
-  *x += widget->allocation.x + h_offset;
+  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
+  {
+    *x += widget->allocation.width - GTK_WIDGET (menu)->allocation.width - h_offset;
+  } 
+  else
+  {
+    *x += widget->allocation.x + h_offset;
+  }
   *y += widget->allocation.y + widget->allocation.height + v_offset;
 
   *push_in = FALSE;

Modified: projects/haf/trunk/hildon-desktop/src/hd-applications-menu.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-applications-menu.c	2007-08-01 14:58:27 UTC (rev 12986)
+++ projects/haf/trunk/hildon-desktop/src/hd-applications-menu.c	2007-08-01 15:02:24 UTC (rev 12987)
@@ -246,10 +246,29 @@
 			        GdkEventKey *event,
 			        HDApplicationsMenu *button)
 {
+  gboolean activate_menu = FALSE, cancel_menu = FALSE;
+  
   HDWM *hdwm = hd_wm_get_singleton ();
 
-  if (event->keyval == GDK_Left    ||
-      event->keyval == GDK_KP_Left ||
+  if (gtk_widget_get_direction (menu) == GTK_TEXT_DIR_RTL)
+  {
+    if (event->keyval == GDK_Left ||
+        event->keyval == GDK_KP_Left)
+      activate_menu = TRUE;
+    else if (event->keyval == GDK_Right || 
+             event->keyval == GDK_KP_Right)
+      cancel_menu = TRUE;
+  } 
+  else 
+  {
+    if (event->keyval == GDK_Right)
+      activate_menu = TRUE;
+    else if (event->keyval == GDK_Left || 
+             event->keyval == GDK_KP_Left)
+      cancel_menu = TRUE;
+  }  
+
+  if (cancel_menu ||
       event->keyval == GDK_Escape)
   {
     if (hd_applications_menu_has_focus (button->priv->menu_applications))
@@ -291,8 +310,7 @@
   else if (event->keyval == GDK_Return    ||
 	   event->keyval == GDK_KP_Enter  ||
 	   event->keyval == GDK_ISO_Enter ||
-	   event->keyval == GDK_Right     ||
-           event->keyval == GDK_KP_Right)
+	   activate_menu)
   {
     if (hd_applications_menu_has_focus (button->priv->menu_categories))
     {
@@ -397,7 +415,7 @@
   {
     gtk_widget_grab_focus (GTK_WIDGET (item));
   }
-
+ 
   button->priv->focus_applications = FALSE;
 }
 
@@ -1131,17 +1149,37 @@
 		                       GdkEventKey *event,
 			               HDApplicationsMenu *button)
 {
+  gboolean activate_button = FALSE, cancel_button = FALSE;
+  
   g_return_val_if_fail (button, FALSE);
 
-  if (event->keyval == GDK_Right ||
-      event->keyval == GDK_KP_Enter)
+  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
   {
+    if (event->keyval == GDK_Left ||
+        event->keyval == GDK_KP_Left ||
+        event->keyval == GDK_KP_Enter)
+      activate_button = TRUE;
+    else if (event->keyval == GDK_Right || 
+             event->keyval == GDK_KP_Right)
+      cancel_button = TRUE;
+  } 
+  else 
+  {
+    if (event->keyval == GDK_Right ||
+        event->keyval == GDK_KP_Enter)
+      activate_button = TRUE;
+    else if (event->keyval == GDK_Left || 
+             event->keyval == GDK_KP_Left)
+      cancel_button = TRUE;
+  }
+
+  if (activate_button)
+  {
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button->priv->button), TRUE); 
 
     return TRUE;
   }
-  else if (event->keyval == GDK_Left || 
-           event->keyval == GDK_KP_Left)
+  else if (cancel_button)
   {
     gtk_widget_grab_focus (widget);
 	  

Modified: projects/haf/trunk/hildon-desktop/src/hd-desktop.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-desktop.c	2007-08-01 14:58:27 UTC (rev 12986)
+++ projects/haf/trunk/hildon-desktop/src/hd-desktop.c	2007-08-01 15:02:24 UTC (rev 12987)
@@ -1149,7 +1149,7 @@
                                         "height", height,
                                         "orientation", orientation,
                                         "stretch", TRUE,
-                                         NULL);
+                                         NULL);        
       }
       else if (!g_ascii_strcasecmp (type, HD_CONTAINER_TYPE_PANEL_EXPANDABLE))
       {
@@ -1168,6 +1168,24 @@
                                          NULL);
       }
 
+      if (gtk_widget_get_direction (info->container) == GTK_TEXT_DIR_RTL)
+      {
+        HildonDesktopPanelWindowOrientation new_orientation;
+        gint new_x;
+      
+        /* Mirror the values in RTL mode */
+        new_x = gdk_screen_get_width (gdk_screen_get_default ()) - x - width;
+
+        new_orientation = (orientation == HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_LEFT ? 
+                           HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_RIGHT :
+                           HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_LEFT);
+
+        g_object_set (info->container, 
+                      "x", new_x, 
+                      "orientation", new_orientation, 
+                      NULL);
+      }
+
       g_free (orientation_str);
     }
     else 

Modified: projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c	2007-08-01 14:58:27 UTC (rev 12986)
+++ projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c	2007-08-01 15:02:24 UTC (rev 12987)
@@ -332,11 +332,30 @@
 			                   GdkEventKey    *event,
 			                   HDSwitcherMenu *switcher)
 {
+  gboolean activate_menu = FALSE, cancel_menu = FALSE;
+  
   HildonDesktopPopupWindow *window =
     HILDON_DESKTOP_POPUP_WINDOW (widget);
 
-  if (event->keyval == GDK_Left ||
-      event->keyval == GDK_KP_Left ||
+  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
+  {
+    if (event->keyval == GDK_Left ||
+        event->keyval == GDK_KP_Left)
+      activate_menu = TRUE;
+    else if (event->keyval == GDK_Right || 
+             event->keyval == GDK_KP_Right)
+      cancel_menu = TRUE;
+  } 
+  else 
+  {
+    if (event->keyval == GDK_Right)
+      activate_menu = TRUE;
+    else if (event->keyval == GDK_Left || 
+             event->keyval == GDK_KP_Left)
+      cancel_menu = TRUE;
+  }  
+
+  if (cancel_menu ||
       event->keyval == GDK_Escape)
   {
     hildon_desktop_popup_window_popdown (window);
@@ -364,8 +383,7 @@
     return TRUE;
   }
   else
-  if (event->keyval == GDK_Right ||
-      event->keyval == GDK_KP_Right)
+  if (activate_menu)
   {
     GList *notifications =
      hildon_desktop_popup_menu_get_children 
@@ -398,9 +416,23 @@
 	                                        GdkEventKey    *event,
         	                                HDSwitcherMenu *switcher)
 {
-  if (event->keyval == GDK_Left ||
-      event->keyval == GDK_KP_Left)
+  gboolean cancel_menu = FALSE;
+  
+  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
   {
+    if (event->keyval == GDK_Right || 
+        event->keyval == GDK_KP_Right)
+      cancel_menu = TRUE;
+  } 
+  else 
+  {
+    if (event->keyval == GDK_Left || 
+        event->keyval == GDK_KP_Left)
+      cancel_menu = TRUE;
+  }  
+
+  if (cancel_menu)
+  {
     hildon_desktop_popup_window_jump_to_pane
       (switcher->priv->popup_window, -1);
 
@@ -421,16 +453,34 @@
 				       GdkEventKey    *event,
 				       HDSwitcherMenu *switcher)
 {
-  if (event->keyval == GDK_Right ||
-      event->keyval == GDK_KP_Right)
+  gboolean activate_menu = FALSE, cancel_menu = FALSE;
+  
+  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
   {
+    if (event->keyval == GDK_Left ||
+        event->keyval == GDK_KP_Left)
+      activate_menu = TRUE;
+    else if (event->keyval == GDK_Right || 
+             event->keyval == GDK_KP_Right)
+      cancel_menu = TRUE;
+  } 
+  else 
+  {
+    if (event->keyval == GDK_Right)
+      activate_menu = TRUE;
+    else if (event->keyval == GDK_Left || 
+             event->keyval == GDK_KP_Left)
+      cancel_menu = TRUE;
+  }  
+
+  if (activate_menu)
+  {
     gtk_toggle_button_set_active
       (GTK_TOGGLE_BUTTON (switcher->priv->toggle_button), TRUE);
 
     return TRUE;
   }	  
-  else if (event->keyval == GDK_Left ||
-           event->keyval == GDK_KP_Left)
+  else if (cancel_menu)
   {
     gtk_widget_grab_focus (widget);
 

Modified: projects/haf/trunk/hildon-desktop/src/hn-app-button.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hn-app-button.c	2007-08-01 14:58:27 UTC (rev 12986)
+++ projects/haf/trunk/hildon-desktop/src/hn-app-button.c	2007-08-01 15:02:24 UTC (rev 12987)
@@ -537,10 +537,24 @@
 static gboolean
 menu_keypress_cb (GtkWidget *menu, GdkEventKey *event, HNAppButton * app_button)
 {
+  gboolean cancel_menu = FALSE;
+
   g_return_val_if_fail(event, FALSE);
 
-  if (event->keyval == GDK_Left ||
-      event->keyval == GDK_KP_Left ||
+  if (gtk_widget_get_direction (menu) == GTK_TEXT_DIR_RTL)
+  {
+    if (event->keyval == GDK_Right || 
+             event->keyval == GDK_KP_Right)
+      cancel_menu = TRUE;
+  } 
+  else 
+  {
+    if (event->keyval == GDK_Left || 
+             event->keyval == GDK_KP_Left)
+      cancel_menu = TRUE;
+  }  
+
+  if (cancel_menu ||
       event->keyval == GDK_Escape)
     {
       gtk_menu_shell_deactivate (GTK_MENU_SHELL (menu));

Modified: projects/haf/trunk/hildon-desktop/src/hn-others-button.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hn-others-button.c	2007-08-01 14:58:27 UTC (rev 12986)
+++ projects/haf/trunk/hildon-desktop/src/hn-others-button.c	2007-08-01 15:02:24 UTC (rev 12987)
@@ -247,10 +247,22 @@
 			 GdkEventKey *event,
 			 HNOthersButton *button)
 {
+  gboolean cancel_menu = FALSE;
   HDWM *hdwm = hd_wm_get_singleton ();
 
-  if (event->keyval == GDK_Left    ||
-      event->keyval == GDK_KP_Left ||
+  if (gtk_widget_get_direction (menu) == GTK_TEXT_DIR_RTL)
+  {
+    if (event->keyval == GDK_Right    ||
+        event->keyval == GDK_KP_Right)
+      cancel_menu = TRUE;
+  } else
+  {
+    if (event->keyval == GDK_Left    ||
+        event->keyval == GDK_KP_Left)
+      cancel_menu = TRUE;
+  }
+
+  if (cancel_menu ||
       event->keyval == GDK_Escape)
   {
     gtk_menu_shell_deactivate (GTK_MENU_SHELL (menu));
@@ -873,19 +885,39 @@
 		            GdkEventKey *event,
 			    HNOthersButton *button)
 {
+  gboolean activate_button = FALSE, cancel_button = FALSE;
+  
   g_return_val_if_fail (button, FALSE);
 
-  if (event->keyval == GDK_Right ||
-      event->keyval == GDK_KP_Enter)
+  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
   {
+    if (event->keyval == GDK_Left ||
+        event->keyval == GDK_KP_Left ||
+        event->keyval == GDK_KP_Enter)
+      activate_button = TRUE;
+    else if (event->keyval == GDK_Right || 
+             event->keyval == GDK_KP_Right)
+      cancel_button = TRUE;
+  } 
+  else 
+  {
+    if (event->keyval == GDK_Right ||
+        event->keyval == GDK_KP_Enter)
+      activate_button = TRUE;
+    else if (event->keyval == GDK_Left || 
+             event->keyval == GDK_KP_Left)
+      cancel_button = TRUE;
+  }
+
+  if (activate_button)
+  {
     hn_others_button_menu_show (button);
  
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button->priv->button), TRUE); 
 
     return TRUE;
   }
-  else if (event->keyval == GDK_Left || 
-           event->keyval == GDK_KP_Left)
+  else if (cancel_button)
   {
     gtk_widget_grab_focus (widget);
 	  


More information about the maemo-commits mailing list