diff --git a/src/controls.js b/src/controls.js index 377f830a..9bdfb82a 100644 --- a/src/controls.js +++ b/src/controls.js @@ -28,6 +28,8 @@ class ClapperControls extends Gtk.Box this.currentPosition = 0; this.currentDuration = 0; this.isPositionDragging = false; + + this.isMobileMonitor = false; this.isMobile = false; this.showHours = false; @@ -507,10 +509,9 @@ class ClapperControls extends Gtk.Box : Misc.getCubicValue(settings.get_double('volume-last')); this.volumeScale.set_value(initialVolume); - player.widget.connect('resize', this._onPlayerResize.bind(this)); } - _onPlayerResize(widget, width, height) + _onPlayerResize(width, height) { const isMobile = (width < 560); if(this.isMobile === isMobile) diff --git a/src/widget.js b/src/widget.js index 8224066a..99e297a7 100644 --- a/src/widget.js +++ b/src/widget.js @@ -22,6 +22,7 @@ class ClapperWidget extends Gtk.Grid this.windowSize = JSON.parse(settings.get_string('window-size')); this.floatSize = JSON.parse(settings.get_string('float-size')); + this.layoutWidth = 0; this.fullscreenMode = false; this.floatingMode = false; @@ -574,6 +575,15 @@ class ClapperWidget extends Gtk.Grid debug(`interface in fullscreen mode: ${isFullscreen}`); } + _onLayoutUpdate(surface, width, height) + { + if(width === this.layoutWidth) + return; + + this.layoutWidth = width; + this.controls._onPlayerResize(width, height); + } + _onLeave(controller) { if( @@ -596,13 +606,21 @@ class ClapperWidget extends Gtk.Grid const geometry = monitor.geometry; const size = this.windowSize; - debug(`detected monitor resolution: ${geometry.width}x${geometry.height}`); + debug(`monitor application-pixels: ${geometry.width}x${geometry.height}`); if(geometry.width >= size[0] && geometry.height >= size[1]) { root.set_default_size(size[0], size[1]); debug(`restored window size: ${size[0]}x${size[1]}`); } + const monitorWidth = Math.max(geometry.width, geometry.height); + + if(monitorWidth < 1280) { + this.controls.isMobileMonitor = true; + debug('mobile monitor detected'); + } + surface.connect('notify::state', this._onStateNotify.bind(this)); + surface.connect('layout', this._onLayoutUpdate.bind(this)); } });