Browse Source

bug-fix: do not change mode when clicking an item in VFileList to open an already opened note

Le Tan 8 years ago
parent
commit
cff6a1e49a
4 changed files with 20 additions and 10 deletions
  1. 2 4
      src/veditarea.cpp
  2. 7 1
      src/veditarea.h
  3. 3 3
      src/vfilelist.cpp
  4. 8 2
      src/vfilelist.h

+ 2 - 4
src/veditarea.cpp

@@ -119,9 +119,7 @@ void VEditArea::removeSplitWindow(VEditWindow *win)
     win->deleteLater();
 }
 
-// A given file can be opened in multiple split windows. A given file could be
-// opened at most in one tab inside a window.
-void VEditArea::openFile(VFile *p_file, OpenFileMode p_mode)
+void VEditArea::openFile(VFile *p_file, OpenFileMode p_mode, bool p_forceMode)
 {
     if (!p_file) {
         return;
@@ -169,7 +167,7 @@ void VEditArea::openFile(VFile *p_file, OpenFileMode p_mode)
 out:
     setCurrentTab(winIdx, tabIdx, setFocus);
 
-    if (existFile) {
+    if (existFile && p_forceMode) {
         if (p_mode == OpenFileMode::Read) {
             readFile();
         } else if (p_mode == OpenFileMode::Edit) {

+ 7 - 1
src/veditarea.h

@@ -79,7 +79,13 @@ protected:
     void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
 
 public slots:
-    void openFile(VFile *p_file, OpenFileMode p_mode);
+    // Open @p_file in mode @p_mode.
+    // If @p_file has already been opened, change its mode to @p_mode only if
+    // @p_forceMode is true.
+    // A given file can be opened in multiple split windows. A given file could be
+    // opened at most in one tab inside a window.
+    void openFile(VFile *p_file, OpenFileMode p_mode, bool p_forceMode = false);
+
     void editFile();
     void saveFile();
     void readFile();

+ 3 - 3
src/vfilelist.cpp

@@ -103,7 +103,7 @@ void VFileList::initActions()
             this, [this]() {
                 QListWidgetItem *item = fileList->currentItem();
                 if (item) {
-                    emit fileClicked(getVFile(item), OpenFileMode::Read);
+                    emit fileClicked(getVFile(item), OpenFileMode::Read, true);
                 }
             });
 
@@ -114,7 +114,7 @@ void VFileList::initActions()
             this, [this]() {
                 QListWidgetItem *item = fileList->currentItem();
                 if (item) {
-                    emit fileClicked(getVFile(item), OpenFileMode::Edit);
+                    emit fileClicked(getVFile(item), OpenFileMode::Edit, true);
                 }
             });
 
@@ -368,7 +368,7 @@ void VFileList::newFile()
         fileList->update();
 
         // Open it in edit mode
-        emit fileCreated(file, OpenFileMode::Edit);
+        emit fileCreated(file, OpenFileMode::Edit, true);
 
         // Move cursor down if content has been inserted.
         if (contentInserted) {

+ 8 - 2
src/vfilelist.h

@@ -60,8 +60,14 @@ public slots:
     void newFile();
 
 signals:
-    void fileClicked(VNoteFile *p_file, OpenFileMode mode = OpenFileMode::Read);
-    void fileCreated(VNoteFile *p_file, OpenFileMode mode = OpenFileMode::Read);
+    void fileClicked(VNoteFile *p_file,
+                     OpenFileMode p_mode = OpenFileMode::Read,
+                     bool p_forceMode = false);
+
+    void fileCreated(VNoteFile *p_file,
+                     OpenFileMode p_mode = OpenFileMode::Read,
+                     bool p_forceMode = false);
+
     void fileUpdated(const VNoteFile *p_file);
 
 private slots: