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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue May 8 18:43:17 EEST 2007
Author: moimart
Date: 2007-05-08 18:43:16 +0300 (Tue, 08 May 2007)
New Revision: 11522

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/libhildonwm/hd-wm-watched-window.c
   projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm.c
   projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c
Log:

	* src/hd-switcher-menu.c:
        - Fixed menu positioning.
        - Implemented key navigation.
        - Added separators to notifications.
        * libhildondesktop/hildon-desktop-popup-menu.c:
        - Implemented navigation through keys. Misses auto-scrolling.
        - Small fixes
        * libhildondesktop/hildon-desktop-popup-window.c:
        - Propagate key-press-event to child widget of pane.
        * libhildonwm/hd-wm-watched-window.c:
        - Update state of fullscreen when a HDWMWatchedWindow is removed.
        Fixes: NB#56174, NB#54820.
        * libhildonwm/hd-wm.c:
        - Renamed "show_menu" signal to "show-menu".
	* ChangeLog updated.



Modified: projects/haf/trunk/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-desktop/ChangeLog	2007-05-08 15:34:00 UTC (rev 11521)
+++ projects/haf/trunk/hildon-desktop/ChangeLog	2007-05-08 15:43:16 UTC (rev 11522)
@@ -1,3 +1,20 @@
+2007-05-08  Moises Martinez  <moises.martinez at nokia.com>
+
+	* src/hd-switcher-menu.c:
+	- Fixed menu positioning.
+	- Implemented key navigation.
+	- Added separators to notifications.
+	* libhildondesktop/hildon-desktop-popup-menu.c:
+	- Implemented navigation through keys. Misses auto-scrolling.
+	- Small fixes
+	* libhildondesktop/hildon-desktop-popup-window.c:
+	- Propagate key-press-event to child widget of pane.
+	* libhildonwm/hd-wm-watched-window.c:
+	- Update state of fullscreen when a HDWMWatchedWindow is removed.
+	Fixes: NB#56174, NB#54820.
+	* libhildonwm/hd-wm.c:
+	- Renamed "show_menu" signal to "show-menu". 
+
 2007-05-08  Johan Bilien  <johan.bilien at nokia.com>
 
 	* libhildondesktop/hildon-desktop-home-item.c:

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-08 15:34:00 UTC (rev 11521)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c	2007-05-08 15:43:16 UTC (rev 11522)
@@ -32,8 +32,8 @@
 #include <gtk/gtkbutton.h>
 #include <gtk/gtkwindow.h>
 #include <gdk/gdk.h>
+#include <gdk/gdkkeysyms.h>
 
-
 #define HILDON_DESKTOP_POPUP_MENU_GET_PRIVATE(object) \
 	        (G_TYPE_INSTANCE_GET_PRIVATE ((object), HILDON_DESKTOP_TYPE_POPUP_MENU, HildonDesktopPopupMenuPrivate))
 
@@ -89,7 +89,7 @@
 
 static gboolean hildon_desktop_popup_menu_motion_notify (GtkWidget *widget, GdkEventMotion *event);
 static gboolean hildon_desktop_popup_menu_release_event (GtkWidget *widget, GdkEventButton *event);
-
+static gboolean hildon_desktop_popup_menu_key_press_event (GtkWidget *widget, GdkEventKey *event);
 static void hildon_desktop_popup_menu_scroll_cb (GtkWidget *widget, HildonDesktopPopupMenu *menu);
 
 static void 
@@ -119,7 +119,8 @@
 
   widget_class->motion_notify_event  = hildon_desktop_popup_menu_motion_notify;
   widget_class->button_release_event = hildon_desktop_popup_menu_release_event;
-
+  widget_class->key_press_event      = hildon_desktop_popup_menu_key_press_event;
+  
   g_type_class_add_private (object_class, sizeof (HildonDesktopPopupMenuPrivate));
 
   signals[SIGNAL_POPUP_RESIZE] =
@@ -284,7 +285,10 @@
     h = GTK_WIDGET (l->data)->allocation.height;
 
     if ((x >= 0) && (x <= w) && (y >= 0) && (y <= h))
+    {	    
       gtk_item_select (GTK_ITEM (l->data));
+      menu->priv->selected_item = GTK_MENU_ITEM (l->data);
+    }
   }
 
   g_list_free (menu_items);
@@ -347,6 +351,77 @@
   return TRUE;
 }
 
+static gboolean 
+hildon_desktop_popup_menu_key_press_event (GtkWidget   *widget,
+					   GdkEventKey *event)
+{
+  HildonDesktopPopupMenu *menu = HILDON_DESKTOP_POPUP_MENU (widget);
+  GList *menu_items = NULL, *l;
+
+  menu_items =
+    gtk_container_get_children (GTK_CONTAINER (menu->priv->box_items)); 
+
+  for (l = menu_items; l != NULL; l = g_list_next (l))
+  {
+    if (l->data == menu->priv->selected_item)
+      break;
+  }
+  
+  g_debug ("key press event %p",l);
+
+  if (l == NULL)
+    return FALSE;   
+  
+  if (event->keyval == GDK_Up ||
+      event->keyval == GDK_KP_Up)
+  {
+    GList *item = l->prev;
+	  
+    while (item)
+    {
+      if (GTK_IS_MENU_ITEM (item->data) && !GTK_IS_SEPARATOR_MENU_ITEM (item->data))
+      {
+        gtk_item_deselect (GTK_ITEM (l->data));
+        gtk_item_select   (GTK_ITEM (item->data));
+	menu->priv->selected_item = GTK_MENU_ITEM (item->data);
+	break;
+      }
+
+      item = g_list_previous (item);
+    } 
+    return TRUE;
+  }
+  else
+  if (event->keyval == GDK_Down ||
+      event->keyval == GDK_KP_Down)
+  {
+    GList *item = l->next;
+    
+    while  (item)    
+    {	   
+      if (GTK_IS_MENU_ITEM (item->data) && !GTK_IS_SEPARATOR_MENU_ITEM (item->data))
+      { 
+        gtk_item_deselect (GTK_ITEM (l->data));
+        gtk_item_select   (GTK_ITEM (item->data));
+	menu->priv->selected_item = GTK_MENU_ITEM (item->data);
+	break;
+      }
+
+      item = g_list_next (item);
+    }
+    return TRUE;
+  }	  
+  else
+  if (event->keyval == GDK_KP_Enter ||
+      event->keyval == GDK_ISO_Enter)
+  {	  
+    if (menu->priv->selected_item)
+      gtk_menu_item_activate (menu->priv->selected_item);
+  }
+
+  return FALSE;	
+}
+
 static void 
 hildon_desktop_popup_menu_show_controls (HildonDesktopPopupMenu *menu)
 {	
@@ -520,8 +595,9 @@
     {
       gtk_item_select (GTK_ITEM (item));
       menu->priv->selected_item = item;
-      break;
     }
+    else
+      gtk_item_deselect (GTK_ITEM (item));	    
   }
 
   g_list_free (children);

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-08 15:34:00 UTC (rev 11521)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.c	2007-05-08 15:43:16 UTC (rev 11522)
@@ -122,6 +122,28 @@
   popup->priv->attached_widget = NULL;
 }
 
+static gboolean 
+hildon_desktop_popup_window_key_press_event (GtkWidget *widget, GdkEventKey *event)
+{
+  if (GTK_BIN (widget)->child)
+    return gtk_widget_event (GTK_BIN (widget)->child,(GdkEvent *)event);	
+
+  return
+    GTK_WIDGET_CLASS 
+      (hildon_desktop_popup_window_parent_class)->key_press_event (widget, event);	  
+}  
+
+static gboolean 
+hildon_desktop_popup_window_key_press_event_cb (GtkWidget *widget, 
+						GdkEventKey *event,
+						HildonDesktopPopupWindow *popup)
+{
+  if (GTK_BIN (widget)->child)
+    return gtk_widget_event (GTK_BIN (widget)->child,(GdkEvent *)event);
+
+  return FALSE;
+}
+
 static void 
 hildon_desktop_popup_window_class_init (HildonDesktopPopupWindowClass *popup_class)
 {
@@ -136,7 +158,7 @@
   widget_class->motion_notify_event     = hildon_desktop_popup_window_motion_notify;
   widget_class->leave_notify_event      = hildon_desktop_popup_window_leave_notify;
   widget_class->button_release_event    = hildon_desktop_popup_window_button_release_event;
-
+  widget_class->key_press_event 	= hildon_desktop_popup_window_key_press_event;
 	  
   widget_class->realize    = hildon_desktop_popup_window_realize;
   widget_class->unrealize  = hildon_desktop_popup_window_unrealize;
@@ -247,6 +269,11 @@
 		      G_CALLBACK (hildon_desktop_popup_window_composited_leave_notify),
 		      (gpointer)popup);
 
+    g_signal_connect (popup->priv->extra_panes[i],
+		      "key-press-event",
+		      G_CALLBACK (hildon_desktop_popup_window_key_press_event_cb),
+		      (gpointer)popup);
+
     /*FIXME: NO FOCUS FOR ANY WINDOW!!!!!!!!!!!!!!!!!! */
   }
 

Modified: projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm-watched-window.c
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm-watched-window.c	2007-05-08 15:34:00 UTC (rev 11521)
+++ projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm-watched-window.c	2007-05-08 15:43:16 UTC (rev 11522)
@@ -815,6 +815,8 @@
   if(win->gdk_wrapper_win)
     g_object_unref (win->gdk_wrapper_win);
 
+  g_signal_emit_by_name (hdwm, "fullscreen", hd_wm_fullscreen_mode ());
+
   g_free(win);
 }
 

Modified: projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm.c
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm.c	2007-05-08 15:34:00 UTC (rev 11521)
+++ projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm.c	2007-05-08 15:43:16 UTC (rev 11522)
@@ -766,14 +766,14 @@
   if (!member || member[0] == '\0')
     return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 
-  if (strcmp (HOME_LONG_PRESS, member) == 0 && !hd_wm_modal_windows_present())
+  if (g_str_equal (HOME_LONG_PRESS, member) && !hd_wm_modal_windows_present())
   {
     g_signal_emit_by_name (hdwm, "long-key-press");
 
     return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
   }
   
-  if (strcmp (HOME_PRESS, member) == 0 && !hd_wm_modal_windows_present())
+  if (g_str_equal (HOME_PRESS, member) && !hd_wm_modal_windows_present())
   {
     hd_wm_activate (HD_TN_ACTIVATE_MAIN_MENU);
 
@@ -976,7 +976,7 @@
              	     G_TYPE_POINTER);
 
   hdwm_signals[HDWM_SHOW_A_MENU_SIGNAL] = 
-	g_signal_new("show_menu",
+	g_signal_new("show-menu",
 		     G_OBJECT_CLASS_TYPE(object_class),
 		     G_SIGNAL_RUN_LAST,
 		     G_STRUCT_OFFSET (HDWMClass,show_menu),
@@ -1124,6 +1124,8 @@
 	
   memset(hdwm->priv, 0, sizeof(HDWMPrivate));
 
+  hdwm->priv->init_dbus = TRUE;
+  
   /* Check for configurable lowmem values. */
 
   hdwm->priv->lowmem_min_distance
@@ -2295,7 +2297,7 @@
       return;
     case HD_TN_ACTIVATE_MAIN_MENU:
       g_debug  ("activating main menu: signal");
-      g_signal_emit_by_name (hdwm, "show_menu");
+      g_signal_emit_by_name (hdwm, "show-menu");
       return;
     case HD_TN_ACTIVATE_LAST_APP_WINDOW:
       hdwm->priv->has_focus = FALSE;

Modified: projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c	2007-05-08 15:34:00 UTC (rev 11521)
+++ projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c	2007-05-08 15:43:16 UTC (rev 11522)
@@ -30,6 +30,7 @@
 #include "hn-app-pixbuf-anim-blinker.h"
 
 #include <gdk/gdkx.h>
+#include <gdk/gdkkeysyms.h>
 #include <X11/X.h>
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
@@ -93,6 +94,7 @@
   GtkWidget 		   *active_menu_item;
 
   gboolean 		    is_open;
+  gboolean 		    fullscreen;
 
   GtkIconTheme		   *icon_theme;
   GtkWidget		   *icon;
@@ -119,6 +121,7 @@
 static void hd_switcher_menu_changed_stack_cb (HDWM *hdwm, HDEntryInfo *info, HDSwitcherMenu *switcher);
 static void hd_switcher_menu_show_menu_cb (HDWM *hdwm, HDSwitcherMenu *switcher);
 static void hd_switcher_menu_long_press_cb (HDWM *hdwm, HDSwitcherMenu *switcher);
+static void hd_switcher_menu_fullscreen_cb (HDWM *hdwm, gboolean fullscreen, HDSwitcherMenu *switcher);
 
 static void hd_switcher_menu_notification_added_cb (GtkTreeModel   *tree_model,
                                                     GtkTreePath    *path,
@@ -146,7 +149,8 @@
 
   switcher->priv->active_menu_item = NULL;
 
-  switcher->priv->is_open = FALSE;
+  switcher->priv->is_open    = 
+  switcher->priv->fullscreen = FALSE;
 
   switcher->priv->last_iter_added = NULL;
 
@@ -215,6 +219,57 @@
   return retval;
 }
 
+static gboolean  
+hd_switcher_menu_popup_window_keypress_cb (GtkWidget      *widget,
+			                   GdkEventKey    *event,
+			                   HDSwitcherMenu *switcher)
+{
+  HildonDesktopPopupWindow *window =
+    HILDON_DESKTOP_POPUP_WINDOW (widget);
+
+  if (event->keyval == GDK_Left ||
+      event->keyval == GDK_KP_Left ||
+      event->keyval == GDK_Escape)
+  {
+    hildon_desktop_popup_window_popdown (window);
+
+    if (event->keyval == GDK_Escape)
+    {
+      /* pass focus to the last active application */
+      hd_wm_focus_active_window (switcher->hdwm);
+    }
+    else
+    {
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), FALSE);
+
+      GdkWindow *window = gtk_widget_get_parent_window (GTK_WIDGET (switcher));
+      gtk_widget_grab_focus (GTK_WIDGET (switcher));
+      hd_wm_activate_window (HD_TN_ACTIVATE_KEY_FOCUS,window);
+    }
+
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
+static gboolean 
+hd_switcher_menu_switcher_keypress_cb (GtkWidget      *widget,
+				       GdkEventKey    *event,
+				       HDSwitcherMenu *switcher)
+{
+  if (event->keyval == GDK_Right ||
+      event->keyval == GDK_KP_Right)
+  {
+    gtk_toggle_button_set_active
+      (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), TRUE);
+	  
+    g_signal_emit_by_name (SWITCHER_TOGGLE_BUTTON, "toggled");
+  }	  
+
+  return TRUE;
+}
+
 static void 
 hd_switcher_menu_update_open (HildonDesktopPopupWindow *window, HDSwitcherMenu *switcher)
 {
@@ -232,6 +287,9 @@
         hd_switcher_menu_item_set_blinking (HD_SWITCHER_MENU_ITEM (l->data),FALSE);
     }
   }	  
+
+  gtk_toggle_button_set_active 
+    (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), FALSE);
 }	
 
 static GObject *
@@ -298,6 +356,16 @@
   gtk_widget_show (GTK_WIDGET (switcher->priv->menu_applications));
   gtk_widget_show (GTK_WIDGET (switcher->priv->menu_notifications));
 
+  g_signal_connect (switcher->priv->popup_window,
+		    "key-press-event",
+		    G_CALLBACK (hd_switcher_menu_popup_window_keypress_cb),
+		    (gpointer)switcher);
+
+  g_signal_connect (button,
+		    "key-press-event",
+		    G_CALLBACK (hd_switcher_menu_switcher_keypress_cb),
+		    (gpointer)switcher);
+  
   g_signal_connect (switcher,
 		    "style-set",
 		    G_CALLBACK (hd_switcher_menu_style_set),
@@ -349,7 +417,7 @@
                     (gpointer)switcher);
 
   g_signal_connect (switcher->hdwm,
-                    "show_menu",
+                    "show-menu",
                     G_CALLBACK (hd_switcher_menu_show_menu_cb),
                     (gpointer)switcher);
 
@@ -358,6 +426,11 @@
                     G_CALLBACK (hd_switcher_menu_long_press_cb),
                     (gpointer)switcher);
 
+  g_signal_connect (switcher->hdwm,
+                    "fullscreen",
+                    G_CALLBACK (hd_switcher_menu_fullscreen_cb),
+                    (gpointer)switcher);
+
   g_signal_connect_after (switcher->nm,
 		          "row-inserted",
 		          G_CALLBACK (hd_switcher_menu_notification_added_cb),
@@ -382,6 +455,10 @@
   hildon_desktop_popup_menu_add_item
    (switcher->priv->menu_applications, GTK_MENU_ITEM (menu_item));
 
+  hildon_desktop_popup_menu_add_item
+   (switcher->priv->menu_applications, 
+    GTK_MENU_ITEM (gtk_separator_menu_item_new ()));
+  
   return object;
 }
 
@@ -525,53 +602,65 @@
   menu_height = req.height;
   main_height = gdk_screen_get_height (screen);
 
-  if (FALSE)
+  switch (orientation)
   {
-    *x = 0;
-    *y = MAX (0, (main_height - menu_height));
-  }
-  else
-  {
-    switch (orientation)
-    {
-      case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_LEFT:
+    case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_LEFT:
+      if (switcher->priv->fullscreen)
+        *x = 0;
+      else      
         *x = workarea.x;
 
-        if (main_height - button->allocation.y < menu_height)
-          *y = MAX (0, (main_height - menu_height));
-        else
-          *y = button->allocation.y;
-        break;
+      if (main_height - button->allocation.y < menu_height)
+        *y = MAX (0, (main_height - menu_height));
+      else
+        *y = button->allocation.y;
+      break;
 
-      case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_RIGHT:
+    case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_RIGHT:
+      if (switcher->priv->fullscreen)
+        *x = gdk_screen_get_width (screen) - req.width;
+      else      
         *x = workarea.x + workarea.width - req.width;
 
-        if (main_height - button->allocation.y < menu_height)
-          *y = MAX (0, (main_height - menu_height));
-        else
-          *y = button->allocation.y;
-        break;
+      if (main_height - button->allocation.y < menu_height)
+        *y = MAX (0, (main_height - menu_height));
+      else
+        *y = button->allocation.y;
+      break;
 
-      case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_TOP:
-        *x = button->allocation.x;
-        *y = workarea.y;
-        break;
+    case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_TOP:
+      *x = button->allocation.x;
 
-      case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_BOTTOM:
-        *x = button->allocation.x;
-        *y = workarea.y + workarea.height - req.height;
-        break;
+      if (switcher->priv->fullscreen)
+        *y = req.height;
+      else
+	*y = workarea.y;	      
+      break;
 
-      default:
-        g_assert_not_reached ();
-    }
+    case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_BOTTOM:
+      *x = button->allocation.x;
+
+      if (switcher->priv->fullscreen)
+        *y = main_height - req.height;
+      else
+        *y = workarea.y + workarea.height - req.height;	      
+      break;
+
+    default:
+      g_assert_not_reached ();
   }
 }
 
-
 static void 
 hd_switcher_menu_toggled_cb (GtkWidget *button, HDSwitcherMenu *switcher)
 {
+  if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON)))
+  {
+    hildon_desktop_popup_window_popdown (switcher->priv->popup_window);
+    return;
+  }    
+
+	
   hildon_desktop_popup_window_popup 
    (switcher->priv->popup_window,
     hd_switcher_menu_position_func,
@@ -591,7 +680,7 @@
 		    	  GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child);
 
     gtk_container_add (GTK_CONTAINER (SWITCHER_TOGGLE_BUTTON),
-		       GTK_WIDGET (switcher->priv->icon));
+	               GTK_WIDGET (switcher->priv->icon));
     
     g_object_unref (G_OBJECT (switcher->priv->icon)); 
   }	  
@@ -658,9 +747,6 @@
 	    
       HDEntryInfo *entry = child->data;
 
-      g_debug ("Creating new app menu item %s",
-               hd_entry_info_peek_title (entry));
-
       menu_item = hd_switcher_menu_item_new_from_entry_info (entry, TRUE);
 
       hildon_desktop_popup_menu_add_item
@@ -670,6 +756,7 @@
         hildon_desktop_popup_menu_select_item 
           (switcher->priv->menu_applications, GTK_MENU_ITEM (menu_item));		
 
+      switcher->priv->active_menu_item = menu_item;
     }
 
     /* append the separator for this app*/
@@ -784,19 +871,56 @@
 				   HDEntryInfo *info,
 				   HDSwitcherMenu *switcher)
 {
+  GList *children = NULL, *l;
 
+  children =
+    hildon_desktop_popup_menu_get_children (switcher->priv->menu_applications);
+
+  for (l = children; l != NULL; l = g_list_next (l))
+  {
+    if (HD_IS_SWITCHER_MENU_ITEM (l->data))
+    {
+      HDEntryInfo *info =	    
+        hd_switcher_menu_item_get_entry_info (HD_SWITCHER_MENU_ITEM (l->data));
+
+      if (hd_entry_info_is_active (info))
+      {	      
+        hildon_desktop_popup_menu_select_item
+          (switcher->priv->menu_applications, GTK_MENU_ITEM (l->data));
+	
+	switcher->priv->active_menu_item = GTK_WIDGET (l->data);
+      }
+    }	    
+  }	  
 }
 
 static void 
 hd_switcher_menu_show_menu_cb (HDWM *hdwm, HDSwitcherMenu *switcher)
 {
+  gtk_toggle_button_set_active
+    (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), TRUE);
 
+  g_signal_emit_by_name (SWITCHER_TOGGLE_BUTTON, "toggled");
 }
 
 static void 
+hd_switcher_menu_fullscreen_cb (HDWM *hdwm, gboolean fullscreen, HDSwitcherMenu *switcher)
+{
+  switcher->priv->fullscreen = fullscreen;
+}	
+
+static void 
 hd_switcher_menu_long_press_cb (HDWM *hdwm, HDSwitcherMenu *switcher)
 {
-
+  g_debug ("Heeeeeeeereeee");	
+  if (switcher->priv->is_open)
+  {
+    hildon_desktop_popup_menu_activate_item 
+      (switcher->priv->menu_applications, 
+       GTK_MENU_ITEM (switcher->priv->active_menu_item));
+  }
+  else
+    hd_wm_top_desktop ();
 }
 
 static void 
@@ -838,7 +962,15 @@
   hildon_desktop_popup_menu_add_item
     (switcher->priv->menu_notifications, GTK_MENU_ITEM (menu_item));
 
+  hildon_desktop_popup_menu_select_item 
+    (switcher->priv->menu_notifications, GTK_MENU_ITEM (menu_item));	  
+  
   hd_switcher_menu_replace_blinking_icon (switcher, icon);
+
+  hildon_desktop_popup_menu_add_item
+    (switcher->priv->menu_notifications, 
+     GTK_MENU_ITEM (gtk_separator_menu_item_new ()));	 
+
     	    
   switcher->priv->last_iter_added = NULL;
 }
@@ -855,15 +987,22 @@
   
   for (l = children; l != NULL; l = g_list_next (l))
   {
-    gint _id =
-      hd_switcher_menu_item_get_notification_id (HD_SWITCHER_MENU_ITEM (l->data));	    
+    if (!GTK_IS_SEPARATOR_MENU_ITEM (l->data))	  
+    {
+      gint _id =
+        hd_switcher_menu_item_get_notification_id (HD_SWITCHER_MENU_ITEM (l->data));	    
 	  
-    if (_id == id)      
-    {
-      hildon_desktop_popup_menu_remove_item (switcher->priv->menu_notifications,
-	                                     GTK_MENU_ITEM (l->data));
-      break;
-    }	    
+      if (_id == id)      
+      {
+        hildon_desktop_popup_menu_remove_item (switcher->priv->menu_notifications,
+	                                       GTK_MENU_ITEM (l->data));
+
+        if (l->prev && GTK_IS_SEPARATOR_MENU_ITEM (l->prev->data))
+          hildon_desktop_popup_menu_remove_item (switcher->priv->menu_notifications,
+	  				         GTK_MENU_ITEM (l->prev->data));		
+        break;
+      }	    
+    }
   }	  
 
   g_list_free (children);


More information about the maemo-commits mailing list