summaryrefslogtreecommitdiff
path: root/caribou/antler
diff options
context:
space:
mode:
authorEitan Isaacson <eitan@monotonous.org>2011-05-04 10:47:06 -0700
committerEitan Isaacson <eitan@monotonous.org>2011-05-05 15:30:42 -0400
commit07db55793dda1ddd5d60a6a6443eb15ab47f87a9 (patch)
tree999c2e095e74f1f99556e4d39f7a73f62b8c5ef8 /caribou/antler
parent71dc2f20ff99a9c36493769b395a50973f8cc254 (diff)
downloadcaribou-07db55793dda1ddd5d60a6a6443eb15ab47f87a9.tar.gz
Make proximity opacity work with gsettings.
Diffstat (limited to 'caribou/antler')
-rw-r--r--caribou/antler/antler_settings.py11
-rw-r--r--caribou/antler/window.py61
2 files changed, 54 insertions, 18 deletions
diff --git a/caribou/antler/antler_settings.py b/caribou/antler/antler_settings.py
index ba13154..703a7fd 100644
--- a/caribou/antler/antler_settings.py
+++ b/caribou/antler/antler_settings.py
@@ -6,7 +6,16 @@ AntlerSettings = SettingsTopGroup(
[SettingsGroup("antler", _("Antler"), [
SettingsGroup("appearance", _("Appearance"), [
BooleanSetting("use_system", _("Use System Theme"),
- True, _("Use System Theme"))
+ True, _("Use System Theme")),
+ FloatSetting("min_alpha", _("Minimum Alpha"),
+ 0.2, _("Minimal opacity of keyboard"),
+ min=0.0, max=1.0),
+ FloatSetting("max_alpha", _("Maximum Alpha"),
+ 1.0, _("Maximal opacity of keyboard"),
+ min=0.0, max=1.0),
+ IntegerSetting("max_distance", _("Maximum Distance"),
+ 100, _("Maximum distance when keyboard is hidden"),
+ min=0, max=1024)
])
])
])
diff --git a/caribou/antler/window.py b/caribou/antler/window.py
index 9ad82f2..78f7b6a 100644
--- a/caribou/antler/window.py
+++ b/caribou/antler/window.py
@@ -23,6 +23,8 @@
from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import Clutter
+from antler_settings import AntlerSettings
+from math import sqrt
import os
import sys
import gobject
@@ -30,24 +32,47 @@ import gobject
Clutter.init("antler")
class ProximityWindowBase(object):
- def __init__(self, min_alpha=1.0, max_alpha=1.0, max_distance=100):
+ def __init__(self):
if self.__class__ == ProximityWindowBase:
raise TypeError, \
"ProximityWindowBase is an abstract class, " \
"must be subclassed with a Gtk.Window"
- self.connect('map-event', self.__onmapped)
- self.max_distance = max_distance
- if max_alpha < min_alpha:
- raise ValueError, "min_alpha can't be larger than max_alpha"
- self.min_alpha = min_alpha
+
+ self._poll_tid = 0
+ settings = AntlerSettings()
+ self.max_distance = settings.max_distance.value
+ settings.max_distance.connect("value-changed", self._on_max_dist_changed)
+ min_alpha = settings.min_alpha
+ max_alpha = settings.max_alpha
+ min_alpha.connect("value-changed",
+ self._on_min_alpha_changed, max_alpha)
+ max_alpha.connect("value-changed",
+ self._on_max_alpha_changed, min_alpha)
+ self.connect('map-event', self._onmapped, settings)
+
+ def _on_max_dist_changed(self, setting, value):
+ self.max_distance = value
+
+ def _set_min_max_alpha(self, min_alpha, max_alpha):
self.max_alpha = max_alpha
+ self.min_alpha = min_alpha
+ if self.max_alpha != self.min_alpha:
+ if self._poll_tid == 0:
+ self._poll_tid = gobject.timeout_add(80, self._proximity_check)
+ elif self._poll_tid != 0:
+ gobject.source_remove(self._poll_tid)
- def __onmapped(self, obj, event):
+ def _onmapped(self, obj, event, settings):
if self.is_composited():
- self.set_opacity(self.max_alpha)
- if self.max_alpha != self.min_alpha:
- # Don't waste CPU if the max and min are equal.
- glib.timeout_add(80, self._proximity_check)
+ self._set_min_max_alpha(settings.min_alpha.value,
+ settings.max_alpha.value)
+ self._proximity_check()
+
+ def _on_min_alpha_changed(self, setting, value, max_alpha):
+ self._set_min_max_alpha(value, max_alpha.value)
+
+ def _on_max_alpha_changed(self, setting, value, min_alpha):
+ self._set_min_max_alpha(max_alpha.value, value)
def _proximity_check(self):
px, py = self.get_pointer()
@@ -62,7 +87,12 @@ class ProximityWindowBase(object):
opacity += self.min_alpha
self.set_opacity(opacity)
- return self.props.visible
+
+ if not self.props.visible:
+ self._poll_tid = 0
+ return False
+
+ return True
def _get_distance_to_bbox(self, px, py, bw, bh):
if px < 0:
@@ -73,7 +103,7 @@ class ProximityWindowBase(object):
x_distance = 0.0
if py < 0:
- y_distance = float(abs(px))
+ y_distance = float(abs(py))
elif py > bh:
y_distance = float(py - bh)
else:
@@ -102,10 +132,7 @@ class AntlerWindow(Gtk.Window, Clutter.Animatable, ProximityWindowBase):
min_alpha=1.0, max_alpha=1.0, max_distance=100,
animation_mode=Clutter.AnimationMode.EASE_IN_QUAD):
gobject.GObject.__init__(self, type=Gtk.WindowType.POPUP)
- ProximityWindowBase.__init__(self,
- min_alpha=min_alpha,
- max_alpha=max_alpha,
- max_distance=max_distance)
+ ProximityWindowBase.__init__(self)
self.set_name("AntlerWindow")