[maemo-commits] [maemo-commits] r9547 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . gtk
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Thu Feb 1 20:03:58 EET 2007
- Previous message: [maemo-commits] r9546 - in projects/haf/trunk/hildon-home-webshortcut: . plugin
- Next message: [maemo-commits] r9548 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . gtk
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: mitch Date: 2007-02-01 20:03:56 +0200 (Thu, 01 Feb 2007) New Revision: 9547 Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkmenu.c Log: 2007-02-01 Michael Natterer <mitch at imendio.com> * gtk/gtkmenu.c: port over the remaining context_menu stuff. Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-02-01 16:39:07 UTC (rev 9546) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-02-01 18:03:56 UTC (rev 9547) @@ -1,5 +1,9 @@ 2007-02-01 Michael Natterer <mitch at imendio.com> + * gtk/gtkmenu.c: port over the remaining context_menu stuff. + +2007-02-01 Michael Natterer <mitch at imendio.com> + Merge from upstream trunk: * gtk/gtkmenu.c (gtk_menu_button_press) Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkmenu.c =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkmenu.c 2007-02-01 16:39:07 UTC (rev 9546) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkmenu.c 2007-02-01 18:03:56 UTC (rev 9547) @@ -27,6 +27,10 @@ #define GTK_MENU_INTERNALS #include <config.h> #include <string.h> /* memset */ +#ifdef MAEMO_CHANGES +#include <math.h> +#include <stdlib.h> +#endif /* MAEMO_CHANGES */ #include "gdk/gdkkeysyms.h" #include "gtkaccellabel.h" #include "gtkaccelmap.h" @@ -2659,7 +2663,63 @@ GTK_WIDGET_CLASS (gtk_menu_parent_class)->show (widget); } +#ifdef MAEMO_CHANGES +static GtkWidget * +find_active_menu_item (GdkEventButton *event) +{ + GtkWidget *menu_item; + + menu_item = gtk_get_event_widget ((GdkEvent*) event); + while (menu_item && !GTK_IS_MENU_ITEM (menu_item)) + menu_item = menu_item->parent; + + return menu_item; +} + static gboolean +pointer_in_menu_tree (GtkWidget *widget) +{ + GtkMenuShell *mshell; + gint width, height, x, y; + + mshell = GTK_MENU_SHELL (widget); + + gdk_window_get_pointer (widget->window, &x, &y, NULL); + gdk_drawable_get_size (widget->window, &width, &height); + + if ((x <= width) && (x >= 0) && (y <= height) && (y >= 0)) + return TRUE; + + if ((mshell->parent_menu_shell != NULL) && + GTK_IS_MENU (mshell->parent_menu_shell)) + return pointer_in_menu_tree (mshell->parent_menu_shell); + + return FALSE; +} + +static gint +distance_traveled (GtkWidget *widget) +{ + GtkMenuPrivate *priv; + GdkScreen *screen; + GdkDisplay *display; + gint x, y, dx, dy; + + priv = gtk_menu_get_private (GTK_MENU (widget)); + + screen = gtk_widget_get_screen (widget); + display = gdk_screen_get_display (screen); + + gdk_display_get_pointer (display, NULL, &x, &y, NULL); + + dx = (priv->popup_pointer_x - x); + dy = (priv->popup_pointer_y - y); + + return abs ((int) sqrt ((double) (dx * dx + dy * dy))); +} +#endif /* MAEMO_CHANGES */ + +static gboolean gtk_menu_button_scroll (GtkMenu *menu, GdkEventButton *event) { @@ -2696,6 +2756,17 @@ if (gtk_menu_button_scroll (GTK_MENU (widget), event)) return TRUE; +#ifdef MAEMO_CHANGES + if (!find_active_menu_item (event)) + { + /* Don't pass down to menu shell if a non-menuitem part of the menu + * was clicked. + */ + if (pointer_in_menu_tree (widget)) + return TRUE; + } +#endif /* MAEMO_CHANGES */ + return GTK_WIDGET_CLASS (gtk_menu_parent_class)->button_press_event (widget, event); } @@ -2719,6 +2790,35 @@ if (gtk_menu_button_scroll (GTK_MENU (widget), event)) return TRUE; +#ifdef MAEMO_CHANGES + if (!find_active_menu_item (event)) + { + if (priv->context_menu && + (priv->popup_pointer_x >= 0) && + (priv->popup_pointer_y >= 0)) + { + gint distance; + + distance = distance_traveled (widget); + + priv->popup_pointer_x = -1; + priv->popup_pointer_y = -1; + + /* Don't popdown if we traveled less than 20px since popup + * point, as per the Nokia 770 specs. + */ + if (distance < 20) + return TRUE; + } + + /* Don't pass down to menu shell if a non-menuitem part of the menu + * was clicked. + */ + if (pointer_in_menu_tree (widget)) + return TRUE; + } +#endif /* MAEMO_CHANGES */ + return GTK_WIDGET_CLASS (gtk_menu_parent_class)->button_release_event (widget, event); } @@ -2958,14 +3058,39 @@ menu_item = gtk_get_event_widget ((GdkEvent*) event); if (!GTK_IS_MENU_ITEM (menu_item) || !GTK_IS_MENU (menu_item->parent)) +#ifdef MAEMO_CHANGES + { + GtkMenuPrivate *priv = gtk_menu_get_private (GTK_MENU (widget)); + + if (priv->context_menu) + { + /* Context menu mode. If we dragged out of the menu, close + * the menu, as by the specs. + */ + if (!pointer_in_menu_tree (widget) && + (distance_traveled (widget) >= 20) && + (event->state & GDK_BUTTON1_MASK)) + { + gtk_menu_shell_deactivate (GTK_MENU_SHELL (widget)); + + return TRUE; + } + } + + return FALSE; + } +#else return FALSE; +#endif /* MAEMO_CHANGES */ menu_shell = GTK_MENU_SHELL (menu_item->parent); menu = GTK_MENU (menu_shell); +#ifndef MAEMO_CHANGES if (definitely_within_item (menu_item, event->x, event->y)) menu_shell->activate_time = 0; - +#endif /* !MAEMO_CHANGES */ + need_enter = (menu->navigation_region != NULL || menu_shell->ignore_enter); /* Check to see if we are within an active submenu's navigation region @@ -4059,7 +4184,6 @@ { GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (menu)); gboolean touchscreen_mode; - gboolean was_scrolling; gtk_menu_remove_scroll_timeout (menu);
- Previous message: [maemo-commits] r9546 - in projects/haf/trunk/hildon-home-webshortcut: . plugin
- Next message: [maemo-commits] r9548 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . gtk
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]