[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kde-workspace] klipper: Fix and improve shortcuts "next history
From:       Esben Mose Hansen <kde () mosehansen ! dk>
Date:       2011-10-16 7:55:40
Message-ID: 20111016075540.EC0AAA60A6 () git ! kde ! org
[Download RAW message or body]

Git commit 4f3f5e0dff82289fce704999c647ee1ad2c219b7 by Esben Mose Hansen.
Committed on 16/10/2011 at 09:43.
Pushed by esben into branch 'master'.

Fix and improve shortcuts "next history item" and "previous history item" in klipper, \
provided by Michal Seben

REVIEW: 102672
(cherry picked from commit a6b69cb3781b4e3d6b39c8f391e08695a9cb9b75)

M  +39   -17   klipper/history.cpp
M  +10   -4    klipper/klipper.cpp

http://commits.kde.org/kde-workspace/4f3f5e0dff82289fce704999c647ee1ad2c219b7

diff --git a/klipper/history.cpp b/klipper/history.cpp
index 48e81a1..5964c22 100644
--- a/klipper/history.cpp
+++ b/klipper/history.cpp
@@ -157,17 +157,28 @@ void History::cycleNext() {
     if (m_top && m_nextCycle && m_nextCycle != m_top) {
         HistoryItem* prev = m_items[m_nextCycle->previous_uuid()];
         HistoryItem* next = m_items[m_nextCycle->next_uuid()];
-        HistoryItem* endofhist = m_items[m_top->previous_uuid()];
-        HistoryItem* aftertop = m_items[m_top->next_uuid()];
-        if (prev == m_top) {
-            prev = m_nextCycle;
-            aftertop = m_top;
+        //if we have only two items in clipboard
+        if (prev == next) {
+            m_top=m_nextCycle;
+        }
+        else {
+            HistoryItem* endofhist = m_items[m_top->previous_uuid()];
+            HistoryItem* aftertop = m_items[m_top->next_uuid()];
+            if (prev == m_top) {
+                prev = m_nextCycle;
+                aftertop = m_top;
+            }
+            else if (next == m_top) {
+                next = m_nextCycle;
+                endofhist = m_top;
+            }
+            m_top->insertBetweeen(prev, next);
+            m_nextCycle->insertBetweeen(endofhist, aftertop);
+            m_top = m_nextCycle;
+            m_nextCycle = next;
         }
-        m_top->insertBetweeen(prev, next);
-        m_nextCycle->insertBetweeen(endofhist, aftertop);
-        m_top = m_nextCycle;
-        m_nextCycle = next;
         emit changed();
+        emit topChanged();
     }
 }
 
@@ -178,17 +189,28 @@ void History::cyclePrev() {
             return;
         }
         HistoryItem* prevprev = m_items[prev->previous_uuid()];
-        HistoryItem* endofhist = m_items[m_top->previous_uuid()];
         HistoryItem* aftertop = m_items[m_top->next_uuid()];
-        if (prevprev == m_top) {
-            prevprev = prev;
-            aftertop = m_top;
+        //if we have only two items in clipboard
+        if (m_nextCycle == prevprev) {
+            m_top=aftertop;
+        }
+        else {
+            HistoryItem* endofhist = m_items[m_top->previous_uuid()];
+            if (prevprev == m_top) {
+                prevprev = prev;
+                aftertop = m_top;
+            }
+            else if (m_nextCycle == m_top) {
+                m_nextCycle = aftertop;
+                endofhist = m_top;
+            }
+            m_top->insertBetweeen(prevprev,m_nextCycle);
+            prev->insertBetweeen(endofhist, aftertop);
+            m_nextCycle = m_top;
+            m_top = prev;
         }
-        m_top->insertBetweeen(prevprev,m_nextCycle);
-        prev->insertBetweeen(endofhist, aftertop);
-        m_nextCycle = m_top;
-        m_top = prev;
         emit changed();
+        emit topChanged();
     }
 }
 
diff --git a/klipper/klipper.cpp b/klipper/klipper.cpp
index 006a7f0..a588462 100644
--- a/klipper/klipper.cpp
+++ b/klipper/klipper.cpp
@@ -1158,14 +1158,20 @@ void Klipper::slotAskClearHistory()
 
 void Klipper::slotCycleNext()
 {
-    m_history->cycleNext();
-    emit passivePopup(i18n("Clipboard history"), cycleText());
+    //do cycle and show popup only if we have something in clipboard
+    if (m_history->first()) {
+        m_history->cycleNext();
+        emit passivePopup(i18n("Clipboard history"), cycleText());
+    }
 }
 
 void Klipper::slotCyclePrev()
 {
-    m_history->cyclePrev();
-    emit passivePopup(i18n("Clipboard history"), cycleText());
+    //do cycle and show popup only if we have something in clipboard
+    if (m_history->first()) {
+        m_history->cyclePrev();
+        emit passivePopup(i18n("Clipboard history"), cycleText());
+    }
 }
 
 QString Klipper::cycleText() const


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic