]> spindle.queued.net Git - midori/commitdiff
Implement dragging of speed dial shortcuts
authorPaweł Forysiuk <tuxator@o2.pl>
Sun, 18 Dec 2011 00:51:10 +0000 (01:51 +0100)
committerChristian Dywan <christian@twotoasts.de>
Sun, 18 Dec 2011 00:51:10 +0000 (01:51 +0100)
data/speeddial-head.html
midori/midori-view.c

index 01249cf957fd0cf2ddcc1784484523dc1a18765b..47dc7f886dda4c9217fd572db2f2f49cc14dfe0b 100644 (file)
         return false;
     }
 
+    var firstNode, secondNode;
+    var cursor;
+    var dial = document.getElementsByClassName("shortcut");
+
+    var click = function (ev) {
+        ev.preventDefault();
+        var ele = ev.target;
+        cursor = ele.style.cursor;
+        ele.style.cursor = 'move';
+
+        var eparent;
+
+        if (ele.nodeName == 'IMG')
+            eparent = ele.parentNode.parentNode.parentNode;
+        if (ele.className == 'title')
+            eparent = ele.parentNode;
+        if (ele.className == 'shortcut')
+            eparent = ele;
+        if (eparent != undefined) {
+            eparent.style.outline = '1px dotted black';
+            eparent.style.backgroundColor = '#eef';
+            firstNode = eparent.id;
+        }
+        out();
+        remove();
+    };
+
+    var remove  = function () {
+        document.RemoveEventListener('click', click, false);
+        document.RemoveEventListener('mouseout', out, false);
+    };
+
+    var up = function (ev) {
+        ele = ev.target;
+        var eparent;
+
+        if (ele.nodeName == 'IMG')
+            eparent = ele.parentNode.parentNode.parentNode;
+        if (ele.className == 'title')
+            eparent = ele.parentNode;
+        if (ele.className == 'shortcut')
+            eparent = ele;
+
+        ele.style.cursor = cursor;
+        secondNode = eparent.id;
+
+        /* ommit just mere clicking the dial */
+        if (firstNode != secondNode && firstNode != undefined)
+            swap();
+    };
+
+    var over = function (ev) {
+        var ele = ev.target;
+        var eparent;
+
+        if (ele.nodeName == 'IMG')
+            eparent = ele.parentNode.parentNode.parentNode;
+        if (ele.className == 'title')
+            eparent = ele.parentNode;
+        if (ele.className == 'shortcut')
+            eparent = ele;
+
+        if (firstNode != undefined)
+        {
+            eparent.style.outline = '1px dotted black';
+            eparent.style.backgroundColor = '#eef';
+            for (var i = 0; i <= dial.length; i++) {
+                if (eparent.id != firstNode.id && dial[i].id != eparent.id) {
+                    dial[i].style.outline = '0px';
+                    dial[i].style.backgroundColor = '#eee';
+                }
+            }
+        }
+        ele.style.cursor = cursor;
+    }
+    var out = function (ev) {
+         var ele = ev.target;
+         var eparent;
+
+        if (ele.nodeName == 'IMG')
+            eparent = ele.parentNode.parentNode.parentNode;
+        if (ele.className == 'title')
+            eparent = ele.parentNode;
+        if (ele.className == 'shortcut')
+            eparent = ele;
+        if (firstNode != undefined) {
+            for (var i = 0; i <= dial.length; i++) {
+                if (eparent.id != firstNode.id && dial[i].id != eparent.id) {
+                    dial[i].style.outline = '0px';
+                    dial[i].backgroundColor = '#eee';
+                }
+            }
+        }
+        ele.style.cursor = cursor;
+    }
+
+    function swap () {
+        console.log ("speed_dial-save-swap " + firstNode + " " + secondNode);
+    };
+
+    document.addEventListener('mousedown', click, false);
+    document.addEventListener('mouseup', up, false);
+    document.addEventListener('mouseover', over, false);
+    document.addEventListener('mouseout', out, false);
     </script>
 </head>
 <body>
index b82939c0d76dc6823a72bd74befe66d01300f336..a71ffdb8b1841cd17664bea9d5d40d43e7f2944a 100644 (file)
@@ -5602,7 +5602,7 @@ midori_view_speed_dial_save (MidoriView*  view,
     action = parts[0];
 
     if (g_str_equal (action, "add") || g_str_equal (action, "rename")
-    ||  g_str_equal (action, "delete"))
+    ||  g_str_equal (action, "delete") || g_str_equal (action, "swap"))
     {
         gchar* tmp = g_strdup (parts[1] + 1);
         guint slot_id = atoi (tmp);
@@ -5633,6 +5633,30 @@ midori_view_speed_dial_save (MidoriView*  view,
             g_key_file_set_string (key_file, dial_id, "title", title);
             g_free (title);
         }
+        else if (g_str_equal (action, "swap"))
+        {
+            gchar* tmp1 = g_strdup (parts[2] + 1);
+            guint slot2_id = atoi (tmp1);
+            gchar* dial2_id = g_strdup_printf ("Dial %d", slot2_id);
+            gchar* uri, *uri2, *title, *title2;
+            g_free (tmp1);
+
+            uri = g_key_file_get_string (key_file, dial_id, "uri", NULL);
+            title = g_key_file_get_string (key_file, dial_id, "title", NULL);
+            uri2 = g_key_file_get_string (key_file, dial2_id, "uri", NULL);
+            title2 = g_key_file_get_string (key_file, dial2_id, "title", NULL);
+
+            g_key_file_set_string (key_file, dial_id, "uri", uri2);
+            g_key_file_set_string (key_file, dial2_id, "uri", uri);
+            g_key_file_set_string (key_file, dial_id, "title", title2);
+            g_key_file_set_string (key_file, dial2_id, "title", title);
+
+            g_free (uri);
+            g_free (uri2);
+            g_free (title);
+            g_free (title2);
+            g_free (dial2_id);
+        }
 
         g_free (dial_id);
     }