Make Up key bring focus to Subject line, if the cursor is on the first line of body...
[claws.git] / src / compose.c
index 5b7a58ebedcabea6433d0834c6fe732a1ccc511b..7a1f177319cdde802bf09b3450fb655646492588 100644 (file)
@@ -183,7 +183,7 @@ typedef enum {
 #define MAX_REFERENCES_LEN     999
 
 #define COMPOSE_DRAFT_TIMEOUT_UNSET -1
-#define COMPOSE_DRAFT_TIMEOUT_FORBIDEN -2
+#define COMPOSE_DRAFT_TIMEOUT_FORBIDDEN -2
 
 static GList *compose_list = NULL;
 static GSList *extra_headers = NULL;
@@ -7657,7 +7657,6 @@ static Compose *compose_create(PrefsAccount *account,
        
        /* Notebook */
        notebook = gtk_notebook_new();
-       gtk_widget_set_size_request(notebook, -1, prefs_common.compose_notebook_height);
        gtk_widget_show(notebook);
 
        /* header labels and entries */
@@ -7697,7 +7696,7 @@ static Compose *compose_create(PrefsAccount *account,
        gtk_container_set_border_width(GTK_CONTAINER(subject), 0);
        gtk_widget_show(subject);
 
-       label = gtk_label_new(_("Subject:"));
+       label = gtk_label_new_with_mnemonic(_("Subject:"));
        gtk_box_pack_start(GTK_BOX(subject), label, FALSE, FALSE, 0);
        gtk_widget_show(label);
 
@@ -7709,6 +7708,7 @@ static Compose *compose_create(PrefsAccount *account,
        gtk_box_pack_start(GTK_BOX(subject), subject_entry, TRUE, TRUE, 0);
        g_signal_connect_after(G_OBJECT(subject_entry), "grab_focus",
                         G_CALLBACK(compose_grab_focus_cb), compose);
+       gtk_label_set_mnemonic_widget(GTK_LABEL(label), subject_entry);
        gtk_widget_show(subject_entry);
        compose->subject_entry = subject_entry;
        gtk_container_add(GTK_CONTAINER(subject_frame), subject);
@@ -7785,8 +7785,9 @@ static Compose *compose_create(PrefsAccount *account,
        /* pane between attach clist and text */
        paned = gtk_vpaned_new();
        gtk_container_add(GTK_CONTAINER(vbox2), paned);
-       gtk_paned_add1(GTK_PANED(paned), notebook);
-       gtk_paned_add2(GTK_PANED(paned), edit_vbox);
+       gtk_paned_pack1(GTK_PANED(paned), notebook, FALSE, FALSE);
+       gtk_paned_pack2(GTK_PANED(paned), edit_vbox, TRUE, FALSE);
+       gtk_paned_set_position(GTK_PANED(paned), prefs_common.compose_notebook_height);
        gtk_widget_show_all(paned);
 
 
@@ -11004,6 +11005,10 @@ static gboolean completion_set_focus_to_subject
                                         GdkEventKey  *event,
                                         Compose      *compose)
 {
+       GtkTextBuffer *buffer;
+       GtkTextMark *mark;
+       GtkTextIter iter;
+
        cm_return_val_if_fail(compose != NULL, FALSE);
 
        /* make backtab move to subject field */
@@ -11011,6 +11016,24 @@ static gboolean completion_set_focus_to_subject
                gtk_widget_grab_focus(compose->subject_entry);
                return TRUE;
        }
+
+       // Up key should also move the focus to subject field, if the cursor
+       // is on the first line.
+       if (event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up) {
+               buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));
+               g_return_val_if_fail(buffer != NULL, FALSE);
+
+               mark = gtk_text_buffer_get_mark(buffer, "insert");
+               g_return_val_if_fail(mark != NULL, FALSE);
+
+               gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
+
+               if (gtk_text_iter_get_line(&iter) == 0) {
+                       gtk_widget_grab_focus(compose->subject_entry);
+                       return TRUE;
+               }
+       }
+
        return FALSE;
 }