summaryrefslogtreecommitdiff
path: root/drivemount/drive-button.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivemount/drive-button.c')
-rw-r--r--drivemount/drive-button.c119
1 files changed, 32 insertions, 87 deletions
diff --git a/drivemount/drive-button.c b/drivemount/drive-button.c
index 4d22a04c..6bc598a5 100644
--- a/drivemount/drive-button.c
+++ b/drivemount/drive-button.c
@@ -367,7 +367,6 @@ drive_button_update (gpointer user_data)
GIcon *icon;
int width, height;
GdkPixbuf *pixbuf = NULL, *scaled;
- GdkPixbuf *tmp_pixbuf = NULL;
GtkRequisition button_req, image_req;
char *display_name, *tip;
@@ -404,118 +403,64 @@ drive_button_update (gpointer user_data)
g_object_unref (pixbuf);
pixbuf = scaled;
}
- if (gtk_bin_get_child (GTK_BIN (self)) != NULL)
- gtk_image_set_from_pixbuf (GTK_IMAGE (gtk_bin_get_child (GTK_BIN (self))), pixbuf);
- return FALSE;
+ if (gtk_bin_get_child (GTK_BIN (self)) != NULL)
+ gtk_image_set_from_pixbuf (GTK_IMAGE (gtk_bin_get_child (GTK_BIN (self))), pixbuf);
+ return FALSE;
}
- gboolean is_mounted = FALSE;
+ if (self->volume) {
+ GMount *mount;
- if (self->volume)
- {
- GMount *mount;
+ display_name = g_volume_get_name (self->volume);
+ mount = g_volume_get_mount (self->volume);
- display_name = g_volume_get_name (self->volume);
- mount = g_volume_get_mount (self->volume);
+ if (mount)
+ tip = g_strdup_printf ("%s\n%s", display_name, _("(mounted)"));
+ else
+ tip = g_strdup_printf ("%s\n%s", display_name, _("(not mounted)"));
- if (mount)
- {
- is_mounted = TRUE;
- tip = g_strdup_printf ("%s\n%s", display_name, _("(mounted)"));
- }
- else
- {
- is_mounted = FALSE;
- tip = g_strdup_printf ("%s\n%s", display_name, _("(not mounted)"));
- }
- if (mount)
- icon = g_mount_get_icon (mount);
- else
- icon = g_volume_get_icon (self->volume);
+ if (mount)
+ icon = g_mount_get_icon (mount);
+ else
+ icon = g_volume_get_icon (self->volume);
- if (mount)
- g_object_unref (mount);
- } else
- {
- is_mounted = TRUE;
- display_name = g_mount_get_name (self->mount);
- tip = g_strdup_printf ("%s\n%s", display_name, _("(mounted)"));
- icon = g_mount_get_icon (self->mount);
+ if (mount)
+ g_object_unref (mount);
+ } else {
+ display_name = g_mount_get_name (self->mount);
+ tip = g_strdup_printf ("%s\n%s", display_name, _("(mounted)"));
+ icon = g_mount_get_icon (self->mount);
}
gtk_widget_set_tooltip_text (GTK_WIDGET (self), tip);
g_free (tip);
g_free (display_name);
+
screen = gtk_widget_get_screen (GTK_WIDGET (self));
icon_theme = gtk_icon_theme_get_for_screen (screen);
icon_info = gtk_icon_theme_lookup_by_gicon (icon_theme, icon,
- MIN (width, height),
- GTK_ICON_LOOKUP_USE_BUILTIN);
+ MIN (width, height),
+ GTK_ICON_LOOKUP_USE_BUILTIN);
if (icon_info)
{
- pixbuf = gtk_icon_info_load_icon (icon_info, NULL);
- g_object_unref (icon_info);
+ pixbuf = gtk_icon_info_load_icon (icon_info, NULL);
+ g_object_unref (icon_info);
}
g_object_unref (icon);
if (!pixbuf)
- return FALSE;
-
- // make a copy of pixbuf becasue icon image can be shared by system
- tmp_pixbuf = gdk_pixbuf_copy (pixbuf);
- g_object_unref (pixbuf);
- g_assert (tmp_pixbuf != NULL);
+ return FALSE;
- // if mounted, draw a green sign on lower right corner
- if (is_mounted)
- {
- int icon_width, icon_height, rowstride, n_channels, x, y;
- guchar *pixels, *p;
-
- n_channels = gdk_pixbuf_get_n_channels (tmp_pixbuf);
- g_assert (gdk_pixbuf_get_colorspace (tmp_pixbuf) == GDK_COLORSPACE_RGB);
- g_assert (gdk_pixbuf_get_bits_per_sample (tmp_pixbuf) == 8);
- g_assert (gdk_pixbuf_get_has_alpha (tmp_pixbuf));
- g_assert (n_channels == 4);
- icon_width = gdk_pixbuf_get_width (tmp_pixbuf);
- icon_height = gdk_pixbuf_get_height (tmp_pixbuf);
-
- rowstride = gdk_pixbuf_get_rowstride (tmp_pixbuf);
- pixels = gdk_pixbuf_get_pixels (tmp_pixbuf);
-
- GtkStyleContext *context;
- GdkRGBA color;
- context = gtk_widget_get_style_context (GTK_WIDGET(self));
-
- gtk_style_context_save (context);
- gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL);
- gtk_style_context_set_state (context, GTK_STATE_FLAG_SELECTED);
- gtk_style_context_get_background_color (context,
- gtk_style_context_get_state (context),
- &color);
- gtk_style_context_restore (context);
-
- for (y = 0 ; y < icon_height ; y += 2)
- for (x = 0; x < icon_width; x += 2)
- {
- p = pixels + y * rowstride + x * n_channels;
- p[0] = color.red * 255;
- p[1] = color.green * 255;
- p[2] = color.blue * 255;
- p[3] = 255;
- }
- }
-
- scaled = gdk_pixbuf_scale_simple (tmp_pixbuf, width, height, GDK_INTERP_BILINEAR);
+ scaled = gdk_pixbuf_scale_simple (pixbuf, width, height, GDK_INTERP_BILINEAR);
if (scaled) {
- g_object_unref (tmp_pixbuf);
- tmp_pixbuf = scaled;
+ g_object_unref (pixbuf);
+ pixbuf = scaled;
}
- gtk_image_set_from_pixbuf (GTK_IMAGE (gtk_bin_get_child (GTK_BIN (self))), tmp_pixbuf);
- g_object_unref (tmp_pixbuf);
+ gtk_image_set_from_pixbuf (GTK_IMAGE (gtk_bin_get_child (GTK_BIN (self))), pixbuf);
+ g_object_unref (pixbuf);
gtk_widget_get_preferred_size (GTK_WIDGET (self), NULL, &button_req);