GtkPlacesSidebar: Simplify sidebar code

Make this code follow GTK+ styles and conventions better.
This commit is contained in:
Matthias Clasen
2015-06-23 16:28:18 -04:00
parent ae8c07c67c
commit 7f0606509d

View File

@ -73,7 +73,7 @@ enum
LAST_PROP LAST_PROP
}; };
static GParamSpec *gParamSpecs [LAST_PROP]; static GParamSpec *properties [LAST_PROP];
static void static void
gtk_sidebar_row_get_property (GObject *object, gtk_sidebar_row_get_property (GObject *object,
@ -86,88 +86,60 @@ gtk_sidebar_row_get_property (GObject *object,
switch (prop_id) switch (prop_id)
{ {
case PROP_SIDEBAR: case PROP_SIDEBAR:
{ g_value_set_object (value, self->sidebar);
g_value_set_object (value, self->sidebar); break;
break;
}
case PROP_ICON: case PROP_ICON:
{ g_value_set_object (value, self->icon);
g_value_set_object (value, self->icon); break;
break;
}
case PROP_LABEL: case PROP_LABEL:
{ g_value_set_string (value, self->label);
g_value_set_string (value, self->label); break;
break;
}
case PROP_TOOLTIP: case PROP_TOOLTIP:
{ g_value_set_string (value, self->tooltip);
g_value_set_string (value, self->tooltip); break;
break;
}
case PROP_EJECTABLE: case PROP_EJECTABLE:
{ g_value_set_boolean (value, self->ejectable);
g_value_set_boolean (value, self->ejectable); break;
break;
}
case PROP_ORDER_INDEX: case PROP_ORDER_INDEX:
{ g_value_set_int (value, self->order_index);
g_value_set_int (value, self->order_index); break;
break;
}
case PROP_SECTION_TYPE: case PROP_SECTION_TYPE:
{ g_value_set_int (value, self->section_type);
g_value_set_int (value, self->section_type); break;
break;
}
case PROP_PLACE_TYPE: case PROP_PLACE_TYPE:
{ g_value_set_int (value, self->place_type);
g_value_set_int (value, self->place_type); break;
break;
}
case PROP_URI: case PROP_URI:
{ g_value_set_string (value, self->uri);
g_value_set_string (value, self->uri); break;
break;
}
case PROP_DRIVE: case PROP_DRIVE:
{ g_value_set_object (value, self->drive);
g_value_set_object (value, self->drive); break;
break;
}
case PROP_VOLUME: case PROP_VOLUME:
{ g_value_set_object (value, self->volume);
g_value_set_object (value, self->volume); break;
break;
}
case PROP_MOUNT: case PROP_MOUNT:
{ g_value_set_object (value, self->mount);
g_value_set_object (value, self->mount); break;
break;
}
case PROP_SENSITIVE: case PROP_SENSITIVE:
{ g_value_set_boolean (value, self->sensitive);
g_value_set_boolean (value, self->sensitive); break;
break;
}
case PROP_PLACEHOLDER: case PROP_PLACEHOLDER:
{ g_value_set_boolean (value, self->placeholder);
g_value_set_boolean (value, self->placeholder); break;
break;
}
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -181,169 +153,116 @@ gtk_sidebar_row_set_property (GObject *object,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GtkSidebarRow *self = GTK_SIDEBAR_ROW (object); GtkSidebarRow *self = GTK_SIDEBAR_ROW (object);
GtkStyleContext *context;
switch (prop_id) switch (prop_id)
{ {
case PROP_SIDEBAR: case PROP_SIDEBAR:
{ self->sidebar = g_value_get_object (value);
self->sidebar = g_value_get_object (value); break;
break;
}
case PROP_ICON: case PROP_ICON:
{ g_set_object (&self->icon, g_value_get_object (value));
g_clear_object (&self->icon); if (self->icon != NULL)
if (value != NULL) gtk_image_set_from_gicon (GTK_IMAGE (self->icon_widget), self->icon, GTK_ICON_SIZE_MENU);
{ else
self->icon = g_object_ref (g_value_get_object (value)); gtk_image_clear (GTK_IMAGE (self->icon_widget));
gtk_image_set_from_gicon (GTK_IMAGE (self->icon_widget), self->icon, GTK_ICON_SIZE_MENU); break;
}
else
{
self->icon = NULL;
gtk_image_clear (GTK_IMAGE (self->icon_widget));
}
break;
}
case PROP_LABEL: case PROP_LABEL:
{ g_free (self->label);
g_free (self->label); self->label = g_strdup (g_value_get_string (value));
self->label = g_strdup (g_value_get_string (value)); gtk_label_set_text (GTK_LABEL (self->label_widget), self->label);
gtk_label_set_text (GTK_LABEL (self->label_widget), self->label); break;
break;
}
case PROP_TOOLTIP: case PROP_TOOLTIP:
{ g_free (self->tooltip);
g_free (self->tooltip); self->tooltip = g_strdup (g_value_get_string (value));
self->tooltip = g_strdup (g_value_get_string (value)); gtk_widget_set_tooltip_text (GTK_WIDGET (self), self->tooltip);
gtk_widget_set_tooltip_text (GTK_WIDGET (self), self->tooltip); break;
break;
}
case PROP_EJECTABLE: case PROP_EJECTABLE:
{ self->ejectable = g_value_get_boolean (value);
self->ejectable = g_value_get_boolean (value); if (self->ejectable)
if (self->ejectable) gtk_widget_show (self->eject_button);
gtk_widget_show (self->eject_button); else
else gtk_widget_hide (self->eject_button);
gtk_widget_hide (self->eject_button); break;
break;
}
case PROP_ORDER_INDEX: case PROP_ORDER_INDEX:
{ self->order_index = g_value_get_int (value);
self->order_index = g_value_get_int (value); break;
break;
}
case PROP_SECTION_TYPE: case PROP_SECTION_TYPE:
{ self->section_type = g_value_get_int (value);
self->section_type = g_value_get_int (value); if (self->section_type != SECTION_COMPUTER)
if (self->section_type != SECTION_COMPUTER) gtk_label_set_ellipsize (GTK_LABEL (self->label_widget), PANGO_ELLIPSIZE_END);
gtk_label_set_ellipsize (GTK_LABEL (self->label_widget), PANGO_ELLIPSIZE_END); else
else gtk_label_set_ellipsize (GTK_LABEL (self->label_widget), PANGO_ELLIPSIZE_NONE);
gtk_label_set_ellipsize (GTK_LABEL (self->label_widget), PANGO_ELLIPSIZE_NONE); break;
break;
}
case PROP_PLACE_TYPE: case PROP_PLACE_TYPE:
{ self->place_type = g_value_get_int (value);
self->place_type = g_value_get_int (value); break;
break;
}
case PROP_URI: case PROP_URI:
{ g_free (self->uri);
g_free (self->uri); self->uri = g_strdup (g_value_get_string (value));
self->uri = g_strdup (g_value_get_string (value)); break;
break;
}
case PROP_DRIVE: case PROP_DRIVE:
{ g_set_object (&self->drive, g_value_get_object (value));
gpointer *object; break;
g_clear_object (&self->drive);
object = g_value_get_object (value);
if (object != NULL)
self->drive = g_object_ref (object);
break;
}
case PROP_VOLUME: case PROP_VOLUME:
{ g_set_object (&self->volume, g_value_get_object (value));
gpointer *object; break;
g_clear_object (&self->volume);
object = g_value_get_object (value);
if (object != NULL)
self->volume = g_object_ref (object);
break;
}
case PROP_MOUNT: case PROP_MOUNT:
{ g_set_object (&self->mount, g_value_get_object (value));
gpointer *object; break;
g_clear_object (&self->mount);
object = g_value_get_object (value);
if (object != NULL)
self->mount = g_object_ref (object);
break;
}
case PROP_SENSITIVE: case PROP_SENSITIVE:
{ self->sensitive = g_value_get_boolean (value);
GtkStyleContext *style_context; context = gtk_widget_get_style_context (GTK_WIDGET (self));
/* Modifying the actual sensitivity of the widget makes the drag state
self->sensitive = g_value_get_boolean (value); * to change and calling drag-leave wich modifies the gtklistbox and a
style_context = gtk_widget_get_style_context (GTK_WIDGET (self)); * style race ocurs. So since we only use it for show which rows are
/* Modifying the actual sensitivity of the widget makes the drag state * drop targets, we can simple use a dim-label style
* to change and calling drag-leave wich modifies the gtklistbox and a */
* style race ocurs. So since we only use it for show which rows are if (self->sensitive)
* drop targets, we can simple use a dim-label style */ gtk_style_context_remove_class (context, "dim-label");
if (self->sensitive) else
gtk_style_context_remove_class (style_context, "dim-label"); gtk_style_context_add_class (context, "dim-label");
else break;
gtk_style_context_add_class (style_context, "dim-label");
break;
}
case PROP_PLACEHOLDER: case PROP_PLACEHOLDER:
{ self->placeholder = g_value_get_boolean (value);
GtkStyleContext *context; if (self->placeholder)
{
g_clear_object (&self->icon);
g_free (self->label);
self->label = NULL;
g_free (self->tooltip);
self->tooltip = NULL;
gtk_widget_set_tooltip_text (GTK_WIDGET (self), NULL);
self->ejectable = FALSE;
self->section_type = SECTION_BOOKMARKS;
self->place_type = PLACES_BOOKMARK_PLACEHOLDER;
g_free (self->uri);
self->uri = NULL;
g_clear_object (&self->drive);
g_clear_object (&self->volume);
g_clear_object (&self->mount);
self->placeholder = g_value_get_boolean (value); gtk_container_foreach (GTK_CONTAINER (self),
if (self->placeholder) (GtkCallback) gtk_widget_destroy,
{ NULL);
g_clear_object (&self->icon);
g_free (self->label);
self->label = NULL;
g_free (self->tooltip);
self->tooltip = NULL;
gtk_widget_set_tooltip_text (GTK_WIDGET (self), NULL);
self->ejectable = FALSE;
self->section_type = SECTION_BOOKMARKS;
self->place_type = PLACES_BOOKMARK_PLACEHOLDER;
g_free (self->uri);
self->uri = NULL;
g_clear_object (&self->drive);
g_clear_object (&self->volume);
g_clear_object (&self->mount);
gtk_container_foreach (GTK_CONTAINER (self), context = gtk_widget_get_style_context (GTK_WIDGET (self));
(GtkCallback) gtk_widget_destroy, gtk_style_context_add_class (context, "sidebar-placeholder-row");
NULL); }
break;
context = gtk_widget_get_style_context (GTK_WIDGET (self));
gtk_style_context_add_class (context, "sidebar-placeholder-row");
}
break;
}
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -417,7 +336,7 @@ gtk_sidebar_row_class_init (GtkSidebarRowClass *klass)
object_class->set_property = gtk_sidebar_row_set_property; object_class->set_property = gtk_sidebar_row_set_property;
object_class->finalize = gtk_sidebar_row_finalize; object_class->finalize = gtk_sidebar_row_finalize;
gParamSpecs [PROP_SIDEBAR] = properties [PROP_SIDEBAR] =
g_param_spec_object ("sidebar", g_param_spec_object ("sidebar",
"Sidebar", "Sidebar",
"Sidebar", "Sidebar",
@ -425,59 +344,48 @@ gtk_sidebar_row_class_init (GtkSidebarRowClass *klass)
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS)); G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_SIDEBAR,
gParamSpecs [PROP_SIDEBAR]); properties [PROP_ICON] =
gParamSpecs [PROP_ICON] =
g_param_spec_object ("icon", g_param_spec_object ("icon",
"icon", "icon",
"The place icon.", "The place icon.",
G_TYPE_ICON, G_TYPE_ICON,
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS)); G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_ICON,
gParamSpecs [PROP_ICON]);
gParamSpecs [PROP_LABEL] = properties [PROP_LABEL] =
g_param_spec_string ("label", g_param_spec_string ("label",
"label", "label",
"The label text.", "The label text.",
NULL, NULL,
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS)); G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_LABEL,
gParamSpecs [PROP_LABEL]);
gParamSpecs [PROP_TOOLTIP] = properties [PROP_TOOLTIP] =
g_param_spec_string ("tooltip", g_param_spec_string ("tooltip",
"Tooltip", "Tooltip",
"Tooltip", "Tooltip",
NULL, NULL,
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS)); G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_TOOLTIP,
gParamSpecs [PROP_TOOLTIP]);
gParamSpecs [PROP_EJECTABLE] = properties [PROP_EJECTABLE] =
g_param_spec_boolean ("ejectable", g_param_spec_boolean ("ejectable",
"Ejectable", "Ejectable",
"Ejectable", "Ejectable",
FALSE, FALSE,
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS)); G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_EJECTABLE,
gParamSpecs [PROP_EJECTABLE]);
gParamSpecs [PROP_ORDER_INDEX] = properties [PROP_ORDER_INDEX] =
g_param_spec_int ("order-index", g_param_spec_int ("order-index",
"OrderIndex", "OrderIndex",
"Order Index", "Order Index",
0, G_MAXINT, 0, 0, G_MAXINT, 0,
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS)); G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_ORDER_INDEX,
gParamSpecs [PROP_ORDER_INDEX]);
gParamSpecs [PROP_SECTION_TYPE] = properties [PROP_SECTION_TYPE] =
g_param_spec_int ("section-type", g_param_spec_int ("section-type",
"section type", "section type",
"The section type.", "The section type.",
@ -485,10 +393,8 @@ gtk_sidebar_row_class_init (GtkSidebarRowClass *klass)
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS | G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT_ONLY)); G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_SECTION_TYPE,
gParamSpecs [PROP_SECTION_TYPE]);
gParamSpecs [PROP_PLACE_TYPE] = properties [PROP_PLACE_TYPE] =
g_param_spec_int ("place-type", g_param_spec_int ("place-type",
"place type", "place type",
"The place type.", "The place type.",
@ -496,10 +402,8 @@ gtk_sidebar_row_class_init (GtkSidebarRowClass *klass)
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS | G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT_ONLY)); G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_PLACE_TYPE,
gParamSpecs [PROP_PLACE_TYPE]);
gParamSpecs [PROP_URI] = properties [PROP_URI] =
g_param_spec_string ("uri", g_param_spec_string ("uri",
"Uri", "Uri",
"Uri", "Uri",
@ -507,9 +411,8 @@ gtk_sidebar_row_class_init (GtkSidebarRowClass *klass)
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS)); G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_URI,
gParamSpecs [PROP_URI]); properties [PROP_DRIVE] =
gParamSpecs [PROP_DRIVE] =
g_param_spec_object ("drive", g_param_spec_object ("drive",
"Drive", "Drive",
"Drive", "Drive",
@ -517,10 +420,8 @@ gtk_sidebar_row_class_init (GtkSidebarRowClass *klass)
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS)); G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_DRIVE,
gParamSpecs [PROP_DRIVE]);
gParamSpecs [PROP_VOLUME] = properties [PROP_VOLUME] =
g_param_spec_object ("volume", g_param_spec_object ("volume",
"Volume", "Volume",
"Volume", "Volume",
@ -528,10 +429,8 @@ gtk_sidebar_row_class_init (GtkSidebarRowClass *klass)
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS)); G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_VOLUME,
gParamSpecs [PROP_VOLUME]);
gParamSpecs [PROP_MOUNT] = properties [PROP_MOUNT] =
g_param_spec_object ("mount", g_param_spec_object ("mount",
"Mount", "Mount",
"Mount", "Mount",
@ -539,19 +438,16 @@ gtk_sidebar_row_class_init (GtkSidebarRowClass *klass)
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS)); G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_MOUNT,
gParamSpecs [PROP_MOUNT]); properties [PROP_SENSITIVE] =
gParamSpecs [PROP_SENSITIVE] =
g_param_spec_boolean ("sensitive", g_param_spec_boolean ("sensitive",
"Sensitive", "Sensitive",
"Make the row sensitive or not", "Make the row sensitive or not",
TRUE, TRUE,
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS)); G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_SENSITIVE,
gParamSpecs [PROP_SENSITIVE]);
gParamSpecs [PROP_PLACEHOLDER] = properties [PROP_PLACEHOLDER] =
g_param_spec_boolean ("placeholder", g_param_spec_boolean ("placeholder",
"Placeholder", "Placeholder",
"Placeholder", "Placeholder",
@ -559,8 +455,8 @@ gtk_sidebar_row_class_init (GtkSidebarRowClass *klass)
(G_PARAM_READWRITE | (G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS)); G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_PLACEHOLDER,
gParamSpecs [PROP_PLACEHOLDER]); g_object_class_install_properties (object_class, LAST_PROP, properties);
gtk_widget_class_set_template_from_resource (widget_class, gtk_widget_class_set_template_from_resource (widget_class,
"/org/gtk/libgtk/ui/gtksidebarrow.ui"); "/org/gtk/libgtk/ui/gtksidebarrow.ui");