[maemo-commits] [maemo-commits] r11521 - in projects/haf/trunk/hildon-desktop: . libhildondesktop
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Tue May 8 18:34:03 EEST 2007
- Previous message: [maemo-commits] r11520 - in projects/haf/trunk/hildon-desktop: . libhildondesktop src
- Next message: [maemo-commits] r11522 - in projects/haf/trunk/hildon-desktop: . libhildondesktop libhildonwm src
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: jobi Date: 2007-05-08 18:34:00 +0300 (Tue, 08 May 2007) New Revision: 11521 Modified: projects/haf/trunk/hildon-desktop/ChangeLog projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-home-item.c projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-area.c Log: 2007-05-08 Johan Bilien <johan.bilien at nokia.com> * libhildondesktop/hildon-desktop-home-item.c: - added tap_and_hold handler to revert to normal state when the popup is shown. Does not solve the problem of a tap-n-hold set up on a child widget Modified: projects/haf/trunk/hildon-desktop/ChangeLog =================================================================== --- projects/haf/trunk/hildon-desktop/ChangeLog 2007-05-08 14:05:51 UTC (rev 11520) +++ projects/haf/trunk/hildon-desktop/ChangeLog 2007-05-08 15:34:00 UTC (rev 11521) @@ -1,5 +1,12 @@ 2007-05-08 Johan Bilien <johan.bilien at nokia.com> + * libhildondesktop/hildon-desktop-home-item.c: + - added tap_and_hold handler to revert to normal state + when the popup is shown. Does not solve the problem of a + tap-n-hold set up on a child widget + +2007-05-08 Johan Bilien <johan.bilien at nokia.com> + * libhildondesktop/hildon-home-titlebar.[ch]: - removed all layout mode-related logic * libhildondesktop/hildon-home-window.[ch]: Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-home-item.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-home-item.c 2007-05-08 14:05:51 UTC (rev 11520) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-home-item.c 2007-05-08 15:34:00 UTC (rev 11521) @@ -170,6 +170,9 @@ hildon_desktop_home_item_unmap (GtkWidget *widget); static void +hildon_desktop_home_item_tap_and_hold (GtkWidget *widget); + +static void hildon_desktop_home_item_check_overlap (HildonDesktopHomeItem *applet1, HildonDesktopHomeItem *applet2); @@ -193,7 +196,10 @@ GdkEvent *event, HildonDesktopHomeItem *applet); +static void +hildon_desktop_home_item_snap_to_grid (HildonDesktopHomeItem *item); + GType hildon_desktop_home_item_resize_type_get_type (void) { @@ -270,7 +276,7 @@ widget_class->size_allocate = hildon_desktop_home_item_size_allocate; widget_class->button_press_event = hildon_desktop_home_item_button_press_event; widget_class->button_release_event = hildon_desktop_home_item_button_release_event; - widget_class->visibility_notify_event = + widget_class->visibility_notify_event = hildon_desktop_home_item_visibility_notify_event; widget_class->key_press_event = hildon_desktop_home_item_key_press_event; widget_class->key_release_event = hildon_desktop_home_item_key_release_event; @@ -278,6 +284,7 @@ widget_class->unrealize = hildon_desktop_home_item_unrealize; widget_class->map = hildon_desktop_home_item_map; widget_class->unmap = hildon_desktop_home_item_unmap; + widget_class->tap_and_hold = hildon_desktop_home_item_tap_and_hold; /* We override remove to destroy the applet when it's child is destroyed */ container_class->remove = hildon_desktop_home_item_remove; @@ -306,7 +313,7 @@ g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - + g_signal_new ("background", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST, @@ -316,7 +323,7 @@ g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - + g_signal_new ("foreground", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST, @@ -326,7 +333,7 @@ g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - + g_signal_new ("settings", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_LAST, @@ -349,7 +356,7 @@ g_object_class_install_property (object_class, HILDON_DESKTOP_HOME_ITEM_PROPERTY_RESIZE_TYPE, pspec); - + pspec = g_param_spec_boolean ("layout-mode", "Layout mode", "Whether the applet is in layout " @@ -360,7 +367,7 @@ g_object_class_install_property (object_class, HILDON_DESKTOP_HOME_ITEM_PROPERTY_LAYOUT_MODE, pspec); - + pspec = g_param_spec_boolean ("layout-mode-sucks", "Layout mode sucks", "Whether or not the layout mode " @@ -371,7 +378,7 @@ g_object_class_install_property (object_class, HILDON_DESKTOP_HOME_ITEM_PROPERTY_LAYOUT_MODE_SUCKS, pspec); - + pspec = g_param_spec_int ("minimum-width", "Minimum width", "Minimum width for this applet", @@ -383,7 +390,7 @@ g_object_class_install_property (object_class, HILDON_DESKTOP_HOME_ITEM_PROPERTY_MINIMUM_WIDTH, pspec); - + pspec = g_param_spec_int ("minimum-height", "Minimum height", "Minimum height for this applet", @@ -395,7 +402,7 @@ g_object_class_install_property (object_class, HILDON_DESKTOP_HOME_ITEM_PROPERTY_MINIMUM_HEIGHT, pspec); - + pspec = g_param_spec_int ("state", "state", "state of the applet", @@ -415,18 +422,18 @@ G_PARAM_READABLE); gtk_widget_class_install_style_property (widget_class, pspec); - + pspec = g_param_spec_boxed ("background-borders", "Background borders", "Background border, which shall not be stretched", GTK_TYPE_BORDER, G_PARAM_READABLE); - + gtk_widget_class_install_style_property (widget_class, pspec); /* FIXME: Make these configurable, maybe from the theme */ icon_theme = gtk_icon_theme_get_default(); - applet_class->close_button = + applet_class->close_button = gtk_icon_theme_load_icon (icon_theme, APPLET_CLOSE_BUTTON_ICON, APPLET_CLOSE_BUTTON_WIDTH, @@ -439,8 +446,8 @@ g_error_free (error); error = NULL; } - - applet_class->resize_handle = + + applet_class->resize_handle = gtk_icon_theme_load_icon (icon_theme, APPLET_RESIZE_HANDLE_ICON, APPLET_RESIZE_HANDLE_WIDTH, @@ -453,7 +460,7 @@ g_error_free (error); error = NULL; } - + applet_class->drag_handle = gtk_icon_theme_load_icon (icon_theme, APPLET_DRAG_HANDLE_ICON, @@ -474,19 +481,15 @@ { HildonDesktopHomeItemPriv *priv; HildonDesktopHomeItemClass *klass; -#if 0 - GdkColormap *rgba_colormap; - GdkColor color = {0xFFFF00FF, 0xFFFF, 0x0000, 0xFFFF}; -#endif klass = G_TYPE_INSTANCE_GET_CLASS ((self), HILDON_DESKTOP_TYPE_HOME_ITEM, HildonDesktopHomeItemClass); - + priv = HILDON_DESKTOP_HOME_ITEM_GET_PRIVATE (self); priv->layout_mode = FALSE; - + if (klass->close_button) { g_object_ref (klass->close_button); @@ -498,28 +501,15 @@ g_object_ref (klass->resize_handle); priv->resize_handle = klass->resize_handle; } - + if (klass->drag_handle) { g_object_ref (klass->drag_handle); priv->drag_handle = klass->drag_handle; } -#if 0 - rgba_colormap = gdk_screen_get_rgba_colormap (gdk_screen_get_default ()); - - if (rgba_colormap) - gtk_widget_set_colormap (GTK_WIDGET (self), rgba_colormap); - - - gtk_widget_modify_bg (GTK_WIDGET (self), - GTK_STATE_NORMAL, - &color); -#endif - gtk_widget_add_events (GTK_WIDGET (self), GDK_VISIBILITY_NOTIFY_MASK); - } static void @@ -542,7 +532,7 @@ gdk_window_destroy (priv->resize_handle_window); priv->resize_handle_window = NULL; } - + if (GDK_IS_WINDOW (priv->event_window)) { gdk_window_destroy (priv->event_window); @@ -552,14 +542,14 @@ if (priv->close_button) g_object_unref (priv->close_button); priv->close_button = NULL; - + if (priv->resize_handle) g_object_unref (priv->resize_handle); priv->resize_handle = NULL; if (GTK_OBJECT_CLASS (parent_class)->destroy) GTK_OBJECT_CLASS (parent_class)->destroy (applet); - + } static void @@ -594,7 +584,7 @@ g_object_notify (object, "minimum-height"); priv->minimum_height = g_value_get_int (value); break; - + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -630,7 +620,7 @@ case HILDON_DESKTOP_HOME_ITEM_PROPERTY_STATE: g_value_set_int (value, priv->state); break; - + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -641,7 +631,7 @@ hildon_desktop_home_item_realize (GtkWidget *widget) { HildonDesktopHomeItemPriv *priv; - + priv = HILDON_DESKTOP_HOME_ITEM_GET_PRIVATE (widget); GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); @@ -651,7 +641,7 @@ GdkWindowAttr attributes; gint attributes_mask; GdkWindow *parent_window; - + attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; @@ -675,11 +665,6 @@ &attributes, attributes_mask); - gdk_window_set_events (widget->window, - gdk_window_get_events (widget->window) | - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK); - gdk_window_set_user_data (widget->window, widget); #if 0 @@ -701,7 +686,7 @@ attributes_mask); gdk_window_set_user_data (priv->event_window, widget); } - + if (priv->layout_mode_sucks) { #if 0 @@ -711,10 +696,10 @@ 0, 0); #endif - + if (priv->resize_type != HILDON_DESKTOP_HOME_ITEM_RESIZE_NONE) priv->resize_handle_window = - hildon_desktop_home_item_create_icon_window + hildon_desktop_home_item_create_icon_window (HILDON_DESKTOP_HOME_ITEM (widget), priv->resize_handle, widget->allocation.width - APPLET_RESIZE_HANDLE_WIDTH, @@ -727,7 +712,7 @@ (GdkFilterFunc)window_event_filter, widget); } - + } else @@ -738,10 +723,6 @@ widget->style = gtk_style_attach (widget->style, widget->window); -/* gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, NULL);*/ - - - } @@ -804,7 +785,57 @@ } +static void +hildon_desktop_home_item_tap_and_hold (GtkWidget *widget) +{ + HildonDesktopHomeItemPriv *priv; + priv = HILDON_DESKTOP_HOME_ITEM_GET_PRIVATE (widget); + + /* If we were in moving or resizing, we should stop */ + if (priv->state != HILDON_DESKTOP_HOME_ITEM_STATE_NORMAL) + { + gboolean snap_to_grid = FALSE; + g_source_remove (priv->timeout); + + if (widget->parent) + g_object_get (G_OBJECT (widget->parent), + "snap-to-grid", &snap_to_grid, + NULL); + + if (snap_to_grid) + hildon_desktop_home_item_snap_to_grid (HILDON_DESKTOP_HOME_ITEM (widget)); + + g_source_remove (priv->timeout); + priv->timeout = 0; + priv->state = HILDON_DESKTOP_HOME_ITEM_STATE_NORMAL; + + gdk_pointer_ungrab (GDK_CURRENT_TIME); + + /* We need to update the rectangle */ + gtk_widget_queue_draw (widget); + if (priv->old_allocation.x != widget->allocation.x || + priv->old_allocation.y != widget->allocation.y || + priv->old_allocation.width != widget->allocation.width || + priv->old_allocation.height != widget->allocation.height) + + { + if (HILDON_IS_HOME_AREA (widget->parent)) + g_signal_emit_by_name (G_OBJECT (widget->parent), "layout-changed"); + } + + if (HILDON_IS_HOME_AREA (widget->parent)) + g_signal_emit_by_name (G_OBJECT (widget->parent), + "applet-change-end", + widget); + } + + if (GTK_WIDGET_CLASS (parent_class)->tap_and_hold) + GTK_WIDGET_CLASS (parent_class)->tap_and_hold(widget); +} + + + static gboolean hildon_desktop_home_item_expose (GtkWidget *w, GdkEventExpose *event) { @@ -1284,12 +1315,12 @@ if (priv->minimum_height > 0 && height < priv->minimum_height) height = priv->minimum_height; - if (widget->allocation.x + width > + if (widget->allocation.x + width > fixed->allocation.x + fixed->allocation.width) width = fixed->allocation.x + fixed->allocation.width - widget->allocation.x; - - if (widget->allocation.y + height > + + if (widget->allocation.y + height > fixed->allocation.y + fixed->allocation.height) height = fixed->allocation.y + fixed->allocation.height - widget->allocation.y; @@ -1299,10 +1330,10 @@ if (height != widget->allocation.height) priv->delta_y = height - widget->allocation.height; - + gtk_widget_set_size_request (widget, width, height); } - + used_to_overlap = priv->overlaps; priv->overlaps = FALSE; gtk_container_foreach (GTK_CONTAINER (GTK_WIDGET (applet)->parent), @@ -1355,7 +1386,7 @@ x = widget->allocation.x - parent->allocation.x; y = widget->allocation.y - parent->allocation.y; - + switch (priv->state) { case HILDON_DESKTOP_HOME_ITEM_STATE_MOVING: @@ -1383,19 +1414,19 @@ if (priv->delta_x || priv->delta_y) { x_grid = x + widget->allocation.width; - + if (priv->resize_type == HILDON_DESKTOP_HOME_ITEM_RESIZE_HORIZONTAL || priv->resize_type == HILDON_DESKTOP_HOME_ITEM_RESIZE_BOTH) { x_grid -= x_grid % GRID_SIZE; - if (priv->delta_x > 0 + if (priv->delta_x > 0 && !(x_grid + GRID_SIZE > parent->allocation.width)) x_grid += GRID_SIZE; } - + y_grid = y + widget->allocation.height; - + if (priv->resize_type == HILDON_DESKTOP_HOME_ITEM_RESIZE_VERTICAL || priv->resize_type == HILDON_DESKTOP_HOME_ITEM_RESIZE_BOTH) { @@ -1406,7 +1437,7 @@ y_grid += GRID_SIZE; } - gtk_widget_set_size_request (widget, x_grid - x, y_grid - y); + gtk_widget_set_size_request (widget, x_grid - x, y_grid - y); } break; @@ -1540,7 +1571,6 @@ g_signal_emit_by_name (G_OBJECT (applet->parent), "layout-changed"); } - g_debug ("Will emit applet-change-end"); if (HILDON_IS_HOME_AREA (applet->parent)) g_signal_emit_by_name (G_OBJECT (applet->parent), "applet-change-end", Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-area.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-area.c 2007-05-08 14:05:51 UTC (rev 11520) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-area.c 2007-05-08 15:34:00 UTC (rev 11521) @@ -1445,11 +1445,6 @@ child_data->damage = XDamageCreate (GDK_DISPLAY (), child_data->window, XDamageReportNonEmpty); - - gdk_window_add_filter (child->window, - (GdkFilterFunc) - hildon_home_area_child_window_filter, - child_data->widget); } } @@ -1470,6 +1465,11 @@ if (data->picture == None) hildon_home_area_create_child_data (HILDON_HOME_AREA (area), child); + gdk_window_add_filter (child->window, + (GdkFilterFunc) + hildon_home_area_child_window_filter, + data->widget); + if (data->alpha_mask == None) hildon_home_area_child_build_alpha_mask (area, child); }
- Previous message: [maemo-commits] r11520 - in projects/haf/trunk/hildon-desktop: . libhildondesktop src
- Next message: [maemo-commits] r11522 - in projects/haf/trunk/hildon-desktop: . libhildondesktop libhildonwm src
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]