From e1bb13206d87758b3602fd36a6e52977de3ca55a Mon Sep 17 00:00:00 2001 From: Nils Faerber Date: Thu, 8 Jun 2006 19:03:52 +0000 Subject: [PATCH] * minor cleanup * added modfied detection for editor window, allows to implement dialog to ask user if he/she wants to discard changes pmo-trunk-r199 --- src/gtk-glade/modest-ui-glade.h | 1 - src/gtk-glade/modest-ui.c | 58 +++++++++++++++++++++++++++++++-------- src/modest-editor-window.c | 14 ++++++++++ src/modest-editor-window.h | 2 ++ src/modest-main.c | 6 ++-- 5 files changed, 66 insertions(+), 15 deletions(-) diff --git a/src/gtk-glade/modest-ui-glade.h b/src/gtk-glade/modest-ui-glade.h index 73d56a3..76792c9 100644 --- a/src/gtk-glade/modest-ui-glade.h +++ b/src/gtk-glade/modest-ui-glade.h @@ -33,4 +33,3 @@ struct _ModestUIPrivate { ModestUIPrivate)) #endif /* __MODEST_UI_GLADE_H__ */ - diff --git a/src/gtk-glade/modest-ui.c b/src/gtk-glade/modest-ui.c index b7cd402..71e1276 100644 --- a/src/gtk-glade/modest-ui.c +++ b/src/gtk-glade/modest-ui.c @@ -44,14 +44,12 @@ static void modest_ui_finalize (GObject *obj); static void modest_ui_window_destroy (GtkWidget *win, GdkEvent *event, gpointer data); static void modest_ui_last_window_closed (GObject *obj, gpointer data); -static GtkWidget* modest_main_window_toolbar (void); static GtkWidget* modest_main_window_folder_tree (ModestAccountMgr *modest_acc_mgr, TnyAccountStoreIface *account_store); static GtkWidget* modest_main_window_header_tree (TnyMsgFolderIface *folder); - -static void on_account_settings1_activate (GtkMenuItem *, - gpointer); +//static void on_account_settings1_activate (GtkMenuItem *, +// gpointer); static void on_password_requested (ModestTnyAccountStore *account_store, const gchar *account_name, gpointer user_data); @@ -425,7 +423,7 @@ register_toolbar_callbacks (ModestUI *modest_ui) } } - +#if 0 static void hide_edit_window (GtkWidget *win, GdkEvent *event, gpointer data) { @@ -435,7 +433,7 @@ hide_edit_window (GtkWidget *win, GdkEvent *event, gpointer data) gtk_widget_hide (win); modest_window_mgr_unregister(priv->modest_window_mgr, G_OBJECT(win)); } - +#endif static void close_edit_window (GtkWidget *win, GdkEvent *event, gpointer data) @@ -448,6 +446,8 @@ close_edit_window (GtkWidget *win, GdkEvent *event, gpointer data) win_data = modest_editor_window_get_data(edit_win); priv = MODEST_UI_GET_PRIVATE(win_data->modest_ui); + g_message("window was %s modified", modest_editor_window_get_modified(edit_win) ? "" : "not"); + gtk_widget_hide (GTK_WIDGET(edit_win)); modest_window_mgr_unregister(priv->modest_window_mgr, G_OBJECT(edit_win)); gtk_widget_destroy(GTK_WIDGET(edit_win)); @@ -567,7 +567,7 @@ modest_ui_editor_window_set_body(const gchar *body, gpointer window_data) return TRUE; } - +#if 0 gboolean modest_ui_new_edit_window (ModestUI *modest_ui, const gchar* to, const gchar* cc, const gchar* bcc, @@ -630,7 +630,7 @@ modest_ui_new_edit_window (ModestUI *modest_ui, const gchar* to, return TRUE; } - +#endif static void modest_ui_window_destroy (GtkWidget *win, GdkEvent *event, gpointer data) @@ -683,7 +683,7 @@ on_account_selector_selection_changed (GtkWidget *widget, free(account_name); } - +#if 0 static void on_account_settings1_activate (GtkMenuItem *menuitem, gpointer user_data) @@ -746,6 +746,7 @@ on_account_settings1_activate (GtkMenuItem *menuitem, g_object_unref(glade_xml); } +#endif static void @@ -929,13 +930,37 @@ modest_main_window_folder_tree (ModestAccountMgr *modest_acc_mgr, return folder_tree; } +static void on_editor_entry_changed(GtkEditable *editable, + gpointer user_data) +{ + GtkWidget *edit_win; + EditWinData *windata; + + edit_win = gtk_widget_get_toplevel(GTK_WIDGET(editable)); + windata = (EditWinData *)modest_editor_window_get_data(MODEST_EDITOR_WINDOW(edit_win)); + + modest_editor_window_set_modified(MODEST_EDITOR_WINDOW(edit_win), TRUE); +} + +static void on_editor_buffer_changed (GtkTextBuffer *textbuffer, + gpointer user_data) +{ + GtkWidget *edit_win; + EditWinData *windata; + + edit_win = gtk_widget_get_toplevel(GTK_WIDGET(textbuffer)); + windata = (EditWinData *)modest_editor_window_get_data(MODEST_EDITOR_WINDOW(edit_win)); + + modest_editor_window_set_modified(MODEST_EDITOR_WINDOW(edit_win), TRUE); +} static void on_new_mail_clicked (GtkWidget *widget, ModestUI *modest_ui) { GtkWidget *edit_win; GladeXML *glade_xml; - GtkWidget *btn; + GtkWidget *btn, *w; + GtkTextBuffer *buf; EditWinData *windata; ModestUIPrivate *priv; gint height, width; @@ -947,11 +972,20 @@ on_new_mail_clicked (GtkWidget *widget, ModestUI *modest_ui) windata = (EditWinData *)modest_editor_window_get_data(MODEST_EDITOR_WINDOW(edit_win)); g_return_if_fail(windata); + windata->edit_win = MODEST_EDITOR_WINDOW(edit_win); glade_xml = windata->glade_xml; btn = glade_xml_get_widget (glade_xml, "toolb_send"); g_signal_connect (btn, "clicked", G_CALLBACK(on_send_button_clicked), edit_win); + w = glade_xml_get_widget (glade_xml, "to_entry"); + g_signal_connect(w, "changed", G_CALLBACK(on_editor_entry_changed), edit_win); + w = glade_xml_get_widget (glade_xml, "subject_entry"); + g_signal_connect(w, "changed", G_CALLBACK(on_editor_entry_changed), edit_win); + w = glade_xml_get_widget (glade_xml, "body_view"); + buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(w)); + g_signal_connect(buf, "changed", G_CALLBACK(on_editor_buffer_changed), edit_win); + g_signal_connect (edit_win, "destroy-event", G_CALLBACK(close_edit_window), edit_win); g_signal_connect (edit_win, "delete-event", G_CALLBACK(close_edit_window), @@ -1018,6 +1052,8 @@ new_editor_with_presets (ModestUI *modest_ui, const gchar *to_header, modest_editor_window_set_subject_header(MODEST_EDITOR_WINDOW(edit_win), subject_header); modest_editor_window_set_body(MODEST_EDITOR_WINDOW(edit_win), body); + modest_editor_window_set_modified(MODEST_EDITOR_WINDOW(edit_win), FALSE); + gtk_widget_show(edit_win); } @@ -1101,12 +1137,10 @@ quoted_send_msg (ModestUI *modest_ui, quoted_send_type qstype) { switch (qstype) { case QUOTED_SEND_REPLY: g_string_prepend(re_sub, _("Re: ")); - // modest_ui_new_edit_window (modest_ui, from, /* cc */ "", /* bcc */ "", re_sub->str, quoted, NULL); new_editor_with_presets(modest_ui, from, /* cc */ "", /* bcc */ "", re_sub->str, quoted); break; case QUOTED_SEND_FORWARD: g_string_prepend(re_sub, _("Fwd: ")); - // modest_ui_new_edit_window (modest_ui, /* from */ "", /* cc */ "", /* bcc */ "", re_sub->str, quoted, NULL); new_editor_with_presets(modest_ui, /* from */ "", /* cc */ "", /* bcc */ "", re_sub->str, quoted); break; default: diff --git a/src/modest-editor-window.c b/src/modest-editor-window.c index a2b7eec..18b8f16 100644 --- a/src/modest-editor-window.c +++ b/src/modest-editor-window.c @@ -141,6 +141,20 @@ gpointer modest_editor_window_get_data(ModestEditorWindow *edit_win) return priv->user_data; } +gboolean modest_editor_window_set_modified(ModestEditorWindow *edit_win, gboolean modified) +{ + ModestEditorWindowPrivate *priv; + + if (!edit_win) { + return FALSE; + } + priv = MODEST_EDITOR_WINDOW_GET_PRIVATE(edit_win); + + priv->modified = modified; + + return priv->modified; +} + gboolean modest_editor_window_get_modified(ModestEditorWindow *edit_win) { ModestEditorWindowPrivate *priv; diff --git a/src/modest-editor-window.h b/src/modest-editor-window.h index 34301b1..8174fd7 100644 --- a/src/modest-editor-window.h +++ b/src/modest-editor-window.h @@ -42,6 +42,8 @@ GtkWidget *modest_editor_window_new (ModestUI *ui); gpointer modest_editor_window_get_data(ModestEditorWindow *edit_win); +gboolean modest_editor_window_set_modified(ModestEditorWindow *edit_win, gboolean modified); + gboolean modest_editor_window_get_modified(ModestEditorWindow *edit_win); /* fill in other public functions, eg.: */ diff --git a/src/modest-main.c b/src/modest-main.c index 85b9a95..c1fab8b 100644 --- a/src/modest-main.c +++ b/src/modest-main.c @@ -96,7 +96,8 @@ main (int argc, char *argv[]) gboolean ok; gtk_init (&argc, &argv); - if (mailto||cc||bcc||subject||body) + if (mailto||cc||bcc||subject||body) { +#if 0 ok = modest_ui_new_edit_window (modest_ui, mailto, /* to */ cc, /* cc */ @@ -104,7 +105,8 @@ main (int argc, char *argv[]) subject, /* subject */ body, /* body */ NULL); /* attachments */ - else +#endif + } else ok = modest_ui_show_main_window (modest_ui); if (!ok) -- 1.7.9.5