[gnome-calendar] ui: Removed Clutter from GcalEventOverlay
- From: Erick Pérez Castellanos <erickpc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] ui: Removed Clutter from GcalEventOverlay
- Date: Thu, 4 Dec 2014 22:19:33 +0000 (UTC)
commit 72358c7ca4e2f5f55f5af7d736c01754a4c201df
Author: Erick Pérez Castellanos <erick red gmail com>
Date: Wed May 29 23:07:33 2013 -0400
ui: Removed Clutter from GcalEventOverlay
This commit got mixed in, and that's why you will
see warnings. Future commits will fix this.
This one builds, though.
src/gcal-event-overlay.c | 16 +---
src/gcal-event-overlay.h | 8 +-
src/gcal-window.c | 207 ++++++++++++++++++++++------------------------
3 files changed, 109 insertions(+), 122 deletions(-)
---
diff --git a/src/gcal-event-overlay.c b/src/gcal-event-overlay.c
index 300e7db..fd12024 100644
--- a/src/gcal-event-overlay.c
+++ b/src/gcal-event-overlay.c
@@ -66,7 +66,7 @@ static void gcal_event_overlay_close_button_clicked (GtkWidget *
static void gcal_event_overlay_calendar_selected (GtkWidget *menu_item,
gpointer user_data);
-G_DEFINE_TYPE(GcalEventOverlay, gcal_event_overlay, GTK_CLUTTER_TYPE_ACTOR)
+G_DEFINE_TYPE(GcalEventOverlay, gcal_event_overlay, GTK_TYPE_OVERLAY)
static void
gcal_event_overlay_class_init (GcalEventOverlayClass *klass)
@@ -121,7 +121,6 @@ gcal_event_overlay_constructed (GObject* object)
GcalEventOverlayPrivate *priv;
GtkWidget *main_grid;
GtkWidget *row_grid;
- GtkWidget *overlay;
GtkWidget *create_button;
GtkWidget *details_button;
GtkWidget *close_image;
@@ -133,14 +132,12 @@ gcal_event_overlay_constructed (GObject* object)
/* chaining up */
G_OBJECT_CLASS (gcal_event_overlay_parent_class)->constructed (object);
- overlay = gtk_overlay_new ();
-
priv->container = gcal_arrow_bin_new ();
gtk_container_set_border_width (GTK_CONTAINER (priv->container), 14);
gtk_style_context_add_class (
gtk_widget_get_style_context (priv->container),
"new-event-view");
- gtk_container_add (GTK_CONTAINER (overlay), priv->container);
+ gtk_container_add (GTK_CONTAINER (object), priv->container);
main_grid = gtk_grid_new ();
g_object_set (main_grid,
@@ -216,12 +213,9 @@ gcal_event_overlay_constructed (GObject* object)
"valign", GTK_ALIGN_START,
NULL);
- gtk_overlay_add_overlay (GTK_OVERLAY (overlay), close_button);
+ gtk_overlay_add_overlay (GTK_OVERLAY (object), close_button);
- gtk_widget_show_all (overlay);
- gtk_container_add (
- GTK_CONTAINER (gtk_clutter_actor_get_widget (GTK_CLUTTER_ACTOR (object))),
- overlay);
+ gtk_widget_show_all (GTK_WIDGET (object));
/* Hooking signals */
g_signal_connect (priv->what_entry,
@@ -424,7 +418,7 @@ gcal_event_overlay_calendar_selected (GtkWidget *menu_item,
/* Public API */
-ClutterActor*
+GtkWidget*
gcal_event_overlay_new (void)
{
return g_object_new (GCAL_TYPE_EVENT_OVERLAY, NULL);
diff --git a/src/gcal-event-overlay.h b/src/gcal-event-overlay.h
index d0a09df..0dd1211 100644
--- a/src/gcal-event-overlay.h
+++ b/src/gcal-event-overlay.h
@@ -20,7 +20,7 @@
#ifndef __GCAL_EVENT_OVERLAY_H__
#define __GCAL_EVENT_OVERLAY_H__
-#include <clutter-gtk/clutter-gtk.h>
+#include <gtk/gtk.h>
#include <libical/icaltime.h>
G_BEGIN_DECLS
@@ -48,14 +48,14 @@ typedef struct _GcalEventOverlayPrivate GcalEventOverlayPrivate;
struct _GcalEventOverlay
{
- GtkClutterActor parent;
+ GtkOverlay parent;
GcalEventOverlayPrivate *priv;
};
struct _GcalEventOverlayClass
{
- GtkClutterActorClass parent_class;
+ GtkOverlayClass parent_class;
/* Signals */
void (*cancelled) (GcalEventOverlay *widget);
@@ -65,7 +65,7 @@ struct _GcalEventOverlayClass
GType gcal_event_overlay_get_type (void);
-ClutterActor* gcal_event_overlay_new (void);
+GtkWidget* gcal_event_overlay_new (void);
void gcal_event_overlay_reset (GcalEventOverlay *widget);
diff --git a/src/gcal-window.c b/src/gcal-window.c
index 114b38c..734cf92 100644
--- a/src/gcal-window.c
+++ b/src/gcal-window.c
@@ -33,15 +33,11 @@
#include <libgd/gd.h>
#include <glib/gi18n.h>
-#include <clutter/clutter.h>
#include <libical/icaltime.h>
struct _GcalWindowPrivate
{
- /* FIXME: For building: TO REMOVE */
- ClutterActor *new_event_actor;
-
/* upper level widgets */
GtkWidget *main_box;
@@ -50,6 +46,7 @@ struct _GcalWindowPrivate
GtkWidget *views_overlay;
GtkWidget *views_stack;
GtkWidget *noty; /* short-lived */
+ GtkWidget *new_event_widget; /* short-lived */
/* header_bar widets */
GtkWidget *new_button;
@@ -69,6 +66,10 @@ struct _GcalWindowPrivate
/* temp to keep event_creation */
gboolean waiting_for_creation;
gboolean queue_open_edit_dialog;
+
+ /* temp to keep position sent by GcalView about it's current unit */
+ gdouble x_pos;
+ gdouble y_pos;
};
enum
@@ -92,6 +93,14 @@ static void gcal_window_get_property (GObject *o
GValue *value,
GParamSpec *pspec);
+static void gcal_window_add_event (GtkButton *new_button,
+ gpointer user_data);
+
+static gboolean gcal_window_place_new_event_widget (GtkOverlay *overlay,
+ GtkWidget *child,
+ GdkRectangle *allocation,
+ gpointer user_data);
+
static void gcal_window_search_toggled (GObject *object,
GParamSpec *pspec,
gpointer user_data);
@@ -108,9 +117,6 @@ static void gcal_window_set_sources_view (GcalWindow *w
static void gcal_window_init_edit_dialog (GcalWindow *window);
-static void gcal_window_add_event (GtkButton *new_button,
- gpointer user_data);
-
static void gcal_window_sources_row_activated (GtkTreeView *tree_view,
GtkTreePath *path,
GtkTreeViewColumn *column,
@@ -146,14 +152,11 @@ static void gcal_window_view_updated (GcalView *v
gpointer date,
gpointer user_data);
-static void gcal_window_event_overlay_shown (GcalView *view,
- gpointer start_span,
- gpointer end_span,
- gdouble x,
- gdouble y,
- gpointer user_data);
-
-static void gcal_window_event_overlay_closed (GcalEventOverlay *widget,
+static void gcal_window_new_event_show (GcalView *view,
+ gpointer start_span,
+ gpointer end_span,
+ gdouble x,
+ gdouble y,
gpointer user_data);
static void gcal_window_create_event (GcalEventOverlay *widget,
@@ -161,11 +164,6 @@ static void gcal_window_create_event (GcalEventOverlay *w
gboolean open_details,
gpointer user_data);
-static void gcal_window_show_hide_actor_cb (ClutterActor *actor,
- gchar *name,
- gboolean is_finished,
- gpointer user_data);
-
static void gcal_window_edit_dialog_responded (GtkDialog *dialog,
gint response,
gpointer user_data);
@@ -224,6 +222,9 @@ gcal_window_init(GcalWindow *self)
priv->event_to_delete = NULL;
priv->waiting_for_creation = FALSE;
priv->queue_open_edit_dialog = FALSE;
+
+ priv->x_pos = -1;
+ priv->y_pos = -1;
}
static void
@@ -325,6 +326,8 @@ gcal_window_constructed (GObject *object)
/* signals connection/handling */
g_signal_connect (priv->new_button, "clicked",
G_CALLBACK (gcal_window_add_event), object);
+ g_signal_connect (priv->views_overlay, "get-child-position",
+ G_CALLBACK (gcal_window_place_new_event_widget), object);
g_signal_connect (priv->search_bar, "notify::search-mode",
G_CALLBACK (gcal_window_search_toggled), object);
g_signal_connect (priv->search_entry, "changed",
@@ -397,6 +400,60 @@ gcal_window_get_property (GObject *object,
}
static void
+gcal_window_add_event (GtkButton *new_button,
+ gpointer user_data)
+{
+ GcalWindowPrivate *priv;
+
+ priv = GCAL_WINDOW (user_data)->priv;
+ gcal_view_create_event_on_current_unit (GCAL_VIEW (priv->views[priv->active_view]));
+}
+
+static gboolean
+gcal_window_place_new_event_widget (GtkOverlay *overlay,
+ GtkWidget *child,
+ GdkRectangle *allocation,
+ gpointer user_data)
+{
+ GcalWindowPrivate *priv;
+ gint nat_width;
+ gint nat_height;
+
+ priv = GCAL_WINDOW (user_data)->priv;
+
+ if (priv->x_pos == -1 || child != priv->new_event_widget)
+ return FALSE;
+
+ gtk_widget_get_preferred_width (priv->new_event_widget,
+ NULL,
+ &nat_width);
+ gtk_widget_get_preferred_height_for_width (priv->new_event_widget,
+ nat_width,
+ NULL,
+ &nat_height);
+
+ g_debug ("incoming value (%d, %d) - (%d, %d)",
+ allocation->x,
+ allocation->y,
+ allocation->width,
+ allocation->height);
+ g_debug ("natural size (%d, %d)",
+ nat_width, nat_height);
+ allocation->x = priv->x_pos - nat_width / 2;
+ allocation->y = (priv->y_pos - nat_height) + 300;
+ allocation->width = nat_width;
+ allocation->height = nat_height;
+
+ g_debug ("outgoing value (%d, %d) - (%d, %d)",
+ allocation->x,
+ allocation->y,
+ allocation->width,
+ allocation->height);
+
+ return TRUE;
+}
+
+static void
gcal_window_search_toggled (GObject *object,
GParamSpec *pspec,
gpointer user_data)
@@ -502,12 +559,7 @@ gcal_window_set_active_view (GcalWindow *window,
g_signal_connect (priv->views[view_type],
"create-event",
- G_CALLBACK (gcal_window_event_overlay_shown),
- window);
-
- g_signal_connect (priv->views[view_type],
- "updated",
- G_CALLBACK (gcal_window_view_updated),
+ G_CALLBACK (gcal_window_new_event_show),
window);
priv->active_view = view_type;
@@ -640,16 +692,6 @@ gcal_window_init_edit_dialog (GcalWindow *window)
}
static void
-gcal_window_add_event (GtkButton *new_button,
- gpointer user_data)
-{
- GcalWindowPrivate *priv;
-
- priv = GCAL_WINDOW (user_data)->priv;
- gcal_view_create_event_on_current_unit (GCAL_VIEW (priv->views[priv->active_view]));
-}
-
-static void
gcal_window_sources_row_activated (GtkTreeView *tree_view,
GtkTreePath *path,
GtkTreeViewColumn *column,
@@ -832,7 +874,7 @@ gcal_window_event_created (GcalManager *manager,
source_uid,
event_uid);
- if (CLUTTER_ACTOR_IS_VISIBLE (priv->new_event_actor))
+ if (gtk_widget_is_visible (priv->new_event_widget))
{
priv->queue_open_edit_dialog = TRUE;
return;
@@ -943,13 +985,12 @@ gcal_window_view_updated (GcalView *view,
g_free (last_day);
}
-static void
-gcal_window_event_overlay_shown (GcalView *view,
- gpointer start_span,
- gpointer end_span,
- gdouble x,
- gdouble y,
- gpointer user_data)
+gcal_window_new_event_show (GcalView *view,
+ gpointer start_span,
+ gpointer end_span,
+ gdouble x,
+ gdouble y,
+ gpointer user_data)
{
GcalWindowPrivate *priv;
GcalManager *manager;
@@ -958,56 +999,30 @@ gcal_window_event_overlay_shown (GcalView *view,
g_return_if_fail (user_data);
priv = GCAL_WINDOW (user_data)->priv;
+ /* FIXME: ensure destruction or singleton pattern */
+ priv->new_event_widget = gcal_event_overlay_new ();
+
manager = gcal_window_get_manager (GCAL_WINDOW (user_data));
/* squeezed in here, reload on every show */
gcal_event_overlay_set_sources_model (
- GCAL_EVENT_OVERLAY (priv->new_event_actor),
+ GCAL_EVENT_OVERLAY (priv->new_event_widget),
gcal_manager_get_sources_model (manager));
if (start_span != NULL)
{
- gcal_event_overlay_set_span (GCAL_EVENT_OVERLAY (priv->new_event_actor),
+ gcal_event_overlay_set_span (GCAL_EVENT_OVERLAY (priv->new_event_widget),
(icaltimetype*) start_span,
(icaltimetype*) end_span);
}
- clutter_actor_show (priv->new_event_actor);
-
- width = clutter_actor_get_width (priv->new_event_actor);
- height = clutter_actor_get_height (priv->new_event_actor);
-
- x = x - width / 2;
- y = y - height;
-
- clutter_actor_set_x (priv->new_event_actor, x);
- clutter_actor_set_y (priv->new_event_actor, y);
-
- clutter_actor_save_easing_state (priv->new_event_actor);
- clutter_actor_set_opacity (priv->new_event_actor, 255);
- clutter_actor_restore_easing_state (priv->new_event_actor);
-}
-
-static void
-gcal_window_event_overlay_closed (GcalEventOverlay *widget,
- gpointer user_data)
-{
- GcalWindowPrivate *priv;
-
- g_return_if_fail (user_data);
- priv = GCAL_WINDOW (user_data)->priv;
-
- /* reset and hide */
- gcal_view_clear_selection (GCAL_VIEW (priv->views[priv->active_view]));
- gcal_event_overlay_reset (GCAL_EVENT_OVERLAY (priv->new_event_actor));
+ gtk_widget_show (priv->new_event_widget);
+ gtk_overlay_add_overlay (GTK_OVERLAY (priv->views_overlay),
+ priv->new_event_widget);
- clutter_actor_save_easing_state (priv->new_event_actor);
- clutter_actor_set_opacity (priv->new_event_actor, 0);
- clutter_actor_restore_easing_state (priv->new_event_actor);
+ priv->x_pos = x;
+ priv->y_pos = y;
- g_signal_connect (priv->new_event_actor,
- "transition-stopped::opacity",
- G_CALLBACK (gcal_window_show_hide_actor_cb),
- user_data);
+ g_debug ("position (%f, %f)", x, y);
}
static void
@@ -1035,33 +1050,11 @@ gcal_window_create_event (GcalEventOverlay *widget,
new_data->end_date);
/* reset and hide */
- gcal_window_event_overlay_closed (widget, user_data);
-}
-
-static void
-gcal_window_show_hide_actor_cb (ClutterActor *actor,
- gchar *name,
- gboolean is_finished,
- gpointer user_data)
-{
- GcalWindowPrivate *priv;
-
- priv = GCAL_WINDOW (user_data)->priv;
-
- if (CLUTTER_ACTOR_IS_VISIBLE (actor) &&
- clutter_actor_get_opacity (actor) == 0)
- clutter_actor_hide (actor);
-
- if (priv->queue_open_edit_dialog)
- {
- gtk_widget_show_all (priv->edit_dialog);
- priv->queue_open_edit_dialog = FALSE;
- }
+ gcal_view_clear_selection (GCAL_VIEW (priv->views[priv->active_view]));
+ gtk_widget_destroy (priv->new_event_widget);
- /* disconnect so we don't get multiple notifications */
- g_signal_handlers_disconnect_by_func (actor,
- gcal_window_show_hide_actor_cb,
- NULL);
+ priv->x_pos = -1;
+ priv->y_pos = -1;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]