[maemo-commits] [maemo-commits] r12398 - in projects/haf/trunk/hildon-desktop: . libhildondesktop
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Tue Jun 19 20:45:17 EEST 2007
- Previous message: [maemo-commits] r12397 - in projects/haf/trunk/hildon-home-webshortcut: . plugin
- Next message: [maemo-commits] r12399 - in projects/haf/trunk/hildon-fm: . debian hildon-fm
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: moimart Date: 2007-06-19 20:45:15 +0300 (Tue, 19 Jun 2007) New Revision: 12398 Modified: projects/haf/trunk/hildon-desktop/ChangeLog projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.c Log: 2007-06-19 Moises Martinez <moises.martinez at nokia.com> * libhildondesktop/hildon-desktop-popup-window.c: - ifdef MAEMO_CHANGES use _TOPLEVEL instead of _POPUP - Destroy transfer window for grabing when popping down. - Set transiency for NULL when popping down. - Don't popdown if not open. - Removed fake button press/release event in _release_event handler. TBD. - Fixes: NB#60558 * ChangeLog updated. Modified: projects/haf/trunk/hildon-desktop/ChangeLog =================================================================== --- projects/haf/trunk/hildon-desktop/ChangeLog 2007-06-19 16:22:56 UTC (rev 12397) +++ projects/haf/trunk/hildon-desktop/ChangeLog 2007-06-19 17:45:15 UTC (rev 12398) @@ -1,3 +1,14 @@ +2007-06-19 Moises Martinez <moises.martinez at nokia.com> + + * libhildondesktop/hildon-desktop-popup-window.c: + - ifdef MAEMO_CHANGES use _TOPLEVEL instead of _POPUP + - Destroy transfer window for grabing when popping down. + - Set transiency for NULL when popping down. + - Don't popdown if not open. + - Removed fake button press/release event in _release_event handler. + TBD. + - Fixes: NB#60558 + 2007-06-19 Johan Bilien <johan.bilien at nokia.com> * libhildondesktop/hildon-home-window.c: Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.c 2007-06-19 16:22:56 UTC (rev 12397) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.c 2007-06-19 17:45:15 UTC (rev 12398) @@ -33,9 +33,11 @@ #include <config.h> #endif +#ifdef MAEMO_CHANGES #ifdef HAVE_XTEST #include <X11/extensions/XTest.h> #endif +#endif #define HILDON_DESKTOP_POPUP_WINDOW_GET_PRIVATE(object) \ (G_TYPE_INSTANCE_GET_PRIVATE ((object), HILDON_DESKTOP_TYPE_POPUP_WINDOW, HildonDesktopPopupWindowPrivate)) @@ -82,11 +84,11 @@ static gboolean hildon_desktop_popup_window_motion_notify (GtkWidget *widget, GdkEventMotion *event); static gboolean hildon_desktop_popup_window_leave_notify (GtkWidget *widget, GdkEventCrossing *event); - +#ifdef MAEMO_CHANGES static gboolean hildon_desktop_popup_window_visibility_notify (GtkWidget *widget, GdkEventVisibility *event, gpointer data); - +#endif static gboolean hildon_desktop_popup_window_composited_leave_notify (GtkWidget *widget, GdkEventCrossing *event, HildonDesktopPopupWindow *popup); @@ -98,9 +100,11 @@ static gboolean popup_grab_on_window (GdkWindow *window, guint32 activate_time, gboolean grab_keyboard); static gboolean hildon_desktop_popup_window_button_release_event (GtkWidget *widget, GdkEventButton *event); +#ifdef MAEMO_CHANGES #ifdef HAVE_XTEST static void hildon_desktop_popup_menu_fake_button_event (GdkEventButton *event, gboolean press); #endif +#endif struct _HildonDesktopPopupWindowPrivate { GtkWidget **extra_panes; @@ -112,6 +116,7 @@ gpointer position_func_data; gboolean have_xgrab; + gboolean open; GtkWidget *pane_with_grab; GtkWidget *attached_widget; @@ -125,6 +130,7 @@ popup->priv->extra_panes = NULL; popup->priv->n_extra_panes = 0; + popup->priv->open = popup->priv->have_xgrab = FALSE; popup->priv->pane_with_grab = @@ -244,24 +250,38 @@ params); popup = HILDON_DESKTOP_POPUP_WINDOW (object); - +#ifndef MAEMO_CHANGES GTK_WINDOW (popup)->type = GTK_WINDOW_POPUP; +#else + GTK_WINDOW (popup)->type = GTK_WINDOW_TOPLEVEL; + gtk_window_set_decorated (GTK_WINDOW (popup), FALSE); + gtk_widget_add_events (GTK_WIDGET (popup), GDK_VISIBILITY_NOTIFY_MASK); +#endif + gtk_window_set_type_hint (GTK_WINDOW (popup), GDK_WINDOW_TYPE_HINT_MENU); +#ifdef MAEMO_CHANGES g_signal_connect (popup, "visibility-notify-event", G_CALLBACK (hildon_desktop_popup_window_visibility_notify), NULL); - +#endif gtk_widget_push_composite_child (); popup->priv->extra_panes = g_new0 (GtkWidget *, popup->priv->n_extra_panes); for (i=0; i < popup->priv->n_extra_panes; i++) { +#ifndef MAEMO_CHANGES popup->priv->extra_panes[i] = gtk_window_new (GTK_WINDOW_POPUP); +#else + popup->priv->extra_panes[i] = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_decorated (GTK_WINDOW (popup->priv->extra_panes[i]), FALSE); + + gtk_widget_add_events (GTK_WIDGET (popup), GDK_VISIBILITY_NOTIFY_MASK); +#endif g_object_ref (G_OBJECT (popup->priv->extra_panes[i])); gtk_object_sink (GTK_OBJECT (popup->priv->extra_panes[i])); @@ -339,7 +359,10 @@ GTK_WIDGET_CLASS (hildon_desktop_popup_window_parent_class)->show (widget); for (i=0; i < popup->priv->n_extra_panes; i++) - gtk_widget_show (popup->priv->extra_panes[i]); + { + if (popup->priv->extra_panes[i]->requisition.height > 1) + gtk_widget_show (popup->priv->extra_panes[i]); + } } static void @@ -522,7 +545,7 @@ return TRUE; } - +#ifdef MAEMO_CHANGES static gboolean hildon_desktop_popup_window_visibility_notify (GtkWidget *widget, GdkEventVisibility *event, @@ -567,7 +590,7 @@ type = gdk_window_get_type_hint (win); if (!gdk_error_trap_pop () && - /*type != GDK_WINDOW_TYPE_HINT_MESSAGE && */ + type != GDK_WINDOW_TYPE_HINT_NOTIFICATION && type != GDK_WINDOW_TYPE_HINT_MENU) { /* A non-message and non-menu window above us; close. */ @@ -590,7 +613,7 @@ return FALSE; } - +#endif static gboolean hildon_desktop_popup_window_composited_button_release (GtkWidget *widget, GdkEventButton *event, @@ -614,12 +637,12 @@ { w = GTK_WIDGET (popup)->allocation.width; h = GTK_WIDGET (popup)->allocation.height; - + gtk_widget_get_pointer (widget, &x, &y); if ((x >= 0) && (x <= w) && (y >= 0) && (y <= h)) in_window_area = TRUE; - + for (i=0; i < popup->priv->n_extra_panes; i++) { if (widget != popup->priv->extra_panes[i]) @@ -642,6 +665,7 @@ if (!in_panes_area || in_window_area) { hildon_desktop_popup_window_popdown (popup); +#ifdef MAEMO_CHANGES #ifdef HAVE_XTEST if (popup->priv->attached_widget) { @@ -657,6 +681,7 @@ } } #endif +#endif } return TRUE; @@ -696,11 +721,12 @@ break; } } - +g_debug ("event %p skdfjhskdjfh in_w %d",event,in_window_area); /* Event outside of popup or in button area, close in clean way */ - if (!in_panes_area || in_window_area) + if (!in_panes_area || !in_window_area) { hildon_desktop_popup_window_popdown (popup); +#ifdef MAEMO_CHANGES #ifdef HAVE_XTEST if (popup->priv->attached_widget) { @@ -711,11 +737,12 @@ if ((x < 0) || (x > w) || (y < 0) || (y > h)) { - hildon_desktop_popup_menu_fake_button_event (event, TRUE); - hildon_desktop_popup_menu_fake_button_event (event, FALSE); + /*hildon_desktop_popup_menu_fake_button_event (event, TRUE); + hildon_desktop_popup_menu_fake_button_event (event, FALSE);*/ } } #endif +#endif } return TRUE; } @@ -885,6 +912,18 @@ return window; } +static void +popup_window_grab_transfer_window_destroy (HildonDesktopPopupWindow *popup) +{ + GdkWindow *window = g_object_get_data (G_OBJECT (popup), "popup-window-transfer-window"); + if (window) + { + gdk_window_set_user_data (window, NULL); + gdk_window_destroy (window); + g_object_set_data (G_OBJECT (popup), "popup-window-transfer-window", NULL); + } +} + static gboolean popup_grab_on_window (GdkWindow *window, guint32 activate_time, @@ -1048,21 +1087,39 @@ gtk_grab_add (GTK_WIDGET (popup)); g_signal_emit_by_name (popup, "popup-window"); + + popup->priv->open = TRUE; } void hildon_desktop_popup_window_popdown (HildonDesktopPopupWindow *popup) { gint i; - + + if (!popup->priv->open) + return; + gtk_widget_hide (GTK_WIDGET (popup)); + + if (popup->priv->have_xgrab) + { + gtk_grab_remove (GTK_WIDGET (popup)); + gtk_window_set_transient_for (GTK_WINDOW (popup), NULL); + } + else + { + for (i=0; i < popup->priv->n_extra_panes; i++) + { + gtk_grab_remove (popup->priv->extra_panes[i]); + gtk_window_set_transient_for (GTK_WINDOW (popup->priv->extra_panes[i]), NULL); + } + } - gtk_grab_remove (GTK_WIDGET (popup)); + popup_window_grab_transfer_window_destroy (popup); - for (i=0; i < popup->priv->n_extra_panes; i++) - gtk_grab_remove (popup->priv->extra_panes[i]); + g_signal_emit_by_name (popup, "popdown-window"); - g_signal_emit_by_name (popup, "popdown-window"); + popup->priv->open = FALSE; } void
- Previous message: [maemo-commits] r12397 - in projects/haf/trunk/hildon-home-webshortcut: . plugin
- Next message: [maemo-commits] r12399 - in projects/haf/trunk/hildon-fm: . debian hildon-fm
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]