From 75d0c4dc17d6b984199f14b7f75e42d64d1e2dd2 Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Mon, 25 Jun 2012 12:54:28 +0200
Subject: Remove the need for the "day_saved_item" struct

Do not store the currently selected item in day_write_pad() -- use
day_get_item() and apoint_hilt() in day_popup_item() instead.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
---
 src/day.c   | 48 +++++++++++++++++++-----------------------------
 src/utils.c | 10 +++++-----
 2 files changed, 24 insertions(+), 34 deletions(-)

(limited to 'src')

diff --git a/src/day.c b/src/day.c
index fdb8a53..5691ef1 100644
--- a/src/day.c
+++ b/src/day.c
@@ -42,16 +42,7 @@
 
 #include "calcurse.h"
 
-struct day_saved_item {
-  char start[BUFSIZ];
-  char end[BUFSIZ];
-  char state;
-  char type;
-  char *mesg;
-};
-
 static llist_t day_items;
-static struct day_saved_item day_saved_item;
 
 static void day_free(struct day_item *day)
 {
@@ -406,14 +397,11 @@ display_item(struct day_item *day, int incolor, int width, int y, int x)
 /*
  * Write the appointments and events for the selected day in a pad.
  * An horizontal line is drawn between events and appointments, and the
- * item selected by user is highlighted. This item is also saved inside
- * structure (pointed by day_saved_item), to be later displayed in a
- * popup window if requested.
+ * item selected by user is highlighted.
  */
 void day_write_pad(long date, int width, int length, int incolor)
 {
   llist_item_t *i;
-  struct apoint a;
   int line, item_number;
   const int x_pos = 0;
   unsigned draw_line = 0;
@@ -426,10 +414,6 @@ void day_write_pad(long date, int width, int length, int incolor)
     /* First print the events for current day. */
     if (day->type < RECUR_APPT) {
       item_number++;
-      if (item_number - incolor == 0) {
-        day_saved_item.type = day->type;
-        day_saved_item.mesg = day_item_get_mesg(day);
-      }
       display_item(day, item_number - incolor, width - 7, line, x_pos);
       line++;
       draw_line = 1;
@@ -442,11 +426,6 @@ void day_write_pad(long date, int width, int length, int incolor)
       }
       /* Last print the appointments for current day. */
       item_number++;
-      if (item_number - incolor == 0) {
-        day_saved_item.type = day->type;
-        day_saved_item.mesg = day_item_get_mesg(day);
-        apoint_sec2str(&a, date, day_saved_item.start, day_saved_item.end);
-      }
       display_item_date(day, item_number - incolor, date, line + 1, x_pos);
       display_item(day, item_number - incolor, width - 7, line + 2, x_pos);
       line += 3;
@@ -457,14 +436,25 @@ void day_write_pad(long date, int width, int length, int incolor)
 /* Display an item inside a popup window. */
 void day_popup_item(void)
 {
-  if (day_saved_item.type == EVNT || day_saved_item.type == RECUR_EVNT)
-    item_in_popup(NULL, NULL, day_saved_item.mesg, _("Event :"));
-  else if (day_saved_item.type == APPT || day_saved_item.type == RECUR_APPT)
-    item_in_popup(day_saved_item.start, day_saved_item.end,
-                  day_saved_item.mesg, _("Appointment :"));
-  else
+  struct day_item *day = day_get_item(apoint_hilt());
+
+  if (day->type == EVNT || day->type == RECUR_EVNT) {
+    item_in_popup(NULL, NULL, day_item_get_mesg(day), _("Event :"));
+  } else if (day->type == APPT || day->type == RECUR_APPT) {
+    char a_st[100], a_end[100];
+
+    /* FIXME: Redesign apoint_sec2str() and remove the need for a temporary
+     * appointment item here. */
+    struct apoint apt_tmp;
+    apt_tmp.start = day->start;
+    apt_tmp.dur = day_item_get_duration(day);
+    apoint_sec2str(&apt_tmp, calendar_get_slctd_day_sec(), a_st, a_end);
+
+    item_in_popup(a_st, a_end, day_item_get_mesg(day), _("Appointment :"));
+  } else {
     EXIT(_("unknown item type"));
-  /* NOTREACHED */
+    /* NOTREACHED */
+  }
 }
 
 /*
diff --git a/src/utils.c b/src/utils.c
index 14de867..a4780b5 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -492,8 +492,8 @@ draw_scrollbar(WINDOW * win, int y, int x, int length,
  * long to fit in its corresponding panel window.
  */
 void
-item_in_popup(const char *saved_a_start, const char *saved_a_end,
-              const char *msg, const char *pop_title)
+item_in_popup(const char *a_start, const char *a_end, const char *msg,
+              const char *pop_title)
 {
   WINDOW *popup_win, *pad;
   const int margin_left = 4, margin_top = 4;
@@ -502,9 +502,9 @@ item_in_popup(const char *saved_a_start, const char *saved_a_end,
 
   pad = newpad(padl, padw);
   popup_win = popup(winl, winw, 1, 2, pop_title, NULL, 1);
-  if (strcmp(pop_title, _("Appointment")) == 0) {
-    mvwprintw(popup_win, margin_top, margin_left, "- %s -> %s",
-              saved_a_start, saved_a_end);
+  if (a_start && a_end) {
+    mvwprintw(popup_win, margin_top, margin_left, "- %s -> %s", a_start,
+              a_end);
   }
   mvwaddstr(pad, 0, margin_left, msg);
   wmove(win[STA].p, 0, 0);
-- 
cgit v1.2.3-70-g09d2