[maemo-commits] [maemo-commits] r12383 - in projects/haf/trunk/hildon-desktop: . libhildondesktop src
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Tue Jun 19 15:02:28 EEST 2007
- Previous message: [maemo-commits] r12382 - in projects/haf/trunk/hildon-1: . examples src
- Next message: [maemo-commits] r12384 - in projects/haf/trunk/hildon-desktop: . data src
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: jobi Date: 2007-06-19 15:02:21 +0300 (Tue, 19 Jun 2007) New Revision: 12383 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 projects/haf/trunk/hildon-desktop/src/hd-home-window.c Log: 2007-06-19 Johan Bilien <johan.bilien at nokia.com> * libhildondesktop/hildon-desktop-home-item.c: - added _set_state to centralize the setting of the dragable state - use motion_notify instead of a timeout for the dragging * src/hd-home-window.c, libhildondesktop/hildon-home-area.c: - removed annoying debug messages Modified: projects/haf/trunk/hildon-desktop/ChangeLog =================================================================== --- projects/haf/trunk/hildon-desktop/ChangeLog 2007-06-19 12:00:38 UTC (rev 12382) +++ projects/haf/trunk/hildon-desktop/ChangeLog 2007-06-19 12:02:21 UTC (rev 12383) @@ -1,7 +1,15 @@ +2007-06-19 Johan Bilien <johan.bilien at nokia.com> + + * libhildondesktop/hildon-desktop-home-item.c: + - added _set_state to centralize the setting of the dragable state + - use motion_notify instead of a timeout for the dragging + * src/hd-home-window.c, libhildondesktop/hildon-home-area.c: + - removed annoying debug messages + 2007-06-19 Moises Martinez <moises.martinez at nokia.com> * src/hn-app-switcher.c: update _NET_WM_ICON_GEOMETRY when orientation - changes. Fixes: NB56505. + changes. Fixes: NB#56505. 2007-06-18 Johan Bilien <johan.bilien at nokia.com> Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-home-item.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-home-item.c 2007-06-19 12:00:38 UTC (rev 12382) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-home-item.c 2007-06-19 12:02:21 UTC (rev 12383) @@ -54,7 +54,6 @@ #define GRID_SIZE 10 -#define DRAG_UPDATE_TIMEOUT 50 #define LAYOUT_MODE_HIGHLIGHT_WIDTH 4 #define HILDON_DESKTOP_HOME_ITEM_GET_PRIVATE(obj) \ @@ -101,7 +100,6 @@ guint y_offset; gint delta_x; gint delta_y; - guint timeout; gboolean overlaps; GtkAllocation old_allocation; @@ -159,6 +157,10 @@ hildon_desktop_home_item_key_release_event (GtkWidget *applet, GdkEventKey *event); +static gboolean +hildon_desktop_home_item_motion_notify (GtkWidget *widget, + GdkEventMotion *event); + static void hildon_desktop_home_item_realize (GtkWidget *widget); @@ -201,7 +203,12 @@ static void hildon_desktop_home_item_snap_to_grid (HildonDesktopHomeItem *item); +static void +hildon_desktop_home_item_set_state (HildonDesktopHomeItem *item, + HildonDesktopHomeItemState state, + GdkEventButton *button); + GType hildon_desktop_home_item_resize_type_get_type (void) { @@ -282,6 +289,7 @@ 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; + widget_class->motion_notify_event = hildon_desktop_home_item_motion_notify; widget_class->realize = hildon_desktop_home_item_realize; widget_class->unrealize = hildon_desktop_home_item_unrealize; widget_class->map = hildon_desktop_home_item_map; @@ -408,10 +416,10 @@ pspec = g_param_spec_int ("state", "state", "state of the applet", - -1, - G_MAXINT, - 0, - G_PARAM_READABLE); + HILDON_DESKTOP_HOME_ITEM_STATE_NORMAL, + HILDON_DESKTOP_HOME_ITEM_STATE_MOVING, + HILDON_DESKTOP_HOME_ITEM_STATE_RESIZING, + G_PARAM_READWRITE); g_object_class_install_property (object_class, HILDON_DESKTOP_HOME_ITEM_PROPERTY_STATE, @@ -481,9 +489,6 @@ HildonDesktopHomeItemPriv *priv; priv = HILDON_DESKTOP_HOME_ITEM_GET_PRIVATE (HILDON_DESKTOP_HOME_ITEM (applet)); - if (priv->timeout) - g_source_remove (priv->timeout); - if (GDK_IS_WINDOW (priv->close_button_window)) { gdk_window_destroy (priv->close_button_window); @@ -521,18 +526,21 @@ const GValue *value, GParamSpec *pspec) { - HildonDesktopHomeItemPriv *priv; - priv = HILDON_DESKTOP_HOME_ITEM_GET_PRIVATE (HILDON_DESKTOP_HOME_ITEM (object)); + HildonDesktopHomeItem *item; + HildonDesktopHomeItemPriv *priv; + item = HILDON_DESKTOP_HOME_ITEM (object); + priv = HILDON_DESKTOP_HOME_ITEM_GET_PRIVATE (item); + switch (property_id) { case HILDON_DESKTOP_HOME_ITEM_PROPERTY_RESIZE_TYPE: - hildon_desktop_home_item_set_resize_type (HILDON_DESKTOP_HOME_ITEM (object), - g_value_get_enum (value)); + hildon_desktop_home_item_set_resize_type (item, + g_value_get_enum (value)); break; case HILDON_DESKTOP_HOME_ITEM_PROPERTY_LAYOUT_MODE: - hildon_desktop_home_item_set_layout_mode (HILDON_DESKTOP_HOME_ITEM (object), - g_value_get_boolean (value)); + hildon_desktop_home_item_set_layout_mode (item, + g_value_get_boolean (value)); break; case HILDON_DESKTOP_HOME_ITEM_PROPERTY_LAYOUT_MODE_SUCKS: priv->layout_mode_sucks = g_value_get_boolean (value); @@ -547,6 +555,11 @@ g_object_notify (object, "minimum-height"); priv->minimum_height = g_value_get_int (value); break; + case HILDON_DESKTOP_HOME_ITEM_PROPERTY_STATE: + hildon_desktop_home_item_set_state (item, + g_value_get_int (value), + NULL); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -612,6 +625,7 @@ attributes.window_type = GDK_WINDOW_CHILD; attributes.event_mask = gtk_widget_get_events (widget) | GDK_BUTTON_MOTION_MASK + | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_EXPOSURE_MASK @@ -759,7 +773,6 @@ 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), @@ -769,8 +782,6 @@ 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; g_object_notify (G_OBJECT (widget), "state"); @@ -1175,24 +1186,24 @@ static gboolean -hildon_desktop_home_item_drag_update (HildonDesktopHomeItem *applet) +hildon_desktop_home_item_motion_notify (GtkWidget *widget, + GdkEventMotion *event) { HildonDesktopHomeItemPriv *priv; gint x_applet, y_applet; GdkModifierType mod; GtkWidget *area; - GtkWidget *widget; gboolean used_to_overlap; - widget = GTK_WIDGET (applet); - if (!widget->parent) return FALSE; - priv = HILDON_DESKTOP_HOME_ITEM_GET_PRIVATE (applet); + priv = HILDON_DESKTOP_HOME_ITEM_GET_PRIVATE (widget); + if (priv->state == HILDON_DESKTOP_HOME_ITEM_STATE_NORMAL) + return FALSE; + area = widget->parent; - gdk_window_get_pointer (area->window, &x_applet, &y_applet, &mod); if (priv->state == HILDON_DESKTOP_HOME_ITEM_STATE_MOVING) @@ -1274,13 +1285,12 @@ used_to_overlap = priv->overlaps; priv->overlaps = FALSE; - gtk_container_foreach (GTK_CONTAINER (GTK_WIDGET (applet)->parent), + gtk_container_foreach (GTK_CONTAINER (widget->parent), (GtkCallback)hildon_desktop_home_item_check_overlap, - applet); + widget); if (used_to_overlap != priv->overlaps) gtk_widget_queue_draw (widget); - return TRUE; } @@ -1413,114 +1423,50 @@ return TRUE; } - if (!priv->timeout) + if (priv->state == HILDON_DESKTOP_HOME_ITEM_STATE_NORMAL) { - if (HILDON_IS_HOME_AREA (w->parent)) - g_signal_emit_by_name (G_OBJECT (w->parent), - "applet-change-start", - w); - gdk_window_raise (w->window); - gdk_pointer_grab (event->window, - FALSE, - GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK, - NULL, - NULL, - event->time); - - priv->old_allocation = w->allocation; - priv->delta_x = 0; - priv->delta_y = 0; - if (event->window == priv->resize_handle_window) { - gint window_x, window_y; - gint window_width, window_height; - - gdk_window_get_position (priv->resize_handle_window, - &window_x, - &window_y); - gdk_drawable_get_size (GDK_DRAWABLE (priv->resize_handle_window), - &window_width, - &window_height); - - priv->x_offset = w->allocation.width - - window_x - event->x; - priv->y_offset = w->allocation.height - - window_y - event->y; - priv->state = HILDON_DESKTOP_HOME_ITEM_STATE_RESIZING; + hildon_desktop_home_item_set_state (HILDON_DESKTOP_HOME_ITEM (w), + HILDON_DESKTOP_HOME_ITEM_STATE_MOVING, + event); } else { - priv->x_offset = event->x; - priv->y_offset = event->y; - priv->state = HILDON_DESKTOP_HOME_ITEM_STATE_MOVING; + hildon_desktop_home_item_set_state (HILDON_DESKTOP_HOME_ITEM (w), + HILDON_DESKTOP_HOME_ITEM_STATE_RESIZING, + event); } - g_object_notify (G_OBJECT (w), "state"); - priv->timeout = g_timeout_add (DRAG_UPDATE_TIMEOUT, - (GSourceFunc) - hildon_desktop_home_item_drag_update, - w); - } return TRUE; } static gboolean -hildon_desktop_home_item_button_release_event (GtkWidget *applet, - GdkEventButton *event) +hildon_desktop_home_item_button_release_event (GtkWidget *widget, + GdkEventButton *event) { HildonDesktopHomeItemPriv *priv; - priv = HILDON_DESKTOP_HOME_ITEM_GET_PRIVATE (applet); + priv = HILDON_DESKTOP_HOME_ITEM_GET_PRIVATE (widget); if (!priv->layout_mode_sucks && !priv->layout_mode) { if (GTK_WIDGET_CLASS (parent_class)->button_release_event) - return GTK_WIDGET_CLASS (parent_class)->button_release_event (applet, event); + return GTK_WIDGET_CLASS (parent_class)->button_release_event (widget, + event); else return FALSE; } - if (priv->timeout) - { - gboolean snap_to_grid = FALSE; + if (priv->state != HILDON_DESKTOP_HOME_ITEM_STATE_NORMAL) + hildon_desktop_home_item_set_state (HILDON_DESKTOP_HOME_ITEM (widget), + HILDON_DESKTOP_HOME_ITEM_STATE_NORMAL, + event); - if (applet->parent) - g_object_get (G_OBJECT (applet->parent), - "snap-to-grid", &snap_to_grid, - NULL); - if (snap_to_grid) - hildon_desktop_home_item_snap_to_grid (HILDON_DESKTOP_HOME_ITEM (applet)); - - g_source_remove (priv->timeout); - priv->timeout = 0; - priv->state = HILDON_DESKTOP_HOME_ITEM_STATE_NORMAL; - g_object_notify (G_OBJECT (applet), "state"); - - gdk_pointer_ungrab (event->time); - - /* We need to update the rectangle */ - gtk_widget_queue_draw (GTK_WIDGET (applet)); - if (priv->old_allocation.x != applet->allocation.x || - priv->old_allocation.y != applet->allocation.y || - priv->old_allocation.width != applet->allocation.width || - priv->old_allocation.height != applet->allocation.height) - - { - if (HILDON_IS_HOME_AREA (applet->parent)) - g_signal_emit_by_name (G_OBJECT (applet->parent), "layout-changed"); - } - - if (HILDON_IS_HOME_AREA (applet->parent)) - g_signal_emit_by_name (G_OBJECT (applet->parent), - "applet-change-end", - applet); - } - return TRUE; } @@ -1556,7 +1502,125 @@ return FALSE; } +static void +hildon_desktop_home_item_set_state (HildonDesktopHomeItem *item, + HildonDesktopHomeItemState state, + GdkEventButton *event) +{ + HildonDesktopHomeItemPriv *priv; + GtkWidget *widget; + priv = HILDON_DESKTOP_HOME_ITEM_GET_PRIVATE (item); + widget = GTK_WIDGET (item); + + if (state == HILDON_DESKTOP_HOME_ITEM_STATE_NORMAL) + { + gboolean snap_to_grid = FALSE; + + 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 (item); + + 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); + + priv->state = HILDON_DESKTOP_HOME_ITEM_STATE_NORMAL; + } + + else + { + if (HILDON_IS_HOME_AREA (widget->parent)) + g_signal_emit_by_name (G_OBJECT (widget->parent), + "applet-change-start", + widget); + + if (state == HILDON_DESKTOP_HOME_ITEM_STATE_MOVING) + { + gint window_x, window_y; + gint window_width, window_height; + + if (event) + { + gdk_window_raise (widget->window); + gdk_pointer_grab (event->window, + FALSE, + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_BUTTON_MOTION_MASK | + GDK_POINTER_MOTION_HINT_MASK, + NULL, + NULL, + event->time); + + gdk_window_get_position (priv->resize_handle_window, + &window_x, + &window_y); + gdk_drawable_get_size (GDK_DRAWABLE (priv->resize_handle_window), + &window_width, + &window_height); + + priv->x_offset = widget->allocation.width - + window_x - event->x; + priv->y_offset = widget->allocation.height - + window_y - event->y; + } + + priv->state = HILDON_DESKTOP_HOME_ITEM_STATE_RESIZING; + } + + else + { + if (event) + { + gdk_window_raise (widget->window); + gdk_pointer_grab (event->window, + FALSE, + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_BUTTON_MOTION_MASK | + GDK_POINTER_MOTION_HINT_MASK, + NULL, + NULL, + event->time); + + priv->old_allocation = widget->allocation; + priv->delta_x = 0; + priv->delta_y = 0; + priv->x_offset = event->x; + priv->y_offset = event->y; + } + priv->state = HILDON_DESKTOP_HOME_ITEM_STATE_MOVING; + } + + + } + + g_object_notify (G_OBJECT (widget), "state"); +} + + + /********************/ /* public functions */ /********************/ Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-area.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-area.c 2007-06-19 12:00:38 UTC (rev 12382) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-home-area.c 2007-06-19 12:02:21 UTC (rev 12383) @@ -1300,8 +1300,6 @@ "state", &state, NULL); - g_debug ("state changed to %i", state); - child_data->state = state; } Modified: projects/haf/trunk/hildon-desktop/src/hd-home-window.c =================================================================== --- projects/haf/trunk/hildon-desktop/src/hd-home-window.c 2007-06-19 12:00:38 UTC (rev 12382) +++ projects/haf/trunk/hildon-desktop/src/hd-home-window.c 2007-06-19 12:02:21 UTC (rev 12383) @@ -1380,7 +1380,6 @@ HDHomeWindowPrivate *priv; priv = HD_HOME_WINDOW_GET_PRIVATE (window); - g_debug ("layout changed, saving"); if (!priv->save_area_timeout) priv->save_area_timeout = g_timeout_add (SAVE_TIMEOUT, (GSourceFunc)
- Previous message: [maemo-commits] r12382 - in projects/haf/trunk/hildon-1: . examples src
- Next message: [maemo-commits] r12384 - in projects/haf/trunk/hildon-desktop: . data src
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]