[maemo-commits] [maemo-commits] r9935 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . libhildondesktop
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Thu Feb 15 23:09:53 EET 2007
- Previous message: [maemo-commits] r9934 - projects/haf/hafbuildbot
- Next message: [maemo-commits] r9936 - projects/haf/branches/hildon-theme-plankton/hildon-theme-plankton-3/template
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: jobi Date: 2007-02-15 23:09:52 +0200 (Thu, 15 Feb 2007) New Revision: 9935 Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-applet.c Log: 2007-02-15 Johan Bilien <johan.bilien at nokia.com> * libhildondesktop/hildon-home-applet.c: - added "layout-mode-sucks" property (default to FALSE) - if TRUE, add a dragging handle and always show the resize handle. always react on button press for these handle, and don't react to _set_layout_mode. Layout mode dies - if FALSE, business as usual Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog 2007-02-15 19:15:06 UTC (rev 9934) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog 2007-02-15 21:09:52 UTC (rev 9935) @@ -1,3 +1,12 @@ +2007-02-15 Johan Bilien <johan.bilien at nokia.com> + + * libhildondesktop/hildon-home-applet.c: + - added "layout-mode-sucks" property (default to FALSE) + - if TRUE, add a dragging handle and always show the resize handle. + always react on button press for these handle, and don't react + to _set_layout_mode. Layout mode dies + - if FALSE, business as usual + 2007-02-15 Moises Martinez <moises.martinez at nokia.com> * lbihildondesktop/hildon-desktop-panel-expandable.c: Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-applet.c =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-applet.c 2007-02-15 19:15:06 UTC (rev 9934) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-applet.c 2007-02-15 21:09:52 UTC (rev 9935) @@ -65,6 +65,7 @@ { HILDON_HOME_APPLET_PROPERTY_RESIZE_TYPE = 1, HILDON_HOME_APPLET_PROPERTY_LAYOUT_MODE, + HILDON_HOME_APPLET_PROPERTY_LAYOUT_MODE_SUCKS, HILDON_HOME_APPLET_PROPERTY_DESKTOP_FILE, HILDON_HOME_APPLET_PROPERTY_MINIMUM_WIDTH, HILDON_HOME_APPLET_PROPERTY_MINIMUM_HEIGHT @@ -79,6 +80,7 @@ GdkWindow *close_button_window; GdkPixbuf *resize_handle; GdkWindow *resize_handle_window; + GdkWindow *drag_handle_window; GdkWindow *event_window; @@ -92,6 +94,8 @@ guint timeout; gboolean overlaps; GtkAllocation old_allocation; + + gboolean layout_mode_sucks; } HildonHomeAppletPriv; static GtkEventBoxClass *parent_class; @@ -121,6 +125,12 @@ static void hildon_home_applet_layout_mode_end (HildonHomeApplet *applet); +static GdkWindow * +hildon_home_applet_create_icon_window (HildonHomeApplet *applet, + GdkPixbuf *icon, + gint x, + gint y); + static gboolean hildon_home_applet_button_press_event (GtkWidget *applet, GdkEventButton *event); @@ -168,6 +178,10 @@ guint property_id, GValue *value, GParamSpec *pspec); +static GdkFilterReturn +window_event_filter (GdkXEvent *xevent, + GdkEvent *event, + HildonHomeApplet *applet); GType @@ -337,6 +351,17 @@ HILDON_HOME_APPLET_PROPERTY_LAYOUT_MODE, pspec); + pspec = g_param_spec_boolean ("layout-mode-sucks", + "Layout mode sucks", + "Whether or not the layout mode " + "is considered to suck", + /*TRUE well really it should*/ FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT); + + g_object_class_install_property (object_class, + HILDON_HOME_APPLET_PROPERTY_LAYOUT_MODE_SUCKS, + pspec); + pspec = g_param_spec_int ("minimum-width", "Minimum width", "Minimum width for this applet", @@ -421,6 +446,9 @@ /* FIXME remove this from the theme */ gtk_widget_set_name (GTK_WIDGET (self), "osso-home-layoutmode-applet"); + fprintf (stderr, "Layout mode sucks: %i\n", priv->layout_mode_sucks); + + } static void @@ -482,6 +510,11 @@ hildon_home_applet_set_layout_mode (HILDON_HOME_APPLET (object), g_value_get_boolean (value)); break; + case HILDON_HOME_APPLET_PROPERTY_LAYOUT_MODE_SUCKS: + priv->layout_mode_sucks = g_value_get_boolean (value); + if (priv->layout_mode_sucks) + GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (object), GTK_NO_WINDOW); + break; case HILDON_HOME_APPLET_PROPERTY_MINIMUM_WIDTH: g_object_notify (object, "minimum-width"); priv->minimum_width = g_value_get_int (value); @@ -514,6 +547,9 @@ case HILDON_HOME_APPLET_PROPERTY_LAYOUT_MODE: g_value_set_boolean (value, priv->layout_mode); break; + case HILDON_HOME_APPLET_PROPERTY_LAYOUT_MODE_SUCKS: + g_value_set_boolean (value, priv->layout_mode_sucks); + break; case HILDON_HOME_APPLET_PROPERTY_MINIMUM_WIDTH: g_value_set_int (value, priv->minimum_width); break; @@ -575,14 +611,43 @@ GTK_STATE_NORMAL); #endif - attributes.wclass = GDK_INPUT_ONLY; - attributes_mask = GDK_WA_X | GDK_WA_Y; - priv->event_window = gdk_window_new (widget->window, - &attributes, - attributes_mask); - gdk_window_set_user_data (priv->event_window, widget); + if (!priv->layout_mode_sucks) + { + /* When layout mode is cool, we have an event window + * on top of everything to catch the clicks */ + attributes.wclass = GDK_INPUT_ONLY; + attributes_mask = GDK_WA_X | GDK_WA_Y; + priv->event_window = gdk_window_new (widget->window, + &attributes, + attributes_mask); + gdk_window_set_user_data (priv->event_window, widget); + } + + if (priv->layout_mode_sucks) + { + priv->drag_handle_window = + hildon_home_applet_create_icon_window (HILDON_HOME_APPLET (widget), + priv->resize_handle, + 0, + 0); + + if (priv->resize_type != HILDON_HOME_APPLET_RESIZE_NONE) + priv->resize_handle_window = + hildon_home_applet_create_icon_window + (HILDON_HOME_APPLET (widget), + priv->resize_handle, + widget->allocation.width - APPLET_RESIZE_HANDLE_WIDTH, + widget->allocation.height - APPLET_RESIZE_HANDLE_HEIGHT); + gdk_window_set_events (widget->window, + gdk_window_get_events(widget->window) | + GDK_SUBSTRUCTURE_MASK); + gdk_window_add_filter (widget->window, + (GdkFilterFunc)window_event_filter, + widget); + } + } else @@ -633,7 +698,10 @@ if (GDK_IS_WINDOW (priv->event_window)) gdk_window_show (priv->event_window); + if (priv->drag_handle_window) + gdk_window_raise (priv->drag_handle_window); + } static void @@ -662,7 +730,7 @@ if (GTK_WIDGET_CLASS (parent_class)->expose_event) GTK_WIDGET_CLASS (parent_class)->expose_event (w, event); - if (w->parent && priv->layout_mode) + if (w->parent && (priv->layout_mode || priv->layout_mode_sucks)) { /* Draw the rectangle around */ @@ -697,7 +765,7 @@ w->allocation.width-LAYOUT_MODE_HIGHLIGHT_WIDTH, w->allocation.height-LAYOUT_MODE_HIGHLIGHT_WIDTH); } - else /* Normal */ + else if (!priv->layout_mode_sucks)/* Normal */ { gdk_gc_set_line_attributes (w->style->fg_gc[GTK_STATE_NORMAL], LAYOUT_MODE_HIGHLIGHT_WIDTH, @@ -816,6 +884,11 @@ &attributes, attributes_mask); + gdk_window_set_events (window, + gdk_window_get_events (window) + | GDK_BUTTON_PRESS_MASK + | GDK_BUTTON_RELEASE_MASK); + gdk_window_set_user_data (window, w); gdk_window_move (window, x, y); @@ -861,8 +934,11 @@ gdk_window_raise (priv->close_button_window); if (priv->resize_handle_window) gdk_window_raise (priv->resize_handle_window); + if (priv->drag_handle_window) + gdk_window_raise (priv->drag_handle_window); - if (GTK_BIN (applet) && GTK_BIN (applet)->child) + if (!priv->layout_mode_sucks && GTK_IS_BIN (applet) && + GTK_BIN (applet)->child) { gtk_widget_set_sensitive (GTK_BIN (applet)->child, TRUE); gtk_widget_set_sensitive (GTK_BIN (applet)->child, FALSE); @@ -883,6 +959,9 @@ widget = GTK_WIDGET (applet); priv = HILDON_HOME_APPLET_GET_PRIVATE (applet); + + if (priv->layout_mode_sucks) + return; priv->layout_mode = TRUE; @@ -942,6 +1021,9 @@ priv = HILDON_HOME_APPLET_GET_PRIVATE (applet); widget = GTK_WIDGET (applet); + if (priv->layout_mode_sucks) + return; + priv->layout_mode = FALSE; if (priv->close_button_window) @@ -1134,19 +1216,16 @@ priv = HILDON_HOME_APPLET_GET_PRIVATE (HILDON_HOME_APPLET (w)); - if (!priv->layout_mode) + if (!priv->layout_mode_sucks && !priv->layout_mode) { if (GTK_WIDGET_CLASS (parent_class)->button_press_event) return GTK_WIDGET_CLASS (parent_class)->button_press_event (w, event); else return FALSE; } - + /* Check if we clicked the close button */ - if (event->x > HILDON_MARGIN_DEFAULT && - event->x < HILDON_MARGIN_DEFAULT + APPLET_CLOSE_BUTTON_WIDTH && - event->y > HILDON_MARGIN_DEFAULT && - event->y < HILDON_MARGIN_DEFAULT + APPLET_CLOSE_BUTTON_HEIGHT) + if (event->window == priv->close_button_window) { if (HILDON_IS_HOME_AREA (w->parent)) g_signal_emit_by_name (G_OBJECT (w->parent), @@ -1155,6 +1234,10 @@ gtk_widget_destroy (w); return TRUE; } + + if ((priv->layout_mode_sucks && event->window != priv->drag_handle_window) && + event->window != priv->resize_handle_window) + return FALSE; if (!priv->timeout) { @@ -1164,7 +1247,7 @@ w); gdk_window_raise (w->window); - gdk_pointer_grab (priv->event_window, + gdk_pointer_grab (event->window, FALSE, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK, NULL, @@ -1173,16 +1256,29 @@ priv->old_allocation = w->allocation; - if (priv->resize_type != HILDON_HOME_APPLET_RESIZE_NONE && - (w->allocation.width - event->x) < APPLET_RESIZE_HANDLE_WIDTH && - (w->allocation.height - event->y) < APPLET_RESIZE_HANDLE_HEIGHT) + if (event->window == priv->resize_handle_window) { - priv->x_offset = w->allocation.width - event->x; - priv->y_offset = w->allocation.height - event->y; + gint window_x, window_y; + gint window_width, window_height; + + g_debug ("resizing"); + + 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_HOME_APPLET_STATE_RESIZING; } else { + g_debug ("moving"); priv->x_offset = event->x; priv->y_offset = event->y; priv->state = HILDON_HOME_APPLET_STATE_MOVING; @@ -1204,7 +1300,8 @@ HildonHomeAppletPriv *priv; priv = HILDON_HOME_APPLET_GET_PRIVATE (applet); - if (!priv->layout_mode) + + 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);
- Previous message: [maemo-commits] r9934 - projects/haf/hafbuildbot
- Next message: [maemo-commits] r9936 - projects/haf/branches/hildon-theme-plankton/hildon-theme-plankton-3/template
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]