diff --git a/draw.js b/draw.js index a3c780b..f48b6c5 100644 --- a/draw.js +++ b/draw.js @@ -326,6 +326,7 @@ var DrawingArea = new Lang.Class({ this._updateCursorTimeout(); this.textHasCursor = true; this._redisplay(); + this.updatePointerCursor(); return; } @@ -334,6 +335,7 @@ var DrawingArea = new Lang.Class({ this.currentElement = null; this._redisplay(); + this.updatePointerCursor(); }, _updateDrawing: function(x, y, controlPressed) { @@ -349,7 +351,9 @@ var DrawingArea = new Lang.Class({ this.currentElement.transformLine(x, y); else this.currentElement.points[1] = [x, y]; + this._redisplay(); + this.updatePointerCursor(controlPressed); }, _stopWriting: function() { @@ -360,6 +364,20 @@ var DrawingArea = new Lang.Class({ this._redisplay(); }, + setPointerCursor: function(pointerCursorName) { + if (!this.currentPointerCursorName || this.currentPointerCursorName != pointerCursorName) { + this.currentPointerCursorName = pointerCursorName; + ExtensionJs.setCursor(pointerCursorName); + } + }, + + updatePointerCursor: function(controlPressed) { + if (!this.currentElement || (this.currentElement.shape == Shapes.TEXT && this.currentElement.state == TextState.WRITING)) + this.setPointerCursor(this.currentShape == Shapes.NONE ? 'POINTING_HAND' : 'CROSSHAIR'); + else if (this.currentElement.shape != Shapes.NONE && controlPressed) + this.setPointerCursor('MOVE_OR_RESIZE_WINDOW'); + }, + _stopCursorTimeout: function() { if (this.cursorTimeoutId) { Mainloop.source_remove(this.cursorTimeoutId); @@ -456,6 +474,7 @@ var DrawingArea = new Lang.Class({ selectShape: function(shape) { this.currentShape = shape; this.emitter.emit('show-osd', _(ShapeNames[shape]), null); + this.updatePointerCursor(); }, toggleFill: function() { @@ -1047,9 +1066,13 @@ var DrawingMenu = new Lang.Class({ }, _onMenuOpenStateChanged: function(menu, open) { - if (!open) + if (open) { + this.area.setPointerCursor('DEFAULT'); + } else { + this.area.updatePointerCursor(); // actionMode has changed, set previous actionMode in order to keep internal shortcuts working Main.actionMode = ExtensionJs.DRAWING_ACTION_MODE | Shell.ActionMode.NORMAL; + } }, popup: function() { diff --git a/extension.js b/extension.js index 325f5f3..f84769f 100644 --- a/extension.js +++ b/extension.js @@ -279,11 +279,7 @@ var AreaManager = new Lang.Class({ if (!this.settings.get_boolean("drawing-on-desktop")) activeContainer.hide(); - // check display or screen (API changes) - if (global.display.set_cursor) - global.display.set_cursor(Meta.Cursor.DEFAULT); - else if (global.screen && global.screen.set_cursor) - global.screen.set_cursor(Meta.Cursor.DEFAULT); + setCursor('DEFAULT'); if (!this.osdDisabled) Main.osdWindowManager.show(activeIndex, this.leaveGicon, _("Leaving drawing mode"), null); } else { @@ -302,12 +298,7 @@ var AreaManager = new Lang.Class({ this.activeArea.reactive = true; this.activeArea.enterDrawingMode(); - // check display or screen (API changes) - if (global.display.set_cursor) - global.display.set_cursor(Meta.Cursor.POINTING_HAND); - else if (global.screen && global.screen.set_cursor) - global.screen.set_cursor(Meta.Cursor.POINTING_HAND); - + setCursor('POINTING_HAND'); this.osdDisabled = this.settings.get_boolean('osd-disabled'); if (!this.osdDisabled) { // increase OSD display time @@ -414,4 +405,12 @@ var DrawingIndicator = new Lang.Class({ } }); +function setCursor(cursorName) { + // check display or screen (API changes) + if (global.display.set_cursor) + global.display.set_cursor(Meta.Cursor[cursorName]); + else if (global.screen && global.screen.set_cursor) + global.screen.set_cursor(Meta.Cursor[cursorName]); +} +