From 10abf2bc2d08526ad69c6e8691b0a3384603fcc1 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 03 Feb 2014 06:13:25 -0500
Subject: [PATCH] Fix bug where it wasn't possible to focus the messages list with mouse click on a record after the focus was put on preview frame.

---
 program/js/app.js |   65 ++++++++++++++++++--------------
 1 files changed, 37 insertions(+), 28 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index e89e85e..540abf1 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -1434,11 +1434,31 @@
 
   this.drag_end = function(e)
   {
-    this.drag_active = false;
-    this.env.last_folder_target = null;
+    var list, model;
 
     if (this.treelist)
       this.treelist.drag_end();
+
+    // execute drag & drop action when mouse was released
+    if (list = this.message_list)
+      model = this.env.mailboxes;
+    else if (list = this.contact_list)
+      model = this.env.contactfolders;
+
+    if (this.drag_active && model && this.env.last_folder_target) {
+      var target = model[this.env.last_folder_target];
+      list.draglayer.hide();
+
+      if (this.contact_list) {
+        if (!this.contacts_drag_menu(e, target))
+          this.command('move', target);
+      }
+      else if (!this.drag_menu(e, target))
+        this.command('move', target);
+    }
+
+    this.drag_active = false;
+    this.env.last_folder_target = null;
   };
 
   this.drag_move = function(e)
@@ -1499,37 +1519,15 @@
 
   this.doc_mouse_up = function(e)
   {
-    var model, list, id;
+    var list, id;
 
     // ignore event if jquery UI dialog is open
     if ($(rcube_event.get_target(e)).closest('.ui-dialog, .ui-widget-overlay').length)
       return;
 
-    if (list = this.message_list)
-      model = this.env.mailboxes;
-    else if (list = this.contact_list)
-      model = this.env.contactfolders;
-    else if (this.ksearch_value)
-      this.ksearch_blur();
-
+    list = this.message_list || this.contact_list;
     if (list && !rcube_mouse_is_over(e, list.list.parentNode))
       list.blur();
-
-    // handle mouse release when dragging
-    if (this.drag_active && model && this.env.last_folder_target) {
-      var target = model[this.env.last_folder_target];
-
-      this.env.last_folder_target = null;
-      list.draglayer.hide();
-      this.drag_end(e);
-
-      if (this.contact_list) {
-        if (!this.contacts_drag_menu(e, target))
-          this.command('move', target);
-      }
-      else if (!this.drag_menu(e, target))
-        this.command('move', target);
-    }
 
     // reset 'pressed' buttons
     if (this.buttons_sel) {
@@ -3141,6 +3139,10 @@
         if (this.env.draft_id && formdata.draft_id && formdata.draft_id != this.env.draft_id) {
           continue;
         }
+        // skip records on reply
+        if (this.env.reply_msgid && formdata.reply_msgid != this.env.reply_msgid) {
+          continue;
+        }
         // show dialog asking to restore the message
         if (formdata.changed && formdata.session != this.env.session_id) {
           this.show_popup_dialog(
@@ -3392,7 +3394,7 @@
     if ($("input[name='_is_html']").val() == '1') {
       var editor = tinyMCE.get(this.env.composebody);
       editor.getWin().focus(); // correct focus in IE & Chrome
-      editor.selection.setContent(insert, { format:'text' });
+      editor.selection.setContent(this.quote_html(insert).replace(/\r?\n/g, '<br/>'), { format:'text' });
     }
     // replace selection in compose textarea
     else {
@@ -3616,8 +3618,10 @@
       this.env.draft_id = id;
       $("input[name='_draft_saveid']").val(id);
 
-      this.remove_compose_data(this.env.compose_id);
     }
+
+    // always remove local copy upon saving as draft
+    this.remove_compose_data(this.env.compose_id);
   };
 
   this.auto_save_start = function()
@@ -3680,6 +3684,9 @@
 
     if (this.env.draft_id) {
       formdata.draft_id = this.env.draft_id;
+    }
+    if (this.env.reply_msgid) {
+      formdata.reply_msgid = this.env.reply_msgid;
     }
 
     $('input, select, textarea', this.gui_objects.messageform).each(function(i, elem) {
@@ -6362,12 +6369,14 @@
   this.mark_folder = function(name, class_name, prefix, encode)
   {
     $(this.get_folder_li(name, prefix, encode)).addClass(class_name);
+    this.triggerEvent('markfolder', {folder: name, mark: class_name, status: true});
   };
 
   // adds a class to selected folder
   this.unmark_folder = function(name, class_name, prefix, encode)
   {
     $(this.get_folder_li(name, prefix, encode)).removeClass(class_name);
+    this.triggerEvent('markfolder', {folder: name, mark: class_name, status: false});
   };
 
   // helper method to find a folder list item

--
Gitblit v1.9.1