summaryrefslogtreecommitdiff
path: root/src/renderers/pieWindow.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderers/pieWindow.vala')
-rw-r--r--src/renderers/pieWindow.vala89
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;
+ });
+ }
}
}