[gnome-shell] Constrain tooltips to monitors
- From: Owen Taylor <otaylor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] Constrain tooltips to monitors
- Date: Tue, 22 Mar 2011 16:44:44 +0000 (UTC)
commit 80eb37ef60ea86f98e32cea79f1c9d063c6dbe0b
Author: Owen W. Taylor <otaylor fishsoup net>
Date: Tue Mar 22 11:56:24 2011 -0400
Constrain tooltips to monitors
Use st_tooltip_set_constrain_func() to set a function that constrains
tooltips to be on the same monitor as the original tip area.
https://bugzilla.gnome.org/show_bug.cgi?id=645547
src/main.c | 41 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 41 insertions(+), 0 deletions(-)
---
diff --git a/src/main.c b/src/main.c
index 029acb8..393e1b0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -108,6 +108,45 @@ shell_dbus_init (void)
g_object_unref (bus);
}
+static void
+constrain_tooltip (StTooltip *tooltip,
+ const ClutterGeometry *geometry,
+ ClutterGeometry *adjusted_geometry,
+ gpointer data)
+{
+ const ClutterGeometry *tip_area = st_tooltip_get_tip_area (tooltip);
+ ShellGlobal *global = shell_global_get ();
+ MetaScreen *screen = shell_global_get_screen (global);
+ int n_monitors = meta_screen_get_n_monitors (screen);
+ int i;
+
+ *adjusted_geometry = *geometry;
+
+ /* A point that determines what screen we'll constrain to */
+ int x = tip_area->x + tip_area->width / 2;
+ int y = tip_area->y + tip_area->height / 2;
+
+ for (i = 0; i < n_monitors; i++)
+ {
+ MetaRectangle rect;
+ meta_screen_get_monitor_geometry (screen, i, &rect);
+ if (x >= rect.x && x < rect.x + rect.width &&
+ y >= rect.y && y < rect.y + rect.height)
+ {
+ if (adjusted_geometry->x + adjusted_geometry->width > rect.x + rect.width)
+ adjusted_geometry->x = rect.x + rect.width - adjusted_geometry->width;
+ if (adjusted_geometry->x < rect.x)
+ adjusted_geometry->x = rect.x;
+
+ if (adjusted_geometry->y + adjusted_geometry->height > rect.y + rect.height)
+ adjusted_geometry->y = rect.y + rect.height - adjusted_geometry->height;
+ if (adjusted_geometry->y < rect.y)
+ adjusted_geometry->y = rect.y;
+
+ return;
+ }
+ }
+}
static void
update_font_options (GtkSettings *settings)
@@ -139,6 +178,8 @@ update_font_options (GtkSettings *settings)
else
st_theme_context_set_default_resolution (context);
+ st_tooltip_set_constrain_func (stage, constrain_tooltip, NULL, NULL);
+
/* Clutter (as of 0.9) passes comprehensively wrong font options
* override whatever set_font_flags() did above.
*
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]