[gnome-calendar] gcal-window: added new application flow
- From: Erick Pérez Castellanos <erickpc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] gcal-window: added new application flow
- Date: Thu, 4 Dec 2014 22:22:47 +0000 (UTC)
commit 9b828b39bef1f5349dddb31b0c58e9abe9dde687
Author: Erick Pérez Castellanos <erick red gmail com>
Date: Wed Jun 12 13:23:14 2013 -0400
gcal-window: added new application flow
gcal-window changes:
1. Added #GtkStackSwitcher for view-switching handling
2. Reworked view switching behavior
3. Added window states: search-mode, new-event-mode
4. Implemented search using #GtkSearchBar, allowing to handle [Esc] keys closing the search
5. Removed temporally SourcesView
gcal-application changes:
1. Added actions for [Search] and [New Event] with its keyboard-shorcut
A lot of ground work is set here, the code is fill with FIXMEs and comment
for stuff-TODO
src/gcal-application.c | 96 ++++++++---
src/gcal-window.c | 417 +++++++++++++++++++----------------------------
src/gcal-window.h | 15 ++-
3 files changed, 248 insertions(+), 280 deletions(-)
---
diff --git a/src/gcal-application.c b/src/gcal-application.c
index 36621c3..4fe5fa9 100644
--- a/src/gcal-application.c
+++ b/src/gcal-application.c
@@ -52,9 +52,13 @@ static gint gcal_application_command_line (GApplication *
static void gcal_application_set_app_menu (GApplication *app);
-static void gcal_application_changed_view (GSettings *settings,
- gchar *key,
- gpointer user_data);
+static void gcal_application_create_new_event (GSimpleAction *new_event,
+ GVariant *parameter,
+ gpointer *app);
+
+static void gcal_application_launch_search (GSimpleAction *search,
+ GVariant *parameter,
+ gpointer *app);
static void gcal_application_change_view (GSimpleAction *simple,
GVariant *parameter,
@@ -68,6 +72,10 @@ static void gcal_application_quit (GSimpleAction *
GVariant *parameter,
gpointer user_data);
+static void gcal_application_changed_view (GSettings *settings,
+ gchar *key,
+ gpointer user_data);
+
static gboolean gcal_application_window_state_changed (GtkWidget *widget,
GdkEvent *event,
gpointer user_data);
@@ -92,17 +100,17 @@ static GOptionEntry gcal_application_goptions[] = {
static void
gcal_application_class_init (GcalApplicationClass *klass)
{
- GApplicationClass *application_class;
GObjectClass *object_class;
+ GApplicationClass *application_class;
+
+ object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gcal_application_finalize;
application_class = G_APPLICATION_CLASS (klass);
application_class->activate = gcal_application_activate;
application_class->startup = gcal_application_startup;
application_class->command_line = gcal_application_command_line;
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = gcal_application_finalize;
-
g_type_class_add_private ((gpointer) klass, sizeof(GcalApplicationPrivate));
}
@@ -274,6 +282,8 @@ gcal_application_set_app_menu (GApplication *app)
GMenu *app_menu;
GMenu *view_as;
+ GSimpleAction *new_event;
+ GSimpleAction *search;
GSimpleAction *about;
GSimpleAction *quit;
@@ -284,15 +294,25 @@ gcal_application_set_app_menu (GApplication *app)
app_menu = g_menu_new ();
+ new_event = g_simple_action_new ("new_event", NULL);
+ g_signal_connect (new_event, "activate",
+ G_CALLBACK (gcal_application_create_new_event), app);
+ g_action_map_add_action ( G_ACTION_MAP (app), G_ACTION (new_event));
+ g_menu_append (app_menu, _("New Event"), "app.new_event");
+
+ search = g_simple_action_new ("search", NULL);
+ g_signal_connect (search, "activate",
+ G_CALLBACK (gcal_application_launch_search), app);
+ g_action_map_add_action ( G_ACTION_MAP (app), G_ACTION (search));
+ g_menu_append (app_menu, _("Search"), "app.search");
+
priv->view = g_simple_action_new_stateful (
"view",
G_VARIANT_TYPE_STRING,
g_settings_get_value (priv->settings, "active-view"));
- g_signal_connect (priv->view,
- "activate",
- G_CALLBACK (gcal_application_change_view),
- app);
+ g_signal_connect (priv->view, "activate",
+ G_CALLBACK (gcal_application_change_view), app);
g_action_map_add_action ( G_ACTION_MAP (app), G_ACTION (priv->view));
view_as = g_menu_new ();
@@ -304,24 +324,22 @@ gcal_application_set_app_menu (GApplication *app)
g_menu_append_section (app_menu, _("View as"), G_MENU_MODEL (view_as));
about = g_simple_action_new ("about", NULL);
- g_signal_connect (about,
- "activate",
- G_CALLBACK (gcal_application_show_about),
- app);
+ g_signal_connect (about, "activate",
+ G_CALLBACK (gcal_application_show_about), app);
g_action_map_add_action ( G_ACTION_MAP (app), G_ACTION (about));
g_menu_append (app_menu, _("About"), "app.about");
quit = g_simple_action_new ("quit", NULL);
- g_signal_connect (quit,
- "activate",
- G_CALLBACK (gcal_application_quit),
- app);
+ g_signal_connect (quit, "activate",
+ G_CALLBACK (gcal_application_quit), app);
g_action_map_add_action ( G_ACTION_MAP (app), G_ACTION (quit));
g_menu_append (app_menu, _("Quit"), "app.quit");
gtk_application_set_app_menu (GTK_APPLICATION (app), G_MENU_MODEL (app_menu));
/* Accelerators */
+ gtk_application_add_accelerator (GTK_APPLICATION (app), "<Primary>n", "app.new_event", NULL);
+ gtk_application_add_accelerator (GTK_APPLICATION (app), "<Primary>f", "app.search", NULL);
gtk_application_add_accelerator (GTK_APPLICATION (app), "<Primary>q", "app.quit", NULL);
va = g_variant_new_string ("month");
@@ -333,17 +351,27 @@ gcal_application_set_app_menu (GApplication *app)
}
static void
-gcal_application_changed_view (GSettings *settings,
- gchar *key,
- gpointer user_data)
+gcal_application_create_new_event (GSimpleAction *new_event,
+ GVariant *parameter,
+ gpointer *app)
{
GcalApplicationPrivate *priv;
- g_return_if_fail (GCAL_IS_APPLICATION (user_data));
- priv = GCAL_APPLICATION (user_data)->priv;
- g_simple_action_set_state (priv->view,
- g_settings_get_value (priv->settings,
- "active-view"));
+ priv = GCAL_APPLICATION (app)->priv;
+
+ gcal_window_new_event (GCAL_WINDOW (priv->window));
+}
+
+static void
+gcal_application_launch_search (GSimpleAction *search,
+ GVariant *parameter,
+ gpointer *app)
+{
+ GcalApplicationPrivate *priv;
+
+ priv = GCAL_APPLICATION (app)->priv;
+
+ gcal_window_set_search_mode (GCAL_WINDOW (priv->window), TRUE);
}
static void
@@ -417,6 +445,20 @@ gcal_application_quit (GSimpleAction *simple,
g_application_quit (app);
}
+static void
+gcal_application_changed_view (GSettings *settings,
+ gchar *key,
+ gpointer user_data)
+{
+ GcalApplicationPrivate *priv;
+
+ g_return_if_fail (GCAL_IS_APPLICATION (user_data));
+ priv = GCAL_APPLICATION (user_data)->priv;
+ g_simple_action_set_state (priv->view,
+ g_settings_get_value (priv->settings,
+ "active-view"));
+}
+
static gboolean
gcal_application_window_state_changed (GtkWidget *widget,
GdkEvent *event,
diff --git a/src/gcal-window.c b/src/gcal-window.c
index e0ade5c..1cf9e15 100644
--- a/src/gcal-window.c
+++ b/src/gcal-window.c
@@ -58,23 +58,23 @@ struct _GcalWindowPrivate
GtkWidget *search_entry;
GtkWidget *views_switcher;
- GtkWidget *sources_view;
- GtkWidget *views [5];
+ GtkWidget *views [5]; /* day, week, month, year, list */
GtkWidget *edit_dialog;
GcalWindowViewType active_view;
icaltimetype *active_date;
+ /* states */
+ gboolean new_event_mode;
+ gboolean search_mode;
+
+ /* FIXME: Review to see if this are needed */
/* temp to keep the will_delete event uuid */
gchar *event_to_delete;
/* 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
@@ -98,14 +98,15 @@ 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_view_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data);
+
static void gcal_window_search_toggled (GObject *object,
GParamSpec *pspec,
gpointer user_data);
@@ -116,20 +117,11 @@ static void gcal_window_search_changed (GtkEditable *e
static void gcal_window_view_updated (GtkButton *buttton,
gpointer user_data);
-static void gcal_window_set_active_view (GcalWindow *window,
- GcalWindowViewType view_type);
-
static GcalManager* gcal_window_get_manager (GcalWindow *window);
-static void gcal_window_set_sources_view (GcalWindow *window);
-
static void gcal_window_init_edit_dialog (GcalWindow *window);
-static void gcal_window_sources_row_activated (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- gpointer user_data);
-
+/* GcalManager signal handling */
static void gcal_window_events_added (GcalManager *manager,
gpointer events_list,
gpointer user_data);
@@ -223,12 +215,14 @@ gcal_window_init(GcalWindow *self)
GcalWindowPrivate);
priv = self->priv;
+ /* states */
+ priv->new_event_mode = FALSE;
+ priv->search_mode = FALSE;
+
+ /* FIXME: Review real need of this */
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
@@ -260,11 +254,9 @@ gcal_window_constructed (GObject *object)
gtk_style_context_add_class (
gtk_widget_get_style_context (priv->new_button),
"suggested-action");
- /* FIXME: gtk_actionable_set_action_name (GTK_ACTIONABLE (forward_button), "win.new-event"); */
gtk_header_bar_pack_start (GTK_HEADER_BAR (priv->header_bar), priv->new_button);
- /* header_bar: views. Temporarily, since this will be made of GdStackSwitcher */
- priv->views_switcher = gtk_image_new_from_icon_name ("face-wink-symbolic", GTK_ICON_SIZE_MENU);
+ priv->views_switcher = gtk_stack_switcher_new ();
g_object_ref_sink (priv->views_switcher);
gtk_header_bar_set_custom_title (GTK_HEADER_BAR (priv->header_bar),
priv->views_switcher);
@@ -311,8 +303,6 @@ gcal_window_constructed (GObject *object)
/* nav_bar */
priv->nav_bar = gcal_nav_bar_new ();
gtk_container_add (GTK_CONTAINER (priv->main_box), priv->nav_bar);
- g_object_set (priv->nav_bar, "left-header", "May", NULL);
- g_object_set (priv->nav_bar, "right-header", "2013", NULL);
/* overlay */
priv->views_overlay = gtk_overlay_new ();
@@ -320,19 +310,60 @@ gcal_window_constructed (GObject *object)
/* stack widget for holding views */
priv->views_stack = gtk_stack_new ();
- gtk_widget_set_vexpand (priv->views_stack, TRUE);
- gtk_widget_set_hexpand (priv->views_stack, TRUE);
+ g_object_set (priv->views_stack,
+ "vexpand", TRUE,
+ "hexpand", TRUE,
+ "transition-type", GTK_STACK_TRANSITION_TYPE_SLIDE_DOWN,
+ "transition-duration", 500,
+ NULL);
gtk_container_add (GTK_CONTAINER (priv->views_overlay), priv->views_stack);
gtk_style_context_add_class (
gtk_widget_get_style_context (priv->views_stack),
"views");
+ priv->views[GCAL_WINDOW_VIEW_DAY] = gcal_day_view_new ();
+ gtk_stack_add_titled (GTK_STACK (priv->views_stack),
+ priv->views[GCAL_WINDOW_VIEW_DAY],
+ "day", _("Day"));
+ g_object_bind_property (GCAL_WINDOW (object), "active-date",
+ priv->views[GCAL_WINDOW_VIEW_DAY], "active-date",
+ G_BINDING_DEFAULT);
+
+ priv->views[GCAL_WINDOW_VIEW_WEEK] = gcal_week_view_new ();
+ gtk_stack_add_titled (GTK_STACK (priv->views_stack),
+ priv->views[GCAL_WINDOW_VIEW_WEEK],
+ "week", _("Week"));
+ g_object_bind_property (GCAL_WINDOW (object), "active-date",
+ priv->views[GCAL_WINDOW_VIEW_WEEK], "active-date",
+ G_BINDING_DEFAULT);
+
+ priv->views[GCAL_WINDOW_VIEW_MONTH] = gcal_month_view_new ();
+ gtk_stack_add_titled (GTK_STACK (priv->views_stack),
+ priv->views[GCAL_WINDOW_VIEW_MONTH],
+ "month", _("Month"));
+ g_object_bind_property (GCAL_WINDOW (object), "active-date",
+ priv->views[GCAL_WINDOW_VIEW_MONTH], "active-date",
+ G_BINDING_DEFAULT);
+
+ priv->views[GCAL_WINDOW_VIEW_YEAR] = gcal_year_view_new ();
+ gtk_stack_add_titled (GTK_STACK (priv->views_stack),
+ priv->views[GCAL_WINDOW_VIEW_YEAR],
+ "year", _("Year"));
+ g_object_bind_property (GCAL_WINDOW (object), "active-date",
+ priv->views[GCAL_WINDOW_VIEW_YEAR], "active-date",
+ G_BINDING_DEFAULT);
+
+ gtk_stack_switcher_set_stack (GTK_STACK_SWITCHER (priv->views_switcher),
+ GTK_STACK (priv->views_stack));
+
/* signals connection/handling */
- g_signal_connect (priv->new_button, "clicked",
- G_CALLBACK (gcal_window_add_event), object);
+ g_signal_connect_swapped (priv->new_button, "clicked",
+ G_CALLBACK (gcal_window_new_event), object);
g_signal_connect (priv->views_overlay, "get-child-position",
G_CALLBACK (gcal_window_place_new_event_widget), object);
+ g_signal_connect (priv->views_stack, "notify::visible-child",
+ G_CALLBACK (gcal_window_view_changed), object);
g_signal_connect (priv->search_bar, "notify::search-mode-enabled",
G_CALLBACK (gcal_window_search_toggled), object);
g_signal_connect (priv->search_entry, "changed",
@@ -379,8 +410,9 @@ gcal_window_set_property (GObject *object,
switch (property_id)
{
case PROP_ACTIVE_VIEW:
- gcal_window_set_active_view (GCAL_WINDOW (object),
- g_value_get_enum (value));
+ gtk_stack_set_visible_child (GTK_STACK (priv->views_stack),
+ priv->views[g_value_get_enum (value)]);
+
return;
case PROP_ACTIVE_DATE:
if (priv->active_date != NULL)
@@ -415,16 +447,6 @@ gcal_window_get_property (GObject *object,
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
-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,
@@ -437,7 +459,7 @@ gcal_window_place_new_event_widget (GtkOverlay *overlay,
priv = GCAL_WINDOW (user_data)->priv;
- if (priv->x_pos == -1 || child != priv->new_event_widget)
+ if (child != priv->new_event_widget)
return FALSE;
gtk_widget_get_preferred_width (priv->new_event_widget,
@@ -455,8 +477,8 @@ gcal_window_place_new_event_widget (GtkOverlay *overlay,
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->x = 600;
+ allocation->y = 600;
allocation->width = nat_width;
allocation->height = nat_height;
@@ -470,6 +492,62 @@ gcal_window_place_new_event_widget (GtkOverlay *overlay,
}
static void
+gcal_window_view_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ GcalWindowPrivate *priv;
+
+ GcalWindow *window;
+
+ GEnumClass *eklass;
+ GEnumValue *eval;
+ GcalWindowViewType view_type;
+
+ GtkWidget *widget;
+ icaltimetype *first_day;
+ icaltimetype *last_day;
+
+ gchar *header;
+
+ priv = GCAL_WINDOW (user_data)->priv;
+
+ window = GCAL_WINDOW (user_data);
+
+ eklass = g_type_class_ref (gcal_window_view_type_get_type ());
+ eval = g_enum_get_value_by_nick (
+ eklass,
+ gtk_stack_get_visible_child_name (GTK_STACK (priv->views_stack)));
+
+ view_type = eval->value;
+
+ g_type_class_unref (eklass);
+
+ /* Get view_type from widget, or widget-name */
+ priv->active_view = view_type;
+ g_object_notify (G_OBJECT (window), "active-view");
+
+ widget = priv->views[view_type];
+
+ first_day = gcal_view_get_initial_date (GCAL_VIEW (widget));
+ last_day = gcal_view_get_final_date (GCAL_VIEW (widget));
+
+ gcal_manager_set_new_range (gcal_window_get_manager (window),
+ first_day,
+ last_day);
+ g_free (first_day);
+ g_free (last_day);
+
+ header = gcal_view_get_left_header (GCAL_VIEW (widget));
+ g_object_set (priv->nav_bar, "left-header", header, NULL);
+ g_free (header);
+
+ header = gcal_view_get_right_header (GCAL_VIEW (widget));
+ g_object_set (priv->nav_bar, "right-header", header, NULL);
+ g_free (header);
+}
+
+static void
gcal_window_search_toggled (GObject *object,
GParamSpec *pspec,
gpointer user_data)
@@ -565,87 +643,6 @@ gcal_window_view_updated (GtkButton *button,
/* g_free (last_day); */
}
-static void
-gcal_window_set_active_view (GcalWindow *window,
- GcalWindowViewType view_type)
-{
- GcalWindowPrivate *priv;
-
- gboolean update_range;
- icaltimetype *first_day;
- icaltimetype *last_day;
-
- g_return_if_fail (GCAL_IS_WINDOW (window));
- priv = window->priv;
-
- if (priv->views[view_type] != NULL)
- {
- gtk_stack_set_visible_child (GTK_STACK (priv->views_stack),
- priv->views[view_type]);
- priv->active_view = view_type;
- }
- else
- {
- switch (view_type)
- {
- case GCAL_WINDOW_VIEW_DAY:
- priv->views[GCAL_WINDOW_VIEW_DAY] = gcal_day_view_new ();
- break;
- case GCAL_WINDOW_VIEW_WEEK:
- priv->views[GCAL_WINDOW_VIEW_WEEK] = gcal_week_view_new ();
- break;
- case GCAL_WINDOW_VIEW_MONTH:
- priv->views[GCAL_WINDOW_VIEW_MONTH] = gcal_month_view_new ();
- break;
- case GCAL_WINDOW_VIEW_YEAR:
- priv->views[GCAL_WINDOW_VIEW_YEAR] = gcal_year_view_new ();
- break;
- default:
- g_debug ("Unimplemented view yet");
- return;
- }
-
- /* Bindings properties and signals */
- g_object_bind_property (priv->views[view_type], "active-date",
- window, "active-date",
- G_BINDING_DEFAULT);
-
- g_signal_connect (priv->views[view_type],
- "create-event",
- G_CALLBACK (gcal_window_new_event_show),
- window);
-
- priv->active_view = view_type;
-
- gtk_widget_show (priv->views[priv->active_view]);
- gtk_container_add (GTK_CONTAINER (priv->views_stack),
- priv->views[view_type]);
- gtk_stack_set_visible_child (GTK_STACK (priv->views_stack),
- priv->views[view_type]);
- }
-
- g_object_notify (G_OBJECT (window), "active-view");
-
-
- gcal_view_set_date (GCAL_VIEW (priv->views[priv->active_view]),
- priv->active_date);
- if (update_range)
- {
- first_day = gcal_view_get_initial_date (
- GCAL_VIEW (priv->views[priv->active_view]));
- last_day = gcal_view_get_final_date (
- GCAL_VIEW (priv->views[priv->active_view]));
-
- gcal_manager_set_new_range (
- gcal_window_get_manager (window),
- first_day,
- last_day);
-
- g_free (first_day);
- g_free (last_day);
- }
-}
-
static GcalManager*
gcal_window_get_manager (GcalWindow *window)
{
@@ -656,73 +653,6 @@ gcal_window_get_manager (GcalWindow *window)
}
static void
-gcal_window_set_sources_view (GcalWindow *window)
-{
- GcalWindowPrivate *priv;
- GcalManager *manager;
-
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
-
- priv = window->priv;
-
- manager = gcal_window_get_manager (window);
- priv->sources_view = gtk_tree_view_new_with_model (
- GTK_TREE_MODEL (gcal_manager_get_sources_model (manager)));
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->sources_view),
- FALSE);
- gtk_tree_selection_set_mode (
- gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->sources_view)),
- GTK_SELECTION_NONE);
- gcal_gtk_tree_view_set_activate_on_single_click (
- GTK_TREE_VIEW (priv->sources_view),
- TRUE);
-
- renderer = gtk_cell_renderer_toggle_new ();
- column = gtk_tree_view_column_new_with_attributes ("",
- renderer,
- "active",
- 2,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (priv->sources_view),
- column);
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("",
- renderer,
- "text",
- 1,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (priv->sources_view),
- column);
-
- renderer = e_cell_renderer_color_new ();
- column = gtk_tree_view_column_new_with_attributes ("",
- renderer,
- "color",
- 3,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (priv->sources_view),
- column);
-
- gtk_style_context_add_class (
- gtk_widget_get_style_context (priv->sources_view),
- "osd");
- /* FIXME: decide on this */
- /* gtk_container_add ( */
- /* GTK_CONTAINER (gtk_clutter_actor_get_contents ( */
- /* GTK_CLUTTER_ACTOR (priv->sources_actor))), */
- /* priv->sources_view); */
- gtk_widget_show (priv->sources_view);
-
- /* signals */
- g_signal_connect (priv->sources_view,
- "row-activated",
- G_CALLBACK (gcal_window_sources_row_activated),
- window);
-}
-
-static void
gcal_window_init_edit_dialog (GcalWindow *window)
{
GcalWindowPrivate *priv;
@@ -742,52 +672,26 @@ gcal_window_init_edit_dialog (GcalWindow *window)
window);
}
-static void
-gcal_window_sources_row_activated (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- gpointer user_data)
-{
- GcalWindowPrivate *priv;
- GtkTreeIter iter;
- gboolean active;
-
- priv = ((GcalWindow*) user_data)->priv;
-
- gtk_tree_model_get_iter (
- gtk_tree_view_get_model (GTK_TREE_VIEW (priv->sources_view)),
- &iter,
- path);
- gtk_tree_model_get (
- gtk_tree_view_get_model (GTK_TREE_VIEW (priv->sources_view)),
- &iter,
- 2, &active,
- -1);
-
- active ^= 1;
- gtk_list_store_set (
- GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (priv->sources_view))),
- &iter,
- 2, active,
- -1);
-}
-
+/* GcalManager signal handling */
static void
gcal_window_events_added (GcalManager *manager,
gpointer events_list,
gpointer user_data)
{
GcalWindowPrivate *priv;
+
GSList *l;
gchar **tokens;
gchar *source_uid;
gchar *event_uid;
+ GcalView *view;
GtkWidget *event;
icaltimetype *starting_date;
priv = GCAL_WINDOW (user_data)->priv;
+ view = GCAL_VIEW (priv->views[priv->active_view]);
for (l = events_list; l != NULL; l = l->next)
{
@@ -797,12 +701,14 @@ gcal_window_events_added (GcalManager *manager,
starting_date = gcal_manager_get_event_start_date (manager,
source_uid,
event_uid);
- if (gcal_view_contains_date (
- GCAL_VIEW (priv->views[priv->active_view]),
- starting_date) &&
- gcal_view_get_by_uuid (
- GCAL_VIEW (priv->views[priv->active_view]),
- (gchar*)l->data) == NULL)
+
+ /* FIXME: erase me */
+ /* g_debug ("add: %s with date %s", */
+ /* (gchar*) l->data, */
+ /* icaltime_as_ical_string (*starting_date)); */
+
+ if (gcal_view_contains_date (view, starting_date) &&
+ gcal_view_get_by_uuid (view, (gchar*)l->data) == NULL)
{
event = gcal_event_widget_new ((gchar*) l->data);
@@ -812,11 +718,7 @@ gcal_window_events_added (GcalManager *manager,
GCAL_EVENT_WIDGET (event));
gtk_widget_show (event);
- /* FIXME: add event-widget to every instantiated view, not pretty sure
- * about this. */
- gtk_container_add (
- GTK_CONTAINER (priv->views[priv->active_view]),
- event);
+ gtk_container_add (GTK_CONTAINER (view), event);
g_signal_connect (event,
"activate",
@@ -1042,9 +944,6 @@ gcal_window_new_event_show (GcalView *view,
gtk_overlay_add_overlay (GTK_OVERLAY (priv->views_overlay),
priv->new_event_widget);
- priv->x_pos = x;
- priv->y_pos = y;
-
g_debug ("position (%f, %f)", x, y);
}
@@ -1075,9 +974,6 @@ gcal_window_create_event (GcalEventOverlay *widget,
/* reset and hide */
gcal_view_clear_selection (GCAL_VIEW (priv->views[priv->active_view]));
gtk_widget_destroy (priv->new_event_widget);
-
- priv->x_pos = -1;
- priv->y_pos = -1;
}
static void
@@ -1244,31 +1140,40 @@ gcal_window_update_event_widget (GcalManager *manager,
{
gchar *summary;
GdkRGBA *color;
- icaltimetype *starting_date;
+ icaltimetype *date;
summary = gcal_manager_get_event_summary (manager,
source_uid,
event_uid);
+ gcal_event_widget_set_summary (widget, summary);
color = gcal_manager_get_event_color (manager,
source_uid,
event_uid);
- starting_date = gcal_manager_get_event_start_date (manager,
- source_uid,
- event_uid);
- gcal_event_widget_set_summary (widget, summary);
gcal_event_widget_set_color (widget, color);
- gcal_event_widget_set_date (widget, starting_date);
+
+ date = gcal_manager_get_event_start_date (manager,
+ source_uid,
+ event_uid);
+ gcal_event_widget_set_date (widget, date);
+
+ g_free (date);
+ date = gcal_manager_get_event_end_date (manager,
+ source_uid,
+ event_uid);
+ gcal_event_widget_set_end_date (widget, date);
+
gcal_event_widget_set_all_day (
widget,
gcal_manager_get_event_all_day (manager, source_uid, event_uid));
+
gcal_event_widget_set_has_reminders (
widget,
gcal_manager_has_event_reminders (manager, source_uid, event_uid));
g_free (summary);
gdk_rgba_free (color);
- g_free (starting_date);
+ g_free (date);
}
/* Public API */
@@ -1316,6 +1221,22 @@ gcal_window_new_with_view (GcalApplication *app,
}
void
+gcal_window_new_event (GcalWindow *window)
+{
+ g_debug ("Enter here: event creation");
+}
+
+void
+gcal_window_set_search_mode (GcalWindow *window,
+ gboolean enabled)
+{
+ GcalWindowPrivate *priv;
+
+ priv = window->priv;
+ gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (priv->search_bar), enabled);
+}
+
+void
gcal_window_show_notification (GcalWindow *window)
{
GcalWindowPrivate *priv;
diff --git a/src/gcal-window.h b/src/gcal-window.h
index 79eb4cb..c71ac96 100644
--- a/src/gcal-window.h
+++ b/src/gcal-window.h
@@ -52,14 +52,19 @@ struct _GcalWindowClass
};
-GType gcal_window_get_type (void);
+GType gcal_window_get_type (void);
-GtkWidget* gcal_window_new_with_view (GcalApplication *app,
- GcalWindowViewType view_type);
+GtkWidget* gcal_window_new_with_view (GcalApplication *app,
+ GcalWindowViewType view_type);
-void gcal_window_show_notification (GcalWindow *window);
+void gcal_window_new_event (GcalWindow *window);
-void gcal_window_hide_notification (GcalWindow *window);
+void gcal_window_set_search_mode (GcalWindow *window,
+ gboolean enabled);
+
+void gcal_window_show_notification (GcalWindow *window);
+
+void gcal_window_hide_notification (GcalWindow *window);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]