diff --git a/data/ui/nav_bar.ui b/data/ui/nav_bar.ui
index 054830ca..b5af6fb5 100644
--- a/data/ui/nav_bar.ui
+++ b/data/ui/nav_bar.ui
@@ -37,6 +37,28 @@
0
+
+
+
+ False
+ True
+ 1
+
+
True
@@ -56,7 +78,7 @@
False
True
- 1
+ 2
diff --git a/src/gcal-nav-bar.c b/src/gcal-nav-bar.c
index f59c6868..0fb7dfd2 100644
--- a/src/gcal-nav-bar.c
+++ b/src/gcal-nav-bar.c
@@ -26,6 +26,7 @@
typedef struct
{
GtkWidget *back_button;
+ GtkWidget *today_button;
GtkWidget *forward_button;
GtkWidget *left_label;
@@ -88,6 +89,7 @@ gcal_nav_bar_class_init (GcalNavBarClass *klass)
/* Bind internals widgets */
gtk_widget_class_bind_template_child_private (widget_class, GcalNavBar, back_button);
+ gtk_widget_class_bind_template_child_private (widget_class, GcalNavBar, today_button);
gtk_widget_class_bind_template_child_private (widget_class, GcalNavBar, forward_button);
gtk_widget_class_bind_template_child_private (widget_class, GcalNavBar, left_label);
gtk_widget_class_bind_template_child_private (widget_class, GcalNavBar, right_label);
@@ -174,6 +176,15 @@ gcal_nav_bar_get_prev_button (GcalNavBar *nav_bar)
return priv->back_button;
}
+GtkWidget*
+gcal_nav_bar_get_today_button (GcalNavBar *nav_bar)
+{
+ GcalNavBarPrivate *priv;
+
+ priv = gcal_nav_bar_get_instance_private (nav_bar);
+ return priv->today_button;
+}
+
GtkWidget*
gcal_nav_bar_get_next_button (GcalNavBar *nav_bar)
{
diff --git a/src/gcal-nav-bar.h b/src/gcal-nav-bar.h
index 076ef406..9ed3f16b 100644
--- a/src/gcal-nav-bar.h
+++ b/src/gcal-nav-bar.h
@@ -50,6 +50,8 @@ GtkWidget* gcal_nav_bar_new (void);
GtkWidget* gcal_nav_bar_get_prev_button (GcalNavBar *nav_bar);
+GtkWidget* gcal_nav_bar_get_today_button (GcalNavBar *nav_bar);
+
GtkWidget* gcal_nav_bar_get_next_button (GcalNavBar *nav_bar);
G_END_DECLS
diff --git a/src/gcal-window.c b/src/gcal-window.c
index 9335bc9c..d5395f26 100644
--- a/src/gcal-window.c
+++ b/src/gcal-window.c
@@ -257,28 +257,39 @@ date_updated (GtkButton *button,
{
GcalWindowPrivate *priv;
- gboolean move_back;
+ gboolean move_back, move_today;
priv = gcal_window_get_instance_private (GCAL_WINDOW (user_data));
+ move_today = gcal_nav_bar_get_today_button (GCAL_NAV_BAR (priv->nav_bar)) == (GtkWidget*) button;
move_back = gcal_nav_bar_get_prev_button (GCAL_NAV_BAR (priv->nav_bar)) == (GtkWidget*) button;
- switch (priv->active_view)
+ if (move_today)
{
- case GCAL_WINDOW_VIEW_DAY:
- priv->active_date->day += 1 * (move_back ? -1 : 1);
- break;
- case GCAL_WINDOW_VIEW_WEEK:
- priv->active_date->day += 7 * (move_back ? -1 : 1);
- break;
- case GCAL_WINDOW_VIEW_MONTH:
- priv->active_date->month += 1 * (move_back ? -1 : 1);
- break;
- case GCAL_WINDOW_VIEW_YEAR:
- priv->active_date->year += 1 * (move_back ? -1 : 1);
- break;
- case GCAL_WINDOW_VIEW_LIST:
- break;
+ GcalManager *manager;
+
+ manager = get_manager (GCAL_WINDOW (user_data));
+ *(priv->active_date) = icaltime_current_time_with_zone (gcal_manager_get_system_timezone (manager));
+ }
+ else
+ {
+ switch (priv->active_view)
+ {
+ case GCAL_WINDOW_VIEW_DAY:
+ priv->active_date->day += 1 * (move_back ? -1 : 1);
+ break;
+ case GCAL_WINDOW_VIEW_WEEK:
+ priv->active_date->day += 7 * (move_back ? -1 : 1);
+ break;
+ case GCAL_WINDOW_VIEW_MONTH:
+ priv->active_date->month += 1 * (move_back ? -1 : 1);
+ break;
+ case GCAL_WINDOW_VIEW_YEAR:
+ priv->active_date->year += 1 * (move_back ? -1 : 1);
+ break;
+ case GCAL_WINDOW_VIEW_LIST:
+ break;
+ }
}
*(priv->active_date) = icaltime_normalize (*(priv->active_date));
g_object_notify (user_data, "active-date");
@@ -1054,6 +1065,8 @@ gcal_window_constructed (GObject *object)
G_CALLBACK (view_changed), object);
g_signal_connect (gcal_nav_bar_get_prev_button (GCAL_NAV_BAR (priv->nav_bar)),
"clicked", G_CALLBACK (date_updated), object);
+ g_signal_connect (gcal_nav_bar_get_today_button (GCAL_NAV_BAR (priv->nav_bar)),
+ "clicked", G_CALLBACK (date_updated), object);
g_signal_connect (gcal_nav_bar_get_next_button (GCAL_NAV_BAR (priv->nav_bar)),
"clicked", G_CALLBACK (date_updated), object);
}