2 #include <gconf/gconf.h>
3 #include <gconf/gconf-client.h>
6 void create_notification_window(GTodoItem
*item
);
7 void notification_window_cancel(GtkWidget
*but_cancel
);
8 void notification_window_remove_notification(GtkWidget
*but_cancel
, gpointer data
);
9 void notification_window_set_notification(GtkWidget
*check_but
, gpointer data
);
18 int check_for_notification_event(void)
20 GTodoList
*list
= NULL
;
21 int min_b_not
= gconf_client_get_int(client
, "/apps/gtodo/prefs/notify_in_minutes",NULL
);
22 if(!gconf_client_get_bool(client
, "/apps/gtodo/prefs/do_notification",NULL
)) return TRUE
;
23 list
= gtodo_client_get_todo_item_list(cl
, NULL
);
24 if(list
== NULL
) return TRUE
;
26 GTodoItem
*item
= gtodo_client_get_todo_item_from_list(list
);
27 if(!gtodo_todo_item_get_done(item
) && gtodo_todo_item_get_notify(item
))
29 if((gtodo_todo_item_check_due(item
) == 0 && gtodo_todo_item_check_due_time_minutes_left(item
) <= min_b_not
)
30 || (gtodo_todo_item_check_due(item
) > 0 && gtodo_todo_item_get_due_date_as_julian(item
) != GTODO_NO_DUE_DATE
))
32 create_notification_window(item
);
35 }while(gtodo_client_get_list_next(list
));
36 gtodo_client_free_todo_item_list(cl
, list
);
42 void create_notification_window(GTodoItem
*item
)
44 GtkWidget
*dialog
, *but_cancel
, *image
, *ck_but
;
45 GtkWidget
*hbox
, *label
, *vbox
;
46 gchar
*buffer
, *tempstr
;
47 if(table
== NULL
) table
= g_array_new(TRUE
, TRUE
, sizeof(GtkWidget
*));
49 not_window
*test
=NULL
;
53 test
= g_array_index(table
, not_window
*, i
);
54 if(test
== NULL
) break;
55 if(test
->id
== gtodo_todo_item_get_id(item
))
57 gtk_window_present(GTK_WINDOW(test
->dialog
));
63 if(gtodo_todo_item_check_due(item
) == 0 && gtodo_todo_item_check_due_time_minutes_left(item
) > 0 )
65 int minutes
= gtodo_todo_item_check_due_time_minutes_left(item
);
66 tempstr
= g_strdup_printf("<span weight=\"bold\" size=\"larger\">%s</span>\n\"%s\"",
67 ngettext("The following item is due in %i minute:",
68 "The following item is due in %i minutes:", minutes
),
69 gtodo_todo_item_get_summary(item
));
70 buffer
= g_strdup_printf(tempstr
, minutes
);
75 buffer
= g_strdup_printf("<span weight=\"bold\" size=\"larger\">%s</span>\n\"%s\"",
76 _("The following item is due:"),
77 gtodo_todo_item_get_summary(item
));
79 /* create image and more stuff in dialog */
80 dialog
= gtk_dialog_new();
81 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog
)), 6);
82 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog
)->vbox
), 12);
84 gtk_dialog_set_has_separator(GTK_DIALOG(dialog
), FALSE
);
85 gtk_window_set_transient_for(GTK_WINDOW(dialog
), GTK_WINDOW(mw
.window
));
86 gtk_window_set_type_hint(GTK_WINDOW(dialog
), GDK_WINDOW_TYPE_HINT_DIALOG
);
87 gtk_window_set_position(GTK_WINDOW(dialog
), GTK_WIN_POS_CENTER_ALWAYS
);
88 gtk_window_set_modal(GTK_WINDOW(dialog
), TRUE
);
89 gtk_window_set_title(GTK_WINDOW(dialog
),"Warning");
90 gtk_window_set_resizable(GTK_WINDOW(dialog
), FALSE
);
91 gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog
), TRUE
);
93 hbox
= gtk_hbox_new(FALSE
,6);
94 gtk_container_set_border_width(GTK_CONTAINER(hbox
), 12);
95 vbox
= gtk_vbox_new(FALSE
, 0);
97 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog
)->vbox
), hbox
, TRUE
, TRUE
,0);
99 image
= gtk_image_new_from_stock(GTK_STOCK_DIALOG_INFO
, GTK_ICON_SIZE_DIALOG
);
100 label
= gtk_alignment_new(0.5, 0,0,0);
101 gtk_container_add(GTK_CONTAINER(label
), image
);
103 gtk_box_pack_start(GTK_BOX(hbox
), label
, FALSE
, TRUE
,0);
105 gtk_box_pack_start(GTK_BOX(hbox
), vbox
, TRUE
, TRUE
,12);
108 label
= gtk_label_new("");
109 gtk_label_set_markup(GTK_LABEL(label
), buffer
);
110 gtk_label_set_line_wrap(GTK_LABEL(label
), TRUE
);
111 image
= gtk_alignment_new(0.5,0,0,0);
112 gtk_container_add(GTK_CONTAINER(image
), label
);
113 gtk_box_pack_start(GTK_BOX(vbox
), image
, TRUE
, TRUE
,0);
114 /* gtk_container_set_border_width(GTK_CONTAINER(hbox), 9);*/
116 ck_but
= gtk_check_button_new_with_mnemonic(_("_Do not show again"));
117 label
= gtk_alignment_new(1, 1,0,0);
118 gtk_container_add(GTK_CONTAINER(label
), ck_but
);
119 gtk_box_pack_end(GTK_BOX(vbox
), label
, FALSE
, FALSE
,12);
121 g_signal_connect(G_OBJECT(ck_but
), "toggled", G_CALLBACK(notification_window_set_notification
), GINT_TO_POINTER(gtodo_todo_item_get_id(item
)));
123 but_cancel
= gtk_dialog_add_button(GTK_DIALOG(dialog
), GTK_STOCK_OPEN
, GTK_RESPONSE_CANCEL
);
125 g_signal_connect(G_OBJECT(but_cancel
), "clicked", G_CALLBACK(notification_window_remove_notification
),GINT_TO_POINTER(gtodo_todo_item_get_id(item
)));
127 but_cancel
= gtk_dialog_add_button(GTK_DIALOG(dialog
),GTK_STOCK_CLOSE
, GTK_RESPONSE_CANCEL
);
128 g_signal_connect(G_OBJECT(but_cancel
), "clicked", G_CALLBACK(notification_window_cancel
), NULL
);
130 /* set window signal */
131 g_signal_connect(G_OBJECT(dialog
), "destroy", G_CALLBACK(notification_window_cancel
), NULL
);
134 gtk_widget_show_all(dialog
);
136 not_window
*nw
= g_malloc(sizeof(not_window
));
138 nw
->id
= gtodo_todo_item_get_id(item
);
139 g_array_append_vals(table
, &nw
, 1);
143 /* destroy the notification window */
144 void notification_window_cancel(GtkWidget
*but_cancel
)
146 GtkWidget
*dialog
= gtk_widget_get_toplevel(but_cancel
);
147 not_window
*test
= NULL
;
151 test
= g_array_index(table
, not_window
*, i
);
152 if(test
== NULL
) break;
153 if(test
->dialog
== dialog
)
156 g_array_remove_index(table
, i
);
159 }while(test
!= NULL
);
161 gtk_widget_destroy(dialog
);
164 void notification_window_remove_notification(GtkWidget
*but_cancel
, gpointer data
)
166 gint id
= GPOINTER_TO_INT(data
);
167 notification_window_cancel(but_cancel
);
168 gui_add_todo_item(NULL
, GINT_TO_POINTER(1), id
);
171 void notification_window_set_notification(GtkWidget
*check_but
, gpointer data
)
173 gint id
= GPOINTER_TO_INT(data
);
174 GTodoItem
*item
= gtodo_client_get_todo_item_from_id(cl
, id
);
177 gtodo_todo_item_set_notify(item
, !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_but
)));
178 gtodo_client_edit_todo_item(cl
, item
);