[evolution/calendar-clutter] Clutter calendar canvas tryout.
- From: Srinivasa Ragavan <sragavan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/calendar-clutter] Clutter calendar canvas tryout.
- Date: Wed, 11 Aug 2010 05:45:18 +0000 (UTC)
commit f38292880d9686a4196365379f71ae46a901caca
Author: Srinivasa Ragavan <sragavan gnome org>
Date: Wed Aug 11 11:13:02 2010 +0530
Clutter calendar canvas tryout.
calendar/gui/Makefile.am | 2 +
calendar/gui/e-day-view-main-item.c | 228 +++++++++--
calendar/gui/e-day-view-main-item.h | 13 +-
calendar/gui/e-day-view-time-item.c | 132 +++++--
calendar/gui/e-day-view-time-item.h | 18 +-
calendar/gui/e-day-view.c | 764 +++++++++++++++++++++++++++--------
calendar/gui/e-day-view.h | 8 +-
mail/e-mail-message-pane.c | 8 +-
mail/e-mail-message-pane.h | 2 +
mail/e-mail-notebook-view.c | 139 ++++++-
mail/e-mail-paned-view.c | 22 +
mail/e-mail-paned-view.h | 2 +
mail/e-mail-reader.c | 81 ++++
mail/e-mail-reader.h | 4 +
ui/evolution-mail-reader.ui | 4 +-
15 files changed, 1163 insertions(+), 264 deletions(-)
---
diff --git a/calendar/gui/Makefile.am b/calendar/gui/Makefile.am
index a168582..cd83024 100644
--- a/calendar/gui/Makefile.am
+++ b/calendar/gui/Makefile.am
@@ -72,6 +72,7 @@ libevolution_calendar_la_CPPFLAGS = \
$(GNOME_PLATFORM_CFLAGS) \
$(LIBSOUP_CFLAGS) \
$(EVOLUTION_CALENDAR_CFLAGS) \
+ $(CLUTTER_CFLAGS) \
$(CAMEL_CFLAGS)
ui_DATA = \
@@ -229,6 +230,7 @@ libevolution_calendar_la_LIBADD = \
$(CAMEL_LIBS) \
$(LIBSOUP_LIBS) \
$(EVOLUTION_CALENDAR_LIBS) \
+ $(CLUTTER_LIBS) \
$(GNOME_PLATFORM_LIBS)
libevolution_calendar_la_LDFLAGS = $(NO_UNDEFINED)
diff --git a/calendar/gui/e-day-view-main-item.c b/calendar/gui/e-day-view-main-item.c
index 0229f51..bf64157 100644
--- a/calendar/gui/e-day-view-main-item.c
+++ b/calendar/gui/e-day-view-main-item.c
@@ -90,7 +90,7 @@ icalcomp_is_transparent (icalcomponent *icalcomp)
static void
day_view_main_item_draw_long_events_in_vbars (EDayViewMainItem *main_item,
- GdkDrawable *drawable,
+ cairo_t *cr,
gint x,
gint y,
gint width,
@@ -100,11 +100,13 @@ day_view_main_item_draw_long_events_in_vbars (EDayViewMainItem *main_item,
EDayView *day_view;
EDayViewEvent *event;
gint event_num, start_day, end_day, day, bar_y1, bar_y2, grid_x;
- cairo_t *cr = NULL;
GdkColor bg_color;
day_view = e_day_view_main_item_get_day_view (main_item);
+ cairo_save (cr);
+ gdk_cairo_set_source_color (cr, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND]);
+
for (event_num = 0; event_num < day_view->long_events->len; event_num++) {
gboolean first = TRUE;
event = &g_array_index (day_view->long_events, EDayViewEvent, event_num);
@@ -146,9 +148,9 @@ day_view_main_item_draw_long_events_in_vbars (EDayViewMainItem *main_item,
if (bar_y1 < height && bar_y2 > 0 && bar_y2 > bar_y1 && can_draw_in_region (draw_region, grid_x, bar_y1, E_DAY_VIEW_BAR_WIDTH - 2, bar_y2 - bar_y1)) {
if (!cr) {
- cr = gdk_cairo_create (drawable);
- cairo_save (cr);
- gdk_cairo_set_source_color (cr, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND]);
+ // cr = gdk_cairo_create (drawable);
+ // cairo_save (cr);
+ // gdk_cairo_set_source_color (cr, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND]);
}
if (first) {
@@ -172,13 +174,21 @@ day_view_main_item_draw_long_events_in_vbars (EDayViewMainItem *main_item,
if (cr) {
cairo_restore (cr);
- cairo_destroy (cr);
+ //cairo_destroy (cr);
}
}
static void
+hide_drag (ClutterAnimation *anim,
+ EDayView *day_view)
+{
+ clutter_actor_destroy (day_view->dragged);
+ day_view->dragged = NULL;
+}
+
+static void
day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
- GdkDrawable *drawable,
+ cairo_t *cr,
gint x,
gint y,
gint width,
@@ -199,7 +209,6 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
gboolean draw_reminder_icon, draw_recurrence_icon, draw_timezone_icon, draw_meeting_icon;
gboolean draw_attach_icon;
ECalComponentTransparency transparency;
- cairo_t *cr;
cairo_pattern_t *pat;
cairo_font_options_t *font_options;
guint16 red, green, blue;
@@ -221,7 +230,13 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
gchar *text = NULL;
gint scroll_flag = 0;
gint row_y;
-
+ ClutterActor *actor;
+ char *tmp;
+ ClutterActor *stage = g_object_get_data (main_item, "stage");
+ gboolean new = TRUE;
+ gboolean dragged = FALSE;
+ gboolean drag_end = FALSE;
+ gboolean resize = FALSE;
day_view = e_day_view_main_item_get_day_view (main_item);
model = e_calendar_view_get_model (E_CALENDAR_VIEW (day_view));
@@ -236,13 +251,89 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
&item_w, &item_h))
return;
+ if (!is_array_index_in_bounds (day_view->events[day], event_num))
+ return;
+
+ event = &g_array_index (day_view->events[day], EDayViewEvent,
+ event_num);
+
item_x -= x;
item_y -= y;
if (!can_draw_in_region (draw_region, item_x, item_y, item_w, item_h))
return;
- cr = gdk_cairo_create (drawable);
+ tmp = g_strdup_printf("%d-%d", day, event_num);
+ actor = g_object_get_data (day_view, tmp);
+
+ dragged = (GPOINTER_TO_INT(g_object_get_data (event->canvas_item, "drag-is-actor"))) ? TRUE : FALSE;
+ drag_end = (GPOINTER_TO_INT(g_object_get_data (event->canvas_item, "drag-end"))) ? TRUE : FALSE;
+ resize = (GPOINTER_TO_INT(g_object_get_data (event->canvas_item, "resize-event"))) ? TRUE : FALSE;
+
+ g_object_set_data (event->canvas_item, "resize-event", GINT_TO_POINTER(FALSE));
+
+ //del = (GPOINTER_TO_INT(g_object_get_data (actor, "mark-delete"))) ? TRUE : FALSE;
+ if (actor && !dragged && !resize) {
+ double x,y;
+ if (clutter_actor_is_scaled (actor)) {
+ clutter_actor_animate (actor, /* the actor to animate */
+ CLUTTER_LINEAR, /* the easing mode */
+ 200, /* the duration of the animation */
+ "scale-x", 1.0, /* final horizontal scaling factor */
+ "scale-y", 1.0, /* final vertical scaling factor */
+ "opacity", 0,
+ "signal::completed", clutter_actor_destroy, actor,
+ NULL);
+
+ } else
+ clutter_actor_destroy (actor);
+ new = FALSE;
+ }
+
+ if (!dragged && !resize) {
+ actor = clutter_cairo_texture_new (item_w, item_h);
+ if (new) {
+ clutter_actor_set_opacity (actor, 0);
+ clutter_actor_set_scale (actor, 5.0, 5.0);
+ }
+ clutter_actor_show (actor);
+ clutter_actor_set_size (actor, item_w, item_h);
+ clutter_container_add_actor (stage, actor);
+ clutter_actor_set_position (actor, item_x, item_y);
+ } else {
+ gfloat nx, ny;
+ clutter_actor_get_position (actor, &nx, &ny);
+ clutter_actor_set_scale (actor, 1.0, 1.0);
+ printf("from %lf,%lf to %d,%d\n", nx, ny, item_x, item_y);
+ //clutter_actor_set_anchor_point (actor, 0, 0);
+ //clutter_actor_set_position (actor, item_x, item_y);
+ clutter_actor_show (actor);
+ clutter_actor_raise_top (actor);
+ if (drag_end) {
+ g_object_set_data (event->canvas_item, "drag-is-actor", GINT_TO_POINTER(FALSE));
+ g_object_set_data (event->canvas_item, "drag-end", GINT_TO_POINTER(FALSE));
+ }
+ clutter_actor_raise_top (event->canvas_item);
+
+
+ clutter_actor_animate (actor,
+ CLUTTER_LINEAR, 200,
+ "x", (float)item_x + (item_w/2),
+ "y", (float)item_y + (item_h/2),
+ "opacity", 255,
+ "signal::completed", hide_drag, day_view,
+ NULL);
+
+ return;
+ }
+
+ item_x = 0;
+ item_y = 0;
+ clutter_actor_raise (actor, main_item);
+ g_object_set_data (day_view, tmp, actor);
+ g_free (tmp);
+ cr = clutter_cairo_texture_create (actor);
+
gdk_cairo_set_source_color (cr,
&day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR]);
@@ -253,11 +344,7 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
font_options = get_font_options ();
- if (!is_array_index_in_bounds (day_view->events[day], event_num))
- return;
- event = &g_array_index (day_view->events[day], EDayViewEvent,
- event_num);
if (!is_comp_data_valid (event))
return;
@@ -285,12 +372,47 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
}
is_editing = day_view->editing_event_day == day && day_view->editing_event_num == event_num;
-
+ clutter_actor_move_anchor_point (actor, item_w/2, item_h/2);
+
+ if (is_editing) {
+ printf("EDITING %d %d\n", day_view->editing_event_day, day_view->editing_event_num);
+ clutter_actor_raise_top (actor);
+ clutter_actor_move_anchor_point (actor, item_w/2, item_h/2);
+ clutter_actor_animate (actor, /* the actor to animate */
+ CLUTTER_LINEAR, /* the easing mode */
+ 200, /* the duration of the animation */
+ "scale-x", 1.2, /* final horizontal scaling factor */
+ "scale-y", 1.2, /* final vertical scaling factor */
+ NULL);
+ if (event->canvas_item) {
+ clutter_actor_raise_top (event->canvas_item);
+ //clutter_actor_move_anchor_point (event->canvas_item, item_w/2, item_h/2);
+
+ //clutter_actor_set_scale (event->canvas_item, 1.5, 1.5);
+ }
+ } else if (event->canvas_item)
+ clutter_actor_set_scale (event->canvas_item, 1.0, 1.0);
+
+ if (new) {
+ clutter_actor_raise_top (actor);
+ clutter_actor_move_anchor_point (actor, item_w/2, item_h/2);
+ clutter_actor_animate (actor, /* the actor to animate */
+ CLUTTER_LINEAR, /* the easing mode */
+ 200, /* the duration of the animation */
+ "scale-x", 1.0, /* final horizontal scaling factor */
+ "scale-y", 1.0, /* final vertical scaling factor */
+ "opacity", 255,
+ NULL);
+ clutter_actor_raise_top (event->canvas_item);
+
+ }
+
if (event->canvas_item)
- g_object_get (G_OBJECT (event->canvas_item), "x_offset", &text_x_offset, NULL);
+ text_x_offset = (gdouble)GPOINTER_TO_INT(g_object_get_data (event->canvas_item, "x_offset"));
+ //g_object_get (G_OBJECT (event->canvas_item), "x_offset", &text_x_offset, NULL);
/* Draw shadow around the event when selected */
- if (is_editing && (gtk_widget_has_focus (day_view->main_canvas))) {
+ if (is_editing && 0 && (gtk_widget_has_focus (day_view->main_canvas))) {
/* For embossing Item selection */
item_x -= 1;
item_y -= 2;
@@ -832,7 +954,7 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
static void
day_view_main_item_draw_day_events (EDayViewMainItem *main_item,
- GdkDrawable *drawable,
+ cairo_t *cr,
gint x,
gint y,
gint width,
@@ -848,14 +970,14 @@ day_view_main_item_draw_day_events (EDayViewMainItem *main_item,
for (event_num = 0; event_num < day_view->events[day]->len;
event_num++) {
day_view_main_item_draw_day_event (
- main_item, drawable, x, y, width, height,
+ main_item, cr, x, y, width, height,
day, event_num, draw_region);
}
}
static void
day_view_main_item_draw_events_in_vbars (EDayViewMainItem *main_item,
- GdkDrawable *drawable,
+ cairo_t *cr,
gint x,
gint y,
gint width,
@@ -866,12 +988,15 @@ day_view_main_item_draw_events_in_vbars (EDayViewMainItem *main_item,
EDayView *day_view;
EDayViewEvent *event;
gint grid_x, event_num, bar_y, bar_h;
- cairo_t *cr = NULL;
+ //cairo_t *cr = NULL;
GdkColor bg_color;
day_view = e_day_view_main_item_get_day_view (main_item);
grid_x = day_view->day_offsets[day] + 1 - x;
+
+ cairo_save (cr);
+ gdk_cairo_set_source_color (cr, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND]);
/* Draw the busy times corresponding to the events in the day. */
for (event_num = 0; event_num < day_view->events[day]->len; event_num++) {
@@ -901,10 +1026,10 @@ day_view_main_item_draw_events_in_vbars (EDayViewMainItem *main_item,
}
if (!cr) {
- cr = gdk_cairo_create (drawable);
- cairo_save (cr);
+ // //cr = gdk_cairo_create (drawable);
+ // cairo_save (cr);
- gdk_cairo_set_source_color (cr, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND]);
+ // gdk_cairo_set_source_color (cr, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND]);
}
if (gdk_color_parse (e_cal_model_get_color_for_component (e_calendar_view_get_model (E_CALENDAR_VIEW (day_view)), event->comp_data), &bg_color)) {
@@ -923,7 +1048,7 @@ day_view_main_item_draw_events_in_vbars (EDayViewMainItem *main_item,
if (cr) {
cairo_restore (cr);
- cairo_destroy (cr);
+ //cairo_destroy (cr);
}
}
@@ -977,6 +1102,7 @@ day_view_main_item_dispose (GObject *object)
G_OBJECT_CLASS (parent_class)->dispose (object);
}
+#if 0
static void
day_view_main_item_update (GnomeCanvasItem *item,
gdouble *affine,
@@ -995,14 +1121,15 @@ day_view_main_item_update (GnomeCanvasItem *item,
item->x2 = INT_MAX;
item->y2 = INT_MAX;
}
+#endif
-static void
-day_view_main_item_draw (GnomeCanvasItem *canvas_item,
- GdkDrawable *drawable,
+void
+e_day_view_main_item_draw (EDayViewMainItem *canvas_item)
+ /* GdkDrawable *drawable,
gint x,
gint y,
gint width,
- gint height)
+ gint height) */
{
EDayViewMainItem *main_item;
EDayView *day_view;
@@ -1017,8 +1144,13 @@ day_view_main_item_draw (GnomeCanvasItem *canvas_item,
gboolean today = FALSE;
GdkRegion *draw_region;
GdkRectangle rect;
+ int x=0, y=0;
+ int width, height;
- cr = gdk_cairo_create (drawable);
+ clutter_cairo_texture_get_surface_size (canvas_item, &width, &height);
+
+ cr = clutter_cairo_texture_create (canvas_item);
+ //cr = gdk_cairo_create (drawable);
main_item = E_DAY_VIEW_MAIN_ITEM (canvas_item);
day_view = e_day_view_main_item_get_day_view (main_item);
@@ -1173,23 +1305,22 @@ day_view_main_item_draw (GnomeCanvasItem *canvas_item,
cairo_fill (cr);
cairo_restore (cr);
-
/* Fill in the bars when the user is busy. */
day_view_main_item_draw_events_in_vbars (
- main_item, drawable, x, y,
+ main_item, cr, x, y,
width, height, day, draw_region);
}
/* Fill in the vertical bars corresponding to the busy times from the
long events. */
day_view_main_item_draw_long_events_in_vbars (
- main_item, drawable, x, y, width, height, draw_region);
+ main_item, cr, x, y, width, height, draw_region);
/* Draw the event borders and backgrounds, and the vertical bars
down the left edges. */
for (day = 0; day < day_view->days_shown; day++)
day_view_main_item_draw_day_events (
- main_item, drawable, x, y,
+ main_item, cr, x, y,
width, height, day, draw_region);
if (e_day_view_marcus_bains_get_show_line (day_view)) {
@@ -1234,6 +1365,7 @@ day_view_main_item_draw (GnomeCanvasItem *canvas_item,
gdk_region_destroy (draw_region);
}
+#if 0
static gdouble
day_view_main_item_point (GnomeCanvasItem *item,
gdouble x,
@@ -1250,12 +1382,13 @@ day_view_main_item_point (GnomeCanvasItem *item,
return 0.0;
}
+#endif
static void
day_view_main_item_class_init (EDayViewMainItemClass *class)
{
GObjectClass *object_class;
- GnomeCanvasItemClass *item_class;
+ ClutterCairoTextureClass *item_class;
parent_class = g_type_class_peek_parent (class);
g_type_class_add_private (class, sizeof (EDayViewMainItemPrivate));
@@ -1265,10 +1398,10 @@ day_view_main_item_class_init (EDayViewMainItemClass *class)
object_class->get_property = day_view_main_item_get_property;
object_class->dispose = day_view_main_item_dispose;
- item_class = GNOME_CANVAS_ITEM_CLASS (class);
- item_class->update = day_view_main_item_update;
- item_class->draw = day_view_main_item_draw;
- item_class->point = day_view_main_item_point;
+ item_class = CLUTTER_CAIRO_TEXTURE_CLASS (class);
+// item_class->update = day_view_main_item_update;
+// item_class->draw = day_view_main_item_draw;
+// item_class->point = day_view_main_item_point;
g_object_class_install_property (
object_class,
@@ -1310,7 +1443,7 @@ e_day_view_main_item_get_type (void)
};
type = g_type_register_static (
- GNOME_TYPE_CANVAS_ITEM, "EDayViewMainItem",
+ CLUTTER_TYPE_CAIRO_TEXTURE, "EDayViewMainItem",
&type_info, 0);
}
@@ -1339,3 +1472,18 @@ e_day_view_main_item_set_day_view (EDayViewMainItem *main_item,
g_object_notify (G_OBJECT (main_item), "day-view");
}
+
+void
+e_day_view_main_item_set_size (EDayViewMainItem *item, int width, int height)
+{
+ clutter_cairo_texture_set_surface_size (item, width, height);
+ clutter_cairo_texture_clear (item);
+ e_day_view_main_item_draw (item);
+}
+
+void
+e_day_view_main_item_redraw (EDayViewMainItem *item)
+{
+ clutter_cairo_texture_clear (item);
+ e_day_view_main_item_draw ((ClutterActor *)item);
+}
diff --git a/calendar/gui/e-day-view-main-item.h b/calendar/gui/e-day-view-main-item.h
index 567565b..e5c991a 100644
--- a/calendar/gui/e-day-view-main-item.h
+++ b/calendar/gui/e-day-view-main-item.h
@@ -30,6 +30,10 @@
#include "e-day-view.h"
+#include <clutter/clutter.h>
+#include <mx/mx.h>
+#include <clutter-gtk/clutter-gtk.h>
+
/* Standard GObject macros */
#define E_TYPE_DAY_VIEW_MAIN_ITEM \
(e_day_view_main_item_get_type ())
@@ -56,12 +60,12 @@ typedef struct _EDayViewMainItemClass EDayViewMainItemClass;
typedef struct _EDayViewMainItemPrivate EDayViewMainItemPrivate;
struct _EDayViewMainItem {
- GnomeCanvasItem parent;
+ ClutterCairoTexture parent;
EDayViewMainItemPrivate *priv;
};
struct _EDayViewMainItemClass {
- GnomeCanvasItemClass parent_class;
+ ClutterCairoTextureClass parent_class;
};
GType e_day_view_main_item_get_type (void);
@@ -70,6 +74,11 @@ EDayView * e_day_view_main_item_get_day_view
void e_day_view_main_item_set_day_view
(EDayViewMainItem *main_item,
EDayView *day_view);
+void e_day_view_main_item_set_size (EDayViewMainItem *item,
+ int width,
+ int height);
+void e_day_view_main_item_draw (EDayViewMainItem *item);
+void e_day_view_main_item_redraw (EDayViewMainItem *item);
G_END_DECLS
diff --git a/calendar/gui/e-day-view-time-item.c b/calendar/gui/e-day-view-time-item.c
index edc446a..a19d3a5 100644
--- a/calendar/gui/e-day-view-time-item.c
+++ b/calendar/gui/e-day-view-time-item.c
@@ -25,6 +25,10 @@
#include <config.h>
#endif
+#include <clutter/clutter.h>
+#include <mx/mx.h>
+#include <clutter-gtk/clutter-gtk.h>
+
#include <string.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
@@ -76,16 +80,14 @@ struct _EDayViewTimeItemPrivate {
static void e_day_view_time_item_update (GnomeCanvasItem *item,
double *affine,
ArtSVP *clip_path, gint flags);
-static void e_day_view_time_item_draw (GnomeCanvasItem *item,
+static void e_day_view_time_item_draw (ClutterActor *actor);/*
GdkDrawable *drawable,
gint x, gint y,
- gint width, gint height);
+ gint width, gint height);*/
static double e_day_view_time_item_point (GnomeCanvasItem *item,
double x, double y,
gint cx, gint cy,
GnomeCanvasItem **actual_item);
-static gint e_day_view_time_item_event (GnomeCanvasItem *item,
- GdkEvent *event);
static void e_day_view_time_item_increment_time (gint *hour,
gint *minute,
gint mins_per_row);
@@ -180,7 +182,7 @@ static void
day_view_time_item_class_init (EDayViewTimeItemClass *class)
{
GObjectClass *object_class;
- GnomeCanvasItemClass *item_class;
+ ClutterCairoTextureClass *item_class;
parent_class = g_type_class_peek_parent (class);
g_type_class_add_private (class, sizeof (EDayViewTimeItemPrivate));
@@ -191,11 +193,10 @@ day_view_time_item_class_init (EDayViewTimeItemClass *class)
object_class->dispose = day_view_time_item_dispose;
object_class->finalize = day_view_time_item_finalize;
- item_class = GNOME_CANVAS_ITEM_CLASS (class);
- item_class->update = e_day_view_time_item_update;
- item_class->draw = e_day_view_time_item_draw;
- item_class->point = e_day_view_time_item_point;
- item_class->event = e_day_view_time_item_event;
+ item_class = CLUTTER_CAIRO_TEXTURE_CLASS (class);
+// item_class->update = e_day_view_time_item_update;
+// item_class->point = e_day_view_time_item_point;
+// CLUTTER_ACTOR_CLASS(item_class)->event = e_day_view_time_item_event;
g_object_class_install_property (
object_class,
@@ -229,6 +230,36 @@ day_view_time_item_init (EDayViewTimeItem *time_item)
time_item->priv->second_zone_changed_id = calendar_config_add_notification_day_second_zone (edvti_second_zone_changed_cb, time_item);
}
+EDayViewTimeItem *
+e_day_view_time_item_new (EDayView *day_view, gint width, gint height)
+{
+ EDayViewTimeItem *item;
+
+ item = g_object_new (
+ E_TYPE_DAY_VIEW_TIME_ITEM,
+ "EDayViewTimeItem::day_view", day_view,
+ "surface-width", 50,
+ "surface-height", 300,
+ NULL);
+
+ e_day_view_time_item_draw ((ClutterActor *)item);
+}
+
+void
+e_day_view_time_item_set_size (EDayViewTimeItem *item, int width, int height)
+{
+ clutter_cairo_texture_set_surface_size (item, width, height);
+ clutter_cairo_texture_clear (item);
+ e_day_view_time_item_draw ((ClutterActor *)item);
+}
+
+void
+e_day_view_time_item_redraw (EDayViewTimeItem *item)
+{
+ clutter_cairo_texture_clear (item);
+ e_day_view_time_item_draw ((ClutterActor *)item);
+}
+
GType
e_day_view_time_item_get_type (void)
{
@@ -249,13 +280,13 @@ e_day_view_time_item_get_type (void)
};
type = g_type_register_static (
- GNOME_TYPE_CANVAS_ITEM, "EDayViewTimeItem",
+ CLUTTER_TYPE_CAIRO_TEXTURE, "EDayViewTimeItem",
&type_info, 0);
}
return type;
}
-
+#if 0
static void
e_day_view_time_item_update (GnomeCanvasItem *item,
double *affine,
@@ -271,13 +302,13 @@ e_day_view_time_item_update (GnomeCanvasItem *item,
item->x2 = INT_MAX;
item->y2 = INT_MAX;
}
-
+#endif
/*
* DRAWING ROUTINES - functions to paint the canvas item.
*/
static void
-edvti_draw_zone (GnomeCanvasItem *canvas_item,
- GdkDrawable *drawable,
+edvti_draw_zone (ClutterActor *actor,
+ // GdkDrawable *drawable,
gint x,
gint y,
gint width,
@@ -305,9 +336,9 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
GdkColor fg, dark;
GdkColor mb_color;
- cr = gdk_cairo_create (drawable);
+ cr = clutter_cairo_texture_create (actor);
- time_item = E_DAY_VIEW_TIME_ITEM (canvas_item);
+ time_item = E_DAY_VIEW_TIME_ITEM (actor);
day_view = e_day_view_time_item_get_day_view (time_item);
g_return_if_fail (day_view != NULL);
@@ -427,6 +458,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
cairo_save (cr);
gdk_cairo_set_source_color (cr, &day_view->colors[E_DAY_VIEW_COLOR_MARCUS_BAINS_LINE]);
+ cairo_set_source_rgba (cr, 0.3, 0.2, 0.4, 1.0);
if (day_view->marcus_bains_time_bar_color && gdk_color_parse (day_view->marcus_bains_time_bar_color, &mb_color)) {
GdkColormap *colormap;
@@ -453,7 +485,9 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
colormap = gtk_widget_get_colormap (GTK_WIDGET (day_view));
if (gdk_colormap_alloc_color (colormap, &mb_color, TRUE, TRUE)) {
- gdk_cairo_set_source_color (cr, &mb_color);
+ cairo_set_source_rgba (cr, 0.3, 0.2, 0.4, 1.0);
+
+// gdk_cairo_set_source_color (cr, &mb_color);
}
}
}
@@ -484,7 +518,9 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
between hours and display as one long string,
e.g. "14:00" or "2 pm". */
cairo_save (cr);
- gdk_cairo_set_source_color (cr, &dark);
+ // gdk_cairo_set_source_color (cr, &dark);
+ cairo_set_source_rgba (cr, 0.3, 0.2, 0.4, 1.0);
+
cairo_save (cr);
cairo_set_line_width (cr, 0.7);
cairo_move_to (cr, long_line_x1, row_y);
@@ -505,10 +541,12 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
}
cairo_save (cr);
- if (show_midnight_date)
- gdk_cairo_set_source_color (cr, &mb_color);
- else
- gdk_cairo_set_source_color (cr, &fg);
+ cairo_set_source_rgba (cr, 0.3, 0.2, 0.4, 1.0);
+
+ // if (show_midnight_date)
+ // gdk_cairo_set_source_color (cr, &mb_color);
+ // else
+ // gdk_cairo_set_source_color (cr, &fg);
layout = pango_cairo_create_layout (cr);
pango_layout_set_text (layout, buffer, -1);
pango_layout_get_pixel_size (layout, &minute_width, NULL);
@@ -527,7 +565,9 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
large font. */
cairo_save (cr);
- gdk_cairo_set_source_color (cr, &dark);
+ cairo_set_source_rgba (cr, 0.3, 0.2, 0.4, 1.0);
+
+// gdk_cairo_set_source_color (cr, &dark);
if (show_midnight_date)
strcpy (buffer, midnight_day);
else
@@ -545,6 +585,8 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
gdk_cairo_set_source_color (cr, &mb_color);
else
gdk_cairo_set_source_color (cr, &fg);
+ cairo_set_source_rgba (cr, 0.3, 0.2, 0.4, 1.0);
+
layout = pango_cairo_create_layout (cr);
pango_layout_set_text (layout, buffer, -1);
pango_layout_set_font_description (layout, day_view->large_font_desc);
@@ -614,22 +656,27 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
}
static void
-e_day_view_time_item_draw (GnomeCanvasItem *canvas_item,
- GdkDrawable *drawable,
+e_day_view_time_item_draw (ClutterActor *actor)
+/* GdkDrawable *drawable,
gint x,
gint y,
gint width,
- gint height)
+ gint height)*/
{
EDayViewTimeItem *time_item;
+ gint x = 0;
+ gint y =0;
+ gint width; //= clutter_actor_get_width (actor);
+ gint height;// = clutter_actor_get_height (actor);
- time_item = E_DAY_VIEW_TIME_ITEM (canvas_item);
+ clutter_cairo_texture_get_surface_size (actor, &width, &height);
+ time_item = E_DAY_VIEW_TIME_ITEM (actor);
g_return_if_fail (time_item != NULL);
- edvti_draw_zone (canvas_item, drawable, x, y, width, height, 0, NULL);
+ edvti_draw_zone (actor, x, y, width, height, 0, NULL);
if (time_item->priv->second_zone)
- edvti_draw_zone (canvas_item, drawable, x, y, width, height, time_item->priv->column_width, time_item->priv->second_zone);
+ edvti_draw_zone (actor, x, y, width, height, time_item->priv->column_width, time_item->priv->second_zone);
}
/* Increment the time by the 5/10/15/30/60 minute interval.
@@ -648,7 +695,7 @@ e_day_view_time_item_increment_time (gint *hour,
*hour = (*hour + 1) % 24;
}
}
-
+#if 0
static double
e_day_view_time_item_point (GnomeCanvasItem *item, double x, double y,
gint cx, gint cy,
@@ -657,9 +704,11 @@ e_day_view_time_item_point (GnomeCanvasItem *item, double x, double y,
*actual_item = item;
return 0.0;
}
+#endif
-static gint
-e_day_view_time_item_event (GnomeCanvasItem *item,
+
+gint
+e_day_view_time_item_event (EDayViewTimeItem *item,
GdkEvent *event)
{
EDayViewTimeItem *time_item;
@@ -692,6 +741,7 @@ e_day_view_time_item_event (GnomeCanvasItem *item,
return FALSE;
}
+
static void
edvti_second_zone_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data)
{
@@ -708,7 +758,8 @@ edvti_second_zone_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *en
day_view = e_day_view_time_item_get_day_view (time_item);
gtk_widget_set_size_request (day_view->time_canvas, e_day_view_time_item_get_column_width (time_item), -1);
- gtk_widget_queue_draw (day_view->time_canvas);
+ e_day_view_time_item_redraw (time_item);
+ //gtk_widget_queue_draw (day_view->time_canvas);
}
static void
@@ -872,7 +923,7 @@ e_day_view_time_item_on_button_press (EDayViewTimeItem *time_item,
if (!gtk_widget_has_focus (GTK_WIDGET (day_view)))
gtk_widget_grab_focus (GTK_WIDGET (day_view));
- window = gtk_layout_get_bin_window (GTK_LAYOUT (canvas));
+ window = gtk_layout_get_bin_window (GTK_LAYOUT (day_view->time_canvas));
if (gdk_pointer_grab (window, FALSE,
GDK_POINTER_MOTION_MASK
@@ -906,7 +957,7 @@ e_day_view_time_item_on_motion_notify (EDayViewTimeItem *time_item,
GdkEvent *event)
{
EDayView *day_view;
- GnomeCanvas *canvas;
+ //GnomeCanvas *canvas;
gdouble window_y;
gint y, row;
@@ -916,16 +967,17 @@ e_day_view_time_item_on_motion_notify (EDayViewTimeItem *time_item,
day_view = e_day_view_time_item_get_day_view (time_item);
g_return_if_fail (day_view != NULL);
- canvas = GNOME_CANVAS_ITEM (time_item)->canvas;
+ //canvas = GNOME_CANVAS_ITEM (time_item)->canvas;
y = event->motion.y;
row = e_day_view_time_item_convert_position_to_row (time_item, y);
if (row != -1) {
- gnome_canvas_world_to_window (canvas, 0, event->motion.y,
- NULL, &window_y);
+ //gnome_canvas_world_to_window (canvas, 0, event->motion.y,
+ // NULL, &window_y);
e_day_view_update_selection (day_view, -1, row);
- e_day_view_check_auto_scroll (day_view, -1, (gint) window_y);
+ e_day_view_check_auto_scroll (day_view, -1, (gint) event->motion.y);
+ //e_day_view_check_auto_scroll (day_view, -1, (gint) window_y);
}
}
diff --git a/calendar/gui/e-day-view-time-item.h b/calendar/gui/e-day-view-time-item.h
index 354a370..c7d9435 100644
--- a/calendar/gui/e-day-view-time-item.h
+++ b/calendar/gui/e-day-view-time-item.h
@@ -31,6 +31,11 @@
#include "e-day-view.h"
+#include <clutter/clutter.h>
+#include <mx/mx.h>
+#include <clutter-gtk/clutter-gtk.h>
+
+
/* Standard GObject macros */
#define E_TYPE_DAY_VIEW_TIME_ITEM \
(e_day_view_time_item_get_type ())
@@ -57,12 +62,14 @@ typedef struct _EDayViewTimeItemClass EDayViewTimeItemClass;
typedef struct _EDayViewTimeItemPrivate EDayViewTimeItemPrivate;
struct _EDayViewTimeItem {
- GnomeCanvasItem parent;
+ //GnomeCanvasItem parent;
+ ClutterCairoTexture parent;
EDayViewTimeItemPrivate *priv;
};
struct _EDayViewTimeItemClass {
- GnomeCanvasItemClass parent_class;
+// GnomeCanvasItemClass parent_class;
+ ClutterCairoTextureClass parent_class;
};
GType e_day_view_time_item_get_type (void);
@@ -75,7 +82,12 @@ gint e_day_view_time_item_get_column_width
(EDayViewTimeItem *time_item);
icaltimezone * e_day_view_time_item_get_second_zone
(EDayViewTimeItem *time_item);
-
+void e_day_view_time_item_set_size (EDayViewTimeItem *item,
+ int width,
+ int height);
+void e_day_view_time_item_redraw (EDayViewTimeItem *item);
+gint e_day_view_time_item_event (EDayViewTimeItem *item,
+ GdkEvent *event);
G_END_DECLS
#endif /* E_DAY_VIEW_TIME_ITEM_H */
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c
index 3d5969a..b259801 100644
--- a/calendar/gui/e-day-view.c
+++ b/calendar/gui/e-day-view.c
@@ -208,7 +208,7 @@ static gboolean e_day_view_on_main_canvas_motion (GtkWidget *widget,
GdkEventMotion *event,
EDayView *day_view);
static gboolean e_day_view_convert_event_coords (EDayView *day_view,
- GdkEvent *event,
+ ClutterEvent *event,
GdkWindow *window,
gint *x_return,
gint *y_return);
@@ -325,7 +325,7 @@ static void e_day_view_start_editing_event (EDayView *day_view,
GdkEventKey *key_event);
static void e_day_view_stop_editing_event (EDayView *day_view);
static gboolean e_day_view_on_text_item_event (GnomeCanvasItem *item,
- GdkEvent *event,
+ ClutterEvent *event,
EDayView *day_view);
static gboolean e_day_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction);
static void e_day_view_change_event_time (EDayView *day_view, time_t start_dt,
@@ -852,9 +852,12 @@ update_row (EDayView *day_view, gint row)
process_component (day_view, comp_data);
+ e_day_view_check_layout (day_view);
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
- e_day_view_queue_layout (day_view);
+// gtk_widget_queue_draw (day_view->main_canvas);
+ // e_day_view_main_item_redraw (day_view->main_canvas_item);
+
+ //e_day_view_queue_layout (day_view);
}
static void
@@ -905,10 +908,13 @@ model_rows_inserted_cb (ETableModel *etm, gint row, gint count, gpointer user_da
}
process_component (day_view, comp_data);
}
-
+
+ e_day_view_check_layout (day_view);
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
- e_day_view_queue_layout (day_view);
+// gtk_widget_queue_draw (day_view->main_canvas);
+ // e_day_view_main_item_redraw (day_view->main_canvas_item);
+
+ //e_day_view_queue_layout (day_view);
}
@@ -946,7 +952,9 @@ model_comps_deleted_cb (ETableModel *etm, gpointer data, gpointer user_data)
}
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+// gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+
e_day_view_queue_layout (day_view);
}
@@ -980,6 +988,55 @@ timezone_changed_cb (ECalModel *cal_model, icaltimezone *old_zone,
}
static void
+set_main_canvas_size (GtkWidget *widget,
+ GtkAllocation *allocation,
+ EDayView *day_view)
+{
+ ClutterActor *stage = g_object_get_data (day_view->main_canvas, "stage");
+ GtkWidget *embed = g_object_get_data (day_view->main_canvas, "embed");
+ GtkAllocation aloc;
+ guint w,h;
+
+ gtk_layout_get_size (day_view->main_canvas, &w, &h);
+
+ gtk_widget_set_size_request (embed, allocation->width, h);
+ //gtk_layout_set_size (widget, allocation->width, h);
+
+ clutter_actor_set_size (stage, allocation->width, h);
+ clutter_actor_set_size (day_view->main_canvas_item, allocation->width, h);
+ e_day_view_main_item_set_size (day_view->main_canvas_item, allocation->width, h);
+}
+
+static void
+set_canvas_size (GtkWidget *widget,
+ GtkAllocation *allocation,
+ EDayView *day_view)
+{
+ ClutterActor *stage = g_object_get_data (day_view->time_canvas, "stage");
+ GtkWidget *embed = g_object_get_data (day_view->time_canvas, "embed");
+ GtkAllocation aloc;
+ guint w,h;
+
+ gtk_layout_get_size (day_view->main_canvas, &w, &h);
+
+ gtk_widget_set_size_request (embed, allocation->width, h);
+ gtk_layout_set_size (widget, allocation->width, h);
+
+ clutter_actor_set_size (stage, allocation->width, h);
+ clutter_actor_set_size (day_view->time_canvas_item, allocation->width, h);
+ e_day_view_time_item_set_size (day_view->time_canvas_item, allocation->width, h);
+}
+
+gboolean
+embed_event (GtkWidget *widget,
+ GdkEvent *event,
+ EDayView *day_view)
+{
+ e_day_view_time_item_event (day_view->time_canvas_item, event);
+ return FALSE;
+}
+
+static void
e_day_view_init (EDayView *day_view)
{
gint day;
@@ -987,6 +1044,8 @@ e_day_view_init (EDayView *day_view)
GtkAdjustment *adjustment;
GtkLayout *layout;
GtkWidget *w;
+ GtkWidget *embed;
+ ClutterActor *stage;
gtk_widget_set_can_focus (GTK_WIDGET (day_view), TRUE);
@@ -1208,11 +1267,37 @@ e_day_view_init (EDayView *day_view)
canvas_group = GNOME_CANVAS_GROUP (GNOME_CANVAS (day_view->main_canvas)->root);
- day_view->main_canvas_item =
+ embed = gtk_clutter_embed_new ();
+ gtk_widget_show (embed);
+ gtk_container_add (day_view->main_canvas, embed);
+
+ g_signal_connect (day_view->main_canvas, "size-allocate", G_CALLBACK(set_main_canvas_size), day_view);
+
+ stage = gtk_clutter_embed_get_stage ((GtkClutterEmbed *) embed);
+ g_object_set_data (day_view->main_canvas, "stage", stage);
+ g_object_set_data (day_view->main_canvas, "embed", embed);
+
+ day_view->main_canvas_item = g_object_new (
+ E_TYPE_DAY_VIEW_MAIN_ITEM,
+ "EDayViewMainItem::day_view", day_view,
+ "surface-width", 64,
+ "surface-height", 600,
+ NULL);
+ clutter_actor_set_reactive (day_view->main_canvas_item, TRUE);
+ //g_signal_connect (embed, "event", embed_event, day_view);
+ g_object_set_data (day_view->main_canvas_item, "stage", stage);
+ g_object_set_data (day_view->main_canvas_item, "embed", embed);
+
+ clutter_container_add_actor (stage, day_view->main_canvas_item);
+ clutter_actor_show (day_view->main_canvas_item);
+
+
+ /*day_view->main_canvas_item =
gnome_canvas_item_new (canvas_group,
e_day_view_main_item_get_type (),
"EDayViewMainItem::day_view", day_view,
NULL);
+*/
day_view->drag_rect_item =
gnome_canvas_item_new (canvas_group,
@@ -1240,28 +1325,45 @@ e_day_view_init (EDayView *day_view)
NULL);
gnome_canvas_item_hide (day_view->drag_item);
+
+ layout = GTK_LAYOUT (day_view->main_canvas);
+ adjustment = gtk_layout_get_vadjustment (layout);
+
/*
* Times Canvas
*/
day_view->time_canvas = e_canvas_new ();
- layout = GTK_LAYOUT (day_view->main_canvas);
- adjustment = gtk_layout_get_vadjustment (layout);
- layout = GTK_LAYOUT (day_view->time_canvas);
- gtk_layout_set_vadjustment (layout, adjustment);
+ gtk_layout_set_vadjustment (day_view->time_canvas, adjustment);
+ //gtk_layout_new (NULL, adjustment);
+ embed = gtk_clutter_embed_new ();
+ gtk_widget_show (embed);
+ gtk_container_add (day_view->time_canvas, embed);
+
+ g_signal_connect (day_view->time_canvas, "size-allocate", G_CALLBACK(set_canvas_size), day_view);
+
+
gtk_table_attach (GTK_TABLE (day_view), day_view->time_canvas,
0, 1, 1, 2,
GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
gtk_widget_show (day_view->time_canvas);
+
g_signal_connect_after (day_view->time_canvas, "scroll_event",
G_CALLBACK (e_day_view_on_time_canvas_scroll), day_view);
- canvas_group = GNOME_CANVAS_GROUP (GNOME_CANVAS (day_view->time_canvas)->root);
-
- day_view->time_canvas_item =
- gnome_canvas_item_new (canvas_group,
- e_day_view_time_item_get_type (),
- "EDayViewTimeItem::day_view", day_view,
- NULL);
+ stage = gtk_clutter_embed_get_stage ((GtkClutterEmbed *) embed);
+ g_object_set_data (day_view->time_canvas, "stage", stage);
+ g_object_set_data (day_view->time_canvas, "embed", embed);
+
+ day_view->time_canvas_item = g_object_new (
+ E_TYPE_DAY_VIEW_TIME_ITEM,
+ "EDayViewTimeItem::day_view", day_view,
+ "surface-width", 64,
+ "surface-height", 600,
+ NULL);
+ g_signal_connect (embed, "event", embed_event, day_view);
+
+ clutter_container_add_actor (stage, day_view->time_canvas_item);
+ clutter_actor_show (day_view->time_canvas_item);
/*
* Scrollbar.
@@ -1617,10 +1719,15 @@ e_day_view_style_set (GtkWidget *widget,
for (event_num = 0; event_num < day_view->events[week_day]->len; event_num++) {
event = &g_array_index (day_view->events[week_day], EDayViewEvent, event_num);
if (event->canvas_item) {
+ ClutterColor cc;
color = e_day_view_get_text_color (day_view, event, widget);
- gnome_canvas_item_set (event->canvas_item,
- "fill_color_gdk", &color,
- NULL);
+ cc.red = color.red;
+ cc.blue = color.blue;
+ cc.green = color.green;
+ //clutter_text_set_color (event->canvas_item, &cc);
+ //gnome_canvas_item_set (event->canvas_item,
+ // "fill_color_gdk", &color,
+ // NULL);
}
}
}
@@ -1938,7 +2045,8 @@ e_day_view_focus_in (GtkWidget *widget, GdkEventFocus *event)
#endif
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+// gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
return FALSE;
}
@@ -1961,7 +2069,8 @@ e_day_view_focus_out (GtkWidget *widget, GdkEventFocus *event)
#endif
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+// gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
return FALSE;
}
@@ -2044,6 +2153,27 @@ e_day_view_foreach_event_with_uid (EDayView *day_view,
}
}
+static void
+timeline_new_frame_cb (ClutterTimeline *timeline,
+ gint msec,
+ ClutterActor *actor)
+{
+ guint8 opacity = clutter_actor_get_opacity (actor);
+ int ox = GINT_TO_POINTER(g_object_get_data(actor, "orig-x"));
+ int oy = GINT_TO_POINTER(g_object_get_data(actor, "orig-y"));
+ gfloat w;
+ ClutterActor *parent = clutter_actor_get_parent (actor);
+
+ w = clutter_actor_get_width (parent);
+
+ clutter_actor_set_opacity (actor, 255 - (int)(255 * (((float)msec) / 500.0)));
+ clutter_actor_set_scale (actor, 1.0 - (1.0 * msec / 500.0), 1.0 - (1.0 * msec / 500.0));
+ clutter_actor_set_position (actor,
+ ox + ((w - ox) * (float)msec / 500.0),
+ oy - (oy * msec / 500.0));
+
+}
+
static gboolean
e_day_view_remove_event_cb (EDayView *day_view,
gint day,
@@ -2051,7 +2181,13 @@ e_day_view_remove_event_cb (EDayView *day_view,
gpointer data)
{
EDayViewEvent *event;
+ char *tmp = g_strdup_printf("%d-%d", day, event_num);
+ ClutterActor *actor = g_object_get_data (day_view, tmp);
+ gboolean dragged = FALSE;
+ gboolean resizing = FALSE;
+ g_object_set_data (day_view, tmp, NULL);
+ g_free(tmp);
#if 0
g_print ("In e_day_view_remove_event_cb day:%i event_num:%i\n",
day, event_num);
@@ -2074,6 +2210,10 @@ e_day_view_remove_event_cb (EDayView *day_view,
if (!event)
return TRUE;
+ dragged = (GPOINTER_TO_INT(g_object_get_data (event->canvas_item, "drag-is-actor"))) ? TRUE : FALSE;
+ resizing = (GPOINTER_TO_INT(g_object_get_data (event->canvas_item, "resize-event"))) ? TRUE : FALSE;
+
+ printf("DRAGGED ? %p : %d\n", event->canvas_item, dragged);
/* If we were editing this event, set editing_event_day to -1 so
on_editing_stopped doesn't try to update the event. */
if (day_view->editing_event_num == event_num && day_view->editing_event_day == day) {
@@ -2085,9 +2225,34 @@ e_day_view_remove_event_cb (EDayView *day_view,
day_view->popup_event_num = -1;
day_view->popup_event_day = -1;
}
-
- if (event->canvas_item)
- gtk_object_destroy (GTK_OBJECT (event->canvas_item));
+
+ if (resizing)
+ day_view->resize_actor = event->canvas_item;
+ if (!dragged && !resizing) {
+ ClutterTimeline *timeline = clutter_timeline_new (500);
+ gfloat x,y;
+
+ clutter_actor_get_position (actor, &x, &y);
+ g_signal_connect (timeline,
+ "new-frame", G_CALLBACK (timeline_new_frame_cb),
+ actor);
+ clutter_timeline_start (timeline);
+ g_object_set_data (actor, "orig-x", GINT_TO_POINTER((int)x));
+ g_object_set_data (actor, "orig-y", GINT_TO_POINTER((int)y));
+
+ #if 0
+ clutter_actor_animate (actor, /* the actor to animate */
+ CLUTTER_LINEAR, /* the easing mode */
+ 200, /* the duration of the animation */
+ "scale-x", 5.0, /* final horizontal scaling factor */
+ "scale-y", 5.0, /* final vertical scaling factor */
+ "opacity", 0,
+ //"signal::completed", clutter_actor_destroy, actor,
+ NULL);
+#endif
+ }
+ if (event->canvas_item && !dragged && !resizing)
+ clutter_actor_destroy ((event->canvas_item));
if (is_comp_data_valid (event))
g_object_unref (event->comp_data);
@@ -2189,10 +2354,11 @@ e_day_view_update_event_label (EDayView *day_view,
}
}
- gnome_canvas_item_set (event->canvas_item,
- "text", text,
- NULL);
+// gnome_canvas_item_set (event->canvas_item,
+// "text", text,
+// NULL);
+ clutter_text_set_text (event->canvas_item, text);
if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
&& e_cal_util_component_has_attendee (event->comp_data->icalcomp))
set_text_as_bold (event);
@@ -2221,10 +2387,11 @@ e_day_view_update_long_event_label (EDayView *day_view,
summary = e_calendar_view_get_icalcomponent_summary (event->comp_data->client, event->comp_data->icalcomp, &free_text);
- gnome_canvas_item_set (event->canvas_item,
- "text", summary ? summary : "",
- NULL);
-
+// gnome_canvas_item_set (event->canvas_item,
+// "text", summary ? summary : "",
+// NULL);
+ clutter_text_set_text (event->canvas_item, summary ? summary : "");
+
if (free_text)
g_free ((gchar *)summary);
@@ -2393,7 +2560,9 @@ e_day_view_set_selected_time_range_in_top_visible (EDayView *day_view,
if (need_redraw) {
gtk_widget_queue_draw (day_view->top_canvas);
gtk_widget_queue_draw (day_view->top_dates_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ // gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+
}
}
@@ -2448,7 +2617,9 @@ e_day_view_set_selected_time_range_visible (EDayView *day_view,
if (need_redraw) {
gtk_widget_queue_draw (day_view->top_canvas);
gtk_widget_queue_draw (day_view->top_dates_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ // gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+
}
}
@@ -2554,7 +2725,9 @@ e_day_view_set_selected_time_range (ECalendarView *cal_view,
if (need_redraw) {
gtk_widget_queue_draw (day_view->top_canvas);
gtk_widget_queue_draw (day_view->top_dates_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ //gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+
}
}
@@ -2751,10 +2924,18 @@ e_day_view_set_mins_per_row (EDayView *day_view,
/* We must layout the events before updating the scroll region, since
that will result in a redraw which would crash otherwise. */
e_day_view_check_layout (day_view);
- gtk_widget_queue_draw (day_view->time_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+// gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
e_day_view_update_scroll_regions (day_view);
+ {
+ int h;
+ GtkWidget *embed = g_object_get_data (day_view->time_canvas, "embed");
+
+ gtk_layout_get_size ((GtkLayout *)day_view->main_canvas, NULL, &h);
+ gtk_layout_set_size ((GtkLayout *)day_view->time_canvas, -1, h);
+ gtk_widget_set_size_request (embed, -1, h);
+ }
}
/* This specifies the working days in the week. The value is a bitwise
@@ -2783,7 +2964,8 @@ e_day_view_set_working_days (EDayView *day_view,
/* We have to do this, as the new working days may have no effect on
the days shown, but we still want the background color to change. */
- gtk_widget_queue_draw (day_view->main_canvas);
+// gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
g_object_notify (G_OBJECT (day_view), "working-days");
}
@@ -2846,7 +3028,8 @@ e_day_view_set_work_day_start_hour (EDayView *day_view,
day_view->work_day_start_hour = work_day_start_hour;
- gtk_widget_queue_draw (day_view->main_canvas);
+// gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
g_object_notify (G_OBJECT (day_view), "work-day-start-hour");
}
@@ -2867,7 +3050,8 @@ e_day_view_set_work_day_start_minute (EDayView *day_view,
day_view->work_day_start_minute = work_day_start_minute;
- gtk_widget_queue_draw (day_view->main_canvas);
+// gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
g_object_notify (G_OBJECT (day_view), "work-day-start-minute");
}
@@ -2888,7 +3072,8 @@ e_day_view_set_work_day_end_hour (EDayView *day_view,
day_view->work_day_end_hour = work_day_end_hour;
- gtk_widget_queue_draw (day_view->main_canvas);
+// gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
g_object_notify (G_OBJECT (day_view), "work-day-end-hour");
}
@@ -2909,18 +3094,23 @@ e_day_view_set_work_day_end_minute (EDayView *day_view,
day_view->work_day_end_minute = work_day_end_minute;
- gtk_widget_queue_draw (day_view->main_canvas);
+// gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
g_object_notify (G_OBJECT (day_view), "work-day-end-minute");
}
/* Force a redraw of the Marcus Bains Lines */
+
+
void
e_day_view_marcus_bains_update (EDayView *day_view)
{
g_return_if_fail (E_IS_DAY_VIEW (day_view));
- gtk_widget_queue_draw (day_view->main_canvas);
- gtk_widget_queue_draw (day_view->time_canvas);
+ //gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ e_day_view_time_item_redraw (day_view->time_canvas_item);
+// gtk_widget_queue_draw (day_view->time_canvas);
}
gboolean
@@ -3065,17 +3255,21 @@ e_day_view_update_scroll_regions (EDayView *day_view)
gtk_widget_get_allocation (
day_view->time_canvas, &time_canvas_allocation);
+#if 0
/* Set the scroll region of the time canvas to its allocated width,
but with the height the same as the main canvas. */
gnome_canvas_get_scroll_region (
GNOME_CANVAS (day_view->time_canvas),
NULL, NULL, &old_x2, &old_y2);
new_x2 = time_canvas_allocation.width - 1;
+#endif
new_y2 = MAX (day_view->rows * day_view->row_height,
main_canvas_allocation.height) - 1;
+#if 0
if (old_x2 != new_x2 || old_y2 != new_y2)
gnome_canvas_set_scroll_region (GNOME_CANVAS (day_view->time_canvas),
0, 0, new_x2, new_y2);
+#endif
/* Set the scroll region of the main canvas to its allocated width,
but with the height depending on the number of rows needed. */
@@ -3172,9 +3366,12 @@ e_day_view_on_top_canvas_button_press (GtkWidget *widget,
/* Convert the coords to the main canvas window, or return if the
window is not found. */
- if (!e_day_view_convert_event_coords (
- day_view, (GdkEvent*) event, window, &event_x, &event_y))
- return FALSE;
+ //if (!e_day_view_convert_event_coords (
+ // day_view, (GdkEvent*) event, window, &event_x, &event_y))
+ // return FALSE;
+
+ event_x = (int)event->x;
+ event_y = (int)event->y;
pos = e_day_view_convert_position_in_top_canvas (day_view,
event_x, event_y,
@@ -3237,7 +3434,7 @@ e_day_view_on_top_canvas_button_press (GtkWidget *widget,
static gboolean
e_day_view_convert_event_coords (EDayView *day_view,
- GdkEvent *event,
+ ClutterEvent *event,
GdkWindow *window,
gint *x_return,
gint *y_return)
@@ -3247,30 +3444,30 @@ e_day_view_convert_event_coords (EDayView *day_view,
/* Get the event window, x & y from the appropriate event struct. */
switch (event->type) {
- case GDK_BUTTON_PRESS:
- case GDK_2BUTTON_PRESS:
- case GDK_3BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
+ case CLUTTER_BUTTON_PRESS:
+// case GDK_2BUTTON_PRESS:
+// case GDK_3BUTTON_PRESS:
+ case CLUTTER_BUTTON_RELEASE:
event_x = event->button.x;
event_y = event->button.y;
- event_window = event->button.window;
+ //event_window = event->button.window;
break;
- case GDK_MOTION_NOTIFY:
+ case CLUTTER_MOTION:
event_x = event->motion.x;
event_y = event->motion.y;
- event_window = event->motion.window;
+ //event_window = event->motion.window;
break;
- case GDK_ENTER_NOTIFY:
- case GDK_LEAVE_NOTIFY:
+ case CLUTTER_ENTER:
+ case CLUTTER_LEAVE:
event_x = event->crossing.x;
event_y = event->crossing.y;
- event_window = event->crossing.window;
+ //event_window = event->crossing.window;
break;
default:
/* Shouldn't get here. */
g_return_val_if_reached (FALSE);
}
-
+/*
while (event_window && event_window != window
&& event_window != gdk_get_default_root_window ()) {
gdk_window_get_position (event_window, &win_x, &win_y);
@@ -3278,14 +3475,14 @@ e_day_view_convert_event_coords (EDayView *day_view,
event_y += win_y;
event_window = gdk_window_get_parent (event_window);
}
-
+*/
*x_return = event_x;
*y_return = event_y;
- if (event_window != window)
- g_warning ("Couldn't find event window\n");
+// if (event_window != window)
+// g_warning ("Couldn't find event window\n");
- return (event_window == window) ? TRUE : FALSE;
+ return TRUE;// (event_window == window) ? TRUE : FALSE;
}
static gboolean
@@ -3297,6 +3494,7 @@ e_day_view_on_main_canvas_button_press (GtkWidget *widget,
ECalendarViewPosition pos;
GtkLayout *layout;
GdkWindow *window;
+ EDayViewEvent *e;
#if 0
g_print ("In e_day_view_on_main_canvas_button_press\n");
@@ -3313,13 +3511,15 @@ e_day_view_on_main_canvas_button_press (GtkWidget *widget,
/* Convert the coords to the main canvas window, or return if the
window is not found. */
- if (!e_day_view_convert_event_coords (
- day_view, (GdkEvent*) event, window, &event_x, &event_y))
- return FALSE;
+ //if (!e_day_view_convert_event_coords (
+ // day_view, (GdkEvent*) event, window, &event_x, &event_y))
+ // return FALSE;
+ event_x = (int)event->x;
+ event_y = (int)event->y;
/* Find out where the mouse is. */
pos = e_day_view_convert_position_in_main_canvas (day_view,
- event_x, event_y,
+ (int )event->x,(int) event->y,
&day, &row,
&event_num);
@@ -3331,8 +3531,15 @@ e_day_view_on_main_canvas_button_press (GtkWidget *widget,
event_num, event, pos,
event_x, event_y);
+ if (day_view->editing_event_day != -1 &&
+ day_view->editing_event_num != -1) {
+ e = &g_array_index (day_view->events[day_view->editing_event_day], EDayViewEvent, day_view->editing_event_num);
+ g_object_set_data (e->canvas_item, "editing", FALSE);
+ printf("Editing stopped\n");
+ e_day_view_on_editing_stopped (day_view, NULL);
+ }
e_day_view_stop_editing_event (day_view);
-
+
/* Start the selection drag. */
if (event->button == 1) {
if (event->type == GDK_2BUTTON_PRESS) {
@@ -3543,12 +3750,14 @@ e_day_view_on_long_event_click (EDayView *day_view,
return;
/* Ignore clicks on the EText while editing. */
+#warning "fixit"
+/*
if (pos == E_CALENDAR_VIEW_POS_EVENT
&& E_TEXT (event->canvas_item)->editing) {
GNOME_CANVAS_ITEM_GET_CLASS (event->canvas_item)->event (event->canvas_item, (GdkEvent*)bevent);
return;
}
-
+*/
if ((e_cal_util_component_is_instance (event->comp_data->icalcomp) ||
!e_cal_util_component_has_recurrences (event->comp_data->icalcomp))
&& (pos == E_CALENDAR_VIEW_POS_LEFT_EDGE
@@ -3579,7 +3788,7 @@ e_day_view_on_long_event_click (EDayView *day_view,
day_view->resize_end_row = end_day;
/* Raise the event's item, above the rect as well. */
- gnome_canvas_item_raise_to_top (event->canvas_item);
+ clutter_actor_raise_top (event->canvas_item);
}
} else if (e_day_view_get_long_event_position (day_view, event_num,
&start_day, &end_day,
@@ -3623,13 +3832,14 @@ e_day_view_on_event_click (EDayView *day_view,
if (!is_comp_data_valid (event))
return;
+#warning "fix it"
/* Ignore clicks on the EText while editing. */
- if (pos == E_CALENDAR_VIEW_POS_EVENT
+/* if (pos == E_CALENDAR_VIEW_POS_EVENT
&& E_TEXT (event->canvas_item)->editing) {
GNOME_CANVAS_ITEM_GET_CLASS (event->canvas_item)->event (event->canvas_item, (GdkEvent*)bevent);
return;
}
-
+*/
if ((e_cal_util_component_is_instance (event->comp_data->icalcomp) ||
!e_cal_util_component_has_recurrences (event->comp_data->icalcomp))
&& (pos == E_CALENDAR_VIEW_POS_TOP_EDGE
@@ -3667,7 +3877,7 @@ e_day_view_on_event_click (EDayView *day_view,
e_day_view_reshape_main_canvas_resize_bars (day_view);
/* Raise the event's item, above the rect as well. */
- gnome_canvas_item_raise_to_top (event->canvas_item);
+ clutter_actor_raise_top (event->canvas_item);
}
} else {
@@ -3805,7 +4015,9 @@ e_day_view_update_query (EDayView *day_view)
gtk_widget_queue_draw (day_view->top_canvas);
gtk_widget_queue_draw (day_view->top_dates_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ //gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+
e_day_view_free_events (day_view);
e_day_view_queue_layout (day_view);
@@ -3921,10 +4133,12 @@ e_day_view_on_top_canvas_motion (GtkWidget *widget,
/* Convert the coords to the main canvas window, or return if the
window is not found. */
- if (!e_day_view_convert_event_coords (
- day_view, (GdkEvent*) mevent, window, &event_x, &event_y))
- return FALSE;
+ //if (!e_day_view_convert_event_coords (
+ // day_view, (GdkEvent*) mevent, window, &event_x, &event_y))
+ // return FALSE;
+ event_x = mevent->x;
+ event_y = mevent->y;
canvas_x = event_x;
canvas_y = event_y;
@@ -4035,10 +4249,12 @@ e_day_view_on_main_canvas_motion (GtkWidget *widget,
/* Convert the coords to the main canvas window, or return if the
window is not found. */
- if (!e_day_view_convert_event_coords (
- day_view, (GdkEvent*) mevent, window, &event_x, &event_y))
- return FALSE;
+ //if (!e_day_view_convert_event_coords (
+ // day_view, (GdkEvent*) mevent, window, &event_x, &event_y))
+ // return FALSE;
+ event_x = mevent->x;
+ event_y = mevent->y;
canvas_x = event_x;
canvas_y = event_y;
@@ -4158,7 +4374,8 @@ e_day_view_start_selection (EDayView *day_view,
/* FIXME: Optimise? */
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+// gtk_widget_queue_draw (day_view->main_canvas);
}
/* Updates the selection during a drag. If day is -1 the selection day is
@@ -4202,7 +4419,8 @@ e_day_view_update_selection (EDayView *day_view,
/* FIXME: Optimise? */
if (need_redraw) {
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
}
}
@@ -4319,7 +4537,9 @@ e_day_view_update_resize (EDayView *day_view,
if (need_reshape) {
e_day_view_reshape_day_event (day_view, day, event_num);
e_day_view_reshape_main_canvas_resize_bars (day_view);
- gtk_widget_queue_draw (day_view->main_canvas);
+ //gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+
}
}
@@ -4468,6 +4688,10 @@ e_day_view_finish_resize (EDayView *day_view)
if (!is_comp_data_valid (event))
return;
+ g_object_set_data (event->canvas_item, "resize-event", GINT_TO_POINTER(TRUE));
+ char *tmp = g_strdup_printf ("%d-%d", day, event_num);
+ day_view->resize_draw_actor = g_object_get_data (day_view, tmp);
+
client = event->comp_data->client;
/* We use a temporary shallow copy of the ico since we don't want to
@@ -4575,7 +4799,8 @@ e_day_view_abort_resize (EDayView *day_view)
} else {
e_day_view_reshape_day_event (day_view, day, event_num);
e_day_view_reshape_main_canvas_resize_bars (day_view);
- gtk_widget_queue_draw (day_view->main_canvas);
+ // gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
day_view->last_cursor_set_in_main_canvas = day_view->normal_cursor;
window = gtk_widget_get_window (day_view->main_canvas);
@@ -4614,7 +4839,7 @@ e_day_view_free_event_array (EDayView *day_view,
for (event_num = 0; event_num < array->len; event_num++) {
event = &g_array_index (array, EDayViewEvent, event_num);
if (event->canvas_item)
- gtk_object_destroy (GTK_OBJECT (event->canvas_item));
+ clutter_actor_destroy ((event->canvas_item));
if (is_comp_data_valid (event))
g_object_unref (event->comp_data);
@@ -4675,6 +4900,15 @@ e_day_view_add_event (ECalComponent *comp,
event.comp_data->instance_start = start;
event.comp_data->instance_end = end;
+ if (add_event_data->day_view->drag_move) {
+ event.canvas_item = add_event_data->day_view->drag_move;
+ add_event_data->day_view->drag_move = NULL;
+ printf("WHILE ADDING %p %p\n", &event, event.canvas_item);
+ } else if (add_event_data->day_view->resize_actor) {
+ event.canvas_item = add_event_data->day_view->resize_actor;
+ add_event_data->day_view->resize_actor = NULL;
+ }
+
/* Calculate the start & end minute, relative to the top of the
display. */
offset = add_event_data->day_view->first_hour_shown * 60
@@ -4690,7 +4924,6 @@ e_day_view_add_event (ECalComponent *comp,
event.comp_data->client,
e_calendar_view_get_timezone (E_CALENDAR_VIEW (add_event_data->day_view))))
event.different_timezone = TRUE;
-
if (!e_cal_component_has_attendees (comp) || itip_organizer_is_user (comp, event.comp_data->client) || itip_sentby_is_user (comp, event.comp_data->client))
event.is_editable = TRUE;
else
@@ -4807,7 +5040,7 @@ e_day_view_reshape_long_events (EDayView *day_view)
if (event->num_columns == 0) {
if (event->canvas_item) {
- gtk_object_destroy (GTK_OBJECT (event->canvas_item));
+ clutter_actor_destroy ((event->canvas_item));
event->canvas_item = NULL;
}
} else {
@@ -4841,7 +5074,7 @@ e_day_view_reshape_long_event (EDayView *day_view,
&item_x, &item_y,
&item_w, &item_h)) {
if (event->canvas_item) {
- gtk_object_destroy (GTK_OBJECT (event->canvas_item));
+ clutter_actor_destroy ((event->canvas_item));
event->canvas_item = NULL;
}
return;
@@ -4895,13 +5128,28 @@ e_day_view_reshape_long_event (EDayView *day_view,
if (!event->canvas_item) {
GtkWidget *widget;
GdkColor color;
-
+ ClutterColor ccolor;
widget = (GtkWidget *)day_view;
+ ClutterActor *stage = g_object_get_data (day_view->main_canvas_item, "stage");
color = e_day_view_get_text_color (day_view, event, widget);
-
- event->canvas_item =
- gnome_canvas_item_new (GNOME_CANVAS_GROUP (GNOME_CANVAS (day_view->top_canvas)->root),
+ ccolor.red = color.red;
+ ccolor.blue = color.blue;
+ ccolor.green = color.green;
+
+ event->canvas_item = clutter_text_new ();
+ clutter_actor_set_reactive (event->canvas_item, TRUE);
+
+ clutter_text_set_cursor_visible (event->canvas_item, FALSE);
+ clutter_actor_show (event->canvas_item);
+ clutter_text_set_ellipsize (event->canvas_item, PANGO_ELLIPSIZE_END);
+ clutter_text_set_editable (event->canvas_item, TRUE);
+ clutter_text_set_line_wrap (event->canvas_item, TRUE);
+ clutter_text_set_single_line_mode (event->canvas_item, FALSE);
+ //clutter_text_set_color (event->canvas_item, &ccolor);
+ clutter_container_add_actor (stage, event->canvas_item);
+ clutter_actor_raise_top (event->canvas_item);
+ /*gnome_canvas_item_new (GNOME_CANVAS_GROUP (GNOME_CANVAS (day_view->top_canvas)->root),
e_text_get_type (),
"anchor", GTK_ANCHOR_NW,
"clip", TRUE,
@@ -4911,7 +5159,7 @@ e_day_view_reshape_long_event (EDayView *day_view,
"draw_background", FALSE,
"fill_color_gdk", &color,
"im_context", E_CANVAS (day_view->top_canvas)->im_context,
- NULL);
+ NULL);*/
g_object_set_data (G_OBJECT (event->canvas_item), "event-num", GINT_TO_POINTER (event_num));
g_object_set_data (G_OBJECT (event->canvas_item), "event-day", GINT_TO_POINTER (E_DAY_VIEW_LONG_EVENT));
g_signal_connect (event->canvas_item, "event",
@@ -4973,8 +5221,9 @@ e_day_view_reshape_long_event (EDayView *day_view,
"clip_width", (gdouble) text_w,
"clip_height", (gdouble) item_h,
NULL);
- e_canvas_item_move_absolute(event->canvas_item,
- text_x, item_y);
+
+ //e_canvas_item_move_absolute(event->canvas_item,
+ clutter_actor_set_position (event->canvas_item, text_x, item_y);
g_object_unref (layout);
g_object_unref (comp);
@@ -5006,7 +5255,8 @@ e_day_view_reshape_day_events (EDayView *day_view,
}
if (strncmp (current_comp_string, day_view->last_edited_comp_string,50) == 0) {
- e_canvas_item_grab_focus (event->canvas_item, TRUE);
+ //e_canvas_item_grab_focus (event->canvas_item, TRUE);
+ clutter_actor_grab_key_focus (event->canvas_item);
g_free (day_view->last_edited_comp_string);
day_view-> last_edited_comp_string = NULL;
}
@@ -5015,6 +5265,9 @@ e_day_view_reshape_day_events (EDayView *day_view,
}
static void
+cancel_editing (EDayView *day_view);
+
+static void
e_day_view_reshape_day_event (EDayView *day_view,
gint day,
gint event_num)
@@ -5033,7 +5286,7 @@ e_day_view_reshape_day_event (EDayView *day_view,
&item_x, &item_y,
&item_w, &item_h)) {
if (event->canvas_item) {
- gtk_object_destroy (GTK_OBJECT (event->canvas_item));
+ clutter_actor_destroy ((event->canvas_item));
event->canvas_item = NULL;
}
} else {
@@ -5079,6 +5332,26 @@ e_day_view_reshape_day_event (EDayView *day_view,
icons_offset = E_DAY_VIEW_ICON_X_PAD;
}
+ if (event->canvas_item &&
+ day_view->drag_actor) {
+ char *tmp = g_strdup_printf ("%d-%d", day, event_num);
+ g_object_set_data (day_view, tmp, day_view->drag_actor);
+ day_view->drag_actor = NULL;
+ g_object_set_data (event->canvas_item, "drag-end", GINT_TO_POINTER(TRUE));
+
+ printf("DRAG %p \n", event->canvas_item);
+ cancel_editing (day_view);
+ g_object_set_data (event->canvas_item, "editing", GINT_TO_POINTER(FALSE));
+ e_day_view_on_editing_stopped (day_view, NULL);
+
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ } else if (event->canvas_item &&
+ day_view->resize_draw_actor) {
+ char *tmp = g_strdup_printf ("%d-%d", day, event_num);
+ g_object_set_data (day_view, tmp, day_view->resize_draw_actor);
+ day_view->resize_draw_actor = NULL;
+ }
+
if (!event->canvas_item) {
GtkWidget *widget;
GdkColor color;
@@ -5087,8 +5360,8 @@ e_day_view_reshape_day_event (EDayView *day_view,
color = e_day_view_get_text_color (day_view, event, widget);
- event->canvas_item =
- gnome_canvas_item_new (GNOME_CANVAS_GROUP (GNOME_CANVAS (day_view->main_canvas)->root),
+ //event->canvas_item =
+/* gnome_canvas_item_new (GNOME_CANVAS_GROUP (GNOME_CANVAS (day_view->main_canvas)->root),
e_text_get_type (),
"anchor", GTK_ANCHOR_NW,
"line_wrap", TRUE,
@@ -5098,7 +5371,26 @@ e_day_view_reshape_day_event (EDayView *day_view,
"draw_background", FALSE,
"fill_color_gdk", &color,
"im_context", E_CANVAS (day_view->main_canvas)->im_context,
- NULL);
+ NULL); */
+ ClutterActor *stage = g_object_get_data (day_view->main_canvas_item, "stage");
+ ClutterColor ccolor;
+ ccolor.red = color.red;
+ ccolor.blue = color.blue;
+ ccolor.green = color.green;
+
+ event->canvas_item = clutter_text_new ();
+ clutter_actor_set_reactive (event->canvas_item, TRUE);
+ clutter_text_set_cursor_visible (event->canvas_item, FALSE);
+ clutter_actor_show (event->canvas_item);
+ clutter_text_set_ellipsize (event->canvas_item, PANGO_ELLIPSIZE_END);
+ clutter_text_set_editable (event->canvas_item, TRUE);
+ clutter_text_set_line_wrap (event->canvas_item, TRUE);
+ clutter_text_set_line_wrap_mode (event->canvas_item, PANGO_WRAP_WORD_CHAR);
+ clutter_text_set_single_line_mode (event->canvas_item, FALSE);
+ //clutter_text_set_color (event->canvas_item, &ccolor);
+ clutter_container_add_actor (stage, event->canvas_item);
+ clutter_actor_raise_top (event->canvas_item);
+
g_object_set_data (G_OBJECT (event->canvas_item), "event-num", GINT_TO_POINTER (event_num));
g_object_set_data (G_OBJECT (event->canvas_item), "event-day", GINT_TO_POINTER (day));
g_signal_connect (event->canvas_item, "event",
@@ -5109,14 +5401,18 @@ e_day_view_reshape_day_event (EDayView *day_view,
e_day_view_update_event_label (day_view, day, event_num);
}
+
item_w = MAX (item_w, 0);
gnome_canvas_item_set (event->canvas_item,
"clip_width", (gdouble) item_w,
"clip_height", (gdouble) item_h,
- "x_offset", (gdouble) icons_offset,
+ // "x_offset", (gdouble) icons_offset,
NULL);
- e_canvas_item_move_absolute(event->canvas_item,
- item_x, item_y);
+ clutter_actor_set_clip (event->canvas_item, 0, 0, item_w, item_h);
+ clutter_actor_set_size (event->canvas_item, item_w, item_h);
+ g_object_set_data (event->canvas_item, "x_offset", (int)icons_offset);
+ //e_canvas_item_move_absolute(event->canvas_item, item_x, item_y);
+ clutter_actor_set_position (event->canvas_item, item_x, item_y);
}
}
@@ -5154,7 +5450,8 @@ e_day_view_reshape_main_canvas_resize_bars (EDayView *day_view)
w = item_w - E_DAY_VIEW_BAR_WIDTH;
h = item_h;
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
} else {
return;
}
@@ -5276,7 +5573,8 @@ e_day_view_add_new_event_in_selected_range (EDayView *day_view, GdkEventKey *key
e_day_view_add_event (comp, dtstart, dtend, &add_event_data);
e_day_view_check_layout (day_view);
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ //gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
if (!e_day_view_find_event_from_uid (day_view, ecal, uid, NULL, &day, &event_num)) {
g_warning ("Couldn't find event to start editing.\n");
@@ -5297,6 +5595,7 @@ e_day_view_do_key_press (GtkWidget *widget, GdkEventKey *event)
guint keyval;
gboolean stop_emission;
+ printf("e_day_view_do_key_press\n");
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (E_IS_DAY_VIEW (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
@@ -5430,11 +5729,12 @@ e_day_view_key_press (GtkWidget *widget, GdkEventKey *event)
{
gboolean handled = FALSE;
handled = e_day_view_do_key_press (widget, event);
-
+ handled = FALSE;
/* if not handled, try key bindings */
if (!handled)
handled = GTK_WIDGET_CLASS (e_day_view_parent_class)->key_press_event (widget, event);
- return handled;
+ printf("handled %d\n", handled);
+ return ;
}
/* Select the time that begins a work day*/
@@ -5460,7 +5760,8 @@ e_day_view_goto_start_of_work_day (EDayView *day_view)
gtk_widget_queue_draw (day_view->top_canvas);
gtk_widget_queue_draw (day_view->top_dates_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ // gtk_widget_queue_draw (day_view->main_canvas);
}
/* Select the time that ends a work day*/
@@ -5484,7 +5785,8 @@ e_day_view_goto_end_of_work_day (EDayView *day_view)
gtk_widget_queue_draw (day_view->top_canvas);
gtk_widget_queue_draw (day_view->top_dates_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
}
/* Change the duration to the time that begins the current work day */
@@ -5517,7 +5819,8 @@ e_day_view_change_duration_to_start_of_work_day (EDayView *day_view)
gtk_widget_queue_draw (day_view->top_canvas);
gtk_widget_queue_draw (day_view->top_dates_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
}
/* Change the duration to the time that ends the current work day */
@@ -5552,7 +5855,8 @@ e_day_view_change_duration_to_end_of_work_day (EDayView *day_view)
gtk_widget_queue_draw (day_view->top_canvas);
gtk_widget_queue_draw (day_view->top_dates_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ // gtk_widget_queue_draw (day_view->main_canvas);
}
static void
@@ -5581,7 +5885,9 @@ e_day_view_cursor_key_up_shifted (EDayView *day_view, GdkEventKey *event)
/* FIXME: Optimise? */
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+
+// gtk_widget_queue_draw (day_view->main_canvas);
}
static gboolean
@@ -5863,7 +6169,8 @@ e_day_view_cursor_key_down_shifted (EDayView *day_view, GdkEventKey *event)
/* FIXME: Optimise? */
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
}
static void
@@ -5887,7 +6194,8 @@ e_day_view_cursor_key_left_shifted (EDayView *day_view, GdkEventKey *event)
/* FIXME: Optimise? */
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
}
static void
@@ -5911,7 +6219,8 @@ e_day_view_cursor_key_right_shifted (EDayView *day_view, GdkEventKey *event)
/* FIXME: Optimise? */
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
}
static void
@@ -5943,7 +6252,8 @@ e_day_view_cursor_key_up (EDayView *day_view, GdkEventKey *event)
/* FIXME: Optimise? */
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
}
static void
@@ -5975,7 +6285,8 @@ e_day_view_cursor_key_down (EDayView *day_view, GdkEventKey *event)
/* FIXME: Optimise? */
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ // gtk_widget_queue_draw (day_view->main_canvas);
}
static void
@@ -5991,7 +6302,8 @@ e_day_view_cursor_key_left (EDayView *day_view, GdkEventKey *event)
/* FIXME: Optimise? */
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
}
g_signal_emit_by_name (day_view, "selected_time_changed");
}
@@ -6009,7 +6321,8 @@ e_day_view_cursor_key_right (EDayView *day_view, GdkEventKey *event)
/* FIXME: Optimise? */
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
}
g_signal_emit_by_name (day_view, "selected_time_changed");
}
@@ -6145,7 +6458,7 @@ e_day_view_start_editing_event (EDayView *day_view,
grabbing the focus will result in a call to
e_day_view_on_editing_started(), which will reset the text to get
rid of the start and end times. */
- e_canvas_item_grab_focus (event->canvas_item, TRUE);
+ //e_canvas_item_grab_focus (event->canvas_item, TRUE);
if (key_event) {
if (gtk_im_context_filter_keypress (((EText *)(event->canvas_item))->im_context, key_event)) {
@@ -6154,10 +6467,11 @@ e_day_view_start_editing_event (EDayView *day_view,
else {
gchar *initial_text;
- initial_text = e_utf8_from_gtk_event_key (GTK_WIDGET (day_view), key_event->keyval, key_event->string);
+ initial_text = e_utf8_from_gtk_event_key (GTK_WIDGET (day_view), key_event->keyval, key_event->string); /*
gnome_canvas_item_set (event->canvas_item,
"text", initial_text,
- NULL);
+ NULL); */
+ clutter_text_set_text (event->canvas_item, initial_text);
if (initial_text)
g_free (initial_text);
}
@@ -6223,10 +6537,12 @@ cancel_editing (EDayView *day_view)
/* Reset the text to what was in the component */
summary = icalcomponent_get_summary (event->comp_data->icalcomp);
+ clutter_text_set_text (event->canvas_item, summary ? summary : "");
+ /*
g_object_set (G_OBJECT (event->canvas_item),
"text", summary ? summary : "",
NULL);
-
+*/
/* Stop editing */
e_day_view_stop_editing_event (day_view);
}
@@ -6278,11 +6594,13 @@ tooltip_destroy (EDayView *day_view, GnomeCanvasItem *item)
static gboolean
e_day_view_on_text_item_event (GnomeCanvasItem *item,
- GdkEvent *event,
+ ClutterEvent *event,
EDayView *day_view)
{
+ //printf("EVEENT %p\n", item);
switch (event->type) {
- case GDK_KEY_PRESS:
+ case CLUTTER_KEY_PRESS:
+ printf("KEYPRESS\n");
tooltip_destroy (day_view, item);
if (!E_TEXT (item)->preedit_len && event && event->key.keyval == GDK_Return) {
day_view->resize_event_num = -1;
@@ -6290,58 +6608,85 @@ e_day_view_on_text_item_event (GnomeCanvasItem *item,
/* We set the keyboard focus to the EDayView, so the
EText item loses it and stops the edit. */
gtk_widget_grab_focus (GTK_WIDGET (day_view));
-
+ g_object_set_data (item, "editing", GINT_TO_POINTER(FALSE));
+ e_day_view_on_editing_stopped (day_view, item);
+ clutter_ungrab_keyboard ();
+
/* Stop the signal last or we will also stop any
other events getting to the EText item. */
g_signal_stop_emission_by_name (item, "event");
return TRUE;
} else if (event->key.keyval == GDK_Escape) {
cancel_editing (day_view);
+ g_object_set_data (item, "editing", GINT_TO_POINTER(FALSE));
+ e_day_view_on_editing_stopped (day_view, item);
+ clutter_ungrab_keyboard ();
+
g_signal_stop_emission_by_name (item, "event");
/* focus should go to day view when stop editing */
gtk_widget_grab_focus (GTK_WIDGET (day_view));
return TRUE;
} else if ((event->key.keyval == GDK_Up)
- && (event->key.state & GDK_SHIFT_MASK)
- && (event->key.state & GDK_CONTROL_MASK)
- && !(event->key.state & GDK_MOD1_MASK)) {
+ && (event->key.modifier_state & CLUTTER_SHIFT_MASK)
+ && (event->key.modifier_state & CLUTTER_CONTROL_MASK)
+ && !(event->key.modifier_state & CLUTTER_MOD1_MASK)) {
e_day_view_change_event_end_time_up (day_view);
return TRUE;
} else if ((event->key.keyval == GDK_Down)
- && (event->key.state & GDK_SHIFT_MASK)
- && (event->key.state & GDK_CONTROL_MASK)
- && !(event->key.state & GDK_MOD1_MASK)) {
+ && (event->key.modifier_state & CLUTTER_SHIFT_MASK)
+ && (event->key.modifier_state & CLUTTER_CONTROL_MASK)
+ && !(event->key.modifier_state & CLUTTER_MOD1_MASK)) {
e_day_view_change_event_end_time_down (day_view);
return TRUE;
- }
- break;
- case GDK_2BUTTON_PRESS:
+ } else {
+ clutter_actor_grab_key_focus (item);
+ clutter_grab_keyboard (item);
+ } break;
+/* case GDK_2BUTTON_PRESS:
#if 0
g_print ("Item got double-click\n");
#endif
break;
-
- case GDK_BUTTON_RELEASE:
+*/
+ case CLUTTER_BUTTON_RELEASE:
if (day_view->resize_event_num != -1)
day_view->resize_event_num = -1;
if (day_view->drag_event_num != -1)
day_view->drag_event_num = -1;
- case GDK_BUTTON_PRESS:
+ case CLUTTER_BUTTON_PRESS:
tooltip_destroy (day_view, item);
+ {
+ gboolean editing = (GPOINTER_TO_INT(g_object_get_data (item, "editing"))) ? TRUE : FALSE;
+
+ if (!editing) {
+
+ g_object_set_data (item, "editing", GINT_TO_POINTER(!editing));
+ e_day_view_on_editing_started (day_view, item);
+ clutter_actor_grab_key_focus (item);
+ clutter_grab_keyboard (item);
+ }
+ g_object_set_data (item, "click-x", GINT_TO_POINTER((int)((ClutterButtonEvent *)event)->x));
+ g_object_set_data (item, "click-y", GINT_TO_POINTER((int)((ClutterButtonEvent *)event)->y));
+
+ printf("Clicked at %lf %lf\n", ((ClutterButtonEvent *)event)->x, ((ClutterButtonEvent *)event)->y);//else
+ // e_day_view_on_editing_stopped (day_view, item);
+
+ }
/* Only let the EText handle the event while editing. */
- if (!E_TEXT (item)->editing)
- g_signal_stop_emission_by_name (item, "event");
+ //if (!E_TEXT (item)->editing)
+ // g_signal_stop_emission_by_name (item, "event");
+ return TRUE;
break;
- case GDK_FOCUS_CHANGE:
- if (event->focus_change.in)
+ //case GDK_FOCUS_CHANGE:
+ /*if (event->focus_change.in)
e_day_view_on_editing_started (day_view, item);
else
e_day_view_on_editing_stopped (day_view, item);
-
- return FALSE;
- case GDK_ENTER_NOTIFY:
+*/
+ // return FALSE;
+ case CLUTTER_ENTER:
{
EDayViewEvent *pevent;
ECalendarViewEventData *data;
@@ -6350,6 +6695,7 @@ e_day_view_on_text_item_event (GnomeCanvasItem *item,
gboolean main_canvas = TRUE;
GdkWindow *window;
GtkLayout *layout;
+ gfloat xp, yp;
if (day_view->editing_event_num != -1)
break;
@@ -6378,6 +6724,10 @@ e_day_view_on_text_item_event (GnomeCanvasItem *item,
return FALSE;
}
}
+
+ clutter_actor_get_position (item, &xp, &yp);
+ event_x += (int)xp;
+ event_y += (int)yp;
/* Find out where the mouse is. */
if (main_canvas) {
pos = e_day_view_convert_position_in_main_canvas (day_view,
@@ -6418,17 +6768,18 @@ e_day_view_on_text_item_event (GnomeCanvasItem *item,
return TRUE;
}
- case GDK_LEAVE_NOTIFY:
+ case CLUTTER_LEAVE:
tooltip_destroy (day_view, item);
return TRUE;
- case GDK_MOTION_NOTIFY:
+ case CLUTTER_MOTION:
{
EDayViewEvent *pevent;
gint event_num = GPOINTER_TO_INT(g_object_get_data ((GObject *)item, "event-num"));
gint day = GPOINTER_TO_INT(g_object_get_data ((GObject *)item, "event-day"));
pevent = tooltip_get_view_event (day_view, day, event_num);
-
+ if (!pevent)
+ return TRUE;
pevent->x = ((GdkEventMotion *)event)->x_root;
pevent->y = ((GdkEventMotion *)event)->y_root;
pevent->tooltip = (GtkWidget *)g_object_get_data (G_OBJECT (day_view), "tooltip-window");
@@ -6688,15 +7039,16 @@ e_day_view_on_editing_started (EDayView *day_view,
{
GtkAllocation allocation;
gint day, event_num;
+ char *tmp;
if (!e_day_view_find_event_from_item (day_view, item,
&day, &event_num))
return;
-#if 0
+
g_print ("In e_day_view_on_editing_started Day:%i Event:%i\n",
day, event_num);
-#endif
+
/* FIXME: This is a temporary workaround for a bug which seems to stop
us getting focus_out signals. It is not a complete fix since if we
@@ -6706,6 +7058,16 @@ e_day_view_on_editing_started (EDayView *day_view,
&& day_view->editing_event_num == event_num)
return;
+ if (day_view->editing_event_day != -1 &&
+ day_view->editing_event_num != -1) {
+ EDayViewEvent *event;
+
+ event = &g_array_index (day_view->events[day_view->editing_event_day], EDayViewEvent,
+ day_view->editing_event_num);
+
+ g_object_set_data (event->canvas_item, "editing", GINT_TO_POINTER(FALSE));
+ e_day_view_on_editing_stopped (day_view, event->canvas_item);
+ }
day_view->editing_event_day = day;
day_view->editing_event_num = event_num;
@@ -6761,10 +7123,10 @@ e_day_view_on_editing_stopped (EDayView *day_view,
day = day_view->editing_event_day;
event_num = day_view->editing_event_num;
-#if 0
+
g_print ("In e_day_view_on_editing_stopped Day:%i Event:%i\n",
day, event_num);
-#endif
+
/* If no item is being edited, just return. */
if (day == -1)
@@ -6816,7 +7178,8 @@ e_day_view_on_editing_stopped (EDayView *day_view,
e_day_view_remove_event_cb, NULL);
e_day_view_check_layout (day_view);
gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
goto out;
}
@@ -6912,7 +7275,8 @@ e_day_view_on_editing_stopped (EDayView *day_view,
}
}
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
out:
@@ -7347,9 +7711,9 @@ e_day_view_convert_position_in_main_canvas (EDayView *day_view,
gint day, row, col, event_num;
gint item_x, item_y, item_w, item_h;
-#if 0
- g_print ("e_day_view_convert_position_in_main_canvas: (%d, %d)\n", x, y);
-#endif
+
+// g_print ("e_day_view_convert_position_in_main_canvas: (%d, %d)\n", x, y);
+
*day_return = -1;
*row_return = -1;
@@ -7584,13 +7948,18 @@ e_day_view_on_main_canvas_drag_motion (GtkWidget *widget,
EDayView *day_view)
{
gint scroll_x, scroll_y;
-
+ gint offx, offy;
gnome_canvas_get_scroll_offsets (GNOME_CANVAS (widget),
&scroll_x, &scroll_y);
- day_view->drag_event_x = x + scroll_x;
- day_view->drag_event_y = y + scroll_y;
-
+ offx = GPOINTER_TO_INT(g_object_get_data (day_view->dragged, "off-x"));
+ offy = GPOINTER_TO_INT(g_object_get_data (day_view->dragged, "off-y"));
+
+ day_view->drag_event_x = x + scroll_x - offx;
+ day_view->drag_event_y = y + scroll_y - offy;
+
+ printf("Offset %d %d, %d %d\n", offx, offy,day_view->drag_event_x, day_view->drag_event_y );
+ clutter_actor_set_position (day_view->dragged, day_view->drag_event_x, day_view->drag_event_y);
e_day_view_reshape_main_canvas_drag_item (day_view);
e_day_view_reshape_main_canvas_resize_bars (day_view);
@@ -7601,6 +7970,7 @@ e_day_view_on_main_canvas_drag_motion (GtkWidget *widget,
static void
e_day_view_reshape_main_canvas_drag_item (EDayView *day_view)
+
{
ECalendarViewPosition pos;
gint x, y, day, row;
@@ -7766,6 +8136,10 @@ e_day_view_on_main_canvas_drag_leave (GtkWidget *widget,
gnome_canvas_item_hide (day_view->drag_bar_item);
gnome_canvas_item_hide (day_view->drag_item);
+ //clutter_actor_hide (day_view->dragged);
+ //clutter_actor_destroy (day_view->dragged);
+ //day_view->dragged = NULL;
+
/* Hide the resize bars if they are being used in the drag. */
if (day_view->drag_event_day == day_view->resize_bars_event_day
&& day_view->drag_event_num == day_view->resize_bars_event_num) {
@@ -7779,10 +8153,13 @@ e_day_view_on_drag_begin (GtkWidget *widget,
{
EDayViewEvent *event;
gint day, event_num;
+ ClutterActor *stage = g_object_get_data (day_view->main_canvas_item, "stage");
+ cancel_editing (day_view);
+ printf("CAAAAAAAAAAAAAAN\n");
day = day_view->drag_event_day;
event_num = day_view->drag_event_num;
-
+ gtk_drag_set_icon_name (context, "appointment-new", 0, 0);
/* These should both be set. */
g_return_if_fail (day != -1);
g_return_if_fail (event_num != -1);
@@ -7799,8 +8176,37 @@ e_day_view_on_drag_begin (GtkWidget *widget,
event = &g_array_index (day_view->events[day], EDayViewEvent,
event_num);
- }
-
+ g_object_set_data (event->canvas_item, "editing", FALSE);
+ }
+
+ char *tmp = g_strdup_printf ("%d-%d", day, event_num);
+ //clutter_actor_set_anchor_point (g_object_get_data(day_view, tmp), 0, 0);
+ clutter_actor_set_opacity (g_object_get_data(day_view, tmp), 128);
+ clutter_actor_set_scale (g_object_get_data(day_view, tmp), 1.0, 1.0);
+ float x,y;
+ int grabx, graby;
+ int offx, offy, w,h, rx,ry;
+
+ grabx = GPOINTER_TO_INT(g_object_get_data (event->canvas_item, "click-x"));
+ graby = GPOINTER_TO_INT(g_object_get_data (event->canvas_item, "click-y"));
+
+ clutter_actor_get_position (g_object_get_data(day_view, tmp), &x, &y);
+ offx = grabx - (int)x;
+ offy = graby - (int)y;
+
+ day_view->dragged = clutter_clone_new (g_object_get_data(day_view, tmp));
+ e_day_view_get_event_position (day_view, day, event_num, &rx, &ry,
+ &w, &h);
+ clutter_actor_show (day_view->dragged);
+ clutter_actor_set_opacity (day_view->dragged, 128);
+ clutter_actor_set_anchor_point (day_view->dragged, w/2, h/2);
+ g_object_set_data (day_view->dragged, "off-x", GINT_TO_POINTER(offx));
+ g_object_set_data (day_view->dragged, "off-y", GINT_TO_POINTER(offy));
+
+ clutter_container_add_actor (stage, day_view->dragged);
+ clutter_actor_raise_top (day_view->dragged);
+ g_object_set_data (event->canvas_item, "drag-is-actor", GINT_TO_POINTER(TRUE));
+ printf("DRAG BEBIN? %p\n", event->canvas_item);
/* Hide the text item, since it will be shown in the special drag
items. */
gnome_canvas_item_hide (event->canvas_item);
@@ -7817,6 +8223,11 @@ e_day_view_on_drag_end (GtkWidget *widget,
day = day_view->drag_event_day;
event_num = day_view->drag_event_num;
+ //if (day_view->dragged) {
+ // clutter_actor_destroy (day_view->dragged);
+ // day_view->dragged = NULL;
+ //}
+
/* If the calendar has already been updated in drag_data_received()
we just return. */
if (day == -1 || event_num == -1)
@@ -7830,12 +8241,16 @@ e_day_view_on_drag_end (GtkWidget *widget,
event_num);
gtk_widget_queue_draw (day_view->top_canvas);
} else {
+ printf("Returning ..\n");
if (!is_array_index_in_bounds (day_view->events[day], event_num))
return;
-
+
event = &g_array_index (day_view->events[day], EDayViewEvent,
event_num);
- gtk_widget_queue_draw (day_view->main_canvas);
+ g_object_set_data (event->canvas_item, "drag-is-actor", GINT_TO_POINTER(TRUE));
+ printf("drag-end %p\n", event->canvas_item);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
}
/* Show the text item again. */
@@ -7879,6 +8294,14 @@ e_day_view_on_drag_data_get (GtkWidget *widget,
EDayViewEvent, event_num);
}
+ g_object_set_data (event->canvas_item, "drag-is-actor", GINT_TO_POINTER(TRUE));
+ day_view->drag_move = event->canvas_item;
+ char *tmp = g_strdup_printf ("%d-%d", day, event_num);
+ day_view->drag_actor = g_object_get_data (day_view, tmp);
+ clutter_actor_set_opacity (g_object_get_data(day_view, tmp), 128);
+ clutter_actor_set_scale (g_object_get_data(day_view, tmp), 1.0, 1.0);
+
+
if (!is_comp_data_valid (event))
return;
@@ -8448,7 +8871,8 @@ e_day_view_layout_timeout_cb (gpointer data)
gtk_widget_queue_draw (day_view->top_canvas);
gtk_widget_queue_draw (day_view->top_dates_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_main_item_redraw (day_view->main_canvas_item);
+ //gtk_widget_queue_draw (day_view->main_canvas);
e_day_view_check_layout (day_view);
day_view->layout_timeout_id = 0;
diff --git a/calendar/gui/e-day-view.h b/calendar/gui/e-day-view.h
index aee8be0..41abd7a 100644
--- a/calendar/gui/e-day-view.h
+++ b/calendar/gui/e-day-view.h
@@ -30,7 +30,7 @@
#include "e-calendar-view.h"
#include "gnome-cal.h"
-
+#include <clutter/clutter.h>
G_BEGIN_DECLS
/*
@@ -473,7 +473,11 @@ struct _EDayView {
GnomeCanvasItem *drag_rect_item;
GnomeCanvasItem *drag_bar_item;
GnomeCanvasItem *drag_item;
-
+ ClutterActor *dragged;
+ ClutterActor *drag_move;
+ ClutterActor *drag_actor;
+ ClutterActor *resize_actor;
+ ClutterActor *resize_draw_actor;
/* "am" and "pm" in the current locale, and their widths. */
gchar *am_string;
gchar *pm_string;
diff --git a/mail/e-mail-message-pane.c b/mail/e-mail-message-pane.c
index 0f3488d..18b86c4 100644
--- a/mail/e-mail-message-pane.c
+++ b/mail/e-mail-message-pane.c
@@ -181,11 +181,17 @@ e_mail_message_pane_get_type (void)
GtkWidget *
e_mail_message_pane_new (EShellContent *content)
{
+ GtkWidget *widget;
+
g_return_val_if_fail (E_IS_SHELL_CONTENT (content), NULL);
- return g_object_new (
+ widget = g_object_new (
E_TYPE_MAIL_MESSAGE_PANE,
"shell-content", content,
"preview-visible", TRUE,
NULL);
+
+ e_mail_paned_view_set_enable_show_folder (E_MAIL_PANED_VIEW(widget), TRUE);
+
+ return widget;
}
diff --git a/mail/e-mail-message-pane.h b/mail/e-mail-message-pane.h
index ce5ea85..e31e167 100644
--- a/mail/e-mail-message-pane.h
+++ b/mail/e-mail-message-pane.h
@@ -53,6 +53,8 @@ typedef struct _EMailMessagePanePrivate EMailMessagePanePrivate;
struct _EMailMessagePane {
EMailPanedView parent;
EMailMessagePanePrivate *priv;
+
+ EMailView *parent_folder_view;
};
struct _EMailMessagePaneClass {
diff --git a/mail/e-mail-notebook-view.c b/mail/e-mail-notebook-view.c
index 5add673..614229b 100644
--- a/mail/e-mail-notebook-view.c
+++ b/mail/e-mail-notebook-view.c
@@ -616,14 +616,38 @@ mail_notebook_view_class_init (EMailViewClass *klass)
object_class, PROP_ORIENTATION, "orientation"); */
}
+static void
+emnv_show_folder (EMailNotebookView *view, gpointer not_used)
+{
+ int pos;
+ EMailNotebookViewPrivate *priv = view->priv;
+
+ pos = emnv_get_page_num (view, E_MAIL_MESSAGE_PANE(priv->current_view)->parent_folder_view);
+
+#if HAVE_CLUTTER
+ e_mail_tab_picker_set_current_tab (priv->tab_picker, pos);
+ mnv_set_current_tab (E_MAIL_NOTEBOOK_VIEW(view), pos);
+#else
+ gtk_notebook_set_current_page (priv->book, pos);
+#endif
+
+
+}
+
GtkWidget *
e_mail_notebook_view_new (EShellContent *content)
{
- g_return_val_if_fail (E_IS_SHELL_CONTENT (content), NULL);
+ GtkWidget *widget;
+
+ g_return_val_if_fail (E_IS_SHELL_CONTENT (content), NULL);
- return g_object_new (
+ widget = g_object_new (
E_MAIL_NOTEBOOK_VIEW_TYPE,
"shell-content", content, NULL);
+ g_signal_connect (widget, "show-folder",
+ G_CALLBACK (emnv_show_folder), widget);
+
+ return widget;
}
static GtkActionGroup *
@@ -753,6 +777,8 @@ mail_netbook_view_open_mail (EMailView *view, const char *uid, EMailNotebookView
pos = emnv_get_page_num (nview, (GtkWidget *)priv->current_view);
pane = e_mail_message_pane_new (E_MAIL_VIEW(nview)->content);
E_MAIL_VIEW(pane)->prev = priv->current_view;
+ E_MAIL_MESSAGE_PANE(pane)->parent_folder_view = priv->current_view;
+
priv->current_view = (EMailView *)pane;
gtk_widget_show (pane);
@@ -821,10 +847,99 @@ mail_netbook_view_open_mail (EMailView *view, const char *uid, EMailNotebookView
E_MAIL_READER (pane),
e_mail_reader_get_group_by_threads (E_MAIL_READER(view)));
+ e_mail_reader_enable_show_folder (E_MAIL_READER(pane));
e_mail_reader_set_message (E_MAIL_READER (pane), uid);
camel_message_info_free (info);
}
+static ClutterActor *
+build_histogram (GtkWidget *widget, CamelFolder *folder)
+{
+ int week_time = 60 * 60 * 24 * 7;
+ int weeks[54];
+ int i;
+ GPtrArray *uids;
+ int max = 1;
+ ClutterActor *texture;
+ cairo_t *cr;
+ float ratio;
+ int x = 0;
+ time_t now = time(NULL);
+ GtkStyle *style;
+ GdkColor *color;
+
+ for (i=0; i<54; i++)
+ weeks[i] = 0;
+
+ style = gtk_widget_get_style (GTK_WIDGET (widget));
+ color = &style->mid[GTK_STATE_NORMAL];
+// &style->bg[GTK_STATE_NORMAL]
+
+ uids = camel_folder_get_uids (folder);
+ camel_folder_summary_prepare_fetch_all (folder->summary, NULL);
+ for (i = 0; i < uids->len; i++) {
+ CamelMessageInfo *info = camel_folder_get_message_info (folder, uids->pdata[i]);
+ if (info) {
+ time_t dreceived = now - camel_message_info_date_received (info);
+ int week;
+
+ week = (dreceived / week_time) - 1;
+ if (week > 52)
+ weeks[53]++;
+ else
+ weeks[week]++;
+
+ camel_message_info_free (info);
+ }
+ }
+
+ for (i=0; i< 53; i++) {
+ if (weeks[i] > max)
+ max = weeks[i];
+ }
+
+ ratio = 50.0/max;
+
+ camel_folder_free_uids (folder, uids);
+
+ texture = clutter_cairo_texture_new (200, 50);
+ clutter_actor_set_size (texture, 200, 50);
+ cr = clutter_cairo_texture_create (CLUTTER_CAIRO_TEXTURE (texture));
+
+ clutter_actor_show_all (texture);
+
+ //cairo_set_source_rgba (cr, color->red, color->green, color->blue, 1.0);
+ cairo_set_source_rgba (cr, 0.3, 0.2, 0.4, 1.0);
+
+ cairo_save (cr);
+ x+=4;
+
+ cairo_set_source_rgba (cr, 0.8, 0.5, 0.3, 1.0);
+ cairo_arc (cr, x, 50 - (weeks[0] * ratio), 3, 0, 2*M_PI);
+
+ cairo_fill (cr);
+ cairo_restore (cr);
+
+ cairo_save (cr);
+ cairo_new_path (cr);
+ cairo_move_to (cr, x, 50 - (weeks[0] * ratio));
+
+ cairo_set_source_rgba (cr, 0.3, 0.2, 0.4, 1.0);
+
+ for (i=1; i<53; i++) {
+ x+=4;
+ cairo_line_to (cr, x, 50 - (weeks[i]*ratio));
+
+ }
+
+ cairo_stroke (cr);
+ cairo_restore (cr);
+
+ cairo_destroy(cr);
+
+ return texture;
+}
+
static void
mail_notebook_view_set_folder (EMailReader *reader,
CamelFolder *folder,
@@ -899,7 +1014,8 @@ mail_notebook_view_set_folder (EMailReader *reader,
g_object_set_data ((GObject *)tab, "page", priv->current_view);
g_object_set_data ((GObject *)priv->current_view, "page", tab);
- clone = e_mail_tab_new_full (camel_folder_get_full_name(folder), NULL, 1);
+ clone = build_histogram (reader, folder);
+ //e_mail_tab_new_full (camel_folder_get_full_name(folder), NULL, 1);
clutter_actor_set_reactive (clone, FALSE);
e_mail_tab_set_can_close ((EMailTab *)clone, FALSE);
clutter_actor_show (clone);
@@ -935,8 +1051,9 @@ mail_notebook_view_set_folder (EMailReader *reader,
g_object_set_data ((GObject *)priv->current_view, "page", tab);
e_mail_tab_set_text (tab, camel_folder_get_full_name(folder));
- clone = e_mail_tab_get_preview_actor (tab);
- e_mail_tab_set_text ((EMailTab *)clone, camel_folder_get_full_name(folder));
+ e_mail_tab_set_preview_actor (tab, build_histogram (reader, folder));
+ //clone = e_mail_tab_get_preview_actor (tab);
+ //e_mail_tab_set_text ((EMailTab *)clone, camel_folder_get_full_name(folder));
#endif
}
@@ -1002,6 +1119,17 @@ mail_notebook_view_open_selected_mail (EMailReader *reader)
return e_mail_reader_open_selected_mail (E_MAIL_READER(priv->current_view));
}
+static void
+mail_notebook_view_enable_show_folder (EMailReader *reader)
+{
+ EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (reader)->priv;
+
+ if (!priv->current_view)
+ return ;
+
+ return e_mail_reader_get_enable_show_folder (E_MAIL_READER(priv->current_view));
+}
+
void
e_mail_notebook_view_set_search_strings (EMailView *view,
GSList *search_strings)
@@ -1037,6 +1165,7 @@ mail_notebook_view_reader_init (EMailReaderIface *iface)
iface->set_folder = mail_notebook_view_set_folder;
iface->show_search_bar = mail_notebook_view_show_search_bar;
iface->open_selected_mail = mail_notebook_view_open_selected_mail;
+ iface->enable_show_folder = mail_notebook_view_enable_show_folder;
}
GType
diff --git a/mail/e-mail-paned-view.c b/mail/e-mail-paned-view.c
index 6733e40..2b88138 100644
--- a/mail/e-mail-paned-view.c
+++ b/mail/e-mail-paned-view.c
@@ -72,6 +72,7 @@ struct _EMailPanedViewPrivate {
guint preview_visible : 1;
guint show_deleted : 1;
+ guint enable_show_folder : 1;
};
enum {
@@ -568,6 +569,16 @@ mail_paned_view_open_selected_mail (EMailReader *reader)
E_MAIL_PANED_VIEW_CLASS(G_OBJECT_GET_CLASS (reader))->open_selected_mail (E_MAIL_PANED_VIEW(reader));
}
+static gboolean
+mail_paned_view_enable_show_folder (EMailReader *reader)
+{
+ EMailPanedViewPrivate *priv;
+
+ priv = E_MAIL_PANED_VIEW (reader)->priv;
+
+ return priv->enable_show_folder ? TRUE : FALSE;
+}
+
static void
mail_paned_view_constructed (GObject *object)
{
@@ -685,6 +696,7 @@ mail_paned_view_init (EMailPanedView *shell)
shell->priv = g_new0(EMailPanedViewPrivate, 1);
shell->priv->preview_visible = TRUE;
+ shell->priv->enable_show_folder = FALSE;
g_signal_connect (
shell, "notify::group-by-threads",
@@ -761,6 +773,8 @@ mail_paned_view_reader_init (EMailReaderIface *iface)
iface->set_folder = mail_paned_view_set_folder;
iface->show_search_bar = mail_paned_view_show_search_bar;
iface->open_selected_mail = mail_paned_view_open_selected_mail;
+ iface->enable_show_folder = mail_paned_view_enable_show_folder;
+
}
GType
@@ -1122,3 +1136,11 @@ e_mail_paned_view_get_preview (EMailPanedView *view)
{
return view->priv->preview;
}
+
+void
+e_mail_paned_view_set_enable_show_folder (EMailPanedView *view, gboolean set)
+{
+ printf("Set %p: %d\n", view, set);
+ view->priv->enable_show_folder = set ? 1 : 0;
+}
+
diff --git a/mail/e-mail-paned-view.h b/mail/e-mail-paned-view.h
index 8cb5a0e..852beb7 100644
--- a/mail/e-mail-paned-view.h
+++ b/mail/e-mail-paned-view.h
@@ -90,5 +90,7 @@ e_mail_paned_view_hide_message_list_pane (EMailPanedView *view,
gboolean visible);
GtkWidget *
e_mail_paned_view_get_preview (EMailPanedView *view);
+void
+e_mail_paned_view_set_enable_show_folder (EMailPanedView *view, gboolean set);
#endif
diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c
index 40622ea..4cd011d 100644
--- a/mail/e-mail-reader.c
+++ b/mail/e-mail-reader.c
@@ -95,6 +95,7 @@ enum {
FOLDER_LOADED,
SHOW_SEARCH_BAR,
UPDATE_ACTIONS,
+ SHOW_FOLDER,
LAST_SIGNAL
};
@@ -673,6 +674,13 @@ exit:
}
static void
+action_mail_folder_cb (GtkAction *action,
+ EMailReader *reader)
+{
+ g_signal_emit (reader, signals[SHOW_FOLDER], 0);
+}
+
+static void
action_mail_next_cb (GtkAction *action,
EMailReader *reader)
{
@@ -1590,6 +1598,13 @@ static GtkActionEntry mail_reader_entries[] = {
N_("Move selected messages to another folder"),
G_CALLBACK (action_mail_move_cb) },
+ { "mail-goto-folder",
+ NULL,
+ N_("_Switch to Folder"),
+ "<Control>Up",
+ N_("Display the next message"),
+ G_CALLBACK (action_mail_folder_cb) },
+
{ "mail-next",
GTK_STOCK_GO_FORWARD,
N_("_Next Message"),
@@ -2315,6 +2330,13 @@ mail_reader_get_folder_uri (EMailReader *reader)
return MESSAGE_LIST (message_list)->folder_uri;
}
+static gboolean
+mail_reader_get_enable_show_folder (EMailReader *reader)
+{
+ printf("Oops %p FALSe\n", reader);
+ return FALSE;
+}
+
static void
mail_reader_set_folder (EMailReader *reader,
CamelFolder *folder,
@@ -2378,6 +2400,7 @@ mail_reader_update_actions (EMailReader *reader,
GtkAction *action;
const gchar *action_name;
gboolean sensitive;
+ EMailReaderPrivate *priv;
/* Be descriptive. */
gboolean any_messages_selected;
@@ -2398,6 +2421,8 @@ mail_reader_update_actions (EMailReader *reader,
gboolean selection_is_mailing_list;
gboolean single_message_selected;
+ priv = E_MAIL_READER_GET_PRIVATE ( reader);
+
shell_backend = e_mail_reader_get_shell_backend (reader);
shell = e_shell_backend_get_shell (shell_backend);
shell_settings = e_shell_get_shell_settings (shell);
@@ -2596,6 +2621,10 @@ mail_reader_update_actions (EMailReader *reader,
action = e_mail_reader_get_action (reader, action_name);
gtk_action_set_sensitive (action, sensitive);
+ action_name = "mail-goto-folder";
+ action = e_mail_reader_get_action (reader, action_name);
+ g_object_set (action, "visible", e_mail_reader_get_enable_show_folder (reader), NULL);
+
action_name = "mail-move";
sensitive = any_messages_selected;
action = e_mail_reader_get_action (reader, action_name);
@@ -2745,6 +2774,7 @@ mail_reader_class_init (EMailReaderIface *iface)
iface->get_selected_uids = mail_reader_get_selected_uids;
iface->get_folder = mail_reader_get_folder;
iface->get_folder_uri = mail_reader_get_folder_uri;
+ iface->enable_show_folder = mail_reader_get_enable_show_folder;
iface->set_folder = mail_reader_set_folder;
iface->set_message = mail_reader_set_message;
iface->open_selected_mail = e_mail_reader_open_selected;
@@ -2793,6 +2823,15 @@ mail_reader_class_init (EMailReaderIface *iface)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+ signals[SHOW_FOLDER] = g_signal_new (
+ "show-folder",
+ G_OBJECT_CLASS_TYPE (iface),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
signals[UPDATE_ACTIONS] = g_signal_new (
"update-actions",
G_OBJECT_CLASS_TYPE (iface),
@@ -2939,6 +2978,10 @@ e_mail_reader_init (EMailReader *reader)
action = e_mail_reader_get_action (reader, action_name);
g_object_set (action, "is-important", TRUE, NULL);
+ action_name = "mail-goto-folder";
+ action = e_mail_reader_get_action (reader, action_name);
+ g_object_set (action, "visible", FALSE, NULL);
+
action_name = "mail-next";
action = e_mail_reader_get_action (reader, action_name);
g_object_set (action, "short-label", _("Next"), NULL);
@@ -3313,6 +3356,19 @@ e_mail_reader_get_hide_deleted (EMailReader *reader)
return iface->get_hide_deleted (reader);
}
+gboolean
+e_mail_reader_get_enable_show_folder (EMailReader *reader)
+{
+ EMailReaderIface *iface;
+
+ g_return_val_if_fail (E_IS_MAIL_READER (reader), FALSE);
+
+ iface = E_MAIL_READER_GET_IFACE (reader);
+ g_return_val_if_fail (iface->enable_show_folder != NULL, FALSE);
+
+ return iface->enable_show_folder (reader);
+}
+
GtkWidget *
e_mail_reader_get_message_list (EMailReader *reader)
{
@@ -3582,3 +3638,28 @@ e_mail_reader_show_search_bar (EMailReader *reader)
g_signal_emit (reader, signals[SHOW_SEARCH_BAR], 0);
}
+
+void
+e_mail_reader_enable_show_folder (EMailReader *reader)
+{
+ GtkAction *action;
+ const gchar *action_name;
+ EMailReaderPrivate *priv;
+ CamelFolder *folder;
+ char *label;
+
+ g_return_if_fail (E_IS_MAIL_READER (reader));
+
+ priv = E_MAIL_READER_GET_PRIVATE (reader);
+ folder = e_mail_reader_get_folder (reader);
+
+ label = g_strdup_printf (_("Folder '%s'"), camel_folder_get_full_name(folder));
+
+ action_name = "mail-goto-folder";
+ action = e_mail_reader_get_action (reader, action_name);
+ g_object_set (action, "visible", TRUE,
+ "label", label, NULL);
+
+ g_free (label);
+}
+
diff --git a/mail/e-mail-reader.h b/mail/e-mail-reader.h
index 911c2bd..0290866 100644
--- a/mail/e-mail-reader.h
+++ b/mail/e-mail-reader.h
@@ -105,6 +105,7 @@ struct _EMailReaderIface {
void (*show_search_bar) (EMailReader *reader);
void (*update_actions) (EMailReader *reader,
guint32 state);
+ int (*enable_show_folder) (EMailReader *reader);
};
GType e_mail_reader_get_type (void);
@@ -150,6 +151,9 @@ void e_mail_reader_create_charset_menu
GtkUIManager *ui_manager,
guint merge_id);
void e_mail_reader_show_search_bar (EMailReader *reader);
+gboolean e_mail_reader_get_enable_show_folder
+ (EMailReader *reader);
+void e_mail_reader_enable_show_folder(EMailReader *reader);
G_END_DECLS
diff --git a/ui/evolution-mail-reader.ui b/ui/evolution-mail-reader.ui
index 3c28887..1b87bf2 100644
--- a/ui/evolution-mail-reader.ui
+++ b/ui/evolution-mail-reader.ui
@@ -57,7 +57,9 @@
<separator/>
<menuitem action='mail-previous'/>
<menuitem action='mail-previous-unread'/>
- <menuitem action='mail-previous-important'/>
+ <menuitem action='mail-previous-important'/>
+ <separator/>
+ <menuitem action='mail-goto-folder'/>
</menu>
<menuitem action='mail-reply-sender'/>
<menuitem action='mail-reply-list'/>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]