CVS: sylpheedclaws/plugins/vcalendar/src vcal_meeting_gtk.c,1.1.2.47,1.1.2.48

[email protected] Wed, 27 Dec 2006 22:59:42 +0000
Newsgroups gmane.mail.sylpheed.claws.cvs
Message-ID <[email protected]>
Update of /pack/anoncvs/sylpheedclaws/plugins/vcalendar/src
In directory sunsite.dk:/tmp/cvs-serv5204/src

Modified Files:
      Tag: gtk2
	vcal_meeting_gtk.c 
Log Message:
2006-12-27 [colin]	1.91.0cvs8

	* src/vcal_meeting_gtk.c
		Better handling of bound moves when
		creating a meeting

Index: vcal_meeting_gtk.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/plugins/vcalendar/src/vcal_meeting_gtk.c,v
retrieving revision 1.1.2.47
retrieving revision 1.1.2.48
diff -u -d -r1.1.2.47 -r1.1.2.48
--- vcal_meeting_gtk.c	2006/12/27 20:45:57	1.1.2.47
+++ vcal_meeting_gtk.c	2006/12/27 22:59:38	1.1.2.48
@@ -155,29 +155,6 @@
 	return g_strdup(mon);
 }
 
-static gint get_curdate(gint field)
-{
-	struct tm *lt;
-	time_t t;
-
-	t = time(NULL);
-	lt = localtime(&t);
-
-	switch(field){
-	case DAY:
-		return lt->tm_mday;
-	case MONTH:
-		return lt->tm_mon + 1;
-	case YEAR:
-		return lt->tm_year + 1900;
-	case HOUR:
-		return lt->tm_hour;
-	case MINUTE:
-		return lt->tm_min;
-	}
-	return -1;
-}
-
 static gint get_dtdate(const gchar *str, gint field)
 {
 	time_t t = icaltime_as_timet((icaltime_from_string(str)));
@@ -402,6 +379,7 @@
 	}
 	return FALSE;
 }
+static void meeting_end_changed(GtkWidget *widget, gpointer data);
 
 static void meeting_start_changed(GtkWidget *widget, gpointer data)
 {
@@ -443,6 +421,10 @@
 	end_lt = localtime(&end_t);
 	debug_print("n %d %d %d, %d:%d\n", end_lt->tm_mday, end_lt->tm_mon, end_lt->tm_year, end_lt->tm_hour, end_lt->tm_min);
 
+	g_signal_handlers_block_by_func(meet->end_hh, meeting_end_changed, meet);
+	g_signal_handlers_block_by_func(meet->end_mm, meeting_end_changed, meet);
+	g_signal_handlers_block_by_func(meet->end_c, meeting_end_changed, meet);
+
 	gtk_calendar_select_day(GTK_CALENDAR(meet->end_c), end_lt->tm_mday);
 
 	gtk_calendar_select_month(GTK_CALENDAR(meet->end_c),
@@ -452,6 +434,68 @@
 				end_lt->tm_hour);	
 	gtk_spin_button_set_value(GTK_SPIN_BUTTON(meet->end_mm),
 				end_lt->tm_min);	
+
+	g_signal_handlers_unblock_by_func(meet->end_hh, meeting_end_changed, meet);
+	g_signal_handlers_unblock_by_func(meet->end_mm, meeting_end_changed, meet);
+	g_signal_handlers_unblock_by_func(meet->end_c, meeting_end_changed, meet);
+}
+
+static void meeting_end_changed(GtkWidget *widget, gpointer data)
+{
+	VCalMeeting *meet = (VCalMeeting *)data;
+	struct tm *start_lt;
+	struct tm *end_lt;
+	time_t start_t, end_t;
+	guint d, m, y;
+
+	start_t = time(NULL);
+	end_t = time(NULL);
+	start_lt = localtime(&start_t);
+	end_lt = localtime(&end_t);
+	
+	gtk_calendar_get_date(GTK_CALENDAR(meet->start_c), &y, &m, &d);
+	start_lt->tm_mday = d; start_lt->tm_mon  = m; start_lt->tm_year = y - 1900;
+	start_lt->tm_hour = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(meet->start_hh));
+	start_lt->tm_min = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(meet->start_mm));
+	start_lt->tm_sec = 0;
+
+	start_t = mktime(start_lt);
+	debug_print("start %s\n", ctime(&start_t));
+
+	gtk_calendar_get_date(GTK_CALENDAR(meet->end_c), &y, &m, &d);
+	end_lt->tm_mday = d; end_lt->tm_mon  = m; end_lt->tm_year = y - 1900;
+	end_lt->tm_hour = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(meet->end_hh));
+	end_lt->tm_min = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(meet->end_mm));
+	end_lt->tm_sec = 0;
+
+	end_t = mktime(end_lt);
+
+	debug_print("end   %s\n", ctime(&end_t));
+	
+	if (end_t > start_t) {
+		debug_print("ok\n");
+		return;
+	}
+	start_t = end_t - 3600;
+	start_lt = localtime(&start_t);
+
+	g_signal_handlers_block_by_func(meet->start_hh, meeting_start_changed, meet);
+	g_signal_handlers_block_by_func(meet->start_mm, meeting_start_changed, meet);
+	g_signal_handlers_block_by_func(meet->start_c, meeting_start_changed, meet);
+
+	gtk_calendar_select_day(GTK_CALENDAR(meet->start_c), start_lt->tm_mday);
+
+	gtk_calendar_select_month(GTK_CALENDAR(meet->start_c),
+				start_lt->tm_mon,
+				start_lt->tm_year + 1900);
+	gtk_spin_button_set_value(GTK_SPIN_BUTTON(meet->start_hh),
+				start_lt->tm_hour);	
+	gtk_spin_button_set_value(GTK_SPIN_BUTTON(meet->start_mm),
+				start_lt->tm_min);	
+
+	g_signal_handlers_unblock_by_func(meet->start_hh, meeting_start_changed, meet);
+	g_signal_handlers_unblock_by_func(meet->start_mm, meeting_start_changed, meet);
+	g_signal_handlers_unblock_by_func(meet->start_c, meeting_start_changed, meet);
 }
 
 GtkTooltips *avail_tips = NULL;
@@ -1081,7 +1125,7 @@
 	GtkWidget *date_hbox, *date_vbox, *save_hbox, *label, *vbox, *hbox;
 	gchar *s = NULL;
 	GtkObject *start_h_adj, *start_m_adj, *end_h_adj, *end_m_adj;
-	int i = 0, decs = -1, dece = -1, num = 0;
+	int i = 0, num = 0;
 	GtkWidget *scrolledwin;
 
 	GList *accounts;
@@ -1168,29 +1212,30 @@
 	g_signal_connect(G_OBJECT(meet->window), "key_press_event",
 			 G_CALLBACK(meeting_key_pressed), meet);
 	
-	g_signal_connect(G_OBJECT(meet->start_hh), "value-changed",
-			 G_CALLBACK(meeting_start_changed), meet);
-
-	g_signal_connect(G_OBJECT(meet->start_mm), "value-changed",
-			 G_CALLBACK(meeting_start_changed), meet);
-
-	g_signal_connect(G_OBJECT(meet->start_c), "day-selected",
-			 G_CALLBACK(meeting_start_changed), meet);
-
 
 	gtk_widget_set_size_request(meet->description, -1, 100);
 	gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(meet->description), GTK_WRAP_WORD);
-
-	if (get_curdate(HOUR) + 2 > 23)
-		dece = 0;
-	else if (get_curdate(HOUR) + 1 > 23)
-		decs = dece = 0;
 	
 	if (!event) {
+		time_t t = time (NULL)+ 3600;
+ 		struct tm *lt = localtime (&t);
+		mktime(lt);
+		gtk_calendar_select_day(GTK_CALENDAR(meet->start_c),
+					lt->tm_mday);
+		gtk_calendar_select_month(GTK_CALENDAR(meet->start_c),
+					lt->tm_mon, lt->tm_year + 1900);
 		gtk_spin_button_set_value(GTK_SPIN_BUTTON(meet->start_hh),
-			(get_curdate(HOUR)+1)%24);
+			lt->tm_hour);
+		t += 3600;
+		lt = localtime(&t);
+		
+		gtk_calendar_select_day(GTK_CALENDAR(meet->end_c),
+					lt->tm_mday);
+		gtk_calendar_select_month(GTK_CALENDAR(meet->end_c),
+					lt->tm_mon, lt->tm_year + 1900);
 		gtk_spin_button_set_value(GTK_SPIN_BUTTON(meet->end_hh),
-			(get_curdate(HOUR)+2)%24);
+			lt->tm_hour);
+
 		gtk_spin_button_set_value(GTK_SPIN_BUTTON(meet->start_mm),
 			0);
 		gtk_spin_button_set_value(GTK_SPIN_BUTTON(meet->end_mm),
@@ -1217,6 +1262,25 @@
 		gtk_spin_button_set_value(GTK_SPIN_BUTTON(meet->end_mm),
 			get_dtdate(event->dtend, MINUTE));
 	}
+
+	g_signal_connect(G_OBJECT(meet->start_hh), "value-changed",
+			 G_CALLBACK(meeting_start_changed), meet);
+
+	g_signal_connect(G_OBJECT(meet->start_mm), "value-changed",
+			 G_CALLBACK(meeting_start_changed), meet);
+
+	g_signal_connect(G_OBJECT(meet->start_c), "day-selected",
+			 G_CALLBACK(meeting_start_changed), meet);
+
+	g_signal_connect(G_OBJECT(meet->end_hh), "value-changed",
+			 G_CALLBACK(meeting_end_changed), meet);
+
+	g_signal_connect(G_OBJECT(meet->end_mm), "value-changed",
+			 G_CALLBACK(meeting_end_changed), meet);
+
+	g_signal_connect(G_OBJECT(meet->end_c), "day-selected",
+			 G_CALLBACK(meeting_end_changed), meet);
+
 	gtk_widget_set_size_request(meet->start_mm, 40, -1);
 	gtk_widget_set_size_request(meet->start_hh, 40, -1);
 	gtk_widget_set_size_request(meet->end_mm, 40, -1);