summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkfilechooserdefault.c1
-rw-r--r--gtk/gtkpathbar.c100
2 files changed, 50 insertions, 51 deletions
diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
index 5f40411551..9c98d871b5 100644
--- a/gtk/gtkfilechooserdefault.c
+++ b/gtk/gtkfilechooserdefault.c
@@ -4852,6 +4852,7 @@ save_folder_combo_create (GtkFileChooserDefault *impl)
NULL);
cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell,
"text", SHORTCUTS_COL_NAME,
diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c
index a1a5093bd2..621d487870 100644
--- a/gtk/gtkpathbar.c
+++ b/gtk/gtkpathbar.c
@@ -330,7 +330,13 @@ gtk_path_bar_size_request (GtkWidget *widget,
{
button_data = BUTTON_DATA (list->data);
gtk_widget_size_request (button_data->button, &child_requisition);
- requisition->width = MAX (child_requisition.width, requisition->width);
+
+ if (button_data->type == NORMAL_BUTTON)
+ /* Use 2*Height as button width because of ellipsized label. */
+ requisition->width = MAX (child_requisition.height * 2, requisition->width);
+ else
+ requisition->width = MAX (child_requisition.width, requisition->width);
+
requisition->height = MAX (child_requisition.height, requisition->height);
}
@@ -455,7 +461,6 @@ gtk_path_bar_size_allocate (GtkWidget *widget,
gint border_width;
gboolean need_sliders = FALSE;
gint up_slider_offset = 0;
- gint down_slider_offset = 0;
widget->allocation = *allocation;
@@ -572,9 +577,14 @@ gtk_path_bar_size_allocate (GtkWidget *widget,
for (list = first_button; list; list = list->prev)
{
- child = BUTTON_DATA (list->data)->button;
+ ButtonData *button_data;
+
+ button_data = BUTTON_DATA (list->data);
+ child = button_data->button;
+
+ child_allocation.width = MIN (child->requisition.width,
+ allocation_width - (path_bar->spacing + path_bar->slider_width) * 2);
- child_allocation.width = child->requisition.width;
if (direction == GTK_TEXT_DIR_RTL)
child_allocation.x -= child_allocation.width;
@@ -591,21 +601,21 @@ gtk_path_bar_size_allocate (GtkWidget *widget,
break;
}
- gtk_widget_set_child_visible (BUTTON_DATA (list->data)->button, TRUE);
+ if (child_allocation.width < child->requisition.width)
+ {
+ if (!gtk_widget_get_has_tooltip (child))
+ gtk_widget_set_tooltip_text (child, button_data->dir_name);
+ }
+ else if (gtk_widget_get_has_tooltip (child))
+ gtk_widget_set_tooltip_text (child, NULL);
+
+ gtk_widget_set_child_visible (child, TRUE);
gtk_widget_size_allocate (child, &child_allocation);
if (direction == GTK_TEXT_DIR_RTL)
- {
- child_allocation.x -= path_bar->spacing;
- down_slider_offset = child_allocation.x - widget->allocation.x - path_bar->slider_width;
- down_slider_offset = border_width;
- }
+ child_allocation.x -= path_bar->spacing;
else
- {
- down_slider_offset = child_allocation.x - widget->allocation.x;
- down_slider_offset = allocation->width - border_width - path_bar->slider_width;
- child_allocation.x += child_allocation.width + path_bar->spacing;
- }
+ child_allocation.x += child_allocation.width + path_bar->spacing;
}
/* Now we go hide all the widgets that don't fit */
while (list)
@@ -633,7 +643,14 @@ gtk_path_bar_size_allocate (GtkWidget *widget,
if (need_sliders)
{
child_allocation.width = path_bar->slider_width;
- child_allocation.x = down_slider_offset + allocation->x;
+
+ if (direction == GTK_TEXT_DIR_RTL)
+ child_allocation.x = border_width;
+ else
+ child_allocation.x = allocation->width - border_width - path_bar->slider_width;
+
+ child_allocation.x += allocation->x;
+
gtk_widget_size_allocate (path_bar->down_slider_button, &child_allocation);
gtk_widget_set_child_visible (path_bar->down_slider_button, TRUE);
@@ -775,11 +792,7 @@ gtk_path_bar_scroll_down (GtkPathBar *path_bar)
{
GList *list;
GList *down_button = NULL;
- GList *up_button = NULL;
gint space_available;
- gint space_needed;
- gint border_width;
- GtkTextDirection direction;
if (path_bar->ignore_click)
{
@@ -795,9 +808,6 @@ gtk_path_bar_scroll_down (GtkPathBar *path_bar)
gtk_widget_queue_resize (GTK_WIDGET (path_bar));
- border_width = GTK_CONTAINER (path_bar)->border_width;
- direction = gtk_widget_get_direction (GTK_WIDGET (path_bar));
-
/* We find the button at the 'down' end that we have to make
* visible */
for (list = path_bar->button_list; list; list = list->next)
@@ -808,37 +818,24 @@ gtk_path_bar_scroll_down (GtkPathBar *path_bar)
break;
}
}
-
- /* Find the last visible button on the 'up' end
- */
- for (list = g_list_last (path_bar->button_list); list; list = list->prev)
- {
- if (gtk_widget_get_child_visible (BUTTON_DATA (list->data)->button))
- {
- up_button = list;
- break;
- }
- }
- /* We check if down_button might be NULL in cases where the pathbar's horizontal size is smaller
- * than the button and it doesn't get displayed. e.g., on Windows it might be "My Documents and Settings"
+ space_available = (GTK_WIDGET (path_bar)->allocation.width
+ - 2 * GTK_CONTAINER (path_bar)->border_width
+ - 2 * path_bar->spacing - 2 * path_bar->slider_width
+ - BUTTON_DATA (down_button->data)->button->allocation.width);
+ path_bar->first_scrolled_button = down_button;
+
+ /* We have space_available free space that's not being used.
+ * So we walk down from the end, adding buttons until we use all free space.
*/
- space_needed = down_button ? BUTTON_DATA (down_button->data)->button->allocation.width : 0 + path_bar->spacing;
- if (direction == GTK_TEXT_DIR_RTL)
- space_available = path_bar->down_slider_button->allocation.x - GTK_WIDGET (path_bar)->allocation.x;
- else
- space_available = (GTK_WIDGET (path_bar)->allocation.x + GTK_WIDGET (path_bar)->allocation.width - border_width) -
- (path_bar->down_slider_button->allocation.x + path_bar->down_slider_button->allocation.width);
-
- /* We have space_available extra space that's not being used. We
- * need space_needed space to make the button fit. So we walk down
- * from the end, removing buttons until we get all the space we
- * need. */
- while (space_available < space_needed)
+ while (space_available > 0)
{
- space_available += BUTTON_DATA (up_button->data)->button->allocation.width + path_bar->spacing;
- up_button = up_button->prev;
- path_bar->first_scrolled_button = up_button;
+ path_bar->first_scrolled_button = down_button;
+ down_button = down_button->next;
+ if (!down_button)
+ break;
+ space_available -= (BUTTON_DATA (down_button->data)->button->allocation.width
+ + path_bar->spacing);
}
}
@@ -1484,6 +1481,7 @@ make_directory_button (GtkPathBar *path_bar,
case NORMAL_BUTTON:
default:
button_data->label = gtk_label_new (NULL);
+ gtk_label_set_ellipsize (GTK_LABEL (button_data->label), PANGO_ELLIPSIZE_END);
label_alignment = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
gtk_container_add (GTK_CONTAINER (label_alignment), button_data->label);
child = label_alignment;