summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG2
-rw-r--r--plugins/additional_message_headers/additional_message_headers.php2
-rw-r--r--program/js/app.js8
-rw-r--r--program/js/list.js24
-rw-r--r--skins/larry/includes/links.html1
-rw-r--r--skins/larry/styles.css9
-rw-r--r--skins/larry/templates/mail.html2
7 files changed, 38 insertions, 10 deletions
diff --git a/CHANGELOG b/CHANGELOG
index ea09502db..7ed74f9a9 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,8 @@
CHANGELOG Roundcube Webmail
===========================
+- Fixed iframe scrolling on touch devices
+- Optimized message list for touch devices
- Fix replacement variables in user-specific base_dn in some LDAP requests (#1489279)
- Fix purge action in folder manager (#1489280)
- Fix image scaling issues when image has only one dimension smaller than the limit (#1489274)
diff --git a/plugins/additional_message_headers/additional_message_headers.php b/plugins/additional_message_headers/additional_message_headers.php
index a43018176..c54f77d2d 100644
--- a/plugins/additional_message_headers/additional_message_headers.php
+++ b/plugins/additional_message_headers/additional_message_headers.php
@@ -7,7 +7,7 @@
* to or remove them from outgoing messages.
*
* Enable the plugin in config.inc.php and add your desired headers:
- * $rcmail_config['additional_message_headers'] = array('User-Agent');
+ * $config['additional_message_headers'] = array('User-Agent' => 'My-Very-Own-Webmail');
*
* @version @package_version@
* @author Ziba Scott
diff --git a/program/js/app.js b/program/js/app.js
index 2a4493d01..78ac4c675 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -1731,6 +1731,14 @@ function rcube_webmail()
if (!row.depth && row.has_children && (expando = document.getElementById('rcmexpando'+row.uid))) {
row.expando = expando;
expando.onmousedown = function(e) { return self.expand_message_row(e, uid); };
+ if (bw.mobile) {
+ expando.addEventListener('touchend', function(e) {
+ if (e.changedTouches.length == 1) {
+ self.expand_message_row(e, uid);
+ return rcube_event.cancel(e);
+ }
+ }, false);
+ }
}
this.triggerEvent('insertrow', { uid:uid, row:row });
diff --git a/program/js/list.js b/program/js/list.js
index 08e4444e1..c89c799b6 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -125,14 +125,22 @@ init_row: function(row)
if (bw.mobile) {
row.addEventListener('touchstart', function(e) {
if (e.touches.length == 1) {
- if (!self.drag_row(rcube_event.touchevent(e.touches[0]), this.uid))
- e.preventDefault();
+ self.touchmoved = false;
+ self.drag_row(rcube_event.touchevent(e.touches[0]), this.uid)
}
}, false);
row.addEventListener('touchend', function(e) {
- if (e.changedTouches.length == 1)
- if (!self.click_row(rcube_event.touchevent(e.changedTouches[0]), this.uid))
+ if (e.changedTouches.length == 1) {
+ if (!self.touchmoved && !self.click_row(rcube_event.touchevent(e.changedTouches[0]), this.uid))
e.preventDefault();
+ }
+ }, false);
+ row.addEventListener('touchmove', function(e) {
+ if (e.changedTouches.length == 1) {
+ self.touchmoved = true;
+ if (self.drag_active)
+ e.preventDefault();
+ }
}, false);
}
@@ -157,7 +165,7 @@ init_header: function()
$(this.list.tHead).replaceWith($(this.fixed_header).find('thead').clone());
$(this.list.tHead).find('tr td').attr('style', ''); // remove fixed widths
}
- else if (this.list.className.indexOf('fixedheader') >= 0) {
+ else if (!bw.mobile && this.list.className.indexOf('fixedheader') >= 0) {
this.init_fixed_header();
}
@@ -408,7 +416,7 @@ drag_row: function(e, id)
if (rcube_event.get_button(e) == 2)
return true;
- this.in_selection_before = this.in_selection(id) ? id : false;
+ this.in_selection_before = e.istouch || this.in_selection(id) ? id : false;
// selects currently unselected row
if (!this.in_selection_before) {
@@ -416,7 +424,7 @@ drag_row: function(e, id)
this.select_row(id, mod_key, false);
}
- if (this.draggable && this.selection.length) {
+ if (this.draggable && this.selection.length && this.in_selection(id)) {
this.drag_start = true;
this.drag_mouse_start = rcube_event.get_mouse_pos(e);
rcube_event.add_listener({event:'mousemove', object:this, method:'drag_mouse_move'});
@@ -1256,7 +1264,7 @@ drag_mouse_move: function(e)
{
// convert touch event
if (e.type == 'touchmove') {
- if (e.changedTouches.length == 1)
+ if (e.touches.length == 1 && e.changedTouches.length == 1)
e = rcube_event.touchevent(e.changedTouches[0]);
else
return rcube_event.cancel(e);
diff --git a/skins/larry/includes/links.html b/skins/larry/includes/links.html
index 8bd8012e1..5a6c8cab3 100644
--- a/skins/larry/includes/links.html
+++ b/skins/larry/includes/links.html
@@ -1,4 +1,5 @@
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<link rel="shortcut icon" href="/images/favicon.ico"/>
<link rel="stylesheet" type="text/css" href="/styles.css" />
<roundcube:if condition="in_array(env:task, array('mail','addressbook','settings'))" />
diff --git a/skins/larry/styles.css b/skins/larry/styles.css
index 288b010ed..238c4a297 100644
--- a/skins/larry/styles.css
+++ b/skins/larry/styles.css
@@ -929,6 +929,15 @@ a.iconlink.upload {
background-repeat: no-repeat;
}
+/* fix scrolling within iframes in webkit browsers on touch devices */
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ .iframebox {
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ }
+}
+
+
/*** lists ***/
.listbox {
diff --git a/skins/larry/templates/mail.html b/skins/larry/templates/mail.html
index 7ef12bfdb..5f465d767 100644
--- a/skins/larry/templates/mail.html
+++ b/skins/larry/templates/mail.html
@@ -112,7 +112,7 @@
<div id="mailview-bottom" class="uibox">
-<div id="mailpreviewframe">
+<div id="mailpreviewframe" class="iframebox">
<roundcube:object name="messagecontentframe" id="messagecontframe" style="width:100%; height:100%" frameborder="0" src="/watermark.html" />
</div>