diff options
author | Milan Crha <mcrha@redhat.com> | 2012-10-30 05:53:15 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2012-10-30 05:53:15 +0800 |
commit | e1807b3155ee48635387efd0b2afd2f98f3b48b7 (patch) | |
tree | 48361ae9012f67a8710dd5006af855b0c01bc768 /addressbook | |
parent | 354794e33714b149635538913a7ac7251a18e7dd (diff) | |
download | gsoc2013-evolution-e1807b3155ee48635387efd0b2afd2f98f3b48b7.tar.gz gsoc2013-evolution-e1807b3155ee48635387efd0b2afd2f98f3b48b7.tar.zst gsoc2013-evolution-e1807b3155ee48635387efd0b2afd2f98f3b48b7.zip |
Bug #317153 - Contact editor too large for small screens
Diffstat (limited to 'addressbook')
-rw-r--r-- | addressbook/gui/contact-editor/contact-editor.ui | 28 | ||||
-rw-r--r-- | addressbook/gui/contact-editor/e-contact-editor.c | 53 |
2 files changed, 70 insertions, 11 deletions
diff --git a/addressbook/gui/contact-editor/contact-editor.ui b/addressbook/gui/contact-editor/contact-editor.ui index 3f5b1f6633..939b7c6519 100644 --- a/addressbook/gui/contact-editor/contact-editor.ui +++ b/addressbook/gui/contact-editor/contact-editor.ui @@ -82,12 +82,15 @@ <object class="GtkScrolledWindow" id="scrolledwindow1"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> + <property name="hscrollbar_policy">automatic</property> <property name="vscrollbar_policy">automatic</property> + <property name="min-content-width">320</property> + <property name="min-content-height">240</property> <child> <object class="GtkViewport" id="viewport1"> <property name="visible">True</property> <property name="resize_mode">queue</property> + <property name="shadow-type">none</property> <child> <object class="GtkVBox" id="vbox33"> <property name="visible">True</property> @@ -813,6 +816,8 @@ <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> <property name="y_options"></property> </packing> </child> @@ -837,6 +842,8 @@ <packing> <property name="left_attach">3</property> <property name="right_attach">4</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> <property name="y_options"></property> </packing> </child> @@ -858,6 +865,10 @@ <property name="visible">True</property> </object> <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> <property name="x_options">GTK_FILL</property> <property name="y_options">GTK_FILL</property> </packing> @@ -867,6 +878,8 @@ <property name="visible">True</property> </object> <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> <property name="x_options">GTK_FILL</property> @@ -880,6 +893,8 @@ <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> <property name="x_options">GTK_FILL</property> <property name="y_options">GTK_FILL</property> </packing> @@ -938,11 +953,14 @@ <object class="GtkScrolledWindow" id="scrolledwindow-size-leader"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> + <property name="hscrollbar_policy">automatic</property> <property name="vscrollbar_policy">automatic</property> + <property name="min-content-width">320</property> + <property name="min-content-height">240</property> <child> <object class="GtkViewport" id="viewport2"> <property name="visible">True</property> + <property name="shadow-type">none</property> <property name="resize_mode">queue</property> <child> <object class="GtkVBox" id="vbox-size-leader"> @@ -1567,12 +1585,15 @@ <object class="GtkScrolledWindow" id="scrolledwindow3"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> + <property name="hscrollbar_policy">automatic</property> <property name="vscrollbar_policy">automatic</property> + <property name="min-content-width">320</property> + <property name="min-content-height">240</property> <child> <object class="GtkViewport" id="viewport3"> <property name="visible">True</property> <property name="resize_mode">queue</property> + <property name="shadow-type">none</property> <child> <object class="GtkVBox" id="vbox39"> <property name="visible">True</property> @@ -2323,7 +2344,6 @@ </child> <child> <object class="GtkScrolledWindow" id="scrolledwindow41"> - <property name="height_request">38</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="border_width">12</property> diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c index ca4b1cb86c..d2111f0def 100644 --- a/addressbook/gui/contact-editor/e-contact-editor.c +++ b/addressbook/gui/contact-editor/e-contact-editor.c @@ -3026,7 +3026,9 @@ sensitize_all (EContactEditor *editor) static void init_all (EContactEditor *editor) { - GtkRequisition tab_req; + const gchar *contents[] = { "viewport1", "viewport2", "viewport3", "text-comments" }; + gint ii; + GtkRequisition tab_req, requisition; GtkWidget *widget; init_simple (editor); @@ -3038,13 +3040,50 @@ init_all (EContactEditor *editor) /* with so many scrolled windows, we need to * do some manual sizing */ - widget = e_builder_get_widget (editor->builder, "vbox-size-leader"); - gtk_widget_get_preferred_size (widget, &tab_req, NULL); + requisition.width = -1; + requisition.height = -1; - widget = e_builder_get_widget ( - editor->builder, "scrolledwindow-size-leader"), - gtk_widget_set_size_request ( - widget, tab_req.width, tab_req.height + 8); + for (ii = 0; ii < G_N_ELEMENTS (contents); ii++) { + widget = e_builder_get_widget (editor->builder, contents[ii]); + + gtk_widget_get_preferred_size (widget, NULL, &tab_req); + + if (tab_req.width > requisition.width) + requisition.width = tab_req.width; + if (tab_req.height > requisition.height) + requisition.height = tab_req.height; + } + + if (requisition.width > 0 && requisition.height > 0) { + GtkWindow *window; + GdkScreen *screen; + GdkRectangle monitor_area; + gint x = 0, y = 0, monitor, width, height; + + window = GTK_WINDOW (e_builder_get_widget (editor->builder, "contact editor")); + + gtk_widget_get_preferred_size (GTK_WIDGET (window), &tab_req, NULL); + width = tab_req.width - 320 + 24; + height = tab_req.height - 240 + 24; + + screen = gtk_window_get_screen (window); + gtk_window_get_position (window, &x, &y); + + monitor = gdk_screen_get_monitor_at_point (screen, x, y); + if (monitor < 0 || monitor >= gdk_screen_get_n_monitors (screen)) + monitor = 0; + + gdk_screen_get_monitor_workarea (screen, monitor, &monitor_area); + + if (requisition.width > monitor_area.width - width) + requisition.width = monitor_area.width - width; + + if (requisition.height > monitor_area.height - height) + requisition.height = monitor_area.height - height; + + if (requisition.width > 0 && requisition.height > 0) + gtk_window_set_default_size (window, width + requisition.width, height + requisition.height); + } } static void |