Re: Some hints for usability improvements



Am 20.01.06 00:50 schrieb(en) Peter Bloomfield:
4) Balsa, please be nice and ask me before sending a mail with an empty Subject header...

Yes, that would be kind!

I must admit that this bothered me since a while, too. Never took the time to fix it, but as Mişu also thinks it would be nice... so here's a simple quick hack to ask for a subject if it's empty (against the cvs). Hope the dialog is hig compliant...

Opinions?

Cheers, Albrecht.

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Albrecht Dreß  -  Johanna-Kirchner-Straße 13  -  D-53123 Bonn (Germany)
       Phone (+49) 228 6199571  -  mailto:albrecht dress arcor de
  GnuPG public key:  http://www.mynetcologne.de/~nc-dreszal/pubkey.asc
_________________________________________________________________________
? libbalsa/imap/.deps
? po/.intltool-merge-cache
Index: src/sendmsg-window.c
===================================================================
RCS file: /cvs/gnome/balsa/src/sendmsg-window.c,v
retrieving revision 1.568
diff -u -r1.568 sendmsg-window.c
--- src/sendmsg-window.c	20 Jan 2006 16:15:07 -0000	1.568
+++ src/sendmsg-window.c	20 Jan 2006 19:53:16 -0000
@@ -4872,6 +4872,98 @@
     return TRUE;
 }
 
+
+/* ask the user for a subject */
+static gboolean
+subject_not_empty(BalsaSendmsg * bsmsg)
+{
+    const gchar *subj;
+    GtkWidget *no_subj_dialog;
+    GtkWidget *dialog_vbox1;
+    GtkWidget *hbox;
+    GtkWidget *image;
+    GtkWidget *vbox;
+    gchar *text_str;
+    GtkWidget *label;
+    GtkWidget *subj_entry;
+    GtkWidget *dialog_action_area;
+    GtkWidget *cnclbutton;
+    GtkWidget *okbutton;
+    gint response;
+
+    /* read the subject widget and verify that it is contains something else
+       than spaces */
+    subj = gtk_entry_get_text(GTK_ENTRY(bsmsg->subject[1]));
+    if (subj) {
+	const gchar *p = subj;
+
+	while (*p && g_unichar_isspace(g_utf8_get_char(p)))
+	    p = g_utf8_next_char(p);
+	if (*p != '\0')
+	    return TRUE;
+    }
+	    
+    /* build the dialog */
+    no_subj_dialog = gtk_dialog_new ();
+    gtk_container_set_border_width (GTK_CONTAINER (no_subj_dialog), 6);
+    gtk_window_set_modal (GTK_WINDOW (no_subj_dialog), TRUE);
+    gtk_window_set_resizable (GTK_WINDOW (no_subj_dialog), FALSE);
+    gtk_window_set_type_hint (GTK_WINDOW (no_subj_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+    gtk_dialog_set_has_separator (GTK_DIALOG (no_subj_dialog), FALSE);
+
+    dialog_vbox1 = GTK_DIALOG (no_subj_dialog)->vbox;
+
+    hbox = gtk_hbox_new (FALSE, 12);
+    gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox, TRUE, TRUE, 0);
+    gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
+
+    image = gtk_image_new_from_stock ("gtk-dialog-question", GTK_ICON_SIZE_DIALOG);
+    gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
+    gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0);
+
+    vbox = gtk_vbox_new (FALSE, 12);
+    gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
+
+    text_str = g_strdup_printf("<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s",
+			       _("You did not specify a subject for this message"),
+			       _("If you would like to provide one, enter it below."));
+    label = gtk_label_new (text_str);
+    g_free(text_str);
+    gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+    gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+    gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
+
+    subj_entry = gtk_entry_new ();
+    gtk_entry_set_text(GTK_ENTRY(subj_entry), _("(no subject)"));
+    gtk_box_pack_start (GTK_BOX (vbox), subj_entry, FALSE, FALSE, 0);
+    gtk_entry_set_activates_default (GTK_ENTRY (subj_entry), TRUE);
+
+    dialog_action_area = GTK_DIALOG (no_subj_dialog)->action_area;
+    gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area), GTK_BUTTONBOX_END);
+
+    cnclbutton = gtk_button_new_from_stock ("gtk-cancel");
+    gtk_dialog_add_action_widget (GTK_DIALOG (no_subj_dialog), cnclbutton, GTK_RESPONSE_CANCEL);
+    GTK_WIDGET_SET_FLAGS (cnclbutton, GTK_CAN_DEFAULT);
+
+    okbutton = gtk_button_new_from_stock ("gtk-ok");
+    gtk_dialog_add_action_widget (GTK_DIALOG (no_subj_dialog), okbutton, GTK_RESPONSE_OK);
+    GTK_WIDGET_SET_FLAGS (okbutton, GTK_CAN_DEFAULT);
+
+    gtk_widget_grab_focus (subj_entry);
+    gtk_widget_show_all(dialog_vbox1);
+
+    response = gtk_dialog_run(GTK_DIALOG(no_subj_dialog));
+
+    /* always set the current string in the subject entry */
+    gtk_entry_set_text(GTK_ENTRY(bsmsg->subject[1]),
+		       gtk_entry_get_text(GTK_ENTRY(subj_entry)));
+    gtk_widget_destroy(no_subj_dialog);
+
+    return response == GTK_RESPONSE_OK;
+}
+
+
 /* "send message" menu and toolbar callback.
  */
 static gint
@@ -4892,6 +4984,9 @@
 
     if(!is_charset_ok(bsmsg))
         return FALSE;
+
+    if(!subject_not_empty(bsmsg))
+	return FALSE;
 
 #ifdef HAVE_GPGME
     if ((bsmsg->gpg_mode & LIBBALSA_PROTECT_OPENPGP) != 0 &&

Attachment: pgpCWsGrYrrqt.pgp
Description: PGP signature



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]