[evolution] Ensure that the width of the mail sidebar is not too wide
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Ensure that the width of the mail sidebar is not too wide
- Date: Thu, 25 Mar 2010 21:40:58 +0000 (UTC)
commit 1457c12bb1aae829a67a754a3785a3654ed717c4
Author: Federico Mena Quintero <federico novell com>
Date: Wed Mar 24 13:23:10 2010 -0600
Ensure that the width of the mail sidebar is not too wide
We just clamp this to one fourth of the screen's width; we do
some voodoo to guess the monitor we are in.
Signed-off-by: Federico Mena Quintero <federico novell com>
modules/mail/e-mail-shell-sidebar.c | 49 ++++++++++++++++++++++++++++++++++-
1 files changed, 48 insertions(+), 1 deletions(-)
---
diff --git a/modules/mail/e-mail-shell-sidebar.c b/modules/mail/e-mail-shell-sidebar.c
index 1b55f05..42376ca 100644
--- a/modules/mail/e-mail-shell-sidebar.c
+++ b/modules/mail/e-mail-shell-sidebar.c
@@ -178,6 +178,44 @@ mail_shell_sidebar_constructed (GObject *object)
shell_sidebar);
}
+static int
+guess_screen_width (EMailShellSidebar *sidebar)
+{
+ GtkWidget *widget;
+ GdkScreen *screen;
+ int screen_width;
+
+ widget = GTK_WIDGET (sidebar);
+
+ screen_width = 0;
+
+ screen = gtk_widget_get_screen (widget);
+ if (screen) {
+ GtkWidget *toplevel;
+ int monitor;
+ GdkRectangle rect;
+
+ toplevel = gtk_widget_get_toplevel (widget);
+ if (toplevel && GTK_WIDGET_REALIZED (toplevel))
+ monitor = gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window (toplevel));
+ else {
+ /* We don't know in which monitor the window manager
+ * will put us. So we will just use the geometry of the
+ * first monitor.
+ */
+ monitor = 0;
+ }
+
+ gdk_screen_get_monitor_geometry (screen, monitor, &rect);
+ screen_width = rect.width;
+ }
+
+ if (screen_width == 0)
+ screen_width = 1024;
+
+ return screen_width;
+}
+
static void
mail_shell_sidebar_size_request (GtkWidget *widget, GtkRequisition *requisition)
{
@@ -193,10 +231,15 @@ mail_shell_sidebar_size_request (GtkWidget *widget, GtkRequisition *requisition)
* will get merged soon and then we can remove this crap.
*/
+ EMailShellSidebar *sidebar;
PangoLayout *layout;
PangoRectangle ink_rect;
GtkStyle *style;
int border;
+ int sidebar_width;
+ int screen_width;
+
+ sidebar = E_MAIL_SHELL_SIDEBAR (widget);
GTK_WIDGET_CLASS (parent_class)->size_request (widget, requisition);
@@ -207,8 +250,12 @@ mail_shell_sidebar_size_request (GtkWidget *widget, GtkRequisition *requisition)
style = gtk_widget_get_style (widget);
+ screen_width = guess_screen_width (sidebar);
+
border = 2 * style->xthickness + 4; /* Thickness of frame shadow plus some slack for padding */
- requisition->width = MAX (requisition->width, ink_rect.width + border);
+ sidebar_width = ink_rect.width + border;
+ sidebar_width = MIN (sidebar_width, screen_width / 4);
+ requisition->width = MAX (requisition->width, sidebar_width);
}
static guint32
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]