bundled/include/LibreOfficeKit/LibreOfficeKit.h | 5 bundled/include/LibreOfficeKit/LibreOfficeKit.hxx | 14 + common/Session.cpp | 1 kit/ChildSession.cpp | 43 +++- kit/ChildSession.hpp | 1 kit/Kit.cpp | 8 loleaflet/Makefile.am | 1 loleaflet/README | 23 ++ loleaflet/css/leaflet.css | 7 loleaflet/css/loleaflet.css | 48 ++++ loleaflet/css/menubar.css | 2 loleaflet/css/partsPreviewControl.css | 8 loleaflet/css/sidebar.css | 3 loleaflet/css/spreadsheet.css | 2 loleaflet/debug/document/loleaflet.html | 2 loleaflet/html/loleaflet.html.m4 | 4 loleaflet/src/control/Control.LokDialog.js | 228 ++++++++++++++++++++-- loleaflet/src/control/Control.Menubar.js | 2 loleaflet/src/control/Parts.js | 1 loleaflet/src/map/Map.js | 47 ++++ net/Socket.cpp | 1 net/Socket.hpp | 2 wsd/ClientSession.cpp | 4 wsd/DocumentBroker.cpp | 2 wsd/LOOLWSD.cpp | 26 +- wsd/Storage.cpp | 1 26 files changed, 439 insertions(+), 47 deletions(-)
New commits: commit 9b31ab7d44894dda87276eae6bb852bbbc692e1e Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Mon Mar 25 20:19:09 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 Sidebar: don't show border and placeholder if not visible Change-Id: I689fa47b0dcb034688ec73c0d338c99423b10a38 diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css index fe11e6daf..6078f7155 100644 --- a/loleaflet/css/loleaflet.css +++ b/loleaflet/css/loleaflet.css @@ -73,6 +73,7 @@ body { } #sidebar-dock-wrapper { + display: none; background: #fff; position: absolute; top: 77px; diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index c06ca138c..e151ff820 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -471,6 +471,8 @@ L.Control.LokDialog = L.Control.extend({ && this._map._permission != 'edit') return; + $('#sidebar-dock-wrapper').css('display', 'block'); + var ratio = 1.0; if (width > window.screen.width) { ratio = window.screen.width / width; @@ -803,7 +805,10 @@ L.Control.LokDialog = L.Control.extend({ _resizeSidebar: function(strId, width) { this._currentDeck.width = width; - width = width + 15; + if (width > 1) { + // Add extra space for scrollbar only when visible + width = width + 15; + } var sidebar = L.DomUtil.get(strId); if (sidebar) { sidebar.width = width; commit 0d7b28daf8a8bf6f2adc33bbe3d7d5f7f72d6659 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Thu Feb 7 15:17:21 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 Z-index doc, sidebar under menu Change-Id: Ic9c0dbb326d45c205746e50018906030f7a6fd27 diff --git a/loleaflet/README b/loleaflet/README index 3b9f53d21..e10a2795b 100644 --- a/loleaflet/README +++ b/loleaflet/README @@ -359,3 +359,26 @@ are independent of the map's div, thus enabling us to link them to the map as ne When the user scrolls, the map is panned by the same amount as it would've been scrolled. Also, some custom jquery scrollbars are used, to trigger the same scroll events across browsers. + +Z-index values: +------------------------------------------- + leaflet +------------------------------------------- +10 map +11 ruler +------------------------------------------- + under menu +------------------------------------------- +990 sidebar +999 toolbar-up +------------------------------------------- + menu items +------------------------------------------- +1000 menu, toolbar-down +1050 closebuttonwrapper +------------------------------------------- + on the top +------------------------------------------- +1105 dialogs +2000 mobile-edit-button +------------------------------------------- diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css index 9970910b0..fe11e6daf 100644 --- a/loleaflet/css/loleaflet.css +++ b/loleaflet/css/loleaflet.css @@ -81,7 +81,7 @@ body { border-top: 1px solid #b6b6b6; border-left: 1px solid #b6b6b6; overflow: hidden; - z-index: 1100; + z-index: 990; } #sidebar-panel { commit 5125226337e5ea826359534cccc8c46df62d6e8b Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sun Feb 3 10:55:52 2019 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: resize the sidebar just befor rendering This prevents flicker and the clipped sidebar issue. Change-Id: Ia940894c2ad6cdcfcdcf5eb910d101c45b2f9ee5 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index f0a03883c..c06ca138c 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -479,9 +479,8 @@ L.Control.LokDialog = L.Control.extend({ var strId = this._toStrId(id); if (this._currentDeck) { - if (width > 0) { - this._resizeSidebar(strId, width); - } + this._currentDeck.width = width; + this._currentDeck.height = height; // Hide cursor. this._currentDeck.cursorVisible = false; @@ -493,10 +492,6 @@ L.Control.LokDialog = L.Control.extend({ else $(panel).parent().hide(); - // update the underlying canvas - var panelCanvas = L.DomUtil.get(this._currentDeck.strId + '-canvas'); - this._setCanvasWidthHeight(panelCanvas, width, height); - // Render window. this._sendPaintWindowRect(id); @@ -513,7 +508,7 @@ L.Control.LokDialog = L.Control.extend({ panelContainer.id = strId; // Create the panel canvas. - panelCanvas = L.DomUtil.create('canvas', 'panel_canvas', panelContainer); + var panelCanvas = L.DomUtil.create('canvas', 'panel_canvas', panelContainer); L.DomUtil.setStyle(panelCanvas, 'position', 'absolute'); this._setCanvasWidthHeight(panelCanvas, width, height); panelCanvas.id = strId + '-canvas'; @@ -752,16 +747,22 @@ L.Control.LokDialog = L.Control.extend({ } // Sidebars find out their size and become visible on first paint. - if (that._isSidebar(parentId)) + var isSidebar = that._isSidebar(parentId); + if (isSidebar) { that._resizeSidebar(strId, that._currentDeck.width); + // Update the underlying canvas. + var panelCanvas = L.DomUtil.get(that._currentDeck.strId + '-canvas'); + that._setCanvasWidthHeight(panelCanvas, that._currentDeck.width, that._currentDeck.height); + } + ctx.drawImage(img, x, y); // if dialog is hidden, show it var container = L.DomUtil.get(strId); if (container) $(container).parent().show(); - that.focus(parentId, !that._isSidebar(parentId)); + that.focus(parentId, !isSidebar); }; img.src = imgData; }, commit 3857d7e08b3924731ab65fa4fe874c71b319f071 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Feb 2 22:18:22 2019 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: keep the client active while the user interacts with dialogs/sidebar Change-Id: I7667f2ae98b04d6066de779348a0aa8a2c0cb14a diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index 09f2ab8e5..f0a03883c 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -242,7 +242,7 @@ L.Control.LokDialog = L.Control.extend({ } } - // all other callbacks doens't make sense without an active dialog + // All other callbacks doen't make sense without an active dialog. if (!(this._isOpen(e.id) || this._getParentId(e.id))) return; @@ -571,6 +571,8 @@ L.Control.LokDialog = L.Control.extend({ L.DomEvent.on(canvas, 'mousemove', function(e) { this._map.lastActiveTime = Date.now(); this._postWindowMouseEvent('move', id, e.offsetX, e.offsetY, 1, 0, 0); + // Keep map active while user is playing with sidebar/dialog. + this._map.lastActiveTime = Date.now(); }, this); L.DomEvent.on(canvas, 'mousedown mouseup', function(e) { L.DomEvent.stopPropagation(e); @@ -582,6 +584,8 @@ L.Control.LokDialog = L.Control.extend({ var lokEventType = e.type.replace('mouse', 'button'); this._postWindowMouseEvent(lokEventType, id, e.offsetX, e.offsetY, 1, buttons, 0); this.focus(id, !this._dialogs[id].isSidebar); + // Keep map active while user is playing with sidebar/dialog. + this._map.lastActiveTime = Date.now(); }, this); L.DomEvent.on(dlgInput, 'keyup keypress keydown compositionstart compositionupdate compositionend textInput', @@ -596,7 +600,7 @@ L.Control.LokDialog = L.Control.extend({ id), dlgInput); - // Keep map active while user is playing with window. + // Keep map active while user is playing with sidebar/dialog. this._map.lastActiveTime = Date.now(); }, this); L.DomEvent.on(dlgInput, 'contextmenu', function() { commit 8231f902195deb9c510a03f25de4bc9662460e43 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Feb 2 11:05:14 2019 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: allow space for the vertical scrollbar This prevents hiding part of the sidebar behind the scrollbar, when it appears. Perhaps we should do this dynamically, only where the scrollbar is visible, but that will introduce flicker and resizing of the document container, which are undersirable. This is a small extra space, so can be visible. Change-Id: Ic123832812663c14afadf0087ce49b742aa466c2 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index c4861f434..09f2ab8e5 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -798,6 +798,7 @@ L.Control.LokDialog = L.Control.extend({ _resizeSidebar: function(strId, width) { this._currentDeck.width = width; + width = width + 15; var sidebar = L.DomUtil.get(strId); if (sidebar) { sidebar.width = width; commit 7ba1f6a12c6c8797b3d832faf540d4914b6f219b Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Feb 2 10:11:02 2019 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: hide sidebar's horizontal scrollbar And merge a single z-index property into the main css. Change-Id: I0a8ed76c98b46052b2cf4b32cfcae498c1615584 diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css index 9f49feccb..9970910b0 100644 --- a/loleaflet/css/loleaflet.css +++ b/loleaflet/css/loleaflet.css @@ -73,24 +73,26 @@ body { } #sidebar-dock-wrapper { - background: #fff; - position: absolute; - top: 77px; - right: 0px; - bottom: 37px; - border-top: 1px solid #b6b6b6; - border-left: 1px solid #b6b6b6; - overflow: hidden; /* FIXME we want scrollbars here to handle overflows client-side */ - z-index: 1100; + background: #fff; + position: absolute; + top: 77px; + right: 0px; + bottom: 37px; + border-top: 1px solid #b6b6b6; + border-left: 1px solid #b6b6b6; + overflow: hidden; + z-index: 1100; } #sidebar-panel { - padding: 0px; - margin: 0px; - position: relative; - width: 100%; - height: 100%; - overflow-y: auto; + padding: 0px; + margin: 0px; + position: relative; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + z-index: 1200; } #toolbar-wrapper { diff --git a/loleaflet/css/sidebar.css b/loleaflet/css/sidebar.css index e62774dfa..fa0e913ab 100644 --- a/loleaflet/css/sidebar.css +++ b/loleaflet/css/sidebar.css @@ -1,8 +1,3 @@ #document-container.sidebar-document { left: 214px; } - -#sidebar-panel { - height: 100%; - z-index: 1200; -} commit 8595bb421989091584447aeb9bc549ef88953a96 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Wed Jan 30 08:03:17 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 Allow to grab focus by dialogs without a cursor Change-Id: Ifb40ffbc3ea3e921dff9e31247318e377b372400 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index fc6899f15..c4861f434 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -357,8 +357,8 @@ L.Control.LokDialog = L.Control.extend({ L.DomUtil.setPosition(dlgContainer, new L.Point(left, top)); }, - focus: function(dlgId) { - if (!this._isOpen(dlgId) || !this._dialogs[dlgId].input || !this._dialogs[dlgId].cursorVisible) + focus: function(dlgId, force) { + if (!force && (!this._isOpen(dlgId) || !this._dialogs[dlgId].input || !this._dialogs[dlgId].cursorVisible)) return; this._dialogs[dlgId].input.focus(); @@ -581,7 +581,7 @@ L.Control.LokDialog = L.Control.extend({ // 'mousedown' -> 'buttondown' var lokEventType = e.type.replace('mouse', 'button'); this._postWindowMouseEvent(lokEventType, id, e.offsetX, e.offsetY, 1, buttons, 0); - this.focus(id); + this.focus(id, !this._dialogs[id].isSidebar); }, this); L.DomEvent.on(dlgInput, 'keyup keypress keydown compositionstart compositionupdate compositionend textInput', @@ -757,7 +757,7 @@ L.Control.LokDialog = L.Control.extend({ var container = L.DomUtil.get(strId); if (container) $(container).parent().show(); - that.focus(parentId); + that.focus(parentId, !that._isSidebar(parentId)); }; img.src = imgData; }, commit 25ea25c938d3d939878f83b6ab2cacac021d91c3 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Wed Jan 16 21:12:04 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 Get correct canvas object Change-Id: Iedc41741968a4baab787c0b364764415c941aa16 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index f20a852bd..fc6899f15 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -822,8 +822,11 @@ L.Control.LokDialog = L.Control.extend({ if (!this._isSidebar(dialogId)) { // Remove any extra height allocated for the parent container (only for floating dialogs). var canvas = document.getElementById(dialogId + '-canvas'); - if (!canvas) - return; + if (!canvas) { + canvas = document.getElementById(this._toStrId(dialogId) + '-canvas'); + if (!canvas) + return; + } var canvasHeight = canvas.height; $('#' + dialogId).height(canvasHeight + 'px'); } commit 41b80a56b79e9d8eb45a8fde07d15cefc3603377 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Jan 12 14:46:02 2019 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: hide sidebar on mobile screens Change-Id: I9d43dab6e44eeda35bdd8f2fffe0702d5d0c11f1 diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css index f8cf72424..9f49feccb 100644 --- a/loleaflet/css/loleaflet.css +++ b/loleaflet/css/loleaflet.css @@ -171,7 +171,7 @@ body { } #document-container { top: 41px; - + right: 0px !important; } #spreadsheet-row-column-frame { top: 83px !important; commit 132f3f64b36306fba31aec38dac795e61efc6457 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Fri Jan 4 05:58:35 2019 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: resize sidebar to container without caching With cached getSize we don't get the new size when exiting fullscreen, so we leave the sidebar stuck at fullscreen height, which shows scrollbars. Change-Id: Icb09cd7d47998eb716b5334fb7991e2ba8ae8714 diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index 185b1e169..d63d43b3a 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -981,8 +981,7 @@ L.Map = L.Evented.extend({ if (sidebarpanel) { var sidebar = sidebarpanel.children[0]; if (sidebar) { - var newSize = this.getSize(); - sidebar.height = newSize.y - 10; + sidebar.height = this._container.clientHeight - 10; sidebar.style.height = sidebar.height + 'px'; // Fire the resize event to propagate the size change to WSD. commit 4d6037a033d2607915215626c0be3aed0b883b4b Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Mon Dec 17 19:34:48 2018 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 Close sidebar if menu activated on mobile Change-Id: Ia5b0d42db638025768ce1ddc1f0786d41f0cd7e6 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index c38d07982..f20a852bd 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -90,6 +90,7 @@ L.Control.LokDialog = L.Control.extend({ map.on('opendialog', this._openDialog, this); map.on('docloaded', this._docLoaded, this); map.on('closepopup', this.onCloseCurrentPopUp, this); + map.on('closesidebar', this._closeSidebar, this); map.on('editorgotfocus', this._onEditorGotFocus, this); L.DomEvent.on(document, 'mouseup', this.onCloseCurrentPopUp, this); }, @@ -710,6 +711,15 @@ L.Control.LokDialog = L.Control.extend({ this._onDialogClose(this._currentId, true); }, + _closeSidebar: function() { + for (var dialog in this._dialogs) { + if (this._dialogs[dialog].isSidebar == true) { + this._onSidebarClose(dialog); + } + } + $('#sidebar-dock-wrapper').css({display: ''}); + }, + _onEditorGotFocus: function() { // We need to lose focus on any dialogs/sidebars currently with focus. for (var winId in this._dialogs) { diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js index d90e3fb79..6a94d673e 100644 --- a/loleaflet/src/control/Control.Menubar.js +++ b/loleaflet/src/control/Control.Menubar.js @@ -579,6 +579,7 @@ L.Control.Menubar = L.Control.extend({ $('#main-menu').bind('keydown', {self: this}, this._onKeyDown); + var self = this; // SmartMenus mobile menu toggle button $(function() { var $mainMenuState = $('#main-menu-state'); @@ -588,6 +589,7 @@ L.Control.Menubar = L.Control.extend({ var $menu = $('#main-menu'); var $nav = $menu.parent(); if (this.checked) { + self._map.fire('closesidebar'); $nav.css({height: 'initial', bottom: '38px'}); $menu.hide().slideDown(250, function() { $menu.css('display', ''); }); } else { commit 59ce01d511ebf7b59f2be714b193bc23794b130d Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Mon Dec 17 12:54:11 2018 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 Don't show empty sidebar on start for tablets Change-Id: I0123b150bb095eb1a070468a4baa98595adf1af1 diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css index 0bdd3b1fd..f8cf72424 100644 --- a/loleaflet/css/loleaflet.css +++ b/loleaflet/css/loleaflet.css @@ -20,6 +20,10 @@ display: none; } +#sidebar-dock-wrapper.tablet { + top: 41px; +} + #map { position: absolute; top: 0px; diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index cfdc8ff23..c38d07982 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -466,7 +466,8 @@ L.Control.LokDialog = L.Control.extend({ if (!top) top = 0; - if (window.mode.isMobile() && this._map._permission != 'edit') + if ((window.mode.isMobile() || window.mode.isTablet()) + && this._map._permission != 'edit') return; var ratio = 1.0; @@ -498,6 +499,9 @@ L.Control.LokDialog = L.Control.extend({ // Render window. this._sendPaintWindowRect(id); + if (window.mode.isTablet()) + $('#sidebar-dock-wrapper').addClass('tablet'); + if (ratio < 1.0) { $('#sidebar-dock-wrapper').css('width', String(width * ratio) + 'px'); } diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index 3d01b9ec3..185b1e169 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -230,7 +230,7 @@ L.Map = L.Evented.extend({ this.initializeModificationIndicator(); // Show sidebar. - if (this._docLayer && !window.mode.isMobile() && + if (this._docLayer && !window.mode.isMobile() && !window.mode.isTablet() && (this._docLayer._docType === 'presentation' || this._docType === 'drawing')) { // Let the first page finish loading then load the sidebar. var map = this; commit 59006ad53c720bffe397f307838f649444f3a239 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Mon Dec 17 12:19:06 2018 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 Scrollable sidebar on mobile with small screen Change-Id: Ib1d6684aacee68a95b946a8dcc96df76f60697c5 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index b43b2d773..cfdc8ff23 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -466,6 +466,14 @@ L.Control.LokDialog = L.Control.extend({ if (!top) top = 0; + if (window.mode.isMobile() && this._map._permission != 'edit') + return; + + var ratio = 1.0; + if (width > window.screen.width) { + ratio = window.screen.width / width; + } + var strId = this._toStrId(id); if (this._currentDeck) { @@ -489,6 +497,10 @@ L.Control.LokDialog = L.Control.extend({ // Render window. this._sendPaintWindowRect(id); + + if (ratio < 1.0) { + $('#sidebar-dock-wrapper').css('width', String(width * ratio) + 'px'); + } return; } commit 527b8bdd7c7dcfc3b6c02427c0fdca8309b97d94 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Mon Dec 17 00:01:43 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: maintain sidebar size after child is closed Change-Id: I61d2b31a5b657136160f2d21b515ca4052d34a68 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index d4b889123..b43b2d773 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -793,12 +793,14 @@ L.Control.LokDialog = L.Control.extend({ _onDialogChildClose: function(dialogId) { $('#' + this._toStrId(dialogId) + '-floating').remove(); - // remove any extra height allocated for the parent container - var canvas = document.getElementById(dialogId + '-canvas'); - if (!canvas) - return; - var canvasHeight = canvas.height; - $('#' + dialogId).height(canvasHeight + 'px'); + if (!this._isSidebar(dialogId)) { + // Remove any extra height allocated for the parent container (only for floating dialogs). + var canvas = document.getElementById(dialogId + '-canvas'); + if (!canvas) + return; + var canvasHeight = canvas.height; + $('#' + dialogId).height(canvasHeight + 'px'); + } }, _removeDialogChild: function(id) { @@ -835,6 +837,8 @@ L.Control.LokDialog = L.Control.extend({ L.DomUtil.setStyle(floatingCanvas, 'position', 'absolute'); L.DomUtil.setStyle(floatingCanvas, 'left', (left - 1) + 'px'); // Align drop-down list with parent. L.DomUtil.setStyle(floatingCanvas, 'top', top + 'px'); + L.DomUtil.setStyle(floatingCanvas, 'width', '0px'); + L.DomUtil.setStyle(floatingCanvas, 'height', '0px'); // attach events this._setupChildEvents(childId, floatingCanvas); commit 8a1ed2c8aca416041ea5026dc902fdef107aa558 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Thu Dec 13 20:09:53 2018 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 Don't show sidebar on start in mobile Change-Id: I9b8eeb6d3406e971608fc950359b315220a50e51 diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index d583b46fe..3d01b9ec3 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -230,7 +230,7 @@ L.Map = L.Evented.extend({ this.initializeModificationIndicator(); // Show sidebar. - if (this._docLayer && + if (this._docLayer && !window.mode.isMobile() && (this._docLayer._docType === 'presentation' || this._docType === 'drawing')) { // Let the first page finish loading then load the sidebar. var map = this; commit 32d78d8ba2f6712a46584ddb1b22eaa5f8b8512a Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Thu Dec 13 20:09:34 2018 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 Top align sidebar in mobile Change-Id: Ib2e1d70bf9a63f6136c6458bb83c6b8b030d177a diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css index cfbc8c8ee..0bdd3b1fd 100644 --- a/loleaflet/css/loleaflet.css +++ b/loleaflet/css/loleaflet.css @@ -141,6 +141,7 @@ body { /* Show sidebar beyond 768px only */ #sidebar-dock-wrapper { display: none; + top: 41px; } #document-container.sidebar-document { commit 403026655706aac47d68bc9b37f63ec8d158e4be Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Mon Dec 10 00:08:48 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: Hide sidebar on collapse Change-Id: I7c4f3e1fa23277a24c0ae055298050234df11ac5 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index a965c204d..d4b889123 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -477,6 +477,12 @@ L.Control.LokDialog = L.Control.extend({ this._currentDeck.cursorVisible = false; $('#' + strId + '-cursor').css({display: 'none'}); + var panel = L.DomUtil.get('sidebar-panel'); + if (width > 1) + $(panel).parent().show(); + else + $(panel).parent().hide(); + // update the underlying canvas var panelCanvas = L.DomUtil.get(this._currentDeck.strId + '-canvas'); this._setCanvasWidthHeight(panelCanvas, width, height); commit 9bd92971dc34508091133024bcabd3043e0b6ab3 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sun Dec 9 14:59:30 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: scroll sidebars in client instead of resizing in core And resize the sidebar div to slightly shorter height than the content area to avoid scrolling the sidebar unnecessarily. Change-Id: I5cedb54a573f90097bfefd9a0099375e13a76a3b diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css index 5264b2b42..cfbc8c8ee 100644 --- a/loleaflet/css/loleaflet.css +++ b/loleaflet/css/loleaflet.css @@ -86,6 +86,7 @@ body { position: relative; width: 100%; height: 100%; + overflow-y: auto; } #toolbar-wrapper { diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index e83d8af88..a965c204d 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -527,8 +527,10 @@ L.Control.LokDialog = L.Control.extend({ this._setupWindowEvents(id, panelCanvas, dlgInput); L.DomEvent.on(panelContainer, 'resize', function() { - this._map._socket.sendMessage('resizewindow ' + id + ' size=' + panelContainer.width + ',' + panelContainer.height); + // Don't resize the window as we handle overflowing with scrollbars. + // this._map._socket.sendMessage('resizewindow ' + id + ' size=' + panelContainer.width + ',' + panelContainer.height); }, this); + L.DomEvent.on(panelContainer, 'mouseleave', function() { // Move the mouse off-screen when we leave the sidebar // so we don't leave edge-elements highlighted as if diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index e65f43b5a..d583b46fe 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -982,8 +982,8 @@ L.Map = L.Evented.extend({ var sidebar = sidebarpanel.children[0]; if (sidebar) { var newSize = this.getSize(); - sidebar.height = newSize.y; - sidebar.style.height = newSize.y + 'px'; + sidebar.height = newSize.y - 10; + sidebar.style.height = sidebar.height + 'px'; // Fire the resize event to propagate the size change to WSD. // .trigger isn't working, so doing it manually. commit 873c5480818d34c3061bd093adb550d6631d3028 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Wed Dec 5 05:32:29 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: sidebar: focus only when we have a cursor Change-Id: Ifc61c2da4f6fcaa7e5210b4869288697b5852527 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index 91c63af11..e83d8af88 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -357,7 +357,7 @@ L.Control.LokDialog = L.Control.extend({ }, focus: function(dlgId) { - if (!this._isOpen(dlgId) || !this._dialogs[dlgId].input) + if (!this._isOpen(dlgId) || !this._dialogs[dlgId].input || !this._dialogs[dlgId].cursorVisible) return; this._dialogs[dlgId].input.focus(); @@ -556,7 +556,7 @@ L.Control.LokDialog = L.Control.extend({ // 'mousedown' -> 'buttondown' var lokEventType = e.type.replace('mouse', 'button'); this._postWindowMouseEvent(lokEventType, id, e.offsetX, e.offsetY, 1, buttons, 0); - dlgInput.focus(); + this.focus(id); }, this); L.DomEvent.on(dlgInput, 'keyup keypress keydown compositionstart compositionupdate compositionend textInput', commit a9ab3e7328e9080be7d6909ee9a2c007cee232df Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Wed Dec 5 05:09:52 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: sidebar: hide cursor when changing decks Change-Id: I7912294638ea449c5e483ed9fd87689a1ea8e5c1 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index 5ba3bff7e..91c63af11 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -473,6 +473,10 @@ L.Control.LokDialog = L.Control.extend({ this._resizeSidebar(strId, width); } + // Hide cursor. + this._currentDeck.cursorVisible = false; + $('#' + strId + '-cursor').css({display: 'none'}); + // update the underlying canvas var panelCanvas = L.DomUtil.get(this._currentDeck.strId + '-canvas'); this._setCanvasWidthHeight(panelCanvas, width, height); commit c374a18f6e3780b0e4cdc48458989d6d2d1b75ba Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Fri Nov 30 09:10:28 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 wsd: document forced autosave and why isAutosave=false Change-Id: I5bb35898bb917f6768327b264e87dd9000a10ecc diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index 57d6b8fc7..08d4d3b11 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -607,6 +607,7 @@ bool DocumentBroker::load(const std::shared_ptr<ClientSession>& session, const s } } + #if ENABLE_SUPPORT_KEY if (!LOOLWSD::OverrideWatermark.empty()) watermarkText = LOOLWSD::OverrideWatermark; commit ceb9f895b6fad00de1870feac40041500d00f98a Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Tue Nov 27 09:38:07 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: trigger sidebar change upon load Here we trigger changing the sidebar to ensure that we do show the sidebar and the notification is not lost. Since sidebar creation happens before the view/frame are attached, we tend to lose said notification. Another benefit to triggering all sidebars here is that we preload them so switching between them is snappy. This should be moved to preinit stage though. Change-Id: I19345c7c0405ad83a8b6fcd86c50bcdbb1b8f9ff diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index 8cd4204ce..e65f43b5a 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -235,8 +235,14 @@ L.Map = L.Evented.extend({ // Let the first page finish loading then load the sidebar. var map = this; setTimeout(function () { + // This triggers all sidebar decks, so they would + // be loaded and show rather quickly on first use. + // Also, triggers sidebar window creation in the client. + map._socket.sendMessage('uno .uno:MasterSlidesPanel'); + map._socket.sendMessage('uno .uno:CustomAnimation'); + map._socket.sendMessage('uno .uno:SlideChangeWindow'); map._socket.sendMessage('uno .uno:ModifyPage'); - }, 1000); + }, 200); } }, this); }, commit 8ad642b818ce173106a67a394dd591091646c605 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Fri Nov 23 11:18:18 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: don't let sidebar steal focus from editor Change-Id: I7401389a3b54d8001de88818da11c447cf29af62 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index 51acec481..5ba3bff7e 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -771,6 +771,12 @@ L.Control.LokDialog = L.Control.extend({ var spreadsheetRowColumnFrame = L.DomUtil.get('spreadsheet-row-column-frame'); if (spreadsheetRowColumnFrame) spreadsheetRowColumnFrame.style.right = width.toString() + 'px'; + + // If we didn't have the focus, don't steal it form the editor. + if ($('#' + this._currentDeck.strId + '-cursor').css('display') === 'none') { + this._map.fire('editorgotfocus'); + this._map.focus(); + } }, _onDialogChildClose: function(dialogId) { commit f3e01f96629350f7b71114fcb2ba8528b32a1f5a Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Fri Nov 23 10:53:39 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: take focus when clicking in the editor This fixes the issue of clicking back into the editor where the cursor actually is. Because we rely on Core to give us cursor updates to take focus, this never happens when we click where the cursor actually is, since there is no change. End result is that the editor doesn't get focus. With this fix we ensure that we release dialogs/sidebar from focus and properly aquire it, even if Core doesn't give us cursor updates. Change-Id: Ib05b2bf5238ad92aed81ab53a9f54ea8bc3e5195 diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index 168a449df..8cd4204ce 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -1239,10 +1239,11 @@ L.Map = L.Evented.extend({ // (tml: For me, for this to work with a mobile device, we need to // accept 'mouseup', too, and check the _wasSingleTap flag set over in Map.Tap.js.) - if (type === 'click' || (type === 'mouseup' && + if (type === 'click' || type === 'dblclick' || (type === 'mouseup' && typeof this._container._wasSingleTap !== 'undefined' && this._container._wasSingleTap)) { if (this._permission === 'edit') { + this.fire('editorgotfocus'); this.focus(); } commit 7159068462f0b5f7c400cf4f63a4f662c65ccbf7 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Fri Nov 23 00:58:05 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: support closing of sidebars Change-Id: Icf94810af18fd4b67d32bd9c5f5008f9326abf4e diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index bbdf8edf3..51acec481 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -298,6 +298,8 @@ L.Control.LokDialog = L.Control.extend({ parent = this._getParentId(e.id); if (parent) this._onDialogChildClose(parent); + else if (this._isSidebar(e.id)) + this._onSidebarClose(e.id); else this._onDialogClose(e.id, false); } @@ -652,6 +654,14 @@ L.Control.LokDialog = L.Control.extend({ ' char=' + charcode + ' key=' + keycode); }, + _onSidebarClose: function(dialogId) { + this._resizeSidebar(dialogId, 0); + $('#' + this._currentDeck.strId).remove(); + this._map.focus(); + delete this._dialogs[dialogId]; + this._currentDeck = null; + }, + _onDialogClose: function(dialogId, notifyBackend) { if (window.ThisIsTheiOSApp) w2ui['editbar'].enable('closemobile'); @@ -751,12 +761,16 @@ L.Control.LokDialog = L.Control.extend({ _resizeSidebar: function(strId, width) { this._currentDeck.width = width; var sidebar = L.DomUtil.get(strId); - sidebar.width = width; - sidebar.style.width = width.toString() + 'px'; + if (sidebar) { + sidebar.width = width; + if (sidebar.style) + sidebar.style.width = width.toString() + 'px'; + } + this._map.options.documentContainer.style.right = (width + 1).toString() + 'px'; var spreadsheetRowColumnFrame = L.DomUtil.get('spreadsheet-row-column-frame'); if (spreadsheetRowColumnFrame) - spreadsheetRowColumnFrame.style.right = sidebar.style.width; + spreadsheetRowColumnFrame.style.right = width.toString() + 'px'; }, _onDialogChildClose: function(dialogId) { commit e0cc52ea627d0163fd215123c8b8ce073ac7555e Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Fri Nov 23 00:04:25 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: show the sidebar after loading We allow for the first page to render before we request the Impress/Draw sidebar. Change-Id: I95351ab4737cf70af2b621e513c9cd187204e985 diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index d775fdf25..168a449df 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -228,6 +228,16 @@ L.Map = L.Evented.extend({ } this.initializeModificationIndicator(); + + // Show sidebar. + if (this._docLayer && + (this._docLayer._docType === 'presentation' || this._docType === 'drawing')) { + // Let the first page finish loading then load the sidebar. + var map = this; + setTimeout(function () { + map._socket.sendMessage('uno .uno:ModifyPage'); + }, 1000); + } }, this); }, commit dee28b6b1eae2c5faf18c3e7cf7dd2264b05f833 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Tue Nov 20 01:10:41 2018 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 sidebar: Resize the underlying canvas on resize. Otherwise it always stays 400x600 and things get cut off. Change-Id: I999ef1f852f933ac447d500d922e6d38cb028459 diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css index 7ef1001fe..5264b2b42 100644 --- a/loleaflet/css/loleaflet.css +++ b/loleaflet/css/loleaflet.css @@ -73,10 +73,10 @@ body { position: absolute; top: 77px; right: 0px; - bottom: 36px; + bottom: 37px; border-top: 1px solid #b6b6b6; border-left: 1px solid #b6b6b6; - display: block; + overflow: hidden; /* FIXME we want scrollbars here to handle overflows client-side */ z-index: 1100; } diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index c135b9e78..bbdf8edf3 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -466,13 +466,15 @@ L.Control.LokDialog = L.Control.extend({ var strId = this._toStrId(id); - if (this._currentDeck) - { - if (width > 0) - { + if (this._currentDeck) { + if (width > 0) { this._resizeSidebar(strId, width); } + // update the underlying canvas + var panelCanvas = L.DomUtil.get(this._currentDeck.strId + '-canvas'); + this._setCanvasWidthHeight(panelCanvas, width, height); + // Render window. this._sendPaintWindowRect(id); return; @@ -482,7 +484,7 @@ L.Control.LokDialog = L.Control.extend({ panelContainer.id = strId; // Create the panel canvas. - var panelCanvas = L.DomUtil.create('canvas', 'panel_canvas', panelContainer); + panelCanvas = L.DomUtil.create('canvas', 'panel_canvas', panelContainer); L.DomUtil.setStyle(panelCanvas, 'position', 'absolute'); this._setCanvasWidthHeight(panelCanvas, width, height); panelCanvas.id = strId + '-canvas'; commit 20ca03ee754b78a4ced9c49073b73e3e76d9196d Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Tue Nov 20 00:30:39 2018 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 sidebar: Lower the z-index, so that it is covered with the overlay. Change-Id: I8f6910289ca512c253d34b251c7385f1dc55fead diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css index 9930f021c..7ef1001fe 100644 --- a/loleaflet/css/loleaflet.css +++ b/loleaflet/css/loleaflet.css @@ -77,6 +77,7 @@ body { border-top: 1px solid #b6b6b6; border-left: 1px solid #b6b6b6; display: block; + z-index: 1100; } #sidebar-panel { commit 500d79f1f0cdeba077ad507aa0b881e79a95de61 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Tue Nov 20 00:11:33 2018 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 sidebar: Send resize events according to the container, not the canvas. The canvas is fixed size and does not resize, so gets no resize events. Change-Id: Ie18f9f2e5c64cc7a54e506f2fbe0ed3a5d372b06 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index 752cf3fcc..c135b9e78 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -518,17 +518,8 @@ L.Control.LokDialog = L.Control.extend({ var dlgInput = this._createDialogInput(strId); this._setupWindowEvents(id, panelCanvas, dlgInput); - L.DomEvent.on(panelCanvas, 'resize', function() { - this._map._socket.sendMessage('resizewindow ' + id + ' size=' + panelCanvas.width + ',' + panelCanvas.height); - }, this); L.DomEvent.on(panelContainer, 'resize', function() { - var sidebarpanel = L.DomUtil.get('sidebar-panel'); - if (sidebarpanel) { - var sidebar = sidebarpanel.children[0]; - if (sidebar) { - this._map._socket.sendMessage('resizewindow ' + id + ' size=' + sidebar.width + ',' + sidebar.height); - } - } + this._map._socket.sendMessage('resizewindow ' + id + ' size=' + panelContainer.width + ',' + panelContainer.height); }, this); L.DomEvent.on(panelContainer, 'mouseleave', function() { // Move the mouse off-screen when we leave the sidebar commit d1ba38386c2c8367213afd47d66f992870fa7207 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Mon Nov 19 23:03:52 2018 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 sibebar: Various smaller visual cleanups. * Make it work with the menu fold / unfold button * White background + a grey line separating the document area + the sidebar * Use CSS instead of manually setting the properties in some cases Change-Id: I2ba7201075637ebdcc2b9f7319aa59317631aba2 diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css index 5b21f74a7..9930f021c 100644 --- a/loleaflet/css/loleaflet.css +++ b/loleaflet/css/loleaflet.css @@ -69,16 +69,24 @@ body { } #sidebar-dock-wrapper { - background: #dfdfdf; - float: right; - /* position: absolute; */ - top: 70px; - /* left: 0px; */ - bottom: 66px; + background: #fff; + position: absolute; + top: 77px; + right: 0px; + bottom: 36px; border-top: 1px solid #b6b6b6; + border-left: 1px solid #b6b6b6; display: block; } +#sidebar-panel { + padding: 0px; + margin: 0px; + position: relative; + width: 100%; + height: 100%; +} + #toolbar-wrapper { position: relative; table-layout: fixed; diff --git a/loleaflet/html/loleaflet.html.m4 b/loleaflet/html/loleaflet.html.m4 index 8560c73c3..440454c5d 100644 --- a/loleaflet/html/loleaflet.html.m4 +++ b/loleaflet/html/loleaflet.html.m4 @@ -139,7 +139,6 @@ ifelse(MOBILEAPP,[true], <div id="sidebar-dock-wrapper"> <div id="sidebar-panel"></div> - <div id="sidebar-toolbar"></div> </div> <div id="mobile-edit-button" style="display: none"> diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index 54755677b..752cf3fcc 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -479,11 +479,6 @@ L.Control.LokDialog = L.Control.extend({ } var panelContainer = L.DomUtil.create('div', 'panel', L.DomUtil.get('sidebar-panel')); - L.DomUtil.setStyle(panelContainer, 'padding', '0px'); - L.DomUtil.setStyle(panelContainer, 'margin', '0px'); - L.DomUtil.setStyle(panelContainer, 'position', 'relative'); - panelContainer.width = width; - panelContainer.height = height; panelContainer.id = strId; // Create the panel canvas. @@ -765,7 +760,7 @@ L.Control.LokDialog = L.Control.extend({ var sidebar = L.DomUtil.get(strId); sidebar.width = width; sidebar.style.width = width.toString() + 'px'; - this._map.options.documentContainer.style.right = sidebar.style.width; + this._map.options.documentContainer.style.right = (width + 1).toString() + 'px'; var spreadsheetRowColumnFrame = L.DomUtil.get('spreadsheet-row-column-frame'); if (spreadsheetRowColumnFrame) spreadsheetRowColumnFrame.style.right = sidebar.style.width; diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index 552b4d132..d775fdf25 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -1498,6 +1498,7 @@ L.Map = L.Evented.extend({ moveObjectVertically($('#spreadsheet-row-column-frame'), 36); moveObjectVertically($('#document-container'), 36); moveObjectVertically($('#presentation-controls-wrapper'), 36); + moveObjectVertically($('#sidebar-dock-wrapper'), 36); } else { $('.main-nav').css({'display': 'none'}); @@ -1512,6 +1513,7 @@ L.Map = L.Evented.extend({ moveObjectVertically($('#spreadsheet-row-column-frame'), -36); moveObjectVertically($('#document-container'), -36); moveObjectVertically($('#presentation-controls-wrapper'), -36); + moveObjectVertically($('#sidebar-dock-wrapper'), -36); } } }); commit d51c53ffc0eeae9a7b27000462e2784975382eb6 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Mon Nov 19 20:08:14 2018 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 sidebar: Remove the old JS pieces. Change-Id: I28bc314fc78152e9a4967f8365d441af2d10bb5d diff --git a/loleaflet/build/deps.js b/loleaflet/build/deps.js index 47a453d4a..a050edf47 100644 --- a/loleaflet/build/deps.js +++ b/loleaflet/build/deps.js @@ -286,13 +286,6 @@ var deps = { desc: 'Parts preview sidebar' }, - ControlSidebar: { - src: ['control/Control.js', - 'control/Control.Sidebar.js'], - heading: 'Controls', - desc: 'Sidebar panels deck' - }, - ControlHeader: { src: ['control/Control.js', 'control/Control.Header.js'], diff --git a/loleaflet/js/main.js b/loleaflet/js/main.js index 7f79d3102..15e859606 100644 --- a/loleaflet/js/main.js +++ b/loleaflet/js/main.js @@ -74,7 +74,6 @@ map.addControl(L.control.scroll()); map.addControl(L.control.alertDialog()); map.addControl(L.control.lokDialog()); map.addControl(L.control.partsPreview()); -map.addControl(L.control.sidebar()); map.addControl(L.control.tabs()); map.addControl(L.control.columnHeader()); map.addControl(L.control.rowHeader()); diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js deleted file mode 100644 index c14069805..000000000 --- a/loleaflet/src/control/Control.Sidebar.js +++ /dev/null @@ -1,540 +0,0 @@ -/* -*- js-indent-level: 8 -*- */ -/* - * L.Control.Sidebar - */ - -/* global $ */ -L.Control.Sidebar = L.Control.extend({ - panelIdPrefix: 'sidebarpanel-', - - onAdd: function (map) { - map; - // map.on('window', this._onWindowMsg, this); - // map.on('windowpaint', this._onWindowPaint, this); - }, - - _isParent: function(id) { - return this._currentDeck != null && this._currentDeck.id === id; - }, - - // If returns non-null, then id is that of a panels and we have a parent (with the returned id). - _getParentId: function(id) { - if (this._isChild(parseInt(id))) - return this._currentDeck.id; - return null; - }, - - _isOpen: function(id) { - return this._isParent(id) && $('#' + this._toStrId(id)).length > 0; - }, - - // Converts an string Id to its raw integer Id. - _toIntId: function(id) { - if (typeof(id) === 'string') - return parseInt(id.replace(this.panelIdPrefix, '')); - return id; - }, - - // Converts an integer Id to string, such as 'sidebarpanel-123'. - _toStrId: function(id) { - return this.panelIdPrefix + id; - }, - - _isChild: function(id) { - return this._currentDeck != null && this._currentDeck.child != null && this._currentDeck.child.id === id; - }, - - _isChildOpen: function(id) { - return this._isChild(id) && $('#' + this._currentDeck.strId + '-floating').length > 0; - }, - - _sendPaintWindowRect: function(id, x, y, width, height) { - if (!width) - width = this._currentDeck.width; - if (width <= 0) - return; // Don't request rendering an empty area. - if (!height) - height = this._currentDeck.height; - if (height <= 0) - return; // Don't request rendering an empty area. - if (!x) - x = 0; - if (!y) - y = 0; - - // pre-multiplied by the scale factor - var dpiscale = L.getDpiScaleFactor(); - var rect = [x * dpiscale, y * dpiscale, width * dpiscale, height * dpiscale].join(','); - this._sendPaintWindow(id, rect); - }, - - _sendPaintWindow: function(id, rectangle) { - if (!rectangle) - return; // Don't request rendering an empty area. - - rectangle = rectangle.replace(/ /g, ''); - if (!rectangle) - return; // Don't request rendering an empty area. - - var dpiscale = L.getDpiScaleFactor(); - console.log('_sendPaintWindow: rectangle: ' + rectangle + ', dpiscale: ' + dpiscale); - this._map._socket.sendMessage('paintwindow ' + id + ' rectangle=' + rectangle + ' dpiscale=' + dpiscale); - }, - - _isRectangleValid: function(rect) { - rect = rect.split(','); - return (parseInt(rect[0]) >= 0 && parseInt(rect[1]) >= 0 && - parseInt(rect[2]) >= 0 && parseInt(rect[3]) >= 0); - }, - - _onWindowMsg: function(e) { - e.id = parseInt(e.id); - var strId = this._toStrId(e.id); - - var width = 0; - var height = 0; - if (e.size) { - width = parseInt(e.size.split(',')[0]); - height = parseInt(e.size.split(',')[1]); - } - - var left = 0; - var top = 0; - if (e.position) { - left = parseInt(e.position.split(',')[0]); - top = parseInt(e.position.split(',')[1]); - } - - if (e.action === 'created') { - if (e.winType === 'deck') { - this._launchSidebar(e.id, left, top, width, height); - } else if (e.winType === 'child') { - var parentId = parseInt(e.parentId); - if (!this._isOpen(parentId)) - return; - - left -= this._currentDeck.left; - top -= this._currentDeck.top; - - this._removeChild(parentId); - this._currentDeck.child = { - id: e.id, - strId: strId, - left: left, - top: top, - width: width, - height: height, - parentId: parentId - }; - - this._createChild(e.id, parentId, top, left); - this._sendPaintWindowRect(e.id, 0, 0, width, height); - } - else { - // We only handle sidebar panels here (see Control.LokDialog.js) - return; - } - } - - // The following act on an existing window. - if (!this._isOpen(e.id) && !this._isChildOpen(e.id)) - return; - - if (e.action === 'invalidate') { - var rectangle = e.rectangle; - if (!rectangle || !this._isRectangleValid(rectangle)) - { - if (this._isChild(e.id)) - rectangle = '0,0,' + this._currentDeck.child.width + ',' + this._currentDeck.child.height; - else - rectangle = '0,0,' + this._currentDeck.width + ',' + this._currentDeck.height; - - this._sendPaintWindow(e.id, rectangle); - } - else if (this._isChild(e.id)) - { - // Child windows are given relative coordinates. - this._sendPaintWindow(e.id, rectangle); - } - else - { - // Convert from absolute screen coordinates to relative. - rectangle = rectangle.split(','); - rectangle[0] = parseInt(rectangle[0]) - this._currentDeck.left; - rectangle[1] = parseInt(rectangle[1]) - this._currentDeck.top; - this._sendPaintWindowRect(e.id, rectangle[0], rectangle[1], rectangle[2], rectangle[3]); - } - } else if (e.action === 'size_changed') { - this._launchSidebar(e.id, left, top, width, height); - } else if (e.action === 'cursor_invalidate') { - if (this._isOpen(e.id) && !!e.rectangle) { - rectangle = e.rectangle.split(','); - var x = parseInt(rectangle[0]); - var y = parseInt(rectangle[1]); - height = parseInt(rectangle[3]); - - // Relative x to the sidebar. - x -= this._currentDeck.left; - - this._updateDialogCursor(e.id, x, y, height); - } - } else if (e.action === 'cursor_visible') { - this._currentDeck.cursor.cursorVisible = e.visible === 'true'; - if (this._currentDeck.cursor.cursorVisible) - $('#' + strId + '-cursor').css({display: 'block'}); - else - $('#' + strId + '-cursor').css({display: 'none'}); - } else if (e.action === 'close') { - var parent = this._getParentId(e.id); - if (parent) - this._onPanelChildClose(this._toStrId(parent)); - else - this._onPanelClose(e.id, false); - } - }, - - _updateDialogCursor: function(dlgId, x, y, height) { - var strId = this._toStrId(dlgId); - var dialogCursor = L.DomUtil.get(strId + '-cursor'); - L.DomUtil.setStyle(dialogCursor, 'height', height + 'px'); - L.DomUtil.setStyle(dialogCursor, 'display', this._currentDeck.cursor.cursorVisible ? 'block' : 'none'); - // set the position of the cursor container element - L.DomUtil.setStyle(this._currentDeck.cursor, 'left', x + 'px'); - L.DomUtil.setStyle(this._currentDeck.cursor, 'top', y + 'px'); - - // update the input as well - this._updateDialogInput(dlgId); - }, - - _createDialogCursor: function(dialogId) { - this._currentDeck.cursor = L.DomUtil.create('div', 'sidebar-cursor-container', L.DomUtil.get(dialogId)); - var cursor = L.DomUtil.create('div', 'leaflet-cursor lokdialog-cursor', this._currentDeck.cursor); - cursor.id = dialogId + '-cursor'; - L.DomUtil.addClass(cursor, 'blinking-cursor'); - }, - - _createDialogInput: function(dialogId) { - var clipDlgContainer = L.DomUtil.create('div', 'clipboard-container', L.DomUtil.get(dialogId)); - clipDlgContainer.id = dialogId + '-clipboard-container'; - var dlgTextArea = L.DomUtil.create('input', 'clipboard', clipDlgContainer); - dlgTextArea.setAttribute('type', 'text'); - dlgTextArea.setAttribute('autocorrect', 'off'); - dlgTextArea.setAttribute('autocapitalize', 'off'); - dlgTextArea.setAttribute('autocomplete', 'off'); - dlgTextArea.setAttribute('spellcheck', 'false'); - this._currentDeck.input = dlgTextArea; - - return dlgTextArea; - }, - - _updateDialogInput: function(dlgId) { - if (!this._currentDeck.input) - return; - - var strId = this._toStrId(dlgId); - var left = parseInt(L.DomUtil.getStyle(this._currentDeck.cursor, 'left')); - var top = parseInt(L.DomUtil.getStyle(this._currentDeck.cursor, 'top')); - var dlgContainer = L.DomUtil.get(strId + '-clipboard-container'); - L.DomUtil.setPosition(dlgContainer, new L.Point(left, top)); - }, - - focus: function(dlgId) { - if (!this._isOpen(dlgId) || !this._currentDeck.input) - return; - - this._currentDeck.input.focus(); - }, - - _setCanvasWidthHeight: function(canvas, width, height) { - // FIXME: Setting the style width/height is messing up the cursor. - // L.DomUtil.setStyle(canvas, 'width', width + 'px'); - // L.DomUtil.setStyle(canvas, 'height', height + 'px'); - - var scale = L.getDpiScaleFactor(); - canvas.width = width * scale; - canvas.height = height * scale; - }, - - _launchSidebar: function(id, left, top, width, height) { - - if (!left) - left = 0; - if (!top) - top = 0; - - var strId = this._toStrId(id); - - if (this._currentDeck) - { - if (width > 0) - { - this._resizeSidebar(strId, width); - } - - // Render window. - this._sendPaintWindowRect(id); - return; - } - - var panelContainer = L.DomUtil.create('div', 'panel', L.DomUtil.get('sidebar-panel')); - L.DomUtil.setStyle(panelContainer, 'padding', '0px'); - L.DomUtil.setStyle(panelContainer, 'margin', '0px'); - L.DomUtil.setStyle(panelContainer, 'position', 'relative'); - panelContainer.width = width; - panelContainer.height = height; - panelContainer.id = strId; - - // Create the panel canvas. - var panelCanvas = L.DomUtil.create('canvas', 'panel_canvas', panelContainer); - L.DomUtil.setStyle(panelCanvas, 'position', 'absolute'); - this._setCanvasWidthHeight(panelCanvas, width, height); - panelCanvas.id = strId + '-canvas'; - - // Create the child canvas now, to make it on top of the main panel canvas. - var floatingCanvas = L.DomUtil.create('canvas', 'lokdialogchild-canvas', panelContainer); - L.DomUtil.setStyle(floatingCanvas, 'position', 'absolute'); - floatingCanvas.width = 0; - floatingCanvas.height = 0; - floatingCanvas.id = strId + '-floating'; - - // Don't show the sidebar until we get the contents. - $(panelContainer).parent().hide(); - - this._currentDeck = { - id: id, - strId: strId, - left: left, - top: top, - width: width, - height: height, - cursor: null, - input: null, - child: null // One child, typically drop-down list - }; - - // don't make 'TAB' focus on this button; we want to cycle focus in the lok dialog with each TAB - // $('.lokdialog_container button.ui-dialog-titlebar-close').attr('tabindex', '-1').blur(); - - this._createDialogCursor(strId); - var dlgInput = this._createDialogInput(strId); - this._setupWindowEvents(id, panelCanvas, dlgInput); - - L.DomEvent.on(panelCanvas, 'resize', function() { - this._map._socket.sendMessage('resizewindow ' + id + ' size=' + panelCanvas.width + ',' + panelCanvas.height); - }, this); - L.DomEvent.on(panelContainer, 'resize', function() { - var sidebarpanel = L.DomUtil.get('sidebar-panel'); - if (sidebarpanel) { - var sidebar = sidebarpanel.children[0]; - if (sidebar) { - this._map._socket.sendMessage('resizewindow ' + id + ' size=' + sidebar.width + ',' + sidebar.height); - } - } - }, this); - L.DomEvent.on(panelContainer, 'mouseleave', function() { - // Move the mouse off-screen when we leave the sidebar - // so we don't leave edge-elements highlighted as if - // the mouse is still over them. - this._map.lastActiveTime = Date.now(); - this._postWindowMouseEvent('move', id, -1, -1, 1, 0, 0); - }, this); - - // Render window. - this._sendPaintWindowRect(id); - }, - - _setupWindowEvents: function(id, canvas, dlgInput) { - L.DomEvent.on(canvas, 'contextmenu', L.DomEvent.preventDefault); - L.DomEvent.on(canvas, 'mousemove', function(e) { - this._map.lastActiveTime = Date.now(); - this._postWindowMouseEvent('move', id, e.offsetX, e.offsetY, 1, 0, 0); - }, this); - L.DomEvent.on(canvas, 'mousedown mouseup', function(e) { - L.DomEvent.stopPropagation(e); - var buttons = 0; - buttons |= e.button === this._map['mouse'].JSButtons.left ? this._map['mouse'].LOButtons.left : 0; - buttons |= e.button === this._map['mouse'].JSButtons.middle ? this._map['mouse'].LOButtons.middle : 0; - buttons |= e.button === this._map['mouse'].JSButtons.right ? this._map['mouse'].LOButtons.right : 0; - // 'mousedown' -> 'buttondown' - var lokEventType = e.type.replace('mouse', 'button'); - this._postWindowMouseEvent(lokEventType, id, e.offsetX, e.offsetY, 1, buttons, 0); - dlgInput.focus(); - }, this); - - L.DomEvent.on(dlgInput, - 'keyup keypress keydown compositionstart compositionupdate compositionend textInput', - function(e) { - e.originalEvent = e; // _onKeyDown fn below requires real event in e.originalEvent - this._map['keyboard']._onKeyDown(e, - L.bind(this._postWindowKeyboardEvent, - this, - id), - L.bind(this._postWindowCompositionEvent, - this, - id), - dlgInput); - - // Keep map active while user is playing with window. - this._map.lastActiveTime = Date.now(); - }, this); - L.DomEvent.on(dlgInput, 'contextmenu', function() { - return false; - }); - }, - - _postWindowCompositionEvent: function(winid, type, text) { - this._map._docLayer._postCompositionEvent(winid, type, text); - }, - - _postWindowMouseEvent: function(type, winid, x, y, count, buttons, modifier) { - this._map._socket.sendMessage('windowmouse id=' + winid + ' type=' + type + - ' x=' + x + ' y=' + y + ' count=' + count + - ' buttons=' + buttons + ' modifier=' + modifier); - }, - - _postWindowKeyboardEvent: function(winid, type, charcode, keycode) { - this._map._socket.sendMessage('windowkey id=' + winid + ' type=' + type + - ' char=' + charcode + ' key=' + keycode); - }, - - _onPanelClose: function(id, notifyBackend) { - if (notifyBackend) - this._sendCloseWindow(id); - $('#' + this._toStrId(id)).remove(); - var sidebar = L.DomUtil.get(this._currentDeck.strId); - if (sidebar) - sidebar.style.width = '0px'; - var docContainer = this._map.options.documentContainer; - docContainer.style.right = '0px'; - var spreadsheetRowColumnFrame = L.DomUtil.get('spreadsheet-row-column-frame'); - if (spreadsheetRowColumnFrame) - spreadsheetRowColumnFrame.style.right = '0px'; - this._map.focus(); - this._currentDeck = null; - }, - - /// Rendered image sent from Core. - _paintPanel: function (parentId, rectangle, imgData) { - - var strId = this._toStrId(parentId); - var canvas = document.getElementById(strId + '-canvas'); - if (!canvas) - return; // no window to paint to - - // The actual image of the window may be larger/smaller than the dimension we get on size_changed. - var width = this._currentDeck.width; - - var ctx = canvas.getContext('2d'); - - var that = this; - var img = new Image(); - img.onload = function() { - var x = 0; - var y = 0; - if (rectangle) { - rectangle = rectangle.split(','); - x = parseInt(rectangle[0]); - y = parseInt(rectangle[1]); - } - - that._resizeSidebar(strId, width); - - // Render. - ctx.drawImage(img, x, y); - - // If sidebar panel is hidden, show it. - var container = L.DomUtil.get(strId); - if (container) - $(container).parent().show(); - that.focus(parentId); - }; - img.src = imgData; - }, - - /// Rendered image sent from Core. - _onWindowPaint: function (e) { - var parent = this._getParentId(e.id); - if (parent) { - this._paintPanelChild(parent, e.width, e.height, e.rectangle, e.img); - } else { - this._paintPanel(e.id, e.rectangle, e.img); - } - }, - - _paintPanelChild: function(parentId, width, height, rectangle, imgData) { - var strId = this._toStrId(parentId); - var img = new Image(); - var canvas = L.DomUtil.get(strId + '-floating'); - if (!canvas) - return; // no floating window to paint to - - this._setCanvasWidthHeight(canvas, width, height); - - var ctx = canvas.getContext('2d'); - img.onload = function() { - ctx.drawImage(img, 0, 0); - }; - img.src = imgData; - }, - - _resizeSidebar: function(strId, width) { - this._currentDeck.width = width; - var sidebar = L.DomUtil.get(strId); - sidebar.width = width; - sidebar.style.width = width.toString() + 'px'; - this._map.options.documentContainer.style.right = sidebar.style.width; - var spreadsheetRowColumnFrame = L.DomUtil.get('spreadsheet-row-column-frame'); - if (spreadsheetRowColumnFrame) - spreadsheetRowColumnFrame.style.right = sidebar.style.width; - }, - - _onPanelChildClose: function(parentId) { - this._removeChild(parentId); - - // remove any extra height allocated for the parent container - var canvasHeight = document.getElementById(parentId + '-canvas').height; - $('#' + parentId).height(canvasHeight + 'px'); - }, - - _removeChild: function(parentId) { - if (typeof parentId === 'number') - parentId = this._toStrId(parentId); - var floatingCanvas = L.DomUtil.get(parentId + '-floating'); - floatingCanvas.width = 0; - floatingCanvas.height = 0; - }, - - _createChild: function(childId, parentId, top, left) { - var strId = this._toStrId(parentId); - var floatingCanvas = L.DomUtil.get(strId + '-floating'); - L.DomUtil.setStyle(floatingCanvas, 'position', 'relative'); // Relative to the sidebar - L.DomUtil.setStyle(floatingCanvas, 'left', left + 'px'); // yes, it's necessary to append 'px' - L.DomUtil.setStyle(floatingCanvas, 'top', top + 'px'); - - // attach events - this._setupChildEvents(childId, floatingCanvas); - }, - - _setupChildEvents: function(childId, canvas) { - L.DomEvent.on(canvas, 'contextmenu', L.DomEvent.preventDefault); - - L.DomEvent.on(canvas, 'mousedown mouseup', function(e) { - var buttons = 0; - buttons |= e.button === this._map['mouse'].JSButtons.left ? this._map['mouse'].LOButtons.left : 0; - buttons |= e.button === this._map['mouse'].JSButtons.middle ? this._map['mouse'].LOButtons.middle : 0; - buttons |= e.button === this._map['mouse'].JSButtons.right ? this._map['mouse'].LOButtons.right : 0; - var lokEventType = e.type.replace('mouse', 'button'); - this._postWindowMouseEvent(lokEventType, childId, e.offsetX, e.offsetY, 1, buttons, 0); - }, this); - L.DomEvent.on(canvas, 'mousemove', function(e) { - this._postWindowMouseEvent('move', childId, e.offsetX, e.offsetY, 1, 0, 0); - }, this); - L.DomEvent.on(canvas, 'contextmenu', function() { - return false; - }); - } -}); - -L.control.sidebar = function (options) { - return new L.Control.Sidebar(options); -}; commit 0145b2e49a8e47f2164f4ca73bbd0b648a8a616c Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 22:51:46 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: move sidebar handling in dialogs Change-Id: Ibe9aa9d58b7bc2b91bfb4700d506f6b782c2fd28 diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index ddcbfe6a3..54755677b 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -118,6 +118,10 @@ L.Control.LokDialog = L.Control.extend({ $('#' + this._toStrId(id)).length > 0; }, + _isSidebar: function(id) { + return this._dialogs[id].isSidebar; + }, + // Given a prefixed dialog id like 'lokdialog-323', gives a raw id, 323. _toIntId: function(id) { if (typeof(id) === 'string') @@ -151,6 +155,26 @@ L.Control.LokDialog = L.Control.extend({ return [x * dpiscale, y * dpiscale, width * dpiscale, height * dpiscale].join(','); }, + _sendPaintWindowRect: function(id, x, y, width, height) { + if (!width) + width = this._dialogs[id].width; + if (width <= 0) + return; // Don't request rendering an empty area. + if (!height) + height = this._dialogs[id].height; + if (height <= 0) + return; // Don't request rendering an empty area. + if (!x) + x = 0; + if (!y) + y = 0; + + // pre-multiplied by the scale factor + var dpiscale = L.getDpiScaleFactor(); + var rect = [x * dpiscale, y * dpiscale, width * dpiscale, height * dpiscale].join(','); + this._sendPaintWindow(id, rect); + }, + _sendPaintWindow: function(id, rectangle) { if (!rectangle) return; // Don't request rendering an empty area. @@ -175,8 +199,7 @@ L.Control.LokDialog = L.Control.extend({ }, _onDialogMsg: function(e) { - if (e.winType != undefined && e.winType !== 'dialog' && e.winType !== 'child') { - // We only handle pop-up dialogs here (see Control.Sidebar.js) + if (e.winType != undefined && e.winType !== 'dialog' && e.winType !== 'child' && e.winType !== 'deck') { return; } @@ -200,6 +223,8 @@ L.Control.LokDialog = L.Control.extend({ if (e.action === 'created') { if (e.winType === 'dialog') { this._launchDialog(e.id, left, top, width, height, e.title); + } else if (e.winType === 'deck') { + this._launchSidebar(e.id, left, top, width, height); } else if (e.winType === 'child') { var parentId = parseInt(e.parentId); if (!this._isOpen(parentId)) @@ -410,8 +435,13 @@ L.Control.LokDialog = L.Control.extend({ L.DomUtil.setStyle(dialogContainer, 'minHeight', height + 'px'); this._dialogs[id] = { + id: id, + strId: strId, + isSidebar: false, width: width, height: height, + cursor: null, + input: null, title: title }; @@ -427,6 +457,96 @@ L.Control.LokDialog = L.Control.extend({ this._sendPaintWindow(id, this._createRectStr(id)); }, + _launchSidebar: function(id, left, top, width, height) { + + if (!left) + left = 0; + if (!top) + top = 0; + + var strId = this._toStrId(id); + + if (this._currentDeck) + { + if (width > 0) + { + this._resizeSidebar(strId, width); + } + + // Render window. + this._sendPaintWindowRect(id); + return; + } + + var panelContainer = L.DomUtil.create('div', 'panel', L.DomUtil.get('sidebar-panel')); + L.DomUtil.setStyle(panelContainer, 'padding', '0px'); + L.DomUtil.setStyle(panelContainer, 'margin', '0px'); + L.DomUtil.setStyle(panelContainer, 'position', 'relative'); + panelContainer.width = width; + panelContainer.height = height; + panelContainer.id = strId; + + // Create the panel canvas. + var panelCanvas = L.DomUtil.create('canvas', 'panel_canvas', panelContainer); + L.DomUtil.setStyle(panelCanvas, 'position', 'absolute'); + this._setCanvasWidthHeight(panelCanvas, width, height); + panelCanvas.id = strId + '-canvas'; + + // Create the child canvas now, to make it on top of the main panel canvas. + var floatingCanvas = L.DomUtil.create('canvas', 'lokdialogchild-canvas', panelContainer); + L.DomUtil.setStyle(floatingCanvas, 'position', 'absolute'); + floatingCanvas.width = 0; + floatingCanvas.height = 0; + floatingCanvas.id = strId + '-floating'; + + // Don't show the sidebar until we get the contents. + $(panelContainer).parent().hide(); + + this._dialogs[id] = { + open: true, + id: id, + strId: strId, + isSidebar: true, + left: left, + top: top, + width: width, + height: height, + cursor: null, + input: null, + child: null, // One child, typically drop-down list + title: null // Never used for sidebars + }; + + this._currentDeck = this._dialogs[id]; + + this._createDialogCursor(strId); + var dlgInput = this._createDialogInput(strId); + this._setupWindowEvents(id, panelCanvas, dlgInput); + + L.DomEvent.on(panelCanvas, 'resize', function() { + this._map._socket.sendMessage('resizewindow ' + id + ' size=' + panelCanvas.width + ',' + panelCanvas.height); + }, this); + L.DomEvent.on(panelContainer, 'resize', function() { + var sidebarpanel = L.DomUtil.get('sidebar-panel'); + if (sidebarpanel) { + var sidebar = sidebarpanel.children[0]; + if (sidebar) { + this._map._socket.sendMessage('resizewindow ' + id + ' size=' + sidebar.width + ',' + sidebar.height); + } + } + }, this); + L.DomEvent.on(panelContainer, 'mouseleave', function() { + // Move the mouse off-screen when we leave the sidebar + // so we don't leave edge-elements highlighted as if + // the mouse is still over them. + this._map.lastActiveTime = Date.now(); + this._postWindowMouseEvent('move', id, -1, -1, 1, 0, 0); + }, this); + + // Render window. + this._sendPaintWindowRect(id); + }, + _setupWindowEvents: function(id, canvas, dlgInput) { L.DomEvent.on(canvas, 'contextmenu', L.DomEvent.preventDefault); L.DomEvent.on(canvas, 'mousemove', function(e) { @@ -591,6 +711,10 @@ L.Control.LokDialog = L.Control.extend({ y = parseInt(rectangle[1]); } + // Sidebars find out their size and become visible on first paint. + if (that._isSidebar(parentId)) + that._resizeSidebar(strId, that._currentDeck.width); + ctx.drawImage(img, x, y); // if dialog is hidden, show it @@ -636,6 +760,17 @@ L.Control.LokDialog = L.Control.extend({ img.src = imgData; }, + _resizeSidebar: function(strId, width) { + this._currentDeck.width = width; + var sidebar = L.DomUtil.get(strId); + sidebar.width = width; + sidebar.style.width = width.toString() + 'px'; + this._map.options.documentContainer.style.right = sidebar.style.width; + var spreadsheetRowColumnFrame = L.DomUtil.get('spreadsheet-row-column-frame'); + if (spreadsheetRowColumnFrame) + spreadsheetRowColumnFrame.style.right = sidebar.style.width; + }, + _onDialogChildClose: function(dialogId) { $('#' + this._toStrId(dialogId) + '-floating').remove(); // remove any extra height allocated for the parent container diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index 694559aba..c14069805 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -8,8 +8,9 @@ L.Control.Sidebar = L.Control.extend({ panelIdPrefix: 'sidebarpanel-', onAdd: function (map) { - map.on('window', this._onWindowMsg, this); - map.on('windowpaint', this._onWindowPaint, this); + map; + // map.on('window', this._onWindowMsg, this); + // map.on('windowpaint', this._onWindowPaint, this); }, _isParent: function(id) { commit d06c646416f039684d5cda307e0a062f3c57913b Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 23:03:15 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: dialog and sidebar open flag not used Change-Id: I3a1a4308df7f874e5b56fb24509a506f294d8bd2 diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index 964218135..694559aba 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -117,7 +117,6 @@ L.Control.Sidebar = L.Control.extend({ this._removeChild(parentId); this._currentDeck.child = { - open: true, id: e.id, strId: strId, left: left, @@ -301,7 +300,6 @@ L.Control.Sidebar = L.Control.extend({ $(panelContainer).parent().hide(); this._currentDeck = { - open: true, id: id, strId: strId, left: left, commit e526273a2f8513b82db753169d59b199f7590b4f Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 22:23:56 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: parse dialog dimentions and position once Change-Id: I573db6f81f5bcd98cc0c97507ea49e89e9089769 diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index 021336869..964218135 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -90,15 +90,21 @@ L.Control.Sidebar = L.Control.extend({ e.id = parseInt(e.id); var strId = this._toStrId(e.id); - if (e.action === 'created') { - var width = parseInt(e.size.split(',')[0]); - var height = parseInt(e.size.split(',')[1]); + var width = 0; + var height = 0; + if (e.size) { + width = parseInt(e.size.split(',')[0]); + height = parseInt(e.size.split(',')[1]); + } - if (e.position) { - var left = parseInt(e.position.split(',')[0]); - var top = parseInt(e.position.split(',')[1]); - } + var left = 0; + var top = 0; + if (e.position) { + left = parseInt(e.position.split(',')[0]); + top = parseInt(e.position.split(',')[1]); + } + if (e.action === 'created') { if (e.winType === 'deck') { this._launchSidebar(e.id, left, top, width, height); } else if (e.winType === 'child') { @@ -159,10 +165,6 @@ L.Control.Sidebar = L.Control.extend({ this._sendPaintWindowRect(e.id, rectangle[0], rectangle[1], rectangle[2], rectangle[3]); } } else if (e.action === 'size_changed') { - width = parseInt(e.size.split(',')[0]); - height = parseInt(e.size.split(',')[1]); - left = parseInt(e.position.split(',')[0]); - top = parseInt(e.position.split(',')[1]); this._launchSidebar(e.id, left, top, width, height); } else if (e.action === 'cursor_invalidate') { if (this._isOpen(e.id) && !!e.rectangle) { commit 980bd952a2095ceeab2e448d05943a38ac2945f2 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 21:24:18 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: dialog and sidebar paint functions made similar Change-Id: I699a83468b4a240d05ad48467e931f3932d21373 diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index 0a2aa41c3..021336869 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -442,9 +442,10 @@ L.Control.Sidebar = L.Control.extend({ ctx.drawImage(img, x, y); // If sidebar panel is hidden, show it. - var sidebarContainer = L.DomUtil.get(strId); - if (sidebarContainer) - $(sidebarContainer).parent().show(); + var container = L.DomUtil.get(strId); + if (container) + $(container).parent().show(); + that.focus(parentId); }; img.src = imgData; }, commit e972191a79ba98437b9fe8ffd45a6b50b872f917 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 19:23:37 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: dialog: sidebar: factor out window event handling Change-Id: Idddc405f9c85d0db144aedf5d6b41aa512578ed5 diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index 05abbd056..0a2aa41c3 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -316,6 +316,7 @@ L.Control.Sidebar = L.Control.extend({ this._createDialogCursor(strId); var dlgInput = this._createDialogInput(strId); + this._setupWindowEvents(id, panelCanvas, dlgInput); L.DomEvent.on(panelCanvas, 'resize', function() { this._map._socket.sendMessage('resizewindow ' + id + ' size=' + panelCanvas.width + ',' + panelCanvas.height); @@ -329,8 +330,6 @@ L.Control.Sidebar = L.Control.extend({ } } }, this); - - L.DomEvent.on(panelCanvas, 'contextmenu', L.DomEvent.preventDefault); L.DomEvent.on(panelContainer, 'mouseleave', function() { // Move the mouse off-screen when we leave the sidebar // so we don't leave edge-elements highlighted as if @@ -338,11 +337,18 @@ L.Control.Sidebar = L.Control.extend({ this._map.lastActiveTime = Date.now(); this._postWindowMouseEvent('move', id, -1, -1, 1, 0, 0); }, this); - L.DomEvent.on(panelCanvas, 'mousemove', function(e) { + + // Render window. + this._sendPaintWindowRect(id); + }, + + _setupWindowEvents: function(id, canvas, dlgInput) { + L.DomEvent.on(canvas, 'contextmenu', L.DomEvent.preventDefault); + L.DomEvent.on(canvas, 'mousemove', function(e) { this._map.lastActiveTime = Date.now(); this._postWindowMouseEvent('move', id, e.offsetX, e.offsetY, 1, 0, 0); }, this); - L.DomEvent.on(panelCanvas, 'mousedown mouseup', function(e) { + L.DomEvent.on(canvas, 'mousedown mouseup', function(e) { L.DomEvent.stopPropagation(e); var buttons = 0; buttons |= e.button === this._map['mouse'].JSButtons.left ? this._map['mouse'].LOButtons.left : 0; @@ -367,15 +373,12 @@ L.Control.Sidebar = L.Control.extend({ id), dlgInput); - // keep map active while user is playing with panel + // Keep map active while user is playing with window. this._map.lastActiveTime = Date.now(); }, this); L.DomEvent.on(dlgInput, 'contextmenu', function() { return false; }); - - // Render window. - this._sendPaintWindowRect(id); }, _postWindowCompositionEvent: function(winid, type, text) { commit 49ec8667e0a67936629c0748ff7e9dd5678188b9 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 19:00:52 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: dialog: sidebar: factor out child window event handling Change-Id: I07938d54b504f20f2508be9f8d50e59a3dcc82e8 diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index 982709432..05abbd056 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -506,10 +506,14 @@ L.Control.Sidebar = L.Control.extend({ L.DomUtil.setStyle(floatingCanvas, 'left', left + 'px'); // yes, it's necessary to append 'px' L.DomUtil.setStyle(floatingCanvas, 'top', top + 'px'); - L.DomEvent.on(floatingCanvas, 'contextmenu', L.DomEvent.preventDefault); - // attach events - L.DomEvent.on(floatingCanvas, 'mousedown mouseup', function(e) { + this._setupChildEvents(childId, floatingCanvas); + }, + + _setupChildEvents: function(childId, canvas) { + L.DomEvent.on(canvas, 'contextmenu', L.DomEvent.preventDefault); + + L.DomEvent.on(canvas, 'mousedown mouseup', function(e) { var buttons = 0; buttons |= e.button === this._map['mouse'].JSButtons.left ? this._map['mouse'].LOButtons.left : 0; buttons |= e.button === this._map['mouse'].JSButtons.middle ? this._map['mouse'].LOButtons.middle : 0; @@ -517,10 +521,10 @@ L.Control.Sidebar = L.Control.extend({ var lokEventType = e.type.replace('mouse', 'button'); this._postWindowMouseEvent(lokEventType, childId, e.offsetX, e.offsetY, 1, buttons, 0); }, this); - L.DomEvent.on(floatingCanvas, 'mousemove', function(e) { + L.DomEvent.on(canvas, 'mousemove', function(e) { this._postWindowMouseEvent('move', childId, e.offsetX, e.offsetY, 1, 0, 0); }, this); - L.DomEvent.on(floatingCanvas, 'contextmenu', function() { + L.DomEvent.on(canvas, 'contextmenu', function() { return false; }); } commit 7f066212dc3eed43c885ecf097118c7323619a8e Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 18:52:08 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: rearangle sidebar functions to minimize diff with dialogs Change-Id: Ie0218a6dc03ce64bec3dde8871aa95cc5d3c4e6f diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index e12a956cc..982709432 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -16,6 +16,13 @@ L.Control.Sidebar = L.Control.extend({ return this._currentDeck != null && this._currentDeck.id === id; }, + // If returns non-null, then id is that of a panels and we have a parent (with the returned id). + _getParentId: function(id) { + if (this._isChild(parseInt(id))) + return this._currentDeck.id; + return null; + }, + _isOpen: function(id) { return this._isParent(id) && $('#' + this._toStrId(id)).length > 0; }, @@ -40,13 +47,6 @@ L.Control.Sidebar = L.Control.extend({ return this._isChild(id) && $('#' + this._currentDeck.strId + '-floating').length > 0; }, - // If returns non-null, then id is that of a panels and we have a parent (with the returned id). - _getParentId: function(id) { - if (this._isChild(parseInt(id))) - return this._currentDeck.id; - return null; - }, - _sendPaintWindowRect: function(id, x, y, width, height) { if (!width) width = this._currentDeck.width; commit 4810d53f3f827c3205b388030bd69bdbdf0072cd Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 18:32:16 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: rearangle sidebar functions to minimize diff with dialogs Change-Id: I0be181006dc398f75a5efd3dd89cf39d20402da5 diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index f88265f92..e12a956cc 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -12,6 +12,14 @@ L.Control.Sidebar = L.Control.extend({ map.on('windowpaint', this._onWindowPaint, this); }, + _isParent: function(id) { + return this._currentDeck != null && this._currentDeck.id === id; + }, + + _isOpen: function(id) { + return this._isParent(id) && $('#' + this._toStrId(id)).length > 0; + }, + // Converts an string Id to its raw integer Id. _toIntId: function(id) { if (typeof(id) === 'string') @@ -24,14 +32,6 @@ L.Control.Sidebar = L.Control.extend({ return this.panelIdPrefix + id; }, - _isParent: function(id) { - return this._currentDeck != null && this._currentDeck.id === id; - }, - - _isOpen: function(id) { - return this._isParent(id) && $('#' + this._toStrId(id)).length > 0; - }, - _isChild: function(id) { return this._currentDeck != null && this._currentDeck.child != null && this._currentDeck.child.id === id; }, commit 1f06050fdb56a106adb743430a9a89d0ce2008b2 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 16:57:45 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: minor cleanup of dialog and sidebar Change-Id: I59954c7478f6df62082d35b9d17203ab44f51b9a diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index 00157e155..f88265f92 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -5,23 +5,11 @@ /* global $ */ L.Control.Sidebar = L.Control.extend({ - options: { - autoUpdate: true - }, - panelIdPrefix: 'sidebarpanel-', onAdd: function (map) { map.on('window', this._onWindowMsg, this); map.on('windowpaint', this._onWindowPaint, this); - map.on('docloaded', this._docLoaded, this); - }, - - _docLoaded: function(e) { - if (!e.status) { - // $('.lokdialog_container').remove(); - // $('.lokdialogchild-canvas').remove(); - } }, // Converts an string Id to its raw integer Id. @@ -287,7 +275,6 @@ L.Control.Sidebar = L.Control.extend({ } var panelContainer = L.DomUtil.create('div', 'panel', L.DomUtil.get('sidebar-panel')); - // var panelContainer = L.DomUtil.create('div', 'panel', L.DomUtil.get('slide-sorter')); L.DomUtil.setStyle(panelContainer, 'padding', '0px'); L.DomUtil.setStyle(panelContainer, 'margin', '0px'); L.DomUtil.setStyle(panelContainer, 'position', 'relative'); @@ -498,7 +485,7 @@ L.Control.Sidebar = L.Control.extend({ _onPanelChildClose: function(parentId) { this._removeChild(parentId); - // $('#' + parentId + '-floating').remove(); + // remove any extra height allocated for the parent container var canvasHeight = document.getElementById(parentId + '-canvas').height; $('#' + parentId).height(canvasHeight + 'px'); @@ -510,7 +497,6 @@ L.Control.Sidebar = L.Control.extend({ var floatingCanvas = L.DomUtil.get(parentId + '-floating'); floatingCanvas.width = 0; floatingCanvas.height = 0; - // $('#' + parentId + '-floating').remove(); }, _createChild: function(childId, parentId, top, left) { commit c361cbd427050233086f0c251055dd174d813942 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 16:31:09 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: high-dpi support for sidebars Had to comment-out setting the canvas width/height via the styles, which is messing up the cursor (in normal dpi mode at least). Specifically, clicking on an editbox sometimes doesn't insert the cursor, depending on which control was in focus prior to clicking on said editbox. Reproducible via the Transitions sidebar: click on the Variant combobox (Vertical), after it opens the list close it and then click on the Duration editbox. Expected: Cursor blinks where the mouse-click was. Actual: No cursor at all nor any sign of focus change from the Variant combobox (it remain in focus). Change-Id: I2879651dfcab5d8d2773b436279c9076572c3d38 diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index 0ed934dfd..00157e155 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -73,7 +73,10 @@ L.Control.Sidebar = L.Control.extend({ if (!y) y = 0; - this._sendPaintWindow(id, [x, y, width, height].join(',')); + // pre-multiplied by the scale factor + var dpiscale = L.getDpiScaleFactor(); + var rect = [x * dpiscale, y * dpiscale, width * dpiscale, height * dpiscale].join(','); + this._sendPaintWindow(id, rect); }, _sendPaintWindow: function(id, rectangle) { @@ -84,7 +87,9 @@ L.Control.Sidebar = L.Control.extend({ if (!rectangle) return; // Don't request rendering an empty area. - this._map._socket.sendMessage('paintwindow ' + id + (rectangle ? ' rectangle=' + rectangle : '')); + var dpiscale = L.getDpiScaleFactor(); + console.log('_sendPaintWindow: rectangle: ' + rectangle + ', dpiscale: ' + dpiscale); + this._map._socket.sendMessage('paintwindow ' + id + ' rectangle=' + rectangle + ' dpiscale=' + dpiscale); }, _isRectangleValid: function(rect) { @@ -250,6 +255,16 @@ L.Control.Sidebar = L.Control.extend({ this._currentDeck.input.focus(); }, + _setCanvasWidthHeight: function(canvas, width, height) { + // FIXME: Setting the style width/height is messing up the cursor. + // L.DomUtil.setStyle(canvas, 'width', width + 'px'); + // L.DomUtil.setStyle(canvas, 'height', height + 'px'); + + var scale = L.getDpiScaleFactor(); + canvas.width = width * scale; + canvas.height = height * scale; + }, + _launchSidebar: function(id, left, top, width, height) { if (!left) @@ -283,8 +298,7 @@ L.Control.Sidebar = L.Control.extend({ // Create the panel canvas. var panelCanvas = L.DomUtil.create('canvas', 'panel_canvas', panelContainer); L.DomUtil.setStyle(panelCanvas, 'position', 'absolute'); - panelCanvas.width = width; - panelCanvas.height = height; + this._setCanvasWidthHeight(panelCanvas, width, height); panelCanvas.id = strId + '-canvas'; // Create the child canvas now, to make it on top of the main panel canvas. @@ -294,9 +308,6 @@ L.Control.Sidebar = L.Control.extend({ floatingCanvas.height = 0; floatingCanvas.id = strId + '-floating'; - - L.DomEvent.on(panelCanvas, 'contextmenu', L.DomEvent.preventDefault); - // Don't show the sidebar until we get the contents. $(panelContainer).parent().hide(); @@ -465,10 +476,8 @@ L.Control.Sidebar = L.Control.extend({ if (!canvas) return; // no floating window to paint to - if (width !== canvas.width) - canvas.width = width; - if (height !== canvas.height) - canvas.height = height; + this._setCanvasWidthHeight(canvas, width, height); + var ctx = canvas.getContext('2d'); img.onload = function() { ctx.drawImage(img, 0, 0); commit fc70ae404a37ca2586e1a29efb9c10328f53aebb Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 15:18:45 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: dialogs: don't request rendering empty areas Change-Id: Iebfd3308e300c8d2ce3e9e86210c48f039769092 diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index 1521d3b33..0ed934dfd 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -62,21 +62,27 @@ L.Control.Sidebar = L.Control.extend({ _sendPaintWindowRect: function(id, x, y, width, height) { if (!width) width = this._currentDeck.width; + if (width <= 0) + return; // Don't request rendering an empty area. if (!height) height = this._currentDeck.height; + if (height <= 0) + return; // Don't request rendering an empty area. if (!x) x = 0; if (!y) y = 0; - // Don't request empty area rendering. - if (width > 0 && height > 0) - this._sendPaintWindow(id, [x, y, width, height].join(',')); + this._sendPaintWindow(id, [x, y, width, height].join(',')); }, _sendPaintWindow: function(id, rectangle) { - if (rectangle) - rectangle = rectangle.replace(/ /g, ''); + if (!rectangle) + return; // Don't request rendering an empty area. + + rectangle = rectangle.replace(/ /g, ''); + if (!rectangle) + return; // Don't request rendering an empty area. this._map._socket.sendMessage('paintwindow ' + id + (rectangle ? ' rectangle=' + rectangle : '')); }, commit 154b7ba2be01e6211f2f35b18ba7a5a6540028ab Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 15:20:53 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: rearangle sidebar functions to minimize diff with dialogs Change-Id: I7e786458f01ce3f7a243d0214b23de7680d460da diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index 10a90cd58..1521d3b33 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -59,13 +59,6 @@ L.Control.Sidebar = L.Control.extend({ return null; }, - _sendPaintWindow: function(id, rectangle) { - if (rectangle) - rectangle = rectangle.replace(/ /g, ''); - - this._map._socket.sendMessage('paintwindow ' + id + (rectangle ? ' rectangle=' + rectangle : '')); - }, - _sendPaintWindowRect: function(id, x, y, width, height) { if (!width) width = this._currentDeck.width; @@ -81,6 +74,13 @@ L.Control.Sidebar = L.Control.extend({ this._sendPaintWindow(id, [x, y, width, height].join(',')); }, + _sendPaintWindow: function(id, rectangle) { + if (rectangle) + rectangle = rectangle.replace(/ /g, ''); + + this._map._socket.sendMessage('paintwindow ' + id + (rectangle ? ' rectangle=' + rectangle : '')); + }, + _isRectangleValid: function(rect) { rect = rect.split(','); return (parseInt(rect[0]) >= 0 && parseInt(rect[1]) >= 0 && commit 83ef6ed3516a1891671613b2b8a410286c566c77 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 15:06:07 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: sidebar sendPaintWindowStr -> sendPaintWindow Change-Id: Ieb2fda911ae36cec8f1f50e7ce46607202bb3250 diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index b3e6a7e36..10a90cd58 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -59,7 +59,7 @@ L.Control.Sidebar = L.Control.extend({ return null; }, - _sendPaintWindowStr: function(id, rectangle) { + _sendPaintWindow: function(id, rectangle) { if (rectangle) rectangle = rectangle.replace(/ /g, ''); @@ -78,7 +78,7 @@ L.Control.Sidebar = L.Control.extend({ // Don't request empty area rendering. if (width > 0 && height > 0) - this._sendPaintWindowStr(id, [x, y, width, height].join(',')); + this._sendPaintWindow(id, [x, y, width, height].join(',')); }, _isRectangleValid: function(rect) { @@ -144,12 +144,12 @@ L.Control.Sidebar = L.Control.extend({ else rectangle = '0,0,' + this._currentDeck.width + ',' + this._currentDeck.height; - this._sendPaintWindowStr(e.id, rectangle); + this._sendPaintWindow(e.id, rectangle); } else if (this._isChild(e.id)) { // Child windows are given relative coordinates. - this._sendPaintWindowStr(e.id, rectangle); + this._sendPaintWindow(e.id, rectangle); } else { commit 988c1db558bd80960b6a6be7b7bb0d6541769af7 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 15:05:50 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: sidebar sendPaintWindow -> sendPaintWindowRect Change-Id: I5a751b6aa5e290d5f1292c70e52bef954f99ff57 diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index aa2d23022..b3e6a7e36 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -66,7 +66,7 @@ L.Control.Sidebar = L.Control.extend({ this._map._socket.sendMessage('paintwindow ' + id + (rectangle ? ' rectangle=' + rectangle : '')); }, - _sendPaintWindow: function(id, x, y, width, height) { + _sendPaintWindowRect: function(id, x, y, width, height) { if (!width) width = this._currentDeck.width; if (!height) @@ -123,7 +123,7 @@ L.Control.Sidebar = L.Control.extend({ }; this._createChild(e.id, parentId, top, left); - this._sendPaintWindow(e.id, 0, 0, width, height); + this._sendPaintWindowRect(e.id, 0, 0, width, height); } else { // We only handle sidebar panels here (see Control.LokDialog.js) @@ -157,7 +157,7 @@ L.Control.Sidebar = L.Control.extend({ rectangle = rectangle.split(','); rectangle[0] = parseInt(rectangle[0]) - this._currentDeck.left; rectangle[1] = parseInt(rectangle[1]) - this._currentDeck.top; - this._sendPaintWindow(e.id, rectangle[0], rectangle[1], rectangle[2], rectangle[3]); + this._sendPaintWindowRect(e.id, rectangle[0], rectangle[1], rectangle[2], rectangle[3]); } } else if (e.action === 'size_changed') { width = parseInt(e.size.split(',')[0]); @@ -261,7 +261,7 @@ L.Control.Sidebar = L.Control.extend({ } // Render window. - this._sendPaintWindow(id); + this._sendPaintWindowRect(id); return; } @@ -371,7 +371,7 @@ L.Control.Sidebar = L.Control.extend({ }); // Render window. - this._sendPaintWindow(id); + this._sendPaintWindowRect(id); }, _postWindowCompositionEvent: function(winid, type, text) { commit 00af87849c497030d01480cdc5ec703281fbed71 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sat Nov 17 12:20:03 2018 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Fri May 3 13:54:13 2019 +0200 leaflet: dialog and sidebar strDlgId -> strId Change-Id: Iae1cb02da3162225b7670c1102d45cc7afcc3119 diff --git a/loleaflet/src/control/Control.Sidebar.js b/loleaflet/src/control/Control.Sidebar.js index da5e9a84b..aa2d23022 100644 --- a/loleaflet/src/control/Control.Sidebar.js +++ b/loleaflet/src/control/Control.Sidebar.js @@ -193,8 +193,8 @@ L.Control.Sidebar = L.Control.extend({ }, _updateDialogCursor: function(dlgId, x, y, height) { - var strDlgId = this._toStrId(dlgId); - var dialogCursor = L.DomUtil.get(strDlgId + '-cursor'); + var strId = this._toStrId(dlgId); + var dialogCursor = L.DomUtil.get(strId + '-cursor'); L.DomUtil.setStyle(dialogCursor, 'height', height + 'px'); ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits