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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Wed May 2 20:51:21 EEST 2007
Author: moimart
Date: 2007-05-02 20:51:20 +0300 (Wed, 02 May 2007)
New Revision: 11398

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-window.c
   projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.h
Log:

	* libhildondesktop/hildon-desktop-popup-menu.c:
        - Implemented new signal to handle resizing
        - Implemented auto-resizing of parent window.
        * libhildondesktop/hildon-desktop-popup-window.[ch]:
        - Removed gtk_widget_show_all
        - Added method to recalculate position.
	* ChangeLog updated.



Modified: projects/haf/trunk/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-desktop/ChangeLog	2007-05-02 16:58:49 UTC (rev 11397)
+++ projects/haf/trunk/hildon-desktop/ChangeLog	2007-05-02 17:51:20 UTC (rev 11398)
@@ -1,3 +1,12 @@
+2007-05-02  Moises Martinez  <moises.martinez at nokia.com>
+
+	* libhildondesktop/hildon-desktop-popup-menu.c:
+	- Implemented new signal to handle resizing
+	- Implemented auto-resizing of parent window.
+	* libhildondesktop/hildon-desktop-popup-window.[ch]:
+	- Removed gtk_widget_show_all
+	- Added method to recalculate position.
+
 2007-05-02  Johan Bilien  <johan.bilien at nokia.com>
 
 	* libhildonwm/hd-wm.c: do not handle the matchbox client list if

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-02 16:58:49 UTC (rev 11397)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c	2007-05-02 17:51:20 UTC (rev 11398)
@@ -44,9 +44,17 @@
   PROP_POPUP_ITEM_HEIGHT=1
 };
 
+enum
+{
+  SIGNAL_POPUP_RESIZE,
+  N_SIGNALS
+};
+
+static gint signals[N_SIGNALS];
+
 struct _HildonDesktopPopupMenuPrivate
 {
-  GtkWidget *scrolled_window;
+  GtkWidget *viewport;
   GtkWidget *box_items;
 
   GtkWidget *box_buttons;
@@ -115,6 +123,15 @@
 
   g_type_class_add_private (object_class, sizeof (HildonDesktopPopupMenuPrivate));
 
+  signals[SIGNAL_POPUP_RESIZE] =
+        g_signal_new ("popup-menu-resize",
+                      G_OBJECT_CLASS_TYPE (object_class),
+                      G_SIGNAL_RUN_FIRST,
+                      0,
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__VOID,
+                      G_TYPE_NONE, 0);
+  
   g_object_class_install_property (object_class,
                                    PROP_POPUP_ITEM_HEIGHT,
                                    g_param_spec_uint(
@@ -140,26 +157,21 @@
      										 params);
   menu = HILDON_DESKTOP_POPUP_MENU (object);
 
-  menu->priv->scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+  menu->priv->viewport = gtk_viewport_new (NULL, NULL);
 
-  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (menu->priv->scrolled_window), 
-		  		  GTK_POLICY_NEVER,
-				  GTK_POLICY_NEVER);
+  gtk_box_pack_start (GTK_BOX (menu),
+                      menu->priv->viewport,
+                      FALSE, FALSE, 0);
+  gtk_widget_show (menu->priv->viewport);
 
+
   gtk_widget_push_composite_child ();
 
   menu->priv->box_items = gtk_vbox_new (FALSE, 0); /* FIXME: add spacing decoration */
   
-  gtk_scrolled_window_add_with_viewport 
-    (GTK_SCROLLED_WINDOW (menu->priv->scrolled_window),
-     menu->priv->box_items);
+  gtk_container_add (GTK_CONTAINER (menu->priv->viewport), menu->priv->box_items);
 
   gtk_widget_show (menu->priv->box_items);
-
-  gtk_box_pack_start (GTK_BOX (menu),
-                      menu->priv->scrolled_window,
-                      FALSE, FALSE, 0);
-  gtk_widget_show (menu->priv->scrolled_window);
   
   menu->priv->box_buttons = gtk_hbox_new (TRUE,0);
 
@@ -243,9 +255,6 @@
   }
 }
 
-	
-
-
 static gboolean 
 hildon_desktop_popup_menu_motion_notify (GtkWidget      *widget,
 					 GdkEventMotion *event)
@@ -282,8 +291,8 @@
   gdouble position;
   gint delta = menu->priv->item_height;
   GtkAdjustment *adj = 
-    gtk_scrolled_window_get_vadjustment 
-      (GTK_SCROLLED_WINDOW (menu->priv->scrolled_window));
+    gtk_viewport_get_vadjustment 
+      (GTK_VIEWPORT (menu->priv->viewport));
 
   if (widget == menu->priv->scroll_up)
     delta *= -1;
@@ -335,7 +344,7 @@
 hildon_desktop_popup_menu_show_controls (HildonDesktopPopupMenu *menu)
 {	
   if (!menu->priv->controls_on)	
-  {	  
+  {	 	  
     gtk_box_pack_start (GTK_BOX (menu),
 		        menu->priv->box_buttons,
 		        FALSE, FALSE, 0);
@@ -386,28 +395,44 @@
       break;
     }
   }	  
-  
+ 
   if (show_scroll_controls)
   {	  
     hildon_desktop_popup_menu_show_controls (menu);	  
     gtk_widget_set_size_request 
-       (menu->priv->scrolled_window, req.width, d_height - menu->priv->item_height);
+       (menu->priv->viewport, req.width, d_height - menu->priv->item_height);
 
+    if (separators == 0)
+      separators++;	    
+    
     menu->priv->upper_hack = d_height - menu->priv->item_height*separators;
   }
   else
   {	  
     hildon_desktop_popup_menu_hide_controls (menu);
     gtk_widget_set_size_request
-      (menu->priv->scrolled_window, req.width, d_height);
+      (menu->priv->viewport, req.width, d_height);
   }
 
+  gtk_widget_queue_resize (menu->priv->viewport);
+  
   if (GTK_IS_WINDOW (parent))
   {	  
     gtk_widget_size_request (parent, &req);
     gtk_widget_set_size_request (parent, req.width, d_height);
-  }	  
 
+    if (GTK_WIDGET_MAPPED (parent))
+    {	    
+      g_signal_emit_by_name (menu, "popup-menu-resize");
+	    
+      gtk_widget_queue_resize (GTK_WIDGET (menu));    
+      gtk_widget_queue_resize (parent); 
+    }
+
+    if (GTK_WIDGET_REALIZED (parent))
+      gdk_window_resize (parent->window, req.width, d_height); 
+  }
+
   g_list_free (children);
 }	
 
@@ -437,13 +462,12 @@
 
     gtk_widget_set_size_request (menu->priv->box_buttons, req.width, menu->priv->item_height);
   }	  
-	
+
   gtk_box_pack_start (GTK_BOX (menu->priv->box_items),
 		      GTK_WIDGET (item),
 		      FALSE, FALSE, 0);
-  
   gtk_widget_show (GTK_WIDGET (item));
-  
+
   menu->priv->n_items++;
 
   hildon_desktop_popup_menu_parent_size (menu);
@@ -452,25 +476,15 @@
 void 
 hildon_desktop_popup_menu_remove_item (HildonDesktopPopupMenu *menu, GtkMenuItem *item)
 {
-  GList *children = NULL, *l;
 	
   g_assert (HILDON_DESKTOP_IS_POPUP_MENU (menu));
   g_return_if_fail (GTK_IS_MENU_ITEM (item));
 
-  children = gtk_container_get_children (GTK_CONTAINER (menu->priv->box_items));
-
-  for (l = children; l != NULL; l = g_list_next (l))
-  {
-    if (l->data == item)
-    {	    
-      gtk_container_remove (GTK_CONTAINER (menu->priv->box_items), GTK_WIDGET (item));	    
-      break;
-    }
-  }	  
+  gtk_container_remove (GTK_CONTAINER (menu->priv->box_items), GTK_WIDGET (item));	    
  
   menu->priv->n_items--;
-  
-  g_list_free (children);
+
+  hildon_desktop_popup_menu_parent_size (menu);
 }
 
 GList *

Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.c
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.c	2007-05-02 16:58:49 UTC (rev 11397)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.c	2007-05-02 17:51:20 UTC (rev 11398)
@@ -947,7 +947,7 @@
 
   hildon_desktop_popup_window_calculate_position (popup);
 
-  gtk_widget_show_all (GTK_WIDGET (popup));
+  gtk_widget_show (GTK_WIDGET (popup));
 
   popup_grab_on_window (GTK_WIDGET (popup)->window, activate_time, TRUE); /* Should always succeed */
 
@@ -969,3 +969,12 @@
     gtk_grab_remove (popup->priv->extra_panes[i]);	  
 }
 
+void 
+hildon_desktop_popup_recalculate_position (HildonDesktopPopupWindow *popup)
+{
+  if (!GTK_WIDGET_REALIZED (popup))
+    return;	  
+	
+  hildon_desktop_popup_window_calculate_position (popup);
+}	
+

Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.h
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.h	2007-05-02 16:58:49 UTC (rev 11397)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.h	2007-05-02 17:51:20 UTC (rev 11398)
@@ -94,6 +94,9 @@
 void 
 hildon_desktop_popup_window_popdown (HildonDesktopPopupWindow *popup);
 
+void
+hildon_desktop_popup_recalculate_position (HildonDesktopPopupWindow *popup);
+
 G_BEGIN_DECLS
 
 #endif/*__HILDON_DESKTOP_POPUP_WINDOW_H__*/


More information about the maemo-commits mailing list