summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Neumair <cneumair@gnome.org>2008-07-21 19:43:13 +0000
committerChristian Neumair <cneumair@src.gnome.org>2008-07-21 19:43:13 +0000
commit9acdac108d6e732be8695bcd1aa3b4538dac1cbf (patch)
tree2982c79388b624664ed6bff394c0c41434a5773e
parent7511b597ce2366e038444f5d46b003abc797739f (diff)
downloadnautilus-9acdac108d6e732be8695bcd1aa3b4538dac1cbf.tar.gz
Fix eject icon click detection, also make it work in RTL locales.
2008-07-21 Christian Neumair <cneumair@gnome.org> * src/nautilus-places-sidebar.c (clicked_eject_button), (nautilus_places_sidebar_init): Fix eject icon click detection, also make it work in RTL locales. Ellipsize sidebar text. Slightly reduce eject icon xpad. svn path=/trunk/; revision=14400
-rw-r--r--ChangeLog7
-rw-r--r--src/nautilus-places-sidebar.c65
2 files changed, 53 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index 073b16329..0f262af6a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2008-07-21 Christian Neumair <cneumair@gnome.org>
+ * src/nautilus-places-sidebar.c (clicked_eject_button),
+ (nautilus_places_sidebar_init):
+ Fix eject icon click detection, also make it work in RTL locales.
+ Ellipsize sidebar text. Slightly reduce eject icon xpad.
+
+2008-07-21 Christian Neumair <cneumair@gnome.org>
+
* configure.in:
Post release version bump.
diff --git a/src/nautilus-places-sidebar.c b/src/nautilus-places-sidebar.c
index 1f34cd7cd..d06782ad0 100644
--- a/src/nautilus-places-sidebar.c
+++ b/src/nautilus-places-sidebar.c
@@ -54,7 +54,7 @@
#include "nautilus-places-sidebar.h"
#include "nautilus-window.h"
-#define EJECT_BUTTON_XPAD 6
+#define EJECT_BUTTON_XPAD 5
#define NAUTILUS_PLACES_SIDEBAR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_PLACES_SIDEBAR, NautilusPlacesSidebarClass))
#define NAUTILUS_IS_PLACES_SIDEBAR(obj) (GTK_CHECK_TYPE ((obj), NAUTILUS_TYPE_PLACES_SIDEBAR))
@@ -63,7 +63,8 @@
typedef struct {
GtkScrolledWindow parent;
GtkTreeView *tree_view;
- GtkCellRenderer *eject_cell_renderer;
+ GtkCellRenderer *icon_cell_renderer;
+ GtkCellRenderer *eject_text_cell_renderer;
char *uri;
GtkListStore *store;
GtkTreeModel *filter_model;
@@ -611,28 +612,46 @@ clicked_eject_button (NautilusPlacesSidebar *sidebar,
GdkEvent *event = gtk_get_current_event ();
GdkEventButton *button_event = (GdkEventButton *) event;
GtkTreeViewColumn *column;
- GtkSettings *settings;
- int pos, renderer_width, eject_button_size;
- int renderer_x2;
+ GtkTextDirection direction;
+ int width, total_width;
+ int eject_button_size;
*path = NULL;
if (event->type == GDK_BUTTON_PRESS &&
gtk_tree_view_get_path_at_pos (sidebar->tree_view,
button_event->x, button_event->y,
- path, &column, NULL, NULL) &&
- gtk_tree_view_column_cell_get_position (column, sidebar->eject_cell_renderer,
- &pos, &renderer_width)) {
- renderer_x2 = MIN (pos + renderer_width, GTK_WIDGET (sidebar)->allocation.width);
+ path, &column, NULL, NULL)) {
+ total_width = 0;
+
+ gtk_widget_style_get (GTK_WIDGET (sidebar->tree_view),
+ "horizontal-separator", &width,
+ NULL);
+ total_width += width / 2;
+
+ direction = gtk_widget_get_direction (GTK_WIDGET (sidebar->tree_view));
+ if (direction != GTK_TEXT_DIR_RTL) {
+ gtk_tree_view_column_cell_get_position (column,
+ sidebar->icon_cell_renderer,
+ NULL, &width);
+ total_width += width;
+
+ gtk_tree_view_column_cell_get_position (column,
+ sidebar->eject_text_cell_renderer,
+ NULL, &width);
+ total_width += width;
+ }
+
+ total_width += EJECT_BUTTON_XPAD;
- settings = gtk_widget_get_settings (GTK_WIDGET (sidebar));
- gtk_icon_size_lookup_for_settings (settings, GTK_ICON_SIZE_MENU,
- &eject_button_size, NULL);
+ eject_button_size = nautilus_get_icon_size_for_stock_size (GTK_ICON_SIZE_MENU);
- if (button_event->x > renderer_x2 - (EJECT_BUTTON_XPAD + eject_button_size) &&
- button_event->x < renderer_x2 - EJECT_BUTTON_XPAD) {
+ if (button_event->x - total_width >= 0 &&
+ button_event->x - total_width <= eject_button_size) {
return TRUE;
}
+ } else if (event->type == GDK_BUTTON_RELEASE) {
+ g_object_set_data (G_OBJECT (sidebar->tree_view), "myrect", NULL);
}
if (*path != NULL) {
@@ -2152,6 +2171,7 @@ nautilus_places_sidebar_init (NautilusPlacesSidebar *sidebar)
col = GTK_TREE_VIEW_COLUMN (gtk_tree_view_column_new ());
cell = gtk_cell_renderer_pixbuf_new ();
+ sidebar->icon_cell_renderer = cell;
gtk_tree_view_column_pack_start (col, cell, FALSE);
gtk_tree_view_column_set_attributes (col, cell,
"pixbuf", PLACES_SIDEBAR_COLUMN_ICON,
@@ -2159,35 +2179,42 @@ nautilus_places_sidebar_init (NautilusPlacesSidebar *sidebar)
cell = gtk_cell_renderer_text_new ();
- gtk_tree_view_column_pack_start (col, cell, FALSE);
+ sidebar->eject_text_cell_renderer = cell;
+ gtk_tree_view_column_pack_start (col, cell, TRUE);
gtk_tree_view_column_set_attributes (col, cell,
"text", PLACES_SIDEBAR_COLUMN_NAME,
"visible", PLACES_SIDEBAR_COLUMN_EJECT,
NULL);
+ g_object_set (cell,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ "ellipsize-set", TRUE,
+ NULL);
cell = gtk_cell_renderer_pixbuf_new ();
- sidebar->eject_cell_renderer = cell;
g_object_set (cell,
"mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE,
"icon-name", "media-eject",
"stock-size", GTK_ICON_SIZE_MENU,
- "xalign", 1.0,
"xpad", EJECT_BUTTON_XPAD,
NULL);
- gtk_tree_view_column_pack_start (col, cell, TRUE);
+ gtk_tree_view_column_pack_start (col, cell, FALSE);
gtk_tree_view_column_set_attributes (col, cell,
"visible", PLACES_SIDEBAR_COLUMN_EJECT,
NULL);
cell = gtk_cell_renderer_text_new ();
- gtk_tree_view_column_pack_end (col, cell, FALSE);
+ gtk_tree_view_column_pack_start (col, cell, TRUE);
g_object_set (G_OBJECT (cell), "editable", FALSE, NULL);
gtk_tree_view_column_set_attributes (col, cell,
"text", PLACES_SIDEBAR_COLUMN_NAME,
"visible", PLACES_SIDEBAR_COLUMN_NO_EJECT,
"editable-set", PLACES_SIDEBAR_COLUMN_BOOKMARK,
NULL);
+ g_object_set (cell,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ "ellipsize-set", TRUE,
+ NULL);
g_signal_connect (cell, "edited",
G_CALLBACK (bookmarks_edited), sidebar);