diff options
author | Jörg Frings-Fürst <debian@jff.email> | 2018-12-21 11:24:19 +0100 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff.email> | 2018-12-21 11:24:19 +0100 |
commit | 3a7ff53d6e4cfdc053f4fe1937aa1ba9378a043e (patch) | |
tree | 2f3cfbd571cc2401b03d9c65c1289f54b3e23988 /src/renderers/pieWindow.vala | |
parent | 5f093bc9519f8c29e4400819a58cc268c2e93e73 (diff) | |
parent | 85d7cf6cf5adb4ce515e03719566e1f494dfc0aa (diff) |
Merge branch 'feature/upstream' into develop
Diffstat (limited to 'src/renderers/pieWindow.vala')
-rw-r--r-- | src/renderers/pieWindow.vala | 89 |
1 files changed, 51 insertions, 38 deletions
diff --git a/src/renderers/pieWindow.vala b/src/renderers/pieWindow.vala index a5142df..6d258d8 100644 --- a/src/renderers/pieWindow.vala +++ b/src/renderers/pieWindow.vala @@ -1,18 +1,24 @@ ///////////////////////////////////////////////////////////////////////// -// Copyright (c) 2011-2017 by Simon Schneegans +// Copyright 2011-2018 Simon Schneegans // -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or (at -// your option) any later version. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ///////////////////////////////////////////////////////////////////////// using GLib.Math; @@ -131,16 +137,6 @@ public class PieWindow : Gtk.Window { this.has_compositing = true; } - //add_events() call was removed because it causes that gnome-pie sometimes enter - //and infinte loop while processing some mouse-motion events. - //(this was seen in Ubuntu 14.04.2 64/32-bits -Glib 2.19- and in MATE 14.04.2) - // set up event filter - // this.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | - // Gdk.EventMask.KEY_RELEASE_MASK | - // Gdk.EventMask.KEY_PRESS_MASK | - // Gdk.EventMask.POINTER_MOTION_MASK | - // Gdk.EventMask.SCROLL_MASK ); - // activate on left click this.button_release_event.connect ((e) => { if (e.button == 1 || PieManager.get_is_turbo(this.renderer.id)) this.activate_slice(e.time); @@ -185,6 +181,11 @@ public class PieWindow : Gtk.Window { PieManager.bindings.disconnect(connection_id); }); + this.focus_out_event.connect((w, e) => { + this.cancel(); + return true; + }); + // notify the renderer of mouse move events this.motion_notify_event.connect((e) => { this.renderer.on_mouse_move(); @@ -258,8 +259,8 @@ public class PieWindow : Gtk.Window { int monitor_y = screen.get_height(); #endif - //allow some window movement from the screen borders - //(some panels moves the window after it was realized) + // allow some window movement from the screen borders + // (some panels moves the window after it was realized) int dx = this.panel_sz - this.back_x; if (dx > 0) this.back_sz_x += dx; @@ -278,13 +279,13 @@ public class PieWindow : Gtk.Window { this.back_y -= dy; } - //also tolerate some mouse movement + // also tolerate some mouse movement this.back_x -= this.mouse_move; this.back_sz_x += this.mouse_move*2; this.back_y -= this.mouse_move; this.back_sz_y += this.mouse_move*2; - //make sure we don't go outside the screen + // make sure we don't go outside the screen if (this.back_x < 0) { this.back_sz_x += this.back_x; this.back_x = 0; @@ -332,7 +333,7 @@ public class PieWindow : Gtk.Window { ///////////////////////////////////////////////////////////////////// public void get_center_pos(out int out_x, out int out_y) { - int x=0, y=0; //width=0, height=0; + int x = 0, y = 0; this.get_position(out x, out y); out_x = x + renderer.center_x; out_y = y + renderer.center_y; @@ -455,21 +456,33 @@ public class PieWindow : Gtk.Window { private void activate_slice(uint32 time_stamp) { if (!this.closing) { - this.closing = true; - this.on_closing(); - FocusGrabber.ungrab(); + + bool should_close = true; + + // do not close when ctrl or shift is held down + if ((Key.get_modifiers() & + (Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK)) > 0 && + !PieManager.get_is_turbo(this.renderer.id)) { + should_close = false; + } GLib.Timeout.add(10, () => { - this.renderer.activate(time_stamp); + this.renderer.activate(time_stamp, should_close); return false; }); - GLib.Timeout.add((uint)(Config.global.theme.fade_out_time*1000), () => { - this.closed = true; - this.on_closed(); - this.destroy(); - return false; - }); + if (should_close) { + this.closing = true; + this.on_closing(); + FocusGrabber.ungrab(); + + GLib.Timeout.add((uint)(Config.global.theme.fade_out_time*1000), () => { + this.closed = true; + this.on_closed(); + this.destroy(); + return false; + }); + } } } |